edit-pdf 0.0.8 → 0.0.10

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,7 +1,7 @@
1
- (function(hl,V){typeof exports=="object"&&typeof module<"u"?V(exports,require("react"),require("pdfjs-dist"),require("pdf-lib")):typeof define=="function"&&define.amd?define(["exports","react","pdfjs-dist","pdf-lib"],V):(hl=typeof globalThis<"u"?globalThis:hl||self,V(hl.PdfEditor={},hl.React,hl.pdfjsDist,hl.pdfLib))})(this,(function(hl,V,iZ,Jl){"use strict";var ZZ=typeof document<"u"?document.currentScript:null,ol={exports:{}},nl={};var pZ;function Wc(){if(pZ)return nl;pZ=1;var l=Symbol.for("react.transitional.element"),Z=Symbol.for("react.fragment");function d(W,c,G){var M=null;if(G!==void 0&&(M=""+G),c.key!==void 0&&(M=""+c.key),"key"in c){G={};for(var i in c)i!=="key"&&(G[i]=c[i])}else G=c;return c=G.ref,{$$typeof:l,type:W,key:M,ref:c!==void 0?c:null,props:G}}return nl.Fragment=Z,nl.jsx=d,nl.jsxs=d,nl}var Dl={};var aZ;function mc(){return aZ||(aZ=1,process.env.NODE_ENV!=="production"&&(function(){function l(I){if(I==null)return null;if(typeof I=="function")return I.$$typeof===B?null:I.displayName||I.name||null;if(typeof I=="string")return I;switch(I){case m:return"Fragment";case j:return"Profiler";case Y:return"StrictMode";case h:return"Suspense";case k:return"SuspenseList";case C:return"Activity"}if(typeof I=="object")switch(typeof I.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),I.$$typeof){case o:return"Portal";case N:return I.displayName||"Context";case F:return(I._context.displayName||"Context")+".Consumer";case U:var P=I.render;return I=I.displayName,I||(I=P.displayName||P.name||"",I=I!==""?"ForwardRef("+I+")":"ForwardRef"),I;case t:return P=I.displayName||null,P!==null?P:l(I.type)||"Memo";case R:P=I._payload,I=I._init;try{return l(I(P))}catch{}}return null}function Z(I){return""+I}function d(I){try{Z(I);var P=!1}catch{P=!0}if(P){P=console;var r=P.error,$=typeof Symbol=="function"&&Symbol.toStringTag&&I[Symbol.toStringTag]||I.constructor.name||"Object";return r.call(P,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",$),Z(I)}}function W(I){if(I===m)return"<>";if(typeof I=="object"&&I!==null&&I.$$typeof===R)return"<...>";try{var P=l(I);return P?"<"+P+">":"<...>"}catch{return"<...>"}}function c(){var I=J.A;return I===null?null:I.getOwner()}function G(){return Error("react-stack-top-frame")}function M(I){if(Q.call(I,"key")){var P=Object.getOwnPropertyDescriptor(I,"key").get;if(P&&P.isReactWarning)return!1}return I.key!==void 0}function i(I,P){function r(){dl||(dl=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",P))}r.isReactWarning=!0,Object.defineProperty(I,"key",{get:r,configurable:!0})}function L(){var I=l(this.type);return A[I]||(A[I]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),I=this.props.ref,I!==void 0?I:null}function w(I,P,r,$,Nl,ul){var ll=r.ref;return I={$$typeof:p,type:I,key:P,props:r,_owner:$},(ll!==void 0?ll:null)!==null?Object.defineProperty(I,"ref",{enumerable:!1,get:L}):Object.defineProperty(I,"ref",{enumerable:!1,value:null}),I._store={},Object.defineProperty(I._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(I,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(I,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:Nl}),Object.defineProperty(I,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:ul}),Object.freeze&&(Object.freeze(I.props),Object.freeze(I)),I}function x(I,P,r,$,Nl,ul){var ll=P.children;if(ll!==void 0)if($)if(H(ll)){for($=0;$<ll.length;$++)O(ll[$]);Object.freeze&&Object.freeze(ll)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else O(ll);if(Q.call(P,"key")){ll=l(I);var Yl=Object.keys(P).filter(function(al){return al!=="key"});$=0<Yl.length?"{key: someKey, "+Yl.join(": ..., ")+": ...}":"{key: someKey}",ml[ll+$]||(Yl=0<Yl.length?"{"+Yl.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
1
+ (function(ge,h){typeof exports=="object"&&typeof module<"u"?h(exports,require("react"),require("pdfjs-dist"),require("pdf-lib")):typeof define=="function"&&define.amd?define(["exports","react","pdfjs-dist","pdf-lib"],h):(ge=typeof globalThis<"u"?globalThis:ge||self,h(ge.PdfEditor={},ge.React,ge.pdfjsDist,ge.pdfLib))})(this,(function(ge,h,nt,Re){"use strict";var Ne={exports:{}},Ae={};var vt;function sn(){if(vt)return Ae;vt=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function o(s,t,a){var f=null;if(a!==void 0&&(f=""+a),t.key!==void 0&&(f=""+t.key),"key"in t){a={};for(var S in t)S!=="key"&&(a[S]=t[S])}else a=t;return t=a.ref,{$$typeof:e,type:s,key:f,ref:t!==void 0?t:null,props:a}}return Ae.Fragment=n,Ae.jsx=o,Ae.jsxs=o,Ae}var De={};var St;function rn(){return St||(St=1,process.env.NODE_ENV!=="production"&&(function(){function e(m){if(m==null)return null;if(typeof m=="function")return m.$$typeof===Q?null:m.displayName||m.name||null;if(typeof m=="string")return m;switch(m){case r:return"Fragment";case M:return"Profiler";case d:return"StrictMode";case g:return"Suspense";case Y:return"SuspenseList";case L:return"Activity"}if(typeof m=="object")switch(typeof m.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),m.$$typeof){case _:return"Portal";case c:return m.displayName||"Context";case W:return(m._context.displayName||"Context")+".Consumer";case D:var U=m.render;return m=m.displayName,m||(m=U.displayName||U.name||"",m=m!==""?"ForwardRef("+m+")":"ForwardRef"),m;case P:return U=m.displayName||null,U!==null?U:e(m.type)||"Memo";case T:U=m._payload,m=m._init;try{return e(m(U))}catch{}}return null}function n(m){return""+m}function o(m){try{n(m);var U=!1}catch{U=!0}if(U){U=console;var K=U.error,$=typeof Symbol=="function"&&Symbol.toStringTag&&m[Symbol.toStringTag]||m.constructor.name||"Object";return K.call(U,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",$),n(m)}}function s(m){if(m===r)return"<>";if(typeof m=="object"&&m!==null&&m.$$typeof===T)return"<...>";try{var U=e(m);return U?"<"+U+">":"<...>"}catch{return"<...>"}}function t(){var m=R.A;return m===null?null:m.getOwner()}function a(){return Error("react-stack-top-frame")}function f(m){if(z.call(m,"key")){var U=Object.getOwnPropertyDescriptor(m,"key").get;if(U&&U.isReactWarning)return!1}return m.key!==void 0}function S(m,U){function K(){ie||(ie=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",U))}K.isReactWarning=!0,Object.defineProperty(m,"key",{get:K,configurable:!0})}function x(){var m=e(this.type);return J[m]||(J[m]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),m=this.props.ref,m!==void 0?m:null}function E(m,U,K,$,de,me){var te=K.ref;return m={$$typeof:k,type:m,key:U,props:K,_owner:$},(te!==void 0?te:null)!==null?Object.defineProperty(m,"ref",{enumerable:!1,get:x}):Object.defineProperty(m,"ref",{enumerable:!1,value:null}),m._store={},Object.defineProperty(m._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(m,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(m,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:de}),Object.defineProperty(m,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:me}),Object.freeze&&(Object.freeze(m.props),Object.freeze(m)),m}function j(m,U,K,$,de,me){var te=U.children;if(te!==void 0)if($)if(B(te)){for($=0;$<te.length;$++)O(te[$]);Object.freeze&&Object.freeze(te)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else O(te);if(z.call(U,"key")){te=e(m);var ue=Object.keys(U).filter(function(Ce){return Ce!=="key"});$=0<ue.length?"{key: someKey, "+ue.join(": ..., ")+": ...}":"{key: someKey}",ae[te+$]||(ue=0<ue.length?"{"+ue.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
2
  let props = %s;
3
3
  <%s {...props} />
4
4
  React keys must be passed directly to JSX without using spread:
5
5
  let props = %s;
6
- <%s key={someKey} {...props} />`,$,ll,Yl,ll),ml[ll+$]=!0)}if(ll=null,r!==void 0&&(d(r),ll=""+r),M(P)&&(d(P.key),ll=""+P.key),"key"in P){r={};for(var Xl in P)Xl!=="key"&&(r[Xl]=P[Xl])}else r=P;return ll&&i(r,typeof I=="function"?I.displayName||I.name||"Unknown":I),w(I,ll,r,c(),Nl,ul)}function O(I){E(I)?I._store&&(I._store.validated=1):typeof I=="object"&&I!==null&&I.$$typeof===R&&(I._payload.status==="fulfilled"?E(I._payload.value)&&I._payload.value._store&&(I._payload.value._store.validated=1):I._store&&(I._store.validated=1))}function E(I){return typeof I=="object"&&I!==null&&I.$$typeof===p}var D=V,p=Symbol.for("react.transitional.element"),o=Symbol.for("react.portal"),m=Symbol.for("react.fragment"),Y=Symbol.for("react.strict_mode"),j=Symbol.for("react.profiler"),F=Symbol.for("react.consumer"),N=Symbol.for("react.context"),U=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),k=Symbol.for("react.suspense_list"),t=Symbol.for("react.memo"),R=Symbol.for("react.lazy"),C=Symbol.for("react.activity"),B=Symbol.for("react.client.reference"),J=D.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Q=Object.prototype.hasOwnProperty,H=Array.isArray,e=console.createTask?console.createTask:function(){return null};D={react_stack_bottom_frame:function(I){return I()}};var dl,A={},f=D.react_stack_bottom_frame.bind(D,G)(),cl=e(W(G)),ml={};Dl.Fragment=m,Dl.jsx=function(I,P,r){var $=1e4>J.recentlyCreatedOwnerStacks++;return x(I,P,r,!1,$?Error("react-stack-top-frame"):f,$?e(W(I)):cl)},Dl.jsxs=function(I,P,r){var $=1e4>J.recentlyCreatedOwnerStacks++;return x(I,P,r,!0,$?Error("react-stack-top-frame"):f,$?e(W(I)):cl)}})()),Dl}var RZ;function Gc(){return RZ||(RZ=1,process.env.NODE_ENV==="production"?ol.exports=Wc():ol.exports=mc()),ol.exports}var z=Gc();function Xc(l,Z){const d=l.icons,W=l.aliases||Object.create(null),c=Object.create(null);function G(M){if(d[M])return c[M]=[];if(!(M in c)){c[M]=null;const i=W[M]&&W[M].parent,L=i&&G(i);L&&(c[M]=[i].concat(L))}return c[M]}return Object.keys(d).concat(Object.keys(W)).forEach(G),c}const tZ=Object.freeze({left:0,top:0,width:16,height:16}),Kl=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),cZ=Object.freeze({...tZ,...Kl}),dZ=Object.freeze({...cZ,body:"",hidden:!1});function Nc(l,Z){const d={};!l.hFlip!=!Z.hFlip&&(d.hFlip=!0),!l.vFlip!=!Z.vFlip&&(d.vFlip=!0);const W=((l.rotate||0)+(Z.rotate||0))%4;return W&&(d.rotate=W),d}function SZ(l,Z){const d=Nc(l,Z);for(const W in dZ)W in Kl?W in l&&!(W in d)&&(d[W]=Kl[W]):W in Z?d[W]=Z[W]:W in l&&(d[W]=l[W]);return d}function Yc(l,Z,d){const W=l.icons,c=l.aliases||Object.create(null);let G={};function M(i){G=SZ(W[i]||c[i],G)}return M(Z),d.forEach(M),SZ(l,G)}function xZ(l,Z){const d=[];if(typeof l!="object"||typeof l.icons!="object")return d;l.not_found instanceof Array&&l.not_found.forEach(c=>{Z(c,null),d.push(c)});const W=Xc(l);for(const c in W){const G=W[c];G&&(Z(c,Yc(l,c,G)),d.push(c))}return d}const Mc={provider:"",aliases:{},not_found:{},...tZ};function bZ(l,Z){for(const d in Z)if(d in l&&typeof l[d]!=typeof Z[d])return!1;return!0}function wZ(l){if(typeof l!="object"||l===null)return null;const Z=l;if(typeof Z.prefix!="string"||!l.icons||typeof l.icons!="object"||!bZ(l,Mc))return null;const d=Z.icons;for(const c in d){const G=d[c];if(!c||typeof G.body!="string"||!bZ(G,dZ))return null}const W=Z.aliases||Object.create(null);for(const c in W){const G=W[c],M=G.parent;if(!c||typeof M!="string"||!d[M]&&!W[M]||!bZ(G,dZ))return null}return Z}const jZ=Object.create(null);function yc(l,Z){return{provider:l,prefix:Z,icons:Object.create(null),missing:new Set}}function pl(l,Z){const d=jZ[l]||(jZ[l]=Object.create(null));return d[Z]||(d[Z]=yc(l,Z))}function JZ(l,Z){return wZ(Z)?xZ(Z,(d,W)=>{W?l.icons[d]=W:l.missing.add(d)}):[]}function Tc(l,Z,d){try{if(typeof d.body=="string")return l.icons[Z]={...d},!0}catch{}return!1}const nZ=/^[a-z0-9]+(-[a-z0-9]+)*$/,gl=(l,Z,d,W="")=>{const c=l.split(":");if(l.slice(0,1)==="@"){if(c.length<2||c.length>3)return null;W=c.shift().slice(1)}if(c.length>3||!c.length)return null;if(c.length>1){const i=c.pop(),L=c.pop(),w={provider:c.length>0?c[0]:W,prefix:L,name:i};return Z&&!El(w)?null:w}const G=c[0],M=G.split("-");if(M.length>1){const i={provider:W,prefix:M.shift(),name:M.join("-")};return Z&&!El(i)?null:i}if(d&&W===""){const i={provider:W,prefix:"",name:G};return Z&&!El(i,d)?null:i}return null},El=(l,Z)=>l?!!((Z&&l.prefix===""||l.prefix)&&l.name):!1;let Ul=!1;function DZ(l){return typeof l=="boolean"&&(Ul=l),Ul}function UZ(l){const Z=typeof l=="string"?gl(l,!0,Ul):l;if(Z){const d=pl(Z.provider,Z.prefix),W=Z.name;return d.icons[W]||(d.missing.has(W)?null:void 0)}}function Vc(l,Z){const d=gl(l,!0,Ul);if(!d)return!1;const W=pl(d.provider,d.prefix);return Z?Tc(W,d.name,Z):(W.missing.add(d.name),!0)}function hc(l,Z){if(typeof l!="object")return!1;if(typeof Z!="string"&&(Z=l.provider||""),Ul&&!Z&&!l.prefix){let c=!1;return wZ(l)&&(l.prefix="",xZ(l,(G,M)=>{Vc(G,M)&&(c=!0)})),c}const d=l.prefix;if(!El({prefix:d,name:"a"}))return!1;const W=pl(Z,d);return!!JZ(W,l)}const OZ=Object.freeze({width:null,height:null}),FZ=Object.freeze({...OZ,...Kl}),sc=/(-?[0-9.]*[0-9]+[0-9.]*)/g,Lc=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function kZ(l,Z,d){if(Z===1)return l;if(d=d||100,typeof l=="number")return Math.ceil(l*Z*d)/d;if(typeof l!="string")return l;const W=l.split(sc);if(W===null||!W.length)return l;const c=[];let G=W.shift(),M=Lc.test(G);for(;;){if(M){const i=parseFloat(G);isNaN(i)?c.push(G):c.push(Math.ceil(i*Z*d)/d)}else c.push(G);if(G=W.shift(),G===void 0)return c.join("");M=!M}}function uc(l,Z="defs"){let d="";const W=l.indexOf("<"+Z);for(;W>=0;){const c=l.indexOf(">",W),G=l.indexOf("</"+Z);if(c===-1||G===-1)break;const M=l.indexOf(">",G);if(M===-1)break;d+=l.slice(c+1,G).trim(),l=l.slice(0,W).trim()+l.slice(M+1)}return{defs:d,content:l}}function zc(l,Z){return l?"<defs>"+l+"</defs>"+Z:Z}function Ic(l,Z,d){const W=uc(l);return zc(W.defs,Z+W.content+d)}const ic=l=>l==="unset"||l==="undefined"||l==="none";function pc(l,Z){const d={...cZ,...l},W={...FZ,...Z},c={left:d.left,top:d.top,width:d.width,height:d.height};let G=d.body;[d,W].forEach(o=>{const m=[],Y=o.hFlip,j=o.vFlip;let F=o.rotate;Y?j?F+=2:(m.push("translate("+(c.width+c.left).toString()+" "+(0-c.top).toString()+")"),m.push("scale(-1 1)"),c.top=c.left=0):j&&(m.push("translate("+(0-c.left).toString()+" "+(c.height+c.top).toString()+")"),m.push("scale(1 -1)"),c.top=c.left=0);let N;switch(F<0&&(F-=Math.floor(F/4)*4),F=F%4,F){case 1:N=c.height/2+c.top,m.unshift("rotate(90 "+N.toString()+" "+N.toString()+")");break;case 2:m.unshift("rotate(180 "+(c.width/2+c.left).toString()+" "+(c.height/2+c.top).toString()+")");break;case 3:N=c.width/2+c.left,m.unshift("rotate(-90 "+N.toString()+" "+N.toString()+")");break}F%2===1&&(c.left!==c.top&&(N=c.left,c.left=c.top,c.top=N),c.width!==c.height&&(N=c.width,c.width=c.height,c.height=N)),m.length&&(G=Ic(G,'<g transform="'+m.join(" ")+'">',"</g>"))});const M=W.width,i=W.height,L=c.width,w=c.height;let x,O;M===null?(O=i===null?"1em":i==="auto"?w:i,x=kZ(O,L/w)):(x=M==="auto"?L:M,O=i===null?kZ(x,w/L):i==="auto"?w:i);const E={},D=(o,m)=>{ic(m)||(E[o]=m.toString())};D("width",x),D("height",O);const p=[c.left,c.top,L,w];return E.viewBox=p.join(" "),{attributes:E,viewBox:p,body:G}}const ac=/\sid="(\S+)"/g,Rc="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let tc=0;function Sc(l,Z=Rc){const d=[];let W;for(;W=ac.exec(l);)d.push(W[1]);if(!d.length)return l;const c="suffix"+(Math.random()*16777216|Date.now()).toString(16);return d.forEach(G=>{const M=typeof Z=="function"?Z(G):Z+(tc++).toString(),i=G.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");l=l.replace(new RegExp('([#;"])('+i+')([")]|\\.[a-z])',"g"),"$1"+M+c+"$3")}),l=l.replace(new RegExp(c,"g"),""),l}const WZ=Object.create(null);function xc(l,Z){WZ[l]=Z}function mZ(l){return WZ[l]||WZ[""]}function GZ(l){let Z;if(typeof l.resources=="string")Z=[l.resources];else if(Z=l.resources,!(Z instanceof Array)||!Z.length)return null;return{resources:Z,path:l.path||"/",maxURL:l.maxURL||500,rotate:l.rotate||750,timeout:l.timeout||5e3,random:l.random===!0,index:l.index||0,dataAfterTimeout:l.dataAfterTimeout!==!1}}const XZ=Object.create(null),Ol=["https://api.simplesvg.com","https://api.unisvg.com"],Ql=[];for(;Ol.length>0;)Ol.length===1||Math.random()>.5?Ql.push(Ol.shift()):Ql.push(Ol.pop());XZ[""]=GZ({resources:["https://api.iconify.design"].concat(Ql)});function wc(l,Z){const d=GZ(Z);return d===null?!1:(XZ[l]=d,!0)}function NZ(l){return XZ[l]}let CZ=(()=>{let l;try{if(l=fetch,typeof l=="function")return l}catch{}})();function jc(l,Z){const d=NZ(l);if(!d)return 0;let W;if(!d.maxURL)W=0;else{let c=0;d.resources.forEach(M=>{c=Math.max(c,M.length)});const G=Z+".json?icons=";W=d.maxURL-c-d.path.length-G.length}return W}function Jc(l){return l===404}const nc=(l,Z,d)=>{const W=[],c=jc(l,Z),G="icons";let M={type:G,provider:l,prefix:Z,icons:[]},i=0;return d.forEach((L,w)=>{i+=L.length+1,i>=c&&w>0&&(W.push(M),M={type:G,provider:l,prefix:Z,icons:[]},i=L.length),M.icons.push(L)}),W.push(M),W};function Dc(l){if(typeof l=="string"){const Z=NZ(l);if(Z)return Z.path}return"/"}const Uc={prepare:nc,send:(l,Z,d)=>{if(!CZ){d("abort",424);return}let W=Dc(Z.provider);switch(Z.type){case"icons":{const G=Z.prefix,i=Z.icons.join(","),L=new URLSearchParams({icons:i});W+=G+".json?"+L.toString();break}case"custom":{const G=Z.uri;W+=G.slice(0,1)==="/"?G.slice(1):G;break}default:d("abort",400);return}let c=503;CZ(l+W).then(G=>{const M=G.status;if(M!==200){setTimeout(()=>{d(Jc(M)?"abort":"next",M)});return}return c=501,G.json()}).then(G=>{if(typeof G!="object"||G===null){setTimeout(()=>{G===404?d("abort",G):d("next",c)});return}setTimeout(()=>{d("success",G)})}).catch(()=>{d("next",c)})}};function oZ(l,Z){l.forEach(d=>{const W=d.loaderCallbacks;W&&(d.loaderCallbacks=W.filter(c=>c.id!==Z))})}function Oc(l){l.pendingCallbacksFlag||(l.pendingCallbacksFlag=!0,setTimeout(()=>{l.pendingCallbacksFlag=!1;const Z=l.loaderCallbacks?l.loaderCallbacks.slice(0):[];if(!Z.length)return;let d=!1;const W=l.provider,c=l.prefix;Z.forEach(G=>{const M=G.icons,i=M.pending.length;M.pending=M.pending.filter(L=>{if(L.prefix!==c)return!0;const w=L.name;if(l.icons[w])M.loaded.push({provider:W,prefix:c,name:w});else if(l.missing.has(w))M.missing.push({provider:W,prefix:c,name:w});else return d=!0,!0;return!1}),M.pending.length!==i&&(d||oZ([l],G.id),G.callback(M.loaded.slice(0),M.missing.slice(0),M.pending.slice(0),G.abort))})}))}let Fc=0;function kc(l,Z,d){const W=Fc++,c=oZ.bind(null,d,W);if(!Z.pending.length)return c;const G={id:W,icons:Z,callback:l,abort:c};return d.forEach(M=>{(M.loaderCallbacks||(M.loaderCallbacks=[])).push(G)}),c}function Cc(l){const Z={loaded:[],missing:[],pending:[]},d=Object.create(null);l.sort((c,G)=>c.provider!==G.provider?c.provider.localeCompare(G.provider):c.prefix!==G.prefix?c.prefix.localeCompare(G.prefix):c.name.localeCompare(G.name));let W={provider:"",prefix:"",name:""};return l.forEach(c=>{if(W.name===c.name&&W.prefix===c.prefix&&W.provider===c.provider)return;W=c;const G=c.provider,M=c.prefix,i=c.name,L=d[G]||(d[G]=Object.create(null)),w=L[M]||(L[M]=pl(G,M));let x;i in w.icons?x=Z.loaded:M===""||w.missing.has(i)?x=Z.missing:x=Z.pending;const O={provider:G,prefix:M,name:i};x.push(O)}),Z}function oc(l,Z=!0,d=!1){const W=[];return l.forEach(c=>{const G=typeof c=="string"?gl(c,Z,d):c;G&&W.push(G)}),W}const Kc={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function gc(l,Z,d,W){const c=l.resources.length,G=l.random?Math.floor(Math.random()*c):l.index;let M;if(l.random){let h=l.resources.slice(0);for(M=[];h.length>1;){const k=Math.floor(Math.random()*h.length);M.push(h[k]),h=h.slice(0,k).concat(h.slice(k+1))}M=M.concat(h)}else M=l.resources.slice(G).concat(l.resources.slice(0,G));const i=Date.now();let L="pending",w=0,x,O=null,E=[],D=[];typeof W=="function"&&D.push(W);function p(){O&&(clearTimeout(O),O=null)}function o(){L==="pending"&&(L="aborted"),p(),E.forEach(h=>{h.status==="pending"&&(h.status="aborted")}),E=[]}function m(h,k){k&&(D=[]),typeof h=="function"&&D.push(h)}function Y(){return{startTime:i,payload:Z,status:L,queriesSent:w,queriesPending:E.length,subscribe:m,abort:o}}function j(){L="failed",D.forEach(h=>{h(void 0,x)})}function F(){E.forEach(h=>{h.status==="pending"&&(h.status="aborted")}),E=[]}function N(h,k,t){const R=k!=="success";switch(E=E.filter(C=>C!==h),L){case"pending":break;case"failed":if(R||!l.dataAfterTimeout)return;break;default:return}if(k==="abort"){x=t,j();return}if(R){x=t,E.length||(M.length?U():j());return}if(p(),F(),!l.random){const C=l.resources.indexOf(h.resource);C!==-1&&C!==l.index&&(l.index=C)}L="completed",D.forEach(C=>{C(t)})}function U(){if(L!=="pending")return;p();const h=M.shift();if(h===void 0){if(E.length){O=setTimeout(()=>{p(),L==="pending"&&(F(),j())},l.timeout);return}j();return}const k={status:"pending",resource:h,callback:(t,R)=>{N(k,t,R)}};E.push(k),w++,O=setTimeout(U,l.rotate),d(h,Z,k.callback)}return setTimeout(U),Y}function KZ(l){const Z={...Kc,...l};let d=[];function W(){d=d.filter(i=>i().status==="pending")}function c(i,L,w){const x=gc(Z,i,L,(O,E)=>{W(),w&&w(O,E)});return d.push(x),x}function G(i){return d.find(L=>i(L))||null}return{query:c,find:G,setIndex:i=>{Z.index=i},getIndex:()=>Z.index,cleanup:W}}function gZ(){}const YZ=Object.create(null);function Ec(l){if(!YZ[l]){const Z=NZ(l);if(!Z)return;const d=KZ(Z),W={config:Z,redundancy:d};YZ[l]=W}return YZ[l]}function Qc(l,Z,d){let W,c;if(typeof l=="string"){const G=mZ(l);if(!G)return d(void 0,424),gZ;c=G.send;const M=Ec(l);M&&(W=M.redundancy)}else{const G=GZ(l);if(G){W=KZ(G);const M=l.resources?l.resources[0]:"",i=mZ(M);i&&(c=i.send)}}return!W||!c?(d(void 0,424),gZ):W.query(Z,c,d)().abort}function EZ(){}function Hc(l){l.iconsLoaderFlag||(l.iconsLoaderFlag=!0,setTimeout(()=>{l.iconsLoaderFlag=!1,Oc(l)}))}function Pc(l){const Z=[],d=[];return l.forEach(W=>{(W.match(nZ)?Z:d).push(W)}),{valid:Z,invalid:d}}function Fl(l,Z,d){function W(){const c=l.pendingIcons;Z.forEach(G=>{c&&c.delete(G),l.icons[G]||l.missing.add(G)})}if(d&&typeof d=="object")try{if(!JZ(l,d).length){W();return}}catch(c){console.error(c)}W(),Hc(l)}function QZ(l,Z){l instanceof Promise?l.then(d=>{Z(d)}).catch(()=>{Z(null)}):Z(l)}function Bc(l,Z){l.iconsToLoad?l.iconsToLoad=l.iconsToLoad.concat(Z).sort():l.iconsToLoad=Z,l.iconsQueueFlag||(l.iconsQueueFlag=!0,setTimeout(()=>{l.iconsQueueFlag=!1;const{provider:d,prefix:W}=l,c=l.iconsToLoad;if(delete l.iconsToLoad,!c||!c.length)return;const G=l.loadIcon;if(l.loadIcons&&(c.length>1||!G)){QZ(l.loadIcons(c,W,d),x=>{Fl(l,c,x)});return}if(G){c.forEach(x=>{const O=G(x,W,d);QZ(O,E=>{const D=E?{prefix:W,icons:{[x]:E}}:null;Fl(l,[x],D)})});return}const{valid:M,invalid:i}=Pc(c);if(i.length&&Fl(l,i,null),!M.length)return;const L=W.match(nZ)?mZ(d):null;if(!L){Fl(l,M,null);return}L.prepare(d,W,M).forEach(x=>{Qc(d,x,O=>{Fl(l,x.icons,O)})})}))}const ec=(l,Z)=>{const d=oc(l,!0,DZ()),W=Cc(d);if(!W.pending.length){let L=!0;return Z&&setTimeout(()=>{L&&Z(W.loaded,W.missing,W.pending,EZ)}),()=>{L=!1}}const c=Object.create(null),G=[];let M,i;return W.pending.forEach(L=>{const{provider:w,prefix:x}=L;if(x===i&&w===M)return;M=w,i=x,G.push(pl(w,x));const O=c[w]||(c[w]=Object.create(null));O[x]||(O[x]=[])}),W.pending.forEach(L=>{const{provider:w,prefix:x,name:O}=L,E=pl(w,x),D=E.pendingIcons||(E.pendingIcons=new Set);D.has(O)||(D.add(O),c[w][x].push(O))}),G.forEach(L=>{const w=c[L.provider][L.prefix];w.length&&Bc(L,w)}),Z?kc(Z,W,G):EZ};function vc(l,Z){const d={...l};for(const W in Z){const c=Z[W],G=typeof c;W in OZ?(c===null||c&&(G==="string"||G==="number"))&&(d[W]=c):G===typeof d[W]&&(d[W]=W==="rotate"?c%4:c)}return d}const Ac=/[\s,]+/;function fc(l,Z){Z.split(Ac).forEach(d=>{switch(d.trim()){case"horizontal":l.hFlip=!0;break;case"vertical":l.vFlip=!0;break}})}function rc(l,Z=0){const d=l.replace(/^-?[0-9.]*/,"");function W(c){for(;c<0;)c+=4;return c%4}if(d===""){const c=parseInt(l);return isNaN(c)?0:W(c)}else if(d!==l){let c=0;switch(d){case"%":c=25;break;case"deg":c=90}if(c){let G=parseFloat(l.slice(0,l.length-d.length));return isNaN(G)?0:(G=G/c,G%1===0?W(G):0)}}return Z}function qc(l,Z){let d=l.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const W in Z)d+=" "+W+'="'+Z[W]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+d+">"+l+"</svg>"}function _c(l){return l.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\s+/g," ")}function $c(l){return"data:image/svg+xml,"+_c(l)}function ld(l){return'url("'+$c(l)+'")'}let kl;function Zd(){try{kl=window.trustedTypes.createPolicy("iconify",{createHTML:l=>l})}catch{kl=null}}function cd(l){return kl===void 0&&Zd(),kl?kl.createHTML(l):l}const HZ={...FZ,inline:!1},dd={xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},bd={display:"inline-block"},MZ={backgroundColor:"currentColor"},PZ={backgroundColor:"transparent"},BZ={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},eZ={WebkitMask:MZ,mask:MZ,background:PZ};for(const l in eZ){const Z=eZ[l];for(const d in BZ)Z[l+d]=BZ[d]}const Wd={...HZ,inline:!0};function vZ(l){return l+(l.match(/^[-0-9.]+$/)?"px":"")}const md=(l,Z,d)=>{const W=Z.inline?Wd:HZ,c=vc(W,Z),G=Z.mode||"svg",M={},i=Z.style||{},L={...G==="svg"?dd:{}};if(d){const m=gl(d,!1,!0);if(m){const Y=["iconify"],j=["provider","prefix"];for(const F of j)m[F]&&Y.push("iconify--"+m[F]);L.className=Y.join(" ")}}for(let m in Z){const Y=Z[m];if(Y!==void 0)switch(m){case"icon":case"style":case"children":case"onLoad":case"mode":case"ssr":case"fallback":break;case"_ref":L.ref=Y;break;case"className":L[m]=(L[m]?L[m]+" ":"")+Y;break;case"inline":case"hFlip":case"vFlip":c[m]=Y===!0||Y==="true"||Y===1;break;case"flip":typeof Y=="string"&&fc(c,Y);break;case"color":M.color=Y;break;case"rotate":typeof Y=="string"?c[m]=rc(Y):typeof Y=="number"&&(c[m]=Y);break;case"ariaHidden":case"aria-hidden":Y!==!0&&Y!=="true"&&delete L["aria-hidden"];break;default:W[m]===void 0&&(L[m]=Y)}}const w=pc(l,c),x=w.attributes;if(c.inline&&(M.verticalAlign="-0.125em"),G==="svg"){L.style={...M,...i},Object.assign(L,x);let m=0,Y=Z.id;return typeof Y=="string"&&(Y=Y.replace(/-/g,"_")),L.dangerouslySetInnerHTML={__html:cd(Sc(w.body,Y?()=>Y+"ID"+m++:"iconifyReact"))},V.createElement("svg",L)}const{body:O,width:E,height:D}=l,p=G==="mask"||(G==="bg"?!1:O.indexOf("currentColor")!==-1),o=qc(O,{...x,width:E+"",height:D+""});return L.style={...M,"--svg":ld(o),width:vZ(x.width),height:vZ(x.height),...bd,...p?MZ:PZ,...i},V.createElement("span",L)};if(DZ(!0),xc("",Uc),typeof document<"u"&&typeof window<"u"){const l=window;if(l.IconifyPreload!==void 0){const Z=l.IconifyPreload,d="Invalid IconifyPreload syntax.";typeof Z=="object"&&Z!==null&&(Z instanceof Array?Z:[Z]).forEach(W=>{try{(typeof W!="object"||W===null||W instanceof Array||typeof W.icons!="object"||typeof W.prefix!="string"||!hc(W))&&console.error(d)}catch{console.error(d)}})}if(l.IconifyProviders!==void 0){const Z=l.IconifyProviders;if(typeof Z=="object"&&Z!==null)for(let d in Z){const W="IconifyProviders["+d+"] is invalid.";try{const c=Z[d];if(typeof c!="object"||!c||c.resources===void 0)continue;wc(d,c)||console.error(W)}catch{console.error(W)}}}}function AZ(l){const[Z,d]=V.useState(!!l.ssr),[W,c]=V.useState({});function G(D){if(D){const p=l.icon;if(typeof p=="object")return{name:"",data:p};const o=UZ(p);if(o)return{name:p,data:o}}return{name:""}}const[M,i]=V.useState(G(!!l.ssr));function L(){const D=W.callback;D&&(D(),c({}))}function w(D){if(JSON.stringify(M)!==JSON.stringify(D))return L(),i(D),!0}function x(){var D;const p=l.icon;if(typeof p=="object"){w({name:"",data:p});return}const o=UZ(p);if(w({name:p,data:o}))if(o===void 0){const m=ec([p],x);c({callback:m})}else o&&((D=l.onLoad)===null||D===void 0||D.call(l,p))}V.useEffect(()=>(d(!0),L),[]),V.useEffect(()=>{Z&&x()},[l.icon,Z]);const{name:O,data:E}=M;return E?md({...cZ,...E},l,O):l.children?l.children:l.fallback?l.fallback:V.createElement("span",{})}const bl=V.forwardRef((l,Z)=>AZ({...l,_ref:Z}));V.forwardRef((l,Z)=>AZ({inline:!0,...l,_ref:Z}));const Gd=({isActive:l,onActivate:Z})=>z.jsx("button",{onClick:Z,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:l?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Box Highlight",children:z.jsx(bl,{icon:"mdi:border-style",width:"20",height:"20"})}),Xd=({isActive:l,highlightColor:Z,highlightStrokeWidth:d,onColorChange:W,onStrokeWidthChange:c})=>l?z.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[z.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Highlight Color:"}),z.jsx("input",{type:"color",value:Z,onChange:G=>W(G.target.value),style:{width:"40px",height:"32px",border:"1px solid #ccc",borderRadius:"4px",cursor:"pointer"}})]})}):null,Nd=({isActive:l,onActivate:Z})=>z.jsx("button",{onClick:Z,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:l?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Pen Highlighter",children:z.jsx(bl,{icon:"mdi:pen",width:"20",height:"20"})}),Yd=({isActive:l,penColor:Z,penStrokeWidth:d,onColorChange:W,onStrokeWidthChange:c})=>l?z.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:[z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[z.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Pen Color:"}),z.jsx("input",{type:"color",value:Z,onChange:G=>W(G.target.value),style:{width:"40px",height:"32px",border:"1px solid #ccc",borderRadius:"4px",cursor:"pointer"}})]}),z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[z.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Width:"}),z.jsx("input",{type:"range",min:1,max:50,value:d,onChange:G=>c(Number(G.target.value)),style:{width:"80px"}}),z.jsxs("span",{style:{fontSize:"12px",minWidth:"30px"},children:[d,"px"]})]})]}):null,Md=({isActive:l,onActivate:Z})=>z.jsx("button",{onClick:Z,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:l?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Text",children:z.jsx(bl,{icon:"mdi:format-text",width:"20",height:"20"})}),yd=({isActive:l,textColor:Z,onColorChange:d})=>l?z.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[z.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Text Color:"}),z.jsx("input",{type:"color",value:Z,onChange:W=>d(W.target.value),style:{width:"40px",height:"32px",border:"1px solid #ccc",borderRadius:"4px",cursor:"pointer"}})]})}):null,Td=({isActive:l,onActivate:Z})=>z.jsx("button",{onClick:Z,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:l?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Add Image",children:z.jsx(bl,{icon:"mdi:image-outline",width:"20",height:"20"})}),Vd=({isActive:l,hasSelectedImage:Z,onImageSelect:d})=>l?z.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:Z?z.jsx("span",{style:{fontSize:"12px",color:"#666"},children:"Click on PDF to place image"}):z.jsxs(z.Fragment,{children:[z.jsx("span",{style:{fontSize:"12px",color:"#666"},children:"Select an image to add:"}),z.jsx("button",{onClick:d,style:{padding:"6px 12px",border:"1px solid #4CAF50",borderRadius:"4px",backgroundColor:"#4CAF50",color:"white",cursor:"pointer",fontSize:"12px",fontWeight:500},children:"Choose Image"})]})}):null,hd=({isActive:l,onActivate:Z})=>z.jsx("button",{onClick:Z,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:l?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Eraser",children:z.jsx(bl,{icon:"mdi:eraser",width:"20",height:"20"})}),sd=({isActive:l,eraserWidth:Z,onWidthChange:d})=>l?z.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[z.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Eraser Width:"}),z.jsx("input",{type:"range",min:5,max:100,value:Z,onChange:W=>d(Number(W.target.value)),style:{width:"80px"}}),z.jsxs("span",{style:{fontSize:"12px",minWidth:"40px"},children:[Z,"px"]})]})}):null,Ld=({isActive:l,onActivate:Z})=>z.jsx("button",{onClick:Z,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:l?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Add Signature",children:z.jsx(bl,{icon:"mdi:draw-pen",width:"20",height:"20"})}),ud=({isActive:l,hasSavedSignature:Z})=>l?z.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:Z?z.jsx("span",{style:{fontSize:"12px",color:"#666"},children:"Click on PDF to place signature"}):z.jsx("span",{style:{fontSize:"12px",color:"#666"},children:'Click "Add Signature" to draw your signature'})}):null,zd=({savedSignature:l,onUseSaved:Z,onCreateNew:d,onDelete:W,onClose:c})=>z.jsx("div",{style:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0,0,0,0.5)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3},children:z.jsxs("div",{style:{backgroundColor:"white",padding:"24px",borderRadius:"8px",boxShadow:"0 4px 20px rgba(0,0,0,0.3)",maxWidth:"500px",width:"90%"},children:[z.jsx("h3",{style:{margin:"0 0 20px 0",fontSize:"20px",fontWeight:"600"},children:"Signature Options"}),z.jsxs("div",{style:{marginBottom:"20px"},children:[z.jsx("p",{style:{margin:"0 0 12px 0",fontSize:"14px",color:"#666"},children:"Your saved signature:"}),z.jsx("div",{style:{border:"2px solid #e5e7eb",borderRadius:"8px",padding:"20px",backgroundColor:"#f9fafb",display:"flex",alignItems:"center",justifyContent:"center",minHeight:"120px",marginBottom:"16px"},children:z.jsx("img",{src:l,alt:"Saved signature",style:{maxWidth:"100%",maxHeight:"100px",objectFit:"contain"}})})]}),z.jsxs("div",{style:{display:"flex",gap:"10px",flexWrap:"wrap"},children:[z.jsxs("button",{onClick:Z,style:{flex:"1",minWidth:"140px",padding:"12px 20px",border:"1px solid #4CAF50",borderRadius:"6px",backgroundColor:"#4CAF50",color:"white",cursor:"pointer",fontSize:"14px",fontWeight:"500",display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"},children:[z.jsx(bl,{icon:"mdi:check-circle",width:"18",height:"18"}),"Use Saved"]}),z.jsxs("button",{onClick:d,style:{flex:"1",minWidth:"140px",padding:"12px 20px",border:"1px solid #2196F3",borderRadius:"6px",backgroundColor:"#2196F3",color:"white",cursor:"pointer",fontSize:"14px",fontWeight:"500",display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"},children:[z.jsx(bl,{icon:"mdi:draw-pen",width:"18",height:"18"}),"Create New"]}),z.jsxs("button",{onClick:W,style:{flex:"1",minWidth:"140px",padding:"12px 20px",border:"1px solid #dc3545",borderRadius:"6px",backgroundColor:"white",color:"#dc3545",cursor:"pointer",fontSize:"14px",fontWeight:"500",display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"},children:[z.jsx(bl,{icon:"mdi:delete-outline",width:"18",height:"18"}),"Delete"]}),z.jsx("button",{onClick:c,style:{flex:"1",minWidth:"140px",padding:"12px 20px",border:"1px solid #ccc",borderRadius:"6px",backgroundColor:"white",color:"#666",cursor:"pointer",fontSize:"14px",fontWeight:"500"},children:"Cancel"})]})]})}),Id=({onSave:l,onClose:Z})=>{const d=V.useRef(null),[W,c]=V.useState(!1),[G,M]=V.useState(null);V.useEffect(()=>{const D=d.current;if(!D)return;const p=D.getContext("2d");if(!p)return;const o=window.devicePixelRatio||2,m=400,Y=200;D.width=m*o,D.height=Y*o,D.style.width=`${m}px`,D.style.height=`${Y}px`,p.scale(o,o),p.clearRect(0,0,m,Y),p.strokeStyle="#000000",p.lineWidth=4,p.lineCap="round",p.lineJoin="round"},[]);const i=D=>{const p=d.current;if(!p)return null;const o=p.getBoundingClientRect(),m="touches"in D?D.touches[0]?.clientX:D.clientX,Y="touches"in D?D.touches[0]?.clientY:D.clientY;return{x:m-o.left,y:Y-o.top}},L=D=>{const p=d.current?.getContext("2d");p&&(c(!0),M(D),p.strokeStyle="#000000",p.lineWidth=4,p.lineCap="round",p.lineJoin="round",p.beginPath(),p.moveTo(D.x,D.y))},w=D=>{if(!W||!G)return;const p=d.current?.getContext("2d");p&&(p.strokeStyle="#000000",p.lineWidth=4,p.lineCap="round",p.lineJoin="round",p.lineTo(D.x,D.y),p.stroke(),M(D))},x=()=>{c(!1),M(null)},O=()=>{const D=d.current?.getContext("2d"),p=d.current;if(!D||!p)return;D.clearRect(0,0,400,200)},E=()=>{const D=d.current?.toDataURL("image/png",1);D&&l(D)};return z.jsx("div",{style:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0,0,0,0.5)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3},children:z.jsxs("div",{style:{backgroundColor:"white",padding:"20px",borderRadius:"8px",boxShadow:"0 4px 20px rgba(0,0,0,0.3)",maxWidth:"90%",maxHeight:"90%"},children:[z.jsx("h3",{style:{margin:"0 0 15px 0",fontSize:"18px"},children:"Draw Your Signature"}),z.jsx("div",{style:{border:"2px dashed #ccc",borderRadius:"4px",padding:"10px",backgroundImage:"linear-gradient(45deg, #f0f0f0 25%, transparent 25%), linear-gradient(-45deg, #f0f0f0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #f0f0f0 75%), linear-gradient(-45deg, transparent 75%, #f0f0f0 75%)",backgroundSize:"20px 20px",backgroundPosition:"0 0, 0 10px, 10px -10px, -10px 0px",marginBottom:"15px"},children:z.jsx("canvas",{ref:d,style:{display:"block",cursor:"crosshair",touchAction:"none",backgroundColor:"transparent"},onMouseDown:D=>{const p=i(D);p&&L(p)},onMouseMove:D=>{const p=i(D);p&&w(p)},onMouseUp:x,onMouseLeave:x,onTouchStart:D=>{D.preventDefault();const p=i(D);p&&L(p)},onTouchMove:D=>{D.preventDefault();const p=i(D);p&&w(p)},onTouchEnd:x})}),z.jsxs("div",{style:{display:"flex",gap:"10px",justifyContent:"flex-end"},children:[z.jsx("button",{onClick:O,style:{padding:"8px 16px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:"white",cursor:"pointer"},children:"Clear"}),z.jsx("button",{onClick:E,style:{padding:"8px 16px",border:"1px solid #4CAF50",borderRadius:"4px",backgroundColor:"#4CAF50",color:"white",cursor:"pointer"},children:"Save Signature"}),z.jsx("button",{onClick:Z,style:{padding:"8px 16px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:"white",cursor:"pointer"},children:"Cancel"})]})]})})},id=({searchQuery:l,searchResultsCount:Z,currentSearchIndex:d,isSearching:W,onChange:c,onKeyDown:G,onPrev:M,onNext:i,onClear:L})=>z.jsx("div",{style:{display:"flex",alignItems:"center",gap:4,marginLeft:"auto",marginRight:"8px",position:"relative"},children:z.jsxs("div",{style:{position:"relative",display:"inline-block"},children:[z.jsx("input",{type:"text",placeholder:"Search in PDF...",value:l,onChange:w=>c(w.target.value),onKeyDown:G,style:{padding:"10px 80px 10px 12px",border:"1px solid #ccc",borderRadius:"4px",fontSize:"14px",width:"200px",outline:"none"}}),z.jsxs("div",{style:{position:"absolute",right:"4px",top:"50%",transform:"translateY(-50%)",display:"flex",alignItems:"center",gap:"2px"},children:[Z>0&&z.jsxs(z.Fragment,{children:[z.jsxs("span",{style:{fontSize:"11px",color:"#666",padding:"0 4px",userSelect:"none"},children:[d+1,"/",Z]}),z.jsx("button",{onClick:M,disabled:W,style:{padding:"2px 6px",border:"none",borderRadius:"2px",backgroundColor:"transparent",cursor:W?"not-allowed":"pointer",fontSize:"14px",color:W?"#ccc":"#666",display:"flex",alignItems:"center",justifyContent:"center",minWidth:"24px",height:"24px"},title:"Previous (Shift+Enter)",onMouseEnter:w=>{W||(w.currentTarget.style.backgroundColor="#e0e0e0")},onMouseLeave:w=>{w.currentTarget.style.backgroundColor="transparent"},children:z.jsx(bl,{icon:"mdi:chevron-up",width:"18",height:"18"})}),z.jsx("button",{onClick:i,disabled:W,style:{padding:"2px 6px",border:"none",borderRadius:"2px",backgroundColor:"transparent",cursor:W?"not-allowed":"pointer",fontSize:"14px",color:W?"#ccc":"#666",display:"flex",alignItems:"center",justifyContent:"center",minWidth:"24px",height:"24px"},title:"Next (Enter)",onMouseEnter:w=>{W||(w.currentTarget.style.backgroundColor="#e0e0e0")},onMouseLeave:w=>{w.currentTarget.style.backgroundColor="transparent"},children:z.jsx(bl,{icon:"mdi:chevron-down",width:"18",height:"18"})})]}),l&&z.jsx("button",{onClick:L,style:{padding:"2px 6px",border:"none",borderRadius:"2px",backgroundColor:"transparent",cursor:"pointer",fontSize:"14px",color:"#666",display:"flex",alignItems:"center",justifyContent:"center",minWidth:"24px",height:"24px",marginLeft:"2px"},title:"Clear (Esc)",onMouseEnter:w=>{w.currentTarget.style.backgroundColor="#e0e0e0"},onMouseLeave:w=>{w.currentTarget.style.backgroundColor="transparent"},children:z.jsx(bl,{icon:"mdi:close",width:"18",height:"18"})})]})]})}),pd=[{type:"rectangle",icon:"mdi:rectangle-outline",label:"Rectangle"},{type:"ellipse",icon:"mdi:ellipse-outline",label:"Ellipse"},{type:"circle",icon:"mdi:circle-outline",label:"Circle"},{type:"line",icon:"mdi:ray-start-end",label:"Line"},{type:"arrow",icon:"mdi:arrow-top-right",label:"Arrow"}],ad=({isActive:l,onActivate:Z})=>z.jsx("button",{onClick:Z,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:l?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Shape Tool",children:z.jsx(bl,{icon:"mdi:shape-outline",width:"20",height:"20"})}),Rd=({isActive:l,selectedShape:Z,strokeColor:d,strokeWidth:W,rotation:c,hasSelection:G,onShapeChange:M,onStrokeColorChange:i,onStrokeWidthChange:L,onRotationChange:w,onApplySelectionSettings:x})=>l?z.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:[z.jsx("div",{style:{display:"flex",gap:6,alignItems:"center"},children:pd.map(O=>z.jsx("button",{onClick:()=>M(O.type),style:{padding:"6px 10px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:Z===O.type?"#cce5ff":"white",cursor:"pointer",display:"flex",alignItems:"center",gap:4,fontSize:"12px",transition:"background-color 0.2s"},title:O.label,children:z.jsx(bl,{icon:O.icon,width:"16",height:"16"})},O.type))}),z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[z.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Stroke:"}),z.jsx("input",{type:"color",value:d,onChange:O=>i(O.target.value),style:{width:"40px",height:"32px",border:"1px solid #ccc",borderRadius:"4px",cursor:"pointer"},title:"Stroke Color"})]}),z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[z.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Width:"}),z.jsx("input",{type:"range",min:1,max:20,value:W,onChange:O=>L(Number(O.target.value)),style:{width:"80px"},title:`Stroke Width: ${W}px`}),z.jsxs("span",{style:{fontSize:"12px",minWidth:"30px"},children:[W,"px"]})]}),z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[z.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Rotate:"}),z.jsx("input",{type:"range",min:0,max:360,value:c,onChange:O=>w(Number(O.target.value)),style:{width:"80px"},title:`Rotation: ${c}°`}),z.jsxs("span",{style:{fontSize:"12px",minWidth:"40px"},children:[c,"°"]})]}),G&&z.jsx("button",{onClick:x,style:{padding:"6px 12px",border:"none",borderRadius:"4px",backgroundColor:"#2563eb",color:"white",cursor:"pointer",fontSize:"12px",fontWeight:500,transition:"background-color 0.2s"},title:"Apply settings to selected shape",children:"Apply"})]}):null,td=({annotations:l,setAnnotations:Z,highlightColor:d,highlightStrokeWidth:W,generateId:c,pointInRect:G})=>{const[M,i]=V.useState(null),[L,w]=V.useState(null),[x,O]=V.useState(!1),E=V.useCallback((N,U,h)=>{const k=l.filter(t=>t.page===h&&t.type==="highlight"&&t.x!==void 0&&t.y!==void 0&&t.width&&t.height);for(const t of k)if(!(t.x===void 0||t.y===void 0||t.width===void 0||t.height===void 0)&&G(N,U,t.x,t.y,t.width,t.height))return t;return null},[l,G]),D=V.useCallback((N,U,h)=>{O(!0),i({x:N,y:U,page:h}),w({x:N,y:U,page:h})},[]),p=V.useCallback((N,U,h)=>{M&&w({x:N,y:U,page:h})},[M]),o=V.useCallback(()=>{if(M&&L&&M.page===L.page&&x){const N=Math.min(M.x,L.x),U=Math.min(M.y,L.y),h=Math.abs(L.x-M.x),k=Math.abs(L.y-M.y);h>5&&k>5&&Z(t=>[...t,{page:M.page,type:"highlight",x:N,y:U,width:h,height:k,color:d,strokeWidth:W,id:c()}])}O(!1),i(null),w(null)},[M,L,x,d,W,c,Z]),m=V.useCallback(()=>{O(!1),i(null),w(null)},[]),Y=V.useCallback((N,U,h,k,t)=>{h.filter(R=>R.type==="highlight"&&R.x!==void 0&&R.y!==void 0).forEach(R=>{if(R.x!==void 0&&R.y!==void 0&&R.width&&R.height){const C=R.color||d,B=t(C);R.id===k&&(N.strokeStyle="rgba(74, 144, 226, 0.8)",N.lineWidth=2,N.strokeRect(R.x-2,R.y-2,R.width+4,R.height+4)),N.fillStyle=`rgba(${Math.round(B.r*255)}, ${Math.round(B.g*255)}, ${Math.round(B.b*255)}, 0.4)`,N.fillRect(R.x,R.y,R.width,R.height)}})},[d]),j=V.useCallback((N,U,h)=>{if(x&&M&&L&&M.page===U&&L.page===U){const k=Math.min(M.x,L.x),t=Math.min(M.y,L.y),R=Math.abs(L.x-M.x),C=Math.abs(L.y-M.y),B=h(d);N.strokeStyle=`rgba(${Math.round(B.r*255)}, ${Math.round(B.g*255)}, ${Math.round(B.b*255)}, 0.8)`,N.lineWidth=W,N.strokeRect(k,t,R,C)}},[x,M,L,d,W]),F=V.useCallback((N,U,h,k,t,R)=>{if(N.type==="highlight"&&N.x!==void 0&&N.y!==void 0){const C=N.x/k,B=h-N.y/k,J=N.color||d,Q=t(J);U.drawRectangle({x:C,y:B-(N.height??20)/k,width:(N.width??200)/k,height:(N.height??20)/k,color:R(Q.r,Q.g,Q.b),opacity:.4})}},[d]);return{dragStart:M,dragCurrent:L,isDragging:x,findHighlightAtPoint:E,startHighlightDrag:D,updateHighlightDrag:p,finishHighlightDrag:o,cancelHighlightDrag:m,drawHighlights:Y,drawHighlightPreview:j,exportHighlightToPdf:F}},Sd=({setAnnotations:l,penColor:Z,penStrokeWidth:d,generateId:W})=>{const[c,G]=V.useState([]),[M,i]=V.useState(!1),L=V.useCallback(Y=>{if(Y.length<=1)return;const j=new Map;Y.forEach(N=>{j.has(N.page)||j.set(N.page,[]),j.get(N.page).push(N)});const F=[];j.forEach((N,U)=>{N.length>1&&F.push({page:U,type:"pen",points:N.map(h=>({x:h.x,y:h.y})),color:Z,strokeWidth:d,id:W()})}),F.length>0&&l(N=>[...N,...F])},[W,Z,d,l]),w=V.useCallback(Y=>{i(!0),G([Y])},[]),x=V.useCallback(Y=>{G(j=>j.length===0||j[j.length-1].page!==Y.page?j:[...j,Y])},[]),O=V.useCallback(()=>{G(Y=>(L(Y),[])),i(!1)},[L]),E=V.useCallback(()=>{i(!1),G([])},[]),D=V.useCallback(()=>{G([])},[]),p=V.useCallback((Y,j,F,N,U)=>{F.filter(h=>h.type==="pen").forEach(h=>{if(!h.points||h.points.length<2)return;const k=h.color||Z,t=h.strokeWidth||d,R=U(k);if(h.id===N){Y.strokeStyle="rgba(74, 144, 226, 0.5)",Y.lineWidth=t+4,Y.lineCap="round",Y.lineJoin="round",Y.beginPath(),Y.moveTo(h.points[0].x,h.points[0].y);for(let C=1;C<h.points.length;C++)Y.lineTo(h.points[C].x,h.points[C].y);Y.stroke()}Y.strokeStyle=`rgba(${Math.round(R.r*255)}, ${Math.round(R.g*255)}, ${Math.round(R.b*255)}, 0.9)`,Y.lineWidth=t,Y.lineCap="round",Y.lineJoin="round",Y.beginPath(),Y.moveTo(h.points[0].x,h.points[0].y);for(let C=1;C<h.points.length;C++)Y.lineTo(h.points[C].x,h.points[C].y);Y.stroke()})},[Z,d]),o=V.useCallback((Y,j,F)=>{if(c.length>1){const N=c.filter(U=>U.page===j);if(N.length>1){const U=F(Z);Y.strokeStyle=`rgba(${Math.round(U.r*255)}, ${Math.round(U.g*255)}, ${Math.round(U.b*255)}, 0.9)`,Y.lineWidth=d,Y.lineCap="round",Y.lineJoin="round",Y.beginPath(),Y.moveTo(N[0].x,N[0].y);for(let h=1;h<N.length;h++)Y.lineTo(N[h].x,N[h].y);Y.stroke()}}},[c,Z,d]),m=V.useCallback((Y,j,F,N,U,h)=>{if(Y.type==="pen"&&Y.points){const k=Y.color||Z,t=Y.strokeWidth||d,R=U(k);for(let C=1;C<Y.points.length;C++){const B=Y.points[C-1],J=Y.points[C];j.drawLine({start:{x:B.x/N,y:F-B.y/N},end:{x:J.x/N,y:F-J.y/N},thickness:t/N,color:h(R.r,R.g,R.b),opacity:.9})}}},[Z,d]);return{currentPenPath:c,isDrawing:M,startPenDraw:w,addPenPoint:x,finishPenDraw:O,cancelPenDraw:E,clearCurrentPenPath:D,drawPenAnnotations:p,drawLivePenPath:o,exportPenToPdf:m}},xd=({annotations:l,setAnnotations:Z,textColor:d,generateId:W,containerRef:c})=>{const[G,M]=V.useState(null),[i,L]=V.useState(""),[w,x]=V.useState(null),O=V.useRef(null),[E,D]=V.useState(null),[p,o]=V.useState(null),m=V.useCallback((J,Q,H)=>{const e=l.filter(f=>f.page===H&&f.type==="text"&&f.x!==void 0&&f.y!==void 0),dl=20,A=5;for(const f of e){if(f.x===void 0||f.y===void 0||!f.content)continue;const cl=c.current?.querySelector(`canvas[data-page="${H}"]`);if(!cl)continue;const ml=cl.getContext("2d");if(!ml)continue;ml.font="16px Arial";const I=ml.measureText(f.content).width||100,P=f.x-A,r=f.x+I+A,$=f.y-dl-A,Nl=f.y+A;if(J>=P&&J<=r&&Q>=$&&Q<=Nl)return f}return null},[l,c]),Y=V.useCallback((J,Q,H)=>{M({x:J,y:Q,page:H}),L(""),x(null),setTimeout(()=>{O.current?.focus()},10)},[]),j=V.useCallback(J=>{J.id&&J.x!==void 0&&J.y!==void 0&&J.page!==void 0&&(M({x:J.x,y:J.y,page:J.page}),L(J.content||""),x(J.id),setTimeout(()=>{O.current?.focus(),O.current?.select()},10))},[]),F=V.useCallback(()=>{if(!G){M(null),L(""),x(null);return}w?i.trim()?Z(J=>J.map(Q=>Q.id===w?{...Q,content:i,color:d}:Q)):Z(J=>J.filter(Q=>Q.id!==w)):i.trim()&&Z(J=>[...J,{page:G.page,type:"text",x:G.x,y:G.y,content:i,color:d,id:W()}]),M(null),L(""),x(null)},[G,i,d,W,Z,w]),N=V.useCallback(()=>{M(null),L(""),x(null)},[]),U=V.useCallback(J=>{J.key==="Enter"&&G?F():J.key==="Escape"&&N()},[G,F,N]),h=V.useCallback(()=>{G&&(w||i.trim())?F():N()},[G,i,w,F,N]),k=V.useCallback((J,Q,H)=>{H.id&&H.x!==void 0&&H.y!==void 0&&(D(H.id),o({x:J-H.x,y:Q-H.y}))},[]),t=V.useCallback((J,Q)=>{if(E&&p){const H=J-p.x,e=Q-p.y;Z(dl=>dl.map(A=>A.id===E?{...A,x:H,y:e}:A))}},[E,p,Z]),R=V.useCallback(()=>{D(null),o(null)},[]),C=V.useCallback((J,Q,H)=>{H.filter(e=>e.type==="text"&&e.x!==void 0&&e.y!==void 0).forEach(e=>{if(e.x!==void 0&&e.y!==void 0&&e.content){if(e.id===E){J.fillStyle="rgba(74, 144, 226, 0.2)",J.font="16px Arial";const A=J.measureText(e.content).width||100;J.fillRect(e.x-2,e.y-18,A+4,20)}const dl=e.color||d;J.fillStyle=e.id===E?"#4A90E2":dl,J.font="16px Arial",J.fillText(e.content,e.x,e.y)}})},[E,d]),B=V.useCallback((J,Q,H,e,dl,A)=>{if(J.type==="text"&&J.x!==void 0&&J.y!==void 0){const f=J.x/e,cl=H-J.y/e,ml=J.color||d,I=dl(ml);Q.drawText(J.content??"",{x:f,y:cl,size:12,color:A(I.r,I.g,I.b)})}},[d]);return{activeTextInput:G,textInput:i,setTextInput:L,textInputRef:O,draggedTextId:E,editingTextId:w,findTextAtPoint:m,startTextInput:Y,startTextEdit:j,saveTextAnnotation:F,cancelTextInput:N,handleTextInputKeyDown:U,handleTextInputBlur:h,startTextDrag:k,updateTextDrag:t,finishTextDrag:R,drawTextAnnotations:C,exportTextToPdf:B}},wd=({annotations:l,setAnnotations:Z,generateId:d,pointInRect:W,setError:c})=>{const[G,M]=V.useState(null),[i,L]=V.useState(null),w=V.useRef(null),x=V.useCallback((Y,j,F)=>{const N=l.filter(U=>U.page===F&&U.type==="image"&&U.x!==void 0&&U.y!==void 0&&U.width&&U.height);for(const U of N)if(!(U.x===void 0||U.y===void 0||U.width===void 0||U.height===void 0)&&W(Y,j,U.x,U.y,U.width,U.height))return U;return null},[l,W]),O=V.useCallback(Y=>{const j=Y.target.files?.[0];if(!j)return;if(!j.type.startsWith("image/")){c("Please select an image file");return}L(j);const F=new FileReader;F.onload=N=>{const U=N.target?.result;M(U)},F.readAsDataURL(j)},[c]),E=V.useCallback(()=>{w.current?.click()},[]),D=V.useCallback((Y,j,F)=>{if(!G)return;const N=new Image;N.src=G,N.onload=()=>{let h=N.width,k=N.height;if(h>200||k>200){const C=Math.min(200/h,200/k);h=h*C,k=k*C}const t=document.createElement("canvas");t.width=N.width,t.height=N.height;const R=t.getContext("2d");R&&(R.drawImage(N,0,0),t.toBlob(C=>{C&&C.arrayBuffer().then(B=>{const J=new Uint8Array(B),Q=i?.type||"image/png";Z(H=>[...H,{page:F,type:"image",x:Y-h/2,y:j-k/2,width:h,height:k,imageUrl:G,imageData:J,imageMimeType:Q,id:d()}]),M(null),L(null)})},i?.type||"image/png"))}},[G,i,d,Z]),p=V.useCallback(()=>{M(null),L(null)},[]),o=V.useCallback((Y,j,F,N,U)=>{F.filter(h=>h.type==="image"&&h.x!==void 0&&h.y!==void 0&&h.width&&h.height&&h.imageUrl).forEach(h=>{if(h.x===void 0||h.y===void 0||h.width===void 0||h.height===void 0||!h.imageUrl)return;const k=new Image;k.src=h.imageUrl,h.id===N&&(Y.strokeStyle="rgba(74, 144, 226, 0.8)",Y.lineWidth=2,Y.strokeRect(h.x-2,h.y-2,h.width+4,h.height+4)),k.complete?Y.drawImage(k,h.x,h.y,h.width,h.height):k.onload=()=>{Y.drawImage(k,h.x,h.y,h.width,h.height),U&&U()}})},[]),m=V.useCallback(async(Y,j,F,N,U)=>{if(Y.type==="image"&&Y.x!==void 0&&Y.y!==void 0&&Y.width&&Y.height&&Y.imageData&&Y.imageMimeType){const h=Y.x/N,k=F-Y.y/N,t=Y.width/N,R=Y.height/N;try{let C;Y.imageMimeType==="image/png"?C=await U.embedPng(Y.imageData):Y.imageMimeType==="image/jpeg"||Y.imageMimeType==="image/jpg"?C=await U.embedJpg(Y.imageData):C=await U.embedPng(Y.imageData),j.drawImage(C,{x:h,y:k-R,width:t,height:R})}catch(C){console.error("Error embedding image:",C)}}},[]);return{selectedImage:G,selectedImageFile:i,imageInputRef:w,findImageAtPoint:x,handleImageUpload:O,triggerImageSelect:E,createImageAnnotation:D,clearSelectedImage:p,drawImageAnnotations:o,exportImageToPdf:m}},jd=({setAnnotations:l,eraserWidth:Z,pointInCircle:d,pointInRect:W})=>{const[c,G]=V.useState([]),[M,i]=V.useState(!1),L=V.useCallback((p,o,m)=>{const Y=o/2;for(const j of p)if(j.page===m.page){if(m.type==="pen"&&m.points){for(const F of m.points)if(d(F.x,F.y,j.x,j.y,Y))return!0}else if(m.type==="highlight"&&m.x!==void 0&&m.y!==void 0&&m.width&&m.height){const F=m.x-Y,N=m.y-Y,U=m.width+o,h=m.height+o;if(W(j.x,j.y,F,N,U,h))return!0}else if(m.type==="text"&&m.x!==void 0&&m.y!==void 0){const U=m.x-Y,h=m.y-20-Y,k=100+o,t=20+o;if(W(j.x,j.y,U,h,k,t))return!0}else if(m.type==="image"&&m.x!==void 0&&m.y!==void 0&&m.width&&m.height){const F=m.x-Y,N=m.y-Y,U=m.width+o,h=m.height+o;if(W(j.x,j.y,F,N,U,h))return!0}else if(m.type==="signature"&&m.x!==void 0&&m.y!==void 0&&m.width&&m.height){const F=m.x-Y,N=m.y-Y,U=m.width+o,h=m.height+o;if(W(j.x,j.y,F,N,U,h))return!0}else if(m.type==="shape"){if(m.points&&m.points.length>=2){const F=m.points.map(R=>R.x),N=m.points.map(R=>R.y),U=Math.min(...F)-Y,h=Math.min(...N)-Y,k=Math.max(...F)+Y,t=Math.max(...N)+Y;if(W(j.x,j.y,U,h,k-U,t-h))return!0}else if(m.x!==void 0&&m.y!==void 0&&m.width&&m.height){const F=m.x-Y,N=m.y-Y,U=m.width+o,h=m.height+o;if(W(j.x,j.y,F,N,U,h))return!0}}}return!1},[d,W]),w=V.useCallback(p=>{i(!0),G([p])},[]),x=V.useCallback(p=>{G(o=>{const m=o.length>0?o[o.length-1]:null;if(!m||m.page===p.page){const Y=[...o,p];return l(j=>j.filter(F=>F.page!==p.page?!0:!L([p],Z,F))),Y}return o})},[Z,L,l]),O=V.useCallback(()=>{i(!1),c.length>0&&l(p=>p.filter(o=>!L(c,Z,o))),G([])},[c,Z,L,l]),E=V.useCallback(()=>{i(!1),c.length>0&&l(p=>p.filter(o=>!L(c,Z,o))),G([])},[c,Z,L,l]),D=V.useCallback((p,o)=>{const m=c.filter(Y=>Y.page===o);if(m.length>0){p.fillStyle="rgba(255, 0, 0, 0.2)",p.strokeStyle="rgba(255, 0, 0, 0.5)",p.lineWidth=2;for(const Y of m)p.beginPath(),p.arc(Y.x,Y.y,Z/2,0,Math.PI*2),p.fill(),p.stroke()}},[c,Z]);return{eraserPath:c,isErasing:M,startErasing:w,addEraserPoint:x,finishErasing:O,cancelErasing:E,drawEraserPreview:D,eraserIntersectsAnnotation:L}},Jd=({annotations:l,setAnnotations:Z,generateId:d,pointInRect:W,viewportScale:c})=>{const[G,M]=V.useState(null),[i,L]=V.useState(!1),[w,x]=V.useState(!1);V.useEffect(()=>{const N=localStorage.getItem("userSignature");N&&M(N)},[]);const O=V.useCallback((N,U,h)=>{const k=l.filter(t=>t.page===h&&t.type==="signature"&&t.x!==void 0&&t.y!==void 0&&t.width&&t.height);for(const t of k)if(!(t.x===void 0||t.y===void 0||t.width===void 0||t.height===void 0)&&W(N,U,t.x,t.y,t.width,t.height))return t;return null},[l,W]),E=V.useCallback(N=>{M(N),localStorage.setItem("userSignature",N),L(!1)},[]),D=V.useCallback(()=>{M(null),localStorage.removeItem("userSignature"),x(!1)},[]),p=V.useCallback(()=>{G?x(!0):L(!0)},[G]),o=V.useCallback(()=>{x(!1)},[]),m=V.useCallback(()=>{x(!1),L(!0)},[]),Y=V.useCallback((N,U,h)=>{if(!G)return;const k=new Image;k.src=G,k.onload=()=>{const t=k.width/k.height,R=250,C=100;let B=R*c,J=R*c/t;const Q=C*c;J>Q&&(J=Q,B=J*t);const H=document.createElement("canvas");H.width=k.width,H.height=k.height;const e=H.getContext("2d");e&&(e.drawImage(k,0,0),H.toBlob(dl=>{dl&&dl.arrayBuffer().then(A=>{const f=new Uint8Array(A);Z(cl=>[...cl,{page:h,type:"signature",x:N-B/2,y:U-J/2,width:B,height:J,imageUrl:G,imageData:f,imageMimeType:"image/png",id:d()}])})},"image/png"))}},[G,c,d,Z]),j=V.useCallback((N,U,h,k,t)=>{h.filter(R=>R.type==="signature"&&R.x!==void 0&&R.y!==void 0&&R.width&&R.height&&R.imageUrl).forEach(R=>{if(R.x===void 0||R.y===void 0||R.width===void 0||R.height===void 0||!R.imageUrl)return;const C=new Image;C.src=R.imageUrl,R.id===k&&(N.strokeStyle="rgba(74, 144, 226, 0.8)",N.lineWidth=2,N.strokeRect(R.x-2,R.y-2,R.width+4,R.height+4));const B=N.imageSmoothingEnabled,J=N.imageSmoothingQuality;N.imageSmoothingEnabled=!0,N.imageSmoothingQuality&&(N.imageSmoothingQuality="high"),C.complete&&R.x!==void 0&&R.y!==void 0&&R.width!==void 0&&R.height!==void 0?(N.drawImage(C,R.x,R.y,R.width,R.height),N.imageSmoothingEnabled=B,N.imageSmoothingQuality&&(N.imageSmoothingQuality=J)):C.onload=()=>{N.imageSmoothingEnabled=!0,N.imageSmoothingQuality&&(N.imageSmoothingQuality="high"),R.x!==void 0&&R.y!==void 0&&R.width!==void 0&&R.height!==void 0&&N.drawImage(C,R.x,R.y,R.width,R.height),N.imageSmoothingEnabled=B,N.imageSmoothingQuality&&(N.imageSmoothingQuality=J),t&&t()}})},[]),F=V.useCallback(async(N,U,h,k,t)=>{if(N.type==="signature"&&N.x!==void 0&&N.y!==void 0&&N.width&&N.height&&N.imageData&&N.imageMimeType){const R=N.x/k,C=h-N.y/k,B=N.width/k,J=N.height/k;try{let Q;N.imageMimeType==="image/png"?Q=await t.embedPng(N.imageData):N.imageMimeType==="image/jpeg"||N.imageMimeType==="image/jpg"?Q=await t.embedJpg(N.imageData):Q=await t.embedPng(N.imageData),U.drawImage(Q,{x:R,y:C-J,width:B,height:J})}catch(Q){console.error("Error embedding signature:",Q)}}},[]);return{savedSignature:G,showSignatureModal:i,showSignatureSelectionModal:w,setShowSignatureModal:L,setShowSignatureSelectionModal:x,findSignatureAtPoint:O,saveSignature:E,deleteSignature:D,showSignatureSelection:p,useSavedSignature:o,createNewSignature:m,createSignatureAnnotation:Y,drawSignatureAnnotations:j,exportSignatureToPdf:F}},nd=({pdfDoc:l,viewportScale:Z,containerRef:d})=>{const[W,c]=V.useState(""),[G,M]=V.useState([]),[i,L]=V.useState(-1),[w,x]=V.useState(!1),O=V.useCallback(Y=>{const j=Y.rects[0];if(!j)return;const F=d.current?.querySelector(`canvas[data-page="${Y.page}"]`);if(F&&d.current){const N=d.current.getBoundingClientRect(),U=F.getBoundingClientRect(),h=d.current.scrollTop,k=U.top-N.top+h+j.y-d.current.clientHeight/2;d.current.scrollTo({top:Math.max(0,k),behavior:"smooth"})}},[d]),E=V.useCallback(()=>{c(""),M([]),L(-1)},[]),D=V.useCallback(async Y=>{if(!l){M([]),L(-1);return}const j=Y.toLowerCase().trim();if(!j){M([]),L(-1);return}x(!0);const F=[];try{for(let N=1;N<=l.numPages;N++){const U=await l.getPage(N),h=U.getViewport({scale:Z}),k=await U.getTextContent({disableCombineTextItems:!0}),t=[];for(const J of k.items){if(!("str"in J)||!J.str)continue;const Q=J.str,H="transform"in J?J.transform:null,e=typeof J.width=="number"?J.width:0;if(!H||H.length<6)continue;const[,,,dl,A,f]=H,cl=Q.length,ml=cl>0?e/cl:0;for(let I=0;I<cl;I++){const P=Q[I],r=ml*I,$=A+r,Nl=$+ml,ul=f,ll=f+dl,[Yl,Xl]=h.convertToViewportPoint($,ul),[al]=h.convertToViewportPoint(Nl,ul),[,Rl]=h.convertToViewportPoint($,ll),yZ=Math.min(Yl,al),zl=Math.max(Yl,al),Pl=Math.min(Xl,Rl),Bl=Math.max(Xl,Rl),fZ={x:yZ,y:Pl,width:Math.max(2,zl-yZ),height:Math.max(2,Bl-Pl)};t.push({char:P,rect:fZ})}if("hasEOL"in J&&J.hasEOL){const[I,P]=h.convertToViewportPoint(A,f);t.push({char:`
7
- `,rect:{x:I,y:P,width:0,height:0}})}}const C=t.map(J=>J.char).join("").toLowerCase();let B=C.indexOf(j);for(;B!==-1;){const J=t.slice(B,B+j.length);if(J.length>0){const Q=[];let H=[];const e=()=>{if(H.length===0)return;const A=Math.min(...H.map(I=>I.x)),f=Math.min(...H.map(I=>I.y)),cl=Math.max(...H.map(I=>I.x+I.width)),ml=Math.max(...H.map(I=>I.y+I.height));Q.push({x:A,y:f,width:Math.max(2,cl-A),height:Math.max(2,ml-f)}),H=[]};J.forEach(({rect:A})=>{if(A.width===0&&A.height===0){e();return}if(H.length===0){H.push(A);return}const f=H[H.length-1];Math.abs(A.y-f.y)<=4||Math.abs(A.y+A.height-(f.y+f.height))<=4||e(),H.push(A)}),e(),Q.length===0&&J.length>0&&Q.push(J[0].rect),F.push({page:N,rects:Q})}B=C.indexOf(j,B+1)}}M(F),F.length>0?(L(0),O(F[0])):L(-1)}catch(N){console.error("Error searching PDF:",N),M([]),L(-1)}finally{x(!1)}},[l,Z,O]),p=V.useCallback(Y=>{c(Y),Y.trim()?D(Y):(M([]),L(-1))},[D]),o=V.useCallback(Y=>{if(G.length===0)return;let j;Y==="next"?j=(i+1)%G.length:j=i<=0?G.length-1:i-1,L(j),O(G[j])},[i,O,G]),m=V.useCallback(Y=>{Y.key==="Enter"?(Y.preventDefault(),Y.shiftKey?o("prev"):o("next")):Y.key==="Escape"&&E()},[o,E]);return{searchQuery:W,searchResults:G,currentSearchIndex:i,isSearching:w,handleSearchInputChange:p,handleSearchKeyDown:m,navigateSearchResult:o,clearSearch:E}};iZ.GlobalWorkerOptions.workerSrc=new URL("data:text/javascript;base64,LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDI0IE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi8KLyoqCiAqIHBkZmpzVmVyc2lvbiA9IDUuNC4zOTQKICogcGRmanNCdWlsZCA9IDJjYzgwOWFkZQogKi9jb25zdCBlPSEoIm9iamVjdCIhPXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKSx0PVsuMDAxLDAsMCwuMDAxLDAsMF0sYT0xLjM1LHI9LjM1LGk9LjI1OTI1OTI1OTI1OTI1OTI0LG49MSxzPTIsbz00LGM9OCxsPTE2LGg9NjQsdT0xMjgsZD0yNTYsZj0icGRmanNfaW50ZXJuYWxfZWRpdG9yXyIsZz0zLHA9OSxtPTEzLGI9MTUseT0xMDEsdz17UFJJTlQ6NCxNT0RJRllfQ09OVEVOVFM6OCxDT1BZOjE2LE1PRElGWV9BTk5PVEFUSU9OUzozMixGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOjI1NixDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOjUxMixBU1NFTUJMRToxMDI0LFBSSU5UX0hJR0hfUVVBTElUWToyMDQ4fSx4PTEsUz0yLGs9MyxDPTAsdj00LEY9MSxUPTIsTz0zLE09e1RFWFQ6MSxMSU5LOjIsRlJFRVRFWFQ6MyxMSU5FOjQsU1FVQVJFOjUsQ0lSQ0xFOjYsUE9MWUdPTjo3LFBPTFlMSU5FOjgsSElHSExJR0hUOjksVU5ERVJMSU5FOjEwLFNRVUlHR0xZOjExLFNUUklLRU9VVDoxMixTVEFNUDoxMyxDQVJFVDoxNCxJTks6MTUsUE9QVVA6MTYsRklMRUFUVEFDSE1FTlQ6MTcsU09VTkQ6MTgsTU9WSUU6MTksV0lER0VUOjIwLFNDUkVFTjoyMSxQUklOVEVSTUFSSzoyMixUUkFQTkVUOjIzLFdBVEVSTUFSSzoyNCxUSFJFRUQ6MjUsUkVEQUNUOjI2fSxEPSJHcm91cCIsUj0iUiIsTj0xLEU9MixMPTQsXz0xNixVPTMyLGo9MTI4LFg9NTEyLHE9MSxIPTIsVz00MDk2LEc9ODE5Mix6PTMyNzY4LCQ9NjU1MzYsVj0xMzEwNzIsSz0xMDQ4NTc2LEo9MjA5NzE1MixZPTgzODg2MDgsWj0xNjc3NzIxNixRPTEsZWU9Mix0ZT0zLGFlPTQscmU9NSxpZT17RToiTW91c2UgRW50ZXIiLFg6Ik1vdXNlIEV4aXQiLEQ6Ik1vdXNlIERvd24iLFU6Ik1vdXNlIFVwIixGbzoiRm9jdXMiLEJsOiJCbHVyIixQTzoiUGFnZU9wZW4iLFBDOiJQYWdlQ2xvc2UiLFBWOiJQYWdlVmlzaWJsZSIsUEk6IlBhZ2VJbnZpc2libGUiLEs6IktleXN0cm9rZSIsRjoiRm9ybWF0IixWOiJWYWxpZGF0ZSIsQzoiQ2FsY3VsYXRlIn0sbmU9e1dDOiJXaWxsQ2xvc2UiLFdTOiJXaWxsU2F2ZSIsRFM6IkRpZFNhdmUiLFdQOiJXaWxsUHJpbnQiLERQOiJEaWRQcmludCJ9LHNlPXtPOiJQYWdlT3BlbiIsQzoiUGFnZUNsb3NlIn0sb2U9MSxjZT01LGxlPTEsaGU9Mix1ZT0zLGRlPTQsZmU9NSxnZT02LHBlPTcsbWU9OCxiZT05LHllPTEwLHdlPTExLHhlPTEyLFNlPTEzLEFlPTE0LGtlPTE1LENlPTE2LHZlPTE3LEZlPTE4LEllPTE5LFRlPTIwLE9lPTIxLE1lPTIyLERlPTIzLEJlPTI0LFJlPTI1LE5lPTI2LEVlPTI3LFBlPTI4LExlPTI5LF9lPTMwLFVlPTMxLGplPTMyLFhlPTMzLHFlPTM0LEhlPTM1LFdlPTM2LEdlPTM3LHplPTM4LCRlPTM5LFZlPTQwLEtlPTQxLEplPTQyLFllPTQzLFplPTQ0LFFlPTQ1LGV0PTQ2LHR0PTQ3LGF0PTQ4LHJ0PTQ5LGl0PTUwLG50PTUxLHN0PTUyLG90PTUzLGN0PTU0LGx0PTU1LGh0PTU2LHV0PTU3LGR0PTU4LGZ0PTU5LGd0PTYwLHB0PTYxLG10PTYyLGJ0PTYzLHl0PTY0LHd0PTY1LHh0PTY2LFN0PTY3LEF0PTY4LGt0PTY5LEN0PTcwLHZ0PTcxLEZ0PTcyLEl0PTczLFR0PTc0LE90PTc1LE10PTc2LER0PTc3LEJ0PTgwLFJ0PTgxLE50PTgzLEV0PTg0LFB0PTg1LEx0PTg2LF90PTg3LFV0PTg4LGp0PTg5LFh0PTkwLHF0PTkxLEh0PTkyLFd0PTkzLEd0PTk0LHp0PTAsJHQ9MSxWdD0yLEt0PTMsSnQ9NCxZdD0xLFp0PTI7bGV0IFF0PW9lO2Z1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCl7cmV0dXJuIFF0fWZ1bmN0aW9uIGluZm8oZSl7UXQ+PWNlJiZjb25zb2xlLmluZm8oYEluZm86ICR7ZX1gKX1mdW5jdGlvbiB3YXJuKGUpe1F0Pj1vZSYmY29uc29sZS53YXJuKGBXYXJuaW5nOiAke2V9YCl9ZnVuY3Rpb24gdW5yZWFjaGFibGUoZSl7dGhyb3cgbmV3IEVycm9yKGUpfWZ1bmN0aW9uIGFzc2VydChlLHQpe2V8fHVucmVhY2hhYmxlKHQpfWZ1bmN0aW9uIGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwoZSx0PW51bGwsYT1udWxsKXtpZighZSlyZXR1cm4gbnVsbDtpZihhJiYic3RyaW5nIj09dHlwZW9mIGUpe2lmKGEuYWRkRGVmYXVsdFByb3RvY29sJiZlLnN0YXJ0c1dpdGgoInd3dy4iKSl7Y29uc3QgdD1lLm1hdGNoKC9cLi9nKTt0Py5sZW5ndGg+PTImJihlPWBodHRwOi8vJHtlfWApfWlmKGEudHJ5Q29udmVydEVuY29kaW5nKXRyeXtlPXN0cmluZ1RvVVRGOFN0cmluZyhlKX1jYXRjaHt9fWNvbnN0IHI9dD9VUkwucGFyc2UoZSx0KTpVUkwucGFyc2UoZSk7cmV0dXJuIGZ1bmN0aW9uIF9pc1ZhbGlkUHJvdG9jb2woZSl7c3dpdGNoKGU/LnByb3RvY29sKXtjYXNlImh0dHA6IjpjYXNlImh0dHBzOiI6Y2FzZSJmdHA6IjpjYXNlIm1haWx0bzoiOmNhc2UidGVsOiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHIpP3I6bnVsbH1mdW5jdGlvbiBzaGFkb3coZSx0LGEscj0hMSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6YSxlbnVtZXJhYmxlOiFyLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pO3JldHVybiBhfWNvbnN0IGVhPWZ1bmN0aW9uIEJhc2VFeGNlcHRpb25DbG9zdXJlKCl7ZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbihlLHQpe3RoaXMubWVzc2FnZT1lO3RoaXMubmFtZT10fUJhc2VFeGNlcHRpb24ucHJvdG90eXBlPW5ldyBFcnJvcjtCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yPUJhc2VFeGNlcHRpb247cmV0dXJuIEJhc2VFeGNlcHRpb259KCk7Y2xhc3MgUGFzc3dvcmRFeGNlcHRpb24gZXh0ZW5kcyBlYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIlBhc3N3b3JkRXhjZXB0aW9uIik7dGhpcy5jb2RlPXR9fWNsYXNzIFVua25vd25FcnJvckV4Y2VwdGlvbiBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiVW5rbm93bkVycm9yRXhjZXB0aW9uIik7dGhpcy5kZXRhaWxzPXR9fWNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBlYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJJbnZhbGlkUERGRXhjZXB0aW9uIil9fWNsYXNzIFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKGUsIlJlc3BvbnNlRXhjZXB0aW9uIik7dGhpcy5zdGF0dXM9dDt0aGlzLm1pc3Npbmc9YX19Y2xhc3MgRm9ybWF0RXJyb3IgZXh0ZW5kcyBlYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJGb3JtYXRFcnJvciIpfX1jbGFzcyBBYm9ydEV4Y2VwdGlvbiBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkFib3J0RXhjZXB0aW9uIil9fWZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZ2b2lkIDAhPT1lPy5sZW5ndGh8fHVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7Y29uc3QgdD1lLmxlbmd0aCxhPTgxOTI7aWYodDxhKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Y29uc3Qgcj1bXTtmb3IobGV0IGk9MDtpPHQ7aSs9YSl7Y29uc3Qgbj1NYXRoLm1pbihpK2EsdCkscz1lLnN1YmFycmF5KGksbik7ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIHIuam9pbigiIil9ZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhlKXsic3RyaW5nIiE9dHlwZW9mIGUmJnVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Y29uc3QgdD1lLmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDsrK3IpYVtyXT0yNTUmZS5jaGFyQ29kZUF0KHIpO3JldHVybiBhfWZ1bmN0aW9uIHN0cmluZzMyKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIG9iamVjdFNpemUoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aH1jbGFzcyBGZWF0dXJlVGVzdHtzdGF0aWMgZ2V0IGlzTGl0dGxlRW5kaWFuKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc0xpdHRsZUVuZGlhbiIsZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KDQpO2VbMF09MTtyZXR1cm4gMT09PW5ldyBVaW50MzJBcnJheShlLmJ1ZmZlciwwLDEpWzBdfSgpKX1zdGF0aWMgZ2V0IGlzRXZhbFN1cHBvcnRlZCgpe3JldHVybiBzaGFkb3codGhpcywiaXNFdmFsU3VwcG9ydGVkIixmdW5jdGlvbiBpc0V2YWxTdXBwb3J0ZWQoKXt0cnl7bmV3IEZ1bmN0aW9uKCIiKTtyZXR1cm4hMH1jYXRjaHtyZXR1cm4hMX19KCkpfXN0YXRpYyBnZXQgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiE9dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyl9c3RhdGljIGdldCBpc0ltYWdlRGVjb2RlclN1cHBvcnRlZCgpe3JldHVybiBzaGFkb3codGhpcywiaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQiLCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VEZWNvZGVyKX1zdGF0aWMgZ2V0IGlzRmxvYXQxNkFycmF5U3VwcG9ydGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc0Zsb2F0MTZBcnJheVN1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDE2QXJyYXkpfXN0YXRpYyBnZXQgaXNTYW5pdGl6ZXJTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzU2FuaXRpemVyU3VwcG9ydGVkIiwidW5kZWZpbmVkIiE9dHlwZW9mIFNhbml0aXplcil9c3RhdGljIGdldCBwbGF0Zm9ybSgpe2NvbnN0e3BsYXRmb3JtOmUsdXNlckFnZW50OnR9PW5hdmlnYXRvcjtyZXR1cm4gc2hhZG93KHRoaXMsInBsYXRmb3JtIix7aXNBbmRyb2lkOnQuaW5jbHVkZXMoIkFuZHJvaWQiKSxpc0xpbnV4OmUuaW5jbHVkZXMoIkxpbnV4IiksaXNNYWM6ZS5pbmNsdWRlcygiTWFjIiksaXNXaW5kb3dzOmUuaW5jbHVkZXMoIldpbiIpLGlzRmlyZWZveDp0LmluY2x1ZGVzKCJGaXJlZm94Iil9KX1zdGF0aWMgZ2V0IGlzQ1NTUm91bmRTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzQ1NTUm91bmRTdXBwb3J0ZWQiLGdsb2JhbFRoaXMuQ1NTPy5zdXBwb3J0cz8uKCJ3aWR0aDogcm91bmQoMS41cHgsIDFweCkiKSl9fWNvbnN0IHRhPUFycmF5LmZyb20oQXJyYXkoMjU2KS5rZXlzKCksZT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKTtjbGFzcyBVdGlse3N0YXRpYyBtYWtlSGV4Q29sb3IoZSx0LGEpe3JldHVybmAjJHt0YVtlXX0ke3RhW3RdfSR7dGFbYV19YH1zdGF0aWMgZG9tTWF0cml4VG9UcmFuc2Zvcm0oZSl7cmV0dXJuW2UuYSxlLmIsZS5jLGUuZCxlLmUsZS5mXX1zdGF0aWMgc2NhbGVNaW5NYXgoZSx0KXtsZXQgYTtpZihlWzBdKXtpZihlWzBdPDApe2E9dFswXTt0WzBdPXRbMl07dFsyXT1hfXRbMF0qPWVbMF07dFsyXSo9ZVswXTtpZihlWzNdPDApe2E9dFsxXTt0WzFdPXRbM107dFszXT1hfXRbMV0qPWVbM107dFszXSo9ZVszXX1lbHNle2E9dFswXTt0WzBdPXRbMV07dFsxXT1hO2E9dFsyXTt0WzJdPXRbM107dFszXT1hO2lmKGVbMV08MCl7YT10WzFdO3RbMV09dFszXTt0WzNdPWF9dFsxXSo9ZVsxXTt0WzNdKj1lWzFdO2lmKGVbMl08MCl7YT10WzBdO3RbMF09dFsyXTt0WzJdPWF9dFswXSo9ZVsyXTt0WzJdKj1lWzJdfXRbMF0rPWVbNF07dFsxXSs9ZVs1XTt0WzJdKz1lWzRdO3RbM10rPWVbNV19c3RhdGljIHRyYW5zZm9ybShlLHQpe3JldHVybltlWzBdKnRbMF0rZVsyXSp0WzFdLGVbMV0qdFswXStlWzNdKnRbMV0sZVswXSp0WzJdK2VbMl0qdFszXSxlWzFdKnRbMl0rZVszXSp0WzNdLGVbMF0qdFs0XStlWzJdKnRbNV0rZVs0XSxlWzFdKnRbNF0rZVszXSp0WzVdK2VbNV1dfXN0YXRpYyBtdWx0aXBseUJ5RE9NTWF0cml4KGUsdCl7cmV0dXJuW2VbMF0qdC5hK2VbMl0qdC5iLGVbMV0qdC5hK2VbM10qdC5iLGVbMF0qdC5jK2VbMl0qdC5kLGVbMV0qdC5jK2VbM10qdC5kLGVbMF0qdC5lK2VbMl0qdC5mK2VbNF0sZVsxXSp0LmUrZVszXSp0LmYrZVs1XV19c3RhdGljIGFwcGx5VHJhbnNmb3JtKGUsdCxhPTApe2NvbnN0IHI9ZVthXSxpPWVbYSsxXTtlW2FdPXIqdFswXStpKnRbMl0rdFs0XTtlW2ErMV09cip0WzFdK2kqdFszXSt0WzVdfXN0YXRpYyBhcHBseVRyYW5zZm9ybVRvQmV6aWVyKGUsdCxhPTApe2NvbnN0IHI9dFswXSxpPXRbMV0sbj10WzJdLHM9dFszXSxvPXRbNF0sYz10WzVdO2ZvcihsZXQgdD0wO3Q8Njt0Kz0yKXtjb25zdCBsPWVbYSt0XSxoPWVbYSt0KzFdO2VbYSt0XT1sKnIraCpuK287ZVthK3QrMV09bCppK2gqcytjfX1zdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKGUsdCl7Y29uc3QgYT1lWzBdLHI9ZVsxXSxpPXRbMF0qdFszXS10WzFdKnRbMl07ZVswXT0oYSp0WzNdLXIqdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9pO2VbMV09KC1hKnRbMV0rcip0WzBdK3RbNF0qdFsxXS10WzVdKnRbMF0pL2l9c3RhdGljIGF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGUsdCxhKXtjb25zdCByPXRbMF0saT10WzFdLG49dFsyXSxzPXRbM10sbz10WzRdLGM9dFs1XSxsPWVbMF0saD1lWzFdLHU9ZVsyXSxkPWVbM107bGV0IGY9cipsK28sZz1mLHA9cip1K28sbT1wLGI9cypoK2MseT1iLHc9cypkK2MseD13O2lmKDAhPT1pfHwwIT09bil7Y29uc3QgZT1pKmwsdD1pKnUsYT1uKmgscj1uKmQ7Zis9YTttKz1hO3ArPXI7Zys9cjtiKz1lO3grPWU7dys9dDt5Kz10fWFbMF09TWF0aC5taW4oYVswXSxmLHAsZyxtKTthWzFdPU1hdGgubWluKGFbMV0sYix3LHkseCk7YVsyXT1NYXRoLm1heChhWzJdLGYscCxnLG0pO2FbM109TWF0aC5tYXgoYVszXSxiLHcseSx4KX1zdGF0aWMgaW52ZXJzZVRyYW5zZm9ybShlKXtjb25zdCB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX1zdGF0aWMgc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUoZSx0KXtjb25zdCBhPWVbMF0scj1lWzFdLGk9ZVsyXSxuPWVbM10scz1hKioyK3IqKjIsbz1hKmkrcipuLGM9aSoqMituKioyLGw9KHMrYykvMixoPU1hdGguc3FydChsKioyLShzKmMtbyoqMikpO3RbMF09TWF0aC5zcXJ0KGwraHx8MSk7dFsxXT1NYXRoLnNxcnQobC1ofHwxKX1zdGF0aWMgbm9ybWFsaXplUmVjdChlKXtjb25zdCB0PWUuc2xpY2UoMCk7aWYoZVswXT5lWzJdKXt0WzBdPWVbMl07dFsyXT1lWzBdfWlmKGVbMV0+ZVszXSl7dFsxXT1lWzNdO3RbM109ZVsxXX1yZXR1cm4gdH1zdGF0aWMgaW50ZXJzZWN0KGUsdCl7Y29uc3QgYT1NYXRoLm1heChNYXRoLm1pbihlWzBdLGVbMl0pLE1hdGgubWluKHRbMF0sdFsyXSkpLHI9TWF0aC5taW4oTWF0aC5tYXgoZVswXSxlWzJdKSxNYXRoLm1heCh0WzBdLHRbMl0pKTtpZihhPnIpcmV0dXJuIG51bGw7Y29uc3QgaT1NYXRoLm1heChNYXRoLm1pbihlWzFdLGVbM10pLE1hdGgubWluKHRbMV0sdFszXSkpLG49TWF0aC5taW4oTWF0aC5tYXgoZVsxXSxlWzNdKSxNYXRoLm1heCh0WzFdLHRbM10pKTtyZXR1cm4gaT5uP251bGw6W2EsaSxyLG5dfXN0YXRpYyBwb2ludEJvdW5kaW5nQm94KGUsdCxhKXthWzBdPU1hdGgubWluKGFbMF0sZSk7YVsxXT1NYXRoLm1pbihhWzFdLHQpO2FbMl09TWF0aC5tYXgoYVsyXSxlKTthWzNdPU1hdGgubWF4KGFbM10sdCl9c3RhdGljIHJlY3RCb3VuZGluZ0JveChlLHQsYSxyLGkpe2lbMF09TWF0aC5taW4oaVswXSxlLGEpO2lbMV09TWF0aC5taW4oaVsxXSx0LHIpO2lbMl09TWF0aC5tYXgoaVsyXSxlLGEpO2lbM109TWF0aC5tYXgoaVszXSx0LHIpfXN0YXRpYyNlKGUsdCxhLHIsaSxuLHMsbyxjLGwpe2lmKGM8PTB8fGM+PTEpcmV0dXJuO2NvbnN0IGg9MS1jLHU9YypjLGQ9dSpjLGY9aCooaCooaCplKzMqYyp0KSszKnUqYSkrZCpyLGc9aCooaCooaCppKzMqYypuKSszKnUqcykrZCpvO2xbMF09TWF0aC5taW4obFswXSxmKTtsWzFdPU1hdGgubWluKGxbMV0sZyk7bFsyXT1NYXRoLm1heChsWzJdLGYpO2xbM109TWF0aC5tYXgobFszXSxnKX1zdGF0aWMjdChlLHQsYSxyLGksbixzLG8sYyxsLGgsdSl7aWYoTWF0aC5hYnMoYyk8MWUtMTIpe01hdGguYWJzKGwpPj0xZS0xMiYmdGhpcy4jZShlLHQsYSxyLGksbixzLG8sLWgvbCx1KTtyZXR1cm59Y29uc3QgZD1sKioyLTQqaCpjO2lmKGQ8MClyZXR1cm47Y29uc3QgZj1NYXRoLnNxcnQoZCksZz0yKmM7dGhpcy4jZShlLHQsYSxyLGksbixzLG8sKC1sK2YpL2csdSk7dGhpcy4jZShlLHQsYSxyLGksbixzLG8sKC1sLWYpL2csdSl9c3RhdGljIGJlemllckJvdW5kaW5nQm94KGUsdCxhLHIsaSxuLHMsbyxjKXtjWzBdPU1hdGgubWluKGNbMF0sZSxzKTtjWzFdPU1hdGgubWluKGNbMV0sdCxvKTtjWzJdPU1hdGgubWF4KGNbMl0sZSxzKTtjWzNdPU1hdGgubWF4KGNbM10sdCxvKTt0aGlzLiN0KGUsYSxpLHMsdCxyLG4sbywzKigzKihhLWkpLWUrcyksNiooZS0yKmEraSksMyooYS1lKSxjKTt0aGlzLiN0KGUsYSxpLHMsdCxyLG4sbywzKigzKihyLW4pLXQrbyksNioodC0yKnIrbiksMyooci10KSxjKX19Y29uc3QgYWE9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcyOCw3MTEsNzEwLDcyOSw3MzMsNzMxLDczMCw3MzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODIyNiw4MjI0LDgyMjUsODIzMCw4MjEyLDgyMTEsNDAyLDgyNjAsODI0OSw4MjUwLDg3MjIsODI0MCw4MjIyLDgyMjAsODIyMSw4MjE2LDgyMTcsODIxOCw4NDgyLDY0MjU3LDY0MjU4LDMyMSwzMzgsMzUyLDM3NiwzODEsMzA1LDMyMiwzMzksMzUzLDM4MiwwLDgzNjRdO2Z1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKGUsdD0hMSl7aWYoZVswXT49IsOvIil7bGV0IGE7aWYoIsO+Ij09PWVbMF0mJiLDvyI9PT1lWzFdKXthPSJ1dGYtMTZiZSI7ZS5sZW5ndGglMj09MSYmKGU9ZS5zbGljZSgwLC0xKSl9ZWxzZSBpZigiw78iPT09ZVswXSYmIsO+Ij09PWVbMV0pe2E9InV0Zi0xNmxlIjtlLmxlbmd0aCUyPT0xJiYoZT1lLnNsaWNlKDAsLTEpKX1lbHNlIsOvIj09PWVbMF0mJiLCuyI9PT1lWzFdJiYiwr8iPT09ZVsyXSYmKGE9InV0Zi04Iik7aWYoYSl0cnl7Y29uc3Qgcj1uZXcgVGV4dERlY29kZXIoYSx7ZmF0YWw6ITB9KSxpPXN0cmluZ1RvQnl0ZXMoZSksbj1yLmRlY29kZShpKTtyZXR1cm4gdHx8IW4uaW5jbHVkZXMoIhsiKT9uOm4ucmVwbGFjZUFsbCgvXHgxYlteXHgxYl0qKD86XHgxYnwkKS9nLCIiKX1jYXRjaChlKXt3YXJuKGBzdHJpbmdUb1BERlN0cmluZzogIiR7ZX0iLmApfX1jb25zdCBhPVtdO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQocik7aWYoIXQmJjI3PT09bil7Zm9yKDsrK3I8aSYmMjchPT1lLmNoYXJDb2RlQXQocik7KTtjb250aW51ZX1jb25zdCBzPWFhW25dO2EucHVzaChzP1N0cmluZy5mcm9tQ2hhckNvZGUocyk6ZS5jaGFyQXQocikpfXJldHVybiBhLmpvaW4oIiIpfWZ1bmN0aW9uIHN0cmluZ1RvVVRGOFN0cmluZyhlKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9ZnVuY3Rpb24gdXRmOFN0cmluZ1RvU3RyaW5nKGUpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpfWZ1bmN0aW9uIGlzQXJyYXlFcXVhbChlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSsrKWlmKGVbYV0hPT10W2FdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGUoZT1uZXcgRGF0ZSl7ZSBpbnN0YW5jZW9mIERhdGV8fChlPW5ldyBEYXRlKGUpKTtyZXR1cm5bZS5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksKGUuZ2V0VVRDTW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIildLmpvaW4oIiIpfWxldCByYT1udWxsLGlhPW51bGw7ZnVuY3Rpb24gTWF0aENsYW1wKGUsdCxhKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZSx0KSxhKX1mdW5jdGlvbiB0b0hleFV0aWwoZSl7cmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLnRvSGV4P2UudG9IZXgoKTpBcnJheS5mcm9tKGUsZT0+dGFbZV0pLmpvaW4oIiIpfSJmdW5jdGlvbiIhPXR5cGVvZiBQcm9taXNlLnRyeSYmKFByb21pc2UudHJ5PWZ1bmN0aW9uKGUsLi4udCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9PnthKGUoLi4udCkpfSl9KTsiZnVuY3Rpb24iIT10eXBlb2YgTWF0aC5zdW1QcmVjaXNlJiYoTWF0aC5zdW1QcmVjaXNlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZHVjZSgoZSx0KT0+ZSt0LDApfSk7Y29uc3QgbmE9U3ltYm9sKCJDSVJDVUxBUl9SRUYiKSxzYT1TeW1ib2woIkVPRiIpO2xldCBvYT1PYmplY3QuY3JlYXRlKG51bGwpLGNhPU9iamVjdC5jcmVhdGUobnVsbCksbGE9T2JqZWN0LmNyZWF0ZShudWxsKTtjbGFzcyBOYW1le2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZT1lfXN0YXRpYyBnZXQoZSl7cmV0dXJuIGNhW2VdfHw9bmV3IE5hbWUoZSl9fWNsYXNzIENtZHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNtZD1lfXN0YXRpYyBnZXQoZSl7cmV0dXJuIG9hW2VdfHw9bmV3IENtZChlKX19Y29uc3QgaGE9ZnVuY3Rpb24gbm9uU2VyaWFsaXphYmxlQ2xvc3VyZSgpe3JldHVybiBoYX07Y2xhc3MgRGljdHtjb25zdHJ1Y3RvcihlPW51bGwpe3RoaXMuX21hcD1uZXcgTWFwO3RoaXMueHJlZj1lO3RoaXMub2JqSWQ9bnVsbDt0aGlzLnN1cHByZXNzRW5jcnlwdGlvbj0hMTt0aGlzLl9fbm9uU2VyaWFsaXphYmxlX189aGF9YXNzaWduWHJlZihlKXt0aGlzLnhyZWY9ZX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9tYXAuc2l6ZX1nZXQoZSx0LGEpe2xldCByPXRoaXMuX21hcC5nZXQoZSk7aWYodm9pZCAwPT09ciYmdm9pZCAwIT09dCl7cj10aGlzLl9tYXAuZ2V0KHQpO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcC5nZXQoYSkpfXJldHVybiByIGluc3RhbmNlb2YgUmVmJiZ0aGlzLnhyZWY/dGhpcy54cmVmLmZldGNoKHIsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pOnJ9YXN5bmMgZ2V0QXN5bmMoZSx0LGEpe2xldCByPXRoaXMuX21hcC5nZXQoZSk7aWYodm9pZCAwPT09ciYmdm9pZCAwIT09dCl7cj10aGlzLl9tYXAuZ2V0KHQpO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcC5nZXQoYSkpfXJldHVybiByIGluc3RhbmNlb2YgUmVmJiZ0aGlzLnhyZWY/dGhpcy54cmVmLmZldGNoQXN5bmMocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6cn1nZXRBcnJheShlLHQsYSl7bGV0IHI9dGhpcy5fbWFwLmdldChlKTtpZih2b2lkIDA9PT1yJiZ2b2lkIDAhPT10KXtyPXRoaXMuX21hcC5nZXQodCk7dm9pZCAwPT09ciYmdm9pZCAwIT09YSYmKHI9dGhpcy5fbWFwLmdldChhKSl9ciBpbnN0YW5jZW9mIFJlZiYmdGhpcy54cmVmJiYocj10aGlzLnhyZWYuZmV0Y2gocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbikpO2lmKEFycmF5LmlzQXJyYXkocikpe3I9ci5zbGljZSgpO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKylyW2VdaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZiYmKHJbZV09dGhpcy54cmVmLmZldGNoKHJbZV0sdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKX1yZXR1cm4gcn1nZXRSYXcoZSl7cmV0dXJuIHRoaXMuX21hcC5nZXQoZSl9Z2V0S2V5cygpe3JldHVyblsuLi50aGlzLl9tYXAua2V5cygpXX1nZXRSYXdWYWx1ZXMoKXtyZXR1cm5bLi4udGhpcy5fbWFwLnZhbHVlcygpXX1zZXQoZSx0KXt0aGlzLl9tYXAuc2V0KGUsdCl9c2V0SWZOb3RFeGlzdHMoZSx0KXt0aGlzLmhhcyhlKXx8dGhpcy5zZXQoZSx0KX1zZXRJZk51bWJlcihlLHQpeyJudW1iZXIiPT10eXBlb2YgdCYmdGhpcy5zZXQoZSx0KX1zZXRJZkFycmF5KGUsdCl7KEFycmF5LmlzQXJyYXkodCl8fEFycmF5QnVmZmVyLmlzVmlldyh0KSkmJnRoaXMuc2V0KGUsdCl9c2V0SWZEZWZpbmVkKGUsdCl7bnVsbCE9dCYmdGhpcy5zZXQoZSx0KX1zZXRJZk5hbWUoZSx0KXsic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5zZXQoZSxOYW1lLmdldCh0KSk6dCBpbnN0YW5jZW9mIE5hbWUmJnRoaXMuc2V0KGUsdCl9aGFzKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUpfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcihjb25zdFtlLHRdb2YgdGhpcy5fbWFwKXlpZWxkW2UsdCBpbnN0YW5jZW9mIFJlZiYmdGhpcy54cmVmP3RoaXMueHJlZi5mZXRjaCh0LHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTp0XX1zdGF0aWMgZ2V0IGVtcHR5KCl7Y29uc3QgZT1uZXcgRGljdChudWxsKTtlLnNldD0oZSx0KT0+e3VucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgYHNldGAgb24gdGhlIGVtcHR5IGRpY3Rpb25hcnkuIil9O3JldHVybiBzaGFkb3codGhpcywiZW1wdHkiLGUpfXN0YXRpYyBtZXJnZSh7eHJlZjplLGRpY3RBcnJheTp0LG1lcmdlU3ViRGljdHM6YT0hMX0pe2NvbnN0IHI9bmV3IERpY3QoZSksaT1uZXcgTWFwO2Zvcihjb25zdCBlIG9mIHQpaWYoZSBpbnN0YW5jZW9mIERpY3QpZm9yKGNvbnN0W3Qscl1vZiBlLl9tYXApe2xldCBlPWkuZ2V0KHQpO2lmKHZvaWQgMD09PWUpe2U9W107aS5zZXQodCxlKX1lbHNlIGlmKCEoYSYmciBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2UucHVzaChyKX1mb3IoY29uc3RbdCxhXW9mIGkpe2lmKDE9PT1hLmxlbmd0aHx8IShhWzBdaW5zdGFuY2VvZiBEaWN0KSl7ci5fbWFwLnNldCh0LGFbMF0pO2NvbnRpbnVlfWNvbnN0IGk9bmV3IERpY3QoZSk7Zm9yKGNvbnN0IGUgb2YgYSlmb3IoY29uc3RbdCxhXW9mIGUuX21hcClpLl9tYXAuaGFzKHQpfHxpLl9tYXAuc2V0KHQsYSk7aS5zaXplPjAmJnIuX21hcC5zZXQodCxpKX1pLmNsZWFyKCk7cmV0dXJuIHIuc2l6ZT4wP3I6RGljdC5lbXB0eX1jbG9uZSgpe2NvbnN0IGU9bmV3IERpY3QodGhpcy54cmVmKTtmb3IoY29uc3QgdCBvZiB0aGlzLmdldEtleXMoKSllLnNldCh0LHRoaXMuZ2V0UmF3KHQpKTtyZXR1cm4gZX1kZWxldGUoZSl7dGhpcy5fbWFwLmRlbGV0ZShlKX19Y2xhc3MgUmVme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5udW09ZTt0aGlzLmdlbj10fXRvU3RyaW5nKCl7cmV0dXJuIDA9PT10aGlzLmdlbj9gJHt0aGlzLm51bX1SYDpgJHt0aGlzLm51bX1SJHt0aGlzLmdlbn1gfXN0YXRpYyBmcm9tU3RyaW5nKGUpe2NvbnN0IHQ9bGFbZV07aWYodClyZXR1cm4gdDtjb25zdCBhPS9eKFxkKylSKFxkKikkLy5leGVjKGUpO3JldHVybiBhJiYiMCIhPT1hWzFdP2xhW2VdPW5ldyBSZWYocGFyc2VJbnQoYVsxXSksYVsyXT9wYXJzZUludChhWzJdKTowKTpudWxsfXN0YXRpYyBnZXQoZSx0KXtjb25zdCBhPTA9PT10P2Ake2V9UmA6YCR7ZX1SJHt0fWA7cmV0dXJuIGxhW2FdfHw9bmV3IFJlZihlLHQpfX1jbGFzcyBSZWZTZXR7Y29uc3RydWN0b3IoZT1udWxsKXt0aGlzLl9zZXQ9bmV3IFNldChlPy5fc2V0KX1oYXMoZSl7cmV0dXJuIHRoaXMuX3NldC5oYXMoZS50b1N0cmluZygpKX1wdXQoZSl7dGhpcy5fc2V0LmFkZChlLnRvU3RyaW5nKCkpfXJlbW92ZShlKXt0aGlzLl9zZXQuZGVsZXRlKGUudG9TdHJpbmcoKSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5fc2V0LnZhbHVlcygpfWNsZWFyKCl7dGhpcy5fc2V0LmNsZWFyKCl9fWNsYXNzIFJlZlNldENhY2hle2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUudG9TdHJpbmcoKSl9aGFzKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUudG9TdHJpbmcoKSl9cHV0KGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdCl9cHV0QWxpYXMoZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0aGlzLmdldCh0KSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5fbWFwLnZhbHVlcygpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9KnZhbHVlcygpe3lpZWxkKnRoaXMuX21hcC52YWx1ZXMoKX0qaXRlbXMoKXtmb3IoY29uc3RbZSx0XW9mIHRoaXMuX21hcCl5aWVsZFtSZWYuZnJvbVN0cmluZyhlKSx0XX19ZnVuY3Rpb24gaXNOYW1lKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBOYW1lJiYodm9pZCAwPT09dHx8ZS5uYW1lPT09dCl9ZnVuY3Rpb24gaXNDbWQoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIENtZCYmKHZvaWQgMD09PXR8fGUuY21kPT09dCl9ZnVuY3Rpb24gaXNEaWN0KGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEaWN0JiYodm9pZCAwPT09dHx8aXNOYW1lKGUuZ2V0KCJUeXBlIiksdCkpfWZ1bmN0aW9uIGlzUmVmc0VxdWFsKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59Y2xhc3MgQmFzZVN0cmVhbXtnZXQgbGVuZ3RoKCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IGdldHRlciBgbGVuZ3RoYCBhY2Nlc3NlZCIpfWdldCBpc0VtcHR5KCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IGdldHRlciBgaXNFbXB0eWAgYWNjZXNzZWQiKX1nZXQgaXNEYXRhTG9hZGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc0RhdGFMb2FkZWQiLCEwKX1nZXRCeXRlKCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZWAgY2FsbGVkIil9Z2V0Qnl0ZXMoZSl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZXNgIGNhbGxlZCIpfWFzeW5jIGdldEltYWdlRGF0YShlLHQpe3JldHVybiB0aGlzLmdldEJ5dGVzKGUsdCl9YXN5bmMgYXN5bmNHZXRCeXRlcygpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGFzeW5jR2V0Qnl0ZXNgIGNhbGxlZCIpfWdldCBpc0FzeW5jKCl7cmV0dXJuITF9Z2V0IGlzQXN5bmNEZWNvZGVyKCl7cmV0dXJuITF9Z2V0IGNhbkFzeW5jRGVjb2RlSW1hZ2VGcm9tQnVmZmVyKCl7cmV0dXJuITF9YXN5bmMgZ2V0VHJhbnNmZXJhYmxlSW1hZ2UoKXtyZXR1cm4gbnVsbH1wZWVrQnl0ZSgpe2NvbnN0IGU9dGhpcy5nZXRCeXRlKCk7LTEhPT1lJiZ0aGlzLnBvcy0tO3JldHVybiBlfXBlZWtCeXRlcyhlKXtjb25zdCB0PXRoaXMuZ2V0Qnl0ZXMoZSk7dGhpcy5wb3MtPXQubGVuZ3RoO3JldHVybiB0fWdldFVpbnQxNigpe2NvbnN0IGU9dGhpcy5nZXRCeXRlKCksdD10aGlzLmdldEJ5dGUoKTtyZXR1cm4tMT09PWV8fC0xPT09dD8tMTooZTw8OCkrdH1nZXRJbnQzMigpe3JldHVybih0aGlzLmdldEJ5dGUoKTw8MjQpKyh0aGlzLmdldEJ5dGUoKTw8MTYpKyh0aGlzLmdldEJ5dGUoKTw8OCkrdGhpcy5nZXRCeXRlKCl9Z2V0Qnl0ZVJhbmdlKGUsdCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZVJhbmdlYCBjYWxsZWQiKX1nZXRTdHJpbmcoZSl7cmV0dXJuIGJ5dGVzVG9TdHJpbmcodGhpcy5nZXRCeXRlcyhlKSl9c2tpcChlKXt0aGlzLnBvcys9ZXx8MX1yZXNldCgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYHJlc2V0YCBjYWxsZWQiKX1tb3ZlU3RhcnQoKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBtb3ZlU3RhcnRgIGNhbGxlZCIpfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkIil9Z2V0QmFzZVN0cmVhbXMoKXtyZXR1cm4gbnVsbH1nZXRPcmlnaW5hbFN0cmVhbSgpe3JldHVybiB0aGlzLnN0cmVhbT8uZ2V0T3JpZ2luYWxTdHJlYW0oKXx8dGhpc319Y29uc3QgdWE9L15bMS05XVwuXGQkLyxkYT0yKiozMS0xLGZhPVsxLDAsMCwxLDAsMF0sZ2E9WyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSxwYT1bIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdO2Z1bmN0aW9uIGdldExvb2t1cFRhYmxlRmFjdG9yeShlKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oKXtpZihlKXt0PU9iamVjdC5jcmVhdGUobnVsbCk7ZSh0KTtlPW51bGx9cmV0dXJuIHR9fWNsYXNzIE1pc3NpbmdEYXRhRXhjZXB0aW9uIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihgTWlzc2luZyBkYXRhIFske2V9LCAke3R9KWAsIk1pc3NpbmdEYXRhRXhjZXB0aW9uIik7dGhpcy5iZWdpbj1lO3RoaXMuZW5kPXR9fWNsYXNzIFBhcnNlckVPRkV4Y2VwdGlvbiBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlBhcnNlckVPRkV4Y2VwdGlvbiIpfX1jbGFzcyBYUmVmRW50cnlFeGNlcHRpb24gZXh0ZW5kcyBlYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJYUmVmRW50cnlFeGNlcHRpb24iKX19Y2xhc3MgWFJlZlBhcnNlRXhjZXB0aW9uIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiWFJlZlBhcnNlRXhjZXB0aW9uIil9fWZ1bmN0aW9uIGFycmF5QnVmZmVyc1RvQnl0ZXMoZSl7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KGVbMF0pO2xldCBhPTA7Zm9yKGxldCByPTA7cjx0O3IrKylhKz1lW3JdLmJ5dGVMZW5ndGg7Y29uc3Qgcj1uZXcgVWludDhBcnJheShhKTtsZXQgaT0wO2ZvcihsZXQgYT0wO2E8dDthKyspe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZVthXSk7ci5zZXQodCxpKTtpKz10LmJ5dGVMZW5ndGh9cmV0dXJuIHJ9YXN5bmMgZnVuY3Rpb24gZmV0Y2hCaW5hcnlEYXRhKGUpe2NvbnN0IHQ9YXdhaXQgZmV0Y2goZSk7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJHtlfSIgd2l0aCAiJHt0LnN0YXR1c1RleHR9Ii5gKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgdC5hcnJheUJ1ZmZlcigpKX1mdW5jdGlvbiBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OmUsa2V5OnQsZ2V0QXJyYXk6YT0hMSxzdG9wV2hlbkZvdW5kOnI9ITB9KXtsZXQgaTtjb25zdCBuPW5ldyBSZWZTZXQ7Zm9yKDtlIGluc3RhbmNlb2YgRGljdCYmKCFlLm9iaklkfHwhbi5oYXMoZS5vYmpJZCkpOyl7ZS5vYmpJZCYmbi5wdXQoZS5vYmpJZCk7Y29uc3Qgcz1hP2UuZ2V0QXJyYXkodCk6ZS5nZXQodCk7aWYodm9pZCAwIT09cyl7aWYocilyZXR1cm4gczsoaXx8PVtdKS5wdXNoKHMpfWU9ZS5nZXQoIlBhcmVudCIpfXJldHVybiBpfWNvbnN0IG1hPVsiIiwiQyIsIkNDIiwiQ0NDIiwiQ0QiLCJEIiwiREMiLCJEQ0MiLCJEQ0NDIiwiQ00iLCIiLCJYIiwiWFgiLCJYWFgiLCJYTCIsIkwiLCJMWCIsIkxYWCIsIkxYWFgiLCJYQyIsIiIsIkkiLCJJSSIsIklJSSIsIklWIiwiViIsIlZJIiwiVklJIiwiVklJSSIsIklYIl07ZnVuY3Rpb24gdG9Sb21hbk51bWVyYWxzKGUsdD0hMSl7YXNzZXJ0KE51bWJlci5pc0ludGVnZXIoZSkmJmU+MCwiVGhlIG51bWJlciBzaG91bGQgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiIpO2NvbnN0IGE9Ik0iLnJlcGVhdChlLzFlM3wwKSttYVtlJTFlMy8xMDB8MF0rbWFbMTArKGUlMTAwLzEwfDApXSttYVsyMCtlJTEwXTtyZXR1cm4gdD9hLnRvTG93ZXJDYXNlKCk6YX1mdW5jdGlvbiBsb2cyKGUpe3JldHVybiBlPjA/TWF0aC5jZWlsKE1hdGgubG9nMihlKSk6MH1mdW5jdGlvbiByZWFkSW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9ZnVuY3Rpb24gcmVhZEludDE2KGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTYpPj4xNn1mdW5jdGlvbiByZWFkVWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIHJlYWRVaW50MzIoZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9ZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMz09PWV8fDEwPT09ZX1mdW5jdGlvbiBpc051bWJlckFycmF5KGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/KG51bGw9PT10fHxlLmxlbmd0aD09PXQpJiZlLmV2ZXJ5KGU9PiJudW1iZXIiPT10eXBlb2YgZSk6QXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBCaWdJbnQ2NEFycmF5fHxlIGluc3RhbmNlb2YgQmlnVWludDY0QXJyYXkpJiYobnVsbD09PXR8fGUubGVuZ3RoPT09dCl9ZnVuY3Rpb24gbG9va3VwTWF0cml4KGUsdCl7cmV0dXJuIGlzTnVtYmVyQXJyYXkoZSw2KT9lOnR9ZnVuY3Rpb24gbG9va3VwUmVjdChlLHQpe3JldHVybiBpc051bWJlckFycmF5KGUsNCk/ZTp0fWZ1bmN0aW9uIGxvb2t1cE5vcm1hbFJlY3QoZSx0KXtyZXR1cm4gaXNOdW1iZXJBcnJheShlLDQpP1V0aWwubm9ybWFsaXplUmVjdChlKTp0fWZ1bmN0aW9uIHBhcnNlWEZBUGF0aChlKXtjb25zdCB0PS8oLispXFsoXGQrKVxdJC87cmV0dXJuIGUuc3BsaXQoIi4iKS5tYXAoZT0+e2NvbnN0IGE9ZS5tYXRjaCh0KTtyZXR1cm4gYT97bmFtZTphWzFdLHBvczpwYXJzZUludChhWzJdLDEwKX06e25hbWU6ZSxwb3M6MH19KX1mdW5jdGlvbiBlc2NhcGVQREZOYW1lKGUpe2NvbnN0IHQ9W107bGV0IGE9MDtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KHIpO2lmKGk8MzN8fGk+MTI2fHwzNT09PWl8fDQwPT09aXx8NDE9PT1pfHw2MD09PWl8fDYyPT09aXx8OTE9PT1pfHw5Mz09PWl8fDEyMz09PWl8fDEyNT09PWl8fDQ3PT09aXx8Mzc9PT1pKXthPHImJnQucHVzaChlLnN1YnN0cmluZyhhLHIpKTt0LnB1c2goYCMke2kudG9TdHJpbmcoMTYpfWApO2E9cisxfX1pZigwPT09dC5sZW5ndGgpcmV0dXJuIGU7YTxlLmxlbmd0aCYmdC5wdXNoKGUuc3Vic3RyaW5nKGEsZS5sZW5ndGgpKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5jdGlvbiBlc2NhcGVTdHJpbmcoZSl7cmV0dXJuIGUucmVwbGFjZUFsbCgvKFsoKVxcXG5ccl0pL2csZT0+IlxuIj09PWU/IlxcbiI6IlxyIj09PWU/IlxcciI6YFxcJHtlfWApfWZ1bmN0aW9uIF9jb2xsZWN0SlMoZSx0LGEscil7aWYoIWUpcmV0dXJuO2xldCBpPW51bGw7aWYoZSBpbnN0YW5jZW9mIFJlZil7aWYoci5oYXMoZSkpcmV0dXJuO2k9ZTtyLnB1dChpKTtlPXQuZmV0Y2goZSl9aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoY29uc3QgaSBvZiBlKV9jb2xsZWN0SlMoaSx0LGEscik7ZWxzZSBpZihlIGluc3RhbmNlb2YgRGljdCl7aWYoaXNOYW1lKGUuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSl7Y29uc3QgdD1lLmdldCgiSlMiKTtsZXQgcjt0IGluc3RhbmNlb2YgQmFzZVN0cmVhbT9yPXQuZ2V0U3RyaW5nKCk6InN0cmluZyI9PXR5cGVvZiB0JiYocj10KTtyJiY9c3RyaW5nVG9QREZTdHJpbmcociwhMCkucmVwbGFjZUFsbCgiXDAiLCIiKTtyJiZhLnB1c2goci50cmltKCkpfV9jb2xsZWN0SlMoZS5nZXRSYXcoIk5leHQiKSx0LGEscil9aSYmci5yZW1vdmUoaSl9ZnVuY3Rpb24gY29sbGVjdEFjdGlvbnMoZSx0LGEpe2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShudWxsKSxpPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6IkFBIixzdG9wV2hlbkZvdW5kOiExfSk7aWYoaSlmb3IobGV0IHQ9aS5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgbj1pW3RdO2lmKG4gaW5zdGFuY2VvZiBEaWN0KWZvcihjb25zdCB0IG9mIG4uZ2V0S2V5cygpKXtjb25zdCBpPWFbdF07aWYoIWkpY29udGludWU7Y29uc3Qgcz1bXTtfY29sbGVjdEpTKG4uZ2V0UmF3KHQpLGUscyxuZXcgUmVmU2V0KTtzLmxlbmd0aD4wJiYocltpXT1zKX19aWYodC5oYXMoIkEiKSl7Y29uc3QgYT1bXTtfY29sbGVjdEpTKHQuZ2V0KCJBIiksZSxhLG5ldyBSZWZTZXQpO2EubGVuZ3RoPjAmJihyLkFjdGlvbj1hKX1yZXR1cm4gb2JqZWN0U2l6ZShyKT4wP3I6bnVsbH1jb25zdCBiYT17NjA6IiZsdDsiLDYyOiImZ3Q7IiwzODoiJmFtcDsiLDM0OiImcXVvdDsiLDM5OiImYXBvczsifTtmdW5jdGlvbipjb2RlUG9pbnRJdGVyKGUpe2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT1lLmNvZGVQb2ludEF0KHQpO2E+NTUyOTUmJihhPDU3MzQ0fHxhPjY1NTMzKSYmdCsrO3lpZWxkIGF9fWZ1bmN0aW9uIGVuY29kZVRvWG1sU3RyaW5nKGUpe2NvbnN0IHQ9W107bGV0IGE9MDtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IGk9ZS5jb2RlUG9pbnRBdChyKTtpZigzMjw9aSYmaTw9MTI2KXtjb25zdCBuPWJhW2ldO2lmKG4pe2E8ciYmdC5wdXNoKGUuc3Vic3RyaW5nKGEscikpO3QucHVzaChuKTthPXIrMX19ZWxzZXthPHImJnQucHVzaChlLnN1YnN0cmluZyhhLHIpKTt0LnB1c2goYCYjeCR7aS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX07YCk7aT41NTI5NSYmKGk8NTczNDR8fGk+NjU1MzMpJiZyKys7YT1yKzF9fWlmKDA9PT10Lmxlbmd0aClyZXR1cm4gZTthPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcoYSxlLmxlbmd0aCkpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIHZhbGlkYXRlRm9udE5hbWUoZSx0PSExKXtjb25zdCBhPS9eKCJ8JykuKigifCcpJC8uZXhlYyhlKTtpZihhJiZhWzFdPT09YVsyXSl7aWYobmV3IFJlZ0V4cChgW15cXFxcXSR7YVsxXX1gKS50ZXN0KGUuc2xpY2UoMSwtMSkpKXt0JiZ3YXJuKGBGb250RmFtaWx5IGNvbnRhaW5zIHVuZXNjYXBlZCAke2FbMV19OiAke2V9LmApO3JldHVybiExfX1lbHNlIGZvcihjb25zdCBhIG9mIGUuc3BsaXQoL1sgXHRdKy8pKWlmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QoYSl8fCEvXltcdy1cXF0rJC8udGVzdChhKSl7dCYmd2FybihgRm9udEZhbWlseSBjb250YWlucyBpbnZhbGlkIDxjdXN0b20taWRlbnQ+OiAke2V9LmApO3JldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHZhbGlkYXRlQ1NTRm9udChlKXtjb25zdCB0PW5ldyBTZXQoWyIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI3MDAiLCI4MDAiLCI5MDAiLCIxMDAwIiwibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiXSkse2ZvbnRGYW1pbHk6YSxmb250V2VpZ2h0OnIsaXRhbGljQW5nbGU6aX09ZTtpZighdmFsaWRhdGVGb250TmFtZShhLCEwKSlyZXR1cm4hMTtjb25zdCBuPXI/ci50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhuKT9uOiI0MDAiO2NvbnN0IHM9cGFyc2VGbG9hdChpKTtlLml0YWxpY0FuZ2xlPWlzTmFOKHMpfHxzPC05MHx8cz45MD8iMTQiOmkudG9TdHJpbmcoKTtyZXR1cm4hMH1mdW5jdGlvbiByZWNvdmVySnNVUkwoZSl7Y29uc3QgdD1uZXcgUmVnRXhwKCJeXFxzKigiK1siYXBwLmxhdW5jaFVSTCIsIndpbmRvdy5vcGVuIiwieGZhLmhvc3QuZ290b1VSTCJdLmpvaW4oInwiKS5yZXBsYWNlQWxsKCIuIiwiXFwuIikrIilcXCgoPzonfFwiKShbXidcIl0qKSg/Oid8XCIpKD86LFxccyooXFx3KylcXCl8XFwpKSIsImkiKS5leGVjKGUpO3JldHVybiB0Py5bMl0/e3VybDp0WzJdLG5ld1dpbmRvdzoiYXBwLmxhdW5jaFVSTCI9PT10WzFdJiYidHJ1ZSI9PT10WzNdfTpudWxsfWZ1bmN0aW9uIG51bWJlclRvU3RyaW5nKGUpe2lmKE51bWJlci5pc0ludGVnZXIoZSkpcmV0dXJuIGUudG9TdHJpbmcoKTtjb25zdCB0PU1hdGgucm91bmQoMTAwKmUpO3JldHVybiB0JTEwMD09MD8odC8xMDApLnRvU3RyaW5nKCk6dCUxMD09MD9lLnRvRml4ZWQoMSk6ZS50b0ZpeGVkKDIpfWZ1bmN0aW9uIGdldE5ld0Fubm90YXRpb25zTWFwKGUpe2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3RbYSxyXW9mIGUpe2lmKCFhLnN0YXJ0c1dpdGgoZikpY29udGludWU7bGV0IGU9dC5nZXQoci5wYWdlSW5kZXgpO2lmKCFlKXtlPVtdO3Quc2V0KHIucGFnZUluZGV4LGUpfWUucHVzaChyKX1yZXR1cm4gdC5zaXplPjA/dDpudWxsfWZ1bmN0aW9uIHN0cmluZ1RvQXNjaWlPclVURjE2QkUoZSl7cmV0dXJuIG51bGw9PWV8fGZ1bmN0aW9uIGlzQXNjaWkoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiExO3JldHVybiFlfHwvXltceDAwLVx4N0ZdKiQvLnRlc3QoZSl9KGUpP2U6c3RyaW5nVG9VVEYxNlN0cmluZyhlLCEwKX1mdW5jdGlvbiBzdHJpbmdUb1VURjE2SGV4U3RyaW5nKGUpe2NvbnN0IHQ9W107Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPWUuY2hhckNvZGVBdChhKTt0LnB1c2godGFbcj4+OCYyNTVdLHRhWzI1NSZyXSl9cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gc3RyaW5nVG9VVEYxNlN0cmluZyhlLHQ9ITEpe2NvbnN0IGE9W107dCYmYS5wdXNoKCLDvsO/Iik7Zm9yKGxldCB0PTAscj1lLmxlbmd0aDt0PHI7dCsrKXtjb25zdCByPWUuY2hhckNvZGVBdCh0KTthLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShyPj44JjI1NSksU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmcikpfXJldHVybiBhLmpvaW4oIiIpfWZ1bmN0aW9uIGdldFJvdGF0aW9uTWF0cml4KGUsdCxhKXtzd2l0Y2goZSl7Y2FzZSA5MDpyZXR1cm5bMCwxLC0xLDAsdCwwXTtjYXNlIDE4MDpyZXR1cm5bLTEsMCwwLC0xLHQsYV07Y2FzZSAyNzA6cmV0dXJuWzAsLTEsMSwwLDAsYV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19ZnVuY3Rpb24gZ2V0U2l6ZUluQnl0ZXMoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmNlaWwoTWF0aC5sb2cyKDErZSkpLzgpfWNsYXNzIFFDTVN7c3RhdGljI2E9bnVsbDtzdGF0aWMgX21lbW9yeT1udWxsO3N0YXRpYyBfbXVzdEFkZEFscGhhPSExO3N0YXRpYyBfZGVzdEJ1ZmZlcj1udWxsO3N0YXRpYyBfZGVzdE9mZnNldD0wO3N0YXRpYyBfZGVzdExlbmd0aD0wO3N0YXRpYyBfY3NzQ29sb3I9IiI7c3RhdGljIF9tYWtlSGV4Q29sb3I9bnVsbDtzdGF0aWMgZ2V0IF9tZW1vcnlBcnJheSgpe2NvbnN0IGU9dGhpcy4jYTtyZXR1cm4gZT8uYnl0ZUxlbmd0aD9lOnRoaXMuI2E9bmV3IFVpbnQ4QXJyYXkodGhpcy5fbWVtb3J5LmJ1ZmZlcil9fWxldCB5YTtjb25zdCB3YT0idW5kZWZpbmVkIiE9dHlwZW9mIFRleHREZWNvZGVyP25ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KTp7ZGVjb2RlOigpPT57dGhyb3cgRXJyb3IoIlRleHREZWNvZGVyIG5vdCBhdmFpbGFibGUiKX19OyJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXImJndhLmRlY29kZSgpO2xldCB4YT1udWxsO2Z1bmN0aW9uIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCl7bnVsbCE9PXhhJiYwIT09eGEuYnl0ZUxlbmd0aHx8KHhhPW5ldyBVaW50OEFycmF5KHlhLm1lbW9yeS5idWZmZXIpKTtyZXR1cm4geGF9bGV0IFNhPTA7ZnVuY3Rpb24gcGFzc0FycmF5OFRvV2FzbTAoZSx0KXtjb25zdCBhPXQoMSplLmxlbmd0aCwxKT4+PjA7Z2V0VWludDhBcnJheU1lbW9yeTAoKS5zZXQoZSxhLzEpO1NhPWUubGVuZ3RoO3JldHVybiBhfWNvbnN0IEFhPU9iamVjdC5mcmVlemUoe1JHQjg6MCwwOiJSR0I4IixSR0JBODoxLDE6IlJHQkE4IixCR1JBODoyLDI6IkJHUkE4IixHcmF5ODozLDM6IkdyYXk4IixHcmF5QTg6NCw0OiJHcmF5QTgiLENNWUs6NSw1OiJDTVlLIn0pLGthPU9iamVjdC5mcmVlemUoe1BlcmNlcHR1YWw6MCwwOiJQZXJjZXB0dWFsIixSZWxhdGl2ZUNvbG9yaW1ldHJpYzoxLDE6IlJlbGF0aXZlQ29sb3JpbWV0cmljIixTYXR1cmF0aW9uOjIsMjoiU2F0dXJhdGlvbiIsQWJzb2x1dGVDb2xvcmltZXRyaWM6MywzOiJBYnNvbHV0ZUNvbG9yaW1ldHJpYyJ9KTtmdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cygpe2NvbnN0IGU9e3diZzp7fX07ZS53YmcuX193YmdfY29weXJlc3VsdF9iMDhlZTdkMjczZjI5NWRkPWZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uIGNvcHlfcmVzdWx0KGUsdCl7Y29uc3R7X211c3RBZGRBbHBoYTphLF9kZXN0QnVmZmVyOnIsX2Rlc3RPZmZzZXQ6aSxfZGVzdExlbmd0aDpuLF9tZW1vcnlBcnJheTpzfT1RQ01TO2lmKHQhPT1uKWlmKGEpZm9yKGxldCBhPWUsbj1lK3Qsbz1pO2E8bjthKz0zLG8rPTQpe3Jbb109c1thXTtyW28rMV09c1thKzFdO3JbbysyXT1zW2ErMl07cltvKzNdPTI1NX1lbHNlIGZvcihsZXQgYT1lLG49ZSt0LG89aTthPG47YSs9MyxvKz00KXtyW29dPXNbYV07cltvKzFdPXNbYSsxXTtyW28rMl09c1thKzJdfWVsc2Ugci5zZXQocy5zdWJhcnJheShlLGUrdCksaSl9KGU+Pj4wLHQ+Pj4wKX07ZS53YmcuX193YmdfY29weXJnYl9kNjBjZTE3YmIwNWQ5YjY3PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbiBjb3B5X3JnYihlKXtjb25zdHtfZGVzdEJ1ZmZlcjp0LF9kZXN0T2Zmc2V0OmEsX21lbW9yeUFycmF5OnJ9PVFDTVM7dFthXT1yW2VdO3RbYSsxXT1yW2UrMV07dFthKzJdPXJbZSsyXX0oZT4+PjApfTtlLndiZy5fX3diZ19tYWtlY3NzUkdCXzg5M2JmMGNkOWZkYjMwMmQ9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uIG1ha2VfY3NzUkdCKGUpe2NvbnN0e19tZW1vcnlBcnJheTp0fT1RQ01TO1FDTVMuX2Nzc0NvbG9yPVFDTVMuX21ha2VIZXhDb2xvcih0W2VdLHRbZSsxXSx0W2UrMl0pfShlPj4+MCl9O2Uud2JnLl9fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGU9ZnVuY3Rpb24oKXtjb25zdCBlPXlhLl9fd2JpbmRnZW5fZXhwb3J0XzAsdD1lLmdyb3coNCk7ZS5zZXQoMCx2b2lkIDApO2Uuc2V0KHQrMCx2b2lkIDApO2Uuc2V0KHQrMSxudWxsKTtlLnNldCh0KzIsITApO2Uuc2V0KHQrMywhMSl9O2Uud2JnLl9fd2JpbmRnZW5fdGhyb3c9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgRXJyb3IoZnVuY3Rpb24gZ2V0U3RyaW5nRnJvbVdhc20wKGUsdCl7ZT4+Pj0wO3JldHVybiB3YS5kZWNvZGUoZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShlLGUrdCkpfShlLHQpKX07cmV0dXJuIGV9ZnVuY3Rpb24gX193YmdfZmluYWxpemVfaW5pdChlLHQpe3lhPWUuZXhwb3J0cztfX3diZ19pbml0Ll9fd2JpbmRnZW5fd2FzbV9tb2R1bGU9dDt4YT1udWxsO3lhLl9fd2JpbmRnZW5fc3RhcnQoKTtyZXR1cm4geWF9YXN5bmMgZnVuY3Rpb24gX193YmdfaW5pdChlKXtpZih2b2lkIDAhPT15YSlyZXR1cm4geWE7dm9pZCAwIT09ZSYmKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PU9iamVjdC5wcm90b3R5cGU/KHttb2R1bGVfb3JfcGF0aDplfT1lKTpjb25zb2xlLndhcm4oInVzaW5nIGRlcHJlY2F0ZWQgcGFyYW1ldGVycyBmb3IgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uOyBwYXNzIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIikpO2NvbnN0IHQ9X193YmdfZ2V0X2ltcG9ydHMoKTsoInN0cmluZyI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgUmVxdWVzdCYmZSBpbnN0YW5jZW9mIFJlcXVlc3R8fCJmdW5jdGlvbiI9PXR5cGVvZiBVUkwmJmUgaW5zdGFuY2VvZiBVUkwpJiYoZT1mZXRjaChlKSk7Y29uc3R7aW5zdGFuY2U6YSxtb2R1bGU6cn09YXdhaXQgYXN5bmMgZnVuY3Rpb24gX193YmdfbG9hZChlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBSZXNwb25zZSYmZSBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhlLHQpfWNhdGNoKHQpe2lmKCJhcHBsaWNhdGlvbi93YXNtIj09ZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikpdGhyb3cgdDtjb25zb2xlLndhcm4oImBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ2AgZmFpbGVkIGJlY2F1c2UgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VydmUgV2FzbSB3aXRoIGBhcHBsaWNhdGlvbi93YXNtYCBNSU1FIHR5cGUuIEZhbGxpbmcgYmFjayB0byBgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVgIHdoaWNoIGlzIHNsb3dlci4gT3JpZ2luYWwgZXJyb3I6XG4iLHQpfWNvbnN0IGE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShhLHQpfXtjb25zdCBhPWF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGUsdCk7cmV0dXJuIGEgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5JbnN0YW5jZT97aW5zdGFuY2U6YSxtb2R1bGU6ZX06YX19KGF3YWl0IGUsdCk7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQoYSxyKX1jbGFzcyBDb2xvclNwYWNle3N0YXRpYyNyPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubmFtZT1lO3RoaXMubnVtQ29tcHM9dH1nZXRSZ2IoZSx0LGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpKXt0aGlzLmdldFJnYkl0ZW0oZSx0LGEsMCk7cmV0dXJuIGF9Z2V0UmdiSGV4KGUsdCl7Y29uc3QgYT10aGlzLmdldFJnYihlLHQsQ29sb3JTcGFjZS4jcik7cmV0dXJuIFV0aWwubWFrZUhleENvbG9yKGFbMF0sYVsxXSxhWzJdKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe3VucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JJdGVtIil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsaSxuLHMpe3VucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JCdWZmZXIiKX1nZXRPdXRwdXRMZW5ndGgoZSx0KXt1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0T3V0cHV0TGVuZ3RoIil9aXNQYXNzdGhyb3VnaChlKXtyZXR1cm4hMX1pc0RlZmF1bHREZWNvZGUoZSx0KXtyZXR1cm4gQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUoZSx0aGlzLm51bUNvbXBzKX1maWxsUmdiKGUsdCxhLHIsaSxuLHMsbyxjKXtjb25zdCBsPXQqYTtsZXQgaD1udWxsO2NvbnN0IHU9MTw8cyxkPWEhPT1pfHx0IT09cjtpZih0aGlzLmlzUGFzc3Rocm91Z2gocykpaD1vO2Vsc2UgaWYoMT09PXRoaXMubnVtQ29tcHMmJmw+dSYmIkRldmljZUdyYXkiIT09dGhpcy5uYW1lJiYiRGV2aWNlUkdCIiE9PXRoaXMubmFtZSl7Y29uc3QgdD1zPD04P25ldyBVaW50OEFycmF5KHUpOm5ldyBVaW50MTZBcnJheSh1KTtmb3IobGV0IGU9MDtlPHU7ZSsrKXRbZV09ZTtjb25zdCBhPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKnUpO3RoaXMuZ2V0UmdiQnVmZmVyKHQsMCx1LGEsMCxzLDApO2lmKGQpe2g9bmV3IFVpbnQ4QXJyYXkoMypsKTtsZXQgZT0wO2ZvcihsZXQgdD0wO3Q8bDsrK3Qpe2NvbnN0IHI9MypvW3RdO2hbZSsrXT1hW3JdO2hbZSsrXT1hW3IrMV07aFtlKytdPWFbcisyXX19ZWxzZXtsZXQgdD0wO2ZvcihsZXQgcj0wO3I8bDsrK3Ipe2NvbnN0IGk9MypvW3JdO2VbdCsrXT1hW2ldO2VbdCsrXT1hW2krMV07ZVt0KytdPWFbaSsyXTt0Kz1jfX19ZWxzZSBpZihkKXtoPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmwpO3RoaXMuZ2V0UmdiQnVmZmVyKG8sMCxsLGgsMCxzLDApfWVsc2UgdGhpcy5nZXRSZ2JCdWZmZXIobywwLHIqbixlLDAscyxjKTtpZihoKWlmKGQpIWZ1bmN0aW9uIHJlc2l6ZVJnYkltYWdlKGUsdCxhLHIsaSxuLHMpe3M9MSE9PXM/MDpzO2NvbnN0IG89YS9pLGM9ci9uO2xldCBsLGg9MDtjb25zdCB1PW5ldyBVaW50MTZBcnJheShpKSxkPTMqYTtmb3IobGV0IGU9MDtlPGk7ZSsrKXVbZV09MypNYXRoLmZsb29yKGUqbyk7Zm9yKGxldCBhPTA7YTxuO2ErKyl7Y29uc3Qgcj1NYXRoLmZsb29yKGEqYykqZDtmb3IobGV0IGE9MDthPGk7YSsrKXtsPXIrdVthXTt0W2grK109ZVtsKytdO3RbaCsrXT1lW2wrK107dFtoKytdPWVbbCsrXTtoKz1zfX19KGgsZSx0LGEscixpLGMpO2Vsc2V7bGV0IHQ9MCxhPTA7Zm9yKGxldCBpPTAscz1yKm47aTxzO2krKyl7ZVt0KytdPWhbYSsrXTtlW3QrK109aFthKytdO2VbdCsrXT1oW2ErK107dCs9Y319fWdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKXtyZXR1cm4gc2hhZG93KHRoaXMsInVzZXNaZXJvVG9PbmVSYW5nZSIsITApfXN0YXRpYyBpc0RlZmF1bHREZWNvZGUoZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyKnQhPT1lLmxlbmd0aCl7d2FybigiVGhlIGRlY29kZSBtYXAgaXMgbm90IHRoZSBjb3JyZWN0IGxlbmd0aCIpO3JldHVybiEwfWZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrPTIpaWYoMCE9PWVbdF18fDEhPT1lW3QrMV0pcmV0dXJuITE7cmV0dXJuITB9fWNsYXNzIEFsdGVybmF0ZUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoIkFsdGVybmF0ZSIsZSk7dGhpcy5iYXNlPXQ7dGhpcy50aW50Rm49YTt0aGlzLnRtcEJ1Zj1uZXcgRmxvYXQzMkFycmF5KHQubnVtQ29tcHMpfWdldFJnYkl0ZW0oZSx0LGEscil7Y29uc3QgaT10aGlzLnRtcEJ1Zjt0aGlzLnRpbnRGbihlLHQsaSwwKTt0aGlzLmJhc2UuZ2V0UmdiSXRlbShpLDAsYSxyKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixpLG4scyl7Y29uc3Qgbz10aGlzLnRpbnRGbixjPXRoaXMuYmFzZSxsPTEvKCgxPDxuKS0xKSxoPWMubnVtQ29tcHMsdT1jLnVzZXNaZXJvVG9PbmVSYW5nZSxkPShjLmlzUGFzc3Rocm91Z2goOCl8fCF1KSYmMD09PXM7bGV0IGY9ZD9pOjA7Y29uc3QgZz1kP3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgqYSkscD10aGlzLm51bUNvbXBzLG09bmV3IEZsb2F0MzJBcnJheShwKSxiPW5ldyBGbG9hdDMyQXJyYXkoaCk7bGV0IHksdztmb3IoeT0wO3k8YTt5Kyspe2Zvcih3PTA7dzxwO3crKyltW3ddPWVbdCsrXSpsO28obSwwLGIsMCk7aWYodSlmb3Iodz0wO3c8aDt3KyspZ1tmKytdPTI1NSpiW3ddO2Vsc2V7Yy5nZXRSZ2JJdGVtKGIsMCxnLGYpO2YrPWh9fWR8fGMuZ2V0UmdiQnVmZmVyKGcsMCxhLHIsaSw4LHMpfWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzL3RoaXMubnVtQ29tcHMsdCl9fWNsYXNzIFBhdHRlcm5DUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSl7c3VwZXIoIlBhdHRlcm4iLG51bGwpO3RoaXMuYmFzZT1lfWlzRGVmYXVsdERlY29kZShlLHQpe3VucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZSIpfX1jbGFzcyBJbmRleGVkQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiSW5kZXhlZCIsMSk7dGhpcy5iYXNlPWU7dGhpcy5oaWdoVmFsPXQ7Y29uc3Qgcj1lLm51bUNvbXBzKih0KzEpO3RoaXMubG9va3VwPW5ldyBVaW50OEFycmF5KHIpO2lmKGEgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKXtjb25zdCBlPWEuZ2V0Qnl0ZXMocik7dGhpcy5sb29rdXAuc2V0KGUpfWVsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBhKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW5kZXhlZENTIC0gdW5yZWNvZ25pemVkIGxvb2t1cCB0YWJsZTogJHthfWApO2ZvcihsZXQgZT0wO2U8cjsrK2UpdGhpcy5sb29rdXBbZV09MjU1JmEuY2hhckNvZGVBdChlKX19Z2V0UmdiSXRlbShlLHQsYSxyKXtjb25zdHtiYXNlOmksaGlnaFZhbDpuLGxvb2t1cDpzfT10aGlzLG89TWF0aENsYW1wKE1hdGgucm91bmQoZVt0XSksMCxuKSppLm51bUNvbXBzO2kuZ2V0UmdiQnVmZmVyKHMsbywxLGEsciw4LDApfWdldFJnYkJ1ZmZlcihlLHQsYSxyLGksbixzKXtjb25zdHtiYXNlOm8saGlnaFZhbDpjLGxvb2t1cDpsfT10aGlzLHtudW1Db21wczpofT1vLHU9by5nZXRPdXRwdXRMZW5ndGgoaCxzKTtmb3IobGV0IG49MDtuPGE7KytuKXtjb25zdCBhPU1hdGhDbGFtcChNYXRoLnJvdW5kKGVbdCsrXSksMCxjKSpoO28uZ2V0UmdiQnVmZmVyKGwsYSwxLHIsaSw4LHMpO2krPXV9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzLHQpfWlzRGVmYXVsdERlY29kZShlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2lmKDIhPT1lLmxlbmd0aCl7d2FybigiRGVjb2RlIG1hcCBsZW5ndGggaXMgbm90IGNvcnJlY3QiKTtyZXR1cm4hMH1pZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDwxKXt3YXJuKCJCaXRzIHBlciBjb21wb25lbnQgaXMgbm90IGNvcnJlY3QiKTtyZXR1cm4hMH1yZXR1cm4gMD09PWVbMF0mJmVbMV09PT0oMTw8dCktMX19Y2xhc3MgRGV2aWNlR3JheUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VHcmF5IiwxKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2NvbnN0IGk9MjU1KmVbdF07YVtyXT1hW3IrMV09YVtyKzJdPWl9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsaSxuLHMpe2NvbnN0IG89MjU1LygoMTw8biktMSk7bGV0IGM9dCxsPWk7Zm9yKGxldCB0PTA7dDxhOysrdCl7Y29uc3QgdD1vKmVbYysrXTtyW2wrK109dDtyW2wrK109dDtyW2wrK109dDtsKz1zfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KX19Y2xhc3MgRGV2aWNlUmdiQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZVJHQiIsMyl9Z2V0UmdiSXRlbShlLHQsYSxyKXthW3JdPTI1NSplW3RdO2FbcisxXT0yNTUqZVt0KzFdO2FbcisyXT0yNTUqZVt0KzJdfWdldFJnYkJ1ZmZlcihlLHQsYSxyLGksbixzKXtpZig4PT09biYmMD09PXMpe3Iuc2V0KGUuc3ViYXJyYXkodCx0KzMqYSksaSk7cmV0dXJufWNvbnN0IG89MjU1LygoMTw8biktMSk7bGV0IGM9dCxsPWk7Zm9yKGxldCB0PTA7dDxhOysrdCl7cltsKytdPW8qZVtjKytdO3JbbCsrXT1vKmVbYysrXTtyW2wrK109byplW2MrK107bCs9c319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuIDg9PT1lfX1jbGFzcyBEZXZpY2VSZ2JhQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZVJHQkEiLDQpfWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiA0KmV9aXNQYXNzdGhyb3VnaChlKXtyZXR1cm4gOD09PWV9ZmlsbFJnYihlLHQsYSxyLGksbixzLG8sYyl7YSE9PWl8fHQhPT1yP2Z1bmN0aW9uIHJlc2l6ZVJnYmFJbWFnZShlLHQsYSxyLGksbixzKXtjb25zdCBvPWEvaSxjPXIvbjtsZXQgbD0wO2NvbnN0IGg9bmV3IFVpbnQxNkFycmF5KGkpO2lmKDE9PT1zKXtmb3IobGV0IGU9MDtlPGk7ZSsrKWhbZV09TWF0aC5mbG9vcihlKm8pO2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyKSxzPW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciksdT1GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj8xNjc3NzIxNTo0Mjk0OTY3MDQwO2ZvcihsZXQgZT0wO2U8bjtlKyspe2NvbnN0IHQ9ci5zdWJhcnJheShNYXRoLmZsb29yKGUqYykqYSk7Zm9yKGxldCBlPTA7ZTxpO2UrKylzW2wrK118PXRbaFtlXV0mdX19ZWxzZXtjb25zdCByPTQscz1hKnI7Zm9yKGxldCBlPTA7ZTxpO2UrKyloW2VdPU1hdGguZmxvb3IoZSpvKSpyO2ZvcihsZXQgYT0wO2E8bjthKyspe2NvbnN0IHI9ZS5zdWJhcnJheShNYXRoLmZsb29yKGEqYykqcyk7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7Y29uc3QgYT1oW2VdO3RbbCsrXT1yW2FdO3RbbCsrXT1yW2ErMV07dFtsKytdPXJbYSsyXX19fX0obyxlLHQsYSxyLGksYyk6ZnVuY3Rpb24gY29weVJnYmFJbWFnZShlLHQsYSl7aWYoMT09PWEpe2NvbnN0IGE9bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyKSxyPW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciksaT1GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj8xNjc3NzIxNTo0Mjk0OTY3MDQwO2ZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0O2UrKylyW2VdfD1hW2VdJml9ZWxzZXtsZXQgYT0wO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrPTQpe3RbYSsrXT1lW3JdO3RbYSsrXT1lW3IrMV07dFthKytdPWVbcisyXX19fShvLGUsYyl9fWNsYXNzIERldmljZUNteWtDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoKXtzdXBlcigiRGV2aWNlQ01ZSyIsNCl9I2koZSx0LGEscixpKXtjb25zdCBuPWVbdF0qYSxzPWVbdCsxXSphLG89ZVt0KzJdKmEsYz1lW3QrM10qYTtyW2ldPTI1NStuKigtNC4zODczMzIzODQ2MDk5ODgqbis1NC40ODYxNTE5NDE4OTE3NipzKzE4LjgyMjkwNTAyMTY1MzAyKm8rMjEyLjI1NjYyNDUxNjM5NTg1KmMtMjg1LjIzMzEwMjYxMzcwMDQpK3MqKDEuNzE0OTc2MzQ3NzM2MjEzNCpzLTUuNjA5NjczNjkwNDA0NzMxNSpvKy0xNy44NzM4NzA4NjE0MTU0NDQqYy01LjQ5NzAwNjQyNzE5NjM2NikrbyooLTIuNTIxNzM0MDEzMTY4MzAzMypvLTIxLjI0ODkyMzMzNzM1MzA3MypjKzE3LjUxMTkyNzA4NDE4MTMpK2MqKC0yMS44NjEyMjE0NzQ2MzYwNSpjLTE4OS40ODE4MDgzNTkyMjc0Nyk7cltpKzFdPTI1NStuKig4Ljg0MTA0MTQyMjAzNjE0OSpuKzYwLjExODAyNzA0NTU5NzM2NipzKzYuODcxNDI1NTkyMDQ5MDA3Km8rMzEuMTU5MTAwMTMwMDU1OTIyKmMtNzkuMjk3MDg0NDgxNjU0OCkrcyooLTE1LjMxMDM2MTMwNjk2NzgxNypzKzE3LjU3NTI1MTI2MTEwOTQ4MipvKzEzMS4zNTI1MDkxMjQ5Mzk3NipjLTE5MC45NDUzMzAyNTg4OTUxKStvKig0LjQ0NDMzOTEwMjg1MjczOSpvKzkuODYzMjg2MTQ5MzQwNSpjLTI0Ljg2NzQxNTgyNTU1ODc4KStjKigtMjAuNzM3MzI1NDcxMTgxMDM0KmMtMTg3LjgwNDUzNzA5NzE5NTc4KTtyW2krMl09MjU1K24qKC44ODQyNTIyNDMwMDAzMjk2Km4rOC4wNzg2Nzc1MDMxMTI5MjgqcyszMC44OTk3ODMwOTcwMzcyOSpvLS4yMzg4MzIzODY4OTE3ODkzNCpjLTE0LjE4MzU3Njc5OTY3MzI4NikrcyooMTAuNDk1OTMyNzM0MzIwNzIqcys2My4wMjM3ODQ5NDc1NDA1MipvKzUwLjYwNjk1NzY1NjM2MDczNCpjLTExMi4yMzg4NDI1MzcxOTI0OCkrbyooLjAzMjk2MDQxMTE0ODczMjE3Km8rMTE1LjYwMzg0NDQ5NjQ2NjQxKmMtMTkzLjU4MjA5MzU2ODYxNTA1KStjKigtMjIuMzM4MTY4MDczMDk4ODYqYy0xODAuMTI2MTM5NzQ3MDgzNjcpfWdldFJnYkl0ZW0oZSx0LGEscil7dGhpcy4jaShlLHQsMSxhLHIpfWdldFJnYkJ1ZmZlcihlLHQsYSxyLGksbixzKXtjb25zdCBvPTEvKCgxPDxuKS0xKTtmb3IobGV0IG49MDtuPGE7bisrKXt0aGlzLiNpKGUsdCxvLHIsaSk7dCs9NDtpKz0zK3N9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlLzQqKDMrdCl8MH19Y2xhc3MgQ2FsR3JheUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoIkNhbEdyYXkiLDEpO2lmKCFlKXRocm93IG5ldyBGb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbEdyYXkiKTtbdGhpcy5YVyx0aGlzLllXLHRoaXMuWlddPWU7W3RoaXMuWEIsdGhpcy5ZQix0aGlzLlpCXT10fHxbMCwwLDBdO3RoaXMuRz1hfHwxO2lmKHRoaXMuWFc8MHx8dGhpcy5aVzwwfHwxIT09dGhpcy5ZVyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX0sIG5vIGZhbGxiYWNrIGF2YWlsYWJsZWApO2lmKHRoaXMuWEI8MHx8dGhpcy5ZQjwwfHx0aGlzLlpCPDApe2luZm8oYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLlhCPXRoaXMuWUI9dGhpcy5aQj0wfTA9PT10aGlzLlhCJiYwPT09dGhpcy5ZQiYmMD09PXRoaXMuWkJ8fHdhcm4oYCR7dGhpcy5uYW1lfSwgQmxhY2tQb2ludDogWEI6ICR7dGhpcy5YQn0sIFlCOiAke3RoaXMuWUJ9LCBaQjogJHt0aGlzLlpCfSwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLmApO2lmKHRoaXMuRzwxKXtpbmZvKGBJbnZhbGlkIEdhbW1hOiAke3RoaXMuR30gZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5HPTF9fSNpKGUsdCxhLHIsaSl7Y29uc3Qgbj0oZVt0XSppKSoqdGhpcy5HLHM9dGhpcy5ZVypuLG89TWF0aC5tYXgoMjk1LjgqcyoqLjMzMzMzMzMzMzMzMzMzMzMtNDAuOCwwKTthW3JdPW87YVtyKzFdPW87YVtyKzJdPW99Z2V0UmdiSXRlbShlLHQsYSxyKXt0aGlzLiNpKGUsdCxhLHIsMSl9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsaSxuLHMpe2NvbnN0IG89MS8oKDE8PG4pLTEpO2ZvcihsZXQgbj0wO248YTsrK24pe3RoaXMuI2koZSx0LHIsaSxvKTt0Kz0xO2krPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCl9fWNsYXNzIENhbFJHQkNTIGV4dGVuZHMgQ29sb3JTcGFjZXtzdGF0aWMjbj1uZXcgRmxvYXQzMkFycmF5KFsuODk1MSwuMjY2NCwtLjE2MTQsLS43NTAyLDEuNzEzNSwuMDM2NywuMDM4OSwtLjA2ODUsMS4wMjk2XSk7c3RhdGljI3M9bmV3IEZsb2F0MzJBcnJheShbLjk4Njk5MjksLS4xNDcwNTQzLC4xNTk5NjI3LC40MzIzMDUzLC41MTgzNjAzLC4wNDkyOTEyLC0uMDA4NTI4NywuMDQwMDQyOCwuOTY4NDg2N10pO3N0YXRpYyNvPW5ldyBGbG9hdDMyQXJyYXkoWzMuMjQwNDU0MiwtMS41MzcxMzg1LC0uNDk4NTMxNCwtLjk2OTI2NiwxLjg3NjAxMDgsLjA0MTU1NiwuMDU1NjQzNCwtLjIwNDAyNTksMS4wNTcyMjUyXSk7c3RhdGljI2M9bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKTtzdGF0aWMjbD1uZXcgRmxvYXQzMkFycmF5KDMpO3N0YXRpYyNoPW5ldyBGbG9hdDMyQXJyYXkoMyk7c3RhdGljI3U9bmV3IEZsb2F0MzJBcnJheSgzKTtzdGF0aWMjZD0oMjQvMTE2KSoqMy84O2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKCJDYWxSR0IiLDMpO2lmKCFlKXRocm93IG5ldyBGb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbFJHQiIpO2NvbnN0W2ksbixzXT10aGlzLndoaXRlUG9pbnQ9ZSxbbyxjLGxdPXRoaXMuYmxhY2tQb2ludD10fHxuZXcgRmxvYXQzMkFycmF5KDMpO1t0aGlzLkdSLHRoaXMuR0csdGhpcy5HQl09YXx8bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKTtbdGhpcy5NWEEsdGhpcy5NWUEsdGhpcy5NWkEsdGhpcy5NWEIsdGhpcy5NWUIsdGhpcy5NWkIsdGhpcy5NWEMsdGhpcy5NWUMsdGhpcy5NWkNdPXJ8fG5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMSwwLDAsMCwxXSk7aWYoaTwwfHxzPDB8fDEhPT1uKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICR7dGhpcy5uYW1lfSwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlYCk7aWYobzwwfHxjPDB8fGw8MCl7aW5mbyhgSW52YWxpZCBCbGFja1BvaW50IGZvciAke3RoaXMubmFtZX0gWyR7b30sICR7Y30sICR7bH1dLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLmJsYWNrUG9pbnQ9bmV3IEZsb2F0MzJBcnJheSgzKX1pZih0aGlzLkdSPDB8fHRoaXMuR0c8MHx8dGhpcy5HQjwwKXtpbmZvKGBJbnZhbGlkIEdhbW1hIFske3RoaXMuR1J9LCAke3RoaXMuR0d9LCAke3RoaXMuR0J9XSBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLkdSPXRoaXMuR0c9dGhpcy5HQj0xfX0jZihlLHQsYSl7YVswXT1lWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXTthWzFdPWVbM10qdFswXStlWzRdKnRbMV0rZVs1XSp0WzJdO2FbMl09ZVs2XSp0WzBdK2VbN10qdFsxXStlWzhdKnRbMl19I2coZSx0LGEpe2FbMF09MSp0WzBdL2VbMF07YVsxXT0xKnRbMV0vZVsxXTthWzJdPTEqdFsyXS9lWzJdfSNwKGUsdCxhKXthWzBdPS45NTA0Nyp0WzBdL2VbMF07YVsxXT0xKnRbMV0vZVsxXTthWzJdPTEuMDg4ODMqdFsyXS9lWzJdfSNtKGUpe3JldHVybiBlPD0uMDAzMTMwOD9NYXRoQ2xhbXAoMTIuOTIqZSwwLDEpOmU+PS45OTU1NDUyNT8xOk1hdGhDbGFtcCgxLjA1NSplKiooMS8yLjQpLS4wNTUsMCwxKX0jYihlKXtyZXR1cm4gZTwwPy10aGlzLiNiKC1lKTplPjg/KChlKzE2KS8xMTYpKiozOmUqQ2FsUkdCQ1MuI2R9I3koZSx0LGEpe2lmKDA9PT1lWzBdJiYwPT09ZVsxXSYmMD09PWVbMl0pe2FbMF09dFswXTthWzFdPXRbMV07YVsyXT10WzJdO3JldHVybn1jb25zdCByPXRoaXMuI2IoMCksaT0oMS1yKS8oMS10aGlzLiNiKGVbMF0pKSxuPTEtaSxzPSgxLXIpLygxLXRoaXMuI2IoZVsxXSkpLG89MS1zLGM9KDEtcikvKDEtdGhpcy4jYihlWzJdKSksbD0xLWM7YVswXT10WzBdKmkrbjthWzFdPXRbMV0qcytvO2FbMl09dFsyXSpjK2x9I3coZSx0LGEpe2lmKDE9PT1lWzBdJiYxPT09ZVsyXSl7YVswXT10WzBdO2FbMV09dFsxXTthWzJdPXRbMl07cmV0dXJufWNvbnN0IHI9YTt0aGlzLiNmKENhbFJHQkNTLiNuLHQscik7Y29uc3QgaT1DYWxSR0JDUy4jbDt0aGlzLiNnKGUscixpKTt0aGlzLiNmKENhbFJHQkNTLiNzLGksYSl9I3goZSx0LGEpe2NvbnN0IHI9YTt0aGlzLiNmKENhbFJHQkNTLiNuLHQscik7Y29uc3QgaT1DYWxSR0JDUy4jbDt0aGlzLiNwKGUscixpKTt0aGlzLiNmKENhbFJHQkNTLiNzLGksYSl9I2koZSx0LGEscixpKXtjb25zdCBuPU1hdGhDbGFtcChlW3RdKmksMCwxKSxzPU1hdGhDbGFtcChlW3QrMV0qaSwwLDEpLG89TWF0aENsYW1wKGVbdCsyXSppLDAsMSksYz0xPT09bj8xOm4qKnRoaXMuR1IsbD0xPT09cz8xOnMqKnRoaXMuR0csaD0xPT09bz8xOm8qKnRoaXMuR0IsdT10aGlzLk1YQSpjK3RoaXMuTVhCKmwrdGhpcy5NWEMqaCxkPXRoaXMuTVlBKmMrdGhpcy5NWUIqbCt0aGlzLk1ZQypoLGY9dGhpcy5NWkEqYyt0aGlzLk1aQipsK3RoaXMuTVpDKmgsZz1DYWxSR0JDUy4jaDtnWzBdPXU7Z1sxXT1kO2dbMl09Zjtjb25zdCBwPUNhbFJHQkNTLiN1O3RoaXMuI3codGhpcy53aGl0ZVBvaW50LGcscCk7Y29uc3QgbT1DYWxSR0JDUy4jaDt0aGlzLiN5KHRoaXMuYmxhY2tQb2ludCxwLG0pO2NvbnN0IGI9Q2FsUkdCQ1MuI3U7dGhpcy4jeChDYWxSR0JDUy4jYyxtLGIpO2NvbnN0IHk9Q2FsUkdCQ1MuI2g7dGhpcy4jZihDYWxSR0JDUy4jbyxiLHkpO2Fbcl09MjU1KnRoaXMuI20oeVswXSk7YVtyKzFdPTI1NSp0aGlzLiNtKHlbMV0pO2FbcisyXT0yNTUqdGhpcy4jbSh5WzJdKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe3RoaXMuI2koZSx0LGEsciwxKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixpLG4scyl7Y29uc3Qgbz0xLygoMTw8biktMSk7Zm9yKGxldCBuPTA7bjxhOysrbil7dGhpcy4jaShlLHQscixpLG8pO3QrPTM7aSs9MytzfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9fWNsYXNzIExhYkNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoIkxhYiIsMyk7aWYoIWUpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgTGFiIik7W3RoaXMuWFcsdGhpcy5ZVyx0aGlzLlpXXT1lO1t0aGlzLmFtaW4sdGhpcy5hbWF4LHRoaXMuYm1pbix0aGlzLmJtYXhdPWF8fFstMTAwLDEwMCwtMTAwLDEwMF07W3RoaXMuWEIsdGhpcy5ZQix0aGlzLlpCXT10fHxbMCwwLDBdO2lmKHRoaXMuWFc8MHx8dGhpcy5aVzwwfHwxIT09dGhpcy5ZVyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzLCBubyBmYWxsYmFjayBhdmFpbGFibGUiKTtpZih0aGlzLlhCPDB8fHRoaXMuWUI8MHx8dGhpcy5aQjwwKXtpbmZvKCJJbnZhbGlkIEJsYWNrUG9pbnQsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0Iik7dGhpcy5YQj10aGlzLllCPXRoaXMuWkI9MH1pZih0aGlzLmFtaW4+dGhpcy5hbWF4fHx0aGlzLmJtaW4+dGhpcy5ibWF4KXtpbmZvKCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMiKTt0aGlzLmFtaW49LTEwMDt0aGlzLmFtYXg9MTAwO3RoaXMuYm1pbj0tMTAwO3RoaXMuYm1heD0xMDB9fSNTKGUpe3JldHVybiBlPj02LzI5P2UqKjM6MTA4Lzg0MSooZS00LzI5KX0jQShlLHQsYSxyKXtyZXR1cm4gYStlKihyLWEpL3R9I2koZSx0LGEscixpKXtsZXQgbj1lW3RdLHM9ZVt0KzFdLG89ZVt0KzJdO2lmKCExIT09YSl7bj10aGlzLiNBKG4sYSwwLDEwMCk7cz10aGlzLiNBKHMsYSx0aGlzLmFtaW4sdGhpcy5hbWF4KTtvPXRoaXMuI0EobyxhLHRoaXMuYm1pbix0aGlzLmJtYXgpfXM+dGhpcy5hbWF4P3M9dGhpcy5hbWF4OnM8dGhpcy5hbWluJiYocz10aGlzLmFtaW4pO28+dGhpcy5ibWF4P289dGhpcy5ibWF4Om88dGhpcy5ibWluJiYobz10aGlzLmJtaW4pO2NvbnN0IGM9KG4rMTYpLzExNixsPWMrcy81MDAsaD1jLW8vMjAwLHU9dGhpcy5YVyp0aGlzLiNTKGwpLGQ9dGhpcy5ZVyp0aGlzLiNTKGMpLGY9dGhpcy5aVyp0aGlzLiNTKGgpO2xldCBnLHAsbTtpZih0aGlzLlpXPDEpe2c9My4xMzM5KnUrLTEuNjE3KmQrLS40OTA2KmY7cD0tLjk3ODUqdSsxLjkxNipkKy4wMzMzKmY7bT0uMDcyKnUrLS4yMjkqZCsxLjQwNTcqZn1lbHNle2c9My4yNDA2KnUrLTEuNTM3MipkKy0uNDk4NipmO3A9LS45Njg5KnUrMS44NzU4KmQrLjA0MTUqZjttPS4wNTU3KnUrLS4yMDQqZCsxLjA1NypmfXJbaV09MjU1Kk1hdGguc3FydChnKTtyW2krMV09MjU1Kk1hdGguc3FydChwKTtyW2krMl09MjU1Kk1hdGguc3FydChtKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe3RoaXMuI2koZSx0LCExLGEscil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsaSxuLHMpe2NvbnN0IG89KDE8PG4pLTE7Zm9yKGxldCBuPTA7bjxhO24rKyl7dGhpcy4jaShlLHQsbyxyLGkpO3QrPTM7aSs9MytzfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9aXNEZWZhdWx0RGVjb2RlKGUsdCl7cmV0dXJuITB9Z2V0IHVzZXNaZXJvVG9PbmVSYW5nZSgpe3JldHVybiBzaGFkb3codGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fWZ1bmN0aW9uIGZldGNoU3luYyhlKXtjb25zdCB0PW5ldyBYTUxIdHRwUmVxdWVzdDt0Lm9wZW4oIkdFVCIsZSwhMSk7dC5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIjt0LnNlbmQobnVsbCk7cmV0dXJuIHQucmVzcG9uc2V9Y2xhc3MgSWNjQ29sb3JTcGFjZSBleHRlbmRzIENvbG9yU3BhY2V7I2s7I0M7c3RhdGljI3Y9ITA7c3RhdGljI0Y9bnVsbDtzdGF0aWMjST1udWxsO2NvbnN0cnVjdG9yKGUsdCxhKXtpZighSWNjQ29sb3JTcGFjZS5pc1VzYWJsZSl0aHJvdyBuZXcgRXJyb3IoIk5vIElDQyBjb2xvciBzcGFjZSBzdXBwb3J0Iik7c3VwZXIodCxhKTtsZXQgcjtzd2l0Y2goYSl7Y2FzZSAxOnI9QWEuR3JheTg7dGhpcy4jQz0oZSx0LGEpPT5mdW5jdGlvbiBxY21zX2NvbnZlcnRfb25lKGUsdCxhKXt5YS5xY21zX2NvbnZlcnRfb25lKGUsdCxhKX0odGhpcy4jaywyNTUqZVt0XSxhKTticmVhaztjYXNlIDM6cj1BYS5SR0I4O3RoaXMuI0M9KGUsdCxhKT0+ZnVuY3Rpb24gcWNtc19jb252ZXJ0X3RocmVlKGUsdCxhLHIsaSl7eWEucWNtc19jb252ZXJ0X3RocmVlKGUsdCxhLHIsaSl9KHRoaXMuI2ssMjU1KmVbdF0sMjU1KmVbdCsxXSwyNTUqZVt0KzJdLGEpO2JyZWFrO2Nhc2UgNDpyPUFhLkNNWUs7dGhpcy4jQz0oZSx0LGEpPT5mdW5jdGlvbiBxY21zX2NvbnZlcnRfZm91cihlLHQsYSxyLGksbil7eWEucWNtc19jb252ZXJ0X2ZvdXIoZSx0LGEscixpLG4pfSh0aGlzLiNrLDI1NSplW3RdLDI1NSplW3QrMV0sMjU1KmVbdCsyXSwyNTUqZVt0KzNdLGEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBudW1iZXIgb2YgY29tcG9uZW50czogJHthfWApfXRoaXMuI2s9ZnVuY3Rpb24gcWNtc190cmFuc2Zvcm1lcl9mcm9tX21lbW9yeShlLHQsYSl7Y29uc3Qgcj1wYXNzQXJyYXk4VG9XYXNtMChlLHlhLl9fd2JpbmRnZW5fbWFsbG9jKSxpPVNhO3JldHVybiB5YS5xY21zX3RyYW5zZm9ybWVyX2Zyb21fbWVtb3J5KHIsaSx0LGEpPj4+MH0oZSxyLGthLlBlcmNlcHR1YWwpO2lmKCF0aGlzLiNrKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBJQ0MgY29sb3Igc3BhY2UiKTtJY2NDb2xvclNwYWNlLiNJfHw9bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KGU9PnshZnVuY3Rpb24gcWNtc19kcm9wX3RyYW5zZm9ybWVyKGUpe3lhLnFjbXNfZHJvcF90cmFuc2Zvcm1lcihlKX0oZSl9KTtJY2NDb2xvclNwYWNlLiNJLnJlZ2lzdGVyKHRoaXMsdGhpcy4jayl9Z2V0UmdiSGV4KGUsdCl7dGhpcy4jQyhlLHQsITApO3JldHVybiBRQ01TLl9jc3NDb2xvcn1nZXRSZ2JJdGVtKGUsdCxhLHIpe1FDTVMuX2Rlc3RCdWZmZXI9YTtRQ01TLl9kZXN0T2Zmc2V0PXI7UUNNUy5fZGVzdExlbmd0aD0zO3RoaXMuI0MoZSx0LCExKTtRQ01TLl9kZXN0QnVmZmVyPW51bGx9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsaSxuLHMpe2U9ZS5zdWJhcnJheSh0LHQrYSp0aGlzLm51bUNvbXBzKTtpZig4IT09bil7Y29uc3QgdD0yNTUvKCgxPDxuKS0xKTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspZVthXSo9dH1RQ01TLl9tdXN0QWRkQWxwaGE9cyYmci5idWZmZXI9PT1lLmJ1ZmZlcjtRQ01TLl9kZXN0QnVmZmVyPXI7UUNNUy5fZGVzdE9mZnNldD1pO1FDTVMuX2Rlc3RMZW5ndGg9YSooMytzKTshZnVuY3Rpb24gcWNtc19jb252ZXJ0X2FycmF5KGUsdCl7Y29uc3QgYT1wYXNzQXJyYXk4VG9XYXNtMCh0LHlhLl9fd2JpbmRnZW5fbWFsbG9jKSxyPVNhO3lhLnFjbXNfY29udmVydF9hcnJheShlLGEscil9KHRoaXMuI2ssZSk7UUNNUy5fbXVzdEFkZEFscGhhPSExO1FDTVMuX2Rlc3RCdWZmZXI9bnVsbH1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZS90aGlzLm51bUNvbXBzKigzK3QpfDB9c3RhdGljIHNldE9wdGlvbnMoe3VzZVdhc206ZSx1c2VXb3JrZXJGZXRjaDp0LHdhc21Vcmw6YX0pe2lmKHQpe3RoaXMuI3Y9ZTt0aGlzLiNGPWF9ZWxzZSB0aGlzLiN2PSExfXN0YXRpYyBnZXQgaXNVc2FibGUoKXtsZXQgZT0hMTtpZih0aGlzLiN2KWlmKHRoaXMuI0YpdHJ5e3RoaXMuX21vZHVsZT1mdW5jdGlvbiBpbml0U3luYyhlKXtpZih2b2lkIDAhPT15YSlyZXR1cm4geWE7dm9pZCAwIT09ZSYmKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PU9iamVjdC5wcm90b3R5cGU/KHttb2R1bGU6ZX09ZSk6Y29uc29sZS53YXJuKCJ1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnMgZm9yIGBpbml0U3luYygpYDsgcGFzcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCIpKTtjb25zdCB0PV9fd2JnX2dldF9pbXBvcnRzKCk7ZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZXx8KGU9bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlKSk7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQobmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKGUsdCksZSl9KHttb2R1bGU6ZmV0Y2hTeW5jKGAke3RoaXMuI0Z9cWNtc19iZy53YXNtYCl9KTtlPSEhdGhpcy5fbW9kdWxlO1FDTVMuX21lbW9yeT10aGlzLl9tb2R1bGUubWVtb3J5O1FDTVMuX21ha2VIZXhDb2xvcj1VdGlsLm1ha2VIZXhDb2xvcn1jYXRjaChlKXt3YXJuKGBJQ0NCYXNlZCBjb2xvciBzcGFjZTogIiR7ZX0iLmApfWVsc2Ugd2FybigiTm8gSUNDIGNvbG9yIHNwYWNlIHN1cHBvcnQgZHVlIHRvIG1pc3NpbmcgYHdhc21VcmxgIEFQSSBvcHRpb24iKTtyZXR1cm4gc2hhZG93KHRoaXMsImlzVXNhYmxlIixlKX19Y2xhc3MgQ215a0lDQ0Jhc2VkQ1MgZXh0ZW5kcyBJY2NDb2xvclNwYWNle3N0YXRpYyNUO2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpbnQ4QXJyYXkoZmV0Y2hTeW5jKGAke0NteWtJQ0NCYXNlZENTLiNUfUNHQVRTMDAxQ29tcGF0LXYyLW1pY3JvLmljY2ApKSwiRGV2aWNlQ01ZSyIsNCl9c3RhdGljIHNldE9wdGlvbnMoe2ljY1VybDplfSl7dGhpcy4jVD1lfXN0YXRpYyBnZXQgaXNVc2FibGUoKXtsZXQgZT0hMTtJY2NDb2xvclNwYWNlLmlzVXNhYmxlJiYodGhpcy4jVD9lPSEwOndhcm4oIk5vIENNWUsgSUNDIHByb2ZpbGUgc3VwcG9ydCBkdWUgdG8gbWlzc2luZyBgaWNjVXJsYCBBUEkgb3B0aW9uIikpO3JldHVybiBzaGFkb3codGhpcywiaXNVc2FibGUiLGUpfX1jbGFzcyBTdHJlYW0gZXh0ZW5kcyBCYXNlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKCk7dGhpcy5ieXRlcz1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpO3RoaXMuc3RhcnQ9dHx8MDt0aGlzLnBvcz10aGlzLnN0YXJ0O3RoaXMuZW5kPXQrYXx8dGhpcy5ieXRlcy5sZW5ndGg7dGhpcy5kaWN0PXJ9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH1nZXRCeXRlKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5ieXRlcyxhPXRoaXMucG9zLHI9dGhpcy5lbmQ7aWYoIWUpcmV0dXJuIHQuc3ViYXJyYXkoYSxyKTtsZXQgaT1hK2U7aT5yJiYoaT1yKTt0aGlzLnBvcz1pO3JldHVybiB0LnN1YmFycmF5KGEsaSl9Z2V0Qnl0ZVJhbmdlKGUsdCl7ZTwwJiYoZT0wKTt0PnRoaXMuZW5kJiYodD10aGlzLmVuZCk7cmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkoZSx0KX1yZXNldCgpe3RoaXMucG9zPXRoaXMuc3RhcnR9bW92ZVN0YXJ0KCl7dGhpcy5zdGFydD10aGlzLnBvc31tYWtlU3ViU3RyZWFtKGUsdCxhPW51bGwpe3JldHVybiBuZXcgU3RyZWFtKHRoaXMuYnl0ZXMuYnVmZmVyLGUsdCxhKX19Y2xhc3MgU3RyaW5nU3RyZWFtIGV4dGVuZHMgU3RyZWFte2NvbnN0cnVjdG9yKGUpe3N1cGVyKHN0cmluZ1RvQnl0ZXMoZSkpfX1jbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgU3RyZWFte2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpbnQ4QXJyYXkoMCkpfX1jbGFzcyBDaHVua2VkU3RyZWFtIGV4dGVuZHMgU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihuZXcgVWludDhBcnJheShlKSwwLGUsbnVsbCk7dGhpcy5jaHVua1NpemU9dDt0aGlzLl9sb2FkZWRDaHVua3M9bmV3IFNldDt0aGlzLm51bUNodW5rcz1NYXRoLmNlaWwoZS90KTt0aGlzLm1hbmFnZXI9YTt0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wO3RoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bms9LTF9Z2V0TWlzc2luZ0NodW5rcygpe2NvbnN0IGU9W107Zm9yKGxldCB0PTAsYT10aGlzLm51bUNodW5rczt0PGE7Kyt0KXRoaXMuX2xvYWRlZENodW5rcy5oYXModCl8fGUucHVzaCh0KTtyZXR1cm4gZX1nZXQgbnVtQ2h1bmtzTG9hZGVkKCl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5zaXplfWdldCBpc0RhdGFMb2FkZWQoKXtyZXR1cm4gdGhpcy5udW1DaHVua3NMb2FkZWQ9PT10aGlzLm51bUNodW5rc31vblJlY2VpdmVEYXRhKGUsdCl7Y29uc3QgYT10aGlzLmNodW5rU2l6ZTtpZihlJWEhPT0wKXRocm93IG5ldyBFcnJvcihgQmFkIGJlZ2luIG9mZnNldDogJHtlfWApO2NvbnN0IHI9ZSt0LmJ5dGVMZW5ndGg7aWYociVhIT09MCYmciE9PXRoaXMuYnl0ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgQmFkIGVuZCBvZmZzZXQ6ICR7cn1gKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheSh0KSxlKTtjb25zdCBpPU1hdGguZmxvb3IoZS9hKSxuPU1hdGguZmxvb3IoKHItMSkvYSkrMTtmb3IobGV0IGU9aTtlPG47KytlKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoZSl9b25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGUpe2xldCB0PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoO2NvbnN0IGE9TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShlKSx0KTt0Kz1lLmJ5dGVMZW5ndGg7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9dDtjb25zdCByPXQ+PXRoaXMuZW5kP3RoaXMubnVtQ2h1bmtzOk1hdGguZmxvb3IodC90aGlzLmNodW5rU2l6ZSk7Zm9yKGxldCBlPWE7ZTxyOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGUpfWVuc3VyZUJ5dGUoZSl7aWYoZTx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgTWlzc2luZ0RhdGFFeGNlcHRpb24oZSxlKzEpO3RoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bms9dH19ZW5zdXJlUmFuZ2UoZSx0KXtpZihlPj10KXJldHVybjtpZih0PD10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgYT1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKGE+dGhpcy5udW1DaHVua3MpcmV0dXJuO2NvbnN0IHI9TWF0aC5taW4oTWF0aC5mbG9vcigodC0xKS90aGlzLmNodW5rU2l6ZSkrMSx0aGlzLm51bUNodW5rcyk7Zm9yKGxldCBpPWE7aTxyOysraSlpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhpKSl0aHJvdyBuZXcgTWlzc2luZ0RhdGFFeGNlcHRpb24oZSx0KX1uZXh0RW1wdHlDaHVuayhlKXtjb25zdCB0PXRoaXMubnVtQ2h1bmtzO2ZvcihsZXQgYT0wO2E8dDsrK2Epe2NvbnN0IHI9KGUrYSkldDtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhyKSlyZXR1cm4gcn1yZXR1cm4gbnVsbH1oYXNDaHVuayhlKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhlKX1nZXRCeXRlKCl7Y29uc3QgZT10aGlzLnBvcztpZihlPj10aGlzLmVuZClyZXR1cm4tMTtlPj10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVCeXRlKGUpO3JldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5ieXRlcyxhPXRoaXMucG9zLHI9dGhpcy5lbmQ7aWYoIWUpe3I+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoYSxyKTtyZXR1cm4gdC5zdWJhcnJheShhLHIpfWxldCBpPWErZTtpPnImJihpPXIpO2k+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoYSxpKTt0aGlzLnBvcz1pO3JldHVybiB0LnN1YmFycmF5KGEsaSl9Z2V0Qnl0ZVJhbmdlKGUsdCl7ZTwwJiYoZT0wKTt0PnRoaXMuZW5kJiYodD10aGlzLmVuZCk7dD50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShlLHQpO3JldHVybiB0aGlzLmJ5dGVzLnN1YmFycmF5KGUsdCl9bWFrZVN1YlN0cmVhbShlLHQsYT1udWxsKXt0P2UrdD50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShlLGUrdCk6ZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKTtmdW5jdGlvbiBDaHVua2VkU3RyZWFtU3Vic3RyZWFtKCl7fUNodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGhpcyk7Q2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUuZ2V0TWlzc2luZ0NodW5rcz1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5jaHVua1NpemUsdD1NYXRoLmZsb29yKHRoaXMuc3RhcnQvZSksYT1NYXRoLmZsb29yKCh0aGlzLmVuZC0xKS9lKSsxLHI9W107Zm9yKGxldCBlPXQ7ZTxhOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGUpfHxyLnB1c2goZSk7cmV0dXJuIHJ9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZSwiaXNEYXRhTG9hZGVkIix7Z2V0KCl7cmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkPT09dGhpcy5udW1DaHVua3N8fDA9PT10aGlzLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGh9LGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IHI9bmV3IENodW5rZWRTdHJlYW1TdWJzdHJlYW07ci5wb3M9ci5zdGFydD1lO3IuZW5kPWUrdHx8dGhpcy5lbmQ7ci5kaWN0PWE7cmV0dXJuIHJ9Z2V0QmFzZVN0cmVhbXMoKXtyZXR1cm5bdGhpc119fWNsYXNzIENodW5rZWRTdHJlYW1NYW5hZ2Vye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7dGhpcy5jaHVua1NpemU9dC5yYW5nZUNodW5rU2l6ZTt0aGlzLnN0cmVhbT1uZXcgQ2h1bmtlZFN0cmVhbSh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKTt0aGlzLnBkZk5ldHdvcmtTdHJlYW09ZTt0aGlzLmRpc2FibGVBdXRvRmV0Y2g9dC5kaXNhYmxlQXV0b0ZldGNoO3RoaXMubXNnSGFuZGxlcj10Lm1zZ0hhbmRsZXI7dGhpcy5jdXJyUmVxdWVzdElkPTA7dGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXA7dGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXA7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcDt0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wO3RoaXMuYWJvcnRlZD0hMTt0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PVByb21pc2Uud2l0aFJlc29sdmVycygpfXNlbmRSZXF1ZXN0KGUsdCl7Y29uc3QgYT10aGlzLnBkZk5ldHdvcmtTdHJlYW0uZ2V0UmFuZ2VSZWFkZXIoZSx0KTthLmlzU3RyZWFtaW5nU3VwcG9ydGVkfHwoYS5vblByb2dyZXNzPXRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMpKTtsZXQgcj1bXSxpPTA7cmV0dXJuIG5ldyBQcm9taXNlKChlLHQpPT57Y29uc3QgcmVhZENodW5rPSh7dmFsdWU6bixkb25lOnN9KT0+e3RyeXtpZihzKXtjb25zdCB0PWFycmF5QnVmZmVyc1RvQnl0ZXMocik7cj1udWxsO2UodCk7cmV0dXJufWkrPW4uYnl0ZUxlbmd0aDthLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLm9uUHJvZ3Jlc3Moe2xvYWRlZDppfSk7ci5wdXNoKG4pO2EucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpfWNhdGNoKGUpe3QoZSl9fTthLnJlYWQoKS50aGVuKHJlYWRDaHVuayx0KX0pLnRoZW4odD0+e3RoaXMuYWJvcnRlZHx8dGhpcy5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pfXJlcXVlc3RBbGxDaHVua3MoZT0hMSl7aWYoIWUpe2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3RoaXMuX3JlcXVlc3RDaHVua3MoZSl9cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX1fcmVxdWVzdENodW5rcyhlKXtjb25zdCB0PXRoaXMuY3VyclJlcXVlc3RJZCsrLGE9bmV3IFNldDt0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3Quc2V0KHQsYSk7Zm9yKGNvbnN0IHQgb2YgZSl0aGlzLnN0cmVhbS5oYXNDaHVuayh0KXx8YS5hZGQodCk7aWYoMD09PWEuc2l6ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgcj1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5zZXQodCxyKTtjb25zdCBpPVtdO2Zvcihjb25zdCBlIG9mIGEpe2xldCBhPXRoaXMuX3JlcXVlc3RzQnlDaHVuay5nZXQoZSk7aWYoIWEpe2E9W107dGhpcy5fcmVxdWVzdHNCeUNodW5rLnNldChlLGEpO2kucHVzaChlKX1hLnB1c2godCl9aWYoaS5sZW5ndGg+MCl7Y29uc3QgZT10aGlzLmdyb3VwQ2h1bmtzKGkpO2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9dC5iZWdpbkNodW5rKnRoaXMuY2h1bmtTaXplLGE9TWF0aC5taW4odC5lbmRDaHVuayp0aGlzLmNodW5rU2l6ZSx0aGlzLmxlbmd0aCk7dGhpcy5zZW5kUmVxdWVzdChlLGEpLmNhdGNoKHIucmVqZWN0KX19cmV0dXJuIHIucHJvbWlzZS5jYXRjaChlPT57aWYoIXRoaXMuYWJvcnRlZCl0aHJvdyBlfSl9Z2V0U3RyZWFtKCl7cmV0dXJuIHRoaXMuc3RyZWFtfXJlcXVlc3RSYW5nZShlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Y29uc3QgYT10aGlzLmdldEJlZ2luQ2h1bmsoZSkscj10aGlzLmdldEVuZENodW5rKHQpLGk9W107Zm9yKGxldCBlPWE7ZTxyOysrZSlpLnB1c2goZSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoaSl9cmVxdWVzdFJhbmdlcyhlPVtdKXtjb25zdCB0PVtdO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9dGhpcy5nZXRCZWdpbkNodW5rKGEuYmVnaW4pLHI9dGhpcy5nZXRFbmRDaHVuayhhLmVuZCk7Zm9yKGxldCBhPWU7YTxyOysrYSl0LmluY2x1ZGVzKGEpfHx0LnB1c2goYSl9dC5zb3J0KChlLHQpPT5lLXQpO3JldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKHQpfWdyb3VwQ2h1bmtzKGUpe2NvbnN0IHQ9W107bGV0IGE9LTEscj0tMTtmb3IobGV0IGk9MCxuPWUubGVuZ3RoO2k8bjsrK2kpe2NvbnN0IG49ZVtpXTthPDAmJihhPW4pO2lmKHI+PTAmJnIrMSE9PW4pe3QucHVzaCh7YmVnaW5DaHVuazphLGVuZENodW5rOnIrMX0pO2E9bn1pKzE9PT1lLmxlbmd0aCYmdC5wdXNoKHtiZWdpbkNodW5rOmEsZW5kQ2h1bms6bisxfSk7cj1ufXJldHVybiB0fW9uUHJvZ3Jlc3MoZSl7dGhpcy5tc2dIYW5kbGVyLnNlbmQoIkRvY1Byb2dyZXNzIix7bG9hZGVkOnRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCp0aGlzLmNodW5rU2l6ZStlLmxvYWRlZCx0b3RhbDp0aGlzLmxlbmd0aH0pfW9uUmVjZWl2ZURhdGEoZSl7Y29uc3QgdD1lLmNodW5rLGE9dm9pZCAwPT09ZS5iZWdpbixyPWE/dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg6ZS5iZWdpbixpPXIrdC5ieXRlTGVuZ3RoLG49TWF0aC5mbG9vcihyL3RoaXMuY2h1bmtTaXplKSxzPWk8dGhpcy5sZW5ndGg/TWF0aC5mbG9vcihpL3RoaXMuY2h1bmtTaXplKTpNYXRoLmNlaWwoaS90aGlzLmNodW5rU2l6ZSk7aWYoYSl7dGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKHQpO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPWl9ZWxzZSB0aGlzLnN0cmVhbS5vblJlY2VpdmVEYXRhKHIsdCk7dGhpcy5zdHJlYW0uaXNEYXRhTG9hZGVkJiZ0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlc29sdmUodGhpcy5zdHJlYW0pO2NvbnN0IG89W107Zm9yKGxldCBlPW47ZTxzOysrZSl7Y29uc3QgdD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGUpO2lmKHQpe3RoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUoZSk7Zm9yKGNvbnN0IGEgb2YgdCl7Y29uc3QgdD10aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QuZ2V0KGEpO3QuaGFzKGUpJiZ0LmRlbGV0ZShlKTt0LnNpemU+MHx8by5wdXNoKGEpfX19aWYoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCYmMD09PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5zaXplKXtsZXQgZTtpZigxPT09dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKXtjb25zdCB0PXRoaXMuc3RyZWFtLm51bUNodW5rcy0xO3RoaXMuc3RyZWFtLmhhc0NodW5rKHQpfHwoZT10KX1lbHNlIGU9dGhpcy5zdHJlYW0ubmV4dEVtcHR5Q2h1bmsocyk7TnVtYmVyLmlzSW50ZWdlcihlKSYmdGhpcy5fcmVxdWVzdENodW5rcyhbZV0pfWZvcihjb25zdCBlIG9mIG8pe2NvbnN0IHQ9dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZ2V0KGUpO3RoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LmRlbGV0ZShlKTt0LnJlc29sdmUoKX10aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplLHRvdGFsOnRoaXMubGVuZ3RofSl9b25FcnJvcihlKXt0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlamVjdChlKX1nZXRCZWdpbkNodW5rKGUpe3JldHVybiBNYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpfWdldEVuZENodW5rKGUpe3JldHVybiBNYXRoLmZsb29yKChlLTEpL3RoaXMuY2h1bmtTaXplKSsxfWFib3J0KGUpe3RoaXMuYWJvcnRlZD0hMDt0aGlzLnBkZk5ldHdvcmtTdHJlYW0/LmNhbmNlbEFsbFJlcXVlc3RzKGUpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LnZhbHVlcygpKXQucmVqZWN0KGUpfX1mdW5jdGlvbiBjb252ZXJ0VG9SR0JBKGUpe3N3aXRjaChlLmtpbmQpe2Nhc2UgRjpyZXR1cm4gY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEoZSk7Y2FzZSBUOnJldHVybiBmdW5jdGlvbiBjb252ZXJ0UkdCVG9SR0JBKHtzcmM6ZSxzcmNQb3M6dD0wLGRlc3Q6YSxkZXN0UG9zOnI9MCx3aWR0aDppLGhlaWdodDpufSl7bGV0IHM9MDtjb25zdCBvPWkqbiozLGM9bz4+MixsPW5ldyBVaW50MzJBcnJheShlLmJ1ZmZlcix0LGMpO2lmKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKXtmb3IoO3M8Yy0yO3MrPTMscis9NCl7Y29uc3QgZT1sW3NdLHQ9bFtzKzFdLGk9bFtzKzJdO2Fbcl09NDI3ODE5MDA4MHxlO2FbcisxXT1lPj4+MjR8dDw8OHw0Mjc4MTkwMDgwO2FbcisyXT10Pj4+MTZ8aTw8MTZ8NDI3ODE5MDA4MDthW3IrM109aT4+Pjh8NDI3ODE5MDA4MH1mb3IobGV0IGk9NCpzLG49dCtvO2k8bjtpKz0zKWFbcisrXT1lW2ldfGVbaSsxXTw8OHxlW2krMl08PDE2fDQyNzgxOTAwODB9ZWxzZXtmb3IoO3M8Yy0yO3MrPTMscis9NCl7Y29uc3QgZT1sW3NdLHQ9bFtzKzFdLGk9bFtzKzJdO2Fbcl09MjU1fGU7YVtyKzFdPWU8PDI0fHQ+Pj44fDI1NTthW3IrMl09dDw8MTZ8aT4+PjE2fDI1NTthW3IrM109aTw8OHwyNTV9Zm9yKGxldCBpPTQqcyxuPXQrbztpPG47aSs9MylhW3IrK109ZVtpXTw8MjR8ZVtpKzFdPDwxNnxlW2krMl08PDh8MjU1fXJldHVybntzcmNQb3M6dCtvLGRlc3RQb3M6cn19KGUpfXJldHVybiBudWxsfWZ1bmN0aW9uIGNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKHtzcmM6ZSxzcmNQb3M6dD0wLGRlc3Q6YSx3aWR0aDpyLGhlaWdodDppLG5vbkJsYWNrQ29sb3I6bj00Mjk0OTY3Mjk1LGludmVyc2VEZWNvZGU6cz0hMX0pe2NvbnN0IG89RmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUsW2MsbF09cz9bbixvXTpbbyxuXSxoPXI+PjMsdT03JnIsZD1lLmxlbmd0aDthPW5ldyBVaW50MzJBcnJheShhLmJ1ZmZlcik7bGV0IGY9MDtmb3IobGV0IHI9MDtyPGk7cisrKXtmb3IoY29uc3Qgcj10K2g7dDxyO3QrKyl7Y29uc3Qgcj10PGQ/ZVt0XToyNTU7YVtmKytdPTEyOCZyP2w6YzthW2YrK109NjQmcj9sOmM7YVtmKytdPTMyJnI/bDpjO2FbZisrXT0xNiZyP2w6YzthW2YrK109OCZyP2w6YzthW2YrK109NCZyP2w6YzthW2YrK109MiZyP2w6YzthW2YrK109MSZyP2w6Y31pZigwPT09dSljb250aW51ZTtjb25zdCByPXQ8ZD9lW3QrK106MjU1O2ZvcihsZXQgZT0wO2U8dTtlKyspYVtmKytdPXImMTw8Ny1lP2w6Y31yZXR1cm57c3JjUG9zOnQsZGVzdFBvczpmfX1jbGFzcyBJbWFnZVJlc2l6ZXJ7c3RhdGljI089MjA0ODtzdGF0aWMjTT1GZWF0dXJlVGVzdC5pc0ltYWdlRGVjb2RlclN1cHBvcnRlZDtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2ltZ0RhdGE9ZTt0aGlzLl9pc01hc2s9dH1zdGF0aWMgZ2V0IGNhblVzZUltYWdlRGVjb2Rlcigpe3JldHVybiBzaGFkb3codGhpcywiY2FuVXNlSW1hZ2VEZWNvZGVyIix0aGlzLiNNP0ltYWdlRGVjb2Rlci5pc1R5cGVTdXBwb3J0ZWQoImltYWdlL2JtcCIpOlByb21pc2UucmVzb2x2ZSghMSkpfXN0YXRpYyBuZWVkc1RvQmVSZXNpemVkKGUsdCl7aWYoZTw9dGhpcy4jTyYmdDw9dGhpcy4jTylyZXR1cm4hMTtjb25zdHtNQVhfRElNOmF9PXRoaXM7aWYoZT5hfHx0PmEpcmV0dXJuITA7Y29uc3Qgcj1lKnQ7aWYodGhpcy5faGFzTWF4QXJlYSlyZXR1cm4gcj50aGlzLk1BWF9BUkVBO2lmKHI8dGhpcy4jTyoqMilyZXR1cm4hMTtpZih0aGlzLl9hcmVHb29kRGltcyhlLHQpKXt0aGlzLiNPPU1hdGgubWF4KHRoaXMuI08sTWF0aC5mbG9vcihNYXRoLnNxcnQoZSp0KSkpO3JldHVybiExfXRoaXMuI089dGhpcy5fZ3Vlc3NNYXgodGhpcy4jTyxhLDEyOCwwKTtyZXR1cm4gcj4odGhpcy5NQVhfQVJFQT10aGlzLiNPKioyKX1zdGF0aWMgZ2V0UmVkdWNlUG93ZXJGb3JKUFgoZSx0LGEpe2NvbnN0IHI9ZSp0LGk9MioqMzAvKDQqYSk7aWYoIXRoaXMubmVlZHNUb0JlUmVzaXplZChlLHQpKXJldHVybiByPmk/TWF0aC5jZWlsKE1hdGgubG9nMihyL2kpKTowO2NvbnN0e01BWF9ESU06bixNQVhfQVJFQTpzfT10aGlzLG89TWF0aC5tYXgoZS9uLHQvbixNYXRoLnNxcnQoci9NYXRoLm1pbihpLHMpKSk7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZzIobykpfXN0YXRpYyBnZXQgTUFYX0RJTSgpe3JldHVybiBzaGFkb3codGhpcywiTUFYX0RJTSIsdGhpcy5fZ3Vlc3NNYXgoMjA0OCw2NTUzNywwLDEpKX1zdGF0aWMgZ2V0IE1BWF9BUkVBKCl7dGhpcy5faGFzTWF4QXJlYT0hMDtyZXR1cm4gc2hhZG93KHRoaXMsIk1BWF9BUkVBIix0aGlzLl9ndWVzc01heCh0aGlzLiNPLHRoaXMuTUFYX0RJTSwxMjgsMCkqKjIpfXN0YXRpYyBzZXQgTUFYX0FSRUEoZSl7aWYoZT49MCl7dGhpcy5faGFzTWF4QXJlYT0hMDtzaGFkb3codGhpcywiTUFYX0FSRUEiLGUpfX1zdGF0aWMgc2V0T3B0aW9ucyh7Y2FudmFzTWF4QXJlYUluQnl0ZXM6ZT0tMSxpc0ltYWdlRGVjb2RlclN1cHBvcnRlZDp0PSExfSl7dGhpcy5faGFzTWF4QXJlYXx8KHRoaXMuTUFYX0FSRUE9ZT4+Mik7dGhpcy4jTT10fXN0YXRpYyBfYXJlR29vZERpbXMoZSx0KXt0cnl7Y29uc3QgYT1uZXcgT2Zmc2NyZWVuQ2FudmFzKGUsdCkscj1hLmdldENvbnRleHQoIjJkIik7ci5maWxsUmVjdCgwLDAsMSwxKTtjb25zdCBpPXIuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGFbM107YS53aWR0aD1hLmhlaWdodD0xO3JldHVybiAwIT09aX1jYXRjaHtyZXR1cm4hMX19c3RhdGljIF9ndWVzc01heChlLHQsYSxyKXtmb3IoO2UrYSsxPHQ7KXtjb25zdCBhPU1hdGguZmxvb3IoKGUrdCkvMiksaT1yfHxhO3RoaXMuX2FyZUdvb2REaW1zKGEsaSk/ZT1hOnQ9YX1yZXR1cm4gZX1zdGF0aWMgYXN5bmMgY3JlYXRlSW1hZ2UoZSx0PSExKXtyZXR1cm4gbmV3IEltYWdlUmVzaXplcihlLHQpLl9jcmVhdGVJbWFnZSgpfWFzeW5jIF9jcmVhdGVJbWFnZSgpe2NvbnN0e19pbWdEYXRhOmV9PXRoaXMse3dpZHRoOnQsaGVpZ2h0OmF9PWU7aWYodCphKjQ+ZGEpe2NvbnN0IGU9dGhpcy4jRCgpO2lmKGUpcmV0dXJuIGV9Y29uc3Qgcj10aGlzLl9lbmNvZGVCTVAoKTtsZXQgaSxuO2lmKGF3YWl0IEltYWdlUmVzaXplci5jYW5Vc2VJbWFnZURlY29kZXIpe2k9bmV3IEltYWdlRGVjb2Rlcih7ZGF0YTpyLHR5cGU6ImltYWdlL2JtcCIscHJlZmVyQW5pbWF0aW9uOiExLHRyYW5zZmVyOltyLmJ1ZmZlcl19KTtuPWkuZGVjb2RlKCkuY2F0Y2goZT0+e3dhcm4oYEJNUCBpbWFnZSBkZWNvZGluZyBmYWlsZWQ6ICR7ZX1gKTtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEJsb2IoW3RoaXMuX2VuY29kZUJNUCgpLmJ1ZmZlcl0se3R5cGU6ImltYWdlL2JtcCJ9KSl9KS5maW5hbGx5KCgpPT57aS5jbG9zZSgpfSl9ZWxzZSBuPWNyZWF0ZUltYWdlQml0bWFwKG5ldyBCbG9iKFtyLmJ1ZmZlcl0se3R5cGU6ImltYWdlL2JtcCJ9KSk7Y29uc3R7TUFYX0FSRUE6cyxNQVhfRElNOm99PUltYWdlUmVzaXplcixjPU1hdGgubWF4KHQvbyxhL28sTWF0aC5zcXJ0KHQqYS9zKSksbD1NYXRoLm1heChjLDIpLGg9TWF0aC5yb3VuZCgxMCooYysxLjI1KSkvMTAvbCx1PU1hdGguZmxvb3IoTWF0aC5sb2cyKGgpKSxkPW5ldyBBcnJheSh1KzIpLmZpbGwoMik7ZFswXT1sO2Quc3BsaWNlKC0xLDEsaC8oMTw8dSkpO2xldCBmPXQsZz1hO2NvbnN0IHA9YXdhaXQgbjtsZXQgbT1wLmltYWdlfHxwO2Zvcihjb25zdCBlIG9mIGQpe2NvbnN0IHQ9ZixhPWc7Zj1NYXRoLmZsb29yKGYvZSktMTtnPU1hdGguZmxvb3IoZy9lKS0xO2NvbnN0IHI9bmV3IE9mZnNjcmVlbkNhbnZhcyhmLGcpO3IuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UobSwwLDAsdCxhLDAsMCxmLGcpO20uY2xvc2UoKTttPXIudHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9ZS5kYXRhPW51bGw7ZS5iaXRtYXA9bTtlLndpZHRoPWY7ZS5oZWlnaHQ9ZztyZXR1cm4gZX0jRCgpe2NvbnN0e19pbWdEYXRhOmV9PXRoaXMse2RhdGE6dCx3aWR0aDphLGhlaWdodDpyLGtpbmQ6aX09ZSxuPWEqcio0LHM9TWF0aC5jZWlsKE1hdGgubG9nMihuL2RhKSksbz1hPj5zLGM9cj4+cztsZXQgbCxoPXI7dHJ5e2w9bmV3IFVpbnQ4QXJyYXkobil9Y2F0Y2h7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmxvZzIobisxKSk7Zm9yKDs7KXRyeXtsPW5ldyBVaW50OEFycmF5KDIqKmUtMSk7YnJlYWt9Y2F0Y2h7ZS09MX1oPU1hdGguZmxvb3IoKDIqKmUtMSkvKDQqYSkpO2NvbnN0IHQ9YSpoKjQ7dDxsLmxlbmd0aCYmKGw9bmV3IFVpbnQ4QXJyYXkodCkpfWNvbnN0IHU9bmV3IFVpbnQzMkFycmF5KGwuYnVmZmVyKSxkPW5ldyBVaW50MzJBcnJheShvKmMpO2xldCBmPTAsZz0wO2NvbnN0IHA9TWF0aC5jZWlsKHIvaCksbT1yJWg9PT0wP3I6ciVoO2ZvcihsZXQgZT0wO2U8cDtlKyspe2NvbnN0IHI9ZTxwLTE/aDptOyh7c3JjUG9zOmZ9PWNvbnZlcnRUb1JHQkEoe2tpbmQ6aSxzcmM6dCxkZXN0OnUsd2lkdGg6YSxoZWlnaHQ6cixpbnZlcnNlRGVjb2RlOnRoaXMuX2lzTWFzayxzcmNQb3M6Zn0pKTtmb3IobGV0IGU9MCx0PXI+PnM7ZTx0O2UrKyl7Y29uc3QgdD11LnN1YmFycmF5KChlPDxzKSphKTtmb3IobGV0IGU9MDtlPG87ZSsrKWRbZysrXT10W2U8PHNdfX1pZihJbWFnZVJlc2l6ZXIubmVlZHNUb0JlUmVzaXplZChvLGMpKXtlLmRhdGE9ZDtlLndpZHRoPW87ZS5oZWlnaHQ9YztlLmtpbmQ9TztyZXR1cm4gbnVsbH1jb25zdCBiPW5ldyBPZmZzY3JlZW5DYW52YXMobyxjKTtiLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSkucHV0SW1hZ2VEYXRhKG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGQuYnVmZmVyKSxvLGMpLDAsMCk7ZS5kYXRhPW51bGw7ZS5iaXRtYXA9Yi50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTtlLndpZHRoPW87ZS5oZWlnaHQ9YztyZXR1cm4gZX1fZW5jb2RlQk1QKCl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6dCxraW5kOmF9PXRoaXMuX2ltZ0RhdGE7bGV0IHIsaT10aGlzLl9pbWdEYXRhLmRhdGEsbj1uZXcgVWludDhBcnJheSgwKSxzPW4sbz0wO3N3aXRjaChhKXtjYXNlIEY6e3I9MTtuPW5ldyBVaW50OEFycmF5KHRoaXMuX2lzTWFzaz9bMjU1LDI1NSwyNTUsMjU1LDAsMCwwLDBdOlswLDAsMCwwLDI1NSwyNTUsMjU1LDI1NV0pO2NvbnN0IGE9ZSs3Pj4zLHM9YSszJi00O2lmKGEhPT1zKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KHMqdCk7bGV0IHI9MDtmb3IobGV0IG49MCxvPXQqYTtuPG87bis9YSxyKz1zKWUuc2V0KGkuc3ViYXJyYXkobixuK2EpLHIpO2k9ZX1icmVha31jYXNlIFQ6cj0yNDtpZigzJmUpe2NvbnN0IGE9MyplLHI9YSszJi00LG49ci1hLHM9bmV3IFVpbnQ4QXJyYXkocip0KTtsZXQgbz0wO2ZvcihsZXQgZT0wLHI9dCphO2U8cjtlKz1hKXtjb25zdCB0PWkuc3ViYXJyYXkoZSxlK2EpO2ZvcihsZXQgZT0wO2U8YTtlKz0zKXtzW28rK109dFtlKzJdO3NbbysrXT10W2UrMV07c1tvKytdPXRbZV19bys9bn1pPXN9ZWxzZSBmb3IobGV0IGU9MCx0PWkubGVuZ3RoO2U8dDtlKz0zKXtjb25zdCB0PWlbZV07aVtlXT1pW2UrMl07aVtlKzJdPXR9YnJlYWs7Y2FzZSBPOnI9MzI7bz0zO3M9bmV3IFVpbnQ4QXJyYXkoNjgpO2NvbnN0IGE9bmV3IERhdGFWaWV3KHMuYnVmZmVyKTtpZihGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbil7YS5zZXRVaW50MzIoMCwyNTUsITApO2Euc2V0VWludDMyKDQsNjUyODAsITApO2Euc2V0VWludDMyKDgsMTY3MTE2ODAsITApO2Euc2V0VWludDMyKDEyLDQyNzgxOTAwODAsITApfWVsc2V7YS5zZXRVaW50MzIoMCw0Mjc4MTkwMDgwLCEwKTthLnNldFVpbnQzMig0LDE2NzExNjgwLCEwKTthLnNldFVpbnQzMig4LDY1MjgwLCEwKTthLnNldFVpbnQzMigxMiwyNTUsITApfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdCIpfWxldCBjPTA7Y29uc3QgbD00MCtzLmxlbmd0aCxoPTE0K2wrbi5sZW5ndGgraS5sZW5ndGgsdT1uZXcgVWludDhBcnJheShoKSxkPW5ldyBEYXRhVmlldyh1LmJ1ZmZlcik7ZC5zZXRVaW50MTYoYywxOTc3OCwhMCk7Yys9MjtkLnNldFVpbnQzMihjLGgsITApO2MrPTQ7ZC5zZXRVaW50MzIoYywwLCEwKTtjKz00O2Quc2V0VWludDMyKGMsMTQrbCtuLmxlbmd0aCwhMCk7Yys9NDtkLnNldFVpbnQzMihjLGwsITApO2MrPTQ7ZC5zZXRJbnQzMihjLGUsITApO2MrPTQ7ZC5zZXRJbnQzMihjLC10LCEwKTtjKz00O2Quc2V0VWludDE2KGMsMSwhMCk7Yys9MjtkLnNldFVpbnQxNihjLHIsITApO2MrPTI7ZC5zZXRVaW50MzIoYyxvLCEwKTtjKz00O2Quc2V0VWludDMyKGMsMCwhMCk7Yys9NDtkLnNldEludDMyKGMsMCwhMCk7Yys9NDtkLnNldEludDMyKGMsMCwhMCk7Yys9NDtkLnNldFVpbnQzMihjLG4ubGVuZ3RoLzQsITApO2MrPTQ7ZC5zZXRVaW50MzIoYywwLCEwKTtjKz00O3Uuc2V0KHMsYyk7Yys9cy5sZW5ndGg7dS5zZXQobixjKTtjKz1uLmxlbmd0aDt1LnNldChpLGMpO3JldHVybiB1fX1jb25zdCBDYT1uZXcgVWludDhBcnJheSgwKTtjbGFzcyBEZWNvZGVTdHJlYW0gZXh0ZW5kcyBCYXNlU3RyZWFte2NvbnN0cnVjdG9yKGUpe3N1cGVyKCk7dGhpcy5fcmF3TWluQnVmZmVyTGVuZ3RoPWV8fDA7dGhpcy5wb3M9MDt0aGlzLmJ1ZmZlckxlbmd0aD0wO3RoaXMuZW9mPSExO3RoaXMuYnVmZmVyPUNhO3RoaXMubWluQnVmZmVyTGVuZ3RoPTUxMjtpZihlKWZvcig7dGhpcy5taW5CdWZmZXJMZW5ndGg8ZTspdGhpcy5taW5CdWZmZXJMZW5ndGgqPTJ9Z2V0IGlzRW1wdHkoKXtmb3IoOyF0aGlzLmVvZiYmMD09PXRoaXMuYnVmZmVyTGVuZ3RoOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiAwPT09dGhpcy5idWZmZXJMZW5ndGh9ZW5zdXJlQnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2xldCBhPXRoaXMubWluQnVmZmVyTGVuZ3RoO2Zvcig7YTxlOylhKj0yO2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoYSk7ci5zZXQodCk7cmV0dXJuIHRoaXMuYnVmZmVyPXJ9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfWdldEJ5dGVzKGUsdD1udWxsKXtjb25zdCBhPXRoaXMucG9zO2xldCByO2lmKGUpe3RoaXMuZW5zdXJlQnVmZmVyKGErZSk7cj1hK2U7Zm9yKDshdGhpcy5lb2YmJnRoaXMuYnVmZmVyTGVuZ3RoPHI7KXRoaXMucmVhZEJsb2NrKHQpO2NvbnN0IGk9dGhpcy5idWZmZXJMZW5ndGg7cj5pJiYocj1pKX1lbHNle2Zvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jayh0KTtyPXRoaXMuYnVmZmVyTGVuZ3RofXRoaXMucG9zPXI7cmV0dXJuIHRoaXMuYnVmZmVyLnN1YmFycmF5KGEscil9YXN5bmMgZ2V0SW1hZ2VEYXRhKGUsdCl7aWYoIXRoaXMuY2FuQXN5bmNEZWNvZGVJbWFnZUZyb21CdWZmZXIpcmV0dXJuIHRoaXMuaXNBc3luY0RlY29kZXI/dGhpcy5kZWNvZGVJbWFnZShudWxsLHQpOnRoaXMuZ2V0Qnl0ZXMoZSx0KTtjb25zdCBhPWF3YWl0IHRoaXMuc3RyZWFtLmFzeW5jR2V0Qnl0ZXMoKTtyZXR1cm4gdGhpcy5kZWNvZGVJbWFnZShhLHQpfXJlc2V0KCl7dGhpcy5wb3M9MH1tYWtlU3ViU3RyZWFtKGUsdCxhPW51bGwpe2lmKHZvaWQgMD09PXQpZm9yKDshdGhpcy5lb2Y7KXRoaXMucmVhZEJsb2NrKCk7ZWxzZXtjb25zdCBhPWUrdDtmb3IoO3RoaXMuYnVmZmVyTGVuZ3RoPD1hJiYhdGhpcy5lb2Y7KXRoaXMucmVhZEJsb2NrKCl9cmV0dXJuIG5ldyBTdHJlYW0odGhpcy5idWZmZXIsZSx0LGEpfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuIHRoaXMuc3RyZWFtP3RoaXMuc3RyZWFtLmdldEJhc2VTdHJlYW1zKCk6bnVsbH19Y2xhc3MgU3RyZWFtc1NlcXVlbmNlU3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdD1udWxsKXtlPWUuZmlsdGVyKGU9PmUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKTtsZXQgYT0wO2Zvcihjb25zdCB0IG9mIGUpYSs9dCBpbnN0YW5jZW9mIERlY29kZVN0cmVhbT90Ll9yYXdNaW5CdWZmZXJMZW5ndGg6dC5sZW5ndGg7c3VwZXIoYSk7dGhpcy5zdHJlYW1zPWU7dGhpcy5fb25FcnJvcj10fXJlYWRCbG9jaygpe2NvbnN0IGU9dGhpcy5zdHJlYW1zO2lmKDA9PT1lLmxlbmd0aCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IHQ9ZS5zaGlmdCgpO2xldCBhO3RyeXthPXQuZ2V0Qnl0ZXMoKX1jYXRjaChlKXtpZih0aGlzLl9vbkVycm9yKXt0aGlzLl9vbkVycm9yKGUsdC5kaWN0Py5vYmpJZCk7cmV0dXJufXRocm93IGV9Y29uc3Qgcj10aGlzLmJ1ZmZlckxlbmd0aCxpPXIrYS5sZW5ndGg7dGhpcy5lbnN1cmVCdWZmZXIoaSkuc2V0KGEscik7dGhpcy5idWZmZXJMZW5ndGg9aX1nZXRCYXNlU3RyZWFtcygpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdHJlYW1zKXtjb25zdCBhPXQuZ2V0QmFzZVN0cmVhbXMoKTthJiZlLnB1c2goLi4uYSl9cmV0dXJuIGUubGVuZ3RoPjA/ZTpudWxsfX1jbGFzcyBDb2xvclNwYWNlVXRpbHN7c3RhdGljIHBhcnNlKHtjczplLHhyZWY6dCxyZXNvdXJjZXM6YT1udWxsLHBkZkZ1bmN0aW9uRmFjdG9yeTpyLGdsb2JhbENvbG9yU3BhY2VDYWNoZTppLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm4sYXN5bmNJZk5vdENhY2hlZDpzPSExfSl7Y29uc3Qgbz17eHJlZjp0LHJlc291cmNlczphLHBkZkZ1bmN0aW9uRmFjdG9yeTpyLGdsb2JhbENvbG9yU3BhY2VDYWNoZTppLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm59O2xldCBjLGwsaDtpZihlIGluc3RhbmNlb2YgUmVmKXtsPWU7Y29uc3QgYT1pLmdldEJ5UmVmKGwpfHxuLmdldEJ5UmVmKGwpO2lmKGEpcmV0dXJuIGE7ZT10LmZldGNoKGUpfWlmKGUgaW5zdGFuY2VvZiBOYW1lKXtjPWUubmFtZTtjb25zdCB0PW4uZ2V0QnlOYW1lKGMpO2lmKHQpcmV0dXJuIHR9dHJ5e2g9dGhpcy4jQihlLG8pfWNhdGNoKGUpe2lmKHMmJiEoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7dGhyb3cgZX1pZihjfHxsKXtuLnNldChjLGwsaCk7bCYmaS5zZXQobnVsbCxsLGgpfXJldHVybiBzP1Byb21pc2UucmVzb2x2ZShoKTpofXN0YXRpYyNSKGUsdCl7Y29uc3R7Z2xvYmFsQ29sb3JTcGFjZUNhY2hlOmF9PXQ7bGV0IHI7aWYoZSBpbnN0YW5jZW9mIFJlZil7cj1lO2NvbnN0IHQ9YS5nZXRCeVJlZihyKTtpZih0KXJldHVybiB0fWNvbnN0IGk9dGhpcy4jQihlLHQpO3ImJmEuc2V0KG51bGwscixpKTtyZXR1cm4gaX1zdGF0aWMjQihlLHQpe2NvbnN0e3hyZWY6YSxyZXNvdXJjZXM6cixwZGZGdW5jdGlvbkZhY3Rvcnk6aSxnbG9iYWxDb2xvclNwYWNlQ2FjaGU6bn09dDtpZigoZT1hLmZldGNoSWZSZWYoZSkpaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5ncmF5O2Nhc2UiUkdCIjpjYXNlIkRldmljZVJHQiI6cmV0dXJuIHRoaXMucmdiO2Nhc2UiRGV2aWNlUkdCQSI6cmV0dXJuIHRoaXMucmdiYTtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuY215aztjYXNlIlBhdHRlcm4iOnJldHVybiBuZXcgUGF0dGVybkNTKG51bGwpO2RlZmF1bHQ6aWYociBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGE9ci5nZXQoIkNvbG9yU3BhY2UiKTtpZihhIGluc3RhbmNlb2YgRGljdCl7Y29uc3Qgcj1hLmdldChlLm5hbWUpO2lmKHIpe2lmKHIgaW5zdGFuY2VvZiBOYW1lKXJldHVybiB0aGlzLiNCKHIsdCk7ZT1yO2JyZWFrfX19d2FybihgVW5yZWNvZ25pemVkIENvbG9yU3BhY2U6ICR7ZS5uYW1lfWApO3JldHVybiB0aGlzLmdyYXl9aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgcj1hLmZldGNoSWZSZWYoZVswXSkubmFtZTtsZXQgcyxvLGMsbCxoLHU7c3dpdGNoKHIpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5ncmF5O2Nhc2UiUkdCIjpjYXNlIkRldmljZVJHQiI6cmV0dXJuIHRoaXMucmdiO2Nhc2UiQ01ZSyI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gdGhpcy5jbXlrO2Nhc2UiQ2FsR3JheSI6cz1hLmZldGNoSWZSZWYoZVsxXSk7bD1zLmdldEFycmF5KCJXaGl0ZVBvaW50Iik7aD1zLmdldEFycmF5KCJCbGFja1BvaW50Iik7dT1zLmdldCgiR2FtbWEiKTtyZXR1cm4gbmV3IENhbEdyYXlDUyhsLGgsdSk7Y2FzZSJDYWxSR0IiOnM9YS5mZXRjaElmUmVmKGVbMV0pO2w9cy5nZXRBcnJheSgiV2hpdGVQb2ludCIpO2g9cy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO3U9cy5nZXRBcnJheSgiR2FtbWEiKTtjb25zdCBkPXMuZ2V0QXJyYXkoIk1hdHJpeCIpO3JldHVybiBuZXcgQ2FsUkdCQ1MobCxoLHUsZCk7Y2FzZSJJQ0NCYXNlZCI6Y29uc3QgZj1lWzFdaW5zdGFuY2VvZiBSZWY7aWYoZil7Y29uc3QgdD1uLmdldEJ5UmVmKGVbMV0pO2lmKHQpcmV0dXJuIHR9Y29uc3QgZz1hLmZldGNoSWZSZWYoZVsxXSkscD1nLmRpY3Q7bz1wLmdldCgiTiIpO2lmKEljY0NvbG9yU3BhY2UuaXNVc2FibGUpdHJ5e2NvbnN0IHQ9bmV3IEljY0NvbG9yU3BhY2UoZy5nZXRCeXRlcygpLCJJQ0NCYXNlZCIsbyk7ZiYmbi5zZXQobnVsbCxlWzFdLHQpO3JldHVybiB0fWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyB0O3dhcm4oYElDQ0Jhc2VkIGNvbG9yIHNwYWNlICgke2VbMV19KTogIiR7dH0iLmApfWNvbnN0IG09cC5nZXRSYXcoIkFsdGVybmF0ZSIpO2lmKG0pe2NvbnN0IGU9dGhpcy4jUihtLHQpO2lmKGUubnVtQ29tcHM9PT1vKXJldHVybiBlO3dhcm4oIklDQ0Jhc2VkIGNvbG9yIHNwYWNlOiBJZ25vcmluZyBpbmNvcnJlY3QgL0FsdGVybmF0ZSBlbnRyeS4iKX1pZigxPT09bylyZXR1cm4gdGhpcy5ncmF5O2lmKDM9PT1vKXJldHVybiB0aGlzLnJnYjtpZig0PT09bylyZXR1cm4gdGhpcy5jbXlrO2JyZWFrO2Nhc2UiUGF0dGVybiI6Yz1lWzFdfHxudWxsO2MmJihjPXRoaXMuI1IoYyx0KSk7cmV0dXJuIG5ldyBQYXR0ZXJuQ1MoYyk7Y2FzZSJJIjpjYXNlIkluZGV4ZWQiOmM9dGhpcy4jUihlWzFdLHQpO2NvbnN0IGI9TWF0aENsYW1wKGEuZmV0Y2hJZlJlZihlWzJdKSwwLDI1NSkseT1hLmZldGNoSWZSZWYoZVszXSk7cmV0dXJuIG5ldyBJbmRleGVkQ1MoYyxiLHkpO2Nhc2UiU2VwYXJhdGlvbiI6Y2FzZSJEZXZpY2VOIjpjb25zdCB3PWEuZmV0Y2hJZlJlZihlWzFdKTtvPUFycmF5LmlzQXJyYXkodyk/dy5sZW5ndGg6MTtjPXRoaXMuI1IoZVsyXSx0KTtjb25zdCB4PWkuY3JlYXRlKGVbM10pO3JldHVybiBuZXcgQWx0ZXJuYXRlQ1MobyxjLHgpO2Nhc2UiTGFiIjpzPWEuZmV0Y2hJZlJlZihlWzFdKTtsPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTtoPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTtjb25zdCBTPXMuZ2V0QXJyYXkoIlJhbmdlIik7cmV0dXJuIG5ldyBMYWJDUyhsLGgsUyk7ZGVmYXVsdDp3YXJuKGBVbmltcGxlbWVudGVkIENvbG9yU3BhY2Ugb2JqZWN0OiAke3J9YCk7cmV0dXJuIHRoaXMuZ3JheX19d2FybihgVW5yZWNvZ25pemVkIENvbG9yU3BhY2Ugb2JqZWN0OiAke2V9YCk7cmV0dXJuIHRoaXMuZ3JheX1zdGF0aWMgZ2V0IGdyYXkoKXtyZXR1cm4gc2hhZG93KHRoaXMsImdyYXkiLG5ldyBEZXZpY2VHcmF5Q1MpfXN0YXRpYyBnZXQgcmdiKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJyZ2IiLG5ldyBEZXZpY2VSZ2JDUyl9c3RhdGljIGdldCByZ2JhKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJyZ2JhIixuZXcgRGV2aWNlUmdiYUNTKX1zdGF0aWMgZ2V0IGNteWsoKXtpZihDbXlrSUNDQmFzZWRDUy5pc1VzYWJsZSl0cnl7cmV0dXJuIHNoYWRvdyh0aGlzLCJjbXlrIixuZXcgQ215a0lDQ0Jhc2VkQ1MpfWNhdGNoe3dhcm4oIkNNWUsgZmFsbGJhY2s6IERldmljZUNNWUsiKX1yZXR1cm4gc2hhZG93KHRoaXMsImNteWsiLG5ldyBEZXZpY2VDbXlrQ1MpfX1jbGFzcyBKcGVnRXJyb3IgZXh0ZW5kcyBlYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJKcGVnRXJyb3IiKX19Y2xhc3MgRE5MTWFya2VyRXJyb3IgZXh0ZW5kcyBlYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIkROTE1hcmtlckVycm9yIik7dGhpcy5zY2FuTGluZXM9dH19Y2xhc3MgRU9JTWFya2VyRXJyb3IgZXh0ZW5kcyBlYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJFT0lNYXJrZXJFcnJvciIpfX1jb25zdCB2YT1uZXcgVWludDhBcnJheShbMCwxLDgsMTYsOSwyLDMsMTAsMTcsMjQsMzIsMjUsMTgsMTEsNCw1LDEyLDE5LDI2LDMzLDQwLDQ4LDQxLDM0LDI3LDIwLDEzLDYsNywxNCwyMSwyOCwzNSw0Miw0OSw1Niw1Nyw1MCw0MywzNiwyOSwyMiwxNSwyMywzMCwzNyw0NCw1MSw1OCw1OSw1Miw0NSwzOCwzMSwzOSw0Niw1Myw2MCw2MSw1NCw0Nyw1NSw2Miw2M10pLEZhPTQwMTcsSWE9Nzk5LFRhPTM0MDYsT2E9MjI3NixNYT0xNTY3LERhPTM3ODQsQmE9NTc5MyxSYT0yODk2O2Z1bmN0aW9uIGJ1aWxkSHVmZm1hblRhYmxlKGUsdCl7bGV0IGEscixpPTAsbj0xNjtmb3IoO24+MCYmIWVbbi0xXTspbi0tO2NvbnN0IHM9W3tjaGlsZHJlbjpbXSxpbmRleDowfV07bGV0IG8sYz1zWzBdO2ZvcihhPTA7YTxuO2ErKyl7Zm9yKHI9MDtyPGVbYV07cisrKXtjPXMucG9wKCk7Yy5jaGlsZHJlbltjLmluZGV4XT10W2ldO2Zvcig7Yy5pbmRleD4wOyljPXMucG9wKCk7Yy5pbmRleCsrO3MucHVzaChjKTtmb3IoO3MubGVuZ3RoPD1hOyl7cy5wdXNoKG89e2NoaWxkcmVuOltdLGluZGV4OjB9KTtjLmNoaWxkcmVuW2MuaW5kZXhdPW8uY2hpbGRyZW47Yz1vfWkrK31pZihhKzE8bil7cy5wdXNoKG89e2NoaWxkcmVuOltdLGluZGV4OjB9KTtjLmNoaWxkcmVuW2MuaW5kZXhdPW8uY2hpbGRyZW47Yz1vfX1yZXR1cm4gc1swXS5jaGlsZHJlbn1mdW5jdGlvbiBnZXRCbG9ja0J1ZmZlck9mZnNldChlLHQsYSl7cmV0dXJuIDY0KigoZS5ibG9ja3NQZXJMaW5lKzEpKnQrYSl9ZnVuY3Rpb24gZGVjb2RlU2NhbihlLHQsYSxyLGksbixzLG8sYyxsPSExKXtjb25zdCBoPWEubWN1c1BlckxpbmUsdT1hLnByb2dyZXNzaXZlLGQ9dDtsZXQgZj0wLGc9MDtmdW5jdGlvbiByZWFkQml0KCl7aWYoZz4wKXtnLS07cmV0dXJuIGY+PmcmMX1mPWVbdCsrXTtpZigyNTU9PT1mKXtjb25zdCByPWVbdCsrXTtpZihyKXtpZigyMjA9PT1yJiZsKXtjb25zdCByPXJlYWRVaW50MTYoZSx0Kz0yKTt0Kz0yO2lmKHI+MCYmciE9PWEuc2NhbkxpbmVzKXRocm93IG5ldyBETkxNYXJrZXJFcnJvcigiRm91bmQgRE5MIG1hcmtlciAoMHhGRkRDKSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSIscil9ZWxzZSBpZigyMTc9PT1yKXtpZihsKXtjb25zdCBlPXkqKDg9PT1hLnByZWNpc2lvbj84OjApO2lmKGU+MCYmTWF0aC5yb3VuZChhLnNjYW5MaW5lcy9lKT49NSl0aHJvdyBuZXcgRE5MTWFya2VyRXJyb3IoIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEsIHBvc3NpYmx5IGNhdXNlZCBieSBpbmNvcnJlY3QgYHNjYW5MaW5lc2AgcGFyYW1ldGVyIixlKX10aHJvdyBuZXcgRU9JTWFya2VyRXJyb3IoIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEiKX10aHJvdyBuZXcgSnBlZ0Vycm9yKGB1bmV4cGVjdGVkIG1hcmtlciAkeyhmPDw4fHIpLnRvU3RyaW5nKDE2KX1gKX19Zz03O3JldHVybiBmPj4+N31mdW5jdGlvbiBkZWNvZGVIdWZmbWFuKGUpe2xldCB0PWU7Zm9yKDs7KXt0PXRbcmVhZEJpdCgpXTtzd2l0Y2godHlwZW9mIHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gdDtjYXNlIm9iamVjdCI6Y29udGludWV9dGhyb3cgbmV3IEpwZWdFcnJvcigiaW52YWxpZCBodWZmbWFuIHNlcXVlbmNlIil9fWZ1bmN0aW9uIHJlY2VpdmUoZSl7bGV0IHQ9MDtmb3IoO2U+MDspe3Q9dDw8MXxyZWFkQml0KCk7ZS0tfXJldHVybiB0fWZ1bmN0aW9uIHJlY2VpdmVBbmRFeHRlbmQoZSl7aWYoMT09PWUpcmV0dXJuIDE9PT1yZWFkQml0KCk/MTotMTtjb25zdCB0PXJlY2VpdmUoZSk7cmV0dXJuIHQ+PTE8PGUtMT90OnQrKC0xPDxlKSsxfWxldCBwPTA7bGV0IG0sYj0wO2xldCB5PTA7ZnVuY3Rpb24gZGVjb2RlTWN1KGUsdCxhLHIsaSl7Y29uc3Qgbj1hJWg7eT0oYS9ofDApKmUudityO2NvbnN0IHM9biplLmgraTt0KGUsZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSx5LHMpKX1mdW5jdGlvbiBkZWNvZGVCbG9jayhlLHQsYSl7eT1hL2UuYmxvY2tzUGVyTGluZXwwO2NvbnN0IHI9YSVlLmJsb2Nrc1BlckxpbmU7dChlLGdldEJsb2NrQnVmZmVyT2Zmc2V0KGUseSxyKSl9Y29uc3Qgdz1yLmxlbmd0aDtsZXQgeCxTLGssQyx2LEY7Rj11PzA9PT1uPzA9PT1vP2Z1bmN0aW9uIGRlY29kZURDRmlyc3QoZSx0KXtjb25zdCBhPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVEQykscj0wPT09YT8wOnJlY2VpdmVBbmRFeHRlbmQoYSk8PGM7ZS5ibG9ja0RhdGFbdF09ZS5wcmVkKz1yfTpmdW5jdGlvbiBkZWNvZGVEQ1N1Y2Nlc3NpdmUoZSx0KXtlLmJsb2NrRGF0YVt0XXw9cmVhZEJpdCgpPDxjfTowPT09bz9mdW5jdGlvbiBkZWNvZGVBQ0ZpcnN0KGUsdCl7aWYocD4wKXtwLS07cmV0dXJufWxldCBhPW47Y29uc3Qgcj1zO2Zvcig7YTw9cjspe2NvbnN0IHI9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZUFDKSxpPTE1JnIsbj1yPj40O2lmKDA9PT1pKXtpZihuPDE1KXtwPXJlY2VpdmUobikrKDE8PG4pLTE7YnJlYWt9YSs9MTY7Y29udGludWV9YSs9bjtjb25zdCBzPXZhW2FdO2UuYmxvY2tEYXRhW3Qrc109cmVjZWl2ZUFuZEV4dGVuZChpKSooMTw8Yyk7YSsrfX06ZnVuY3Rpb24gZGVjb2RlQUNTdWNjZXNzaXZlKGUsdCl7bGV0IGE9bjtjb25zdCByPXM7bGV0IGksbyxsPTA7Zm9yKDthPD1yOyl7Y29uc3Qgcj10K3ZhW2FdLG49ZS5ibG9ja0RhdGFbcl08MD8tMToxO3N3aXRjaChiKXtjYXNlIDA6bz1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpO2k9MTUmbztsPW8+PjQ7aWYoMD09PWkpaWYobDwxNSl7cD1yZWNlaXZlKGwpKygxPDxsKTtiPTR9ZWxzZXtsPTE2O2I9MX1lbHNle2lmKDEhPT1pKXRocm93IG5ldyBKcGVnRXJyb3IoImludmFsaWQgQUNuIGVuY29kaW5nIik7bT1yZWNlaXZlQW5kRXh0ZW5kKGkpO2I9bD8yOjN9Y29udGludWU7Y2FzZSAxOmNhc2UgMjppZihlLmJsb2NrRGF0YVtyXSllLmJsb2NrRGF0YVtyXSs9bioocmVhZEJpdCgpPDxjKTtlbHNle2wtLTswPT09bCYmKGI9Mj09PWI/MzowKX1icmVhaztjYXNlIDM6aWYoZS5ibG9ja0RhdGFbcl0pZS5ibG9ja0RhdGFbcl0rPW4qKHJlYWRCaXQoKTw8Yyk7ZWxzZXtlLmJsb2NrRGF0YVtyXT1tPDxjO2I9MH1icmVhaztjYXNlIDQ6ZS5ibG9ja0RhdGFbcl0mJihlLmJsb2NrRGF0YVtyXSs9bioocmVhZEJpdCgpPDxjKSl9YSsrfWlmKDQ9PT1iKXtwLS07MD09PXAmJihiPTApfX06ZnVuY3Rpb24gZGVjb2RlQmFzZWxpbmUoZSx0KXtjb25zdCBhPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVEQykscj0wPT09YT8wOnJlY2VpdmVBbmRFeHRlbmQoYSk7ZS5ibG9ja0RhdGFbdF09ZS5wcmVkKz1yO2xldCBpPTE7Zm9yKDtpPDY0Oyl7Y29uc3QgYT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpLHI9MTUmYSxuPWE+PjQ7aWYoMD09PXIpe2lmKG48MTUpYnJlYWs7aSs9MTY7Y29udGludWV9aSs9bjtjb25zdCBzPXZhW2ldO2UuYmxvY2tEYXRhW3Qrc109cmVjZWl2ZUFuZEV4dGVuZChyKTtpKyt9fTtsZXQgVCxPPTA7Y29uc3QgTT0xPT09dz9yWzBdLmJsb2Nrc1BlckxpbmUqclswXS5ibG9ja3NQZXJDb2x1bW46aCphLm1jdXNQZXJDb2x1bW47bGV0IEQsUjtmb3IoO088PU07KXtjb25zdCBhPWk/TWF0aC5taW4oTS1PLGkpOk07aWYoYT4wKXtmb3IoUz0wO1M8dztTKyspcltTXS5wcmVkPTA7cD0wO2lmKDE9PT13KXt4PXJbMF07Zm9yKHY9MDt2PGE7disrKXtkZWNvZGVCbG9jayh4LEYsTyk7TysrfX1lbHNlIGZvcih2PTA7djxhO3YrKyl7Zm9yKFM9MDtTPHc7UysrKXt4PXJbU107RD14Lmg7Uj14LnY7Zm9yKGs9MDtrPFI7aysrKWZvcihDPTA7QzxEO0MrKylkZWNvZGVNY3UoeCxGLE8sayxDKX1PKyt9fWc9MDtUPWZpbmROZXh0RmlsZU1hcmtlcihlLHQpO2lmKCFUKWJyZWFrO2lmKFQuaW52YWxpZCl7d2FybihgZGVjb2RlU2NhbiAtICR7YT4wPyJ1bmV4cGVjdGVkIjoiZXhjZXNzaXZlIn0gTUNVIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiAke1QuaW52YWxpZH1gKTt0PVQub2Zmc2V0fWlmKCEoVC5tYXJrZXI+PTY1NDg4JiZULm1hcmtlcjw9NjU0OTUpKWJyZWFrO3QrPTJ9cmV0dXJuIHQtZH1mdW5jdGlvbiBxdWFudGl6ZUFuZEludmVyc2UoZSx0LGEpe2NvbnN0IHI9ZS5xdWFudGl6YXRpb25UYWJsZSxpPWUuYmxvY2tEYXRhO2xldCBuLHMsbyxjLGwsaCx1LGQsZixnLHAsbSxiLHksdyx4LFM7aWYoIXIpdGhyb3cgbmV3IEpwZWdFcnJvcigibWlzc2luZyByZXF1aXJlZCBRdWFudGl6YXRpb24gVGFibGUuIik7Zm9yKGxldCBlPTA7ZTw2NDtlKz04KXtmPWlbdCtlXTtnPWlbdCtlKzFdO3A9aVt0K2UrMl07bT1pW3QrZSszXTtiPWlbdCtlKzRdO3k9aVt0K2UrNV07dz1pW3QrZSs2XTt4PWlbdCtlKzddO2YqPXJbZV07aWYoMCE9PShnfHB8bXxifHl8d3x4KSl7Zyo9cltlKzFdO3AqPXJbZSsyXTttKj1yW2UrM107Yio9cltlKzRdO3kqPXJbZSs1XTt3Kj1yW2UrNl07eCo9cltlKzddO249QmEqZisxMjg+Pjg7cz1CYSpiKzEyOD4+ODtvPXA7Yz13O2w9UmEqKGcteCkrMTI4Pj44O2Q9UmEqKGcreCkrMTI4Pj44O2g9bTw8NDt1PXk8PDQ7bj1uK3MrMT4+MTtzPW4tcztTPW8qRGErYypNYSsxMjg+Pjg7bz1vKk1hLWMqRGErMTI4Pj44O2M9UztsPWwrdSsxPj4xO3U9bC11O2Q9ZCtoKzE+PjE7aD1kLWg7bj1uK2MrMT4+MTtjPW4tYztzPXMrbysxPj4xO289cy1vO1M9bCpPYStkKlRhKzIwNDg+PjEyO2w9bCpUYS1kKk9hKzIwNDg+PjEyO2Q9UztTPWgqSWErdSpGYSsyMDQ4Pj4xMjtoPWgqRmEtdSpJYSsyMDQ4Pj4xMjt1PVM7YVtlXT1uK2Q7YVtlKzddPW4tZDthW2UrMV09cyt1O2FbZSs2XT1zLXU7YVtlKzJdPW8raDthW2UrNV09by1oO2FbZSszXT1jK2w7YVtlKzRdPWMtbH1lbHNle1M9QmEqZis1MTI+PjEwO2FbZV09UzthW2UrMV09UzthW2UrMl09UzthW2UrM109UzthW2UrNF09UzthW2UrNV09UzthW2UrNl09UzthW2UrN109U319Zm9yKGxldCBlPTA7ZTw4OysrZSl7Zj1hW2VdO2c9YVtlKzhdO3A9YVtlKzE2XTttPWFbZSsyNF07Yj1hW2UrMzJdO3k9YVtlKzQwXTt3PWFbZSs0OF07eD1hW2UrNTZdO2lmKDAhPT0oZ3xwfG18Ynx5fHd8eCkpe249QmEqZisyMDQ4Pj4xMjtzPUJhKmIrMjA0OD4+MTI7bz1wO2M9dztsPVJhKihnLXgpKzIwNDg+PjEyO2Q9UmEqKGcreCkrMjA0OD4+MTI7aD1tO3U9eTtuPTQxMTIrKG4rcysxPj4xKTtzPW4tcztTPW8qRGErYypNYSsyMDQ4Pj4xMjtvPW8qTWEtYypEYSsyMDQ4Pj4xMjtjPVM7bD1sK3UrMT4+MTt1PWwtdTtkPWQraCsxPj4xO2g9ZC1oO249bitjKzE+PjE7Yz1uLWM7cz1zK28rMT4+MTtvPXMtbztTPWwqT2ErZCpUYSsyMDQ4Pj4xMjtsPWwqVGEtZCpPYSsyMDQ4Pj4xMjtkPVM7Uz1oKklhK3UqRmErMjA0OD4+MTI7aD1oKkZhLXUqSWErMjA0OD4+MTI7dT1TO2Y9bitkO3g9bi1kO2c9cyt1O3c9cy11O3A9bytoO3k9by1oO209YytsO2I9Yy1sO2Y8MTY/Zj0wOmY+PTQwODA/Zj0yNTU6Zj4+PTQ7ZzwxNj9nPTA6Zz49NDA4MD9nPTI1NTpnPj49NDtwPDE2P3A9MDpwPj00MDgwP3A9MjU1OnA+Pj00O208MTY/bT0wOm0+PTQwODA/bT0yNTU6bT4+PTQ7YjwxNj9iPTA6Yj49NDA4MD9iPTI1NTpiPj49NDt5PDE2P3k9MDp5Pj00MDgwP3k9MjU1Onk+Pj00O3c8MTY/dz0wOnc+PTQwODA/dz0yNTU6dz4+PTQ7eDwxNj94PTA6eD49NDA4MD94PTI1NTp4Pj49NDtpW3QrZV09ZjtpW3QrZSs4XT1nO2lbdCtlKzE2XT1wO2lbdCtlKzI0XT1tO2lbdCtlKzMyXT1iO2lbdCtlKzQwXT15O2lbdCtlKzQ4XT13O2lbdCtlKzU2XT14fWVsc2V7Uz1CYSpmKzgxOTI+PjE0O1M9UzwtMjA0MD8wOlM+PTIwMjQ/MjU1OlMrMjA1Nj4+NDtpW3QrZV09UztpW3QrZSs4XT1TO2lbdCtlKzE2XT1TO2lbdCtlKzI0XT1TO2lbdCtlKzMyXT1TO2lbdCtlKzQwXT1TO2lbdCtlKzQ4XT1TO2lbdCtlKzU2XT1TfX19ZnVuY3Rpb24gYnVpbGRDb21wb25lbnREYXRhKGUsdCl7Y29uc3QgYT10LmJsb2Nrc1BlckxpbmUscj10LmJsb2Nrc1BlckNvbHVtbixpPW5ldyBJbnQxNkFycmF5KDY0KTtmb3IobGV0IGU9MDtlPHI7ZSsrKWZvcihsZXQgcj0wO3I8YTtyKyspe3F1YW50aXplQW5kSW52ZXJzZSh0LGdldEJsb2NrQnVmZmVyT2Zmc2V0KHQsZSxyKSxpKX1yZXR1cm4gdC5ibG9ja0RhdGF9ZnVuY3Rpb24gZmluZE5leHRGaWxlTWFya2VyKGUsdCxhPXQpe2NvbnN0IHI9ZS5sZW5ndGgtMTtsZXQgaT1hPHQ/YTp0O2lmKHQ+PXIpcmV0dXJuIG51bGw7Y29uc3Qgbj1yZWFkVWludDE2KGUsdCk7aWYobj49NjU0NzImJm48PTY1NTM0KXJldHVybntpbnZhbGlkOm51bGwsbWFya2VyOm4sb2Zmc2V0OnR9O2xldCBzPXJlYWRVaW50MTYoZSxpKTtmb3IoOyEocz49NjU0NzImJnM8PTY1NTM0KTspe2lmKCsraT49cilyZXR1cm4gbnVsbDtzPXJlYWRVaW50MTYoZSxpKX1yZXR1cm57aW52YWxpZDpuLnRvU3RyaW5nKDE2KSxtYXJrZXI6cyxvZmZzZXQ6aX19ZnVuY3Rpb24gcHJlcGFyZUNvbXBvbmVudHMoZSl7Y29uc3QgdD1NYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84L2UubWF4SCksYT1NYXRoLmNlaWwoZS5zY2FuTGluZXMvOC9lLm1heFYpO2Zvcihjb25zdCByIG9mIGUuY29tcG9uZW50cyl7Y29uc3QgaT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqci5oL2UubWF4SCksbj1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKnIudi9lLm1heFYpLHM9dCpyLmgsbz02NCooYSpyLnYpKihzKzEpO3IuYmxvY2tEYXRhPW5ldyBJbnQxNkFycmF5KG8pO3IuYmxvY2tzUGVyTGluZT1pO3IuYmxvY2tzUGVyQ29sdW1uPW59ZS5tY3VzUGVyTGluZT10O2UubWN1c1BlckNvbHVtbj1hfWZ1bmN0aW9uIHJlYWREYXRhQmxvY2soZSx0KXtjb25zdCBhPXJlYWRVaW50MTYoZSx0KTtsZXQgcj0odCs9MikrYS0yO2NvbnN0IGk9ZmluZE5leHRGaWxlTWFya2VyKGUscix0KTtpZihpPy5pbnZhbGlkKXt3YXJuKCJyZWFkRGF0YUJsb2NrIC0gaW5jb3JyZWN0IGxlbmd0aCwgY3VycmVudCBtYXJrZXIgaXM6ICIraS5pbnZhbGlkKTtyPWkub2Zmc2V0fWNvbnN0IG49ZS5zdWJhcnJheSh0LHIpO3JldHVybnthcHBEYXRhOm4sb2xkT2Zmc2V0OnQsbmV3T2Zmc2V0OnQrbi5sZW5ndGh9fWZ1bmN0aW9uIHNraXBEYXRhKGUsdCl7Y29uc3QgYT1yZWFkVWludDE2KGUsdCkscj0odCs9MikrYS0yLGk9ZmluZE5leHRGaWxlTWFya2VyKGUscix0KTtyZXR1cm4gaT8uaW52YWxpZD9pLm9mZnNldDpyfWNsYXNzIEpwZWdJbWFnZXtjb25zdHJ1Y3Rvcih7ZGVjb2RlVHJhbnNmb3JtOmU9bnVsbCxjb2xvclRyYW5zZm9ybTp0PS0xfT17fSl7dGhpcy5fZGVjb2RlVHJhbnNmb3JtPWU7dGhpcy5fY29sb3JUcmFuc2Zvcm09dH1zdGF0aWMgY2FuVXNlSW1hZ2VEZWNvZGVyKGUsdD0tMSl7bGV0IGE9bnVsbCxyPTAsaT1udWxsLG49cmVhZFVpbnQxNihlLHIpO3IrPTI7aWYoNjU0OTYhPT1uKXRocm93IG5ldyBKcGVnRXJyb3IoIlNPSSBub3QgZm91bmQiKTtuPXJlYWRVaW50MTYoZSxyKTtyKz0yO2U6Zm9yKDs2NTQ5NyE9PW47KXtzd2l0Y2gobil7Y2FzZSA2NTUwNTpjb25zdHthcHBEYXRhOnQsb2xkT2Zmc2V0OnMsbmV3T2Zmc2V0Om99PXJlYWREYXRhQmxvY2soZSxyKTtyPW87aWYoNjk9PT10WzBdJiYxMjA9PT10WzFdJiYxMDU9PT10WzJdJiYxMDI9PT10WzNdJiYwPT09dFs0XSYmMD09PXRbNV0pe2lmKGEpdGhyb3cgbmV3IEpwZWdFcnJvcigiRHVwbGljYXRlIEVYSUYtYmxvY2tzIGZvdW5kLiIpO2E9e2V4aWZTdGFydDpzKzYsZXhpZkVuZDpvfX1uPXJlYWRVaW50MTYoZSxyKTtyKz0yO2NvbnRpbnVlO2Nhc2UgNjU0NzI6Y2FzZSA2NTQ3MzpjYXNlIDY1NDc0Omk9ZVtyKzddO2JyZWFrIGU7Y2FzZSA2NTUzNToyNTUhPT1lW3JdJiZyLS19cj1za2lwRGF0YShlLHIpO249cmVhZFVpbnQxNihlLHIpO3IrPTJ9cmV0dXJuIDQ9PT1pfHwzPT09aSYmMD09PXQ/bnVsbDphfHx7fX1wYXJzZShlLHtkbmxTY2FuTGluZXM6dD1udWxsfT17fSl7bGV0IGEscixpPTAsbj1udWxsLHM9bnVsbCxvPTA7Y29uc3QgYz1bXSxsPVtdLGg9W107bGV0IHU9cmVhZFVpbnQxNihlLGkpO2krPTI7aWYoNjU0OTYhPT11KXRocm93IG5ldyBKcGVnRXJyb3IoIlNPSSBub3QgZm91bmQiKTt1PXJlYWRVaW50MTYoZSxpKTtpKz0yO2U6Zm9yKDs2NTQ5NyE9PXU7KXtsZXQgZCxmLGc7c3dpdGNoKHUpe2Nhc2UgNjU1MDQ6Y2FzZSA2NTUwNTpjYXNlIDY1NTA2OmNhc2UgNjU1MDc6Y2FzZSA2NTUwODpjYXNlIDY1NTA5OmNhc2UgNjU1MTA6Y2FzZSA2NTUxMTpjYXNlIDY1NTEyOmNhc2UgNjU1MTM6Y2FzZSA2NTUxNDpjYXNlIDY1NTE1OmNhc2UgNjU1MTY6Y2FzZSA2NTUxNzpjYXNlIDY1NTE4OmNhc2UgNjU1MTk6Y2FzZSA2NTUzNDpjb25zdHthcHBEYXRhOnAsbmV3T2Zmc2V0Om19PXJlYWREYXRhQmxvY2soZSxpKTtpPW07NjU1MDQ9PT11JiY3ND09PXBbMF0mJjcwPT09cFsxXSYmNzM9PT1wWzJdJiY3MD09PXBbM10mJjA9PT1wWzRdJiYobj17dmVyc2lvbjp7bWFqb3I6cFs1XSxtaW5vcjpwWzZdfSxkZW5zaXR5VW5pdHM6cFs3XSx4RGVuc2l0eTpwWzhdPDw4fHBbOV0seURlbnNpdHk6cFsxMF08PDh8cFsxMV0sdGh1bWJXaWR0aDpwWzEyXSx0aHVtYkhlaWdodDpwWzEzXSx0aHVtYkRhdGE6cC5zdWJhcnJheSgxNCwxNCszKnBbMTJdKnBbMTNdKX0pOzY1NTE4PT09dSYmNjU9PT1wWzBdJiYxMDA9PT1wWzFdJiYxMTE9PT1wWzJdJiY5OD09PXBbM10mJjEwMT09PXBbNF0mJihzPXt2ZXJzaW9uOnBbNV08PDh8cFs2XSxmbGFnczA6cFs3XTw8OHxwWzhdLGZsYWdzMTpwWzldPDw4fHBbMTBdLHRyYW5zZm9ybUNvZGU6cFsxMV19KTticmVhaztjYXNlIDY1NDk5OmNvbnN0IGI9cmVhZFVpbnQxNihlLGkpO2krPTI7Y29uc3QgeT1iK2ktMjtsZXQgdztmb3IoO2k8eTspe2NvbnN0IHQ9ZVtpKytdLGE9bmV3IFVpbnQxNkFycmF5KDY0KTtpZih0Pj40KXtpZih0Pj40IT0xKXRocm93IG5ldyBKcGVnRXJyb3IoIkRRVCAtIGludmFsaWQgdGFibGUgc3BlYyIpO2ZvcihmPTA7Zjw2NDtmKyspe3c9dmFbZl07YVt3XT1yZWFkVWludDE2KGUsaSk7aSs9Mn19ZWxzZSBmb3IoZj0wO2Y8NjQ7ZisrKXt3PXZhW2ZdO2Fbd109ZVtpKytdfWNbMTUmdF09YX1icmVhaztjYXNlIDY1NDcyOmNhc2UgNjU0NzM6Y2FzZSA2NTQ3NDppZihhKXRocm93IG5ldyBKcGVnRXJyb3IoIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZCIpO2krPTI7YT17fTthLmV4dGVuZGVkPTY1NDczPT09dTthLnByb2dyZXNzaXZlPTY1NDc0PT09dTthLnByZWNpc2lvbj1lW2krK107Y29uc3QgeD1yZWFkVWludDE2KGUsaSk7aSs9MjthLnNjYW5MaW5lcz10fHx4O2Euc2FtcGxlc1BlckxpbmU9cmVhZFVpbnQxNihlLGkpO2krPTI7YS5jb21wb25lbnRzPVtdO2EuY29tcG9uZW50SWRzPXt9O2NvbnN0IFM9ZVtpKytdO2xldCBrPTAsQz0wO2ZvcihkPTA7ZDxTO2QrKyl7Y29uc3QgdD1lW2ldLHI9ZVtpKzFdPj40LG49MTUmZVtpKzFdO2s8ciYmKGs9cik7QzxuJiYoQz1uKTtjb25zdCBzPWVbaSsyXTtnPWEuY29tcG9uZW50cy5wdXNoKHtoOnIsdjpuLHF1YW50aXphdGlvbklkOnMscXVhbnRpemF0aW9uVGFibGU6bnVsbH0pO2EuY29tcG9uZW50SWRzW3RdPWctMTtpKz0zfWEubWF4SD1rO2EubWF4Vj1DO3ByZXBhcmVDb21wb25lbnRzKGEpO2JyZWFrO2Nhc2UgNjU0NzY6Y29uc3Qgdj1yZWFkVWludDE2KGUsaSk7aSs9Mjtmb3IoZD0yO2Q8djspe2NvbnN0IHQ9ZVtpKytdLGE9bmV3IFVpbnQ4QXJyYXkoMTYpO2xldCByPTA7Zm9yKGY9MDtmPDE2O2YrKyxpKyspcis9YVtmXT1lW2ldO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGY9MDtmPHI7ZisrLGkrKyluW2ZdPWVbaV07ZCs9MTcrcjsodD4+ND9sOmgpWzE1JnRdPWJ1aWxkSHVmZm1hblRhYmxlKGEsbil9YnJlYWs7Y2FzZSA2NTUwMTppKz0yO3I9cmVhZFVpbnQxNihlLGkpO2krPTI7YnJlYWs7Y2FzZSA2NTQ5ODpjb25zdCBGPTE9PT0rK28mJiF0O2krPTI7Y29uc3QgVD1lW2krK10sTz1bXTtmb3IoZD0wO2Q8VDtkKyspe2NvbnN0IHQ9ZVtpKytdLHI9YS5jb21wb25lbnRJZHNbdF0sbj1hLmNvbXBvbmVudHNbcl07bi5pbmRleD10O2NvbnN0IHM9ZVtpKytdO24uaHVmZm1hblRhYmxlREM9aFtzPj40XTtuLmh1ZmZtYW5UYWJsZUFDPWxbMTUmc107Ty5wdXNoKG4pfWNvbnN0IE09ZVtpKytdLEQ9ZVtpKytdLFI9ZVtpKytdO3RyeXtpKz1kZWNvZGVTY2FuKGUsaSxhLE8scixNLEQsUj4+NCwxNSZSLEYpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcil7d2FybihgJHt0Lm1lc3NhZ2V9IC0tIGF0dGVtcHRpbmcgdG8gcmUtcGFyc2UgdGhlIEpQRUcgaW1hZ2UuYCk7cmV0dXJuIHRoaXMucGFyc2UoZSx7ZG5sU2NhbkxpbmVzOnQuc2NhbkxpbmVzfSl9aWYodCBpbnN0YW5jZW9mIEVPSU1hcmtlckVycm9yKXt3YXJuKGAke3QubWVzc2FnZX0gLS0gaWdub3JpbmcgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEuYCk7YnJlYWsgZX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6aSs9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbaV0mJmktLTticmVhaztkZWZhdWx0OmNvbnN0IE49ZmluZE5leHRGaWxlTWFya2VyKGUsaS0yLGktMyk7aWYoTj8uaW52YWxpZCl7d2FybigiSnBlZ0ltYWdlLnBhcnNlIC0gdW5leHBlY3RlZCBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogIitOLmludmFsaWQpO2k9Ti5vZmZzZXQ7YnJlYWt9aWYoIU58fGk+PWUubGVuZ3RoLTEpe3dhcm4oIkpwZWdJbWFnZS5wYXJzZSAtIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW1hZ2UgZGF0YSB3aXRob3V0IGZpbmRpbmcgYW4gRU9JIG1hcmtlciAoMHhGRkQ5KS4iKTticmVhayBlfXRocm93IG5ldyBKcGVnRXJyb3IoIkpwZWdJbWFnZS5wYXJzZSAtIHVua25vd24gbWFya2VyOiAiK3UudG9TdHJpbmcoMTYpKX11PXJlYWRVaW50MTYoZSxpKTtpKz0yfWlmKCFhKXRocm93IG5ldyBKcGVnRXJyb3IoIkpwZWdJbWFnZS5wYXJzZSAtIG5vIGZyYW1lIGRhdGEgZm91bmQuIik7dGhpcy53aWR0aD1hLnNhbXBsZXNQZXJMaW5lO3RoaXMuaGVpZ2h0PWEuc2NhbkxpbmVzO3RoaXMuamZpZj1uO3RoaXMuYWRvYmU9czt0aGlzLmNvbXBvbmVudHM9W107Zm9yKGNvbnN0IGUgb2YgYS5jb21wb25lbnRzKXtjb25zdCB0PWNbZS5xdWFudGl6YXRpb25JZF07dCYmKGUucXVhbnRpemF0aW9uVGFibGU9dCk7dGhpcy5jb21wb25lbnRzLnB1c2goe2luZGV4OmUuaW5kZXgsb3V0cHV0OmJ1aWxkQ29tcG9uZW50RGF0YSgwLGUpLHNjYWxlWDplLmgvYS5tYXhILHNjYWxlWTplLnYvYS5tYXhWLGJsb2Nrc1BlckxpbmU6ZS5ibG9ja3NQZXJMaW5lLGJsb2Nrc1BlckNvbHVtbjplLmJsb2Nrc1BlckNvbHVtbn0pfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofV9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKGUsdCxhPSExKXtjb25zdCByPXRoaXMud2lkdGgvZSxpPXRoaXMuaGVpZ2h0L3Q7bGV0IG4scyxvLGMsbCxoLHUsZCxmLGcscCxtPTA7Y29uc3QgYj10aGlzLmNvbXBvbmVudHMubGVuZ3RoLHk9ZSp0KmIsdz1uZXcgVWludDhDbGFtcGVkQXJyYXkoeSkseD1uZXcgVWludDMyQXJyYXkoZSksUz00Mjk0OTY3Mjg4O2xldCBrO2Zvcih1PTA7dTxiO3UrKyl7bj10aGlzLmNvbXBvbmVudHNbdV07cz1uLnNjYWxlWCpyO289bi5zY2FsZVkqaTttPXU7cD1uLm91dHB1dDtjPW4uYmxvY2tzUGVyTGluZSsxPDwzO2lmKHMhPT1rKXtmb3IobD0wO2w8ZTtsKyspe2Q9MHxsKnM7eFtsXT0oZCZTKTw8M3w3JmR9az1zfWZvcihoPTA7aDx0O2grKyl7ZD0wfGgqbztnPWMqKGQmUyl8KDcmZCk8PDM7Zm9yKGw9MDtsPGU7bCsrKXt3W21dPXBbZyt4W2xdXTttKz1ifX19bGV0IEM9dGhpcy5fZGVjb2RlVHJhbnNmb3JtO2F8fDQhPT1ifHxDfHwoQz1uZXcgSW50MzJBcnJheShbLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTVdKSk7aWYoQylmb3IodT0wO3U8eTspZm9yKGQ9MCxmPTA7ZDxiO2QrKyx1KyssZis9Mil3W3VdPSh3W3VdKkNbZl0+PjgpK0NbZisxXTtyZXR1cm4gd31nZXQgX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKCl7cmV0dXJuIHRoaXMuYWRvYmU/ISF0aGlzLmFkb2JlLnRyYW5zZm9ybUNvZGU6Mz09PXRoaXMubnVtQ29tcG9uZW50cz8wIT09dGhpcy5fY29sb3JUcmFuc2Zvcm0mJig4MiE9PXRoaXMuY29tcG9uZW50c1swXS5pbmRleHx8NzEhPT10aGlzLmNvbXBvbmVudHNbMV0uaW5kZXh8fDY2IT09dGhpcy5jb21wb25lbnRzWzJdLmluZGV4KToxPT09dGhpcy5fY29sb3JUcmFuc2Zvcm19X2NvbnZlcnRZY2NUb1JnYihlKXtsZXQgdCxhLHI7Zm9yKGxldCBpPTAsbj1lLmxlbmd0aDtpPG47aSs9Myl7dD1lW2ldO2E9ZVtpKzFdO3I9ZVtpKzJdO2VbaV09dC0xNzkuNDU2KzEuNDAyKnI7ZVtpKzFdPXQrMTM1LjQ1OS0uMzQ0KmEtLjcxNCpyO2VbaSsyXT10LTIyNi44MTYrMS43NzIqYX1yZXR1cm4gZX1fY29udmVydFljY1RvUmdiYShlLHQpe2ZvcihsZXQgYT0wLHI9MCxpPWUubGVuZ3RoO2E8aTthKz0zLHIrPTQpe2NvbnN0IGk9ZVthXSxuPWVbYSsxXSxzPWVbYSsyXTt0W3JdPWktMTc5LjQ1NisxLjQwMipzO3RbcisxXT1pKzEzNS40NTktLjM0NCpuLS43MTQqczt0W3IrMl09aS0yMjYuODE2KzEuNzcyKm47dFtyKzNdPTI1NX1yZXR1cm4gdH1fY29udmVydFljY2tUb1JnYihlKXt0aGlzLl9jb252ZXJ0WWNja1RvQ215ayhlKTtyZXR1cm4gdGhpcy5fY29udmVydENteWtUb1JnYihlKX1fY29udmVydFljY2tUb1JnYmEoZSl7dGhpcy5fY29udmVydFljY2tUb0NteWsoZSk7cmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2JhKGUpfV9jb252ZXJ0WWNja1RvQ215ayhlKXtsZXQgdCxhLHI7Zm9yKGxldCBpPTAsbj1lLmxlbmd0aDtpPG47aSs9NCl7dD1lW2ldO2E9ZVtpKzFdO3I9ZVtpKzJdO2VbaV09NDM0LjQ1Ni10LTEuNDAyKnI7ZVtpKzFdPTExOS41NDEtdCsuMzQ0KmErLjcxNCpyO2VbaSsyXT00ODEuODE2LXQtMS43NzIqYX1yZXR1cm4gZX1fY29udmVydENteWtUb1JnYihlKXtjb25zdCB0PWUubGVuZ3RoLzQ7Q29sb3JTcGFjZVV0aWxzLmNteWsuZ2V0UmdiQnVmZmVyKGUsMCx0LGUsMCw4LDApO3JldHVybiBlLnN1YmFycmF5KDAsMyp0KX1fY29udmVydENteWtUb1JnYmEoZSl7Q29sb3JTcGFjZVV0aWxzLmNteWsuZ2V0UmdiQnVmZmVyKGUsMCxlLmxlbmd0aC80LGUsMCw4LDEpO2lmKENvbG9yU3BhY2VVdGlscy5jbXlrIGluc3RhbmNlb2YgRGV2aWNlQ215a0NTKWZvcihsZXQgdD0zLGE9ZS5sZW5ndGg7dDxhO3QrPTQpZVt0XT0yNTU7cmV0dXJuIGV9Z2V0RGF0YSh7d2lkdGg6ZSxoZWlnaHQ6dCxmb3JjZVJHQkE6YT0hMSxmb3JjZVJHQjpyPSExLGlzU291cmNlUERGOmk9ITF9KXtpZih0aGlzLm51bUNvbXBvbmVudHM+NCl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlIik7Y29uc3Qgbj10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKGUsdCxpKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiYoYXx8cikpe2NvbnN0IGU9bi5sZW5ndGgqKGE/NDozKSx0PW5ldyBVaW50OENsYW1wZWRBcnJheShlKTtsZXQgcj0wO2lmKGEpIWZ1bmN0aW9uIGdyYXlUb1JHQkEoZSx0KXtpZihGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbilmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspdFthXT02NTc5MyplW2FdfDQyNzgxOTAwODA7ZWxzZSBmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspdFthXT0xNjg0MzAwOCplW2FdfDI1NX0obixuZXcgVWludDMyQXJyYXkodC5idWZmZXIpKTtlbHNlIGZvcihjb25zdCBlIG9mIG4pe3RbcisrXT1lO3RbcisrXT1lO3RbcisrXT1lfXJldHVybiB0fWlmKDM9PT10aGlzLm51bUNvbXBvbmVudHMmJnRoaXMuX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKXtpZihhKXtjb25zdCBlPW5ldyBVaW50OENsYW1wZWRBcnJheShuLmxlbmd0aC8zKjQpO3JldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2JhKG4sZSl9cmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihuKX1pZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gYT90aGlzLl9jb252ZXJ0WWNja1RvUmdiYShuKTpyP3RoaXMuX2NvbnZlcnRZY2NrVG9SZ2Iobik6dGhpcy5fY29udmVydFljY2tUb0NteWsobik7aWYoYSlyZXR1cm4gdGhpcy5fY29udmVydENteWtUb1JnYmEobik7aWYocilyZXR1cm4gdGhpcy5fY29udmVydENteWtUb1JnYihuKX1yZXR1cm4gbn19Y2xhc3MgSnBlZ1N0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtzdGF0aWMjTT1GZWF0dXJlVGVzdC5pc0ltYWdlRGVjb2RlclN1cHBvcnRlZDtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1hfXN0YXRpYyBnZXQgY2FuVXNlSW1hZ2VEZWNvZGVyKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJjYW5Vc2VJbWFnZURlY29kZXIiLHRoaXMuI00/SW1hZ2VEZWNvZGVyLmlzVHlwZVN1cHBvcnRlZCgiaW1hZ2UvanBlZyIpOlByb21pc2UucmVzb2x2ZSghMSkpfXN0YXRpYyBzZXRPcHRpb25zKHtpc0ltYWdlRGVjb2RlclN1cHBvcnRlZDplPSExfSl7dGhpcy4jTT1lfWdldCBieXRlcygpe3JldHVybiBzaGFkb3codGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe3RoaXMuZGVjb2RlSW1hZ2UoKX1nZXQganBlZ09wdGlvbnMoKXtjb25zdCBlPXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0sdD10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZigodGhpcy5mb3JjZVJHQkF8fHRoaXMuZm9yY2VSR0IpJiZBcnJheS5pc0FycmF5KHQpKXtjb25zdCBhPXRoaXMuZGljdC5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxyPXQubGVuZ3RoLGk9bmV3IEludDMyQXJyYXkocik7bGV0IG49ITE7Y29uc3Qgcz0oMTw8YSktMTtmb3IobGV0IGU9MDtlPHI7ZSs9Mil7aVtlXT0yNTYqKHRbZSsxXS10W2VdKXwwO2lbZSsxXT10W2VdKnN8MDsyNTY9PT1pW2VdJiYwPT09aVtlKzFdfHwobj0hMCl9biYmKGUuZGVjb2RlVHJhbnNmb3JtPWkpfWlmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgdD10aGlzLnBhcmFtcy5nZXQoIkNvbG9yVHJhbnNmb3JtIik7TnVtYmVyLmlzSW50ZWdlcih0KSYmKGUuY29sb3JUcmFuc2Zvcm09dCl9cmV0dXJuIHNoYWRvdyh0aGlzLCJqcGVnT3B0aW9ucyIsZSl9I04oZSl7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aC0xO3Q8YTt0KyspaWYoMjU1PT09ZVt0XSYmMjE2PT09ZVt0KzFdKXt0PjAmJihlPWUuc3ViYXJyYXkodCkpO2JyZWFrfXJldHVybiBlfWRlY29kZUltYWdlKGUpe2lmKHRoaXMuZW9mKXJldHVybiB0aGlzLmJ1ZmZlcjtlPXRoaXMuI04oZXx8dGhpcy5ieXRlcyk7Y29uc3QgdD1uZXcgSnBlZ0ltYWdlKHRoaXMuanBlZ09wdGlvbnMpO3QucGFyc2UoZSk7Y29uc3QgYT10LmdldERhdGEoe3dpZHRoOnRoaXMuZHJhd1dpZHRoLGhlaWdodDp0aGlzLmRyYXdIZWlnaHQsZm9yY2VSR0JBOnRoaXMuZm9yY2VSR0JBLGZvcmNlUkdCOnRoaXMuZm9yY2VSR0IsaXNTb3VyY2VQREY6ITB9KTt0aGlzLmJ1ZmZlcj1hO3RoaXMuYnVmZmVyTGVuZ3RoPWEubGVuZ3RoO3RoaXMuZW9mPSEwO3JldHVybiB0aGlzLmJ1ZmZlcn1nZXQgY2FuQXN5bmNEZWNvZGVJbWFnZUZyb21CdWZmZXIoKXtyZXR1cm4gdGhpcy5zdHJlYW0uaXNBc3luY31hc3luYyBnZXRUcmFuc2ZlcmFibGVJbWFnZSgpe2lmKCFhd2FpdCBKcGVnU3RyZWFtLmNhblVzZUltYWdlRGVjb2RlcilyZXR1cm4gbnVsbDtjb25zdCBlPXRoaXMuanBlZ09wdGlvbnM7aWYoZS5kZWNvZGVUcmFuc2Zvcm0pcmV0dXJuIG51bGw7bGV0IHQ7dHJ5e2NvbnN0IGE9dGhpcy5jYW5Bc3luY0RlY29kZUltYWdlRnJvbUJ1ZmZlciYmYXdhaXQgdGhpcy5zdHJlYW0uYXN5bmNHZXRCeXRlcygpfHx0aGlzLmJ5dGVzO2lmKCFhKXJldHVybiBudWxsO2xldCByPXRoaXMuI04oYSk7Y29uc3QgaT1KcGVnSW1hZ2UuY2FuVXNlSW1hZ2VEZWNvZGVyKHIsZS5jb2xvclRyYW5zZm9ybSk7aWYoIWkpcmV0dXJuIG51bGw7aWYoaS5leGlmU3RhcnQpe3I9ci5zbGljZSgpO3IuZmlsbCgwLGkuZXhpZlN0YXJ0LGkuZXhpZkVuZCl9dD1uZXcgSW1hZ2VEZWNvZGVyKHtkYXRhOnIsdHlwZToiaW1hZ2UvanBlZyIscHJlZmVyQW5pbWF0aW9uOiExfSk7cmV0dXJuKGF3YWl0IHQuZGVjb2RlKCkpLmltYWdlfWNhdGNoKGUpe3dhcm4oYGdldFRyYW5zZmVyYWJsZUltYWdlIC0gZmFpbGVkOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9ZmluYWxseXt0Py5jbG9zZSgpfX19Y29uc3QgTmE9YXN5bmMgZnVuY3Rpb24gT3BlbkpQRUcoZT17fSl7dmFyIHQ9ZSxhPSIuL3RoaXMucHJvZ3JhbSIscXVpdF89KGUsdCk9Pnt0aHJvdyB0fSxyPWltcG9ydC5tZXRhLnVybDt0cnl7bmV3IFVSTCgiLiIscikuaHJlZn1jYXRjaHt9MDt2YXIgaSxuLHMsbyxjLGwsaCx1LGQ9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxmPWNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKSxnPSExLHA9ITE7ZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKXt2YXIgZT1vLmJ1ZmZlcjtjPW5ldyBJbnQ4QXJyYXkoZSk7bmV3IEludDE2QXJyYXkoZSk7bD1uZXcgVWludDhBcnJheShlKTtuZXcgVWludDE2QXJyYXkoZSk7aD1uZXcgSW50MzJBcnJheShlKTt1PW5ldyBVaW50MzJBcnJheShlKTtuZXcgRmxvYXQzMkFycmF5KGUpO25ldyBGbG9hdDY0QXJyYXkoZSk7bmV3IEJpZ0ludDY0QXJyYXkoZSk7bmV3IEJpZ1VpbnQ2NEFycmF5KGUpfWNsYXNzIEV4aXRTdGF0dXN7bmFtZT0iRXhpdFN0YXR1cyI7Y29uc3RydWN0b3IoZSl7dGhpcy5tZXNzYWdlPWBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7ZX0pYDt0aGlzLnN0YXR1cz1lfX12YXIgbSxjYWxsUnVudGltZUNhbGxiYWNrcz1lPT57Zm9yKDtlLmxlbmd0aD4wOyllLnNoaWZ0KCkodCl9LGI9W10sYWRkT25Qb3N0UnVuPWU9PmIucHVzaChlKSx5PVtdLGFkZE9uUHJlUnVuPWU9PnkucHVzaChlKSx3PSEwLHg9MCxTPXt9LGhhbmRsZUV4Y2VwdGlvbj1lPT57aWYoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXN8fCJ1bndpbmQiPT1lKXJldHVybiBpO3F1aXRfKDAsZSl9LGtlZXBSdW50aW1lQWxpdmU9KCk9Pnd8fHg+MCxfcHJvY19leGl0PWU9PntpPWU7aWYoIWtlZXBSdW50aW1lQWxpdmUoKSl7dC5vbkV4aXQ/LihlKTtnPSEwfXF1aXRfKDAsbmV3IEV4aXRTdGF0dXMoZSkpfSxfZXhpdD0oZSx0KT0+e2k9ZTtfcHJvY19leGl0KGUpfSxjYWxsVXNlckNhbGxiYWNrPWU9PntpZighZyl0cnl7ZSgpOygoKT0+e2lmKCFrZWVwUnVudGltZUFsaXZlKCkpdHJ5e19leGl0KGkpfWNhdGNoKGUpe2hhbmRsZUV4Y2VwdGlvbihlKX19KSgpfWNhdGNoKGUpe2hhbmRsZUV4Y2VwdGlvbihlKX19LGFsaWduTWVtb3J5PShlLHQpPT5NYXRoLmNlaWwoZS90KSp0LGdyb3dNZW1vcnk9ZT0+e3ZhciB0PShlLW8uYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2fDA7dHJ5e28uZ3Jvdyh0KTt1cGRhdGVNZW1vcnlWaWV3cygpO3JldHVybiAxfWNhdGNoKGUpe319LGs9e30sZ2V0RW52U3RyaW5ncz0oKT0+e2lmKCFnZXRFbnZTdHJpbmdzLnN0cmluZ3Mpe3ZhciBlPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2V8fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixfOmF8fCIuL3RoaXMucHJvZ3JhbSJ9O2Zvcih2YXIgdCBpbiBrKXZvaWQgMD09PWtbdF0/ZGVsZXRlIGVbdF06ZVt0XT1rW3RdO3ZhciByPVtdO2Zvcih2YXIgdCBpbiBlKXIucHVzaChgJHt0fT0ke2VbdF19YCk7Z2V0RW52U3RyaW5ncy5zdHJpbmdzPXJ9cmV0dXJuIGdldEVudlN0cmluZ3Muc3RyaW5nc30sc3RyaW5nVG9VVEY4PShlLHQsYSk9PigoZSx0LGEscik9PntpZighKHI+MCkpcmV0dXJuIDA7Zm9yKHZhciBpPWEsbj1hK3ItMSxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBvPWUuY29kZVBvaW50QXQocyk7aWYobzw9MTI3KXtpZihhPj1uKWJyZWFrO3RbYSsrXT1vfWVsc2UgaWYobzw9MjA0Nyl7aWYoYSsxPj1uKWJyZWFrO3RbYSsrXT0xOTJ8bz4+Njt0W2ErK109MTI4fDYzJm99ZWxzZSBpZihvPD02NTUzNSl7aWYoYSsyPj1uKWJyZWFrO3RbYSsrXT0yMjR8bz4+MTI7dFthKytdPTEyOHxvPj42JjYzO3RbYSsrXT0xMjh8NjMmb31lbHNle2lmKGErMz49bilicmVhazt0W2ErK109MjQwfG8+PjE4O3RbYSsrXT0xMjh8bz4+MTImNjM7dFthKytdPTEyOHxvPj42JjYzO3RbYSsrXT0xMjh8NjMmbztzKyt9fXRbYV09MDtyZXR1cm4gYS1pfSkoZSxsLHQsYSksbGVuZ3RoQnl0ZXNVVEY4PWU9Pntmb3IodmFyIHQ9MCxhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciByPWUuY2hhckNvZGVBdChhKTtpZihyPD0xMjcpdCsrO2Vsc2UgaWYocjw9MjA0Nyl0Kz0yO2Vsc2UgaWYocj49NTUyOTYmJnI8PTU3MzQzKXt0Kz00OysrYX1lbHNlIHQrPTN9cmV0dXJuIHR9LEM9W251bGwsW10sW11dLHY9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RGVjb2Rlcj9uZXcgVGV4dERlY29kZXI6dm9pZCAwLFVURjhBcnJheVRvU3RyaW5nPShlLHQ9MCxhLHIpPT57dmFyIGk9KChlLHQsYSxyKT0+e3ZhciBpPXQrYTtpZihyKXJldHVybiBpO2Zvcig7ZVt0XSYmISh0Pj1pKTspKyt0O3JldHVybiB0fSkoZSx0LGEscik7aWYoaS10PjE2JiZlLmJ1ZmZlciYmdilyZXR1cm4gdi5kZWNvZGUoZS5zdWJhcnJheSh0LGkpKTtmb3IodmFyIG49IiI7dDxpOyl7dmFyIHM9ZVt0KytdO2lmKDEyOCZzKXt2YXIgbz02MyZlW3QrK107aWYoMTkyIT0oMjI0JnMpKXt2YXIgYz02MyZlW3QrK107aWYoKHM9MjI0PT0oMjQwJnMpPygxNSZzKTw8MTJ8bzw8NnxjOig3JnMpPDwxOHxvPDwxMnxjPDw2fDYzJmVbdCsrXSk8NjU1MzYpbis9U3RyaW5nLmZyb21DaGFyQ29kZShzKTtlbHNle3ZhciBsPXMtNjU1MzY7bis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxsPj4xMCw1NjMyMHwxMDIzJmwpfX1lbHNlIG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMxJnMpPDw2fG8pfWVsc2Ugbis9U3RyaW5nLmZyb21DaGFyQ29kZShzKX1yZXR1cm4gbn0scHJpbnRDaGFyPShlLHQpPT57dmFyIGE9Q1tlXTtpZigwPT09dHx8MTA9PT10KXsoMT09PWU/ZDpmKShVVEY4QXJyYXlUb1N0cmluZyhhKSk7YS5sZW5ndGg9MH1lbHNlIGEucHVzaCh0KX0sVVRGOFRvU3RyaW5nPShlLHQsYSk9PmU/VVRGOEFycmF5VG9TdHJpbmcobCxlLHQsYSk6IiI7dC5ub0V4aXRSdW50aW1lJiYodz10Lm5vRXhpdFJ1bnRpbWUpO3QucHJpbnQmJihkPXQucHJpbnQpO3QucHJpbnRFcnImJihmPXQucHJpbnRFcnIpO3Qud2FzbUJpbmFyeSYmdC53YXNtQmluYXJ5O3QuYXJndW1lbnRzJiZ0LmFyZ3VtZW50czt0LnRoaXNQcm9ncmFtJiYoYT10LnRoaXNQcm9ncmFtKTtpZih0LnByZUluaXQpeyJmdW5jdGlvbiI9PXR5cGVvZiB0LnByZUluaXQmJih0LnByZUluaXQ9W3QucHJlSW5pdF0pO2Zvcig7dC5wcmVJbml0Lmxlbmd0aD4wOyl0LnByZUluaXQuc2hpZnQoKSgpfXQud3JpdGVBcnJheVRvTWVtb3J5PShlLHQpPT57Yy5zZXQoZSx0KX07dmFyIEYsVD17azooKT0+ZnVuY3Rpb24gYWJvcnQoZSl7dC5vbkFib3J0Py4oZSk7ZihlPSJBYm9ydGVkKCIrZSsiKSIpO2c9ITA7ZSs9Ii4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciBhPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoZSk7cz8uKGEpO3Rocm93IGF9KCIiKSxqOigpPT57dz0hMTt4PTB9LGw6KGUsdCk9PntpZihTW2VdKXtjbGVhclRpbWVvdXQoU1tlXS5pZCk7ZGVsZXRlIFNbZV19aWYoIXQpcmV0dXJuIDA7dmFyIGE9c2V0VGltZW91dCgoKT0+e2RlbGV0ZSBTW2VdO2NhbGxVc2VyQ2FsbGJhY2soKCk9Pm0oZSxwZXJmb3JtYW5jZS5ub3coKSkpfSx0KTtTW2VdPXtpZDphLHRpbWVvdXRfbXM6dH07cmV0dXJuIDB9LGY6ZnVuY3Rpb24gX2NvcHlfcGl4ZWxzXzEoZSxhKXtlPj49Mjtjb25zdCByPXQuaW1hZ2VEYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheShhKSxpPWguc3ViYXJyYXkoZSxlK2EpO3Iuc2V0KGkpfSxlOmZ1bmN0aW9uIF9jb3B5X3BpeGVsc18zKGUsYSxyLGkpe2U+Pj0yO2E+Pj0yO3I+Pj0yO2NvbnN0IG49dC5pbWFnZURhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqaSkscz1oLnN1YmFycmF5KGUsZStpKSxvPWguc3ViYXJyYXkoYSxhK2kpLGM9aC5zdWJhcnJheShyLHIraSk7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7blszKmVdPXNbZV07blszKmUrMV09b1tlXTtuWzMqZSsyXT1jW2VdfX0sZDpmdW5jdGlvbiBfY29weV9waXhlbHNfNChlLGEscixpLG4pe2U+Pj0yO2E+Pj0yO3I+Pj0yO2k+Pj0yO2NvbnN0IHM9dC5pbWFnZURhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDQqbiksbz1oLnN1YmFycmF5KGUsZStuKSxjPWguc3ViYXJyYXkoYSxhK24pLGw9aC5zdWJhcnJheShyLHIrbiksdT1oLnN1YmFycmF5KGksaStuKTtmb3IobGV0IGU9MDtlPG47ZSsrKXtzWzQqZV09b1tlXTtzWzQqZSsxXT1jW2VdO3NbNCplKzJdPWxbZV07c1s0KmUrM109dVtlXX19LG06ZT0+e3ZhciB0PWwubGVuZ3RoLGE9MjE0NzQ4MzY0ODtpZigoZT4+Pj0wKT5hKXJldHVybiExO2Zvcih2YXIgcj0xO3I8PTQ7cio9Mil7dmFyIGk9dCooMSsuMi9yKTtpPU1hdGgubWluKGksZSsxMDA2NjMyOTYpO3ZhciBuPU1hdGgubWluKGEsYWxpZ25NZW1vcnkoTWF0aC5tYXgoZSxpKSw2NTUzNikpO2lmKGdyb3dNZW1vcnkobikpcmV0dXJuITB9cmV0dXJuITF9LG86KGUsdCk9Pnt2YXIgYT0wLHI9MDtmb3IodmFyIGkgb2YgZ2V0RW52U3RyaW5ncygpKXt2YXIgbj10K2E7dVtlK3I+PjJdPW47YSs9c3RyaW5nVG9VVEY4KGksbiwxLzApKzE7cis9NH1yZXR1cm4gMH0scDooZSx0KT0+e3ZhciBhPWdldEVudlN0cmluZ3MoKTt1W2U+PjJdPWEubGVuZ3RoO3ZhciByPTA7Zm9yKHZhciBpIG9mIGEpcis9bGVuZ3RoQnl0ZXNVVEY4KGkpKzE7dVt0Pj4yXT1yO3JldHVybiAwfSxuOmZ1bmN0aW9uIF9mZF9zZWVrKGUsdCxhLHIpe3Q9KGk9dCk8LTkwMDcxOTkyNTQ3NDA5OTJ8fGk+OTAwNzE5OTI1NDc0MDk5Mj9OYU46TnVtYmVyKGkpO3ZhciBpO3JldHVybiA3MH0sYjooZSx0LGEscik9Pntmb3IodmFyIGk9MCxuPTA7bjxhO24rKyl7dmFyIHM9dVt0Pj4yXSxvPXVbdCs0Pj4yXTt0Kz04O2Zvcih2YXIgYz0wO2M8bztjKyspcHJpbnRDaGFyKGUsbFtzK2NdKTtpKz1vfXVbcj4+Ml09aTtyZXR1cm4gMH0scTpmdW5jdGlvbiBfZ3JheV90b19yZ2JhKGUsYSl7ZT4+PTI7Y29uc3Qgcj10LmltYWdlRGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkoNCphKSxpPWguc3ViYXJyYXkoZSxlK2EpO2ZvcihsZXQgZT0wO2U8YTtlKyspe3JbNCplXT1yWzQqZSsxXT1yWzQqZSsyXT1pW2VdO3JbNCplKzNdPTI1NX19LGg6ZnVuY3Rpb24gX2dyYXlhX3RvX3JnYmEoZSxhLHIpe2U+Pj0yO2E+Pj0yO2NvbnN0IGk9dC5pbWFnZURhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDQqciksbj1oLnN1YmFycmF5KGUsZStyKSxzPWguc3ViYXJyYXkoYSxhK3IpO2ZvcihsZXQgZT0wO2U8cjtlKyspe2lbNCplXT1pWzQqZSsxXT1pWzQqZSsyXT1uW2VdO2lbNCplKzNdPXNbZV19fSxjOmZ1bmN0aW9uIF9qc1ByaW50V2FybmluZyhlKXtjb25zdCBhPVVURjhUb1N0cmluZyhlKTsodC53YXJufHxjb25zb2xlLndhcm4pKGBPcGVuSlBFRzogJHthfWApfSxpOl9wcm9jX2V4aXQsZzpmdW5jdGlvbiBfcmdiX3RvX3JnYmEoZSxhLHIsaSl7ZT4+PTI7YT4+PTI7cj4+PTI7Y29uc3Qgbj10LmltYWdlRGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkoNCppKSxzPWguc3ViYXJyYXkoZSxlK2kpLG89aC5zdWJhcnJheShhLGEraSksYz1oLnN1YmFycmF5KHIscitpKTtmb3IobGV0IGU9MDtlPGk7ZSsrKXtuWzQqZV09c1tlXTtuWzQqZSsxXT1vW2VdO25bNCplKzJdPWNbZV07bls0KmUrM109MjU1fX0sYTpmdW5jdGlvbiBfc3RvcmVFcnJvck1lc3NhZ2UoZSl7Y29uc3QgYT1VVEY4VG9TdHJpbmcoZSk7dC5lcnJvck1lc3NhZ2VzP3QuZXJyb3JNZXNzYWdlcys9IlxuIithOnQuZXJyb3JNZXNzYWdlcz1hfX07Rj1hd2FpdCBhc3luYyBmdW5jdGlvbiBjcmVhdGVXYXNtKCl7ZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGUsYSl7Rj1lLmV4cG9ydHM7bz1GLnI7dXBkYXRlTWVtb3J5Vmlld3MoKTshZnVuY3Rpb24gYXNzaWduV2FzbUV4cG9ydHMoZSl7dC5fbWFsbG9jPWUudDt0Ll9mcmVlPWUudTt0Ll9qcDJfZGVjb2RlPWUudjttPWUud30oRik7cmV0dXJuIEZ9dmFyIGU9ZnVuY3Rpb24gZ2V0V2FzbUltcG9ydHMoKXtyZXR1cm57YTpUfX0oKTtyZXR1cm4gbmV3IFByb21pc2UoKGEscik9Pnt0Lmluc3RhbnRpYXRlV2FzbShlLChlLHQpPT57YShyZWNlaXZlSW5zdGFuY2UoZSkpfSl9KX0oKTshZnVuY3Rpb24gcnVuKCl7IWZ1bmN0aW9uIHByZVJ1bigpe2lmKHQucHJlUnVuKXsiZnVuY3Rpb24iPT10eXBlb2YgdC5wcmVSdW4mJih0LnByZVJ1bj1bdC5wcmVSdW5dKTtmb3IoO3QucHJlUnVuLmxlbmd0aDspYWRkT25QcmVSdW4odC5wcmVSdW4uc2hpZnQoKSl9Y2FsbFJ1bnRpbWVDYWxsYmFja3MoeSl9KCk7ZnVuY3Rpb24gZG9SdW4oKXt0LmNhbGxlZFJ1bj0hMDtpZighZyl7IWZ1bmN0aW9uIGluaXRSdW50aW1lKCl7cD0hMDtGLnMoKX0oKTtuPy4odCk7dC5vblJ1bnRpbWVJbml0aWFsaXplZD8uKCk7IWZ1bmN0aW9uIHBvc3RSdW4oKXtpZih0LnBvc3RSdW4peyJmdW5jdGlvbiI9PXR5cGVvZiB0LnBvc3RSdW4mJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO2Zvcig7dC5wb3N0UnVuLmxlbmd0aDspYWRkT25Qb3N0UnVuKHQucG9zdFJ1bi5zaGlmdCgpKX1jYWxsUnVudGltZUNhbGxiYWNrcyhiKX0oKX19aWYodC5zZXRTdGF0dXMpe3Quc2V0U3RhdHVzKCJSdW5uaW5nLi4uIik7c2V0VGltZW91dCgoKT0+e3NldFRpbWVvdXQoKCk9PnQuc2V0U3RhdHVzKCIiKSwxKTtkb1J1bigpfSwxKX1lbHNlIGRvUnVuKCl9KCk7cmV0dXJuIHA/dDpuZXcgUHJvbWlzZSgoZSx0KT0+e249ZTtzPXR9KX07Y2xhc3MgSnB4RXJyb3IgZXh0ZW5kcyBlYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJKcHhFcnJvciIpfX1jbGFzcyBKcHhJbWFnZXtzdGF0aWMjRT1udWxsO3N0YXRpYyNQPW51bGw7c3RhdGljI0w9bnVsbDtzdGF0aWMjdj0hMDtzdGF0aWMjXz0hMDtzdGF0aWMjRj1udWxsO3N0YXRpYyBzZXRPcHRpb25zKHtoYW5kbGVyOmUsdXNlV2FzbTp0LHVzZVdvcmtlckZldGNoOmEsd2FzbVVybDpyfSl7dGhpcy4jdj10O3RoaXMuI189YTt0aGlzLiNGPXI7YXx8KHRoaXMuI1A9ZSl9c3RhdGljIGFzeW5jI1UoZSl7Y29uc3QgdD1gJHt0aGlzLiNGfW9wZW5qcGVnX25vd2FzbV9mYWxsYmFjay5qc2A7bGV0IGE9bnVsbDt0cnl7YT0oYXdhaXQgaW1wb3J0KAovKndlYnBhY2tJZ25vcmU6IHRydWUqLwovKkB2aXRlLWlnbm9yZSovCnQpKS5kZWZhdWx0KCl9Y2F0Y2goZSl7d2FybihgSnB4SW1hZ2UjZ2V0SnNNb2R1bGU6ICR7ZX1gKX1lKGEpfXN0YXRpYyBhc3luYyNqKGUsdCxhKXtjb25zdCByPSJvcGVuanBlZy53YXNtIjt0cnl7dGhpcy4jRXx8KHRoaXMuI18/dGhpcy4jRT1hd2FpdCBmZXRjaEJpbmFyeURhdGEoYCR7dGhpcy4jRn0ke3J9YCk6dGhpcy4jRT1hd2FpdCB0aGlzLiNQLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCaW5hcnlEYXRhIix7dHlwZToid2FzbUZhY3RvcnkiLGZpbGVuYW1lOnJ9KSk7cmV0dXJuIGEoKGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHRoaXMuI0UsdCkpLmluc3RhbmNlKX1jYXRjaCh0KXt3YXJuKGBKcHhJbWFnZSNpbnN0YW50aWF0ZVdhc206ICR7dH1gKTt0aGlzLiNVKGUpO3JldHVybiBudWxsfWZpbmFsbHl7dGhpcy4jUD1udWxsfX1zdGF0aWMgYXN5bmMgZGVjb2RlKGUse251bUNvbXBvbmVudHM6dD00LGlzSW5kZXhlZENvbG9ybWFwOmE9ITEsc21hc2tJbkRhdGE6cj0hMSxyZWR1Y2VQb3dlcjppPTB9PXt9KXtpZighdGhpcy4jTCl7Y29uc3R7cHJvbWlzZTplLHJlc29sdmU6dH09UHJvbWlzZS53aXRoUmVzb2x2ZXJzKCksYT1bZV07dGhpcy4jdj9hLnB1c2goTmEoe3dhcm4saW5zdGFudGlhdGVXYXNtOnRoaXMuI2ouYmluZCh0aGlzLHQpfSkpOnRoaXMuI1UodCk7dGhpcy4jTD1Qcm9taXNlLnJhY2UoYSl9Y29uc3Qgbj1hd2FpdCB0aGlzLiNMO2lmKCFuKXRocm93IG5ldyBKcHhFcnJvcigiT3BlbkpQRUcgZmFpbGVkIHRvIGluaXRpYWxpemUiKTtsZXQgczt0cnl7Y29uc3Qgbz1lLmxlbmd0aDtzPW4uX21hbGxvYyhvKTtuLndyaXRlQXJyYXlUb01lbW9yeShlLHMpO2lmKG4uX2pwMl9kZWNvZGUocyxvLHQ+MD90OjAsISFhLCEhcixpKSl7Y29uc3R7ZXJyb3JNZXNzYWdlczplfT1uO2lmKGUpe2RlbGV0ZSBuLmVycm9yTWVzc2FnZXM7dGhyb3cgbmV3IEpweEVycm9yKGUpfXRocm93IG5ldyBKcHhFcnJvcigiVW5rbm93biBlcnJvciIpfWNvbnN0e2ltYWdlRGF0YTpjfT1uO24uaW1hZ2VEYXRhPW51bGw7cmV0dXJuIGN9ZmluYWxseXtzJiZuLl9mcmVlKHMpfX1zdGF0aWMgY2xlYW51cCgpe3RoaXMuI0w9bnVsbH1zdGF0aWMgcGFyc2VJbWFnZVByb3BlcnRpZXMoZSl7bGV0IHQ9ZS5nZXRCeXRlKCk7Zm9yKDt0Pj0wOyl7Y29uc3QgYT10O3Q9ZS5nZXRCeXRlKCk7aWYoNjUzNjE9PT0oYTw8OHx0KSl7ZS5za2lwKDQpO2NvbnN0IHQ9ZS5nZXRJbnQzMigpPj4+MCxhPWUuZ2V0SW50MzIoKT4+PjAscj1lLmdldEludDMyKCk+Pj4wLGk9ZS5nZXRJbnQzMigpPj4+MDtlLnNraXAoMTYpO3JldHVybnt3aWR0aDp0LXIsaGVpZ2h0OmEtaSxiaXRzUGVyQ29tcG9uZW50OjgsY29tcG9uZW50c0NvdW50OmUuZ2V0VWludDE2KCl9fX10aHJvdyBuZXcgSnB4RXJyb3IoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX19ZnVuY3Rpb24gYWRkU3RhdGUoZSx0LGEscixpKXtsZXQgbj1lO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGgtMTtlPGE7ZSsrKXtjb25zdCBhPXRbZV07bj1uW2FdfHw9W119blt0LmF0KC0xKV09e2NoZWNrRm46YSxpdGVyYXRlRm46cixwcm9jZXNzRm46aX19Y29uc3QgRWE9W107YWRkU3RhdGUoRWEsW3llLHhlLEx0LHdlXSxudWxsLGZ1bmN0aW9uIGl0ZXJhdGVJbmxpbmVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXkscj0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiBhW3RdPT09eWU7Y2FzZSAxOnJldHVybiBhW3RdPT09eGU7Y2FzZSAyOnJldHVybiBhW3RdPT09THQ7Y2FzZSAzOnJldHVybiBhW3RdPT09d2V9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke3J9YCl9LGZ1bmN0aW9uIGZvdW5kSW5saW5lSW1hZ2VHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LHI9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG49aS0zLHM9aS0yLG89aS0xLGM9TWF0aC5taW4oTWF0aC5mbG9vcigodC1uKS80KSwyMDApO2lmKGM8MTApcmV0dXJuIHQtKHQtbiklNDtsZXQgbD0wO2NvbnN0IGg9W107bGV0IHU9MCxkPTEsZj0xO2ZvcihsZXQgZT0wO2U8YztlKyspe2NvbnN0IHQ9cltzKyhlPDwyKV0sYT1yW28rKGU8PDIpXVswXTtpZihkK2Eud2lkdGg+MWUzKXtsPU1hdGgubWF4KGwsZCk7Zis9dSsyO2Q9MDt1PTB9aC5wdXNoKHt0cmFuc2Zvcm06dCx4OmQseTpmLHc6YS53aWR0aCxoOmEuaGVpZ2h0fSk7ZCs9YS53aWR0aCsyO3U9TWF0aC5tYXgodSxhLmhlaWdodCl9Y29uc3QgZz1NYXRoLm1heChsLGQpKzEscD1mK3UrMSxtPW5ldyBVaW50OEFycmF5KGcqcCo0KSxiPWc8PDI7Zm9yKGxldCBlPTA7ZTxjO2UrKyl7Y29uc3QgdD1yW28rKGU8PDIpXVswXS5kYXRhLGE9aFtlXS53PDwyO2xldCBpPTAsbj1oW2VdLngraFtlXS55Kmc8PDI7bS5zZXQodC5zdWJhcnJheSgwLGEpLG4tYik7Zm9yKGxldCByPTAscz1oW2VdLmg7cjxzO3IrKyl7bS5zZXQodC5zdWJhcnJheShpLGkrYSksbik7aSs9YTtuKz1ifW0uc2V0KHQuc3ViYXJyYXkoaS1hLGkpLG4pO2Zvcig7bj49MDspe3Rbbi00XT10W25dO3Rbbi0zXT10W24rMV07dFtuLTJdPXRbbisyXTt0W24tMV09dFtuKzNdO3RbbithXT10W24rYS00XTt0W24rYSsxXT10W24rYS0zXTt0W24rYSsyXT10W24rYS0yXTt0W24rYSszXT10W24rYS0xXTtuLT1ifX1jb25zdCB5PXt3aWR0aDpnLGhlaWdodDpwfTtpZihlLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoZyxwKTtlLmdldENvbnRleHQoIjJkIikucHV0SW1hZ2VEYXRhKG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KG0uYnVmZmVyKSxnLHApLDAsMCk7eS5iaXRtYXA9ZS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTt5LmRhdGE9bnVsbH1lbHNle3kua2luZD1PO3kuZGF0YT1tfWEuc3BsaWNlKG4sNCpjLF90KTtyLnNwbGljZShuLDQqYyxbeSxoXSk7cmV0dXJuIG4rMX0pO2FkZFN0YXRlKEVhLFt5ZSx4ZSxOdCx3ZV0sbnVsbCxmdW5jdGlvbiBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAoZSx0KXtjb25zdCBhPWUuZm5BcnJheSxyPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIGFbdF09PT15ZTtjYXNlIDE6cmV0dXJuIGFbdF09PT14ZTtjYXNlIDI6cmV0dXJuIGFbdF09PT1OdDtjYXNlIDM6cmV0dXJuIGFbdF09PT13ZX10aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVJbWFnZU1hc2tHcm91cCAtIGludmFsaWQgcG9zOiAke3J9YCl9LGZ1bmN0aW9uIGZvdW5kSW1hZ2VNYXNrR3JvdXAoZSx0KXtjb25zdCBhPWUuZm5BcnJheSxyPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixuPWktMyxzPWktMixvPWktMTtsZXQgYz1NYXRoLmZsb29yKCh0LW4pLzQpO2lmKGM8MTApcmV0dXJuIHQtKHQtbiklNDtsZXQgbCxoLHU9ITE7Y29uc3QgZD1yW29dWzBdLGY9cltzXVswXSxnPXJbc11bMV0scD1yW3NdWzJdLG09cltzXVszXTtpZihnPT09cCl7dT0hMDtsPXMrNDtsZXQgZT1vKzQ7Zm9yKGxldCB0PTE7dDxjO3QrKyxsKz00LGUrPTQpe2g9cltsXTtpZihyW2VdWzBdIT09ZHx8aFswXSE9PWZ8fGhbMV0hPT1nfHxoWzJdIT09cHx8aFszXSE9PW0pe3Q8MTA/dT0hMTpjPXQ7YnJlYWt9fX1pZih1KXtjPU1hdGgubWluKGMsMWUzKTtjb25zdCBlPW5ldyBGbG9hdDMyQXJyYXkoMipjKTtsPXM7Zm9yKGxldCB0PTA7dDxjO3QrKyxsKz00KXtoPXJbbF07ZVt0PDwxXT1oWzRdO2VbMSsodDw8MSldPWhbNV19YS5zcGxpY2Uobiw0KmMsanQpO3Iuc3BsaWNlKG4sNCpjLFtkLGYsZyxwLG0sZV0pfWVsc2V7Yz1NYXRoLm1pbihjLDEwMCk7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MDt0PGM7dCsrKXtoPXJbcysodDw8MildO2NvbnN0IGE9cltvKyh0PDwyKV1bMF07ZS5wdXNoKHtkYXRhOmEuZGF0YSx3aWR0aDphLndpZHRoLGhlaWdodDphLmhlaWdodCxpbnRlcnBvbGF0ZTphLmludGVycG9sYXRlLGNvdW50OmEuY291bnQsdHJhbnNmb3JtOmh9KX1hLnNwbGljZShuLDQqYyxFdCk7ci5zcGxpY2Uobiw0KmMsW2VdKX1yZXR1cm4gbisxfSk7YWRkU3RhdGUoRWEsW3llLHhlLFB0LHdlXSxmdW5jdGlvbihlKXtjb25zdCB0PWUuYXJnc0FycmF5LGE9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFthXVsxXSYmMD09PXRbYV1bMl19LGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXkscj1lLmFyZ3NBcnJheSxpPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIGFbdF09PT15ZTtjYXNlIDE6aWYoYVt0XSE9PXhlKXJldHVybiExO2NvbnN0IGk9ZS5pQ3Vyci0yLG49cltpXVswXSxzPXJbaV1bM107cmV0dXJuIHJbdF1bMF09PT1uJiYwPT09clt0XVsxXSYmMD09PXJbdF1bMl0mJnJbdF1bM109PT1zO2Nhc2UgMjppZihhW3RdIT09UHQpcmV0dXJuITE7Y29uc3Qgbz1yW2UuaUN1cnItMV1bMF07cmV0dXJuIHJbdF1bMF09PT1vO2Nhc2UgMzpyZXR1cm4gYVt0XT09PXdlfXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZUltYWdlR3JvdXAgLSBpbnZhbGlkIHBvczogJHtpfWApfSxmdW5jdGlvbihlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LHI9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG49aS0zLHM9aS0yLG89cltpLTFdWzBdLGM9cltzXVswXSxsPXJbc11bM10saD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LW4pLzQpLDFlMyk7aWYoaDwzKXJldHVybiB0LSh0LW4pJTQ7Y29uc3QgdT1uZXcgRmxvYXQzMkFycmF5KDIqaCk7bGV0IGQ9cztmb3IobGV0IGU9MDtlPGg7ZSsrLGQrPTQpe2NvbnN0IHQ9cltkXTt1W2U8PDFdPXRbNF07dVsxKyhlPDwxKV09dFs1XX1jb25zdCBmPVtvLGMsbCx1XTthLnNwbGljZShuLDQqaCxVdCk7ci5zcGxpY2Uobiw0KmgsZik7cmV0dXJuIG4rMX0pO2FkZFN0YXRlKEVhLFtVZSxHZSxKZSxaZSxqZV0sbnVsbCxmdW5jdGlvbiBpdGVyYXRlU2hvd1RleHRHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LHI9ZS5hcmdzQXJyYXksaT0odC0oZS5pQ3Vyci00KSklNTtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhW3RdPT09VWU7Y2FzZSAxOnJldHVybiBhW3RdPT09R2U7Y2FzZSAyOnJldHVybiBhW3RdPT09SmU7Y2FzZSAzOmlmKGFbdF0hPT1aZSlyZXR1cm4hMTtjb25zdCBpPWUuaUN1cnItMyxuPXJbaV1bMF0scz1yW2ldWzFdO3JldHVybiByW3RdWzBdPT09biYmclt0XVsxXT09PXM7Y2FzZSA0OnJldHVybiBhW3RdPT09amV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAke2l9YCl9LGZ1bmN0aW9uKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXkscj1lLmFyZ3NBcnJheSxpPWUuaUN1cnIsbj1pLTQscz1pLTMsbz1pLTIsYz1pLTEsbD1pLGg9cltzXVswXSx1PXJbc11bMV07bGV0IGQ9TWF0aC5taW4oTWF0aC5mbG9vcigodC1uKS81KSwxZTMpO2lmKGQ8MylyZXR1cm4gdC0odC1uKSU1O2xldCBmPW47aWYobj49NCYmYVtuLTRdPT09YVtzXSYmYVtuLTNdPT09YVtvXSYmYVtuLTJdPT09YVtjXSYmYVtuLTFdPT09YVtsXSYmcltuLTRdWzBdPT09aCYmcltuLTRdWzFdPT09dSl7ZCsrO2YtPTV9bGV0IGc9Zis0O2ZvcihsZXQgZT0xO2U8ZDtlKyspe2Euc3BsaWNlKGcsMyk7ci5zcGxpY2UoZywzKTtnKz0yfXJldHVybiBnKzF9KTthZGRTdGF0ZShFYSxbeWUseGUscXQsd2VdLGU9Pntjb25zdCB0PWUuYXJnc0FycmF5LGE9dFtlLmlDdXJyLTFdWzBdO2lmKGEhPT1UZSYmYSE9PU9lJiZhIT09QmUmJmEhPT1SZSYmYSE9PU5lJiZhIT09RWUpcmV0dXJuITA7Y29uc3Qgcj10W2UuaUN1cnItMl07cmV0dXJuIDE9PT1yWzBdJiYwPT09clsxXSYmMD09PXJbMl0mJjE9PT1yWzNdfSwoKT0+ITEsKGUsdCk9Pntjb25zdHtmbkFycmF5OmEsYXJnc0FycmF5OnJ9PWUsaT1lLmlDdXJyLG49aS0zLHM9aS0yLG89cltpLTFdLGM9cltzXSxbLFtsXSxoXT1vO2lmKGgpe1V0aWwuc2NhbGVNaW5NYXgoYyxoKTtmb3IobGV0IGU9MCx0PWwubGVuZ3RoO2U8dDspc3dpdGNoKGxbZSsrXSl7Y2FzZSB6dDpjYXNlICR0OlV0aWwuYXBwbHlUcmFuc2Zvcm0obCxjLGUpO2UrPTI7YnJlYWs7Y2FzZSBWdDpVdGlsLmFwcGx5VHJhbnNmb3JtVG9CZXppZXIobCxjLGUpO2UrPTZ9fWEuc3BsaWNlKG4sNCxxdCk7ci5zcGxpY2Uobiw0LG8pO3JldHVybiBuKzF9KTtjbGFzcyBOdWxsT3B0aW1pemVye2NvbnN0cnVjdG9yKGUpe3RoaXMucXVldWU9ZX1fb3B0aW1pemUoKXt9cHVzaChlLHQpe3RoaXMucXVldWUuZm5BcnJheS5wdXNoKGUpO3RoaXMucXVldWUuYXJnc0FycmF5LnB1c2godCk7dGhpcy5fb3B0aW1pemUoKX1mbHVzaCgpe31yZXNldCgpe319Y2xhc3MgUXVldWVPcHRpbWl6ZXIgZXh0ZW5kcyBOdWxsT3B0aW1pemVye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuc3RhdGU9bnVsbDt0aGlzLmNvbnRleHQ9e2lDdXJyOjAsZm5BcnJheTplLmZuQXJyYXksYXJnc0FycmF5OmUuYXJnc0FycmF5LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOk9wZXJhdG9yTGlzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZH07dGhpcy5tYXRjaD1udWxsO3RoaXMubGFzdFByb2Nlc3NlZD0wfV9vcHRpbWl6ZSgpe2NvbnN0IGU9dGhpcy5xdWV1ZS5mbkFycmF5O2xldCB0PXRoaXMubGFzdFByb2Nlc3NlZCxhPWUubGVuZ3RoLHI9dGhpcy5zdGF0ZSxpPXRoaXMubWF0Y2g7aWYoIXImJiFpJiZ0KzE9PT1hJiYhRWFbZVt0XV0pe3RoaXMubGFzdFByb2Nlc3NlZD1hO3JldHVybn1jb25zdCBuPXRoaXMuY29udGV4dDtmb3IoO3Q8YTspe2lmKGkpe2lmKCgwLGkuaXRlcmF0ZUZuKShuLHQpKXt0Kys7Y29udGludWV9dD0oMCxpLnByb2Nlc3NGbikobix0KzEpO2E9ZS5sZW5ndGg7aT1udWxsO3I9bnVsbDtpZih0Pj1hKWJyZWFrfXI9KHJ8fEVhKVtlW3RdXTtpZihyJiYhQXJyYXkuaXNBcnJheShyKSl7bi5pQ3Vycj10O3QrKztpZighci5jaGVja0ZufHwoMCxyLmNoZWNrRm4pKG4pKXtpPXI7cj1udWxsfWVsc2Ugcj1udWxsfWVsc2UgdCsrfXRoaXMuc3RhdGU9cjt0aGlzLm1hdGNoPWk7dGhpcy5sYXN0UHJvY2Vzc2VkPXR9Zmx1c2goKXtmb3IoO3RoaXMubWF0Y2g7KXtjb25zdCBlPXRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7dGhpcy5sYXN0UHJvY2Vzc2VkPSgwLHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsZSk7dGhpcy5tYXRjaD1udWxsO3RoaXMuc3RhdGU9bnVsbDt0aGlzLl9vcHRpbWl6ZSgpfX1yZXNldCgpe3RoaXMuc3RhdGU9bnVsbDt0aGlzLm1hdGNoPW51bGw7dGhpcy5sYXN0UHJvY2Vzc2VkPTB9fWNsYXNzIE9wZXJhdG9yTGlzdHtzdGF0aWMgQ0hVTktfU0laRT0xZTM7c3RhdGljIENIVU5LX1NJWkVfQUJPVVQ9dGhpcy5DSFVOS19TSVpFLTU7c3RhdGljIGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPSExO2NvbnN0cnVjdG9yKGU9MCx0KXt0aGlzLl9zdHJlYW1TaW5rPXQ7dGhpcy5mbkFycmF5PVtdO3RoaXMuYXJnc0FycmF5PVtdO3RoaXMub3B0aW1pemVyPSF0fHxlJmQ/bmV3IE51bGxPcHRpbWl6ZXIodGhpcyk6bmV3IFF1ZXVlT3B0aW1pemVyKHRoaXMpO3RoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQ7dGhpcy5fdG90YWxMZW5ndGg9MDt0aGlzLndlaWdodD0wO3RoaXMuX3Jlc29sdmVkPXQ/bnVsbDpQcm9taXNlLnJlc29sdmUoKX1zdGF0aWMgc2V0T3B0aW9ucyh7aXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ZX0pe3RoaXMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuYXJnc0FycmF5Lmxlbmd0aH1nZXQgcmVhZHkoKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZWR8fHRoaXMuX3N0cmVhbVNpbmsucmVhZHl9Z2V0IHRvdGFsTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX3RvdGFsTGVuZ3RoK3RoaXMubGVuZ3RofWFkZE9wKGUsdCl7dGhpcy5vcHRpbWl6ZXIucHVzaChlLHQpO3RoaXMud2VpZ2h0Kys7dGhpcy5fc3RyZWFtU2luayYmKHRoaXMud2VpZ2h0Pj1PcGVyYXRvckxpc3QuQ0hVTktfU0laRXx8dGhpcy53ZWlnaHQ+PU9wZXJhdG9yTGlzdC5DSFVOS19TSVpFX0FCT1VUJiYoZT09PXdlfHxlPT09amUpKSYmdGhpcy5mbHVzaCgpfWFkZEltYWdlT3BzKGUsdCxhLHI9ITEpe2lmKHIpe3RoaXMuYWRkT3AoeWUpO3RoaXMuYWRkT3AoYmUsW1tbIlNNYXNrIiwhMV1dXSl9dm9pZCAwIT09YSYmdGhpcy5hZGRPcChDdCxbIk9DIixhXSk7dGhpcy5hZGRPcChlLHQpO3ZvaWQgMCE9PWEmJnRoaXMuYWRkT3AodnQsW10pO3ImJnRoaXMuYWRkT3Aod2UpfWFkZERlcGVuZGVuY3koZSl7aWYoIXRoaXMuZGVwZW5kZW5jaWVzLmhhcyhlKSl7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKGUpO3RoaXMuYWRkT3AobGUsW2VdKX19YWRkRGVwZW5kZW5jaWVzKGUpe2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hZGREZXBlbmRlbmN5KHQpfWFkZE9wTGlzdChlKXtpZihlIGluc3RhbmNlb2YgT3BlcmF0b3JMaXN0KXtmb3IoY29uc3QgdCBvZiBlLmRlcGVuZGVuY2llcyl0aGlzLmRlcGVuZGVuY2llcy5hZGQodCk7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCsrKXRoaXMuYWRkT3AoZS5mbkFycmF5W3RdLGUuYXJnc0FycmF5W3RdKX1lbHNlIHdhcm4oJ2FkZE9wTGlzdCAtIGlnbm9yaW5nIGludmFsaWQgIm9wTGlzdCIgcGFyYW1ldGVyLicpfWdldElSKCl7cmV0dXJue2ZuQXJyYXk6dGhpcy5mbkFycmF5LGFyZ3NBcnJheTp0aGlzLmFyZ3NBcnJheSxsZW5ndGg6dGhpcy5sZW5ndGh9fWdldCBfdHJhbnNmZXJzKCl7Y29uc3QgZT1bXSx7Zm5BcnJheTp0LGFyZ3NBcnJheTphLGxlbmd0aDpyfT10aGlzO2ZvcihsZXQgaT0wO2k8cjtpKyspc3dpdGNoKHRbaV0pe2Nhc2UgTHQ6Y2FzZSBfdDpjYXNlIE50Ontjb25zdHtiaXRtYXA6dCxkYXRhOnJ9PWFbaV1bMF07KHR8fHI/LmJ1ZmZlcikmJmUucHVzaCh0fHxyLmJ1ZmZlcik7YnJlYWt9Y2FzZSBxdDp7Y29uc3RbLFt0XSxyXT1hW2ldO3QmJmUucHVzaCh0LmJ1ZmZlcixyLmJ1ZmZlcik7YnJlYWt9Y2FzZSBUdDpjb25zdFt0LHJdPWFbaV07dCYmZS5wdXNoKHQuYnVmZmVyKTtyJiZlLnB1c2goci5idWZmZXIpO2JyZWFrO2Nhc2UgSmU6ZS5wdXNoKGFbaV1bMF0uYnVmZmVyKX1yZXR1cm4gZX1mbHVzaChlPSExLHQ9bnVsbCl7dGhpcy5vcHRpbWl6ZXIuZmx1c2goKTtjb25zdCBhPXRoaXMubGVuZ3RoO3RoaXMuX3RvdGFsTGVuZ3RoKz1hO3RoaXMuX3N0cmVhbVNpbmsuZW5xdWV1ZSh7Zm5BcnJheTp0aGlzLmZuQXJyYXksYXJnc0FycmF5OnRoaXMuYXJnc0FycmF5LGxhc3RDaHVuazplLHNlcGFyYXRlQW5ub3RzOnQsbGVuZ3RoOmF9LDEsdGhpcy5fdHJhbnNmZXJzKTt0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpO3RoaXMuZm5BcnJheS5sZW5ndGg9MDt0aGlzLmFyZ3NBcnJheS5sZW5ndGg9MDt0aGlzLndlaWdodD0wO3RoaXMub3B0aW1pemVyLnJlc2V0KCl9fWZ1bmN0aW9uIGhleFRvSW50KGUsdCl7bGV0IGE9MDtmb3IobGV0IHI9MDtyPD10O3IrKylhPWE8PDh8ZVtyXTtyZXR1cm4gYT4+PjB9ZnVuY3Rpb24gaGV4VG9TdHIoZSx0KXtyZXR1cm4gMT09PXQ/U3RyaW5nLmZyb21DaGFyQ29kZShlWzBdLGVbMV0pOjM9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdLGVbMl0sZVszXSk6U3RyaW5nLmZyb21DaGFyQ29kZSguLi5lLnN1YmFycmF5KDAsdCsxKSl9ZnVuY3Rpb24gYWRkSGV4KGUsdCxhKXtsZXQgcj0wO2ZvcihsZXQgaT1hO2k+PTA7aS0tKXtyKz1lW2ldK3RbaV07ZVtpXT0yNTUmcjtyPj49OH19ZnVuY3Rpb24gaW5jSGV4KGUsdCl7bGV0IGE9MTtmb3IobGV0IHI9dDtyPj0wJiZhPjA7ci0tKXthKz1lW3JdO2Vbcl09MjU1JmE7YT4+PTh9fWNvbnN0IFBhPTE2O2NsYXNzIEJpbmFyeUNNYXBTdHJlYW17Y29uc3RydWN0b3IoZSl7dGhpcy5idWZmZXI9ZTt0aGlzLnBvcz0wO3RoaXMuZW5kPWUubGVuZ3RoO3RoaXMudG1wQnVmPW5ldyBVaW50OEFycmF5KDE5KX1yZWFkQnl0ZSgpe3JldHVybiB0aGlzLnBvcz49dGhpcy5lbmQ/LTE6dGhpcy5idWZmZXJbdGhpcy5wb3MrK119cmVhZE51bWJlcigpe2xldCBlLHQ9MDtkb3tjb25zdCBhPXRoaXMucmVhZEJ5dGUoKTtpZihhPDApdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO2U9ISgxMjgmYSk7dD10PDw3fDEyNyZhfXdoaWxlKCFlKTtyZXR1cm4gdH1yZWFkU2lnbmVkKCl7Y29uc3QgZT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gMSZlP34oZT4+PjEpOmU+Pj4xfXJlYWRIZXgoZSx0KXtlLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyx0aGlzLnBvcyt0KzEpKTt0aGlzLnBvcys9dCsxfXJlYWRIZXhOdW1iZXIoZSx0KXtsZXQgYTtjb25zdCByPXRoaXMudG1wQnVmO2xldCBpPTA7ZG97Y29uc3QgZT10aGlzLnJlYWRCeXRlKCk7aWYoZTwwKXRocm93IG5ldyBGb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTthPSEoMTI4JmUpO3JbaSsrXT0xMjcmZX13aGlsZSghYSk7bGV0IG49dCxzPTAsbz0wO2Zvcig7bj49MDspe2Zvcig7bzw4JiZyLmxlbmd0aD4wOyl7c3w9clstLWldPDxvO28rPTd9ZVtuXT0yNTUmcztuLS07cz4+PTg7by09OH19cmVhZEhleFNpZ25lZChlLHQpe3RoaXMucmVhZEhleE51bWJlcihlLHQpO2NvbnN0IGE9MSZlW3RdPzI1NTowO2xldCByPTA7Zm9yKGxldCBpPTA7aTw9dDtpKyspe3I9KDEmcik8PDh8ZVtpXTtlW2ldPXI+PjFeYX19cmVhZFN0cmluZygpe2NvbnN0IGU9dGhpcy5yZWFkTnVtYmVyKCksdD1uZXcgQXJyYXkoZSk7Zm9yKGxldCBhPTA7YTxlO2ErKyl0W2FdPXRoaXMucmVhZE51bWJlcigpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLnQpfX1jbGFzcyBCaW5hcnlDTWFwUmVhZGVye2FzeW5jIHByb2Nlc3MoZSx0LGEpe2NvbnN0IHI9bmV3IEJpbmFyeUNNYXBTdHJlYW0oZSksaT1yLnJlYWRCeXRlKCk7dC52ZXJ0aWNhbD0hISgxJmkpO2xldCBuPW51bGw7Y29uc3Qgcz1uZXcgVWludDhBcnJheShQYSksbz1uZXcgVWludDhBcnJheShQYSksYz1uZXcgVWludDhBcnJheShQYSksbD1uZXcgVWludDhBcnJheShQYSksaD1uZXcgVWludDhBcnJheShQYSk7bGV0IHUsZDtmb3IoOyhkPXIucmVhZEJ5dGUoKSk+PTA7KXtjb25zdCBlPWQ+PjU7aWYoNz09PWUpe3N3aXRjaCgzMSZkKXtjYXNlIDA6ci5yZWFkU3RyaW5nKCk7YnJlYWs7Y2FzZSAxOm49ci5yZWFkU3RyaW5nKCl9Y29udGludWV9Y29uc3QgYT0hISgxNiZkKSxpPTE1JmQ7aWYoaSsxPlBhKXRocm93IG5ldyBFcnJvcigiQmluYXJ5Q01hcFJlYWRlci5wcm9jZXNzOiBJbnZhbGlkIGRhdGFTaXplLiIpO2NvbnN0IGY9MSxnPXIucmVhZE51bWJlcigpO3N3aXRjaChlKXtjYXNlIDA6ci5yZWFkSGV4KHMsaSk7ci5yZWFkSGV4TnVtYmVyKG8saSk7YWRkSGV4KG8scyxpKTt0LmFkZENvZGVzcGFjZVJhbmdlKGkrMSxoZXhUb0ludChzLGkpLGhleFRvSW50KG8saSkpO2ZvcihsZXQgZT0xO2U8ZztlKyspe2luY0hleChvLGkpO3IucmVhZEhleE51bWJlcihzLGkpO2FkZEhleChzLG8saSk7ci5yZWFkSGV4TnVtYmVyKG8saSk7YWRkSGV4KG8scyxpKTt0LmFkZENvZGVzcGFjZVJhbmdlKGkrMSxoZXhUb0ludChzLGkpLGhleFRvSW50KG8saSkpfWJyZWFrO2Nhc2UgMTpyLnJlYWRIZXgocyxpKTtyLnJlYWRIZXhOdW1iZXIobyxpKTthZGRIZXgobyxzLGkpO3IucmVhZE51bWJlcigpO2ZvcihsZXQgZT0xO2U8ZztlKyspe2luY0hleChvLGkpO3IucmVhZEhleE51bWJlcihzLGkpO2FkZEhleChzLG8saSk7ci5yZWFkSGV4TnVtYmVyKG8saSk7YWRkSGV4KG8scyxpKTtyLnJlYWROdW1iZXIoKX1icmVhaztjYXNlIDI6ci5yZWFkSGV4KGMsaSk7dT1yLnJlYWROdW1iZXIoKTt0Lm1hcE9uZShoZXhUb0ludChjLGkpLHUpO2ZvcihsZXQgZT0xO2U8ZztlKyspe2luY0hleChjLGkpO2lmKCFhKXtyLnJlYWRIZXhOdW1iZXIoaCxpKTthZGRIZXgoYyxoLGkpfXU9ci5yZWFkU2lnbmVkKCkrKHUrMSk7dC5tYXBPbmUoaGV4VG9JbnQoYyxpKSx1KX1icmVhaztjYXNlIDM6ci5yZWFkSGV4KHMsaSk7ci5yZWFkSGV4TnVtYmVyKG8saSk7YWRkSGV4KG8scyxpKTt1PXIucmVhZE51bWJlcigpO3QubWFwQ2lkUmFuZ2UoaGV4VG9JbnQocyxpKSxoZXhUb0ludChvLGkpLHUpO2ZvcihsZXQgZT0xO2U8ZztlKyspe2luY0hleChvLGkpO2lmKGEpcy5zZXQobyk7ZWxzZXtyLnJlYWRIZXhOdW1iZXIocyxpKTthZGRIZXgocyxvLGkpfXIucmVhZEhleE51bWJlcihvLGkpO2FkZEhleChvLHMsaSk7dT1yLnJlYWROdW1iZXIoKTt0Lm1hcENpZFJhbmdlKGhleFRvSW50KHMsaSksaGV4VG9JbnQobyxpKSx1KX1icmVhaztjYXNlIDQ6ci5yZWFkSGV4KGMsZik7ci5yZWFkSGV4KGwsaSk7dC5tYXBPbmUoaGV4VG9JbnQoYyxmKSxoZXhUb1N0cihsLGkpKTtmb3IobGV0IGU9MTtlPGc7ZSsrKXtpbmNIZXgoYyxmKTtpZighYSl7ci5yZWFkSGV4TnVtYmVyKGgsZik7YWRkSGV4KGMsaCxmKX1pbmNIZXgobCxpKTtyLnJlYWRIZXhTaWduZWQoaCxpKTthZGRIZXgobCxoLGkpO3QubWFwT25lKGhleFRvSW50KGMsZiksaGV4VG9TdHIobCxpKSl9YnJlYWs7Y2FzZSA1OnIucmVhZEhleChzLGYpO3IucmVhZEhleE51bWJlcihvLGYpO2FkZEhleChvLHMsZik7ci5yZWFkSGV4KGwsaSk7dC5tYXBCZlJhbmdlKGhleFRvSW50KHMsZiksaGV4VG9JbnQobyxmKSxoZXhUb1N0cihsLGkpKTtmb3IobGV0IGU9MTtlPGc7ZSsrKXtpbmNIZXgobyxmKTtpZihhKXMuc2V0KG8pO2Vsc2V7ci5yZWFkSGV4TnVtYmVyKHMsZik7YWRkSGV4KHMsbyxmKX1yLnJlYWRIZXhOdW1iZXIobyxmKTthZGRIZXgobyxzLGYpO3IucmVhZEhleChsLGkpO3QubWFwQmZSYW5nZShoZXhUb0ludChzLGYpLGhleFRvSW50KG8sZiksaGV4VG9TdHIobCxpKSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEJpbmFyeUNNYXBSZWFkZXIucHJvY2VzcyAtIHVua25vd24gdHlwZTogJHtlfWApfX1yZXR1cm4gbj9hKG4pOnR9fWNsYXNzIEFzY2lpODVTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXt0JiYodCo9LjgpO3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmlucHV0PW5ldyBVaW50OEFycmF5KDUpfXJlYWRCbG9jaygpe2NvbnN0IGU9dGhpcy5zdHJlYW07bGV0IHQ9ZS5nZXRCeXRlKCk7Zm9yKDtpc1doaXRlU3BhY2UodCk7KXQ9ZS5nZXRCeXRlKCk7aWYoLTE9PT10fHwxMjY9PT10KXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgYT10aGlzLmJ1ZmZlckxlbmd0aDtsZXQgcixpO2lmKDEyMj09PXQpe3I9dGhpcy5lbnN1cmVCdWZmZXIoYSs0KTtmb3IoaT0wO2k8NDsrK2kpclthK2ldPTA7dGhpcy5idWZmZXJMZW5ndGgrPTR9ZWxzZXtjb25zdCBuPXRoaXMuaW5wdXQ7blswXT10O2ZvcihpPTE7aTw1OysraSl7dD1lLmdldEJ5dGUoKTtmb3IoO2lzV2hpdGVTcGFjZSh0KTspdD1lLmdldEJ5dGUoKTtuW2ldPXQ7aWYoLTE9PT10fHwxMjY9PT10KWJyZWFrfXI9dGhpcy5lbnN1cmVCdWZmZXIoYStpLTEpO3RoaXMuYnVmZmVyTGVuZ3RoKz1pLTE7aWYoaTw1KXtmb3IoO2k8NTsrK2kpbltpXT0xMTc7dGhpcy5lb2Y9ITB9bGV0IHM9MDtmb3IoaT0wO2k8NTsrK2kpcz04NSpzKyhuW2ldLTMzKTtmb3IoaT0zO2k+PTA7LS1pKXtyW2EraV09MjU1JnM7cz4+PTh9fX19Y2xhc3MgQXNjaWlIZXhTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXt0JiYodCo9LjUpO3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmZpcnN0RGlnaXQ9LTF9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlcyg4ZTMpO2lmKCFlLmxlbmd0aCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IHQ9ZS5sZW5ndGgrMT4+MSxhPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK3QpO2xldCByPXRoaXMuYnVmZmVyTGVuZ3RoLGk9dGhpcy5maXJzdERpZ2l0O2Zvcihjb25zdCB0IG9mIGUpe2xldCBlO2lmKHQ+PTQ4JiZ0PD01NyllPTE1JnQ7ZWxzZXtpZighKHQ+PTY1JiZ0PD03MHx8dD49OTcmJnQ8PTEwMikpe2lmKDYyPT09dCl7dGhpcy5lb2Y9ITA7YnJlYWt9Y29udGludWV9ZT05KygxNSZ0KX1pZihpPDApaT1lO2Vsc2V7YVtyKytdPWk8PDR8ZTtpPS0xfX1pZihpPj0wJiZ0aGlzLmVvZil7YVtyKytdPWk8PDQ7aT0tMX10aGlzLmZpcnN0RGlnaXQ9aTt0aGlzLmJ1ZmZlckxlbmd0aD1yfX1jb25zdCBMYT0tMSxfYT1bWy0xLC0xXSxbLTEsLTFdLFs3LDhdLFs3LDddLFs2LDZdLFs2LDZdLFs2LDVdLFs2LDVdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdXSxVYT1bWy0xLC0xXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjU2MF1dLGphPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs4LDI5XSxbOCwyOV0sWzgsMzBdLFs4LDMwXSxbOCw0NV0sWzgsNDVdLFs4LDQ2XSxbOCw0Nl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbOCw0N10sWzgsNDddLFs4LDQ4XSxbOCw0OF0sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzgsMzNdLFs4LDMzXSxbOCwzNF0sWzgsMzRdLFs4LDM1XSxbOCwzNV0sWzgsMzZdLFs4LDM2XSxbOCwzN10sWzgsMzddLFs4LDM4XSxbOCwzOF0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzcsMTldLFs4LDMxXSxbOCwzMV0sWzgsMzJdLFs4LDMyXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs4LDUzXSxbOCw1M10sWzgsNTRdLFs4LDU0XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzgsMzldLFs4LDM5XSxbOCw0MF0sWzgsNDBdLFs4LDQxXSxbOCw0MV0sWzgsNDJdLFs4LDQyXSxbOCw0M10sWzgsNDNdLFs4LDQ0XSxbOCw0NF0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbOCw2MV0sWzgsNjFdLFs4LDYyXSxbOCw2Ml0sWzgsNjNdLFs4LDYzXSxbOCwwXSxbOCwwXSxbOCwzMjBdLFs4LDMyMF0sWzgsMzg0XSxbOCwzODRdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzcsMjddLFs3LDI3XSxbNywyN10sWzcsMjddLFs4LDU5XSxbOCw1OV0sWzgsNjBdLFs4LDYwXSxbOSwxNDcyXSxbOSwxNTM2XSxbOSwxNjAwXSxbOSwxNzI4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs4LDQ5XSxbOCw0OV0sWzgsNTBdLFs4LDUwXSxbOCw1MV0sWzgsNTFdLFs4LDUyXSxbOCw1Ml0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs4LDU1XSxbOCw1NV0sWzgsNTZdLFs4LDU2XSxbOCw1N10sWzgsNTddLFs4LDU4XSxbOCw1OF0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs4LDQ0OF0sWzgsNDQ4XSxbOCw1MTJdLFs4LDUxMl0sWzksNzA0XSxbOSw3NjhdLFs4LDY0MF0sWzgsNjQwXSxbOCw1NzZdLFs4LDU3Nl0sWzksODMyXSxbOSw4OTZdLFs5LDk2MF0sWzksMTAyNF0sWzksMTA4OF0sWzksMTE1Ml0sWzksMTIxNl0sWzksMTI4MF0sWzksMTM0NF0sWzksMTQwOF0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddXSxYYT1bWy0xLC0xXSxbLTEsLTFdLFsxMiwtMl0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI0OTZdLFsxMiwyNTYwXSxbMTIsMjU2MF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMiw1Ml0sWzEyLDUyXSxbMTMsNjQwXSxbMTMsNzA0XSxbMTMsNzY4XSxbMTMsODMyXSxbMTIsNTVdLFsxMiw1NV0sWzEyLDU2XSxbMTIsNTZdLFsxMywxMjgwXSxbMTMsMTM0NF0sWzEzLDE0MDhdLFsxMywxNDcyXSxbMTIsNTldLFsxMiw1OV0sWzEyLDYwXSxbMTIsNjBdLFsxMywxNTM2XSxbMTMsMTYwMF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTEsMjVdLFsxMywxNjY0XSxbMTMsMTcyOF0sWzEyLDMyMF0sWzEyLDMyMF0sWzEyLDM4NF0sWzEyLDM4NF0sWzEyLDQ0OF0sWzEyLDQ0OF0sWzEzLDUxMl0sWzEzLDU3Nl0sWzEyLDUzXSxbMTIsNTNdLFsxMiw1NF0sWzEyLDU0XSxbMTMsODk2XSxbMTMsOTYwXSxbMTMsMTAyNF0sWzEzLDEwODhdLFsxMywxMTUyXSxbMTMsMTIxNl0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdXSxxYT1bWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFsxMSwyM10sWzExLDIzXSxbMTIsNTBdLFsxMiw1MV0sWzEyLDQ0XSxbMTIsNDVdLFsxMiw0Nl0sWzEyLDQ3XSxbMTIsNTddLFsxMiw1OF0sWzEyLDYxXSxbMTIsMjU2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEyLDQ4XSxbMTIsNDldLFsxMiw2Ml0sWzEyLDYzXSxbMTIsMzBdLFsxMiwzMV0sWzEyLDMyXSxbMTIsMzNdLFsxMiw0MF0sWzEyLDQxXSxbMTEsMjJdLFsxMSwyMl0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFsxMiwxMjhdLFsxMiwxOTJdLFsxMiwyNl0sWzEyLDI3XSxbMTIsMjhdLFsxMiwyOV0sWzExLDE5XSxbMTEsMTldLFsxMSwyMF0sWzExLDIwXSxbMTIsMzRdLFsxMiwzNV0sWzEyLDM2XSxbMTIsMzddLFsxMiwzOF0sWzEyLDM5XSxbMTEsMjFdLFsxMSwyMV0sWzEyLDQyXSxbMTIsNDNdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdXSxIYT1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbNiw5XSxbNiw4XSxbNSw3XSxbNSw3XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXV07Y2xhc3MgQ0NJVFRGYXhEZWNvZGVye2NvbnN0cnVjdG9yKGUsdD17fSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGU/Lm5leHQpdGhyb3cgbmV3IEVycm9yKCdDQ0lUVEZheERlY29kZXIgLSBpbnZhbGlkICJzb3VyY2UiIHBhcmFtZXRlci4nKTt0aGlzLnNvdXJjZT1lO3RoaXMuZW9mPSExO3RoaXMuZW5jb2Rpbmc9dC5LfHwwO3RoaXMuZW9saW5lPXQuRW5kT2ZMaW5lfHwhMTt0aGlzLmJ5dGVBbGlnbj10LkVuY29kZWRCeXRlQWxpZ258fCExO3RoaXMuY29sdW1ucz10LkNvbHVtbnN8fDE3Mjg7dGhpcy5yb3dzPXQuUm93c3x8MDt0aGlzLmVvYmxvY2s9dC5FbmRPZkJsb2NrPz8hMDt0aGlzLmJsYWNrPXQuQmxhY2tJczF8fCExO3RoaXMuY29kaW5nTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzEpO3RoaXMucmVmTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzIpO3RoaXMuY29kaW5nTGluZVswXT10aGlzLmNvbHVtbnM7dGhpcy5jb2RpbmdQb3M9MDt0aGlzLnJvdz0wO3RoaXMubmV4dExpbmUyRD10aGlzLmVuY29kaW5nPDA7dGhpcy5pbnB1dEJpdHM9MDt0aGlzLmlucHV0QnVmPTA7dGhpcy5vdXRwdXRCaXRzPTA7dGhpcy5yb3dzRG9uZT0hMTtsZXQgYTtmb3IoOzA9PT0oYT10aGlzLl9sb29rQml0cygxMikpOyl0aGlzLl9lYXRCaXRzKDEpOzE9PT1hJiZ0aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX19cmVhZE5leHRDaGFyKCl7aWYodGhpcy5lb2YpcmV0dXJuLTE7Y29uc3QgZT10aGlzLnJlZkxpbmUsdD10aGlzLmNvZGluZ0xpbmUsYT10aGlzLmNvbHVtbnM7bGV0IHIsaSxuLHMsbztpZigwPT09dGhpcy5vdXRwdXRCaXRzKXt0aGlzLnJvd3NEb25lJiYodGhpcy5lb2Y9ITApO2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMuZXJyPSExO2xldCBuLG8sYztpZih0aGlzLm5leHRMaW5lMkQpe2ZvcihzPTA7dFtzXTxhOysrcyllW3NdPXRbc107ZVtzKytdPWE7ZVtzXT1hO3RbMF09MDt0aGlzLmNvZGluZ1Bvcz0wO3I9MDtpPTA7Zm9yKDt0W3RoaXMuY29kaW5nUG9zXTxhOyl7bj10aGlzLl9nZXRUd29EaW1Db2RlKCk7c3dpdGNoKG4pe2Nhc2UgMDp0aGlzLl9hZGRQaXhlbHMoZVtyKzFdLGkpO2VbcisxXTxhJiYocis9Mik7YnJlYWs7Y2FzZSAxOm49bz0wO2lmKGkpe2Rve24rPWM9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoYz49NjQpO2Rve28rPWM9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoYz49NjQpfWVsc2V7ZG97bis9Yz10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShjPj02NCk7ZG97bys9Yz10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShjPj02NCl9dGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK24saSk7dFt0aGlzLmNvZGluZ1Bvc108YSYmdGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK28sMV5pKTtmb3IoO2Vbcl08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW3JdPGE7KXIrPTI7YnJlYWs7Y2FzZSA3OnRoaXMuX2FkZFBpeGVscyhlW3JdKzMsaSk7aV49MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXsrK3I7Zm9yKDtlW3JdPD10W3RoaXMuY29kaW5nUG9zXSYmZVtyXTxhOylyKz0yfWJyZWFrO2Nhc2UgNTp0aGlzLl9hZGRQaXhlbHMoZVtyXSsyLGkpO2lePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7KytyO2Zvcig7ZVtyXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbcl08YTspcis9Mn1icmVhaztjYXNlIDM6dGhpcy5fYWRkUGl4ZWxzKGVbcl0rMSxpKTtpXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysrcjtmb3IoO2Vbcl08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW3JdPGE7KXIrPTJ9YnJlYWs7Y2FzZSAyOnRoaXMuX2FkZFBpeGVscyhlW3JdLGkpO2lePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7KytyO2Zvcig7ZVtyXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbcl08YTspcis9Mn1icmVhaztjYXNlIDg6dGhpcy5fYWRkUGl4ZWxzTmVnKGVbcl0tMyxpKTtpXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpe3I+MD8tLXI6KytyO2Zvcig7ZVtyXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbcl08YTspcis9Mn1icmVhaztjYXNlIDY6dGhpcy5fYWRkUGl4ZWxzTmVnKGVbcl0tMixpKTtpXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpe3I+MD8tLXI6KytyO2Zvcig7ZVtyXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbcl08YTspcis9Mn1icmVhaztjYXNlIDQ6dGhpcy5fYWRkUGl4ZWxzTmVnKGVbcl0tMSxpKTtpXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpe3I+MD8tLXI6KytyO2Zvcig7ZVtyXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbcl08YTspcis9Mn1icmVhaztjYXNlIExhOnRoaXMuX2FkZFBpeGVscyhhLDApO3RoaXMuZW9mPSEwO2JyZWFrO2RlZmF1bHQ6aW5mbygiYmFkIDJkIGNvZGUiKTt0aGlzLl9hZGRQaXhlbHMoYSwwKTt0aGlzLmVycj0hMH19fWVsc2V7dFswXT0wO3RoaXMuY29kaW5nUG9zPTA7aT0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108YTspe249MDtpZihpKWRve24rPWM9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoYz49NjQpO2Vsc2UgZG97bis9Yz10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShjPj02NCk7dGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK24saSk7aV49MX19bGV0IGw9ITE7dGhpcy5ieXRlQWxpZ24mJih0aGlzLmlucHV0Qml0cyY9LTgpO2lmKHRoaXMuZW9ibG9ja3x8dGhpcy5yb3chPT10aGlzLnJvd3MtMSl7bj10aGlzLl9sb29rQml0cygxMik7aWYodGhpcy5lb2xpbmUpZm9yKDtuIT09TGEmJjEhPT1uOyl7dGhpcy5fZWF0Qml0cygxKTtuPXRoaXMuX2xvb2tCaXRzKDEyKX1lbHNlIGZvcig7MD09PW47KXt0aGlzLl9lYXRCaXRzKDEpO249dGhpcy5fbG9va0JpdHMoMTIpfWlmKDE9PT1uKXt0aGlzLl9lYXRCaXRzKDEyKTtsPSEwfWVsc2Ugbj09PUxhJiYodGhpcy5lb2Y9ITApfWVsc2UgdGhpcy5yb3dzRG9uZT0hMDtpZighdGhpcy5lb2YmJnRoaXMuZW5jb2Rpbmc+MCYmIXRoaXMucm93c0RvbmUpe3RoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX1pZih0aGlzLmVvYmxvY2smJmwmJnRoaXMuYnl0ZUFsaWduKXtuPXRoaXMuX2xvb2tCaXRzKDEyKTtpZigxPT09bil7dGhpcy5fZWF0Qml0cygxMik7aWYodGhpcy5lbmNvZGluZz4wKXt0aGlzLl9sb29rQml0cygxKTt0aGlzLl9lYXRCaXRzKDEpfWlmKHRoaXMuZW5jb2Rpbmc+PTApZm9yKHM9MDtzPDQ7KytzKXtuPXRoaXMuX2xvb2tCaXRzKDEyKTsxIT09biYmaW5mbygiYmFkIHJ0YyBjb2RlOiAiK24pO3RoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX19dGhpcy5lb2Y9ITB9fWVsc2UgaWYodGhpcy5lcnImJnRoaXMuZW9saW5lKXtmb3IoOzspe249dGhpcy5fbG9va0JpdHMoMTMpO2lmKG49PT1MYSl7dGhpcy5lb2Y9ITA7cmV0dXJuLTF9aWYobj4+MT09MSlicmVhazt0aGlzLl9lYXRCaXRzKDEpfXRoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fZWF0Qml0cygxKTt0aGlzLm5leHRMaW5lMkQ9ISgxJm4pfX10aGlzLm91dHB1dEJpdHM9dFswXT4wP3RbdGhpcy5jb2RpbmdQb3M9MF06dFt0aGlzLmNvZGluZ1Bvcz0xXTt0aGlzLnJvdysrfWlmKHRoaXMub3V0cHV0Qml0cz49OCl7bz0xJnRoaXMuY29kaW5nUG9zPzA6MjU1O3RoaXMub3V0cHV0Qml0cy09ODtpZigwPT09dGhpcy5vdXRwdXRCaXRzJiZ0W3RoaXMuY29kaW5nUG9zXTxhKXt0aGlzLmNvZGluZ1BvcysrO3RoaXMub3V0cHV0Qml0cz10W3RoaXMuY29kaW5nUG9zXS10W3RoaXMuY29kaW5nUG9zLTFdfX1lbHNle249ODtvPTA7ZG97aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLm91dHB1dEJpdHMpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTtpZih0aGlzLm91dHB1dEJpdHM+bil7bzw8PW47MSZ0aGlzLmNvZGluZ1Bvc3x8KG98PTI1NT4+OC1uKTt0aGlzLm91dHB1dEJpdHMtPW47bj0wfWVsc2V7bzw8PXRoaXMub3V0cHV0Qml0czsxJnRoaXMuY29kaW5nUG9zfHwob3w9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyk7bi09dGhpcy5vdXRwdXRCaXRzO3RoaXMub3V0cHV0Qml0cz0wO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpe3RoaXMuY29kaW5nUG9zKys7dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3NdLXRbdGhpcy5jb2RpbmdQb3MtMV19ZWxzZSBpZihuPjApe288PD1uO249MH19fXdoaWxlKG4pfXRoaXMuYmxhY2smJihvXj0yNTUpO3JldHVybiBvfV9hZGRQaXhlbHMoZSx0KXtjb25zdCBhPXRoaXMuY29kaW5nTGluZTtsZXQgcj10aGlzLmNvZGluZ1BvcztpZihlPmFbcl0pe2lmKGU+dGhpcy5jb2x1bW5zKXtpbmZvKCJyb3cgaXMgd3JvbmcgbGVuZ3RoIik7dGhpcy5lcnI9ITA7ZT10aGlzLmNvbHVtbnN9MSZyXnQmJisrcjthW3JdPWV9dGhpcy5jb2RpbmdQb3M9cn1fYWRkUGl4ZWxzTmVnKGUsdCl7Y29uc3QgYT10aGlzLmNvZGluZ0xpbmU7bGV0IHI9dGhpcy5jb2RpbmdQb3M7aWYoZT5hW3JdKXtpZihlPnRoaXMuY29sdW1ucyl7aW5mbygicm93IGlzIHdyb25nIGxlbmd0aCIpO3RoaXMuZXJyPSEwO2U9dGhpcy5jb2x1bW5zfTEmcl50JiYrK3I7YVtyXT1lfWVsc2UgaWYoZTxhW3JdKXtpZihlPDApe2luZm8oImludmFsaWQgY29kZSIpO3RoaXMuZXJyPSEwO2U9MH1mb3IoO3I+MCYmZTxhW3ItMV07KS0tcjthW3JdPWV9dGhpcy5jb2RpbmdQb3M9cn1fZmluZFRhYmxlQ29kZShlLHQsYSxyKXtjb25zdCBpPXJ8fDA7Zm9yKGxldCByPWU7cjw9dDsrK3Ipe2xldCBlPXRoaXMuX2xvb2tCaXRzKHIpO2lmKGU9PT1MYSlyZXR1cm5bITAsMSwhMV07cjx0JiYoZTw8PXQtcik7aWYoIWl8fGU+PWkpe2NvbnN0IHQ9YVtlLWldO2lmKHRbMF09PT1yKXt0aGlzLl9lYXRCaXRzKHIpO3JldHVyblshMCx0WzFdLCEwXX19fXJldHVyblshMSwwLCExXX1fZ2V0VHdvRGltQ29kZSgpe2xldCBlLHQ9MDtpZih0aGlzLmVvYmxvY2spe3Q9dGhpcy5fbG9va0JpdHMoNyk7ZT1fYVt0XTtpZihlPy5bMF0+MCl7dGhpcy5fZWF0Qml0cyhlWzBdKTtyZXR1cm4gZVsxXX19ZWxzZXtjb25zdCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw3LF9hKTtpZihlWzBdJiZlWzJdKXJldHVybiBlWzFdfWluZm8oIkJhZCB0d28gZGltIGNvZGUiKTtyZXR1cm4gTGF9X2dldFdoaXRlQ29kZSgpe2xldCBlLHQ9MDtpZih0aGlzLmVvYmxvY2spe3Q9dGhpcy5fbG9va0JpdHMoMTIpO2lmKHQ9PT1MYSlyZXR1cm4gMTtlPXQ+PjU/amFbdD4+M106VWFbdF07aWYoZVswXT4wKXt0aGlzLl9lYXRCaXRzKGVbMF0pO3JldHVybiBlWzFdfX1lbHNle2xldCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw5LGphKTtpZihlWzBdKXJldHVybiBlWzFdO2U9dGhpcy5fZmluZFRhYmxlQ29kZSgxMSwxMixVYSk7aWYoZVswXSlyZXR1cm4gZVsxXX1pbmZvKCJiYWQgd2hpdGUgY29kZSIpO3RoaXMuX2VhdEJpdHMoMSk7cmV0dXJuIDF9X2dldEJsYWNrQ29kZSgpe2xldCBlLHQ7aWYodGhpcy5lb2Jsb2NrKXtlPXRoaXMuX2xvb2tCaXRzKDEzKTtpZihlPT09TGEpcmV0dXJuIDE7dD1lPj43PyEoZT4+OSkmJmU+Pjc/cWFbKGU+PjEpLTY0XTpIYVtlPj43XTpYYVtlXTtpZih0WzBdPjApe3RoaXMuX2VhdEJpdHModFswXSk7cmV0dXJuIHRbMV19fWVsc2V7bGV0IGU9dGhpcy5fZmluZFRhYmxlQ29kZSgyLDYsSGEpO2lmKGVbMF0pcmV0dXJuIGVbMV07ZT10aGlzLl9maW5kVGFibGVDb2RlKDcsMTIscWEsNjQpO2lmKGVbMF0pcmV0dXJuIGVbMV07ZT10aGlzLl9maW5kVGFibGVDb2RlKDEwLDEzLFhhKTtpZihlWzBdKXJldHVybiBlWzFdfWluZm8oImJhZCBibGFjayBjb2RlIik7dGhpcy5fZWF0Qml0cygxKTtyZXR1cm4gMX1fbG9va0JpdHMoZSl7bGV0IHQ7Zm9yKDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/TGE6dGhpcy5pbnB1dEJ1Zjw8ZS10aGlzLmlucHV0Qml0cyY2NTUzNT4+MTYtZTt0aGlzLmlucHV0QnVmPXRoaXMuaW5wdXRCdWY8PDh8dDt0aGlzLmlucHV0Qml0cys9OH1yZXR1cm4gdGhpcy5pbnB1dEJ1Zj4+dGhpcy5pbnB1dEJpdHMtZSY2NTUzNT4+MTYtZX1fZWF0Qml0cyhlKXsodGhpcy5pbnB1dEJpdHMtPWUpPDAmJih0aGlzLmlucHV0Qml0cz0wKX19Y2xhc3MgQ0NJVFRGYXhTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDthIGluc3RhbmNlb2YgRGljdHx8KGE9RGljdC5lbXB0eSk7Y29uc3Qgcj17bmV4dDooKT0+ZS5nZXRCeXRlKCl9O3RoaXMuY2NpdHRGYXhEZWNvZGVyPW5ldyBDQ0lUVEZheERlY29kZXIocix7SzphLmdldCgiSyIpLEVuZE9mTGluZTphLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjphLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6YS5nZXQoIkNvbHVtbnMiKSxSb3dzOmEuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazphLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOmEuZ2V0KCJCbGFja0lzMSIpfSl9cmVhZEJsb2NrKCl7Zm9yKDshdGhpcy5lb2Y7KXtjb25zdCBlPXRoaXMuY2NpdHRGYXhEZWNvZGVyLnJlYWROZXh0Q2hhcigpO2lmKC0xPT09ZSl7dGhpcy5lb2Y9ITA7cmV0dXJufXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoKzEpO3RoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWV9fX1jb25zdCBXYT1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLEdhPW5ldyBJbnQzMkFycmF5KFszLDQsNSw2LDcsOCw5LDEwLDY1NTQ3LDY1NTQ5LDY1NTUxLDY1NTUzLDEzMTA5MSwxMzEwOTUsMTMxMDk5LDEzMTEwMywxOTY2NDMsMTk2NjUxLDE5NjY1OSwxOTY2NjcsMjYyMjExLDI2MjIyNywyNjIyNDMsMjYyMjU5LDMyNzgxMSwzMjc4NDMsMzI3ODc1LDMyNzkwNywyNTgsMjU4LDI1OF0pLHphPW5ldyBJbnQzMkFycmF5KFsxLDIsMyw0LDY1NTQxLDY1NTQzLDEzMTA4MSwxMzEwODUsMTk2NjI1LDE5NjYzMywyNjIxNzcsMjYyMTkzLDMyNzc0NSwzMjc3NzcsMzkzMzQ1LDM5MzQwOSw0NTkwMDksNDU5MTM3LDUyNDgwMSw1MjUwNTcsNTkwODQ5LDU5MTM2MSw2NTc0MDksNjU4NDMzLDcyNDk5Myw3MjcwNDEsNzk0NjI1LDc5ODcyMSw4NjgzNTMsODc2NTQ1XSksJGE9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLFZhPVtuZXcgSW50MzJBcnJheShbMzI3NjgwLDMyNzY5NiwzMjc2ODgsMzI3NzA0LDMyNzY4NCwzMjc3MDAsMzI3NjkyLDMyNzcwOCwzMjc2ODIsMzI3Njk4LDMyNzY5MCwzMjc3MDYsMzI3Njg2LDMyNzcwMiwzMjc2OTQsMCwzMjc2ODEsMzI3Njk3LDMyNzY4OSwzMjc3MDUsMzI3Njg1LDMyNzcwMSwzMjc2OTMsMzI3NzA5LDMyNzY4MywzMjc2OTksMzI3NjkxLDMyNzcwNywzMjc2ODcsMzI3NzAzLDMyNzY5NSwwXSksNV07Y2xhc3MgRmxhdGVTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXtzdXBlcih0KTt0aGlzLnN0cmVhbT1lO3RoaXMuZGljdD1lLmRpY3Q7Y29uc3QgYT1lLmdldEJ5dGUoKSxyPWUuZ2V0Qnl0ZSgpO2lmKC0xPT09YXx8LTE9PT1yKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7aWYoOCE9KDE1JmEpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7aWYoKChhPDw4KStyKSUzMSE9MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7aWYoMzImcil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7dGhpcy5jb2RlU2l6ZT0wO3RoaXMuY29kZUJ1Zj0wfWFzeW5jIGdldEltYWdlRGF0YShlLHQpe2NvbnN0IGE9YXdhaXQgdGhpcy5hc3luY0dldEJ5dGVzKCk7cmV0dXJuIGE/YS5sZW5ndGg8PWU/YTphLnN1YmFycmF5KDAsZSk6dGhpcy5nZXRCeXRlcyhlKX1hc3luYyBhc3luY0dldEJ5dGVzKCl7dGhpcy5zdHJlYW0ucmVzZXQoKTtjb25zdCBlPXRoaXMuc3RyZWFtLmdldEJ5dGVzKCk7dHJ5e2NvbnN0e3JlYWRhYmxlOnQsd3JpdGFibGU6YX09bmV3IERlY29tcHJlc3Npb25TdHJlYW0oImRlZmxhdGUiKSxyPWEuZ2V0V3JpdGVyKCk7YXdhaXQgci5yZWFkeTtyLndyaXRlKGUpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IHIucmVhZHk7YXdhaXQgci5jbG9zZSgpfSkuY2F0Y2goKCk9Pnt9KTtjb25zdCBpPVtdO2xldCBuPTA7Zm9yIGF3YWl0KGNvbnN0IGUgb2YgdCl7aS5wdXNoKGUpO24rPWUuYnl0ZUxlbmd0aH1jb25zdCBzPW5ldyBVaW50OEFycmF5KG4pO2xldCBvPTA7Zm9yKGNvbnN0IGUgb2YgaSl7cy5zZXQoZSxvKTtvKz1lLmJ5dGVMZW5ndGh9cmV0dXJuIHN9Y2F0Y2h7dGhpcy5zdHJlYW09bmV3IFN0cmVhbShlLDIsZS5sZW5ndGgsdGhpcy5zdHJlYW0uZGljdCk7dGhpcy5yZXNldCgpO3JldHVybiBudWxsfX1nZXQgaXNBc3luYygpe3JldHVybiEwfWdldEJpdHMoZSl7Y29uc3QgdD10aGlzLnN0cmVhbTtsZXQgYSxyPXRoaXMuY29kZVNpemUsaT10aGlzLmNvZGVCdWY7Zm9yKDtyPGU7KXtpZigtMT09PShhPXQuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0iKTtpfD1hPDxyO3IrPTh9YT1pJigxPDxlKS0xO3RoaXMuY29kZUJ1Zj1pPj5lO3RoaXMuY29kZVNpemU9ci09ZTtyZXR1cm4gYX1nZXRDb2RlKGUpe2NvbnN0IHQ9dGhpcy5zdHJlYW0sYT1lWzBdLHI9ZVsxXTtsZXQgaSxuPXRoaXMuY29kZVNpemUscz10aGlzLmNvZGVCdWY7Zm9yKDtuPHImJi0xIT09KGk9dC5nZXRCeXRlKCkpOyl7c3w9aTw8bjtuKz04fWNvbnN0IG89YVtzJigxPDxyKS0xXSxjPW8+PjE2LGw9NjU1MzUmbztpZihjPDF8fG48Yyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0iKTt0aGlzLmNvZGVCdWY9cz4+Yzt0aGlzLmNvZGVTaXplPW4tYztyZXR1cm4gbH1nZW5lcmF0ZUh1ZmZtYW5UYWJsZShlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBhLHI9MDtmb3IoYT0wO2E8dDsrK2EpZVthXT5yJiYocj1lW2FdKTtjb25zdCBpPTE8PHIsbj1uZXcgSW50MzJBcnJheShpKTtmb3IobGV0IHM9MSxvPTAsYz0yO3M8PXI7KytzLG88PD0xLGM8PD0xKWZvcihsZXQgcj0wO3I8dDsrK3IpaWYoZVtyXT09PXMpe2xldCBlPTAsdD1vO2ZvcihhPTA7YTxzOysrYSl7ZT1lPDwxfDEmdDt0Pj49MX1mb3IoYT1lO2E8aTthKz1jKW5bYV09czw8MTZ8cjsrK299cmV0dXJuW24scl19I1goZSl7aW5mbyhlKTt0aGlzLmVvZj0hMH1yZWFkQmxvY2soKXtsZXQgZSx0LGE7Y29uc3Qgcj10aGlzLnN0cmVhbTt0cnl7dD10aGlzLmdldEJpdHMoMyl9Y2F0Y2goZSl7dGhpcy4jWChlLm1lc3NhZ2UpO3JldHVybn0xJnQmJih0aGlzLmVvZj0hMCk7dD4+PTE7aWYoMD09PXQpe2xldCB0O2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXt0aGlzLiNYKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybn1sZXQgYT10O2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXt0aGlzLiNYKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybn1hfD10PDw4O2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXt0aGlzLiNYKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybn1sZXQgaT10O2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXt0aGlzLiNYKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybn1pfD10PDw4O2lmKGkhPT0oNjU1MzUmfmEpJiYoMCE9PWF8fDAhPT1pKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhZCB1bmNvbXByZXNzZWQgYmxvY2sgbGVuZ3RoIGluIGZsYXRlIHN0cmVhbSIpO3RoaXMuY29kZUJ1Zj0wO3RoaXMuY29kZVNpemU9MDtjb25zdCBuPXRoaXMuYnVmZmVyTGVuZ3RoLHM9bithO2U9dGhpcy5lbnN1cmVCdWZmZXIocyk7dGhpcy5idWZmZXJMZW5ndGg9cztpZigwPT09YSktMT09PXIucGVla0J5dGUoKSYmKHRoaXMuZW9mPSEwKTtlbHNle2NvbnN0IHQ9ci5nZXRCeXRlcyhhKTtlLnNldCh0LG4pO3QubGVuZ3RoPGEmJih0aGlzLmVvZj0hMCl9cmV0dXJufWxldCBpLG47aWYoMT09PXQpe2k9JGE7bj1WYX1lbHNle2lmKDIhPT10KXRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5rbm93biBibG9jayB0eXBlIGluIGZsYXRlIHN0cmVhbSIpO3tjb25zdCBlPXRoaXMuZ2V0Qml0cyg1KSsyNTcsdD10aGlzLmdldEJpdHMoNSkrMSxyPXRoaXMuZ2V0Qml0cyg0KSs0LHM9bmV3IFVpbnQ4QXJyYXkoV2EubGVuZ3RoKTtsZXQgbztmb3Iobz0wO288cjsrK28pc1tXYVtvXV09dGhpcy5nZXRCaXRzKDMpO2NvbnN0IGM9dGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShzKTthPTA7bz0wO2NvbnN0IGw9ZSt0LGg9bmV3IFVpbnQ4QXJyYXkobCk7bGV0IHUsZCxmO2Zvcig7bzxsOyl7Y29uc3QgZT10aGlzLmdldENvZGUoYyk7aWYoMTY9PT1lKXt1PTI7ZD0zO2Y9YX1lbHNlIGlmKDE3PT09ZSl7dT0zO2Q9MztmPWE9MH1lbHNle2lmKDE4IT09ZSl7aFtvKytdPWE9ZTtjb250aW51ZX11PTc7ZD0xMTtmPWE9MH1sZXQgdD10aGlzLmdldEJpdHModSkrZDtmb3IoO3QtLSA+MDspaFtvKytdPWZ9aT10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGguc3ViYXJyYXkoMCxlKSk7bj10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGguc3ViYXJyYXkoZSxsKSl9fWU9dGhpcy5idWZmZXI7bGV0IHM9ZT9lLmxlbmd0aDowLG89dGhpcy5idWZmZXJMZW5ndGg7Zm9yKDs7KXtsZXQgdD10aGlzLmdldENvZGUoaSk7aWYodDwyNTYpe2lmKG8rMT49cyl7ZT10aGlzLmVuc3VyZUJ1ZmZlcihvKzEpO3M9ZS5sZW5ndGh9ZVtvKytdPXQ7Y29udGludWV9aWYoMjU2PT09dCl7dGhpcy5idWZmZXJMZW5ndGg9bztyZXR1cm59dC09MjU3O3Q9R2FbdF07bGV0IHI9dD4+MTY7cj4wJiYocj10aGlzLmdldEJpdHMocikpO2E9KDY1NTM1JnQpK3I7dD10aGlzLmdldENvZGUobik7dD16YVt0XTtyPXQ+PjE2O3I+MCYmKHI9dGhpcy5nZXRCaXRzKHIpKTtjb25zdCBjPSg2NTUzNSZ0KStyO2lmKG8rYT49cyl7ZT10aGlzLmVuc3VyZUJ1ZmZlcihvK2EpO3M9ZS5sZW5ndGh9Zm9yKGxldCB0PTA7dDxhOysrdCwrK28pZVtvXT1lW28tY119fX1jb25zdCBLYT1be3FlOjIyMDE3LG5tcHM6MSxubHBzOjEsc3dpdGNoRmxhZzoxfSx7cWU6MTMzMTMsbm1wczoyLG5scHM6Nixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MyxubHBzOjksc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjQsbmxwczoxMixzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6NSxubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM4LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo3LG5scHM6Nixzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjgsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjksbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjEwLG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoxMSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoxMixubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoxMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyOSxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6MTUsbmxwczoxNCxzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjE2LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MjA3Mzcsbm1wczoxNyxubHBzOjE1LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6MTgsbmxwczoxNixzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjE5LG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6MTMzMTMsbm1wczoyMCxubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MjEsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZToxMDI0MSxubXBzOjIyLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjIzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6ODcwNSxubXBzOjI0LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjI1LG5scHM6MjIsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjI2LG5scHM6MjMsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI3LG5scHM6MjQsc3dpdGNoRmxhZzowfSx7cWU6NTEyMSxubXBzOjI4LG5scHM6MjUsc3dpdGNoRmxhZzowfSx7cWU6NDYwOSxubXBzOjI5LG5scHM6MjYsc3dpdGNoRmxhZzowfSx7cWU6NDM1MyxubXBzOjMwLG5scHM6Mjcsc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjMxLG5scHM6Mjgsc3dpdGNoRmxhZzowfSx7cWU6MjQ5NyxubXBzOjMyLG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6MjIwOSxubXBzOjMzLG5scHM6MzAsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjM0LG5scHM6MzEsc3dpdGNoRmxhZzowfSx7cWU6MTA4OSxubXBzOjM1LG5scHM6MzIsc3dpdGNoRmxhZzowfSx7cWU6NjczLG5tcHM6MzYsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozNyxubHBzOjM0LHN3aXRjaEZsYWc6MH0se3FlOjMyMSxubXBzOjM4LG5scHM6MzUsc3dpdGNoRmxhZzowfSx7cWU6MjczLG5tcHM6MzksbmxwczozNixzd2l0Y2hGbGFnOjB9LHtxZToxMzMsbm1wczo0MCxubHBzOjM3LHN3aXRjaEZsYWc6MH0se3FlOjczLG5tcHM6NDEsbmxwczozOCxzd2l0Y2hGbGFnOjB9LHtxZTozNyxubXBzOjQyLG5scHM6Mzksc3dpdGNoRmxhZzowfSx7cWU6MjEsbm1wczo0MyxubHBzOjQwLHN3aXRjaEZsYWc6MH0se3FlOjksbm1wczo0NCxubHBzOjQxLHN3aXRjaEZsYWc6MH0se3FlOjUsbm1wczo0NSxubHBzOjQyLHN3aXRjaEZsYWc6MH0se3FlOjEsbm1wczo0NSxubHBzOjQzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NDYsbmxwczo0Nixzd2l0Y2hGbGFnOjB9XTtjbGFzcyBBcml0aG1ldGljRGVjb2Rlcntjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5kYXRhPWU7dGhpcy5icD10O3RoaXMuZGF0YUVuZD1hO3RoaXMuY2hpZ2g9ZVt0XTt0aGlzLmNsb3c9MDt0aGlzLmJ5dGVJbigpO3RoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8NyY2NTUzNXx0aGlzLmNsb3c+PjkmMTI3O3RoaXMuY2xvdz10aGlzLmNsb3c8PDcmNjU1MzU7dGhpcy5jdC09Nzt0aGlzLmE9MzI3Njh9Ynl0ZUluKCl7Y29uc3QgZT10aGlzLmRhdGE7bGV0IHQ9dGhpcy5icDtpZigyNTU9PT1lW3RdKWlmKGVbdCsxXT4xNDMpe3RoaXMuY2xvdys9NjUyODA7dGhpcy5jdD04fWVsc2V7dCsrO3RoaXMuY2xvdys9ZVt0XTw8OTt0aGlzLmN0PTc7dGhpcy5icD10fWVsc2V7dCsrO3RoaXMuY2xvdys9dDx0aGlzLmRhdGFFbmQ/ZVt0XTw8ODo2NTI4MDt0aGlzLmN0PTg7dGhpcy5icD10fWlmKHRoaXMuY2xvdz42NTUzNSl7dGhpcy5jaGlnaCs9dGhpcy5jbG93Pj4xNjt0aGlzLmNsb3cmPTY1NTM1fX1yZWFkQml0KGUsdCl7bGV0IGE9ZVt0XT4+MSxyPTEmZVt0XTtjb25zdCBpPUthW2FdLG49aS5xZTtsZXQgcyxvPXRoaXMuYS1uO2lmKHRoaXMuY2hpZ2g8bilpZihvPG4pe289bjtzPXI7YT1pLm5tcHN9ZWxzZXtvPW47cz0xXnI7MT09PWkuc3dpdGNoRmxhZyYmKHI9cyk7YT1pLm5scHN9ZWxzZXt0aGlzLmNoaWdoLT1uO2lmKDMyNzY4Jm8pe3RoaXMuYT1vO3JldHVybiByfWlmKG88bil7cz0xXnI7MT09PWkuc3dpdGNoRmxhZyYmKHI9cyk7YT1pLm5scHN9ZWxzZXtzPXI7YT1pLm5tcHN9fWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpO288PD0xO3RoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjE7dGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNTt0aGlzLmN0LS19d2hpbGUoISgzMjc2OCZvKSk7dGhpcy5hPW87ZVt0XT1hPDwxfHI7cmV0dXJuIHN9fWNsYXNzIEpiaWcyRXJyb3IgZXh0ZW5kcyBlYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJKYmlnMkVycm9yIil9fWNsYXNzIENvbnRleHRDYWNoZXtnZXRDb250ZXh0cyhlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19Y2xhc3MgRGVjb2RpbmdDb250ZXh0e2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRhdGE9ZTt0aGlzLnN0YXJ0PXQ7dGhpcy5lbmQ9YX1nZXQgZGVjb2Rlcigpe3JldHVybiBzaGFkb3codGhpcywiZGVjb2RlciIsbmV3IEFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKSl9Z2V0IGNvbnRleHRDYWNoZSgpe3JldHVybiBzaGFkb3codGhpcywiY29udGV4dENhY2hlIixuZXcgQ29udGV4dENhY2hlKX19ZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihlLHQsYSl7Y29uc3Qgcj1lLmdldENvbnRleHRzKHQpO2xldCBpPTE7ZnVuY3Rpb24gcmVhZEJpdHMoZSl7bGV0IHQ9MDtmb3IobGV0IG49MDtuPGU7bisrKXtjb25zdCBlPWEucmVhZEJpdChyLGkpO2k9aTwyNTY/aTw8MXxlOjUxMSYoaTw8MXxlKXwyNTY7dD10PDwxfGV9cmV0dXJuIHQ+Pj4wfWNvbnN0IG49cmVhZEJpdHMoMSkscz1yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygzMikrNDQzNjpyZWFkQml0cygxMikrMzQwOnJlYWRCaXRzKDgpKzg0OnJlYWRCaXRzKDYpKzIwOnJlYWRCaXRzKDQpKzQ6cmVhZEJpdHMoMik7bGV0IG87MD09PW4/bz1zOnM+MCYmKG89LXMpO3JldHVybiBvPj0tMjE0NzQ4MzY0OCYmbzw9ZGE/bzpudWxsfWZ1bmN0aW9uIGRlY29kZUlBSUQoZSx0LGEpe2NvbnN0IHI9ZS5nZXRDb250ZXh0cygiSUFJRCIpO2xldCBpPTE7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7aT1pPDwxfHQucmVhZEJpdChyLGkpfXJldHVybiBhPDMxP2kmKDE8PGEpLTE6MjE0NzQ4MzY0NyZpfWNvbnN0IEphPVsiU3ltYm9sRGljdGlvbmFyeSIsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZVRleHRSZWdpb24iLG51bGwsIkltbWVkaWF0ZVRleHRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiUGF0dGVybkRpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbiIsIkludGVybWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLCJJbW1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsIlBhZ2VJbmZvcm1hdGlvbiIsIkVuZE9mUGFnZSIsIkVuZE9mU3RyaXBlIiwiRW5kT2ZGaWxlIiwiUHJvZmlsZXMiLCJUYWJsZXMiLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiRXh0ZW5zaW9uIl0sWWE9W1t7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMyx5Oi0xfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV1dLFphPVt7Y29kaW5nOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfV0scmVmZXJlbmNlOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4Oi0xLHk6MX0se3g6MCx5OjF9LHt4OjEseToxfV19LHtjb2Rpbmc6W3t4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4OjAseToxfSx7eDoxLHk6MX1dfV0sUWE9WzM5NzE3LDE5NDEsMjI5LDQwNV0sZXI9WzMyLDhdO2Z1bmN0aW9uIGRlY29kZUJpdG1hcChlLHQsYSxyLGksbixzLG8pe2lmKGUpe3JldHVybiBkZWNvZGVNTVJCaXRtYXAobmV3IFJlYWRlcihvLmRhdGEsby5zdGFydCxvLmVuZCksdCxhLCExKX1pZigwPT09ciYmIW4mJiFpJiY0PT09cy5sZW5ndGgmJjM9PT1zWzBdLngmJi0xPT09c1swXS55JiYtMz09PXNbMV0ueCYmLTE9PT1zWzFdLnkmJjI9PT1zWzJdLngmJi0yPT09c1syXS55JiYtMj09PXNbM10ueCYmLTI9PT1zWzNdLnkpcmV0dXJuIGZ1bmN0aW9uIGRlY29kZUJpdG1hcFRlbXBsYXRlMChlLHQsYSl7Y29uc3Qgcj1hLmRlY29kZXIsaT1hLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKSxuPVtdO2xldCBzLG8sYyxsLGgsdSxkO2ZvcihvPTA7bzx0O28rKyl7aD1uW29dPW5ldyBVaW50OEFycmF5KGUpO3U9bzwxP2g6bltvLTFdO2Q9bzwyP2g6bltvLTJdO3M9ZFswXTw8MTN8ZFsxXTw8MTJ8ZFsyXTw8MTF8dVswXTw8N3x1WzFdPDw2fHVbMl08PDV8dVszXTw8NDtmb3IoYz0wO2M8ZTtjKyspe2hbY109bD1yLnJlYWRCaXQoaSxzKTtzPSgzMTczNSZzKTw8MXwoYyszPGU/ZFtjKzNdPDwxMTowKXwoYys0PGU/dVtjKzRdPDw0OjApfGx9fXJldHVybiBufSh0LGEsbyk7Y29uc3QgYz0hIW4sbD1ZYVtyXS5jb25jYXQocyk7bC5zb3J0KChlLHQpPT5lLnktdC55fHxlLngtdC54KTtjb25zdCBoPWwubGVuZ3RoLHU9bmV3IEludDhBcnJheShoKSxkPW5ldyBJbnQ4QXJyYXkoaCksZj1bXTtsZXQgZyxwLG09MCxiPTAseT0wLHc9MDtmb3IocD0wO3A8aDtwKyspe3VbcF09bFtwXS54O2RbcF09bFtwXS55O2I9TWF0aC5taW4oYixsW3BdLngpO3k9TWF0aC5tYXgoeSxsW3BdLngpO3c9TWF0aC5taW4odyxsW3BdLnkpO3A8aC0xJiZsW3BdLnk9PT1sW3ArMV0ueSYmbFtwXS54PT09bFtwKzFdLngtMT9tfD0xPDxoLTEtcDpmLnB1c2gocCl9Y29uc3QgeD1mLmxlbmd0aCxTPW5ldyBJbnQ4QXJyYXkoeCksaz1uZXcgSW50OEFycmF5KHgpLEM9bmV3IFVpbnQxNkFycmF5KHgpO2ZvcihnPTA7Zzx4O2crKyl7cD1mW2ddO1NbZ109bFtwXS54O2tbZ109bFtwXS55O0NbZ109MTw8aC0xLXB9Y29uc3Qgdj0tYixGPS13LFQ9dC15LE89UWFbcl07bGV0IE09bmV3IFVpbnQ4QXJyYXkodCk7Y29uc3QgRD1bXSxSPW8uZGVjb2RlcixOPW8uY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpO2xldCBFLEwsXyxVLGosWD0wLHE9MDtmb3IobGV0IGU9MDtlPGE7ZSsrKXtpZihpKXtYXj1SLnJlYWRCaXQoTixPKTtpZihYKXtELnB1c2goTSk7Y29udGludWV9fU09bmV3IFVpbnQ4QXJyYXkoTSk7RC5wdXNoKE0pO2ZvcihFPTA7RTx0O0UrKyl7aWYoYyYmbltlXVtFXSl7TVtFXT0wO2NvbnRpbnVlfWlmKEU+PXYmJkU8VCYmZT49Ril7cT1xPDwxJm07Zm9yKHA9MDtwPHg7cCsrKXtMPWUra1twXTtfPUUrU1twXTtVPURbTF1bX107aWYoVSl7VT1DW3BdO3F8PVV9fX1lbHNle3E9MDtqPWgtMTtmb3IocD0wO3A8aDtwKyssai0tKXtfPUUrdVtwXTtpZihfPj0wJiZfPHQpe0w9ZStkW3BdO2lmKEw+PTApe1U9RFtMXVtfXTtVJiYocXw9VTw8ail9fX19Y29uc3QgYT1SLnJlYWRCaXQoTixxKTtNW0VdPWF9fXJldHVybiBEfWZ1bmN0aW9uIGRlY29kZVJlZmluZW1lbnQoZSx0LGEscixpLG4scyxvLGMpe2xldCBsPVphW2FdLmNvZGluZzswPT09YSYmKGw9bC5jb25jYXQoW29bMF1dKSk7Y29uc3QgaD1sLmxlbmd0aCx1PW5ldyBJbnQzMkFycmF5KGgpLGQ9bmV3IEludDMyQXJyYXkoaCk7bGV0IGY7Zm9yKGY9MDtmPGg7ZisrKXt1W2ZdPWxbZl0ueDtkW2ZdPWxbZl0ueX1sZXQgZz1aYVthXS5yZWZlcmVuY2U7MD09PWEmJihnPWcuY29uY2F0KFtvWzFdXSkpO2NvbnN0IHA9Zy5sZW5ndGgsbT1uZXcgSW50MzJBcnJheShwKSxiPW5ldyBJbnQzMkFycmF5KHApO2ZvcihmPTA7ZjxwO2YrKyl7bVtmXT1nW2ZdLng7YltmXT1nW2ZdLnl9Y29uc3QgeT1yWzBdLmxlbmd0aCx3PXIubGVuZ3RoLHg9ZXJbYV0sUz1bXSxrPWMuZGVjb2RlcixDPWMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpO2xldCB2PTA7Zm9yKGxldCBhPTA7YTx0O2ErKyl7aWYocyl7dl49ay5yZWFkQml0KEMseCk7aWYodil0aHJvdyBuZXcgSmJpZzJFcnJvcigicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkIil9Y29uc3QgdD1uZXcgVWludDhBcnJheShlKTtTLnB1c2godCk7Zm9yKGxldCBzPTA7czxlO3MrKyl7bGV0IG8sYyxsPTA7Zm9yKGY9MDtmPGg7ZisrKXtvPWErZFtmXTtjPXMrdVtmXTtvPDB8fGM8MHx8Yz49ZT9sPDw9MTpsPWw8PDF8U1tvXVtjXX1mb3IoZj0wO2Y8cDtmKyspe289YStiW2ZdLW47Yz1zK21bZl0taTtvPDB8fG8+PXd8fGM8MHx8Yz49eT9sPDw9MTpsPWw8PDF8cltvXVtjXX1jb25zdCBnPWsucmVhZEJpdChDLGwpO3Rbc109Z319cmV0dXJuIFN9ZnVuY3Rpb24gZGVjb2RlVGV4dFJlZ2lvbihlLHQsYSxyLGksbixzLG8sYyxsLGgsdSxkLGYsZyxwLG0sYix5KXtpZihlJiZ0KXRocm93IG5ldyBKYmlnMkVycm9yKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7Y29uc3Qgdz1bXTtsZXQgeCxTO2Zvcih4PTA7eDxyO3grKyl7Uz1uZXcgVWludDhBcnJheShhKTtpJiZTLmZpbGwoaSk7dy5wdXNoKFMpfWNvbnN0IGs9bS5kZWNvZGVyLEM9bS5jb250ZXh0Q2FjaGU7bGV0IHY9ZT8tZi50YWJsZURlbHRhVC5kZWNvZGUoeSk6LWRlY29kZUludGVnZXIoQywiSUFEVCIsayksRj0wO3g9MDtmb3IoO3g8bjspe3YrPWU/Zi50YWJsZURlbHRhVC5kZWNvZGUoeSk6ZGVjb2RlSW50ZWdlcihDLCJJQURUIixrKTtGKz1lP2YudGFibGVGaXJzdFMuZGVjb2RlKHkpOmRlY29kZUludGVnZXIoQywiSUFGUyIsayk7bGV0IHI9Rjtmb3IoOzspe2xldCBpPTA7cz4xJiYoaT1lP3kucmVhZEJpdHMoYik6ZGVjb2RlSW50ZWdlcihDLCJJQUlUIixrKSk7Y29uc3Qgbj1zKnYraSxGPWU/Zi5zeW1ib2xJRFRhYmxlLmRlY29kZSh5KTpkZWNvZGVJQUlEKEMsayxjKSxUPXQmJihlP3kucmVhZEJpdCgpOmRlY29kZUludGVnZXIoQywiSUFSSSIsaykpO2xldCBPPW9bRl0sTT1PWzBdLmxlbmd0aCxEPU8ubGVuZ3RoO2lmKFQpe2NvbnN0IGU9ZGVjb2RlSW50ZWdlcihDLCJJQVJEVyIsayksdD1kZWNvZGVJbnRlZ2VyKEMsIklBUkRIIixrKTtNKz1lO0QrPXQ7Tz1kZWNvZGVSZWZpbmVtZW50KE0sRCxnLE8sKGU+PjEpK2RlY29kZUludGVnZXIoQywiSUFSRFgiLGspLCh0Pj4xKStkZWNvZGVJbnRlZ2VyKEMsIklBUkRZIixrKSwhMSxwLG0pfWxldCBSPTA7bD8xJnU/Uj1ELTE6cis9RC0xOnU+MT9yKz1NLTE6Uj1NLTE7Y29uc3QgTj1uLSgxJnU/MDpELTEpLEU9ci0oMiZ1P00tMTowKTtsZXQgTCxfLFU7aWYobClmb3IoTD0wO0w8RDtMKyspe1M9d1tFK0xdO2lmKCFTKWNvbnRpbnVlO1U9T1tMXTtjb25zdCBlPU1hdGgubWluKGEtTixNKTtzd2l0Y2goZCl7Y2FzZSAwOmZvcihfPTA7XzxlO18rKylTW04rX118PVVbX107YnJlYWs7Y2FzZSAyOmZvcihfPTA7XzxlO18rKylTW04rX11ePVVbX107YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtkfSBpcyBub3Qgc3VwcG9ydGVkYCl9fWVsc2UgZm9yKF89MDtfPEQ7XysrKXtTPXdbTitfXTtpZihTKXtVPU9bX107c3dpdGNoKGQpe2Nhc2UgMDpmb3IoTD0wO0w8TTtMKyspU1tFK0xdfD1VW0xdO2JyZWFrO2Nhc2UgMjpmb3IoTD0wO0w8TTtMKyspU1tFK0xdXj1VW0xdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7ZH0gaXMgbm90IHN1cHBvcnRlZGApfX19eCsrO2NvbnN0IGo9ZT9mLnRhYmxlRGVsdGFTLmRlY29kZSh5KTpkZWNvZGVJbnRlZ2VyKEMsIklBRFMiLGspO2lmKG51bGw9PT1qKWJyZWFrO3IrPVIraitofX1yZXR1cm4gd31mdW5jdGlvbiByZWFkU2VnbWVudEhlYWRlcihlLHQpe2NvbnN0IGE9e307YS5udW1iZXI9cmVhZFVpbnQzMihlLHQpO2NvbnN0IHI9ZVt0KzRdLGk9NjMmcjtpZighSmFbaV0pdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgc2VnbWVudCB0eXBlOiAiK2kpO2EudHlwZT1pO2EudHlwZU5hbWU9SmFbaV07YS5kZWZlcnJlZE5vblJldGFpbj0hISgxMjgmcik7Y29uc3Qgbj0hISg2NCZyKSxzPWVbdCs1XTtsZXQgbz1zPj41Jjc7Y29uc3QgYz1bMzEmc107bGV0IGw9dCs2O2lmKDc9PT1zKXtvPTUzNjg3MDkxMSZyZWFkVWludDMyKGUsbC0xKTtsKz0zO2xldCB0PW8rNz4+MztjWzBdPWVbbCsrXTtmb3IoOy0tdD4wOyljLnB1c2goZVtsKytdKX1lbHNlIGlmKDU9PT1zfHw2PT09cyl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO2EucmV0YWluQml0cz1jO2xldCBoPTQ7YS5udW1iZXI8PTI1Nj9oPTE6YS5udW1iZXI8PTY1NTM2JiYoaD0yKTtjb25zdCB1PVtdO2xldCBkLGY7Zm9yKGQ9MDtkPG87ZCsrKXtsZXQgdDt0PTE9PT1oP2VbbF06Mj09PWg/cmVhZFVpbnQxNihlLGwpOnJlYWRVaW50MzIoZSxsKTt1LnB1c2godCk7bCs9aH1hLnJlZmVycmVkVG89dTtpZihuKXthLnBhZ2VBc3NvY2lhdGlvbj1yZWFkVWludDMyKGUsbCk7bCs9NH1lbHNlIGEucGFnZUFzc29jaWF0aW9uPWVbbCsrXTthLmxlbmd0aD1yZWFkVWludDMyKGUsbCk7bCs9NDtpZig0Mjk0OTY3Mjk1PT09YS5sZW5ndGgpe2lmKDM4IT09aSl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCB1bmtub3duIHNlZ21lbnQgbGVuZ3RoIik7e2NvbnN0IHQ9cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihlLGwpLHI9ISEoMSZlW2wrdHJdKSxpPTYsbj1uZXcgVWludDhBcnJheShpKTtpZighcil7blswXT0yNTU7blsxXT0xNzJ9blsyXT10LmhlaWdodD4+PjI0JjI1NTtuWzNdPXQuaGVpZ2h0Pj4xNiYyNTU7bls0XT10LmhlaWdodD4+OCYyNTU7bls1XT0yNTUmdC5oZWlnaHQ7Zm9yKGQ9bCxmPWUubGVuZ3RoO2Q8ZjtkKyspe2xldCB0PTA7Zm9yKDt0PGkmJm5bdF09PT1lW2QrdF07KXQrKztpZih0PT09aSl7YS5sZW5ndGg9ZCtpO2JyZWFrfX1pZig0Mjk0OTY3Mjk1PT09YS5sZW5ndGgpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInNlZ21lbnQgZW5kIHdhcyBub3QgZm91bmQiKX19YS5oZWFkZXJFbmQ9bDtyZXR1cm4gYX1mdW5jdGlvbiByZWFkU2VnbWVudHMoZSx0LGEscil7Y29uc3QgaT1bXTtsZXQgbj1hO2Zvcig7bjxyOyl7Y29uc3QgYT1yZWFkU2VnbWVudEhlYWRlcih0LG4pO249YS5oZWFkZXJFbmQ7Y29uc3Qgcj17aGVhZGVyOmEsZGF0YTp0fTtpZighZS5yYW5kb21BY2Nlc3Mpe3Iuc3RhcnQ9bjtuKz1hLmxlbmd0aDtyLmVuZD1ufWkucHVzaChyKTtpZig1MT09PWEudHlwZSlicmVha31pZihlLnJhbmRvbUFjY2Vzcylmb3IobGV0IGU9MCx0PWkubGVuZ3RoO2U8dDtlKyspe2lbZV0uc3RhcnQ9bjtuKz1pW2VdLmhlYWRlci5sZW5ndGg7aVtlXS5lbmQ9bn1yZXR1cm4gaX1mdW5jdGlvbiByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGUsdCl7cmV0dXJue3dpZHRoOnJlYWRVaW50MzIoZSx0KSxoZWlnaHQ6cmVhZFVpbnQzMihlLHQrNCkseDpyZWFkVWludDMyKGUsdCs4KSx5OnJlYWRVaW50MzIoZSx0KzEyKSxjb21iaW5hdGlvbk9wZXJhdG9yOjcmZVt0KzE2XX19Y29uc3QgdHI9MTc7ZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnQoZSx0KXtjb25zdCBhPWUuaGVhZGVyLHI9ZS5kYXRhLGk9ZS5lbmQ7bGV0IG4scyxvLGMsbD1lLnN0YXJ0O3N3aXRjaChhLnR5cGUpe2Nhc2UgMDpjb25zdCBlPXt9LHQ9cmVhZFVpbnQxNihyLGwpO2UuaHVmZm1hbj0hISgxJnQpO2UucmVmaW5lbWVudD0hISgyJnQpO2UuaHVmZm1hbkRIU2VsZWN0b3I9dD4+MiYzO2UuaHVmZm1hbkRXU2VsZWN0b3I9dD4+NCYzO2UuYml0bWFwU2l6ZVNlbGVjdG9yPXQ+PjYmMTtlLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9dD4+NyYxO2UuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JnQpO2UuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZ0KTtlLnRlbXBsYXRlPXQ+PjEwJjM7ZS5yZWZpbmVtZW50VGVtcGxhdGU9dD4+MTImMTtsKz0yO2lmKCFlLmh1ZmZtYW4pe2M9MD09PWUudGVtcGxhdGU/NDoxO3M9W107Zm9yKG89MDtvPGM7bysrKXtzLnB1c2goe3g6cmVhZEludDgocixsKSx5OnJlYWRJbnQ4KHIsbCsxKX0pO2wrPTJ9ZS5hdD1zfWlmKGUucmVmaW5lbWVudCYmIWUucmVmaW5lbWVudFRlbXBsYXRlKXtzPVtdO2ZvcihvPTA7bzwyO28rKyl7cy5wdXNoKHt4OnJlYWRJbnQ4KHIsbCkseTpyZWFkSW50OChyLGwrMSl9KTtsKz0yfWUucmVmaW5lbWVudEF0PXN9ZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scz1yZWFkVWludDMyKHIsbCk7bCs9NDtlLm51bWJlck9mTmV3U3ltYm9scz1yZWFkVWludDMyKHIsbCk7bCs9NDtuPVtlLGEubnVtYmVyLGEucmVmZXJyZWRUbyxyLGwsaV07YnJlYWs7Y2FzZSA2OmNhc2UgNzpjb25zdCBoPXt9O2guaW5mbz1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKHIsbCk7bCs9dHI7Y29uc3QgdT1yZWFkVWludDE2KHIsbCk7bCs9MjtoLmh1ZmZtYW49ISEoMSZ1KTtoLnJlZmluZW1lbnQ9ISEoMiZ1KTtoLmxvZ1N0cmlwU2l6ZT11Pj4yJjM7aC5zdHJpcFNpemU9MTw8aC5sb2dTdHJpcFNpemU7aC5yZWZlcmVuY2VDb3JuZXI9dT4+NCYzO2gudHJhbnNwb3NlZD0hISg2NCZ1KTtoLmNvbWJpbmF0aW9uT3BlcmF0b3I9dT4+NyYzO2guZGVmYXVsdFBpeGVsVmFsdWU9dT4+OSYxO2guZHNPZmZzZXQ9dTw8MTc+PjI3O2gucmVmaW5lbWVudFRlbXBsYXRlPXU+PjE1JjE7aWYoaC5odWZmbWFuKXtjb25zdCBlPXJlYWRVaW50MTYocixsKTtsKz0yO2guaHVmZm1hbkZTPTMmZTtoLmh1ZmZtYW5EUz1lPj4yJjM7aC5odWZmbWFuRFQ9ZT4+NCYzO2guaHVmZm1hblJlZmluZW1lbnREVz1lPj42JjM7aC5odWZmbWFuUmVmaW5lbWVudERIPWU+PjgmMztoLmh1ZmZtYW5SZWZpbmVtZW50RFg9ZT4+MTAmMztoLmh1ZmZtYW5SZWZpbmVtZW50RFk9ZT4+MTImMztoLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmUpfWlmKGgucmVmaW5lbWVudCYmIWgucmVmaW5lbWVudFRlbXBsYXRlKXtzPVtdO2ZvcihvPTA7bzwyO28rKyl7cy5wdXNoKHt4OnJlYWRJbnQ4KHIsbCkseTpyZWFkSW50OChyLGwrMSl9KTtsKz0yfWgucmVmaW5lbWVudEF0PXN9aC5udW1iZXJPZlN5bWJvbEluc3RhbmNlcz1yZWFkVWludDMyKHIsbCk7bCs9NDtuPVtoLGEucmVmZXJyZWRUbyxyLGwsaV07YnJlYWs7Y2FzZSAxNjpjb25zdCBkPXt9LGY9cltsKytdO2QubW1yPSEhKDEmZik7ZC50ZW1wbGF0ZT1mPj4xJjM7ZC5wYXR0ZXJuV2lkdGg9cltsKytdO2QucGF0dGVybkhlaWdodD1yW2wrK107ZC5tYXhQYXR0ZXJuSW5kZXg9cmVhZFVpbnQzMihyLGwpO2wrPTQ7bj1bZCxhLm51bWJlcixyLGwsaV07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOmNvbnN0IGc9e307Zy5pbmZvPXJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24ocixsKTtsKz10cjtjb25zdCBwPXJbbCsrXTtnLm1tcj0hISgxJnApO2cudGVtcGxhdGU9cD4+MSYzO2cuZW5hYmxlU2tpcD0hISg4JnApO2cuY29tYmluYXRpb25PcGVyYXRvcj1wPj40Jjc7Zy5kZWZhdWx0UGl4ZWxWYWx1ZT1wPj43JjE7Zy5ncmlkV2lkdGg9cmVhZFVpbnQzMihyLGwpO2wrPTQ7Zy5ncmlkSGVpZ2h0PXJlYWRVaW50MzIocixsKTtsKz00O2cuZ3JpZE9mZnNldFg9NDI5NDk2NzI5NSZyZWFkVWludDMyKHIsbCk7bCs9NDtnLmdyaWRPZmZzZXRZPTQyOTQ5NjcyOTUmcmVhZFVpbnQzMihyLGwpO2wrPTQ7Zy5ncmlkVmVjdG9yWD1yZWFkVWludDE2KHIsbCk7bCs9MjtnLmdyaWRWZWN0b3JZPXJlYWRVaW50MTYocixsKTtsKz0yO249W2csYS5yZWZlcnJlZFRvLHIsbCxpXTticmVhaztjYXNlIDM4OmNhc2UgMzk6Y29uc3QgbT17fTttLmluZm89cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihyLGwpO2wrPXRyO2NvbnN0IGI9cltsKytdO20ubW1yPSEhKDEmYik7bS50ZW1wbGF0ZT1iPj4xJjM7bS5wcmVkaWN0aW9uPSEhKDgmYik7aWYoIW0ubW1yKXtjPTA9PT1tLnRlbXBsYXRlPzQ6MTtzPVtdO2ZvcihvPTA7bzxjO28rKyl7cy5wdXNoKHt4OnJlYWRJbnQ4KHIsbCkseTpyZWFkSW50OChyLGwrMSl9KTtsKz0yfW0uYXQ9c31uPVttLHIsbCxpXTticmVhaztjYXNlIDQ4OmNvbnN0IHk9e3dpZHRoOnJlYWRVaW50MzIocixsKSxoZWlnaHQ6cmVhZFVpbnQzMihyLGwrNCkscmVzb2x1dGlvblg6cmVhZFVpbnQzMihyLGwrOCkscmVzb2x1dGlvblk6cmVhZFVpbnQzMihyLGwrMTIpfTs0Mjk0OTY3Mjk1PT09eS5oZWlnaHQmJmRlbGV0ZSB5LmhlaWdodDtjb25zdCB3PXJbbCsxNl07cmVhZFVpbnQxNihyLGwrMTcpO3kubG9zc2xlc3M9ISEoMSZ3KTt5LnJlZmluZW1lbnQ9ISEoMiZ3KTt5LmRlZmF1bHRQaXhlbFZhbHVlPXc+PjImMTt5LmNvbWJpbmF0aW9uT3BlcmF0b3I9dz4+MyYzO3kucmVxdWlyZXNCdWZmZXI9ISEoMzImdyk7eS5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU9ISEoNjQmdyk7bj1beV07YnJlYWs7Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA2MjpicmVhaztjYXNlIDUzOm49W2EubnVtYmVyLHIsbCxpXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBzZWdtZW50IHR5cGUgJHthLnR5cGVOYW1lfSgke2EudHlwZX0pIGlzIG5vdCBpbXBsZW1lbnRlZGApfWNvbnN0IGg9Im9uIithLnR5cGVOYW1lO2ggaW4gdCYmdFtoXS5hcHBseSh0LG4pfWZ1bmN0aW9uIHByb2Nlc3NTZWdtZW50cyhlLHQpe2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKylwcm9jZXNzU2VnbWVudChlW2FdLHQpfWNsYXNzIFNpbXBsZVNlZ21lbnRWaXNpdG9ye29uUGFnZUluZm9ybWF0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7Y29uc3QgdD1lLndpZHRoKzc+PjMsYT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCplLmhlaWdodCk7ZS5kZWZhdWx0UGl4ZWxWYWx1ZSYmYS5maWxsKDI1NSk7dGhpcy5idWZmZXI9YX1kcmF3Qml0bWFwKGUsdCl7Y29uc3QgYT10aGlzLmN1cnJlbnRQYWdlSW5mbyxyPWUud2lkdGgsaT1lLmhlaWdodCxuPWEud2lkdGgrNz4+MyxzPWEuY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlP2UuY29tYmluYXRpb25PcGVyYXRvcjphLmNvbWJpbmF0aW9uT3BlcmF0b3Isbz10aGlzLmJ1ZmZlcixjPTEyOD4+KDcmZS54KTtsZXQgbCxoLHUsZCxmPWUueSpuKyhlLng+PjMpO3N3aXRjaChzKXtjYXNlIDA6Zm9yKGw9MDtsPGk7bCsrKXt1PWM7ZD1mO2ZvcihoPTA7aDxyO2grKyl7dFtsXVtoXSYmKG9bZF18PXUpO3U+Pj0xO2lmKCF1KXt1PTEyODtkKyt9fWYrPW59YnJlYWs7Y2FzZSAyOmZvcihsPTA7bDxpO2wrKyl7dT1jO2Q9Zjtmb3IoaD0wO2g8cjtoKyspe3RbbF1baF0mJihvW2RdXj11KTt1Pj49MTtpZighdSl7dT0xMjg7ZCsrfX1mKz1ufWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7c30gaXMgbm90IHN1cHBvcnRlZGApfX1vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24oZSx0LGEscil7Y29uc3QgaT1lLmluZm8sbj1uZXcgRGVjb2RpbmdDb250ZXh0KHQsYSxyKSxzPWRlY29kZUJpdG1hcChlLm1tcixpLndpZHRoLGkuaGVpZ2h0LGUudGVtcGxhdGUsZS5wcmVkaWN0aW9uLG51bGwsZS5hdCxuKTt0aGlzLmRyYXdCaXRtYXAoaSxzKX1vbkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbigpe3RoaXMub25JbW1lZGlhdGVHZW5lcmljUmVnaW9uKC4uLmFyZ3VtZW50cyl9b25TeW1ib2xEaWN0aW9uYXJ5KGUsdCxhLHIsaSxuKXtsZXQgcyxvO2lmKGUuaHVmZm1hbil7cz1mdW5jdGlvbiBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhlLHQsYSl7bGV0IHIsaSxuLHMsbz0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOnI9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpyPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk7bysrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EV1NlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOmk9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EV1NlbGVjdG9yKzIpO2JyZWFrO2Nhc2UgMzppPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk7bysrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEVyBzZWxlY3RvciIpfWlmKGUuYml0bWFwU2l6ZVNlbGVjdG9yKXtuPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk7bysrfWVsc2Ugbj1nZXRTdGFuZGFyZFRhYmxlKDEpO3M9ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP2dldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk6Z2V0U3RhbmRhcmRUYWJsZSgxKTtyZXR1cm57dGFibGVEZWx0YUhlaWdodDpyLHRhYmxlRGVsdGFXaWR0aDppLHRhYmxlQml0bWFwU2l6ZTpuLHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzOnN9fShlLGEsdGhpcy5jdXN0b21UYWJsZXMpO289bmV3IFJlYWRlcihyLGksbil9bGV0IGM9dGhpcy5zeW1ib2xzO2N8fCh0aGlzLnN5bWJvbHM9Yz17fSk7Y29uc3QgbD1bXTtmb3IoY29uc3QgZSBvZiBhKXtjb25zdCB0PWNbZV07dCYmbC5wdXNoKC4uLnQpfWNvbnN0IGg9bmV3IERlY29kaW5nQ29udGV4dChyLGksbik7Y1t0XT1mdW5jdGlvbiBkZWNvZGVTeW1ib2xEaWN0aW9uYXJ5KGUsdCxhLHIsaSxuLHMsbyxjLGwsaCx1KXtpZihlJiZ0KXRocm93IG5ldyBKYmlnMkVycm9yKCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO2NvbnN0IGQ9W107bGV0IGY9MCxnPWxvZzIoYS5sZW5ndGgrcik7Y29uc3QgcD1oLmRlY29kZXIsbT1oLmNvbnRleHRDYWNoZTtsZXQgYix5O2lmKGUpe2I9Z2V0U3RhbmRhcmRUYWJsZSgxKTt5PVtdO2c9TWF0aC5tYXgoZywxKX1mb3IoO2QubGVuZ3RoPHI7KXtmKz1lP24udGFibGVEZWx0YUhlaWdodC5kZWNvZGUodSk6ZGVjb2RlSW50ZWdlcihtLCJJQURIIixwKTtsZXQgcj0wLGk9MDtjb25zdCBiPWU/eS5sZW5ndGg6MDtmb3IoOzspe2NvbnN0IGI9ZT9uLnRhYmxlRGVsdGFXaWR0aC5kZWNvZGUodSk6ZGVjb2RlSW50ZWdlcihtLCJJQURXIixwKTtpZihudWxsPT09YilicmVhaztyKz1iO2krPXI7bGV0IHc7aWYodCl7Y29uc3QgaT1kZWNvZGVJbnRlZ2VyKG0sIklBQUkiLHApO2lmKGk+MSl3PWRlY29kZVRleHRSZWdpb24oZSx0LHIsZiwwLGksMSxhLmNvbmNhdChkKSxnLDAsMCwxLDAsbixjLGwsaCwwLHUpO2Vsc2V7Y29uc3QgZT1kZWNvZGVJQUlEKG0scCxnKSx0PWRlY29kZUludGVnZXIobSwiSUFSRFgiLHApLGk9ZGVjb2RlSW50ZWdlcihtLCJJQVJEWSIscCk7dz1kZWNvZGVSZWZpbmVtZW50KHIsZixjLGU8YS5sZW5ndGg/YVtlXTpkW2UtYS5sZW5ndGhdLHQsaSwhMSxsLGgpfWQucHVzaCh3KX1lbHNlIGlmKGUpeS5wdXNoKHIpO2Vsc2V7dz1kZWNvZGVCaXRtYXAoITEscixmLHMsITEsbnVsbCxvLGgpO2QucHVzaCh3KX19aWYoZSYmIXQpe2NvbnN0IGU9bi50YWJsZUJpdG1hcFNpemUuZGVjb2RlKHUpO3UuYnl0ZUFsaWduKCk7bGV0IHQ7aWYoMD09PWUpdD1yZWFkVW5jb21wcmVzc2VkQml0bWFwKHUsaSxmKTtlbHNle2NvbnN0IGE9dS5lbmQscj11LnBvc2l0aW9uK2U7dS5lbmQ9cjt0PWRlY29kZU1NUkJpdG1hcCh1LGksZiwhMSk7dS5lbmQ9YTt1LnBvc2l0aW9uPXJ9Y29uc3QgYT15Lmxlbmd0aDtpZihiPT09YS0xKWQucHVzaCh0KTtlbHNle2xldCBlLHIsaSxuLHMsbz0wO2ZvcihlPWI7ZTxhO2UrKyl7bj15W2VdO2k9bytuO3M9W107Zm9yKHI9MDtyPGY7cisrKXMucHVzaCh0W3JdLnN1YmFycmF5KG8saSkpO2QucHVzaChzKTtvPWl9fX19Y29uc3Qgdz1bXSx4PVtdO2xldCBTLGssQz0hMTtjb25zdCB2PWEubGVuZ3RoK3I7Zm9yKDt4Lmxlbmd0aDx2Oyl7bGV0IHQ9ZT9iLmRlY29kZSh1KTpkZWNvZGVJbnRlZ2VyKG0sIklBRVgiLHApO2Zvcig7dC0tOyl4LnB1c2goQyk7Qz0hQ31mb3IoUz0wLGs9YS5sZW5ndGg7UzxrO1MrKyl4W1NdJiZ3LnB1c2goYVtTXSk7Zm9yKGxldCBlPTA7ZTxyO1MrKyxlKyspeFtTXSYmdy5wdXNoKGRbZV0pO3JldHVybiB3fShlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGwsZS5udW1iZXJPZk5ld1N5bWJvbHMsZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scyxzLGUudGVtcGxhdGUsZS5hdCxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxoLG8pfW9uSW1tZWRpYXRlVGV4dFJlZ2lvbihlLHQsYSxyLGkpe2NvbnN0IG49ZS5pbmZvO2xldCBzLG87Y29uc3QgYz10aGlzLnN5bWJvbHMsbD1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PWNbZV07dCYmbC5wdXNoKC4uLnQpfWNvbnN0IGg9bG9nMihsLmxlbmd0aCk7aWYoZS5odWZmbWFuKXtvPW5ldyBSZWFkZXIoYSxyLGkpO3M9ZnVuY3Rpb24gZ2V0VGV4dFJlZ2lvbkh1ZmZtYW5UYWJsZXMoZSx0LGEscixpKXtjb25zdCBuPVtdO2ZvcihsZXQgZT0wO2U8PTM0O2UrKyl7Y29uc3QgdD1pLnJlYWRCaXRzKDQpO24ucHVzaChuZXcgSHVmZm1hbkxpbmUoW2UsdCwwLDBdKSl9Y29uc3Qgcz1uZXcgSHVmZm1hblRhYmxlKG4sITEpO24ubGVuZ3RoPTA7Zm9yKGxldCBlPTA7ZTxyOyl7Y29uc3QgdD1zLmRlY29kZShpKTtpZih0Pj0zMil7bGV0IGEscixzO3N3aXRjaCh0KXtjYXNlIDMyOmlmKDA9PT1lKXRocm93IG5ldyBKYmlnMkVycm9yKCJubyBwcmV2aW91cyB2YWx1ZSBpbiBzeW1ib2wgSUQgdGFibGUiKTtyPWkucmVhZEJpdHMoMikrMzthPW5bZS0xXS5wcmVmaXhMZW5ndGg7YnJlYWs7Y2FzZSAzMzpyPWkucmVhZEJpdHMoMykrMzthPTA7YnJlYWs7Y2FzZSAzNDpyPWkucmVhZEJpdHMoNykrMTE7YT0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgY29kZSBsZW5ndGggaW4gc3ltYm9sIElEIHRhYmxlIil9Zm9yKHM9MDtzPHI7cysrKXtuLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLGEsMCwwXSkpO2UrK319ZWxzZXtuLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLHQsMCwwXSkpO2UrK319aS5ieXRlQWxpZ24oKTtjb25zdCBvPW5ldyBIdWZmbWFuVGFibGUobiwhMSk7bGV0IGMsbCxoLHU9MDtzd2l0Y2goZS5odWZmbWFuRlMpe2Nhc2UgMDpjYXNlIDE6Yz1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkZTKzYpO2JyZWFrO2Nhc2UgMzpjPWdldEN1c3RvbUh1ZmZtYW5UYWJsZSh1LHQsYSk7dSsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBGUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EUyl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6bD1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRTKzgpO2JyZWFrO2Nhc2UgMzpsPWdldEN1c3RvbUh1ZmZtYW5UYWJsZSh1LHQsYSk7dSsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6aD1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6aD1nZXRDdXN0b21IdWZmbWFuVGFibGUodSx0LGEpO3UrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFQgc2VsZWN0b3IiKX1pZihlLnJlZmluZW1lbnQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm57c3ltYm9sSURUYWJsZTpvLHRhYmxlRmlyc3RTOmMsdGFibGVEZWx0YVM6bCx0YWJsZURlbHRhVDpofX0oZSx0LHRoaXMuY3VzdG9tVGFibGVzLGwubGVuZ3RoLG8pfWNvbnN0IHU9bmV3IERlY29kaW5nQ29udGV4dChhLHIsaSksZD1kZWNvZGVUZXh0UmVnaW9uKGUuaHVmZm1hbixlLnJlZmluZW1lbnQsbi53aWR0aCxuLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsZS5zdHJpcFNpemUsbCxoLGUudHJhbnNwb3NlZCxlLmRzT2Zmc2V0LGUucmVmZXJlbmNlQ29ybmVyLGUuY29tYmluYXRpb25PcGVyYXRvcixzLGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LHUsZS5sb2dTdHJpcFNpemUsbyk7dGhpcy5kcmF3Qml0bWFwKG4sZCl9b25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlVGV4dFJlZ2lvbiguLi5hcmd1bWVudHMpfW9uUGF0dGVybkRpY3Rpb25hcnkoZSx0LGEscixpKXtsZXQgbj10aGlzLnBhdHRlcm5zO258fCh0aGlzLnBhdHRlcm5zPW49e30pO2NvbnN0IHM9bmV3IERlY29kaW5nQ29udGV4dChhLHIsaSk7blt0XT1mdW5jdGlvbiBkZWNvZGVQYXR0ZXJuRGljdGlvbmFyeShlLHQsYSxyLGksbil7Y29uc3Qgcz1bXTtpZighZSl7cy5wdXNoKHt4Oi10LHk6MH0pOzA9PT1pJiZzLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSl9Y29uc3Qgbz1kZWNvZGVCaXRtYXAoZSwocisxKSp0LGEsaSwhMSxudWxsLHMsbiksYz1bXTtmb3IobGV0IGU9MDtlPD1yO2UrKyl7Y29uc3Qgcj1bXSxpPXQqZSxuPWkrdDtmb3IobGV0IGU9MDtlPGE7ZSsrKXIucHVzaChvW2VdLnN1YmFycmF5KGksbikpO2MucHVzaChyKX1yZXR1cm4gY30oZS5tbXIsZS5wYXR0ZXJuV2lkdGgsZS5wYXR0ZXJuSGVpZ2h0LGUubWF4UGF0dGVybkluZGV4LGUudGVtcGxhdGUscyl9b25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbihlLHQsYSxyLGkpe2NvbnN0IG49dGhpcy5wYXR0ZXJuc1t0WzBdXSxzPWUuaW5mbyxvPW5ldyBEZWNvZGluZ0NvbnRleHQoYSxyLGkpLGM9ZnVuY3Rpb24gZGVjb2RlSGFsZnRvbmVSZWdpb24oZSx0LGEscixpLG4scyxvLGMsbCxoLHUsZCxmLGcpe2lmKHMpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInNraXAgaXMgbm90IHN1cHBvcnRlZCIpO2lmKDAhPT1vKXRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAiJHtvfSIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb25gKTtjb25zdCBwPVtdO2xldCBtLGIseTtmb3IobT0wO208aTttKyspe3k9bmV3IFVpbnQ4QXJyYXkocik7biYmeS5maWxsKG4pO3AucHVzaCh5KX1jb25zdCB3PXQubGVuZ3RoLHg9dFswXSxTPXhbMF0ubGVuZ3RoLGs9eC5sZW5ndGgsQz1sb2cyKHcpLHY9W107aWYoIWUpe3YucHVzaCh7eDphPD0xPzM6Mix5Oi0xfSk7MD09PWEmJnYucHVzaCh7eDotMyx5Oi0xfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTJ9KX1jb25zdCBGPVtdO2xldCBULE8sTSxELFIsTixFLEwsXyxVLGo7ZSYmKFQ9bmV3IFJlYWRlcihnLmRhdGEsZy5zdGFydCxnLmVuZCkpO2ZvcihtPUMtMTttPj0wO20tLSl7Tz1lP2RlY29kZU1NUkJpdG1hcChULGMsbCwhMCk6ZGVjb2RlQml0bWFwKCExLGMsbCxhLCExLG51bGwsdixnKTtGW21dPU99Zm9yKE09MDtNPGw7TSsrKWZvcihEPTA7RDxjO0QrKyl7Uj0wO049MDtmb3IoYj1DLTE7Yj49MDtiLS0pe1JePUZbYl1bTV1bRF07Tnw9Ujw8Yn1FPXRbTl07TD1oK00qZitEKmQ+Pjg7Xz11K00qZC1EKmY+Pjg7aWYoTD49MCYmTCtTPD1yJiZfPj0wJiZfK2s8PWkpZm9yKG09MDttPGs7bSsrKXtqPXBbXyttXTtVPUVbbV07Zm9yKGI9MDtiPFM7YisrKWpbTCtiXXw9VVtiXX1lbHNle2xldCBlLHQ7Zm9yKG09MDttPGs7bSsrKXt0PV8rbTtpZighKHQ8MHx8dD49aSkpe2o9cFt0XTtVPUVbbV07Zm9yKGI9MDtiPFM7YisrKXtlPUwrYjtlPj0wJiZlPHImJihqW2VdfD1VW2JdKX19fX19cmV0dXJuIHB9KGUubW1yLG4sZS50ZW1wbGF0ZSxzLndpZHRoLHMuaGVpZ2h0LGUuZGVmYXVsdFBpeGVsVmFsdWUsZS5lbmFibGVTa2lwLGUuY29tYmluYXRpb25PcGVyYXRvcixlLmdyaWRXaWR0aCxlLmdyaWRIZWlnaHQsZS5ncmlkT2Zmc2V0WCxlLmdyaWRPZmZzZXRZLGUuZ3JpZFZlY3RvclgsZS5ncmlkVmVjdG9yWSxvKTt0aGlzLmRyYXdCaXRtYXAocyxjKX1vbkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24oLi4uYXJndW1lbnRzKX1vblRhYmxlcyhlLHQsYSxyKXtsZXQgaT10aGlzLmN1c3RvbVRhYmxlcztpfHwodGhpcy5jdXN0b21UYWJsZXM9aT17fSk7aVtlXT1mdW5jdGlvbiBkZWNvZGVUYWJsZXNTZWdtZW50KGUsdCxhKXtjb25zdCByPWVbdF0saT00Mjk0OTY3Mjk1JnJlYWRVaW50MzIoZSx0KzEpLG49NDI5NDk2NzI5NSZyZWFkVWludDMyKGUsdCs1KSxzPW5ldyBSZWFkZXIoZSx0KzksYSksbz0xKyhyPj4xJjcpLGM9MSsocj4+NCY3KSxsPVtdO2xldCBoLHUsZD1pO2Rve2g9cy5yZWFkQml0cyhvKTt1PXMucmVhZEJpdHMoYyk7bC5wdXNoKG5ldyBIdWZmbWFuTGluZShbZCxoLHUsMF0pKTtkKz0xPDx1fXdoaWxlKGQ8bik7aD1zLnJlYWRCaXRzKG8pO2wucHVzaChuZXcgSHVmZm1hbkxpbmUoW2ktMSxoLDMyLDAsImxvd2VyIl0pKTtoPXMucmVhZEJpdHMobyk7bC5wdXNoKG5ldyBIdWZmbWFuTGluZShbbixoLDMyLDBdKSk7aWYoMSZyKXtoPXMucmVhZEJpdHMobyk7bC5wdXNoKG5ldyBIdWZmbWFuTGluZShbaCwwXSkpfXJldHVybiBuZXcgSHVmZm1hblRhYmxlKGwsITEpfSh0LGEscil9fWNsYXNzIEh1ZmZtYW5MaW5le2NvbnN0cnVjdG9yKGUpe2lmKDI9PT1lLmxlbmd0aCl7dGhpcy5pc09PQj0hMDt0aGlzLnJhbmdlTG93PTA7dGhpcy5wcmVmaXhMZW5ndGg9ZVswXTt0aGlzLnJhbmdlTGVuZ3RoPTA7dGhpcy5wcmVmaXhDb2RlPWVbMV07dGhpcy5pc0xvd2VyUmFuZ2U9ITF9ZWxzZXt0aGlzLmlzT09CPSExO3RoaXMucmFuZ2VMb3c9ZVswXTt0aGlzLnByZWZpeExlbmd0aD1lWzFdO3RoaXMucmFuZ2VMZW5ndGg9ZVsyXTt0aGlzLnByZWZpeENvZGU9ZVszXTt0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09ZVs0XX19fWNsYXNzIEh1ZmZtYW5UcmVlTm9kZXtjb25zdHJ1Y3RvcihlKXt0aGlzLmNoaWxkcmVuPVtdO2lmKGUpe3RoaXMuaXNMZWFmPSEwO3RoaXMucmFuZ2VMZW5ndGg9ZS5yYW5nZUxlbmd0aDt0aGlzLnJhbmdlTG93PWUucmFuZ2VMb3c7dGhpcy5pc0xvd2VyUmFuZ2U9ZS5pc0xvd2VyUmFuZ2U7dGhpcy5pc09PQj1lLmlzT09CfWVsc2UgdGhpcy5pc0xlYWY9ITF9YnVpbGRUcmVlKGUsdCl7Y29uc3QgYT1lLnByZWZpeENvZGU+PnQmMTtpZih0PD0wKXRoaXMuY2hpbGRyZW5bYV09bmV3IEh1ZmZtYW5UcmVlTm9kZShlKTtlbHNle2xldCByPXRoaXMuY2hpbGRyZW5bYV07cnx8KHRoaXMuY2hpbGRyZW5bYV09cj1uZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpKTtyLmJ1aWxkVHJlZShlLHQtMSl9fWRlY29kZU5vZGUoZSl7aWYodGhpcy5pc0xlYWYpe2lmKHRoaXMuaXNPT0IpcmV0dXJuIG51bGw7Y29uc3QgdD1lLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO3JldHVybiB0aGlzLnJhbmdlTG93Kyh0aGlzLmlzTG93ZXJSYW5nZT8tdDp0KX1jb25zdCB0PXRoaXMuY2hpbGRyZW5bZS5yZWFkQml0KCldO2lmKCF0KXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gZGF0YSIpO3JldHVybiB0LmRlY29kZU5vZGUoZSl9fWNsYXNzIEh1ZmZtYW5UYWJsZXtjb25zdHJ1Y3RvcihlLHQpe3R8fHRoaXMuYXNzaWduUHJlZml4Q29kZXMoZSk7dGhpcy5yb290Tm9kZT1uZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT1lW3RdO2EucHJlZml4TGVuZ3RoPjAmJnRoaXMucm9vdE5vZGUuYnVpbGRUcmVlKGEsYS5wcmVmaXhMZW5ndGgtMSl9fWRlY29kZShlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfWFzc2lnblByZWZpeENvZGVzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGE9MDtmb3IobGV0IHI9MDtyPHQ7cisrKWE9TWF0aC5tYXgoYSxlW3JdLnByZWZpeExlbmd0aCk7Y29uc3Qgcj1uZXcgVWludDMyQXJyYXkoYSsxKTtmb3IobGV0IGE9MDthPHQ7YSsrKXJbZVthXS5wcmVmaXhMZW5ndGhdKys7bGV0IGksbixzLG89MSxjPTA7clswXT0wO2Zvcig7bzw9YTspe2M9YytyW28tMV08PDE7aT1jO249MDtmb3IoO248dDspe3M9ZVtuXTtpZihzLnByZWZpeExlbmd0aD09PW8pe3MucHJlZml4Q29kZT1pO2krK31uKyt9bysrfX19Y29uc3QgYXI9e307ZnVuY3Rpb24gZ2V0U3RhbmRhcmRUYWJsZShlKXtsZXQgdCxhPWFyW2VdO2lmKGEpcmV0dXJuIGE7c3dpdGNoKGUpe2Nhc2UgMTp0PVtbMCwxLDQsMF0sWzE2LDIsOCwyXSxbMjcyLDMsMTYsNl0sWzY1ODA4LDMsMzIsN11dO2JyZWFrO2Nhc2UgMjp0PVtbMCwxLDAsMF0sWzEsMiwwLDJdLFsyLDMsMCw2XSxbMyw0LDMsMTRdLFsxMSw1LDYsMzBdLFs3NSw2LDMyLDYyXSxbNiw2M11dO2JyZWFrO2Nhc2UgMzp0PVtbLTI1Niw4LDgsMjU0XSxbMCwxLDAsMF0sWzEsMiwwLDJdLFsyLDMsMCw2XSxbMyw0LDMsMTRdLFsxMSw1LDYsMzBdLFstMjU3LDgsMzIsMjU1LCJsb3dlciJdLFs3NSw3LDMyLDEyNl0sWzYsNjJdXTticmVhaztjYXNlIDQ6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDAsNl0sWzQsNCwzLDE0XSxbMTIsNSw2LDMwXSxbNzYsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgNTp0PVtbLTI1NSw3LDgsMTI2XSxbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFstMjU2LDcsMzIsMTI3LCJsb3dlciJdLFs3Niw2LDMyLDYyXV07YnJlYWs7Y2FzZSA2OnQ9W1stMjA0OCw1LDEwLDI4XSxbLTEwMjQsNCw5LDhdLFstNTEyLDQsOCw5XSxbLTI1Niw0LDcsMTBdLFstMTI4LDUsNiwyOV0sWy02NCw1LDUsMzBdLFstMzIsNCw1LDExXSxbMCwyLDcsMF0sWzEyOCwzLDcsMl0sWzI1NiwzLDgsM10sWzUxMiw0LDksMTJdLFsxMDI0LDQsMTAsMTNdLFstMjA0OSw2LDMyLDYyLCJsb3dlciJdLFsyMDQ4LDYsMzIsNjNdXTticmVhaztjYXNlIDc6dD1bWy0xMDI0LDQsOSw4XSxbLTUxMiwzLDgsMF0sWy0yNTYsNCw3LDldLFstMTI4LDUsNiwyNl0sWy02NCw1LDUsMjddLFstMzIsNCw1LDEwXSxbMCw0LDUsMTFdLFszMiw1LDUsMjhdLFs2NCw1LDYsMjldLFsxMjgsNCw3LDEyXSxbMjU2LDMsOCwxXSxbNTEyLDMsOSwyXSxbMTAyNCwzLDEwLDNdLFstMTAyNSw1LDMyLDMwLCJsb3dlciJdLFsyMDQ4LDUsMzIsMzFdXTticmVhaztjYXNlIDg6dD1bWy0xNSw4LDMsMjUyXSxbLTcsOSwxLDUwOF0sWy01LDgsMSwyNTNdLFstMyw5LDAsNTA5XSxbLTIsNywwLDEyNF0sWy0xLDQsMCwxMF0sWzAsMiwxLDBdLFsyLDUsMCwyNl0sWzMsNiwwLDU4XSxbNCwzLDQsNF0sWzIwLDYsMSw1OV0sWzIyLDQsNCwxMV0sWzM4LDQsNSwxMl0sWzcwLDUsNiwyN10sWzEzNCw1LDcsMjhdLFsyNjIsNiw3LDYwXSxbMzkwLDcsOCwxMjVdLFs2NDYsNiwxMCw2MV0sWy0xNiw5LDMyLDUxMCwibG93ZXIiXSxbMTY3MCw5LDMyLDUxMV0sWzIsMV1dO2JyZWFrO2Nhc2UgOTp0PVtbLTMxLDgsNCwyNTJdLFstMTUsOSwyLDUwOF0sWy0xMSw4LDIsMjUzXSxbLTcsOSwxLDUwOV0sWy01LDcsMSwxMjRdLFstMyw0LDEsMTBdLFstMSwzLDEsMl0sWzEsMywxLDNdLFszLDUsMSwyNl0sWzUsNiwxLDU4XSxbNywzLDUsNF0sWzM5LDYsMiw1OV0sWzQzLDQsNSwxMV0sWzc1LDQsNiwxMl0sWzEzOSw1LDcsMjddLFsyNjcsNSw4LDI4XSxbNTIzLDYsOCw2MF0sWzc3OSw3LDksMTI1XSxbMTI5MSw2LDExLDYxXSxbLTMyLDksMzIsNTEwLCJsb3dlciJdLFszMzM5LDksMzIsNTExXSxbMiwwXV07YnJlYWs7Y2FzZSAxMDp0PVtbLTIxLDcsNCwxMjJdLFstNSw4LDAsMjUyXSxbLTQsNywwLDEyM10sWy0zLDUsMCwyNF0sWy0yLDIsMiwwXSxbMiw1LDAsMjVdLFszLDYsMCw1NF0sWzQsNywwLDEyNF0sWzUsOCwwLDI1M10sWzYsMiw2LDFdLFs3MCw1LDUsMjZdLFsxMDIsNiw1LDU1XSxbMTM0LDYsNiw1Nl0sWzE5OCw2LDcsNTddLFszMjYsNiw4LDU4XSxbNTgyLDYsOSw1OV0sWzEwOTQsNiwxMCw2MF0sWzIxMTgsNywxMSwxMjVdLFstMjIsOCwzMiwyNTQsImxvd2VyIl0sWzQxNjYsOCwzMiwyNTVdLFsyLDJdXTticmVhaztjYXNlIDExOnQ9W1sxLDEsMCwwXSxbMiwyLDEsMl0sWzQsNCwwLDEyXSxbNSw0LDEsMTNdLFs3LDUsMSwyOF0sWzksNSwyLDI5XSxbMTMsNiwyLDYwXSxbMTcsNywyLDEyMl0sWzIxLDcsMywxMjNdLFsyOSw3LDQsMTI0XSxbNDUsNyw1LDEyNV0sWzc3LDcsNiwxMjZdLFsxNDEsNywzMiwxMjddXTticmVhaztjYXNlIDEyOnQ9W1sxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywxLDZdLFs1LDUsMCwyOF0sWzYsNSwxLDI5XSxbOCw2LDEsNjBdLFsxMCw3LDAsMTIyXSxbMTEsNywxLDEyM10sWzEzLDcsMiwxMjRdLFsxNyw3LDMsMTI1XSxbMjUsNyw0LDEyNl0sWzQxLDgsNSwyNTRdLFs3Myw4LDMyLDI1NV1dO2JyZWFrO2Nhc2UgMTM6dD1bWzEsMSwwLDBdLFsyLDMsMCw0XSxbMyw0LDAsMTJdLFs0LDUsMCwyOF0sWzUsNCwxLDEzXSxbNywzLDMsNV0sWzE1LDYsMSw1OF0sWzE3LDYsMiw1OV0sWzIxLDYsMyw2MF0sWzI5LDYsNCw2MV0sWzQ1LDYsNSw2Ml0sWzc3LDcsNiwxMjZdLFsxNDEsNywzMiwxMjddXTticmVhaztjYXNlIDE0OnQ9W1stMiwzLDAsNF0sWy0xLDMsMCw1XSxbMCwxLDAsMF0sWzEsMywwLDZdLFsyLDMsMCw3XV07YnJlYWs7Y2FzZSAxNTp0PVtbLTI0LDcsNCwxMjRdLFstOCw2LDIsNjBdLFstNCw1LDEsMjhdLFstMiw0LDAsMTJdLFstMSwzLDAsNF0sWzAsMSwwLDBdLFsxLDMsMCw1XSxbMiw0LDAsMTNdLFszLDUsMSwyOV0sWzUsNiwyLDYxXSxbOSw3LDQsMTI1XSxbLTI1LDcsMzIsMTI2LCJsb3dlciJdLFsyNSw3LDMyLDEyN11dO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYHN0YW5kYXJkIHRhYmxlIEIuJHtlfSBkb2VzIG5vdCBleGlzdGApfWZvcihsZXQgZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKyl0W2VdPW5ldyBIdWZmbWFuTGluZSh0W2VdKTthPW5ldyBIdWZmbWFuVGFibGUodCwhMCk7YXJbZV09YTtyZXR1cm4gYX1jbGFzcyBSZWFkZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuZGF0YT1lO3RoaXMuc3RhcnQ9dDt0aGlzLmVuZD1hO3RoaXMucG9zaXRpb249dDt0aGlzLnNoaWZ0PS0xO3RoaXMuY3VycmVudEJ5dGU9MH1yZWFkQml0KCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgSmJpZzJFcnJvcigiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdO3RoaXMuc2hpZnQ9N31jb25zdCBlPXRoaXMuY3VycmVudEJ5dGU+PnRoaXMuc2hpZnQmMTt0aGlzLnNoaWZ0LS07cmV0dXJuIGV9cmVhZEJpdHMoZSl7bGV0IHQsYT0wO2Zvcih0PWUtMTt0Pj0wO3QtLSlhfD10aGlzLnJlYWRCaXQoKTw8dDtyZXR1cm4gYX1ieXRlQWxpZ24oKXt0aGlzLnNoaWZ0PS0xfW5leHQoKXtyZXR1cm4gdGhpcy5wb3NpdGlvbj49dGhpcy5lbmQ/LTE6dGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK119fWZ1bmN0aW9uIGdldEN1c3RvbUh1ZmZtYW5UYWJsZShlLHQsYSl7bGV0IHI9MDtmb3IobGV0IGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspe2NvbnN0IG49YVt0W2ldXTtpZihuKXtpZihlPT09cilyZXR1cm4gbjtyKyt9fXRocm93IG5ldyBKYmlnMkVycm9yKCJjYW4ndCBmaW5kIGN1c3RvbSBIdWZmbWFuIHRhYmxlIil9ZnVuY3Rpb24gcmVhZFVuY29tcHJlc3NlZEJpdG1hcChlLHQsYSl7Y29uc3Qgcj1bXTtmb3IobGV0IGk9MDtpPGE7aSsrKXtjb25zdCBhPW5ldyBVaW50OEFycmF5KHQpO3IucHVzaChhKTtmb3IobGV0IHI9MDtyPHQ7cisrKWFbcl09ZS5yZWFkQml0KCk7ZS5ieXRlQWxpZ24oKX1yZXR1cm4gcn1mdW5jdGlvbiBkZWNvZGVNTVJCaXRtYXAoZSx0LGEscil7Y29uc3QgaT1uZXcgQ0NJVFRGYXhEZWNvZGVyKGUse0s6LTEsQ29sdW1uczp0LFJvd3M6YSxCbGFja0lzMTohMCxFbmRPZkJsb2NrOnJ9KSxuPVtdO2xldCBzLG89ITE7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7Y29uc3QgZT1uZXcgVWludDhBcnJheSh0KTtuLnB1c2goZSk7bGV0IGE9LTE7Zm9yKGxldCByPTA7cjx0O3IrKyl7aWYoYTwwKXtzPWkucmVhZE5leHRDaGFyKCk7aWYoLTE9PT1zKXtzPTA7bz0hMH1hPTd9ZVtyXT1zPj5hJjE7YS0tfX1pZihyJiYhbyl7Y29uc3QgZT01O2ZvcihsZXQgdD0wO3Q8ZSYmLTEhPT1pLnJlYWROZXh0Q2hhcigpO3QrKyk7fXJldHVybiBufWNsYXNzIEpiaWcySW1hZ2V7cGFyc2VDaHVua3MoZSl7cmV0dXJuIGZ1bmN0aW9uIHBhcnNlSmJpZzJDaHVua3MoZSl7Y29uc3QgdD1uZXcgU2ltcGxlU2VnbWVudFZpc2l0b3I7Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPWVbYV07cHJvY2Vzc1NlZ21lbnRzKHJlYWRTZWdtZW50cyh7fSxyLmRhdGEsci5zdGFydCxyLmVuZCksdCl9cmV0dXJuIHQuYnVmZmVyfShlKX1wYXJzZShlKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZDogSmJpZzJJbWFnZS5wYXJzZSIpfX1jbGFzcyBKYmlnMlN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1hfWdldCBieXRlcygpe3JldHVybiBzaGFkb3codGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe3RoaXMuZGVjb2RlSW1hZ2UoKX1kZWNvZGVJbWFnZShlKXtpZih0aGlzLmVvZilyZXR1cm4gdGhpcy5idWZmZXI7ZXx8PXRoaXMuYnl0ZXM7Y29uc3QgdD1uZXcgSmJpZzJJbWFnZSxhPVtdO2lmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT10aGlzLnBhcmFtcy5nZXQoIkpCSUcyR2xvYmFscyIpO2lmKGUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKXtjb25zdCB0PWUuZ2V0Qnl0ZXMoKTthLnB1c2goe2RhdGE6dCxzdGFydDowLGVuZDp0Lmxlbmd0aH0pfX1hLnB1c2goe2RhdGE6ZSxzdGFydDowLGVuZDplLmxlbmd0aH0pO2NvbnN0IHI9dC5wYXJzZUNodW5rcyhhKSxpPXIubGVuZ3RoO2ZvcihsZXQgZT0wO2U8aTtlKyspcltlXV49MjU1O3RoaXMuYnVmZmVyPXI7dGhpcy5idWZmZXJMZW5ndGg9aTt0aGlzLmVvZj0hMDtyZXR1cm4gdGhpcy5idWZmZXJ9Z2V0IGNhbkFzeW5jRGVjb2RlSW1hZ2VGcm9tQnVmZmVyKCl7cmV0dXJuIHRoaXMuc3RyZWFtLmlzQXN5bmN9fWNsYXNzIEpweFN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1hfWdldCBieXRlcygpe3JldHVybiBzaGFkb3codGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jayhlKXt1bnJlYWNoYWJsZSgiSnB4U3RyZWFtLnJlYWRCbG9jayIpfWdldCBpc0FzeW5jRGVjb2Rlcigpe3JldHVybiEwfWFzeW5jIGRlY29kZUltYWdlKGUsdCl7aWYodGhpcy5lb2YpcmV0dXJuIHRoaXMuYnVmZmVyO2V8fD10aGlzLmJ5dGVzO3RoaXMuYnVmZmVyPWF3YWl0IEpweEltYWdlLmRlY29kZShlLHQpO3RoaXMuYnVmZmVyTGVuZ3RoPXRoaXMuYnVmZmVyLmxlbmd0aDt0aGlzLmVvZj0hMDtyZXR1cm4gdGhpcy5idWZmZXJ9Z2V0IGNhbkFzeW5jRGVjb2RlSW1hZ2VGcm9tQnVmZmVyKCl7cmV0dXJuIHRoaXMuc3RyZWFtLmlzQXN5bmN9fWNsYXNzIExaV1N0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMuY2FjaGVkRGF0YT0wO3RoaXMuYml0c0NhY2hlZD0wO2NvbnN0IHI9NDA5NixpPXtlYXJseUNoYW5nZTphLGNvZGVMZW5ndGg6OSxuZXh0Q29kZToyNTgsZGljdGlvbmFyeVZhbHVlczpuZXcgVWludDhBcnJheShyKSxkaWN0aW9uYXJ5TGVuZ3RoczpuZXcgVWludDE2QXJyYXkociksZGljdGlvbmFyeVByZXZDb2RlczpuZXcgVWludDE2QXJyYXkociksY3VycmVudFNlcXVlbmNlOm5ldyBVaW50OEFycmF5KHIpLGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDowfTtmb3IobGV0IGU9MDtlPDI1NjsrK2Upe2kuZGljdGlvbmFyeVZhbHVlc1tlXT1lO2kuZGljdGlvbmFyeUxlbmd0aHNbZV09MX10aGlzLmx6d1N0YXRlPWl9cmVhZEJpdHMoZSl7bGV0IHQ9dGhpcy5iaXRzQ2FjaGVkLGE9dGhpcy5jYWNoZWREYXRhO2Zvcig7dDxlOyl7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7aWYoLTE9PT1lKXt0aGlzLmVvZj0hMDtyZXR1cm4gbnVsbH1hPWE8PDh8ZTt0Kz04fXRoaXMuYml0c0NhY2hlZD10LT1lO3RoaXMuY2FjaGVkRGF0YT1hO3RoaXMubGFzdENvZGU9bnVsbDtyZXR1cm4gYT4+PnQmKDE8PGUpLTF9cmVhZEJsb2NrKCl7bGV0IGUsdCxhLHI9MTAyNDtjb25zdCBpPXRoaXMubHp3U3RhdGU7aWYoIWkpcmV0dXJuO2NvbnN0IG49aS5lYXJseUNoYW5nZTtsZXQgcz1pLm5leHRDb2RlO2NvbnN0IG89aS5kaWN0aW9uYXJ5VmFsdWVzLGM9aS5kaWN0aW9uYXJ5TGVuZ3RocyxsPWkuZGljdGlvbmFyeVByZXZDb2RlcztsZXQgaD1pLmNvZGVMZW5ndGgsdT1pLnByZXZDb2RlO2NvbnN0IGQ9aS5jdXJyZW50U2VxdWVuY2U7bGV0IGY9aS5jdXJyZW50U2VxdWVuY2VMZW5ndGgsZz0wLHA9dGhpcy5idWZmZXJMZW5ndGgsbT10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtyKTtmb3IoZT0wO2U8NTEyO2UrKyl7Y29uc3QgZT10aGlzLnJlYWRCaXRzKGgpLGk9Zj4wO2lmKGU8MjU2KXtkWzBdPWU7Zj0xfWVsc2V7aWYoIShlPj0yNTgpKXtpZigyNTY9PT1lKXtoPTk7cz0yNTg7Zj0wO2NvbnRpbnVlfXRoaXMuZW9mPSEwO2RlbGV0ZSB0aGlzLmx6d1N0YXRlO2JyZWFrfWlmKGU8cyl7Zj1jW2VdO2Zvcih0PWYtMSxhPWU7dD49MDt0LS0pe2RbdF09b1thXTthPWxbYV19fWVsc2UgZFtmKytdPWRbMF19aWYoaSl7bFtzXT11O2Nbc109Y1t1XSsxO29bc109ZFswXTtzKys7aD1zK24mcytuLTE/aDowfE1hdGgubWluKE1hdGgubG9nKHMrbikvLjY5MzE0NzE4MDU1OTk0NTMrMSwxMil9dT1lO2crPWY7aWYocjxnKXtkb3tyKz01MTJ9d2hpbGUocjxnKTttPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK3IpfWZvcih0PTA7dDxmO3QrKyltW3ArK109ZFt0XX1pLm5leHRDb2RlPXM7aS5jb2RlTGVuZ3RoPWg7aS5wcmV2Q29kZT11O2kuY3VycmVudFNlcXVlbmNlTGVuZ3RoPWY7dGhpcy5idWZmZXJMZW5ndGg9cH19Y2xhc3MgUHJlZGljdG9yU3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcih0KTtpZighKGEgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gZTtjb25zdCByPXRoaXMucHJlZGljdG9yPWEuZ2V0KCJQcmVkaWN0b3IiKXx8MTtpZihyPD0xKXJldHVybiBlO2lmKDIhPT1yJiYocjwxMHx8cj4xNSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7cn1gKTt0aGlzLnJlYWRCbG9jaz0yPT09cj90aGlzLnJlYWRCbG9ja1RpZmY6dGhpcy5yZWFkQmxvY2tQbmc7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O2NvbnN0IGk9dGhpcy5jb2xvcnM9YS5nZXQoIkNvbG9ycyIpfHwxLG49dGhpcy5iaXRzPWEuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgscz10aGlzLmNvbHVtbnM9YS5nZXQoIkNvbHVtbnMiKXx8MTt0aGlzLnBpeEJ5dGVzPWkqbis3Pj4zO3RoaXMucm93Qnl0ZXM9cyppKm4rNz4+MztyZXR1cm4gdGhpc31yZWFkQmxvY2tUaWZmKCl7Y29uc3QgZT10aGlzLnJvd0J5dGVzLHQ9dGhpcy5idWZmZXJMZW5ndGgsYT10aGlzLmVuc3VyZUJ1ZmZlcih0K2UpLHI9dGhpcy5iaXRzLGk9dGhpcy5jb2xvcnMsbj10aGlzLnN0cmVhbS5nZXRCeXRlcyhlKTt0aGlzLmVvZj0hbi5sZW5ndGg7aWYodGhpcy5lb2YpcmV0dXJuO2xldCBzLG89MCxjPTAsbD0wLGg9MCx1PXQ7aWYoMT09PXImJjE9PT1pKWZvcihzPTA7czxlOysrcyl7bGV0IGU9bltzXV5vO2VePWU+PjE7ZV49ZT4+MjtlXj1lPj40O289KDEmZSk8PDc7YVt1KytdPWV9ZWxzZSBpZig4PT09cil7Zm9yKHM9MDtzPGk7KytzKWFbdSsrXT1uW3NdO2Zvcig7czxlOysrcyl7YVt1XT1hW3UtaV0rbltzXTt1Kyt9fWVsc2UgaWYoMTY9PT1yKXtjb25zdCB0PTIqaTtmb3Iocz0wO3M8dDsrK3MpYVt1KytdPW5bc107Zm9yKDtzPGU7cys9Mil7Y29uc3QgZT0oKDI1NSZuW3NdKTw8OCkrKDI1NSZuW3MrMV0pKygoMjU1JmFbdS10XSk8PDgpKygyNTUmYVt1LXQrMV0pO2FbdSsrXT1lPj44JjI1NTthW3UrK109MjU1JmV9fWVsc2V7Y29uc3QgZT1uZXcgVWludDhBcnJheShpKzEpLHU9KDE8PHIpLTE7bGV0IGQ9MCxmPXQ7Y29uc3QgZz10aGlzLmNvbHVtbnM7Zm9yKHM9MDtzPGc7KytzKWZvcihsZXQgdD0wO3Q8aTsrK3Qpe2lmKGw8cil7bz1vPDw4fDI1NSZuW2QrK107bCs9OH1lW3RdPWVbdF0rKG8+PmwtcikmdTtsLT1yO2M9Yzw8cnxlW3RdO2grPXI7aWYoaD49OCl7YVtmKytdPWM+PmgtOCYyNTU7aC09OH19aD4wJiYoYVtmKytdPShjPDw4LWgpKyhvJigxPDw4LWgpLTEpKX10aGlzLmJ1ZmZlckxlbmd0aCs9ZX1yZWFkQmxvY2tQbmcoKXtjb25zdCBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLnBpeEJ5dGVzLGE9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpLHI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZXMoZSk7dGhpcy5lb2Y9IXIubGVuZ3RoO2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBpPXRoaXMuYnVmZmVyTGVuZ3RoLG49dGhpcy5lbnN1cmVCdWZmZXIoaStlKTtsZXQgcz1uLnN1YmFycmF5KGktZSxpKTswPT09cy5sZW5ndGgmJihzPW5ldyBVaW50OEFycmF5KGUpKTtsZXQgbyxjLGwsaD1pO3N3aXRjaChhKXtjYXNlIDA6Zm9yKG89MDtvPGU7KytvKW5baCsrXT1yW29dO2JyZWFrO2Nhc2UgMTpmb3Iobz0wO288dDsrK28pbltoKytdPXJbb107Zm9yKDtvPGU7KytvKXtuW2hdPW5baC10XStyW29dJjI1NTtoKyt9YnJlYWs7Y2FzZSAyOmZvcihvPTA7bzxlOysrbyluW2grK109c1tvXStyW29dJjI1NTticmVhaztjYXNlIDM6Zm9yKG89MDtvPHQ7KytvKW5baCsrXT0oc1tvXT4+MSkrcltvXTtmb3IoO288ZTsrK28pe25baF09KHNbb10rbltoLXRdPj4xKStyW29dJjI1NTtoKyt9YnJlYWs7Y2FzZSA0OmZvcihvPTA7bzx0Oysrbyl7Yz1zW29dO2w9cltvXTtuW2grK109YytsfWZvcig7bzxlOysrbyl7Yz1zW29dO2NvbnN0IGU9c1tvLXRdLGE9bltoLXRdLGk9YStjLWU7bGV0IHU9aS1hO3U8MCYmKHU9LXUpO2xldCBkPWktYztkPDAmJihkPS1kKTtsZXQgZj1pLWU7ZjwwJiYoZj0tZik7bD1yW29dO25baCsrXT11PD1kJiZ1PD1mP2ErbDpkPD1mP2MrbDplK2x9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHthfWApfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfX1jbGFzcyBSdW5MZW5ndGhTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXtzdXBlcih0KTt0aGlzLnN0cmVhbT1lO3RoaXMuZGljdD1lLmRpY3R9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl7dGhpcy5lb2Y9ITA7cmV0dXJufWxldCB0LGE9dGhpcy5idWZmZXJMZW5ndGgscj1lWzBdO2lmKHI8MTI4KXt0PXRoaXMuZW5zdXJlQnVmZmVyKGErcisxKTt0W2ErK109ZVsxXTtpZihyPjApe2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0Qnl0ZXMocik7dC5zZXQoZSxhKTthKz1yfX1lbHNle3I9MjU3LXI7dD10aGlzLmVuc3VyZUJ1ZmZlcihhK3IrMSk7dC5maWxsKGVbMV0sYSxhK3IpO2ErPXJ9dGhpcy5idWZmZXJMZW5ndGg9YX19Y2xhc3MgUGFyc2Vye2NvbnN0cnVjdG9yKHtsZXhlcjplLHhyZWY6dCxhbGxvd1N0cmVhbXM6YT0hMSxyZWNvdmVyeU1vZGU6cj0hMX0pe3RoaXMubGV4ZXI9ZTt0aGlzLnhyZWY9dDt0aGlzLmFsbG93U3RyZWFtcz1hO3RoaXMucmVjb3ZlcnlNb2RlPXI7dGhpcy5pbWFnZUNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5faW1hZ2VJZD0wO3RoaXMucmVmaWxsKCl9cmVmaWxsKCl7dGhpcy5idWYxPXRoaXMubGV4ZXIuZ2V0T2JqKCk7dGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9c2hpZnQoKXtpZih0aGlzLmJ1ZjIgaW5zdGFuY2VvZiBDbWQmJiJJRCI9PT10aGlzLmJ1ZjIuY21kKXt0aGlzLmJ1ZjE9dGhpcy5idWYyO3RoaXMuYnVmMj1udWxsfWVsc2V7dGhpcy5idWYxPXRoaXMuYnVmMjt0aGlzLmJ1ZjI9dGhpcy5sZXhlci5nZXRPYmooKX19dHJ5U2hpZnQoKXt0cnl7dGhpcy5zaGlmdCgpO3JldHVybiEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiExfX1nZXRPYmooZT1udWxsKXtjb25zdCB0PXRoaXMuYnVmMTt0aGlzLnNoaWZ0KCk7aWYodCBpbnN0YW5jZW9mIENtZClzd2l0Y2godC5jbWQpe2Nhc2UiQkkiOnJldHVybiB0aGlzLm1ha2VJbmxpbmVJbWFnZShlKTtjYXNlIlsiOmNvbnN0IGE9W107Zm9yKDshaXNDbWQodGhpcy5idWYxLCJdIikmJnRoaXMuYnVmMSE9PXNhOylhLnB1c2godGhpcy5nZXRPYmooZSkpO2lmKHRoaXMuYnVmMT09PXNhKXtpZih0aGlzLnJlY292ZXJ5TW9kZSlyZXR1cm4gYTt0aHJvdyBuZXcgUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXkuIil9dGhpcy5zaGlmdCgpO3JldHVybiBhO2Nhc2UiPDwiOmNvbnN0IHI9bmV3IERpY3QodGhpcy54cmVmKTtmb3IoOyFpc0NtZCh0aGlzLmJ1ZjEsIj4+IikmJnRoaXMuYnVmMSE9PXNhOyl7aWYoISh0aGlzLmJ1ZjEgaW5zdGFuY2VvZiBOYW1lKSl7aW5mbygiTWFsZm9ybWVkIGRpY3Rpb25hcnk6IGtleSBtdXN0IGJlIGEgbmFtZSBvYmplY3QiKTt0aGlzLnNoaWZ0KCk7Y29udGludWV9Y29uc3QgdD10aGlzLmJ1ZjEubmFtZTt0aGlzLnNoaWZ0KCk7aWYodGhpcy5idWYxPT09c2EpYnJlYWs7ci5zZXQodCx0aGlzLmdldE9iaihlKSl9aWYodGhpcy5idWYxPT09c2Epe2lmKHRoaXMucmVjb3ZlcnlNb2RlKXJldHVybiByO3Rocm93IG5ldyBQYXJzZXJFT0ZFeGNlcHRpb24oIkVuZCBvZiBmaWxlIGluc2lkZSBkaWN0aW9uYXJ5LiIpfWlmKGlzQ21kKHRoaXMuYnVmMiwic3RyZWFtIikpcmV0dXJuIHRoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShyLGUpOnI7dGhpcy5zaGlmdCgpO3JldHVybiByO2RlZmF1bHQ6cmV0dXJuIHR9aWYoTnVtYmVyLmlzSW50ZWdlcih0KSl7aWYoTnVtYmVyLmlzSW50ZWdlcih0aGlzLmJ1ZjEpJiZpc0NtZCh0aGlzLmJ1ZjIsIlIiKSl7Y29uc3QgZT1SZWYuZ2V0KHQsdGhpcy5idWYxKTt0aGlzLnNoaWZ0KCk7dGhpcy5zaGlmdCgpO3JldHVybiBlfXJldHVybiB0fXJldHVybiJzdHJpbmciPT10eXBlb2YgdCYmZT9lLmRlY3J5cHRTdHJpbmcodCk6dH1maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKXtjb25zdHtrbm93bkNvbW1hbmRzOnR9PXRoaXMubGV4ZXIsYT1lLnBvcztsZXQgcixpLG49MDtmb3IoOy0xIT09KHI9ZS5nZXRCeXRlKCkpOylpZigwPT09biluPTY5PT09cj8xOjA7ZWxzZSBpZigxPT09biluPTczPT09cj8yOjA7ZWxzZSBpZigzMj09PXJ8fDEwPT09cnx8MTM9PT1yKXtpPWUucG9zO2NvbnN0IGE9ZS5wZWVrQnl0ZXMoMTUpLHM9YS5sZW5ndGg7aWYoMD09PXMpYnJlYWs7Zm9yKGxldCBlPTA7ZTxzO2UrKyl7cj1hW2VdO2lmKCgwIT09cnx8MD09PWFbZSsxXSkmJigxMCE9PXImJjEzIT09ciYmKHI8MzJ8fHI+MTI3KSkpe249MDticmVha319aWYoMiE9PW4pY29udGludWU7aWYoIXQpe3dhcm4oImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kIC0gYGxleGVyLmtub3duQ29tbWFuZHNgIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1jb25zdCBvPW5ldyBMZXhlcihuZXcgU3RyZWFtKGUucGVla0J5dGVzKDc1KSksdCk7by5faGV4U3RyaW5nV2Fybj0oKT0+e307bGV0IGM9MDtmb3IoOzspe2NvbnN0IGU9by5nZXRPYmooKTtpZihlPT09c2Epe249MDticmVha31pZihlIGluc3RhbmNlb2YgQ21kKXtjb25zdCBhPXRbZS5jbWRdO2lmKCFhKXtuPTA7YnJlYWt9aWYoYS52YXJpYWJsZUFyZ3M/Yzw9YS5udW1BcmdzOmM9PT1hLm51bUFyZ3MpYnJlYWs7Yz0wO2NvbnRpbnVlfWMrK31pZigyPT09bilicmVha31lbHNlIG49MDtpZigtMT09PXIpe3dhcm4oImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKTtpZihpKXt3YXJuKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpO2Uuc2tpcCgtKGUucG9zLWkpKX19bGV0IHM9NDtlLnNraXAoLXMpO3I9ZS5wZWVrQnl0ZSgpO2Uuc2tpcChzKTtpc1doaXRlU3BhY2Uocil8fHMtLTtyZXR1cm4gZS5wb3Mtcy1hfWZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoZSl7Y29uc3QgdD1lLnBvcztsZXQgYSxyLGk9ITE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09YSl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0OnI9ZS5nZXRVaW50MTYoKTtyPjI/ZS5za2lwKHItMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfWNvbnN0IG49ZS5wb3MtdDtpZigtMT09PWEpe3dhcm4oIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIik7ZS5za2lwKC1uKTtyZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKX10aGlzLmlubGluZVN0cmVhbVNraXBFSShlKTtyZXR1cm4gbn1maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChlKXtjb25zdCB0PWUucG9zO2xldCBhO2Zvcig7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDEyNj09PWEpe2NvbnN0IHQ9ZS5wb3M7YT1lLnBlZWtCeXRlKCk7Zm9yKDtpc1doaXRlU3BhY2UoYSk7KXtlLnNraXAoKTthPWUucGVla0J5dGUoKX1pZig2Mj09PWEpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPnQpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7aWYoNjk9PT10WzBdJiY3Mz09PXRbMV0pYnJlYWt9fWNvbnN0IHI9ZS5wb3MtdDtpZigtMT09PWEpe3dhcm4oIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtcik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIHJ9ZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IGE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKSYmNjIhPT1hOyk7Y29uc3Qgcj1lLnBvcy10O2lmKC0xPT09YSl7d2FybigiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtcik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIHJ9aW5saW5lU3RyZWFtU2tpcEVJKGUpe2xldCB0LGE9MDtmb3IoOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YSlhPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YSlhPTczPT09dD8yOjA7ZWxzZSBpZigyPT09YSlicmVha31tYWtlSW5saW5lSW1hZ2UoZSl7Y29uc3QgdD10aGlzLmxleGVyLGE9dC5zdHJlYW0scj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBpO2Zvcig7IWlzQ21kKHRoaXMuYnVmMSwiSUQiKSYmdGhpcy5idWYxIT09c2E7KXtpZighKHRoaXMuYnVmMSBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7Y29uc3QgdD10aGlzLmJ1ZjEubmFtZTt0aGlzLnNoaWZ0KCk7aWYodGhpcy5idWYxPT09c2EpYnJlYWs7clt0XT10aGlzLmdldE9iaihlKX0tMSE9PXQuYmVnaW5JbmxpbmVJbWFnZVBvcyYmKGk9YS5wb3MtdC5iZWdpbklubGluZUltYWdlUG9zKTtjb25zdCBuPXRoaXMueHJlZi5mZXRjaElmUmVmKHIuRnx8ci5GaWx0ZXIpO2xldCBzO2lmKG4gaW5zdGFuY2VvZiBOYW1lKXM9bi5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3QgZT10aGlzLnhyZWYuZmV0Y2hJZlJlZihuWzBdKTtlIGluc3RhbmNlb2YgTmFtZSYmKHM9ZS5uYW1lKX1jb25zdCBvPWEucG9zO2xldCBjLGw7c3dpdGNoKHMpe2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6Yz10aGlzLmZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6Yz10aGlzLmZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKGEpO2JyZWFrO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpjPXRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGEpO2JyZWFrO2RlZmF1bHQ6Yz10aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGEpfWlmKGM8MWUzJiZpPjApe2NvbnN0IGU9YS5wb3M7YS5wb3M9dC5iZWdpbklubGluZUltYWdlUG9zO2w9ZnVuY3Rpb24gZ2V0SW5saW5lSW1hZ2VDYWNoZUtleShlKXtjb25zdCB0PVtdLGE9ZS5sZW5ndGg7bGV0IHI9MDtmb3IoO3I8YS0xOyl0LnB1c2goZVtyKytdPDw4fGVbcisrXSk7cjxhJiZ0LnB1c2goZVtyXSk7cmV0dXJuIGErIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0KX0oYS5nZXRCeXRlcyhpK2MpKTthLnBvcz1lO2NvbnN0IHI9dGhpcy5pbWFnZUNhY2hlW2xdO2lmKHZvaWQgMCE9PXIpe3RoaXMuYnVmMj1DbWQuZ2V0KCJFSSIpO3RoaXMuc2hpZnQoKTtyLnJlc2V0KCk7cmV0dXJuIHJ9fWNvbnN0IGg9bmV3IERpY3QodGhpcy54cmVmKTtmb3IoY29uc3QgZSBpbiByKWguc2V0KGUscltlXSk7bGV0IHU9YS5tYWtlU3ViU3RyZWFtKG8sYyxoKTtlJiYodT1lLmNyZWF0ZVN0cmVhbSh1LGMpKTt1PXRoaXMuZmlsdGVyKHUsaCxjKTt1LmRpY3Q9aDtpZih2b2lkIDAhPT1sKXt1LmNhY2hlS2V5PSJpbmxpbmVfaW1nXyIrICsrdGhpcy5faW1hZ2VJZDt0aGlzLmltYWdlQ2FjaGVbbF09dX10aGlzLmJ1ZjI9Q21kLmdldCgiRUkiKTt0aGlzLnNoaWZ0KCk7cmV0dXJuIHV9I3EoZSl7Y29uc3R7c3RyZWFtOnR9PXRoaXMubGV4ZXI7dC5wb3M9ZTtjb25zdCBhPW5ldyBVaW50OEFycmF5KFsxMDEsMTEwLDEwMF0pLHI9YS5sZW5ndGgsaT1bbmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsMTE0LDEwMSw5NywxMDldKSxuZXcgVWludDhBcnJheShbMTE1LDExNiwxMDEsOTcsMTA5XSksbmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsMTE0LDEwMSw5N10pXSxuPTktcjtmb3IoO3QucG9zPHQuZW5kOyl7Y29uc3Qgcz10LnBlZWtCeXRlcygyMDQ4KSxvPXMubGVuZ3RoLTk7aWYobzw9MClicmVhaztsZXQgYz0wO2Zvcig7YzxvOyl7bGV0IG89MDtmb3IoO288ciYmc1tjK29dPT09YVtvXTspbysrO2lmKG8+PXIpe2xldCByPSExO2Zvcihjb25zdCBlIG9mIGkpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGk9MDtmb3IoO2k8dCYmc1tjK28raV09PT1lW2ldOylpKys7aWYoaT49bil7cj0hMDticmVha31pZihpPj10KXtpZihpc1doaXRlU3BhY2Uoc1tjK28raV0pKXtpbmZvKGBGb3VuZCAiJHtieXRlc1RvU3RyaW5nKFsuLi5hLC4uLmVdKX0iIHdoZW4gc2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC5gKTtyPSEwfWJyZWFrfX1pZihyKXt0LnBvcys9YztyZXR1cm4gdC5wb3MtZX19YysrfXQucG9zKz1vfXJldHVybi0xfW1ha2VTdHJlYW0oZSx0KXtjb25zdCBhPXRoaXMubGV4ZXI7bGV0IHI9YS5zdHJlYW07YS5za2lwVG9OZXh0TGluZSgpO2NvbnN0IGk9ci5wb3MtMTtsZXQgbj1lLmdldCgiTGVuZ3RoIik7aWYoIU51bWJlci5pc0ludGVnZXIobikpe2luZm8oYEJhZCBsZW5ndGggIiR7biYmbi50b1N0cmluZygpfSIgaW4gc3RyZWFtLmApO249MH1yLnBvcz1pK247YS5uZXh0Q2hhcigpO2lmKHRoaXMudHJ5U2hpZnQoKSYmaXNDbWQodGhpcy5idWYyLCJlbmRzdHJlYW0iKSl0aGlzLnNoaWZ0KCk7ZWxzZXtuPXRoaXMuI3EoaSk7aWYobjwwKXRocm93IG5ldyBGb3JtYXRFcnJvcigiTWlzc2luZyBlbmRzdHJlYW0gY29tbWFuZC4iKTthLm5leHRDaGFyKCk7dGhpcy5zaGlmdCgpO3RoaXMuc2hpZnQoKX10aGlzLnNoaWZ0KCk7cj1yLm1ha2VTdWJTdHJlYW0oaSxuLGUpO3QmJihyPXQuY3JlYXRlU3RyZWFtKHIsbikpO3I9dGhpcy5maWx0ZXIocixlLG4pO3IuZGljdD1lO3JldHVybiByfWZpbHRlcihlLHQsYSl7bGV0IHI9dC5nZXQoIkYiLCJGaWx0ZXIiKSxpPXQuZ2V0KCJEUCIsIkRlY29kZVBhcm1zIik7aWYociBpbnN0YW5jZW9mIE5hbWUpe0FycmF5LmlzQXJyYXkoaSkmJndhcm4oIi9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGJlIGFuIEFycmF5LCB3aGVuIC9GaWx0ZXIgaXMgYSBOYW1lLiIpO3JldHVybiB0aGlzLm1ha2VGaWx0ZXIoZSxyLm5hbWUsYSxpKX1sZXQgbj1hO2lmKEFycmF5LmlzQXJyYXkocikpe2NvbnN0IHQ9cixhPWk7Zm9yKGxldCBzPTAsbz10Lmxlbmd0aDtzPG87KytzKXtyPXRoaXMueHJlZi5mZXRjaElmUmVmKHRbc10pO2lmKCEociBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgQmFkIGZpbHRlciBuYW1lICIke3J9ImApO2k9bnVsbDtBcnJheS5pc0FycmF5KGEpJiZzIGluIGEmJihpPXRoaXMueHJlZi5mZXRjaElmUmVmKGFbc10pKTtlPXRoaXMubWFrZUZpbHRlcihlLHIubmFtZSxuLGkpO249bnVsbH19cmV0dXJuIGV9bWFrZUZpbHRlcihlLHQsYSxyKXtpZigwPT09YSl7d2FybihgRW1wdHkgIiR7dH0iIHN0cmVhbS5gKTtyZXR1cm4gbmV3IE51bGxTdHJlYW19dHJ5e3N3aXRjaCh0KXtjYXNlIkZsIjpjYXNlIkZsYXRlRGVjb2RlIjpyZXR1cm4gcj9uZXcgUHJlZGljdG9yU3RyZWFtKG5ldyBGbGF0ZVN0cmVhbShlLGEpLGEscik6bmV3IEZsYXRlU3RyZWFtKGUsYSk7Y2FzZSJMWlciOmNhc2UiTFpXRGVjb2RlIjpsZXQgdD0xO2lmKHIpe3IuaGFzKCJFYXJseUNoYW5nZSIpJiYodD1yLmdldCgiRWFybHlDaGFuZ2UiKSk7cmV0dXJuIG5ldyBQcmVkaWN0b3JTdHJlYW0obmV3IExaV1N0cmVhbShlLGEsdCksYSxyKX1yZXR1cm4gbmV3IExaV1N0cmVhbShlLGEsdCk7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpyZXR1cm4gbmV3IEpwZWdTdHJlYW0oZSxhLHIpO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIG5ldyBKcHhTdHJlYW0oZSxhLHIpO2Nhc2UiQTg1IjpjYXNlIkFTQ0lJODVEZWNvZGUiOnJldHVybiBuZXcgQXNjaWk4NVN0cmVhbShlLGEpO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpyZXR1cm4gbmV3IEFzY2lpSGV4U3RyZWFtKGUsYSk7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiBuZXcgQ0NJVFRGYXhTdHJlYW0oZSxhLHIpO2Nhc2UiUkwiOmNhc2UiUnVuTGVuZ3RoRGVjb2RlIjpyZXR1cm4gbmV3IFJ1bkxlbmd0aFN0cmVhbShlLGEpO2Nhc2UiSkJJRzJEZWNvZGUiOnJldHVybiBuZXcgSmJpZzJTdHJlYW0oZSxhLHIpfXdhcm4oYEZpbHRlciAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKGBJbnZhbGlkIHN0cmVhbTogIiR7ZX0iYCk7cmV0dXJuIG5ldyBOdWxsU3RyZWFtfX19Y29uc3QgcnI9WzEsMCwwLDAsMCwwLDAsMCwwLDEsMSwwLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMiwwLDAsMiwyLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdO2Z1bmN0aW9uIHRvSGV4RGlnaXQoZSl7cmV0dXJuIGU+PTQ4JiZlPD01Nz8xNSZlOmU+PTY1JiZlPD03MHx8ZT49OTcmJmU8PTEwMj85KygxNSZlKTotMX1jbGFzcyBMZXhlcntjb25zdHJ1Y3RvcihlLHQ9bnVsbCl7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCk7dGhpcy5zdHJCdWY9W107dGhpcy5rbm93bkNvbW1hbmRzPXQ7dGhpcy5faGV4U3RyaW5nTnVtV2Fybj0wO3RoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz0tMX1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1wZWVrQ2hhcigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfWdldE51bWJlcigpe2xldCBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxhPTAscj0xO2lmKDQ1PT09ZSl7cj0tMTtlPXRoaXMubmV4dENoYXIoKTs0NT09PWUmJihlPXRoaXMubmV4dENoYXIoKSl9ZWxzZSA0Mz09PWUmJihlPXRoaXMubmV4dENoYXIoKSk7aWYoMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSl7YT0xMDtlPXRoaXMubmV4dENoYXIoKX1pZihlPDQ4fHxlPjU3KXtjb25zdCB0PWBJbnZhbGlkIG51bWJlcjogJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSAoY2hhckNvZGUgJHtlfSlgO2lmKGlzV2hpdGVTcGFjZShlKXx8NDA9PT1lfHw2MD09PWV8fC0xPT09ZSl7aW5mbyhgTGV4ZXIuZ2V0TnVtYmVyIC0gIiR7dH0iLmApO3JldHVybiAwfXRocm93IG5ldyBGb3JtYXRFcnJvcih0KX1sZXQgaT1lLTQ4LG49MCxzPTE7Zm9yKDsoZT10aGlzLm5leHRDaGFyKCkpPj0wOylpZihlPj00OCYmZTw9NTcpe2NvbnN0IHI9ZS00ODtpZih0KW49MTAqbityO2Vsc2V7MCE9PWEmJihhKj0xMCk7aT0xMCppK3J9fWVsc2UgaWYoNDY9PT1lKXtpZigwIT09YSlicmVhazthPTF9ZWxzZSBpZig0NT09PWUpd2FybigiQmFkbHkgZm9ybWF0dGVkIG51bWJlcjogbWludXMgc2lnbiBpbiB0aGUgbWlkZGxlIik7ZWxzZXtpZig2OSE9PWUmJjEwMSE9PWUpYnJlYWs7ZT10aGlzLnBlZWtDaGFyKCk7aWYoNDM9PT1lfHw0NT09PWUpe3M9NDU9PT1lPy0xOjE7dGhpcy5uZXh0Q2hhcigpfWVsc2UgaWYoZTw0OHx8ZT41NylicmVhazt0PSEwfTAhPT1hJiYoaS89YSk7dCYmKGkqPTEwKioocypuKSk7cmV0dXJuIHIqaX1nZXRTdHJpbmcoKXtsZXQgZT0xLHQ9ITE7Y29uc3QgYT10aGlzLnN0ckJ1ZjthLmxlbmd0aD0wO2xldCByPXRoaXMubmV4dENoYXIoKTtmb3IoOzspe2xldCBpPSExO3N3aXRjaCgwfHIpe2Nhc2UtMTp3YXJuKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIik7dD0hMDticmVhaztjYXNlIDQwOisrZTthLnB1c2goIigiKTticmVhaztjYXNlIDQxOmlmKDA9PT0tLWUpe3RoaXMubmV4dENoYXIoKTt0PSEwfWVsc2UgYS5wdXNoKCIpIik7YnJlYWs7Y2FzZSA5MjpyPXRoaXMubmV4dENoYXIoKTtzd2l0Y2gocil7Y2FzZS0xOndhcm4oIlVudGVybWluYXRlZCBzdHJpbmciKTt0PSEwO2JyZWFrO2Nhc2UgMTEwOmEucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDphLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6YS5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6YS5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOmEucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShyKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmxldCBlPTE1JnI7cj10aGlzLm5leHRDaGFyKCk7aT0hMDtpZihyPj00OCYmcjw9NTUpe2U9KGU8PDMpKygxNSZyKTtyPXRoaXMubmV4dENoYXIoKTtpZihyPj00OCYmcjw9NTUpe2k9ITE7ZT0oZTw8MykrKDE1JnIpfX1hLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShyKSl9YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShyKSl9aWYodClicmVhaztpfHwocj10aGlzLm5leHRDaGFyKCkpfXJldHVybiBhLmpvaW4oIiIpfWdldE5hbWUoKXtsZXQgZSx0O2NvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDtmb3IoOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJiFycltlXTspaWYoMzU9PT1lKXtlPXRoaXMubmV4dENoYXIoKTtpZihycltlXSl7d2FybigiTGV4ZXJfZ2V0TmFtZTogTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci4iKTthLnB1c2goIiMiKTticmVha31jb25zdCByPXRvSGV4RGlnaXQoZSk7aWYoLTEhPT1yKXt0PWU7ZT10aGlzLm5leHRDaGFyKCk7Y29uc3QgaT10b0hleERpZ2l0KGUpO2lmKC0xPT09aSl7d2FybihgTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSkgaW4gaGV4YWRlY2ltYWwgbnVtYmVyLmApO2EucHVzaCgiIyIsU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk7aWYocnJbZV0pYnJlYWs7YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2NvbnRpbnVlfWEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHI8PDR8aSkpfWVsc2UgYS5wdXNoKCIjIixTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1lbHNlIGEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTthLmxlbmd0aD4xMjcmJndhcm4oYE5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogJHthLmxlbmd0aH1gKTtyZXR1cm4gTmFtZS5nZXQoYS5qb2luKCIiKSl9X2hleFN0cmluZ1dhcm4oZSl7NSE9PXRoaXMuX2hleFN0cmluZ051bVdhcm4rKz90aGlzLl9oZXhTdHJpbmdOdW1XYXJuPjV8fHdhcm4oYGdldEhleFN0cmluZyAtIGlnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyOiAke2V9YCk6d2FybigiZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgYWRkaXRpb25hbCBpbnZhbGlkIGNoYXJhY3RlcnMuIil9Z2V0SGV4U3RyaW5nKCl7Y29uc3QgZT10aGlzLnN0ckJ1ZjtlLmxlbmd0aD0wO2xldCB0PXRoaXMuY3VycmVudENoYXIsYT0tMSxyPS0xO3RoaXMuX2hleFN0cmluZ051bVdhcm49MDtmb3IoOzspe2lmKHQ8MCl7d2FybigiVW50ZXJtaW5hdGVkIGhleCBzdHJpbmciKTticmVha31pZig2Mj09PXQpe3RoaXMubmV4dENoYXIoKTticmVha31pZigxIT09cnJbdF0pe3I9dG9IZXhEaWdpdCh0KTtpZigtMT09PXIpdGhpcy5faGV4U3RyaW5nV2Fybih0KTtlbHNlIGlmKC0xPT09YSlhPXI7ZWxzZXtlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhPDw0fHIpKTthPS0xfXQ9dGhpcy5uZXh0Q2hhcigpfWVsc2UgdD10aGlzLm5leHRDaGFyKCl9LTEhPT1hJiZlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhPDw0KSk7cmV0dXJuIGUuam9pbigiIil9Z2V0T2JqKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYodDwwKXJldHVybiBzYTtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKDEhPT1yclt0XSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1zd2l0Y2goMHx0KXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNDM6Y2FzZSA0NTpjYXNlIDQ2OnJldHVybiB0aGlzLmdldE51bWJlcigpO2Nhc2UgNDA6cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCk7Y2FzZSA0NzpyZXR1cm4gdGhpcy5nZXROYW1lKCk7Y2FzZSA5MTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoIlsiKTtjYXNlIDkzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gQ21kLmdldCgiXSIpO2Nhc2UgNjA6dD10aGlzLm5leHRDaGFyKCk7aWYoNjA9PT10KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoIjw8Iil9cmV0dXJuIHRoaXMuZ2V0SGV4U3RyaW5nKCk7Y2FzZSA2Mjp0PXRoaXMubmV4dENoYXIoKTtpZig2Mj09PXQpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gQ21kLmdldCgiPj4iKX1yZXR1cm4gQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gQ21kLmdldCgieyIpO2Nhc2UgMTI1OnRoaXMubmV4dENoYXIoKTtyZXR1cm4gQ21kLmdldCgifSIpO2Nhc2UgNDE6dGhpcy5uZXh0Q2hhcigpO3Rocm93IG5ldyBGb3JtYXRFcnJvcihgSWxsZWdhbCBjaGFyYWN0ZXI6ICR7dH1gKX1sZXQgYT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHQ8MzJ8fHQ+MTI3KXtjb25zdCBlPXRoaXMucGVla0NoYXIoKTtpZihlPj0zMiYmZTw9MTI3KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoYSl9fWNvbnN0IHI9dGhpcy5rbm93bkNvbW1hbmRzO2xldCBpPXZvaWQgMCE9PXI/LlthXTtmb3IoOyh0PXRoaXMubmV4dENoYXIoKSk+PTAmJiFyclt0XTspe2NvbnN0IGU9YStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKGkmJnZvaWQgMD09PXJbZV0pYnJlYWs7aWYoMTI4PT09YS5sZW5ndGgpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBDb21tYW5kIHRva2VuIHRvbyBsb25nOiAke2EubGVuZ3RofWApO2E9ZTtpPXZvaWQgMCE9PXI/LlthXX1pZigidHJ1ZSI9PT1hKXJldHVybiEwO2lmKCJmYWxzZSI9PT1hKXJldHVybiExO2lmKCJudWxsIj09PWEpcmV0dXJuIG51bGw7IkJJIj09PWEmJih0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3M9dGhpcy5zdHJlYW0ucG9zKTtyZXR1cm4gQ21kLmdldChhKX1za2lwVG9OZXh0TGluZSgpe2xldCBlPXRoaXMuY3VycmVudENoYXI7Zm9yKDtlPj0wOyl7aWYoMTM9PT1lKXtlPXRoaXMubmV4dENoYXIoKTsxMD09PWUmJnRoaXMubmV4dENoYXIoKTticmVha31pZigxMD09PWUpe3RoaXMubmV4dENoYXIoKTticmVha31lPXRoaXMubmV4dENoYXIoKX19fWNsYXNzIExpbmVhcml6YXRpb257c3RhdGljIGNyZWF0ZShlKXtmdW5jdGlvbiBnZXRJbnQoZSx0LGE9ITEpe2NvbnN0IHI9ZS5nZXQodCk7aWYoTnVtYmVyLmlzSW50ZWdlcihyKSYmKGE/cj49MDpyPjApKXJldHVybiByO3Rocm93IG5ldyBFcnJvcihgVGhlICIke3R9IiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLmApfWNvbnN0IHQ9bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKGUpLHhyZWY6bnVsbH0pLGE9dC5nZXRPYmooKSxyPXQuZ2V0T2JqKCksaT10LmdldE9iaigpLG49dC5nZXRPYmooKTtsZXQgcyxvO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihhKSYmTnVtYmVyLmlzSW50ZWdlcihyKSYmaXNDbWQoaSwib2JqIikmJm4gaW5zdGFuY2VvZiBEaWN0JiYibnVtYmVyIj09dHlwZW9mKHM9bi5nZXQoIkxpbmVhcml6ZWQiKSkmJnM+MCkpcmV0dXJuIG51bGw7aWYoKG89Z2V0SW50KG4sIkwiKSkhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiTCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lcyBub3QgZXF1YWwgdGhlIHN0cmVhbSBsZW5ndGguJyk7cmV0dXJue2xlbmd0aDpvLGhpbnRzOmZ1bmN0aW9uIGdldEhpbnRzKGUpe2NvbnN0IHQ9ZS5nZXQoIkgiKTtsZXQgYTtpZihBcnJheS5pc0FycmF5KHQpJiYoMj09PShhPXQubGVuZ3RoKXx8ND09PWEpKXtmb3IobGV0IGU9MDtlPGE7ZSsrKXtjb25zdCBhPXRbZV07aWYoIShOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPjApKXRocm93IG5ldyBFcnJvcihgSGludCAoJHtlfSkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLmApfXJldHVybiB0fXRocm93IG5ldyBFcnJvcigiSGludCBhcnJheSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9KG4pLG9iamVjdE51bWJlckZpcnN0OmdldEludChuLCJPIiksZW5kRmlyc3Q6Z2V0SW50KG4sIkUiKSxudW1QYWdlczpnZXRJbnQobiwiTiIpLG1haW5YUmVmRW50cmllc09mZnNldDpnZXRJbnQobiwiVCIpLHBhZ2VGaXJzdDpuLmhhcygiUCIpP2dldEludChuLCJQIiwhMCk6MH19fWNvbnN0IGlyPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sbnI9MioqMjQtMTtjbGFzcyBDTWFwe2NvbnN0cnVjdG9yKGU9ITEpe3RoaXMuY29kZXNwYWNlUmFuZ2VzPVtbXSxbXSxbXSxbXV07dGhpcy5udW1Db2Rlc3BhY2VSYW5nZXM9MDt0aGlzLl9tYXA9W107dGhpcy5uYW1lPSIiO3RoaXMudmVydGljYWw9ITE7dGhpcy51c2VDTWFwPW51bGw7dGhpcy5idWlsdEluQ01hcD1lfWFkZENvZGVzcGFjZVJhbmdlKGUsdCxhKXt0aGlzLmNvZGVzcGFjZVJhbmdlc1tlLTFdLnB1c2godCxhKTt0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrfW1hcENpZFJhbmdlKGUsdCxhKXtpZih0LWU+bnIpdGhyb3cgbmV3IEVycm9yKCJtYXBDaWRSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IoO2U8PXQ7KXRoaXMuX21hcFtlKytdPWErK31tYXBCZlJhbmdlKGUsdCxhKXtpZih0LWU+bnIpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2NvbnN0IHI9YS5sZW5ndGgtMTtmb3IoO2U8PXQ7KXt0aGlzLl9tYXBbZSsrXT1hO2NvbnN0IHQ9YS5jaGFyQ29kZUF0KHIpKzE7dD4yNTU/YT1hLnN1YnN0cmluZygwLHItMSkrU3RyaW5nLmZyb21DaGFyQ29kZShhLmNoYXJDb2RlQXQoci0xKSsxKSsiXDAiOmE9YS5zdWJzdHJpbmcoMCxyKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfX1tYXBCZlJhbmdlVG9BcnJheShlLHQsYSl7aWYodC1lPm5yKXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZVRvQXJyYXkgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Y29uc3Qgcj1hLmxlbmd0aDtsZXQgaT0wO2Zvcig7ZTw9dCYmaTxyOyl7dGhpcy5fbWFwW2VdPWFbaSsrXTsrK2V9fW1hcE9uZShlLHQpe3RoaXMuX21hcFtlXT10fWxvb2t1cChlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWNvbnRhaW5zKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19Zm9yRWFjaChlKXtjb25zdCB0PXRoaXMuX21hcCxhPXQubGVuZ3RoO2lmKGE8PTY1NTM2KWZvcihsZXQgcj0wO3I8YTtyKyspdm9pZCAwIT09dFtyXSYmZShyLHRbcl0pO2Vsc2UgZm9yKGNvbnN0IGEgaW4gdCllKGEsdFthXSl9Y2hhckNvZGVPZihlKXtjb25zdCB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IoY29uc3QgYSBpbiB0KWlmKHRbYV09PT1lKXJldHVybiAwfGE7cmV0dXJuLTF9Z2V0TWFwKCl7cmV0dXJuIHRoaXMuX21hcH1yZWFkQ2hhckNvZGUoZSx0LGEpe2xldCByPTA7Y29uc3QgaT10aGlzLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IG49MCxzPWkubGVuZ3RoO248cztuKyspe3I9KHI8PDh8ZS5jaGFyQ29kZUF0KHQrbikpPj4+MDtjb25zdCBzPWlbbl07Zm9yKGxldCBlPTAsdD1zLmxlbmd0aDtlPHQ7KXtjb25zdCB0PXNbZSsrXSxpPXNbZSsrXTtpZihyPj10JiZyPD1pKXthLmNoYXJjb2RlPXI7YS5sZW5ndGg9bisxO3JldHVybn19fWEuY2hhcmNvZGU9MDthLmxlbmd0aD0xfWdldENoYXJDb2RlTGVuZ3RoKGUpe2NvbnN0IHQ9dGhpcy5jb2Rlc3BhY2VSYW5nZXM7Zm9yKGxldCBhPTAscj10Lmxlbmd0aDthPHI7YSsrKXtjb25zdCByPXRbYV07Zm9yKGxldCB0PTAsaT1yLmxlbmd0aDt0PGk7KXtjb25zdCBpPXJbdCsrXSxuPXJbdCsrXTtpZihlPj1pJiZlPD1uKXJldHVybiBhKzF9fXJldHVybiAxfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH1nZXQgaXNJZGVudGl0eUNNYXAoKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19Y2xhc3MgSWRlbnRpdHlDTWFwIGV4dGVuZHMgQ01hcHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCk7dGhpcy52ZXJ0aWNhbD1lO3RoaXMuYWRkQ29kZXNwYWNlUmFuZ2UodCwwLDY1NTM1KX1tYXBDaWRSYW5nZShlLHQsYSl7dW5yZWFjaGFibGUoInNob3VsZCBub3QgY2FsbCBtYXBDaWRSYW5nZSIpfW1hcEJmUmFuZ2UoZSx0LGEpe3VucmVhY2hhYmxlKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZSIpfW1hcEJmUmFuZ2VUb0FycmF5KGUsdCxhKXt1bnJlYWNoYWJsZSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2VUb0FycmF5Iil9bWFwT25lKGUsdCl7dW5yZWFjaGFibGUoInNob3VsZCBub3QgY2FsbCBtYXBDaWRPbmUiKX1sb29rdXAoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6dm9pZCAwfWNvbnRhaW5zKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNX1mb3JFYWNoKGUpe2ZvcihsZXQgdD0wO3Q8PTY1NTM1O3QrKyllKHQsdCl9Y2hhckNvZGVPZihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTotMX1nZXRNYXAoKXtjb25zdCBlPW5ldyBBcnJheSg2NTUzNik7Zm9yKGxldCB0PTA7dDw9NjU1MzU7dCsrKWVbdF09dDtyZXR1cm4gZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIDY1NTM2fWdldCBpc0lkZW50aXR5Q01hcCgpe3VucmVhY2hhYmxlKCJzaG91bGQgbm90IGFjY2VzcyAuaXNJZGVudGl0eUNNYXAiKX19ZnVuY3Rpb24gc3RyVG9JbnQoZSl7bGV0IHQ9MDtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl0PXQ8PDh8ZS5jaGFyQ29kZUF0KGEpO3JldHVybiB0Pj4+MH1mdW5jdGlvbiBleHBlY3RTdHJpbmcoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBGb3JtYXRFcnJvcigiTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIHN0cmluZy4iKX1mdW5jdGlvbiBleHBlY3RJbnQoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgaW50LiIpfWZ1bmN0aW9uIHBhcnNlQmZDaGFyKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1zYSlicmVhaztpZihpc0NtZChhLCJlbmRiZmNoYXIiKSlyZXR1cm47ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2V4cGVjdFN0cmluZyhhKTtjb25zdCBpPWE7ZS5tYXBPbmUocixpKX19ZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1zYSlicmVhaztpZihpc0NtZChhLCJlbmRiZnJhbmdlIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoYSk7Y29uc3QgaT1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihhKXx8InN0cmluZyI9PXR5cGVvZiBhKXtjb25zdCB0PU51bWJlci5pc0ludGVnZXIoYSk/U3RyaW5nLmZyb21DaGFyQ29kZShhKTphO2UubWFwQmZSYW5nZShyLGksdCl9ZWxzZXtpZighaXNDbWQoYSwiWyIpKWJyZWFrO3thPXQuZ2V0T2JqKCk7Y29uc3Qgbj1bXTtmb3IoOyFpc0NtZChhLCJdIikmJmEhPT1zYTspe24ucHVzaChhKTthPXQuZ2V0T2JqKCl9ZS5tYXBCZlJhbmdlVG9BcnJheShyLGksbil9fX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gcGFyc2VDaWRDaGFyKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1zYSlicmVhaztpZihpc0NtZChhLCJlbmRjaWRjaGFyIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RJbnQoYSk7Y29uc3QgaT1hO2UubWFwT25lKHIsaSl9fWZ1bmN0aW9uIHBhcnNlQ2lkUmFuZ2UoZSx0KXtmb3IoOzspe2xldCBhPXQuZ2V0T2JqKCk7aWYoYT09PXNhKWJyZWFrO2lmKGlzQ21kKGEsImVuZGNpZHJhbmdlIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoYSk7Y29uc3QgaT1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7ZXhwZWN0SW50KGEpO2NvbnN0IG49YTtlLm1hcENpZFJhbmdlKHIsaSxuKX19ZnVuY3Rpb24gcGFyc2VDb2Rlc3BhY2VSYW5nZShlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09c2EpYnJlYWs7aWYoaXNDbWQoYSwiZW5kY29kZXNwYWNlcmFuZ2UiKSlyZXR1cm47aWYoInN0cmluZyIhPXR5cGVvZiBhKWJyZWFrO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2lmKCJzdHJpbmciIT10eXBlb2YgYSlicmVhaztjb25zdCBpPXN0clRvSW50KGEpO2UuYWRkQ29kZXNwYWNlUmFuZ2UoYS5sZW5ndGgscixpKX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgY29kZXNwYWNlIHJhbmdlLiIpfWZ1bmN0aW9uIHBhcnNlV01vZGUoZSx0KXtjb25zdCBhPXQuZ2V0T2JqKCk7TnVtYmVyLmlzSW50ZWdlcihhKSYmKGUudmVydGljYWw9ISFhKX1mdW5jdGlvbiBwYXJzZUNNYXBOYW1lKGUsdCl7Y29uc3QgYT10LmdldE9iaigpO2EgaW5zdGFuY2VvZiBOYW1lJiYoZS5uYW1lPWEubmFtZSl9YXN5bmMgZnVuY3Rpb24gcGFyc2VDTWFwKGUsdCxhLHIpe2xldCBpLG47ZTpmb3IoOzspdHJ5e2NvbnN0IGE9dC5nZXRPYmooKTtpZihhPT09c2EpYnJlYWs7aWYoYSBpbnN0YW5jZW9mIE5hbWUpeyJXTW9kZSI9PT1hLm5hbWU/cGFyc2VXTW9kZShlLHQpOiJDTWFwTmFtZSI9PT1hLm5hbWUmJnBhcnNlQ01hcE5hbWUoZSx0KTtpPWF9ZWxzZSBpZihhIGluc3RhbmNlb2YgQ21kKXN3aXRjaChhLmNtZCl7Y2FzZSJlbmRjbWFwIjpicmVhayBlO2Nhc2UidXNlY21hcCI6aSBpbnN0YW5jZW9mIE5hbWUmJihuPWkubmFtZSk7YnJlYWs7Y2FzZSJiZWdpbmNvZGVzcGFjZXJhbmdlIjpwYXJzZUNvZGVzcGFjZVJhbmdlKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmY2hhciI6cGFyc2VCZkNoYXIoZSx0KTticmVhaztjYXNlImJlZ2luY2lkY2hhciI6cGFyc2VDaWRDaGFyKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmcmFuZ2UiOnBhcnNlQmZSYW5nZShlLHQpO2JyZWFrO2Nhc2UiYmVnaW5jaWRyYW5nZSI6cGFyc2VDaWRSYW5nZShlLHQpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKCJJbnZhbGlkIGNNYXAgZGF0YTogIitlKTtjb250aW51ZX0hciYmbiYmKHI9bik7cmV0dXJuIHI/ZXh0ZW5kQ01hcChlLGEscik6ZX1hc3luYyBmdW5jdGlvbiBleHRlbmRDTWFwKGUsdCxhKXtlLnVzZUNNYXA9YXdhaXQgY3JlYXRlQnVpbHRJbkNNYXAoYSx0KTtpZigwPT09ZS5udW1Db2Rlc3BhY2VSYW5nZXMpe2NvbnN0IHQ9ZS51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyllLmNvZGVzcGFjZVJhbmdlc1thXT10W2FdLnNsaWNlKCk7ZS5udW1Db2Rlc3BhY2VSYW5nZXM9ZS51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlc31lLnVzZUNNYXAuZm9yRWFjaChmdW5jdGlvbih0LGEpe2UuY29udGFpbnModCl8fGUubWFwT25lKHQsYSl9KTtyZXR1cm4gZX1hc3luYyBmdW5jdGlvbiBjcmVhdGVCdWlsdEluQ01hcChlLHQpe2lmKCJJZGVudGl0eS1IIj09PWUpcmV0dXJuIG5ldyBJZGVudGl0eUNNYXAoITEsMik7aWYoIklkZW50aXR5LVYiPT09ZSlyZXR1cm4gbmV3IElkZW50aXR5Q01hcCghMCwyKTtpZighaXIuaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIENNYXAgbmFtZTogIitlKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkJ1aWx0LWluIENNYXAgcGFyYW1ldGVycyBhcmUgbm90IHByb3ZpZGVkLiIpO2NvbnN0e2NNYXBEYXRhOmEsaXNDb21wcmVzc2VkOnJ9PWF3YWl0IHQoZSksaT1uZXcgQ01hcCghMCk7aWYocilyZXR1cm4obmV3IEJpbmFyeUNNYXBSZWFkZXIpLnByb2Nlc3MoYSxpLGU9PmV4dGVuZENNYXAoaSx0LGUpKTtjb25zdCBuPW5ldyBMZXhlcihuZXcgU3RyZWFtKGEpKTtyZXR1cm4gcGFyc2VDTWFwKGksbix0LG51bGwpfWNsYXNzIENNYXBGYWN0b3J5e3N0YXRpYyBhc3luYyBjcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0LHVzZUNNYXA6YX0pe2lmKGUgaW5zdGFuY2VvZiBOYW1lKXJldHVybiBjcmVhdGVCdWlsdEluQ01hcChlLm5hbWUsdCk7aWYoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pe2NvbnN0IHI9YXdhaXQgcGFyc2VDTWFwKG5ldyBDTWFwLG5ldyBMZXhlcihlKSx0LGEpO3JldHVybiByLmlzSWRlbnRpdHlDTWFwP2NyZWF0ZUJ1aWx0SW5DTWFwKHIubmFtZSx0KTpyfXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgcmVxdWlyZWQuIil9fWNvbnN0IHNyPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiIiwiIiwiIiwiaXN1cGVyaW9yIiwiIiwiIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwiIiwiIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCIiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiIiwiIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIiIsIkRvdGFjY2VudHNtYWxsIiwiIiwiIiwiTWFjcm9uc21hbGwiLCIiLCIiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCIiLCIiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl0sb3I9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJjZW50b2xkc3R5bGUiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsIiIsInF1ZXN0aW9uc21hbGwiLCIiLCIiLCIiLCIiLCJFdGhzbWFsbCIsIiIsIiIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCIiLCIiLCIiLCIiLCIiLCIiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsIiIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbmluZmVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiIiwiIiwiYXN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiQWFjdXRlc21hbGwiLCJBZ3JhdmVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQXJpbmdzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWFjdXRlc21hbGwiLCJJZ3JhdmVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk90aWxkZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIiIsImVpZ2h0c3VwZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsIlNjYXJvbnNtYWxsIiwiIiwiY2VudGluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCIiLCJEaWVyZXNpc3NtYWxsIiwiIiwiQ2Fyb25zbWFsbCIsIm9zdXBlcmlvciIsImZpdmVpbmZlcmlvciIsIiIsImNvbW1haW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsIllhY3V0ZXNtYWxsIiwiIiwiZG9sbGFyaW5mZXJpb3IiLCIiLCIiLCJUaG9ybnNtYWxsIiwiIiwibmluZWluZmVyaW9yIiwiemVyb2luZmVyaW9yIiwiWmNhcm9uc21hbGwiLCJBRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWluZmVyaW9yIiwiTHNsYXNoc21hbGwiLCIiLCIiLCIiLCIiLCIiLCIiLCJDZWRpbGxhc21hbGwiLCIiLCIiLCIiLCIiLCIiLCJPRXNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbnN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93bnNtYWxsIiwiIiwiWWRpZXJlc2lzc21hbGwiLCIiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9zdXBlcmlvciIsIiIsImVzdXBlcmlvciIsInJzdXBlcmlvciIsInRzdXBlcmlvciIsIiIsIiIsImlzdXBlcmlvciIsInNzdXBlcmlvciIsImRzdXBlcmlvciIsIiIsIiIsIiIsIiIsIiIsImxzdXBlcmlvciIsIk9nb25la3NtYWxsIiwiQnJldmVzbWFsbCIsIk1hY3JvbnNtYWxsIiwiYnN1cGVyaW9yIiwibnN1cGVyaW9yIiwibXN1cGVyaW9yIiwiY29tbWFzdXBlcmlvciIsInBlcmlvZHN1cGVyaW9yIiwiRG90YWNjZW50c21hbGwiLCJSaW5nc21hbGwiLCIiLCIiLCIiLCIiXSxjcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwic3BhY2UiLCJBZ3JhdmUiLCJBdGlsZGUiLCJPdGlsZGUiLCJPRSIsIm9lIiwiZW5kYXNoIiwiZW1kYXNoIiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJkaXZpZGUiLCJsb3plbmdlIiwieWRpZXJlc2lzIiwiWWRpZXJlc2lzIiwiZnJhY3Rpb24iLCJjdXJyZW5jeSIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicGVydGhvdXNhbmQiLCJBY2lyY3VtZmxleCIsIkVjaXJjdW1mbGV4IiwiQWFjdXRlIiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsImFwcGxlIiwiT2dyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZ3JhdmUiLCJkb3RsZXNzaSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiJdLGxyPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCIiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsIiIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsIiIsInF1ZXN0aW9uZG93biIsIiIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwiIiwicmluZyIsImNlZGlsbGEiLCIiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIkFFIiwiIiwib3JkZmVtaW5pbmUiLCIiLCIiLCIiLCIiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsIiIsIiIsIiIsIiIsIiIsImFlIiwiIiwiIiwiIiwiZG90bGVzc2kiLCIiLCIiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCIiLCIiLCIiLCIiXSxocj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJidWxsZXQiLCJFdXJvIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJmbG9yaW4iLCJxdW90ZWRibGJhc2UiLCJlbGxpcHNpcyIsImRhZ2dlciIsImRhZ2dlcmRibCIsImNpcmN1bWZsZXgiLCJwZXJ0aG91c2FuZCIsIlNjYXJvbiIsImd1aWxzaW5nbGxlZnQiLCJPRSIsImJ1bGxldCIsIlpjYXJvbiIsImJ1bGxldCIsImJ1bGxldCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwiYnVsbGV0IiwiZW5kYXNoIiwiZW1kYXNoIiwidGlsZGUiLCJ0cmFkZW1hcmsiLCJzY2Fyb24iLCJndWlsc2luZ2xyaWdodCIsIm9lIiwiYnVsbGV0IiwiemNhcm9uIiwiWWRpZXJlc2lzIiwic3BhY2UiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiY3VycmVuY3kiLCJ5ZW4iLCJicm9rZW5iYXIiLCJzZWN0aW9uIiwiZGllcmVzaXMiLCJjb3B5cmlnaHQiLCJvcmRmZW1pbmluZSIsImd1aWxsZW1vdGxlZnQiLCJsb2dpY2Fsbm90IiwiaHlwaGVuIiwicmVnaXN0ZXJlZCIsIm1hY3JvbiIsImRlZ3JlZSIsInBsdXNtaW51cyIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImFjdXRlIiwibXUiLCJwYXJhZ3JhcGgiLCJwZXJpb2RjZW50ZXJlZCIsImNlZGlsbGEiLCJvbmVzdXBlcmlvciIsIm9yZG1hc2N1bGluZSIsImd1aWxsZW1vdHJpZ2h0Iiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duIiwiQWdyYXZlIiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkFFIiwiQ2NlZGlsbGEiLCJFZ3JhdmUiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIklncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiRXRoIiwiTnRpbGRlIiwiT2dyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPdGlsZGUiLCJPZGllcmVzaXMiLCJtdWx0aXBseSIsIk9zbGFzaCIsIlVncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiWWFjdXRlIiwiVGhvcm4iLCJnZXJtYW5kYmxzIiwiYWdyYXZlIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhdGlsZGUiLCJhZGllcmVzaXMiLCJhcmluZyIsImFlIiwiY2NlZGlsbGEiLCJlZ3JhdmUiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImlncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiZXRoIiwibnRpbGRlIiwib2dyYXZlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvdGlsZGUiLCJvZGllcmVzaXMiLCJkaXZpZGUiLCJvc2xhc2giLCJ1Z3JhdmUiLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInlhY3V0ZSIsInRob3JuIiwieWRpZXJlc2lzIl0sdXI9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXSxkcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiYTEiLCJhMiIsImEyMDIiLCJhMyIsImE0IiwiYTUiLCJhMTE5IiwiYTExOCIsImExMTciLCJhMTEiLCJhMTIiLCJhMTMiLCJhMTQiLCJhMTUiLCJhMTYiLCJhMTA1IiwiYTE3IiwiYTE4IiwiYTE5IiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTI0IiwiYTI1IiwiYTI2IiwiYTI3IiwiYTI4IiwiYTYiLCJhNyIsImE4IiwiYTkiLCJhMTAiLCJhMjkiLCJhMzAiLCJhMzEiLCJhMzIiLCJhMzMiLCJhMzQiLCJhMzUiLCJhMzYiLCJhMzciLCJhMzgiLCJhMzkiLCJhNDAiLCJhNDEiLCJhNDIiLCJhNDMiLCJhNDQiLCJhNDUiLCJhNDYiLCJhNDciLCJhNDgiLCJhNDkiLCJhNTAiLCJhNTEiLCJhNTIiLCJhNTMiLCJhNTQiLCJhNTUiLCJhNTYiLCJhNTciLCJhNTgiLCJhNTkiLCJhNjAiLCJhNjEiLCJhNjIiLCJhNjMiLCJhNjQiLCJhNjUiLCJhNjYiLCJhNjciLCJhNjgiLCJhNjkiLCJhNzAiLCJhNzEiLCJhNzIiLCJhNzMiLCJhNzQiLCJhMjAzIiwiYTc1IiwiYTIwNCIsImE3NiIsImE3NyIsImE3OCIsImE3OSIsImE4MSIsImE4MiIsImE4MyIsImE4NCIsImE5NyIsImE5OCIsImE5OSIsImExMDAiLCIiLCJhODkiLCJhOTAiLCJhOTMiLCJhOTQiLCJhOTEiLCJhOTIiLCJhMjA1IiwiYTg1IiwiYTIwNiIsImE4NiIsImE4NyIsImE4OCIsImE5NSIsImE5NiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImExMDEiLCJhMTAyIiwiYTEwMyIsImExMDQiLCJhMTA2IiwiYTEwNyIsImExMDgiLCJhMTEyIiwiYTExMSIsImExMTAiLCJhMTA5IiwiYTEyMCIsImExMjEiLCJhMTIyIiwiYTEyMyIsImExMjQiLCJhMTI1IiwiYTEyNiIsImExMjciLCJhMTI4IiwiYTEyOSIsImExMzAiLCJhMTMxIiwiYTEzMiIsImExMzMiLCJhMTM0IiwiYTEzNSIsImExMzYiLCJhMTM3IiwiYTEzOCIsImExMzkiLCJhMTQwIiwiYTE0MSIsImExNDIiLCJhMTQzIiwiYTE0NCIsImExNDUiLCJhMTQ2IiwiYTE0NyIsImExNDgiLCJhMTQ5IiwiYTE1MCIsImExNTEiLCJhMTUyIiwiYTE1MyIsImExNTQiLCJhMTU1IiwiYTE1NiIsImExNTciLCJhMTU4IiwiYTE1OSIsImExNjAiLCJhMTYxIiwiYTE2MyIsImExNjQiLCJhMTk2IiwiYTE2NSIsImExOTIiLCJhMTY2IiwiYTE2NyIsImExNjgiLCJhMTY5IiwiYTE3MCIsImExNzEiLCJhMTcyIiwiYTE3MyIsImExNjIiLCJhMTc0IiwiYTE3NSIsImExNzYiLCJhMTc3IiwiYTE3OCIsImExNzkiLCJhMTkzIiwiYTE4MCIsImExOTkiLCJhMTgxIiwiYTIwMCIsImExODIiLCIiLCJhMjAxIiwiYTE4MyIsImExODQiLCJhMTk3IiwiYTE4NSIsImExOTQiLCJhMTk4IiwiYTE4NiIsImExOTUiLCJhMTg3IiwiYTE4OCIsImExODkiLCJhMTkwIiwiYTE5MSIsIiJdO2Z1bmN0aW9uIGdldEVuY29kaW5nKGUpe3N3aXRjaChlKXtjYXNlIldpbkFuc2lFbmNvZGluZyI6cmV0dXJuIGhyO2Nhc2UiU3RhbmRhcmRFbmNvZGluZyI6cmV0dXJuIGxyO2Nhc2UiTWFjUm9tYW5FbmNvZGluZyI6cmV0dXJuIGNyO2Nhc2UiU3ltYm9sU2V0RW5jb2RpbmciOnJldHVybiB1cjtjYXNlIlphcGZEaW5nYmF0c0VuY29kaW5nIjpyZXR1cm4gZHI7Y2FzZSJFeHBlcnRFbmNvZGluZyI6cmV0dXJuIHNyO2Nhc2UiTWFjRXhwZXJ0RW5jb2RpbmciOnJldHVybiBvcjtkZWZhdWx0OnJldHVybiBudWxsfX1jb25zdCBmcj1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZS5BPTY1O2UuQUU9MTk4O2UuQUVhY3V0ZT01MDg7ZS5BRW1hY3Jvbj00ODI7ZS5BRXNtYWxsPTYzNDYyO2UuQWFjdXRlPTE5MztlLkFhY3V0ZXNtYWxsPTYzNDU3O2UuQWJyZXZlPTI1ODtlLkFicmV2ZWFjdXRlPTc4NTQ7ZS5BYnJldmVjeXJpbGxpYz0xMjMyO2UuQWJyZXZlZG90YmVsb3c9Nzg2MjtlLkFicmV2ZWdyYXZlPTc4NTY7ZS5BYnJldmVob29rYWJvdmU9Nzg1ODtlLkFicmV2ZXRpbGRlPTc4NjA7ZS5BY2Fyb249NDYxO2UuQWNpcmNsZT05Mzk4O2UuQWNpcmN1bWZsZXg9MTk0O2UuQWNpcmN1bWZsZXhhY3V0ZT03ODQ0O2UuQWNpcmN1bWZsZXhkb3RiZWxvdz03ODUyO2UuQWNpcmN1bWZsZXhncmF2ZT03ODQ2O2UuQWNpcmN1bWZsZXhob29rYWJvdmU9Nzg0ODtlLkFjaXJjdW1mbGV4c21hbGw9NjM0NTg7ZS5BY2lyY3VtZmxleHRpbGRlPTc4NTA7ZS5BY3V0ZT02MzE3NztlLkFjdXRlc21hbGw9NjM0MTI7ZS5BY3lyaWxsaWM9MTA0MDtlLkFkYmxncmF2ZT01MTI7ZS5BZGllcmVzaXM9MTk2O2UuQWRpZXJlc2lzY3lyaWxsaWM9MTIzNDtlLkFkaWVyZXNpc21hY3Jvbj00Nzg7ZS5BZGllcmVzaXNzbWFsbD02MzQ2MDtlLkFkb3RiZWxvdz03ODQwO2UuQWRvdG1hY3Jvbj00ODA7ZS5BZ3JhdmU9MTkyO2UuQWdyYXZlc21hbGw9NjM0NTY7ZS5BaG9va2Fib3ZlPTc4NDI7ZS5BaWVjeXJpbGxpYz0xMjM2O2UuQWludmVydGVkYnJldmU9NTE0O2UuQWxwaGE9OTEzO2UuQWxwaGF0b25vcz05MDI7ZS5BbWFjcm9uPTI1NjtlLkFtb25vc3BhY2U9NjUzMTM7ZS5Bb2dvbmVrPTI2MDtlLkFyaW5nPTE5NztlLkFyaW5nYWN1dGU9NTA2O2UuQXJpbmdiZWxvdz03NjgwO2UuQXJpbmdzbWFsbD02MzQ2MTtlLkFzbWFsbD02MzMyOTtlLkF0aWxkZT0xOTU7ZS5BdGlsZGVzbWFsbD02MzQ1OTtlLkF5YmFybWVuaWFuPTEzMjk7ZS5CPTY2O2UuQmNpcmNsZT05Mzk5O2UuQmRvdGFjY2VudD03NjgyO2UuQmRvdGJlbG93PTc2ODQ7ZS5CZWN5cmlsbGljPTEwNDE7ZS5CZW5hcm1lbmlhbj0xMzMwO2UuQmV0YT05MTQ7ZS5CaG9vaz0zODU7ZS5CbGluZWJlbG93PTc2ODY7ZS5CbW9ub3NwYWNlPTY1MzE0O2UuQnJldmVzbWFsbD02MzIyMDtlLkJzbWFsbD02MzMzMDtlLkJ0b3BiYXI9Mzg2O2UuQz02NztlLkNhYXJtZW5pYW49MTM0MjtlLkNhY3V0ZT0yNjI7ZS5DYXJvbj02MzE3ODtlLkNhcm9uc21hbGw9NjMyMjE7ZS5DY2Fyb249MjY4O2UuQ2NlZGlsbGE9MTk5O2UuQ2NlZGlsbGFhY3V0ZT03Njg4O2UuQ2NlZGlsbGFzbWFsbD02MzQ2MztlLkNjaXJjbGU9OTQwMDtlLkNjaXJjdW1mbGV4PTI2NDtlLkNkb3Q9MjY2O2UuQ2RvdGFjY2VudD0yNjY7ZS5DZWRpbGxhc21hbGw9NjM0MTY7ZS5DaGFhcm1lbmlhbj0xMzUzO2UuQ2hlYWJraGFzaWFuY3lyaWxsaWM9MTIxMjtlLkNoZWN5cmlsbGljPTEwNjM7ZS5DaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYz0xMjE0O2UuQ2hlZGVzY2VuZGVyY3lyaWxsaWM9MTIwNjtlLkNoZWRpZXJlc2lzY3lyaWxsaWM9MTI2ODtlLkNoZWhhcm1lbmlhbj0xMzQ3O2UuQ2hla2hha2Fzc2lhbmN5cmlsbGljPTEyMjc7ZS5DaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTEyMDg7ZS5DaGk9OTM1O2UuQ2hvb2s9MzkxO2UuQ2lyY3VtZmxleHNtYWxsPTYzMjIyO2UuQ21vbm9zcGFjZT02NTMxNTtlLkNvYXJtZW5pYW49MTM2MTtlLkNzbWFsbD02MzMzMTtlLkQ9Njg7ZS5EWj00OTc7ZS5EWmNhcm9uPTQ1MjtlLkRhYXJtZW5pYW49MTMzMjtlLkRhZnJpY2FuPTM5MztlLkRjYXJvbj0yNzA7ZS5EY2VkaWxsYT03Njk2O2UuRGNpcmNsZT05NDAxO2UuRGNpcmN1bWZsZXhiZWxvdz03Njk4O2UuRGNyb2F0PTI3MjtlLkRkb3RhY2NlbnQ9NzY5MDtlLkRkb3RiZWxvdz03NjkyO2UuRGVjeXJpbGxpYz0xMDQ0O2UuRGVpY29wdGljPTEwMDY7ZS5EZWx0YT04NzEwO2UuRGVsdGFncmVlaz05MTY7ZS5EaG9vaz0zOTQ7ZS5EaWVyZXNpcz02MzE3OTtlLkRpZXJlc2lzQWN1dGU9NjMxODA7ZS5EaWVyZXNpc0dyYXZlPTYzMTgxO2UuRGllcmVzaXNzbWFsbD02MzQwMDtlLkRpZ2FtbWFncmVlaz05ODg7ZS5EamVjeXJpbGxpYz0xMDI2O2UuRGxpbmViZWxvdz03Njk0O2UuRG1vbm9zcGFjZT02NTMxNjtlLkRvdGFjY2VudHNtYWxsPTYzMjIzO2UuRHNsYXNoPTI3MjtlLkRzbWFsbD02MzMzMjtlLkR0b3BiYXI9Mzk1O2UuRHo9NDk4O2UuRHpjYXJvbj00NTM7ZS5EemVhYmtoYXNpYW5jeXJpbGxpYz0xMjQ4O2UuRHplY3lyaWxsaWM9MTAyOTtlLkR6aGVjeXJpbGxpYz0xMDM5O2UuRT02OTtlLkVhY3V0ZT0yMDE7ZS5FYWN1dGVzbWFsbD02MzQ2NTtlLkVicmV2ZT0yNzY7ZS5FY2Fyb249MjgyO2UuRWNlZGlsbGFicmV2ZT03NzA4O2UuRWNoYXJtZW5pYW49MTMzMztlLkVjaXJjbGU9OTQwMjtlLkVjaXJjdW1mbGV4PTIwMjtlLkVjaXJjdW1mbGV4YWN1dGU9Nzg3MDtlLkVjaXJjdW1mbGV4YmVsb3c9NzcwNDtlLkVjaXJjdW1mbGV4ZG90YmVsb3c9Nzg3ODtlLkVjaXJjdW1mbGV4Z3JhdmU9Nzg3MjtlLkVjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NzQ7ZS5FY2lyY3VtZmxleHNtYWxsPTYzNDY2O2UuRWNpcmN1bWZsZXh0aWxkZT03ODc2O2UuRWN5cmlsbGljPTEwMjg7ZS5FZGJsZ3JhdmU9NTE2O2UuRWRpZXJlc2lzPTIwMztlLkVkaWVyZXNpc3NtYWxsPTYzNDY3O2UuRWRvdD0yNzg7ZS5FZG90YWNjZW50PTI3ODtlLkVkb3RiZWxvdz03ODY0O2UuRWZjeXJpbGxpYz0xMDYwO2UuRWdyYXZlPTIwMDtlLkVncmF2ZXNtYWxsPTYzNDY0O2UuRWhhcm1lbmlhbj0xMzM1O2UuRWhvb2thYm92ZT03ODY2O2UuRWlnaHRyb21hbj04NTUxO2UuRWludmVydGVkYnJldmU9NTE4O2UuRWlvdGlmaWVkY3lyaWxsaWM9MTEyNDtlLkVsY3lyaWxsaWM9MTA1MTtlLkVsZXZlbnJvbWFuPTg1NTQ7ZS5FbWFjcm9uPTI3NDtlLkVtYWNyb25hY3V0ZT03NzAyO2UuRW1hY3JvbmdyYXZlPTc3MDA7ZS5FbWN5cmlsbGljPTEwNTI7ZS5FbW9ub3NwYWNlPTY1MzE3O2UuRW5jeXJpbGxpYz0xMDUzO2UuRW5kZXNjZW5kZXJjeXJpbGxpYz0xMTg2O2UuRW5nPTMzMDtlLkVuZ2hlY3lyaWxsaWM9MTE4ODtlLkVuaG9va2N5cmlsbGljPTEyMjM7ZS5Fb2dvbmVrPTI4MDtlLkVvcGVuPTQwMDtlLkVwc2lsb249OTE3O2UuRXBzaWxvbnRvbm9zPTkwNDtlLkVyY3lyaWxsaWM9MTA1NjtlLkVyZXZlcnNlZD0zOTg7ZS5FcmV2ZXJzZWRjeXJpbGxpYz0xMDY5O2UuRXNjeXJpbGxpYz0xMDU3O2UuRXNkZXNjZW5kZXJjeXJpbGxpYz0xMTk0O2UuRXNoPTQyNTtlLkVzbWFsbD02MzMzMztlLkV0YT05MTk7ZS5FdGFybWVuaWFuPTEzMzY7ZS5FdGF0b25vcz05MDU7ZS5FdGg9MjA4O2UuRXRoc21hbGw9NjM0NzI7ZS5FdGlsZGU9Nzg2ODtlLkV0aWxkZWJlbG93PTc3MDY7ZS5FdXJvPTgzNjQ7ZS5Femg9NDM5O2UuRXpoY2Fyb249NDk0O2UuRXpocmV2ZXJzZWQ9NDQwO2UuRj03MDtlLkZjaXJjbGU9OTQwMztlLkZkb3RhY2NlbnQ9NzcxMDtlLkZlaGFybWVuaWFuPTEzNjY7ZS5GZWljb3B0aWM9OTk2O2UuRmhvb2s9NDAxO2UuRml0YWN5cmlsbGljPTExMzg7ZS5GaXZlcm9tYW49ODU0ODtlLkZtb25vc3BhY2U9NjUzMTg7ZS5Gb3Vycm9tYW49ODU0NztlLkZzbWFsbD02MzMzNDtlLkc9NzE7ZS5HQnNxdWFyZT0xMzE5MTtlLkdhY3V0ZT01MDA7ZS5HYW1tYT05MTU7ZS5HYW1tYWFmcmljYW49NDA0O2UuR2FuZ2lhY29wdGljPTEwMDI7ZS5HYnJldmU9Mjg2O2UuR2Nhcm9uPTQ4NjtlLkdjZWRpbGxhPTI5MDtlLkdjaXJjbGU9OTQwNDtlLkdjaXJjdW1mbGV4PTI4NDtlLkdjb21tYWFjY2VudD0yOTA7ZS5HZG90PTI4ODtlLkdkb3RhY2NlbnQ9Mjg4O2UuR2VjeXJpbGxpYz0xMDQzO2UuR2hhZGFybWVuaWFuPTEzNDY7ZS5HaGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MjtlLkdoZXN0cm9rZWN5cmlsbGljPTExNzA7ZS5HaGV1cHR1cm5jeXJpbGxpYz0xMTY4O2UuR2hvb2s9NDAzO2UuR2ltYXJtZW5pYW49MTMzMTtlLkdqZWN5cmlsbGljPTEwMjc7ZS5HbWFjcm9uPTc3MTI7ZS5HbW9ub3NwYWNlPTY1MzE5O2UuR3JhdmU9NjMxODI7ZS5HcmF2ZXNtYWxsPTYzMzI4O2UuR3NtYWxsPTYzMzM1O2UuR3NtYWxsaG9vaz02Njc7ZS5Hc3Ryb2tlPTQ4NDtlLkg9NzI7ZS5IMTg1MzM9OTY3OTtlLkgxODU0Mz05NjQyO2UuSDE4NTUxPTk2NDM7ZS5IMjIwNzM9OTYzMztlLkhQc3F1YXJlPTEzMjU5O2UuSGFhYmtoYXNpYW5jeXJpbGxpYz0xMTkyO2UuSGFkZXNjZW5kZXJjeXJpbGxpYz0xMjAyO2UuSGFyZHNpZ25jeXJpbGxpYz0xMDY2O2UuSGJhcj0yOTQ7ZS5IYnJldmViZWxvdz03NzIyO2UuSGNlZGlsbGE9NzcyMDtlLkhjaXJjbGU9OTQwNTtlLkhjaXJjdW1mbGV4PTI5MjtlLkhkaWVyZXNpcz03NzE4O2UuSGRvdGFjY2VudD03NzE0O2UuSGRvdGJlbG93PTc3MTY7ZS5IbW9ub3NwYWNlPTY1MzIwO2UuSG9hcm1lbmlhbj0xMzQ0O2UuSG9yaWNvcHRpYz0xZTM7ZS5Ic21hbGw9NjMzMzY7ZS5IdW5nYXJ1bWxhdXQ9NjMxODM7ZS5IdW5nYXJ1bWxhdXRzbWFsbD02MzIyNDtlLkh6c3F1YXJlPTEzMjAwO2UuST03MztlLklBY3lyaWxsaWM9MTA3MTtlLklKPTMwNjtlLklVY3lyaWxsaWM9MTA3MDtlLklhY3V0ZT0yMDU7ZS5JYWN1dGVzbWFsbD02MzQ2OTtlLklicmV2ZT0zMDA7ZS5JY2Fyb249NDYzO2UuSWNpcmNsZT05NDA2O2UuSWNpcmN1bWZsZXg9MjA2O2UuSWNpcmN1bWZsZXhzbWFsbD02MzQ3MDtlLkljeXJpbGxpYz0xMDMwO2UuSWRibGdyYXZlPTUyMDtlLklkaWVyZXNpcz0yMDc7ZS5JZGllcmVzaXNhY3V0ZT03NzI2O2UuSWRpZXJlc2lzY3lyaWxsaWM9MTI1MjtlLklkaWVyZXNpc3NtYWxsPTYzNDcxO2UuSWRvdD0zMDQ7ZS5JZG90YWNjZW50PTMwNDtlLklkb3RiZWxvdz03ODgyO2UuSWVicmV2ZWN5cmlsbGljPTEyMzg7ZS5JZWN5cmlsbGljPTEwNDU7ZS5JZnJha3R1cj04NDY1O2UuSWdyYXZlPTIwNDtlLklncmF2ZXNtYWxsPTYzNDY4O2UuSWhvb2thYm92ZT03ODgwO2UuSWljeXJpbGxpYz0xMDQ4O2UuSWludmVydGVkYnJldmU9NTIyO2UuSWlzaG9ydGN5cmlsbGljPTEwNDk7ZS5JbWFjcm9uPTI5ODtlLkltYWNyb25jeXJpbGxpYz0xMjUwO2UuSW1vbm9zcGFjZT02NTMyMTtlLkluaWFybWVuaWFuPTEzMzk7ZS5Jb2N5cmlsbGljPTEwMjU7ZS5Jb2dvbmVrPTMwMjtlLklvdGE9OTIxO2UuSW90YWFmcmljYW49NDA2O2UuSW90YWRpZXJlc2lzPTkzODtlLklvdGF0b25vcz05MDY7ZS5Jc21hbGw9NjMzMzc7ZS5Jc3Ryb2tlPTQwNztlLkl0aWxkZT0yOTY7ZS5JdGlsZGViZWxvdz03NzI0O2UuSXpoaXRzYWN5cmlsbGljPTExNDA7ZS5JemhpdHNhZGJsZ3JhdmVjeXJpbGxpYz0xMTQyO2UuSj03NDtlLkphYXJtZW5pYW49MTM0NTtlLkpjaXJjbGU9OTQwNztlLkpjaXJjdW1mbGV4PTMwODtlLkplY3lyaWxsaWM9MTAzMjtlLkpoZWhhcm1lbmlhbj0xMzU1O2UuSm1vbm9zcGFjZT02NTMyMjtlLkpzbWFsbD02MzMzODtlLks9NzU7ZS5LQnNxdWFyZT0xMzE4OTtlLktLc3F1YXJlPTEzMjYxO2UuS2FiYXNoa2lyY3lyaWxsaWM9MTE4NDtlLkthY3V0ZT03NzI4O2UuS2FjeXJpbGxpYz0xMDUwO2UuS2FkZXNjZW5kZXJjeXJpbGxpYz0xMTc4O2UuS2Fob29rY3lyaWxsaWM9MTIxOTtlLkthcHBhPTkyMjtlLkthc3Ryb2tlY3lyaWxsaWM9MTE4MjtlLkthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgwO2UuS2Nhcm9uPTQ4ODtlLktjZWRpbGxhPTMxMDtlLktjaXJjbGU9OTQwODtlLktjb21tYWFjY2VudD0zMTA7ZS5LZG90YmVsb3c9NzczMDtlLktlaGFybWVuaWFuPTEzNjQ7ZS5LZW5hcm1lbmlhbj0xMzQzO2UuS2hhY3lyaWxsaWM9MTA2MTtlLktoZWljb3B0aWM9OTk4O2UuS2hvb2s9NDA4O2UuS2plY3lyaWxsaWM9MTAzNjtlLktsaW5lYmVsb3c9NzczMjtlLkttb25vc3BhY2U9NjUzMjM7ZS5Lb3BwYWN5cmlsbGljPTExNTI7ZS5Lb3BwYWdyZWVrPTk5MDtlLktzaWN5cmlsbGljPTExMzQ7ZS5Lc21hbGw9NjMzMzk7ZS5MPTc2O2UuTEo9NDU1O2UuTEw9NjMxNjc7ZS5MYWN1dGU9MzEzO2UuTGFtYmRhPTkyMztlLkxjYXJvbj0zMTc7ZS5MY2VkaWxsYT0zMTU7ZS5MY2lyY2xlPTk0MDk7ZS5MY2lyY3VtZmxleGJlbG93PTc3NDA7ZS5MY29tbWFhY2NlbnQ9MzE1O2UuTGRvdD0zMTk7ZS5MZG90YWNjZW50PTMxOTtlLkxkb3RiZWxvdz03NzM0O2UuTGRvdGJlbG93bWFjcm9uPTc3MzY7ZS5MaXduYXJtZW5pYW49MTM0MDtlLkxqPTQ1NjtlLkxqZWN5cmlsbGljPTEwMzM7ZS5MbGluZWJlbG93PTc3Mzg7ZS5MbW9ub3NwYWNlPTY1MzI0O2UuTHNsYXNoPTMyMTtlLkxzbGFzaHNtYWxsPTYzMjI1O2UuTHNtYWxsPTYzMzQwO2UuTT03NztlLk1Cc3F1YXJlPTEzMTkwO2UuTWFjcm9uPTYzMTg0O2UuTWFjcm9uc21hbGw9NjM0MDc7ZS5NYWN1dGU9Nzc0MjtlLk1jaXJjbGU9OTQxMDtlLk1kb3RhY2NlbnQ9Nzc0NDtlLk1kb3RiZWxvdz03NzQ2O2UuTWVuYXJtZW5pYW49MTM0ODtlLk1tb25vc3BhY2U9NjUzMjU7ZS5Nc21hbGw9NjMzNDE7ZS5NdHVybmVkPTQxMjtlLk11PTkyNDtlLk49Nzg7ZS5OSj00NTg7ZS5OYWN1dGU9MzIzO2UuTmNhcm9uPTMyNztlLk5jZWRpbGxhPTMyNTtlLk5jaXJjbGU9OTQxMTtlLk5jaXJjdW1mbGV4YmVsb3c9Nzc1NDtlLk5jb21tYWFjY2VudD0zMjU7ZS5OZG90YWNjZW50PTc3NDg7ZS5OZG90YmVsb3c9Nzc1MDtlLk5ob29rbGVmdD00MTM7ZS5OaW5lcm9tYW49ODU1MjtlLk5qPTQ1OTtlLk5qZWN5cmlsbGljPTEwMzQ7ZS5ObGluZWJlbG93PTc3NTI7ZS5ObW9ub3NwYWNlPTY1MzI2O2UuTm93YXJtZW5pYW49MTM1MDtlLk5zbWFsbD02MzM0MjtlLk50aWxkZT0yMDk7ZS5OdGlsZGVzbWFsbD02MzQ3MztlLk51PTkyNTtlLk89Nzk7ZS5PRT0zMzg7ZS5PRXNtYWxsPTYzMjI2O2UuT2FjdXRlPTIxMTtlLk9hY3V0ZXNtYWxsPTYzNDc1O2UuT2JhcnJlZGN5cmlsbGljPTEyNTY7ZS5PYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU4O2UuT2JyZXZlPTMzNDtlLk9jYXJvbj00NjU7ZS5PY2VudGVyZWR0aWxkZT00MTU7ZS5PY2lyY2xlPTk0MTI7ZS5PY2lyY3VtZmxleD0yMTI7ZS5PY2lyY3VtZmxleGFjdXRlPTc4ODg7ZS5PY2lyY3VtZmxleGRvdGJlbG93PTc4OTY7ZS5PY2lyY3VtZmxleGdyYXZlPTc4OTA7ZS5PY2lyY3VtZmxleGhvb2thYm92ZT03ODkyO2UuT2NpcmN1bWZsZXhzbWFsbD02MzQ3NjtlLk9jaXJjdW1mbGV4dGlsZGU9Nzg5NDtlLk9jeXJpbGxpYz0xMDU0O2UuT2RibGFjdXRlPTMzNjtlLk9kYmxncmF2ZT01MjQ7ZS5PZGllcmVzaXM9MjE0O2UuT2RpZXJlc2lzY3lyaWxsaWM9MTI1NDtlLk9kaWVyZXNpc3NtYWxsPTYzNDc4O2UuT2RvdGJlbG93PTc4ODQ7ZS5PZ29uZWtzbWFsbD02MzIyNztlLk9ncmF2ZT0yMTA7ZS5PZ3JhdmVzbWFsbD02MzQ3NDtlLk9oYXJtZW5pYW49MTM2NTtlLk9obT04NDg2O2UuT2hvb2thYm92ZT03ODg2O2UuT2hvcm49NDE2O2UuT2hvcm5hY3V0ZT03ODk4O2UuT2hvcm5kb3RiZWxvdz03OTA2O2UuT2hvcm5ncmF2ZT03OTAwO2UuT2hvcm5ob29rYWJvdmU9NzkwMjtlLk9ob3JudGlsZGU9NzkwNDtlLk9odW5nYXJ1bWxhdXQ9MzM2O2UuT2k9NDE4O2UuT2ludmVydGVkYnJldmU9NTI2O2UuT21hY3Jvbj0zMzI7ZS5PbWFjcm9uYWN1dGU9Nzc2MjtlLk9tYWNyb25ncmF2ZT03NzYwO2UuT21lZ2E9ODQ4NjtlLk9tZWdhY3lyaWxsaWM9MTEyMDtlLk9tZWdhZ3JlZWs9OTM3O2UuT21lZ2Fyb3VuZGN5cmlsbGljPTExNDY7ZS5PbWVnYXRpdGxvY3lyaWxsaWM9MTE0ODtlLk9tZWdhdG9ub3M9OTExO2UuT21pY3Jvbj05Mjc7ZS5PbWljcm9udG9ub3M9OTA4O2UuT21vbm9zcGFjZT02NTMyNztlLk9uZXJvbWFuPTg1NDQ7ZS5Pb2dvbmVrPTQ5MDtlLk9vZ29uZWttYWNyb249NDkyO2UuT29wZW49MzkwO2UuT3NsYXNoPTIxNjtlLk9zbGFzaGFjdXRlPTUxMDtlLk9zbGFzaHNtYWxsPTYzNDgwO2UuT3NtYWxsPTYzMzQzO2UuT3N0cm9rZWFjdXRlPTUxMDtlLk90Y3lyaWxsaWM9MTE1MDtlLk90aWxkZT0yMTM7ZS5PdGlsZGVhY3V0ZT03NzU2O2UuT3RpbGRlZGllcmVzaXM9Nzc1ODtlLk90aWxkZXNtYWxsPTYzNDc3O2UuUD04MDtlLlBhY3V0ZT03NzY0O2UuUGNpcmNsZT05NDEzO2UuUGRvdGFjY2VudD03NzY2O2UuUGVjeXJpbGxpYz0xMDU1O2UuUGVoYXJtZW5pYW49MTM1NDtlLlBlbWlkZGxlaG9va2N5cmlsbGljPTExOTA7ZS5QaGk9OTM0O2UuUGhvb2s9NDIwO2UuUGk9OTI4O2UuUGl3cmFybWVuaWFuPTEzNjM7ZS5QbW9ub3NwYWNlPTY1MzI4O2UuUHNpPTkzNjtlLlBzaWN5cmlsbGljPTExMzY7ZS5Qc21hbGw9NjMzNDQ7ZS5RPTgxO2UuUWNpcmNsZT05NDE0O2UuUW1vbm9zcGFjZT02NTMyOTtlLlFzbWFsbD02MzM0NTtlLlI9ODI7ZS5SYWFybWVuaWFuPTEzNTY7ZS5SYWN1dGU9MzQwO2UuUmNhcm9uPTM0NDtlLlJjZWRpbGxhPTM0MjtlLlJjaXJjbGU9OTQxNTtlLlJjb21tYWFjY2VudD0zNDI7ZS5SZGJsZ3JhdmU9NTI4O2UuUmRvdGFjY2VudD03NzY4O2UuUmRvdGJlbG93PTc3NzA7ZS5SZG90YmVsb3dtYWNyb249Nzc3MjtlLlJlaGFybWVuaWFuPTEzNjA7ZS5SZnJha3R1cj04NDc2O2UuUmhvPTkyOTtlLlJpbmdzbWFsbD02MzIyODtlLlJpbnZlcnRlZGJyZXZlPTUzMDtlLlJsaW5lYmVsb3c9Nzc3NDtlLlJtb25vc3BhY2U9NjUzMzA7ZS5Sc21hbGw9NjMzNDY7ZS5Sc21hbGxpbnZlcnRlZD02NDE7ZS5Sc21hbGxpbnZlcnRlZHN1cGVyaW9yPTY5NDtlLlM9ODM7ZS5TRjAxMDAwMD05NDg0O2UuU0YwMjAwMDA9OTQ5MjtlLlNGMDMwMDAwPTk0ODg7ZS5TRjA0MDAwMD05NDk2O2UuU0YwNTAwMDA9OTUzMjtlLlNGMDYwMDAwPTk1MTY7ZS5TRjA3MDAwMD05NTI0O2UuU0YwODAwMDA9OTUwMDtlLlNGMDkwMDAwPTk1MDg7ZS5TRjEwMDAwMD05NDcyO2UuU0YxMTAwMDA9OTQ3NDtlLlNGMTkwMDAwPTk1Njk7ZS5TRjIwMDAwMD05NTcwO2UuU0YyMTAwMDA9OTU1ODtlLlNGMjIwMDAwPTk1NTc7ZS5TRjIzMDAwMD05NTcxO2UuU0YyNDAwMDA9OTU1MztlLlNGMjUwMDAwPTk1NTk7ZS5TRjI2MDAwMD05NTY1O2UuU0YyNzAwMDA9OTU2NDtlLlNGMjgwMDAwPTk1NjM7ZS5TRjM2MDAwMD05NTY2O2UuU0YzNzAwMDA9OTU2NztlLlNGMzgwMDAwPTk1NjI7ZS5TRjM5MDAwMD05NTU2O2UuU0Y0MDAwMDA9OTU3NztlLlNGNDEwMDAwPTk1NzQ7ZS5TRjQyMDAwMD05NTY4O2UuU0Y0MzAwMDA9OTU1MjtlLlNGNDQwMDAwPTk1ODA7ZS5TRjQ1MDAwMD05NTc1O2UuU0Y0NjAwMDA9OTU3NjtlLlNGNDcwMDAwPTk1NzI7ZS5TRjQ4MDAwMD05NTczO2UuU0Y0OTAwMDA9OTU2MTtlLlNGNTAwMDAwPTk1NjA7ZS5TRjUxMDAwMD05NTU0O2UuU0Y1MjAwMDA9OTU1NTtlLlNGNTMwMDAwPTk1Nzk7ZS5TRjU0MDAwMD05NTc4O2UuU2FjdXRlPTM0NjtlLlNhY3V0ZWRvdGFjY2VudD03NzgwO2UuU2FtcGlncmVlaz05OTI7ZS5TY2Fyb249MzUyO2UuU2Nhcm9uZG90YWNjZW50PTc3ODI7ZS5TY2Fyb25zbWFsbD02MzIyOTtlLlNjZWRpbGxhPTM1MDtlLlNjaHdhPTM5OTtlLlNjaHdhY3lyaWxsaWM9MTI0MDtlLlNjaHdhZGllcmVzaXNjeXJpbGxpYz0xMjQyO2UuU2NpcmNsZT05NDE2O2UuU2NpcmN1bWZsZXg9MzQ4O2UuU2NvbW1hYWNjZW50PTUzNjtlLlNkb3RhY2NlbnQ9Nzc3NjtlLlNkb3RiZWxvdz03Nzc4O2UuU2RvdGJlbG93ZG90YWNjZW50PTc3ODQ7ZS5TZWhhcm1lbmlhbj0xMzU3O2UuU2V2ZW5yb21hbj04NTUwO2UuU2hhYXJtZW5pYW49MTM1MTtlLlNoYWN5cmlsbGljPTEwNjQ7ZS5TaGNoYWN5cmlsbGljPTEwNjU7ZS5TaGVpY29wdGljPTk5NDtlLlNoaGFjeXJpbGxpYz0xMjEwO2UuU2hpbWFjb3B0aWM9MTAwNDtlLlNpZ21hPTkzMTtlLlNpeHJvbWFuPTg1NDk7ZS5TbW9ub3NwYWNlPTY1MzMxO2UuU29mdHNpZ25jeXJpbGxpYz0xMDY4O2UuU3NtYWxsPTYzMzQ3O2UuU3RpZ21hZ3JlZWs9OTg2O2UuVD04NDtlLlRhdT05MzI7ZS5UYmFyPTM1ODtlLlRjYXJvbj0zNTY7ZS5UY2VkaWxsYT0zNTQ7ZS5UY2lyY2xlPTk0MTc7ZS5UY2lyY3VtZmxleGJlbG93PTc3OTI7ZS5UY29tbWFhY2NlbnQ9MzU0O2UuVGRvdGFjY2VudD03Nzg2O2UuVGRvdGJlbG93PTc3ODg7ZS5UZWN5cmlsbGljPTEwNTg7ZS5UZWRlc2NlbmRlcmN5cmlsbGljPTExOTY7ZS5UZW5yb21hbj04NTUzO2UuVGV0c2VjeXJpbGxpYz0xMjA0O2UuVGhldGE9OTIwO2UuVGhvb2s9NDI4O2UuVGhvcm49MjIyO2UuVGhvcm5zbWFsbD02MzQ4NjtlLlRocmVlcm9tYW49ODU0NjtlLlRpbGRlc21hbGw9NjMyMzA7ZS5UaXduYXJtZW5pYW49MTM1OTtlLlRsaW5lYmVsb3c9Nzc5MDtlLlRtb25vc3BhY2U9NjUzMzI7ZS5Ub2FybWVuaWFuPTEzMzc7ZS5Ub25lZml2ZT00NDQ7ZS5Ub25lc2l4PTM4ODtlLlRvbmV0d289NDIzO2UuVHJldHJvZmxleGhvb2s9NDMwO2UuVHNlY3lyaWxsaWM9MTA2MjtlLlRzaGVjeXJpbGxpYz0xMDM1O2UuVHNtYWxsPTYzMzQ4O2UuVHdlbHZlcm9tYW49ODU1NTtlLlR3b3JvbWFuPTg1NDU7ZS5VPTg1O2UuVWFjdXRlPTIxODtlLlVhY3V0ZXNtYWxsPTYzNDgyO2UuVWJyZXZlPTM2NDtlLlVjYXJvbj00Njc7ZS5VY2lyY2xlPTk0MTg7ZS5VY2lyY3VtZmxleD0yMTk7ZS5VY2lyY3VtZmxleGJlbG93PTc3OTg7ZS5VY2lyY3VtZmxleHNtYWxsPTYzNDgzO2UuVWN5cmlsbGljPTEwNTk7ZS5VZGJsYWN1dGU9MzY4O2UuVWRibGdyYXZlPTUzMjtlLlVkaWVyZXNpcz0yMjA7ZS5VZGllcmVzaXNhY3V0ZT00NzE7ZS5VZGllcmVzaXNiZWxvdz03Nzk0O2UuVWRpZXJlc2lzY2Fyb249NDczO2UuVWRpZXJlc2lzY3lyaWxsaWM9MTI2NDtlLlVkaWVyZXNpc2dyYXZlPTQ3NTtlLlVkaWVyZXNpc21hY3Jvbj00Njk7ZS5VZGllcmVzaXNzbWFsbD02MzQ4NDtlLlVkb3RiZWxvdz03OTA4O2UuVWdyYXZlPTIxNztlLlVncmF2ZXNtYWxsPTYzNDgxO2UuVWhvb2thYm92ZT03OTEwO2UuVWhvcm49NDMxO2UuVWhvcm5hY3V0ZT03OTEyO2UuVWhvcm5kb3RiZWxvdz03OTIwO2UuVWhvcm5ncmF2ZT03OTE0O2UuVWhvcm5ob29rYWJvdmU9NzkxNjtlLlVob3JudGlsZGU9NzkxODtlLlVodW5nYXJ1bWxhdXQ9MzY4O2UuVWh1bmdhcnVtbGF1dGN5cmlsbGljPTEyNjY7ZS5VaW52ZXJ0ZWRicmV2ZT01MzQ7ZS5Va2N5cmlsbGljPTExNDQ7ZS5VbWFjcm9uPTM2MjtlLlVtYWNyb25jeXJpbGxpYz0xMjYyO2UuVW1hY3JvbmRpZXJlc2lzPTc4MDI7ZS5VbW9ub3NwYWNlPTY1MzMzO2UuVW9nb25laz0zNzA7ZS5VcHNpbG9uPTkzMztlLlVwc2lsb24xPTk3ODtlLlVwc2lsb25hY3V0ZWhvb2tzeW1ib2xncmVlaz05Nzk7ZS5VcHNpbG9uYWZyaWNhbj00MzM7ZS5VcHNpbG9uZGllcmVzaXM9OTM5O2UuVXBzaWxvbmRpZXJlc2lzaG9va3N5bWJvbGdyZWVrPTk4MDtlLlVwc2lsb25ob29rc3ltYm9sPTk3ODtlLlVwc2lsb250b25vcz05MTA7ZS5VcmluZz0zNjY7ZS5Vc2hvcnRjeXJpbGxpYz0xMDM4O2UuVXNtYWxsPTYzMzQ5O2UuVXN0cmFpZ2h0Y3lyaWxsaWM9MTE5ODtlLlVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDA7ZS5VdGlsZGU9MzYwO2UuVXRpbGRlYWN1dGU9NzgwMDtlLlV0aWxkZWJlbG93PTc3OTY7ZS5WPTg2O2UuVmNpcmNsZT05NDE5O2UuVmRvdGJlbG93PTc4MDY7ZS5WZWN5cmlsbGljPTEwNDI7ZS5WZXdhcm1lbmlhbj0xMzU4O2UuVmhvb2s9NDM0O2UuVm1vbm9zcGFjZT02NTMzNDtlLlZvYXJtZW5pYW49MTM1MjtlLlZzbWFsbD02MzM1MDtlLlZ0aWxkZT03ODA0O2UuVz04NztlLldhY3V0ZT03ODEwO2UuV2NpcmNsZT05NDIwO2UuV2NpcmN1bWZsZXg9MzcyO2UuV2RpZXJlc2lzPTc4MTI7ZS5XZG90YWNjZW50PTc4MTQ7ZS5XZG90YmVsb3c9NzgxNjtlLldncmF2ZT03ODA4O2UuV21vbm9zcGFjZT02NTMzNTtlLldzbWFsbD02MzM1MTtlLlg9ODg7ZS5YY2lyY2xlPTk0MjE7ZS5YZGllcmVzaXM9NzgyMDtlLlhkb3RhY2NlbnQ9NzgxODtlLlhlaGFybWVuaWFuPTEzNDE7ZS5YaT05MjY7ZS5YbW9ub3NwYWNlPTY1MzM2O2UuWHNtYWxsPTYzMzUyO2UuWT04OTtlLllhY3V0ZT0yMjE7ZS5ZYWN1dGVzbWFsbD02MzQ4NTtlLllhdGN5cmlsbGljPTExMjI7ZS5ZY2lyY2xlPTk0MjI7ZS5ZY2lyY3VtZmxleD0zNzQ7ZS5ZZGllcmVzaXM9Mzc2O2UuWWRpZXJlc2lzc21hbGw9NjM0ODc7ZS5ZZG90YWNjZW50PTc4MjI7ZS5ZZG90YmVsb3c9NzkyNDtlLlllcmljeXJpbGxpYz0xMDY3O2UuWWVydWRpZXJlc2lzY3lyaWxsaWM9MTI3MjtlLllncmF2ZT03OTIyO2UuWWhvb2s9NDM1O2UuWWhvb2thYm92ZT03OTI2O2UuWWlhcm1lbmlhbj0xMzQ5O2UuWWljeXJpbGxpYz0xMDMxO2UuWWl3bmFybWVuaWFuPTEzNjI7ZS5ZbW9ub3NwYWNlPTY1MzM3O2UuWXNtYWxsPTYzMzUzO2UuWXRpbGRlPTc5Mjg7ZS5ZdXNiaWdjeXJpbGxpYz0xMTMwO2UuWXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMyO2UuWXVzbGl0dGxlY3lyaWxsaWM9MTEyNjtlLll1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyODtlLlo9OTA7ZS5aYWFybWVuaWFuPTEzMzQ7ZS5aYWN1dGU9Mzc3O2UuWmNhcm9uPTM4MTtlLlpjYXJvbnNtYWxsPTYzMjMxO2UuWmNpcmNsZT05NDIzO2UuWmNpcmN1bWZsZXg9NzgyNDtlLlpkb3Q9Mzc5O2UuWmRvdGFjY2VudD0zNzk7ZS5aZG90YmVsb3c9NzgyNjtlLlplY3lyaWxsaWM9MTA0NztlLlplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NjtlLlplZGllcmVzaXNjeXJpbGxpYz0xMjQ2O2UuWmV0YT05MTg7ZS5aaGVhcm1lbmlhbj0xMzM4O2UuWmhlYnJldmVjeXJpbGxpYz0xMjE3O2UuWmhlY3lyaWxsaWM9MTA0NjtlLlpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzQ7ZS5aaGVkaWVyZXNpc2N5cmlsbGljPTEyNDQ7ZS5abGluZWJlbG93PTc4Mjg7ZS5abW9ub3NwYWNlPTY1MzM4O2UuWnNtYWxsPTYzMzU0O2UuWnN0cm9rZT00Mzc7ZS5hPTk3O2UuYWFiZW5nYWxpPTI0Mzg7ZS5hYWN1dGU9MjI1O2UuYWFkZXZhPTIzMTA7ZS5hYWd1amFyYXRpPTI2OTQ7ZS5hYWd1cm11a2hpPTI1NjY7ZS5hYW1hdHJhZ3VybXVraGk9MjYyMjtlLmFhcnVzcXVhcmU9MTMwNTk7ZS5hYXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NDtlLmFhdm93ZWxzaWduZGV2YT0yMzY2O2UuYWF2b3dlbHNpZ25ndWphcmF0aT0yNzUwO2UuYWJicmV2aWF0aW9ubWFya2FybWVuaWFuPTEzNzU7ZS5hYmJyZXZpYXRpb25zaWduZGV2YT0yNDE2O2UuYWJlbmdhbGk9MjQzNztlLmFib3BvbW9mbz0xMjU3MDtlLmFicmV2ZT0yNTk7ZS5hYnJldmVhY3V0ZT03ODU1O2UuYWJyZXZlY3lyaWxsaWM9MTIzMztlLmFicmV2ZWRvdGJlbG93PTc4NjM7ZS5hYnJldmVncmF2ZT03ODU3O2UuYWJyZXZlaG9va2Fib3ZlPTc4NTk7ZS5hYnJldmV0aWxkZT03ODYxO2UuYWNhcm9uPTQ2MjtlLmFjaXJjbGU9OTQyNDtlLmFjaXJjdW1mbGV4PTIyNjtlLmFjaXJjdW1mbGV4YWN1dGU9Nzg0NTtlLmFjaXJjdW1mbGV4ZG90YmVsb3c9Nzg1MztlLmFjaXJjdW1mbGV4Z3JhdmU9Nzg0NztlLmFjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NDk7ZS5hY2lyY3VtZmxleHRpbGRlPTc4NTE7ZS5hY3V0ZT0xODA7ZS5hY3V0ZWJlbG93Y21iPTc5MTtlLmFjdXRlY21iPTc2OTtlLmFjdXRlY29tYj03Njk7ZS5hY3V0ZWRldmE9MjM4ODtlLmFjdXRlbG93bW9kPTcxOTtlLmFjdXRldG9uZWNtYj04MzM7ZS5hY3lyaWxsaWM9MTA3MjtlLmFkYmxncmF2ZT01MTM7ZS5hZGRha2d1cm11a2hpPTI2NzM7ZS5hZGV2YT0yMzA5O2UuYWRpZXJlc2lzPTIyODtlLmFkaWVyZXNpc2N5cmlsbGljPTEyMzU7ZS5hZGllcmVzaXNtYWNyb249NDc5O2UuYWRvdGJlbG93PTc4NDE7ZS5hZG90bWFjcm9uPTQ4MTtlLmFlPTIzMDtlLmFlYWN1dGU9NTA5O2UuYWVrb3JlYW49MTI2MjQ7ZS5hZW1hY3Jvbj00ODM7ZS5hZmlpMDAyMDg9ODIxMztlLmFmaWkwODk0MT04MzU2O2UuYWZpaTEwMDE3PTEwNDA7ZS5hZmlpMTAwMTg9MTA0MTtlLmFmaWkxMDAxOT0xMDQyO2UuYWZpaTEwMDIwPTEwNDM7ZS5hZmlpMTAwMjE9MTA0NDtlLmFmaWkxMDAyMj0xMDQ1O2UuYWZpaTEwMDIzPTEwMjU7ZS5hZmlpMTAwMjQ9MTA0NjtlLmFmaWkxMDAyNT0xMDQ3O2UuYWZpaTEwMDI2PTEwNDg7ZS5hZmlpMTAwMjc9MTA0OTtlLmFmaWkxMDAyOD0xMDUwO2UuYWZpaTEwMDI5PTEwNTE7ZS5hZmlpMTAwMzA9MTA1MjtlLmFmaWkxMDAzMT0xMDUzO2UuYWZpaTEwMDMyPTEwNTQ7ZS5hZmlpMTAwMzM9MTA1NTtlLmFmaWkxMDAzND0xMDU2O2UuYWZpaTEwMDM1PTEwNTc7ZS5hZmlpMTAwMzY9MTA1ODtlLmFmaWkxMDAzNz0xMDU5O2UuYWZpaTEwMDM4PTEwNjA7ZS5hZmlpMTAwMzk9MTA2MTtlLmFmaWkxMDA0MD0xMDYyO2UuYWZpaTEwMDQxPTEwNjM7ZS5hZmlpMTAwNDI9MTA2NDtlLmFmaWkxMDA0Mz0xMDY1O2UuYWZpaTEwMDQ0PTEwNjY7ZS5hZmlpMTAwNDU9MTA2NztlLmFmaWkxMDA0Nj0xMDY4O2UuYWZpaTEwMDQ3PTEwNjk7ZS5hZmlpMTAwNDg9MTA3MDtlLmFmaWkxMDA0OT0xMDcxO2UuYWZpaTEwMDUwPTExNjg7ZS5hZmlpMTAwNTE9MTAyNjtlLmFmaWkxMDA1Mj0xMDI3O2UuYWZpaTEwMDUzPTEwMjg7ZS5hZmlpMTAwNTQ9MTAyOTtlLmFmaWkxMDA1NT0xMDMwO2UuYWZpaTEwMDU2PTEwMzE7ZS5hZmlpMTAwNTc9MTAzMjtlLmFmaWkxMDA1OD0xMDMzO2UuYWZpaTEwMDU5PTEwMzQ7ZS5hZmlpMTAwNjA9MTAzNTtlLmFmaWkxMDA2MT0xMDM2O2UuYWZpaTEwMDYyPTEwMzg7ZS5hZmlpMTAwNjM9NjMxNzI7ZS5hZmlpMTAwNjQ9NjMxNzM7ZS5hZmlpMTAwNjU9MTA3MjtlLmFmaWkxMDA2Nj0xMDczO2UuYWZpaTEwMDY3PTEwNzQ7ZS5hZmlpMTAwNjg9MTA3NTtlLmFmaWkxMDA2OT0xMDc2O2UuYWZpaTEwMDcwPTEwNzc7ZS5hZmlpMTAwNzE9MTEwNTtlLmFmaWkxMDA3Mj0xMDc4O2UuYWZpaTEwMDczPTEwNzk7ZS5hZmlpMTAwNzQ9MTA4MDtlLmFmaWkxMDA3NT0xMDgxO2UuYWZpaTEwMDc2PTEwODI7ZS5hZmlpMTAwNzc9MTA4MztlLmFmaWkxMDA3OD0xMDg0O2UuYWZpaTEwMDc5PTEwODU7ZS5hZmlpMTAwODA9MTA4NjtlLmFmaWkxMDA4MT0xMDg3O2UuYWZpaTEwMDgyPTEwODg7ZS5hZmlpMTAwODM9MTA4OTtlLmFmaWkxMDA4ND0xMDkwO2UuYWZpaTEwMDg1PTEwOTE7ZS5hZmlpMTAwODY9MTA5MjtlLmFmaWkxMDA4Nz0xMDkzO2UuYWZpaTEwMDg4PTEwOTQ7ZS5hZmlpMTAwODk9MTA5NTtlLmFmaWkxMDA5MD0xMDk2O2UuYWZpaTEwMDkxPTEwOTc7ZS5hZmlpMTAwOTI9MTA5ODtlLmFmaWkxMDA5Mz0xMDk5O2UuYWZpaTEwMDk0PTExMDA7ZS5hZmlpMTAwOTU9MTEwMTtlLmFmaWkxMDA5Nj0xMTAyO2UuYWZpaTEwMDk3PTExMDM7ZS5hZmlpMTAwOTg9MTE2OTtlLmFmaWkxMDA5OT0xMTA2O2UuYWZpaTEwMTAwPTExMDc7ZS5hZmlpMTAxMDE9MTEwODtlLmFmaWkxMDEwMj0xMTA5O2UuYWZpaTEwMTAzPTExMTA7ZS5hZmlpMTAxMDQ9MTExMTtlLmFmaWkxMDEwNT0xMTEyO2UuYWZpaTEwMTA2PTExMTM7ZS5hZmlpMTAxMDc9MTExNDtlLmFmaWkxMDEwOD0xMTE1O2UuYWZpaTEwMTA5PTExMTY7ZS5hZmlpMTAxMTA9MTExODtlLmFmaWkxMDE0NT0xMDM5O2UuYWZpaTEwMTQ2PTExMjI7ZS5hZmlpMTAxNDc9MTEzODtlLmFmaWkxMDE0OD0xMTQwO2UuYWZpaTEwMTkyPTYzMTc0O2UuYWZpaTEwMTkzPTExMTk7ZS5hZmlpMTAxOTQ9MTEyMztlLmFmaWkxMDE5NT0xMTM5O2UuYWZpaTEwMTk2PTExNDE7ZS5hZmlpMTA4MzE9NjMxNzU7ZS5hZmlpMTA4MzI9NjMxNzY7ZS5hZmlpMTA4NDY9MTI0MTtlLmFmaWkyOTk9ODIwNjtlLmFmaWkzMDA9ODIwNztlLmFmaWkzMDE9ODIwNTtlLmFmaWk1NzM4MT0xNjQyO2UuYWZpaTU3Mzg4PTE1NDg7ZS5hZmlpNTczOTI9MTYzMjtlLmFmaWk1NzM5Mz0xNjMzO2UuYWZpaTU3Mzk0PTE2MzQ7ZS5hZmlpNTczOTU9MTYzNTtlLmFmaWk1NzM5Nj0xNjM2O2UuYWZpaTU3Mzk3PTE2Mzc7ZS5hZmlpNTczOTg9MTYzODtlLmFmaWk1NzM5OT0xNjM5O2UuYWZpaTU3NDAwPTE2NDA7ZS5hZmlpNTc0MDE9MTY0MTtlLmFmaWk1NzQwMz0xNTYzO2UuYWZpaTU3NDA3PTE1Njc7ZS5hZmlpNTc0MDk9MTU2OTtlLmFmaWk1NzQxMD0xNTcwO2UuYWZpaTU3NDExPTE1NzE7ZS5hZmlpNTc0MTI9MTU3MjtlLmFmaWk1NzQxMz0xNTczO2UuYWZpaTU3NDE0PTE1NzQ7ZS5hZmlpNTc0MTU9MTU3NTtlLmFmaWk1NzQxNj0xNTc2O2UuYWZpaTU3NDE3PTE1Nzc7ZS5hZmlpNTc0MTg9MTU3ODtlLmFmaWk1NzQxOT0xNTc5O2UuYWZpaTU3NDIwPTE1ODA7ZS5hZmlpNTc0MjE9MTU4MTtlLmFmaWk1NzQyMj0xNTgyO2UuYWZpaTU3NDIzPTE1ODM7ZS5hZmlpNTc0MjQ9MTU4NDtlLmFmaWk1NzQyNT0xNTg1O2UuYWZpaTU3NDI2PTE1ODY7ZS5hZmlpNTc0Mjc9MTU4NztlLmFmaWk1NzQyOD0xNTg4O2UuYWZpaTU3NDI5PTE1ODk7ZS5hZmlpNTc0MzA9MTU5MDtlLmFmaWk1NzQzMT0xNTkxO2UuYWZpaTU3NDMyPTE1OTI7ZS5hZmlpNTc0MzM9MTU5MztlLmFmaWk1NzQzND0xNTk0O2UuYWZpaTU3NDQwPTE2MDA7ZS5hZmlpNTc0NDE9MTYwMTtlLmFmaWk1NzQ0Mj0xNjAyO2UuYWZpaTU3NDQzPTE2MDM7ZS5hZmlpNTc0NDQ9MTYwNDtlLmFmaWk1NzQ0NT0xNjA1O2UuYWZpaTU3NDQ2PTE2MDY7ZS5hZmlpNTc0NDg9MTYwODtlLmFmaWk1NzQ0OT0xNjA5O2UuYWZpaTU3NDUwPTE2MTA7ZS5hZmlpNTc0NTE9MTYxMTtlLmFmaWk1NzQ1Mj0xNjEyO2UuYWZpaTU3NDUzPTE2MTM7ZS5hZmlpNTc0NTQ9MTYxNDtlLmFmaWk1NzQ1NT0xNjE1O2UuYWZpaTU3NDU2PTE2MTY7ZS5hZmlpNTc0NTc9MTYxNztlLmFmaWk1NzQ1OD0xNjE4O2UuYWZpaTU3NDcwPTE2MDc7ZS5hZmlpNTc1MDU9MTcwMDtlLmFmaWk1NzUwNj0xNjYyO2UuYWZpaTU3NTA3PTE2NzA7ZS5hZmlpNTc1MDg9MTY4ODtlLmFmaWk1NzUwOT0xNzExO2UuYWZpaTU3NTExPTE2NTc7ZS5hZmlpNTc1MTI9MTY3MjtlLmFmaWk1NzUxMz0xNjgxO2UuYWZpaTU3NTE0PTE3MjI7ZS5hZmlpNTc1MTk9MTc0NjtlLmFmaWk1NzUzND0xNzQ5O2UuYWZpaTU3NjM2PTgzNjI7ZS5hZmlpNTc2NDU9MTQ3MDtlLmFmaWk1NzY1OD0xNDc1O2UuYWZpaTU3NjY0PTE0ODg7ZS5hZmlpNTc2NjU9MTQ4OTtlLmFmaWk1NzY2Nj0xNDkwO2UuYWZpaTU3NjY3PTE0OTE7ZS5hZmlpNTc2Njg9MTQ5MjtlLmFmaWk1NzY2OT0xNDkzO2UuYWZpaTU3NjcwPTE0OTQ7ZS5hZmlpNTc2NzE9MTQ5NTtlLmFmaWk1NzY3Mj0xNDk2O2UuYWZpaTU3NjczPTE0OTc7ZS5hZmlpNTc2NzQ9MTQ5ODtlLmFmaWk1NzY3NT0xNDk5O2UuYWZpaTU3Njc2PTE1MDA7ZS5hZmlpNTc2Nzc9MTUwMTtlLmFmaWk1NzY3OD0xNTAyO2UuYWZpaTU3Njc5PTE1MDM7ZS5hZmlpNTc2ODA9MTUwNDtlLmFmaWk1NzY4MT0xNTA1O2UuYWZpaTU3NjgyPTE1MDY7ZS5hZmlpNTc2ODM9MTUwNztlLmFmaWk1NzY4ND0xNTA4O2UuYWZpaTU3Njg1PTE1MDk7ZS5hZmlpNTc2ODY9MTUxMDtlLmFmaWk1NzY4Nz0xNTExO2UuYWZpaTU3Njg4PTE1MTI7ZS5hZmlpNTc2ODk9MTUxMztlLmFmaWk1NzY5MD0xNTE0O2UuYWZpaTU3Njk0PTY0Mjk4O2UuYWZpaTU3Njk1PTY0Mjk5O2UuYWZpaTU3NzAwPTY0MzMxO2UuYWZpaTU3NzA1PTY0Mjg3O2UuYWZpaTU3NzE2PTE1MjA7ZS5hZmlpNTc3MTc9MTUyMTtlLmFmaWk1NzcxOD0xNTIyO2UuYWZpaTU3NzIzPTY0MzA5O2UuYWZpaTU3NzkzPTE0NjA7ZS5hZmlpNTc3OTQ9MTQ2MTtlLmFmaWk1Nzc5NT0xNDYyO2UuYWZpaTU3Nzk2PTE0Njc7ZS5hZmlpNTc3OTc9MTQ2NDtlLmFmaWk1Nzc5OD0xNDYzO2UuYWZpaTU3Nzk5PTE0NTY7ZS5hZmlpNTc4MDA9MTQ1ODtlLmFmaWk1NzgwMT0xNDU3O2UuYWZpaTU3ODAyPTE0NTk7ZS5hZmlpNTc4MDM9MTQ3NDtlLmFmaWk1NzgwND0xNDczO2UuYWZpaTU3ODA2PTE0NjU7ZS5hZmlpNTc4MDc9MTQ2ODtlLmFmaWk1NzgzOT0xNDY5O2UuYWZpaTU3ODQxPTE0NzE7ZS5hZmlpNTc4NDI9MTQ3MjtlLmFmaWk1NzkyOT03MDA7ZS5hZmlpNjEyNDg9ODQ1MztlLmFmaWk2MTI4OT04NDY3O2UuYWZpaTYxMzUyPTg0NzA7ZS5hZmlpNjE1NzM9ODIzNjtlLmFmaWk2MTU3ND04MjM3O2UuYWZpaTYxNTc1PTgyMzg7ZS5hZmlpNjE2NjQ9ODIwNDtlLmFmaWk2MzE2Nz0xNjQ1O2UuYWZpaTY0OTM3PTcwMTtlLmFncmF2ZT0yMjQ7ZS5hZ3VqYXJhdGk9MjY5MztlLmFndXJtdWtoaT0yNTY1O2UuYWhpcmFnYW5hPTEyMzU0O2UuYWhvb2thYm92ZT03ODQzO2UuYWliZW5nYWxpPTI0NDg7ZS5haWJvcG9tb2ZvPTEyNTc0O2UuYWlkZXZhPTIzMjA7ZS5haWVjeXJpbGxpYz0xMjM3O2UuYWlndWphcmF0aT0yNzA0O2UuYWlndXJtdWtoaT0yNTc2O2UuYWltYXRyYWd1cm11a2hpPTI2MzI7ZS5haW5hcmFiaWM9MTU5MztlLmFpbmZpbmFsYXJhYmljPTY1MjI2O2UuYWluaW5pdGlhbGFyYWJpYz02NTIyNztlLmFpbm1lZGlhbGFyYWJpYz02NTIyODtlLmFpbnZlcnRlZGJyZXZlPTUxNTtlLmFpdm93ZWxzaWduYmVuZ2FsaT0yNTA0O2UuYWl2b3dlbHNpZ25kZXZhPTIzNzY7ZS5haXZvd2Vsc2lnbmd1amFyYXRpPTI3NjA7ZS5ha2F0YWthbmE9MTI0NTA7ZS5ha2F0YWthbmFoYWxmd2lkdGg9NjUzOTM7ZS5ha29yZWFuPTEyNjIzO2UuYWxlZj0xNDg4O2UuYWxlZmFyYWJpYz0xNTc1O2UuYWxlZmRhZ2VzaGhlYnJldz02NDMwNDtlLmFsZWZmaW5hbGFyYWJpYz02NTE2NjtlLmFsZWZoYW16YWFib3ZlYXJhYmljPTE1NzE7ZS5hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTU2O2UuYWxlZmhhbXphYmVsb3dhcmFiaWM9MTU3MztlLmFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUxNjA7ZS5hbGVmaGVicmV3PTE0ODg7ZS5hbGVmbGFtZWRoZWJyZXc9NjQzMzU7ZS5hbGVmbWFkZGFhYm92ZWFyYWJpYz0xNTcwO2UuYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTE1NDtlLmFsZWZtYWtzdXJhYXJhYmljPTE2MDk7ZS5hbGVmbWFrc3VyYWZpbmFsYXJhYmljPTY1MjY0O2UuYWxlZm1ha3N1cmFpbml0aWFsYXJhYmljPTY1MjY3O2UuYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWM9NjUyNjg7ZS5hbGVmcGF0YWhoZWJyZXc9NjQzMDI7ZS5hbGVmcWFtYXRzaGVicmV3PTY0MzAzO2UuYWxlcGg9ODUwMTtlLmFsbGVxdWFsPTg3ODA7ZS5hbHBoYT05NDU7ZS5hbHBoYXRvbm9zPTk0MDtlLmFtYWNyb249MjU3O2UuYW1vbm9zcGFjZT02NTM0NTtlLmFtcGVyc2FuZD0zODtlLmFtcGVyc2FuZG1vbm9zcGFjZT02NTI4NjtlLmFtcGVyc2FuZHNtYWxsPTYzMjcwO2UuYW1zcXVhcmU9MTMyNTA7ZS5hbmJvcG9tb2ZvPTEyNTc4O2UuYW5nYm9wb21vZm89MTI1ODA7ZS5hbmdicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2JyYWNrZXRyaWdodD0xMjI5NztlLmFuZ2toYW5raHV0aGFpPTM2NzQ7ZS5hbmdsZT04NzM2O2UuYW5nbGVicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NztlLmFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk3O2UuYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4ODtlLmFuZ2xlbGVmdD05MDAxO2UuYW5nbGVyaWdodD05MDAyO2UuYW5nc3Ryb209ODQ5MTtlLmFub3RlbGVpYT05MDM7ZS5hbnVkYXR0YWRldmE9MjM4NjtlLmFudXN2YXJhYmVuZ2FsaT0yNDM0O2UuYW51c3ZhcmFkZXZhPTIzMDY7ZS5hbnVzdmFyYWd1amFyYXRpPTI2OTA7ZS5hb2dvbmVrPTI2MTtlLmFwYWF0b3NxdWFyZT0xMzA1NjtlLmFwYXJlbj05MzcyO2UuYXBvc3Ryb3BoZWFybWVuaWFuPTEzNzA7ZS5hcG9zdHJvcGhlbW9kPTcwMDtlLmFwcGxlPTYzNzQzO2UuYXBwcm9hY2hlcz04Nzg0O2UuYXBwcm94ZXF1YWw9ODc3NjtlLmFwcHJveGVxdWFsb3JpbWFnZT04Nzg2O2UuYXBwcm94aW1hdGVseWVxdWFsPTg3NzM7ZS5hcmFlYWVrb3JlYW49MTI2ODY7ZS5hcmFlYWtvcmVhbj0xMjY4NTtlLmFyYz04OTc4O2UuYXJpZ2h0aGFsZnJpbmc9NzgzNDtlLmFyaW5nPTIyOTtlLmFyaW5nYWN1dGU9NTA3O2UuYXJpbmdiZWxvdz03NjgxO2UuYXJyb3dib3RoPTg1OTY7ZS5hcnJvd2Rhc2hkb3duPTg2NzU7ZS5hcnJvd2Rhc2hsZWZ0PTg2NzI7ZS5hcnJvd2Rhc2hyaWdodD04Njc0O2UuYXJyb3dkYXNodXA9ODY3MztlLmFycm93ZGJsYm90aD04NjYwO2UuYXJyb3dkYmxkb3duPTg2NTk7ZS5hcnJvd2RibGxlZnQ9ODY1NjtlLmFycm93ZGJscmlnaHQ9ODY1ODtlLmFycm93ZGJsdXA9ODY1NztlLmFycm93ZG93bj04NTk1O2UuYXJyb3dkb3dubGVmdD04NjAxO2UuYXJyb3dkb3ducmlnaHQ9ODYwMDtlLmFycm93ZG93bndoaXRlPTg2ODE7ZS5hcnJvd2hlYWRkb3dubW9kPTcwOTtlLmFycm93aGVhZGxlZnRtb2Q9NzA2O2UuYXJyb3doZWFkcmlnaHRtb2Q9NzA3O2UuYXJyb3doZWFkdXBtb2Q9NzA4O2UuYXJyb3dob3JpemV4PTYzNzE5O2UuYXJyb3dsZWZ0PTg1OTI7ZS5hcnJvd2xlZnRkYmw9ODY1NjtlLmFycm93bGVmdGRibHN0cm9rZT04NjUzO2UuYXJyb3dsZWZ0b3ZlcnJpZ2h0PTg2NDY7ZS5hcnJvd2xlZnR3aGl0ZT04Njc4O2UuYXJyb3dyaWdodD04NTk0O2UuYXJyb3dyaWdodGRibHN0cm9rZT04NjU1O2UuYXJyb3dyaWdodGhlYXZ5PTEwMTQyO2UuYXJyb3dyaWdodG92ZXJsZWZ0PTg2NDQ7ZS5hcnJvd3JpZ2h0d2hpdGU9ODY4MDtlLmFycm93dGFibGVmdD04Njc2O2UuYXJyb3d0YWJyaWdodD04Njc3O2UuYXJyb3d1cD04NTkzO2UuYXJyb3d1cGRuPTg1OTc7ZS5hcnJvd3VwZG5ic2U9ODYxNjtlLmFycm93dXBkb3duYmFzZT04NjE2O2UuYXJyb3d1cGxlZnQ9ODU5ODtlLmFycm93dXBsZWZ0b2Zkb3duPTg2NDU7ZS5hcnJvd3VwcmlnaHQ9ODU5OTtlLmFycm93dXB3aGl0ZT04Njc5O2UuYXJyb3d2ZXJ0ZXg9NjM3MTg7ZS5hc2NpaWNpcmN1bT05NDtlLmFzY2lpY2lyY3VtbW9ub3NwYWNlPTY1MzQyO2UuYXNjaWl0aWxkZT0xMjY7ZS5hc2NpaXRpbGRlbW9ub3NwYWNlPTY1Mzc0O2UuYXNjcmlwdD01OTM7ZS5hc2NyaXB0dHVybmVkPTU5NDtlLmFzbWFsbGhpcmFnYW5hPTEyMzUzO2UuYXNtYWxsa2F0YWthbmE9MTI0NDk7ZS5hc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4MztlLmFzdGVyaXNrPTQyO2UuYXN0ZXJpc2thbHRvbmVhcmFiaWM9MTY0NTtlLmFzdGVyaXNrYXJhYmljPTE2NDU7ZS5hc3Rlcmlza21hdGg9ODcyNztlLmFzdGVyaXNrbW9ub3NwYWNlPTY1MjkwO2UuYXN0ZXJpc2tzbWFsbD02NTEyMTtlLmFzdGVyaXNtPTgyNTg7ZS5hc3VwZXJpb3I9NjMyMDk7ZS5hc3ltcHRvdGljYWxseWVxdWFsPTg3NzE7ZS5hdD02NDtlLmF0aWxkZT0yMjc7ZS5hdG1vbm9zcGFjZT02NTMxMjtlLmF0c21hbGw9NjUxMzE7ZS5hdHVybmVkPTU5MjtlLmF1YmVuZ2FsaT0yNDUyO2UuYXVib3BvbW9mbz0xMjU3NjtlLmF1ZGV2YT0yMzI0O2UuYXVndWphcmF0aT0yNzA4O2UuYXVndXJtdWtoaT0yNTgwO2UuYXVsZW5ndGhtYXJrYmVuZ2FsaT0yNTE5O2UuYXVtYXRyYWd1cm11a2hpPTI2MzY7ZS5hdXZvd2Vsc2lnbmJlbmdhbGk9MjUwODtlLmF1dm93ZWxzaWduZGV2YT0yMzgwO2UuYXV2b3dlbHNpZ25ndWphcmF0aT0yNzY0O2UuYXZhZ3JhaGFkZXZhPTIzNjU7ZS5heWJhcm1lbmlhbj0xMzc3O2UuYXlpbj0xNTA2O2UuYXlpbmFsdG9uZWhlYnJldz02NDI4ODtlLmF5aW5oZWJyZXc9MTUwNjtlLmI9OTg7ZS5iYWJlbmdhbGk9MjQ3NjtlLmJhY2tzbGFzaD05MjtlLmJhY2tzbGFzaG1vbm9zcGFjZT02NTM0MDtlLmJhZGV2YT0yMzQ4O2UuYmFndWphcmF0aT0yNzMyO2UuYmFndXJtdWtoaT0yNjA0O2UuYmFoaXJhZ2FuYT0xMjQwMDtlLmJhaHR0aGFpPTM2NDc7ZS5iYWthdGFrYW5hPTEyNDk2O2UuYmFyPTEyNDtlLmJhcm1vbm9zcGFjZT02NTM3MjtlLmJib3BvbW9mbz0xMjU0OTtlLmJjaXJjbGU9OTQyNTtlLmJkb3RhY2NlbnQ9NzY4MztlLmJkb3RiZWxvdz03Njg1O2UuYmVhbWVkc2l4dGVlbnRobm90ZXM9OTgzNjtlLmJlY2F1c2U9ODc1NztlLmJlY3lyaWxsaWM9MTA3MztlLmJlaGFyYWJpYz0xNTc2O2UuYmVoZmluYWxhcmFiaWM9NjUxNjg7ZS5iZWhpbml0aWFsYXJhYmljPTY1MTY5O2UuYmVoaXJhZ2FuYT0xMjQwOTtlLmJlaG1lZGlhbGFyYWJpYz02NTE3MDtlLmJlaG1lZW1pbml0aWFsYXJhYmljPTY0NjcxO2UuYmVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTIwO2UuYmVobm9vbmZpbmFsYXJhYmljPTY0NjIxO2UuYmVrYXRha2FuYT0xMjUwNTtlLmJlbmFybWVuaWFuPTEzNzg7ZS5iZXQ9MTQ4OTtlLmJldGE9OTQ2O2UuYmV0YXN5bWJvbGdyZWVrPTk3NjtlLmJldGRhZ2VzaD02NDMwNTtlLmJldGRhZ2VzaGhlYnJldz02NDMwNTtlLmJldGhlYnJldz0xNDg5O2UuYmV0cmFmZWhlYnJldz02NDMzMjtlLmJoYWJlbmdhbGk9MjQ3NztlLmJoYWRldmE9MjM0OTtlLmJoYWd1amFyYXRpPTI3MzM7ZS5iaGFndXJtdWtoaT0yNjA1O2UuYmhvb2s9NTk1O2UuYmloaXJhZ2FuYT0xMjQwMztlLmJpa2F0YWthbmE9MTI0OTk7ZS5iaWxhYmlhbGNsaWNrPTY2NDtlLmJpbmRpZ3VybXVraGk9MjU2MjtlLmJpcnVzcXVhcmU9MTMxMDU7ZS5ibGFja2NpcmNsZT05Njc5O2UuYmxhY2tkaWFtb25kPTk2NzA7ZS5ibGFja2Rvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjA7ZS5ibGFja2xlZnRwb2ludGluZ3BvaW50ZXI9OTY2ODtlLmJsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NDtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzA0O2UuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MztlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodD0xMjMwNTtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDg0O2UuYmxhY2tsb3dlcmxlZnR0cmlhbmdsZT05Njk5O2UuYmxhY2tsb3dlcnJpZ2h0dHJpYW5nbGU9OTY5ODtlLmJsYWNrcmVjdGFuZ2xlPTk2NDQ7ZS5ibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyPTk2NTg7ZS5ibGFja3JpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU0O2UuYmxhY2tzbWFsbHNxdWFyZT05NjQyO2UuYmxhY2tzbWlsaW5nZmFjZT05Nzg3O2UuYmxhY2tzcXVhcmU9OTYzMjtlLmJsYWNrc3Rhcj05NzMzO2UuYmxhY2t1cHBlcmxlZnR0cmlhbmdsZT05NzAwO2UuYmxhY2t1cHBlcnJpZ2h0dHJpYW5nbGU9OTcwMTtlLmJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MjtlLmJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlPTk2NTA7ZS5ibGFuaz05MjUxO2UuYmxpbmViZWxvdz03Njg3O2UuYmxvY2s9OTYwODtlLmJtb25vc3BhY2U9NjUzNDY7ZS5ib2JhaW1haXRoYWk9MzYxMDtlLmJvaGlyYWdhbmE9MTI0MTI7ZS5ib2thdGFrYW5hPTEyNTA4O2UuYnBhcmVuPTkzNzM7ZS5icXNxdWFyZT0xMzI1MTtlLmJyYWNlZXg9NjM3MzI7ZS5icmFjZWxlZnQ9MTIzO2UuYnJhY2VsZWZ0YnQ9NjM3MzE7ZS5icmFjZWxlZnRtaWQ9NjM3MzA7ZS5icmFjZWxlZnRtb25vc3BhY2U9NjUzNzE7ZS5icmFjZWxlZnRzbWFsbD02NTExNTtlLmJyYWNlbGVmdHRwPTYzNzI5O2UuYnJhY2VsZWZ0dmVydGljYWw9NjUwNzk7ZS5icmFjZXJpZ2h0PTEyNTtlLmJyYWNlcmlnaHRidD02Mzc0MjtlLmJyYWNlcmlnaHRtaWQ9NjM3NDE7ZS5icmFjZXJpZ2h0bW9ub3NwYWNlPTY1MzczO2UuYnJhY2VyaWdodHNtYWxsPTY1MTE2O2UuYnJhY2VyaWdodHRwPTYzNzQwO2UuYnJhY2VyaWdodHZlcnRpY2FsPTY1MDgwO2UuYnJhY2tldGxlZnQ9OTE7ZS5icmFja2V0bGVmdGJ0PTYzNzI4O2UuYnJhY2tldGxlZnRleD02MzcyNztlLmJyYWNrZXRsZWZ0bW9ub3NwYWNlPTY1MzM5O2UuYnJhY2tldGxlZnR0cD02MzcyNjtlLmJyYWNrZXRyaWdodD05MztlLmJyYWNrZXRyaWdodGJ0PTYzNzM5O2UuYnJhY2tldHJpZ2h0ZXg9NjM3Mzg7ZS5icmFja2V0cmlnaHRtb25vc3BhY2U9NjUzNDE7ZS5icmFja2V0cmlnaHR0cD02MzczNztlLmJyZXZlPTcyODtlLmJyZXZlYmVsb3djbWI9ODE0O2UuYnJldmVjbWI9Nzc0O2UuYnJldmVpbnZlcnRlZGJlbG93Y21iPTgxNTtlLmJyZXZlaW52ZXJ0ZWRjbWI9Nzg1O2UuYnJldmVpbnZlcnRlZGRvdWJsZWNtYj04NjU7ZS5icmlkZ2ViZWxvd2NtYj04MTA7ZS5icmlkZ2VpbnZlcnRlZGJlbG93Y21iPTgyNjtlLmJyb2tlbmJhcj0xNjY7ZS5ic3Ryb2tlPTM4NDtlLmJzdXBlcmlvcj02MzIxMDtlLmJ0b3BiYXI9Mzg3O2UuYnVoaXJhZ2FuYT0xMjQwNjtlLmJ1a2F0YWthbmE9MTI1MDI7ZS5idWxsZXQ9ODIyNjtlLmJ1bGxldGludmVyc2U9OTY4ODtlLmJ1bGxldG9wZXJhdG9yPTg3Mjk7ZS5idWxsc2V5ZT05Njc4O2UuYz05OTtlLmNhYXJtZW5pYW49MTM5MDtlLmNhYmVuZ2FsaT0yNDU4O2UuY2FjdXRlPTI2MztlLmNhZGV2YT0yMzMwO2UuY2FndWphcmF0aT0yNzE0O2UuY2FndXJtdWtoaT0yNTg2O2UuY2Fsc3F1YXJlPTEzMTkyO2UuY2FuZHJhYmluZHViZW5nYWxpPTI0MzM7ZS5jYW5kcmFiaW5kdWNtYj03ODQ7ZS5jYW5kcmFiaW5kdWRldmE9MjMwNTtlLmNhbmRyYWJpbmR1Z3VqYXJhdGk9MjY4OTtlLmNhcHNsb2NrPTg2ODI7ZS5jYXJlb2Y9ODQ1MztlLmNhcm9uPTcxMTtlLmNhcm9uYmVsb3djbWI9ODEyO2UuY2Fyb25jbWI9NzgwO2UuY2FycmlhZ2VyZXR1cm49ODYyOTtlLmNib3BvbW9mbz0xMjU2ODtlLmNjYXJvbj0yNjk7ZS5jY2VkaWxsYT0yMzE7ZS5jY2VkaWxsYWFjdXRlPTc2ODk7ZS5jY2lyY2xlPTk0MjY7ZS5jY2lyY3VtZmxleD0yNjU7ZS5jY3VybD01OTc7ZS5jZG90PTI2NztlLmNkb3RhY2NlbnQ9MjY3O2UuY2RzcXVhcmU9MTMyNTM7ZS5jZWRpbGxhPTE4NDtlLmNlZGlsbGFjbWI9ODA3O2UuY2VudD0xNjI7ZS5jZW50aWdyYWRlPTg0NTE7ZS5jZW50aW5mZXJpb3I9NjMxOTk7ZS5jZW50bW9ub3NwYWNlPTY1NTA0O2UuY2VudG9sZHN0eWxlPTYzMzk0O2UuY2VudHN1cGVyaW9yPTYzMjAwO2UuY2hhYXJtZW5pYW49MTQwMTtlLmNoYWJlbmdhbGk9MjQ1OTtlLmNoYWRldmE9MjMzMTtlLmNoYWd1amFyYXRpPTI3MTU7ZS5jaGFndXJtdWtoaT0yNTg3O2UuY2hib3BvbW9mbz0xMjU2NDtlLmNoZWFia2hhc2lhbmN5cmlsbGljPTEyMTM7ZS5jaGVja21hcms9MTAwMDM7ZS5jaGVjeXJpbGxpYz0xMDk1O2UuY2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWM9MTIxNTtlLmNoZWRlc2NlbmRlcmN5cmlsbGljPTEyMDc7ZS5jaGVkaWVyZXNpc2N5cmlsbGljPTEyNjk7ZS5jaGVoYXJtZW5pYW49MTM5NTtlLmNoZWtoYWthc3NpYW5jeXJpbGxpYz0xMjI4O2UuY2hldmVydGljYWxzdHJva2VjeXJpbGxpYz0xMjA5O2UuY2hpPTk2NztlLmNoaWV1Y2hhY2lyY2xla29yZWFuPTEyOTE5O2UuY2hpZXVjaGFwYXJlbmtvcmVhbj0xMjgyMztlLmNoaWV1Y2hjaXJjbGVrb3JlYW49MTI5MDU7ZS5jaGlldWNoa29yZWFuPTEyNjE4O2UuY2hpZXVjaHBhcmVua29yZWFuPTEyODA5O2UuY2hvY2hhbmd0aGFpPTM1OTQ7ZS5jaG9jaGFudGhhaT0zNTkyO2UuY2hvY2hpbmd0aGFpPTM1OTM7ZS5jaG9jaG9ldGhhaT0zNTk2O2UuY2hvb2s9MzkyO2UuY2lldWNhY2lyY2xla29yZWFuPTEyOTE4O2UuY2lldWNhcGFyZW5rb3JlYW49MTI4MjI7ZS5jaWV1Y2NpcmNsZWtvcmVhbj0xMjkwNDtlLmNpZXVja29yZWFuPTEyNjE2O2UuY2lldWNwYXJlbmtvcmVhbj0xMjgwODtlLmNpZXVjdXBhcmVua29yZWFuPTEyODI4O2UuY2lyY2xlPTk2NzU7ZS5jaXJjbGVjb3B5cnQ9MTY5O2UuY2lyY2xlbXVsdGlwbHk9ODg1NTtlLmNpcmNsZW90PTg4NTc7ZS5jaXJjbGVwbHVzPTg4NTM7ZS5jaXJjbGVwb3N0YWxtYXJrPTEyMzQyO2UuY2lyY2xld2l0aGxlZnRoYWxmYmxhY2s9OTY4MDtlLmNpcmNsZXdpdGhyaWdodGhhbGZibGFjaz05NjgxO2UuY2lyY3VtZmxleD03MTA7ZS5jaXJjdW1mbGV4YmVsb3djbWI9ODEzO2UuY2lyY3VtZmxleGNtYj03NzA7ZS5jbGVhcj04OTk5O2UuY2xpY2thbHZlb2xhcj00NTA7ZS5jbGlja2RlbnRhbD00NDg7ZS5jbGlja2xhdGVyYWw9NDQ5O2UuY2xpY2tyZXRyb2ZsZXg9NDUxO2UuY2x1Yj05ODI3O2UuY2x1YnN1aXRibGFjaz05ODI3O2UuY2x1YnN1aXR3aGl0ZT05ODMxO2UuY21jdWJlZHNxdWFyZT0xMzIyMDtlLmNtb25vc3BhY2U9NjUzNDc7ZS5jbXNxdWFyZWRzcXVhcmU9MTMyMTY7ZS5jb2FybWVuaWFuPTE0MDk7ZS5jb2xvbj01ODtlLmNvbG9ubW9uZXRhcnk9ODM1MztlLmNvbG9ubW9ub3NwYWNlPTY1MzA2O2UuY29sb25zaWduPTgzNTM7ZS5jb2xvbnNtYWxsPTY1MTA5O2UuY29sb250cmlhbmd1bGFyaGFsZm1vZD03MjE7ZS5jb2xvbnRyaWFuZ3VsYXJtb2Q9NzIwO2UuY29tbWE9NDQ7ZS5jb21tYWFib3ZlY21iPTc4NztlLmNvbW1hYWJvdmVyaWdodGNtYj03ODk7ZS5jb21tYWFjY2VudD02MzE3MTtlLmNvbW1hYXJhYmljPTE1NDg7ZS5jb21tYWFybWVuaWFuPTEzNzM7ZS5jb21tYWluZmVyaW9yPTYzMjAxO2UuY29tbWFtb25vc3BhY2U9NjUyOTI7ZS5jb21tYXJldmVyc2VkYWJvdmVjbWI9Nzg4O2UuY29tbWFyZXZlcnNlZG1vZD03MDE7ZS5jb21tYXNtYWxsPTY1MTA0O2UuY29tbWFzdXBlcmlvcj02MzIwMjtlLmNvbW1hdHVybmVkYWJvdmVjbWI9Nzg2O2UuY29tbWF0dXJuZWRtb2Q9Njk5O2UuY29tcGFzcz05Nzg4O2UuY29uZ3J1ZW50PTg3NzM7ZS5jb250b3VyaW50ZWdyYWw9ODc1MDtlLmNvbnRyb2w9ODk2MztlLmNvbnRyb2xBQ0s9NjtlLmNvbnRyb2xCRUw9NztlLmNvbnRyb2xCUz04O2UuY29udHJvbENBTj0yNDtlLmNvbnRyb2xDUj0xMztlLmNvbnRyb2xEQzE9MTc7ZS5jb250cm9sREMyPTE4O2UuY29udHJvbERDMz0xOTtlLmNvbnRyb2xEQzQ9MjA7ZS5jb250cm9sREVMPTEyNztlLmNvbnRyb2xETEU9MTY7ZS5jb250cm9sRU09MjU7ZS5jb250cm9sRU5RPTU7ZS5jb250cm9sRU9UPTQ7ZS5jb250cm9sRVNDPTI3O2UuY29udHJvbEVUQj0yMztlLmNvbnRyb2xFVFg9MztlLmNvbnRyb2xGRj0xMjtlLmNvbnRyb2xGUz0yODtlLmNvbnRyb2xHUz0yOTtlLmNvbnRyb2xIVD05O2UuY29udHJvbExGPTEwO2UuY29udHJvbE5BSz0yMTtlLmNvbnRyb2xOVUxMPTA7ZS5jb250cm9sUlM9MzA7ZS5jb250cm9sU0k9MTU7ZS5jb250cm9sU089MTQ7ZS5jb250cm9sU09UPTI7ZS5jb250cm9sU1RYPTE7ZS5jb250cm9sU1VCPTI2O2UuY29udHJvbFNZTj0yMjtlLmNvbnRyb2xVUz0zMTtlLmNvbnRyb2xWVD0xMTtlLmNvcHlyaWdodD0xNjk7ZS5jb3B5cmlnaHRzYW5zPTYzNzIxO2UuY29weXJpZ2h0c2VyaWY9NjMxOTM7ZS5jb3JuZXJicmFja2V0bGVmdD0xMjMwMDtlLmNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoPTY1Mzc4O2UuY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4OTtlLmNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMTtlLmNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aD02NTM3OTtlLmNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDkwO2UuY29ycG9yYXRpb25zcXVhcmU9MTMxODM7ZS5jb3NxdWFyZT0xMzI1NTtlLmNvdmVya2dzcXVhcmU9MTMyNTQ7ZS5jcGFyZW49OTM3NDtlLmNydXplaXJvPTgzNTQ7ZS5jc3RyZXRjaGVkPTY2MztlLmN1cmx5YW5kPTg5MTE7ZS5jdXJseW9yPTg5MTA7ZS5jdXJyZW5jeT0xNjQ7ZS5jeXJCcmV2ZT02MzE4NTtlLmN5ckZsZXg9NjMxODY7ZS5jeXJicmV2ZT02MzE4ODtlLmN5cmZsZXg9NjMxODk7ZS5kPTEwMDtlLmRhYXJtZW5pYW49MTM4MDtlLmRhYmVuZ2FsaT0yNDcwO2UuZGFkYXJhYmljPTE1OTA7ZS5kYWRldmE9MjM0MjtlLmRhZGZpbmFsYXJhYmljPTY1MjE0O2UuZGFkaW5pdGlhbGFyYWJpYz02NTIxNTtlLmRhZG1lZGlhbGFyYWJpYz02NTIxNjtlLmRhZ2VzaD0xNDY4O2UuZGFnZXNoaGVicmV3PTE0Njg7ZS5kYWdnZXI9ODIyNDtlLmRhZ2dlcmRibD04MjI1O2UuZGFndWphcmF0aT0yNzI2O2UuZGFndXJtdWtoaT0yNTk4O2UuZGFoaXJhZ2FuYT0xMjM4NDtlLmRha2F0YWthbmE9MTI0ODA7ZS5kYWxhcmFiaWM9MTU4MztlLmRhbGV0PTE0OTE7ZS5kYWxldGRhZ2VzaD02NDMwNztlLmRhbGV0ZGFnZXNoaGVicmV3PTY0MzA3O2UuZGFsZXRoZWJyZXc9MTQ5MTtlLmRhbGZpbmFsYXJhYmljPTY1MTk0O2UuZGFtbWFhcmFiaWM9MTYxNTtlLmRhbW1hbG93YXJhYmljPTE2MTU7ZS5kYW1tYXRhbmFsdG9uZWFyYWJpYz0xNjEyO2UuZGFtbWF0YW5hcmFiaWM9MTYxMjtlLmRhbmRhPTI0MDQ7ZS5kYXJnYWhlYnJldz0xNDQ3O2UuZGFyZ2FsZWZ0aGVicmV3PTE0NDc7ZS5kYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWI9MTE1NztlLmRibEdyYXZlPTYzMTg3O2UuZGJsYW5nbGVicmFja2V0bGVmdD0xMjI5ODtlLmRibGFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NTtlLmRibGFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk5O2UuZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4NjtlLmRibGFyY2hpbnZlcnRlZGJlbG93Y21iPTgxMTtlLmRibGFycm93bGVmdD04NjYwO2UuZGJsYXJyb3dyaWdodD04NjU4O2UuZGJsZGFuZGE9MjQwNTtlLmRibGdyYXZlPTYzMTkwO2UuZGJsZ3JhdmVjbWI9NzgzO2UuZGJsaW50ZWdyYWw9ODc0ODtlLmRibGxvd2xpbmU9ODIxNTtlLmRibGxvd2xpbmVjbWI9ODE5O2UuZGJsb3ZlcmxpbmVjbWI9ODMxO2UuZGJscHJpbWVtb2Q9Njk4O2UuZGJsdmVydGljYWxiYXI9ODIxNDtlLmRibHZlcnRpY2FsbGluZWFib3ZlY21iPTc4MjtlLmRib3BvbW9mbz0xMjU1MztlLmRic3F1YXJlPTEzMjU2O2UuZGNhcm9uPTI3MTtlLmRjZWRpbGxhPTc2OTc7ZS5kY2lyY2xlPTk0Mjc7ZS5kY2lyY3VtZmxleGJlbG93PTc2OTk7ZS5kY3JvYXQ9MjczO2UuZGRhYmVuZ2FsaT0yNDY1O2UuZGRhZGV2YT0yMzM3O2UuZGRhZ3VqYXJhdGk9MjcyMTtlLmRkYWd1cm11a2hpPTI1OTM7ZS5kZGFsYXJhYmljPTE2NzI7ZS5kZGFsZmluYWxhcmFiaWM9NjQzOTM7ZS5kZGRoYWRldmE9MjM5NjtlLmRkaGFiZW5nYWxpPTI0NjY7ZS5kZGhhZGV2YT0yMzM4O2UuZGRoYWd1amFyYXRpPTI3MjI7ZS5kZGhhZ3VybXVraGk9MjU5NDtlLmRkb3RhY2NlbnQ9NzY5MTtlLmRkb3RiZWxvdz03NjkzO2UuZGVjaW1hbHNlcGFyYXRvcmFyYWJpYz0xNjQzO2UuZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW49MTY0MztlLmRlY3lyaWxsaWM9MTA3NjtlLmRlZ3JlZT0xNzY7ZS5kZWhpaGVicmV3PTE0NTM7ZS5kZWhpcmFnYW5hPTEyMzkxO2UuZGVpY29wdGljPTEwMDc7ZS5kZWthdGFrYW5hPTEyNDg3O2UuZGVsZXRlbGVmdD05MDAzO2UuZGVsZXRlcmlnaHQ9ODk5ODtlLmRlbHRhPTk0ODtlLmRlbHRhdHVybmVkPTM5NztlLmRlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpPTI1NTI7ZS5kZXpoPTY3NjtlLmRoYWJlbmdhbGk9MjQ3MTtlLmRoYWRldmE9MjM0MztlLmRoYWd1amFyYXRpPTI3Mjc7ZS5kaGFndXJtdWtoaT0yNTk5O2UuZGhvb2s9NTk5O2UuZGlhbHl0aWthdG9ub3M9OTAxO2UuZGlhbHl0aWthdG9ub3NjbWI9ODM2O2UuZGlhbW9uZD05ODMwO2UuZGlhbW9uZHN1aXR3aGl0ZT05ODI2O2UuZGllcmVzaXM9MTY4O2UuZGllcmVzaXNhY3V0ZT02MzE5MTtlLmRpZXJlc2lzYmVsb3djbWI9ODA0O2UuZGllcmVzaXNjbWI9Nzc2O2UuZGllcmVzaXNncmF2ZT02MzE5MjtlLmRpZXJlc2lzdG9ub3M9OTAxO2UuZGloaXJhZ2FuYT0xMjM4NjtlLmRpa2F0YWthbmE9MTI0ODI7ZS5kaXR0b21hcms9MTIyOTE7ZS5kaXZpZGU9MjQ3O2UuZGl2aWRlcz04NzM5O2UuZGl2aXNpb25zbGFzaD04NzI1O2UuZGplY3lyaWxsaWM9MTEwNjtlLmRrc2hhZGU9OTYxOTtlLmRsaW5lYmVsb3c9NzY5NTtlLmRsc3F1YXJlPTEzMjA3O2UuZG1hY3Jvbj0yNzM7ZS5kbW9ub3NwYWNlPTY1MzQ4O2UuZG5ibG9jaz05NjA0O2UuZG9jaGFkYXRoYWk9MzU5ODtlLmRvZGVrdGhhaT0zNjA0O2UuZG9oaXJhZ2FuYT0xMjM5MztlLmRva2F0YWthbmE9MTI0ODk7ZS5kb2xsYXI9MzY7ZS5kb2xsYXJpbmZlcmlvcj02MzIwMztlLmRvbGxhcm1vbm9zcGFjZT02NTI4NDtlLmRvbGxhcm9sZHN0eWxlPTYzMjY4O2UuZG9sbGFyc21hbGw9NjUxMjk7ZS5kb2xsYXJzdXBlcmlvcj02MzIwNDtlLmRvbmc9ODM2MztlLmRvcnVzcXVhcmU9MTMwOTQ7ZS5kb3RhY2NlbnQ9NzI5O2UuZG90YWNjZW50Y21iPTc3NTtlLmRvdGJlbG93Y21iPTgwMztlLmRvdGJlbG93Y29tYj04MDM7ZS5kb3RrYXRha2FuYT0xMjUzOTtlLmRvdGxlc3NpPTMwNTtlLmRvdGxlc3NqPTYzMTY2O2UuZG90bGVzc2pzdHJva2Vob29rPTY0NDtlLmRvdG1hdGg9ODkwMTtlLmRvdHRlZGNpcmNsZT05Njc2O2UuZG91YmxleW9kcGF0YWg9NjQyODc7ZS5kb3VibGV5b2RwYXRhaGhlYnJldz02NDI4NztlLmRvd250YWNrYmVsb3djbWI9Nzk4O2UuZG93bnRhY2ttb2Q9NzI1O2UuZHBhcmVuPTkzNzU7ZS5kc3VwZXJpb3I9NjMyMTE7ZS5kdGFpbD01OTg7ZS5kdG9wYmFyPTM5NjtlLmR1aGlyYWdhbmE9MTIzODk7ZS5kdWthdGFrYW5hPTEyNDg1O2UuZHo9NDk5O2UuZHphbHRvbmU9Njc1O2UuZHpjYXJvbj00NTQ7ZS5kemN1cmw9Njc3O2UuZHplYWJraGFzaWFuY3lyaWxsaWM9MTI0OTtlLmR6ZWN5cmlsbGljPTExMDk7ZS5kemhlY3lyaWxsaWM9MTExOTtlLmU9MTAxO2UuZWFjdXRlPTIzMztlLmVhcnRoPTk3OTM7ZS5lYmVuZ2FsaT0yNDQ3O2UuZWJvcG9tb2ZvPTEyNTcyO2UuZWJyZXZlPTI3NztlLmVjYW5kcmFkZXZhPTIzMTc7ZS5lY2FuZHJhZ3VqYXJhdGk9MjcwMTtlLmVjYW5kcmF2b3dlbHNpZ25kZXZhPTIzNzM7ZS5lY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NztlLmVjYXJvbj0yODM7ZS5lY2VkaWxsYWJyZXZlPTc3MDk7ZS5lY2hhcm1lbmlhbj0xMzgxO2UuZWNoeWl3bmFybWVuaWFuPTE0MTU7ZS5lY2lyY2xlPTk0Mjg7ZS5lY2lyY3VtZmxleD0yMzQ7ZS5lY2lyY3VtZmxleGFjdXRlPTc4NzE7ZS5lY2lyY3VtZmxleGJlbG93PTc3MDU7ZS5lY2lyY3VtZmxleGRvdGJlbG93PTc4Nzk7ZS5lY2lyY3VtZmxleGdyYXZlPTc4NzM7ZS5lY2lyY3VtZmxleGhvb2thYm92ZT03ODc1O2UuZWNpcmN1bWZsZXh0aWxkZT03ODc3O2UuZWN5cmlsbGljPTExMDg7ZS5lZGJsZ3JhdmU9NTE3O2UuZWRldmE9MjMxOTtlLmVkaWVyZXNpcz0yMzU7ZS5lZG90PTI3OTtlLmVkb3RhY2NlbnQ9Mjc5O2UuZWRvdGJlbG93PTc4NjU7ZS5lZWd1cm11a2hpPTI1NzU7ZS5lZW1hdHJhZ3VybXVraGk9MjYzMTtlLmVmY3lyaWxsaWM9MTA5MjtlLmVncmF2ZT0yMzI7ZS5lZ3VqYXJhdGk9MjcwMztlLmVoYXJtZW5pYW49MTM4MztlLmVoYm9wb21vZm89MTI1NzM7ZS5laGlyYWdhbmE9MTIzNjA7ZS5laG9va2Fib3ZlPTc4Njc7ZS5laWJvcG9tb2ZvPTEyNTc1O2UuZWlnaHQ9NTY7ZS5laWdodGFyYWJpYz0xNjQwO2UuZWlnaHRiZW5nYWxpPTI1NDI7ZS5laWdodGNpcmNsZT05MzE5O2UuZWlnaHRjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI5O2UuZWlnaHRkZXZhPTI0MTQ7ZS5laWdodGVlbmNpcmNsZT05MzI5O2UuZWlnaHRlZW5wYXJlbj05MzQ5O2UuZWlnaHRlZW5wZXJpb2Q9OTM2OTtlLmVpZ2h0Z3VqYXJhdGk9Mjc5ODtlLmVpZ2h0Z3VybXVraGk9MjY3MDtlLmVpZ2h0aGFja2FyYWJpYz0xNjQwO2UuZWlnaHRoYW5nemhvdT0xMjMyODtlLmVpZ2h0aG5vdGViZWFtZWQ9OTgzNTtlLmVpZ2h0aWRlb2dyYXBoaWNwYXJlbj0xMjgzOTtlLmVpZ2h0aW5mZXJpb3I9ODMyODtlLmVpZ2h0bW9ub3NwYWNlPTY1MzA0O2UuZWlnaHRvbGRzdHlsZT02MzI4ODtlLmVpZ2h0cGFyZW49OTMzOTtlLmVpZ2h0cGVyaW9kPTkzNTk7ZS5laWdodHBlcnNpYW49MTc4NDtlLmVpZ2h0cm9tYW49ODU2NztlLmVpZ2h0c3VwZXJpb3I9ODMxMjtlLmVpZ2h0dGhhaT0zNjcyO2UuZWludmVydGVkYnJldmU9NTE5O2UuZWlvdGlmaWVkY3lyaWxsaWM9MTEyNTtlLmVrYXRha2FuYT0xMjQ1NjtlLmVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NjtlLmVrb25rYXJndXJtdWtoaT0yNjc2O2UuZWtvcmVhbj0xMjYyODtlLmVsY3lyaWxsaWM9MTA4MztlLmVsZW1lbnQ9ODcxMjtlLmVsZXZlbmNpcmNsZT05MzIyO2UuZWxldmVucGFyZW49OTM0MjtlLmVsZXZlbnBlcmlvZD05MzYyO2UuZWxldmVucm9tYW49ODU3MDtlLmVsbGlwc2lzPTgyMzA7ZS5lbGxpcHNpc3ZlcnRpY2FsPTg5NDI7ZS5lbWFjcm9uPTI3NTtlLmVtYWNyb25hY3V0ZT03NzAzO2UuZW1hY3JvbmdyYXZlPTc3MDE7ZS5lbWN5cmlsbGljPTEwODQ7ZS5lbWRhc2g9ODIxMjtlLmVtZGFzaHZlcnRpY2FsPTY1MDczO2UuZW1vbm9zcGFjZT02NTM0OTtlLmVtcGhhc2lzbWFya2FybWVuaWFuPTEzNzE7ZS5lbXB0eXNldD04NzA5O2UuZW5ib3BvbW9mbz0xMjU3OTtlLmVuY3lyaWxsaWM9MTA4NTtlLmVuZGFzaD04MjExO2UuZW5kYXNodmVydGljYWw9NjUwNzQ7ZS5lbmRlc2NlbmRlcmN5cmlsbGljPTExODc7ZS5lbmc9MzMxO2UuZW5nYm9wb21vZm89MTI1ODE7ZS5lbmdoZWN5cmlsbGljPTExODk7ZS5lbmhvb2tjeXJpbGxpYz0xMjI0O2UuZW5zcGFjZT04MTk0O2UuZW9nb25laz0yODE7ZS5lb2tvcmVhbj0xMjYyNztlLmVvcGVuPTYwMztlLmVvcGVuY2xvc2VkPTY2NjtlLmVvcGVucmV2ZXJzZWQ9NjA0O2UuZW9wZW5yZXZlcnNlZGNsb3NlZD02MDY7ZS5lb3BlbnJldmVyc2VkaG9vaz02MDU7ZS5lcGFyZW49OTM3NjtlLmVwc2lsb249OTQ5O2UuZXBzaWxvbnRvbm9zPTk0MTtlLmVxdWFsPTYxO2UuZXF1YWxtb25vc3BhY2U9NjUzMDk7ZS5lcXVhbHNtYWxsPTY1MTI2O2UuZXF1YWxzdXBlcmlvcj04MzE2O2UuZXF1aXZhbGVuY2U9ODgwMTtlLmVyYm9wb21vZm89MTI1ODI7ZS5lcmN5cmlsbGljPTEwODg7ZS5lcmV2ZXJzZWQ9NjAwO2UuZXJldmVyc2VkY3lyaWxsaWM9MTEwMTtlLmVzY3lyaWxsaWM9MTA4OTtlLmVzZGVzY2VuZGVyY3lyaWxsaWM9MTE5NTtlLmVzaD02NDM7ZS5lc2hjdXJsPTY0NjtlLmVzaG9ydGRldmE9MjMxODtlLmVzaG9ydHZvd2Vsc2lnbmRldmE9MjM3NDtlLmVzaHJldmVyc2VkbG9vcD00MjY7ZS5lc2hzcXVhdHJldmVyc2VkPTY0NTtlLmVzbWFsbGhpcmFnYW5hPTEyMzU5O2UuZXNtYWxsa2F0YWthbmE9MTI0NTU7ZS5lc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NjtlLmVzdGltYXRlZD04NDk0O2UuZXN1cGVyaW9yPTYzMjEyO2UuZXRhPTk1MTtlLmV0YXJtZW5pYW49MTM4NDtlLmV0YXRvbm9zPTk0MjtlLmV0aD0yNDA7ZS5ldGlsZGU9Nzg2OTtlLmV0aWxkZWJlbG93PTc3MDc7ZS5ldG5haHRhZm91a2hoZWJyZXc9MTQyNTtlLmV0bmFodGFmb3VraGxlZnRoZWJyZXc9MTQyNTtlLmV0bmFodGFoZWJyZXc9MTQyNTtlLmV0bmFodGFsZWZ0aGVicmV3PTE0MjU7ZS5ldHVybmVkPTQ3NztlLmV1a29yZWFuPTEyNjQxO2UuZXVybz04MzY0O2UuZXZvd2Vsc2lnbmJlbmdhbGk9MjUwMztlLmV2b3dlbHNpZ25kZXZhPTIzNzU7ZS5ldm93ZWxzaWduZ3VqYXJhdGk9Mjc1OTtlLmV4Y2xhbT0zMztlLmV4Y2xhbWFybWVuaWFuPTEzNzI7ZS5leGNsYW1kYmw9ODI1MjtlLmV4Y2xhbWRvd249MTYxO2UuZXhjbGFtZG93bnNtYWxsPTYzMzkzO2UuZXhjbGFtbW9ub3NwYWNlPTY1MjgxO2UuZXhjbGFtc21hbGw9NjMyNjU7ZS5leGlzdGVudGlhbD04NzA3O2UuZXpoPTY1ODtlLmV6aGNhcm9uPTQ5NTtlLmV6aGN1cmw9NjU5O2UuZXpocmV2ZXJzZWQ9NDQxO2UuZXpodGFpbD00NDI7ZS5mPTEwMjtlLmZhZGV2YT0yMzk4O2UuZmFndXJtdWtoaT0yNjU0O2UuZmFocmVuaGVpdD04NDU3O2UuZmF0aGFhcmFiaWM9MTYxNDtlLmZhdGhhbG93YXJhYmljPTE2MTQ7ZS5mYXRoYXRhbmFyYWJpYz0xNjExO2UuZmJvcG9tb2ZvPTEyNTUyO2UuZmNpcmNsZT05NDI5O2UuZmRvdGFjY2VudD03NzExO2UuZmVoYXJhYmljPTE2MDE7ZS5mZWhhcm1lbmlhbj0xNDE0O2UuZmVoZmluYWxhcmFiaWM9NjUyMzQ7ZS5mZWhpbml0aWFsYXJhYmljPTY1MjM1O2UuZmVobWVkaWFsYXJhYmljPTY1MjM2O2UuZmVpY29wdGljPTk5NztlLmZlbWFsZT05NzkyO2UuZmY9NjQyNTY7ZS5mX2Y9NjQyNTY7ZS5mZmk9NjQyNTk7ZS5mX2ZfaT02NDI1OTtlLmZmbD02NDI2MDtlLmZfZl9sPTY0MjYwO2UuZmk9NjQyNTc7ZS5mX2k9NjQyNTc7ZS5maWZ0ZWVuY2lyY2xlPTkzMjY7ZS5maWZ0ZWVucGFyZW49OTM0NjtlLmZpZnRlZW5wZXJpb2Q9OTM2NjtlLmZpZ3VyZWRhc2g9ODIxMDtlLmZpbGxlZGJveD05NjMyO2UuZmlsbGVkcmVjdD05NjQ0O2UuZmluYWxrYWY9MTQ5ODtlLmZpbmFsa2FmZGFnZXNoPTY0MzE0O2UuZmluYWxrYWZkYWdlc2hoZWJyZXc9NjQzMTQ7ZS5maW5hbGthZmhlYnJldz0xNDk4O2UuZmluYWxtZW09MTUwMTtlLmZpbmFsbWVtaGVicmV3PTE1MDE7ZS5maW5hbG51bj0xNTAzO2UuZmluYWxudW5oZWJyZXc9MTUwMztlLmZpbmFscGU9MTUwNztlLmZpbmFscGVoZWJyZXc9MTUwNztlLmZpbmFsdHNhZGk9MTUwOTtlLmZpbmFsdHNhZGloZWJyZXc9MTUwOTtlLmZpcnN0dG9uZWNoaW5lc2U9NzEzO2UuZmlzaGV5ZT05NjczO2UuZml0YWN5cmlsbGljPTExMzk7ZS5maXZlPTUzO2UuZml2ZWFyYWJpYz0xNjM3O2UuZml2ZWJlbmdhbGk9MjUzOTtlLmZpdmVjaXJjbGU9OTMxNjtlLmZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI2O2UuZml2ZWRldmE9MjQxMTtlLmZpdmVlaWdodGhzPTg1NDE7ZS5maXZlZ3VqYXJhdGk9Mjc5NTtlLmZpdmVndXJtdWtoaT0yNjY3O2UuZml2ZWhhY2thcmFiaWM9MTYzNztlLmZpdmVoYW5nemhvdT0xMjMyNTtlLmZpdmVpZGVvZ3JhcGhpY3BhcmVuPTEyODM2O2UuZml2ZWluZmVyaW9yPTgzMjU7ZS5maXZlbW9ub3NwYWNlPTY1MzAxO2UuZml2ZW9sZHN0eWxlPTYzMjg1O2UuZml2ZXBhcmVuPTkzMzY7ZS5maXZlcGVyaW9kPTkzNTY7ZS5maXZlcGVyc2lhbj0xNzgxO2UuZml2ZXJvbWFuPTg1NjQ7ZS5maXZlc3VwZXJpb3I9ODMwOTtlLmZpdmV0aGFpPTM2Njk7ZS5mbD02NDI1ODtlLmZfbD02NDI1ODtlLmZsb3Jpbj00MDI7ZS5mbW9ub3NwYWNlPTY1MzUwO2UuZm1zcXVhcmU9MTMyMDk7ZS5mb2ZhbnRoYWk9MzYxNTtlLmZvZmF0aGFpPTM2MTM7ZS5mb25nbWFudGhhaT0zNjYzO2UuZm9yYWxsPTg3MDQ7ZS5mb3VyPTUyO2UuZm91cmFyYWJpYz0xNjM2O2UuZm91cmJlbmdhbGk9MjUzODtlLmZvdXJjaXJjbGU9OTMxNTtlLmZvdXJjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI1O2UuZm91cmRldmE9MjQxMDtlLmZvdXJndWphcmF0aT0yNzk0O2UuZm91cmd1cm11a2hpPTI2NjY7ZS5mb3VyaGFja2FyYWJpYz0xNjM2O2UuZm91cmhhbmd6aG91PTEyMzI0O2UuZm91cmlkZW9ncmFwaGljcGFyZW49MTI4MzU7ZS5mb3VyaW5mZXJpb3I9ODMyNDtlLmZvdXJtb25vc3BhY2U9NjUzMDA7ZS5mb3VybnVtZXJhdG9yYmVuZ2FsaT0yNTUxO2UuZm91cm9sZHN0eWxlPTYzMjg0O2UuZm91cnBhcmVuPTkzMzU7ZS5mb3VycGVyaW9kPTkzNTU7ZS5mb3VycGVyc2lhbj0xNzgwO2UuZm91cnJvbWFuPTg1NjM7ZS5mb3Vyc3VwZXJpb3I9ODMwODtlLmZvdXJ0ZWVuY2lyY2xlPTkzMjU7ZS5mb3VydGVlbnBhcmVuPTkzNDU7ZS5mb3VydGVlbnBlcmlvZD05MzY1O2UuZm91cnRoYWk9MzY2ODtlLmZvdXJ0aHRvbmVjaGluZXNlPTcxNTtlLmZwYXJlbj05Mzc3O2UuZnJhY3Rpb249ODI2MDtlLmZyYW5jPTgzNTU7ZS5nPTEwMztlLmdhYmVuZ2FsaT0yNDU1O2UuZ2FjdXRlPTUwMTtlLmdhZGV2YT0yMzI3O2UuZ2FmYXJhYmljPTE3MTE7ZS5nYWZmaW5hbGFyYWJpYz02NDQwMztlLmdhZmluaXRpYWxhcmFiaWM9NjQ0MDQ7ZS5nYWZtZWRpYWxhcmFiaWM9NjQ0MDU7ZS5nYWd1amFyYXRpPTI3MTE7ZS5nYWd1cm11a2hpPTI1ODM7ZS5nYWhpcmFnYW5hPTEyMzY0O2UuZ2FrYXRha2FuYT0xMjQ2MDtlLmdhbW1hPTk0NztlLmdhbW1hbGF0aW5zbWFsbD02MTE7ZS5nYW1tYXN1cGVyaW9yPTczNjtlLmdhbmdpYWNvcHRpYz0xMDAzO2UuZ2JvcG9tb2ZvPTEyNTU3O2UuZ2JyZXZlPTI4NztlLmdjYXJvbj00ODc7ZS5nY2VkaWxsYT0yOTE7ZS5nY2lyY2xlPTk0MzA7ZS5nY2lyY3VtZmxleD0yODU7ZS5nY29tbWFhY2NlbnQ9MjkxO2UuZ2RvdD0yODk7ZS5nZG90YWNjZW50PTI4OTtlLmdlY3lyaWxsaWM9MTA3NTtlLmdlaGlyYWdhbmE9MTIzNzA7ZS5nZWthdGFrYW5hPTEyNDY2O2UuZ2VvbWV0cmljYWxseWVxdWFsPTg3ODU7ZS5nZXJlc2hhY2NlbnRoZWJyZXc9MTQzNjtlLmdlcmVzaGhlYnJldz0xNTIzO2UuZ2VyZXNobXVxZGFtaGVicmV3PTE0Mzc7ZS5nZXJtYW5kYmxzPTIyMztlLmdlcnNoYXlpbWFjY2VudGhlYnJldz0xNDM4O2UuZ2Vyc2hheWltaGVicmV3PTE1MjQ7ZS5nZXRhbWFyaz0xMjMwNztlLmdoYWJlbmdhbGk9MjQ1NjtlLmdoYWRhcm1lbmlhbj0xMzk0O2UuZ2hhZGV2YT0yMzI4O2UuZ2hhZ3VqYXJhdGk9MjcxMjtlLmdoYWd1cm11a2hpPTI1ODQ7ZS5naGFpbmFyYWJpYz0xNTk0O2UuZ2hhaW5maW5hbGFyYWJpYz02NTIzMDtlLmdoYWluaW5pdGlhbGFyYWJpYz02NTIzMTtlLmdoYWlubWVkaWFsYXJhYmljPTY1MjMyO2UuZ2hlbWlkZGxlaG9va2N5cmlsbGljPTExNzM7ZS5naGVzdHJva2VjeXJpbGxpYz0xMTcxO2UuZ2hldXB0dXJuY3lyaWxsaWM9MTE2OTtlLmdoaGFkZXZhPTIzOTQ7ZS5naGhhZ3VybXVraGk9MjY1MDtlLmdob29rPTYwODtlLmdoenNxdWFyZT0xMzIwMztlLmdpaGlyYWdhbmE9MTIzNjY7ZS5naWthdGFrYW5hPTEyNDYyO2UuZ2ltYXJtZW5pYW49MTM3OTtlLmdpbWVsPTE0OTA7ZS5naW1lbGRhZ2VzaD02NDMwNjtlLmdpbWVsZGFnZXNoaGVicmV3PTY0MzA2O2UuZ2ltZWxoZWJyZXc9MTQ5MDtlLmdqZWN5cmlsbGljPTExMDc7ZS5nbG90dGFsaW52ZXJ0ZWRzdHJva2U9NDQ2O2UuZ2xvdHRhbHN0b3A9NjYwO2UuZ2xvdHRhbHN0b3BpbnZlcnRlZD02NjI7ZS5nbG90dGFsc3RvcG1vZD03MDQ7ZS5nbG90dGFsc3RvcHJldmVyc2VkPTY2MTtlLmdsb3R0YWxzdG9wcmV2ZXJzZWRtb2Q9NzA1O2UuZ2xvdHRhbHN0b3ByZXZlcnNlZHN1cGVyaW9yPTc0MDtlLmdsb3R0YWxzdG9wc3Ryb2tlPTY3MztlLmdsb3R0YWxzdG9wc3Ryb2tlcmV2ZXJzZWQ9Njc0O2UuZ21hY3Jvbj03NzEzO2UuZ21vbm9zcGFjZT02NTM1MTtlLmdvaGlyYWdhbmE9MTIzNzI7ZS5nb2thdGFrYW5hPTEyNDY4O2UuZ3BhcmVuPTkzNzg7ZS5ncGFzcXVhcmU9MTMyMjg7ZS5ncmFkaWVudD04NzExO2UuZ3JhdmU9OTY7ZS5ncmF2ZWJlbG93Y21iPTc5MDtlLmdyYXZlY21iPTc2ODtlLmdyYXZlY29tYj03Njg7ZS5ncmF2ZWRldmE9MjM4NztlLmdyYXZlbG93bW9kPTcxODtlLmdyYXZlbW9ub3NwYWNlPTY1MzQ0O2UuZ3JhdmV0b25lY21iPTgzMjtlLmdyZWF0ZXI9NjI7ZS5ncmVhdGVyZXF1YWw9ODgwNTtlLmdyZWF0ZXJlcXVhbG9ybGVzcz04OTIzO2UuZ3JlYXRlcm1vbm9zcGFjZT02NTMxMDtlLmdyZWF0ZXJvcmVxdWl2YWxlbnQ9ODgxOTtlLmdyZWF0ZXJvcmxlc3M9ODgyMztlLmdyZWF0ZXJvdmVyZXF1YWw9ODgwNztlLmdyZWF0ZXJzbWFsbD02NTEyNTtlLmdzY3JpcHQ9NjA5O2UuZ3N0cm9rZT00ODU7ZS5ndWhpcmFnYW5hPTEyMzY4O2UuZ3VpbGxlbW90bGVmdD0xNzE7ZS5ndWlsbGVtb3RyaWdodD0xODc7ZS5ndWlsc2luZ2xsZWZ0PTgyNDk7ZS5ndWlsc2luZ2xyaWdodD04MjUwO2UuZ3VrYXRha2FuYT0xMjQ2NDtlLmd1cmFtdXNxdWFyZT0xMzA4MDtlLmd5c3F1YXJlPTEzMjU3O2UuaD0xMDQ7ZS5oYWFia2hhc2lhbmN5cmlsbGljPTExOTM7ZS5oYWFsdG9uZWFyYWJpYz0xNzI5O2UuaGFiZW5nYWxpPTI0ODk7ZS5oYWRlc2NlbmRlcmN5cmlsbGljPTEyMDM7ZS5oYWRldmE9MjM2MTtlLmhhZ3VqYXJhdGk9Mjc0NTtlLmhhZ3VybXVraGk9MjYxNztlLmhhaGFyYWJpYz0xNTgxO2UuaGFoZmluYWxhcmFiaWM9NjUxODY7ZS5oYWhpbml0aWFsYXJhYmljPTY1MTg3O2UuaGFoaXJhZ2FuYT0xMjM5OTtlLmhhaG1lZGlhbGFyYWJpYz02NTE4ODtlLmhhaXR1c3F1YXJlPTEzMDk4O2UuaGFrYXRha2FuYT0xMjQ5NTtlLmhha2F0YWthbmFoYWxmd2lkdGg9NjU0MTg7ZS5oYWxhbnRndXJtdWtoaT0yNjM3O2UuaGFtemFhcmFiaWM9MTU2OTtlLmhhbXphbG93YXJhYmljPTE1Njk7ZS5oYW5ndWxmaWxsZXI9MTI2NDQ7ZS5oYXJkc2lnbmN5cmlsbGljPTEwOTg7ZS5oYXJwb29ubGVmdGJhcmJ1cD04NjM2O2UuaGFycG9vbnJpZ2h0YmFyYnVwPTg2NDA7ZS5oYXNxdWFyZT0xMzI1ODtlLmhhdGFmcGF0YWg9MTQ1ODtlLmhhdGFmcGF0YWgxNj0xNDU4O2UuaGF0YWZwYXRhaDIzPTE0NTg7ZS5oYXRhZnBhdGFoMmY9MTQ1ODtlLmhhdGFmcGF0YWhoZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhuYXJyb3doZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhxdWFydGVyaGVicmV3PTE0NTg7ZS5oYXRhZnBhdGFod2lkZWhlYnJldz0xNDU4O2UuaGF0YWZxYW1hdHM9MTQ1OTtlLmhhdGFmcWFtYXRzMWI9MTQ1OTtlLmhhdGFmcWFtYXRzMjg9MTQ1OTtlLmhhdGFmcWFtYXRzMzQ9MTQ1OTtlLmhhdGFmcWFtYXRzaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c25hcnJvd2hlYnJldz0xNDU5O2UuaGF0YWZxYW1hdHNxdWFydGVyaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c3dpZGVoZWJyZXc9MTQ1OTtlLmhhdGFmc2Vnb2w9MTQ1NztlLmhhdGFmc2Vnb2wxNz0xNDU3O2UuaGF0YWZzZWdvbDI0PTE0NTc7ZS5oYXRhZnNlZ29sMzA9MTQ1NztlLmhhdGFmc2Vnb2xoZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xuYXJyb3doZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xxdWFydGVyaGVicmV3PTE0NTc7ZS5oYXRhZnNlZ29sd2lkZWhlYnJldz0xNDU3O2UuaGJhcj0yOTU7ZS5oYm9wb21vZm89MTI1NTk7ZS5oYnJldmViZWxvdz03NzIzO2UuaGNlZGlsbGE9NzcyMTtlLmhjaXJjbGU9OTQzMTtlLmhjaXJjdW1mbGV4PTI5MztlLmhkaWVyZXNpcz03NzE5O2UuaGRvdGFjY2VudD03NzE1O2UuaGRvdGJlbG93PTc3MTc7ZS5oZT0xNDkyO2UuaGVhcnQ9OTgyOTtlLmhlYXJ0c3VpdGJsYWNrPTk4Mjk7ZS5oZWFydHN1aXR3aGl0ZT05ODI1O2UuaGVkYWdlc2g9NjQzMDg7ZS5oZWRhZ2VzaGhlYnJldz02NDMwODtlLmhlaGFsdG9uZWFyYWJpYz0xNzI5O2UuaGVoYXJhYmljPTE2MDc7ZS5oZWhlYnJldz0xNDkyO2UuaGVoZmluYWxhbHRvbmVhcmFiaWM9NjQ0MjM7ZS5oZWhmaW5hbGFsdHR3b2FyYWJpYz02NTI1ODtlLmhlaGZpbmFsYXJhYmljPTY1MjU4O2UuaGVoaGFtemFhYm92ZWZpbmFsYXJhYmljPTY0NDIxO2UuaGVoaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljPTY0NDIwO2UuaGVoaW5pdGlhbGFsdG9uZWFyYWJpYz02NDQyNDtlLmhlaGluaXRpYWxhcmFiaWM9NjUyNTk7ZS5oZWhpcmFnYW5hPTEyNDA4O2UuaGVobWVkaWFsYWx0b25lYXJhYmljPTY0NDI1O2UuaGVobWVkaWFsYXJhYmljPTY1MjYwO2UuaGVpc2VpZXJhc3F1YXJlPTEzMTc5O2UuaGVrYXRha2FuYT0xMjUwNDtlLmhla2F0YWthbmFoYWxmd2lkdGg9NjU0MjE7ZS5oZWt1dGFhcnVzcXVhcmU9MTMxMTA7ZS5oZW5naG9vaz02MTU7ZS5oZXJ1dHVzcXVhcmU9MTMxMTM7ZS5oZXQ9MTQ5NTtlLmhldGhlYnJldz0xNDk1O2UuaGhvb2s9NjE0O2UuaGhvb2tzdXBlcmlvcj02ODk7ZS5oaWV1aGFjaXJjbGVrb3JlYW49MTI5MjM7ZS5oaWV1aGFwYXJlbmtvcmVhbj0xMjgyNztlLmhpZXVoY2lyY2xla29yZWFuPTEyOTA5O2UuaGlldWhrb3JlYW49MTI2MjI7ZS5oaWV1aHBhcmVua29yZWFuPTEyODEzO2UuaGloaXJhZ2FuYT0xMjQwMjtlLmhpa2F0YWthbmE9MTI0OTg7ZS5oaWthdGFrYW5haGFsZndpZHRoPTY1NDE5O2UuaGlyaXE9MTQ2MDtlLmhpcmlxMTQ9MTQ2MDtlLmhpcmlxMjE9MTQ2MDtlLmhpcmlxMmQ9MTQ2MDtlLmhpcmlxaGVicmV3PTE0NjA7ZS5oaXJpcW5hcnJvd2hlYnJldz0xNDYwO2UuaGlyaXFxdWFydGVyaGVicmV3PTE0NjA7ZS5oaXJpcXdpZGVoZWJyZXc9MTQ2MDtlLmhsaW5lYmVsb3c9NzgzMDtlLmhtb25vc3BhY2U9NjUzNTI7ZS5ob2FybWVuaWFuPTEzOTI7ZS5ob2hpcHRoYWk9MzYyNztlLmhvaGlyYWdhbmE9MTI0MTE7ZS5ob2thdGFrYW5hPTEyNTA3O2UuaG9rYXRha2FuYWhhbGZ3aWR0aD02NTQyMjtlLmhvbGFtPTE0NjU7ZS5ob2xhbTE5PTE0NjU7ZS5ob2xhbTI2PTE0NjU7ZS5ob2xhbTMyPTE0NjU7ZS5ob2xhbWhlYnJldz0xNDY1O2UuaG9sYW1uYXJyb3doZWJyZXc9MTQ2NTtlLmhvbGFtcXVhcnRlcmhlYnJldz0xNDY1O2UuaG9sYW13aWRlaGVicmV3PTE0NjU7ZS5ob25va2h1a3RoYWk9MzYzMDtlLmhvb2thYm92ZWNvbWI9Nzc3O2UuaG9va2NtYj03Nzc7ZS5ob29rcGFsYXRhbGl6ZWRiZWxvd2NtYj04MDE7ZS5ob29rcmV0cm9mbGV4YmVsb3djbWI9ODAyO2UuaG9vbnNxdWFyZT0xMzEyMjtlLmhvcmljb3B0aWM9MTAwMTtlLmhvcml6b250YWxiYXI9ODIxMztlLmhvcm5jbWI9Nzk1O2UuaG90c3ByaW5ncz05ODMyO2UuaG91c2U9ODk2MjtlLmhwYXJlbj05Mzc5O2UuaHN1cGVyaW9yPTY4ODtlLmh0dXJuZWQ9NjEzO2UuaHVoaXJhZ2FuYT0xMjQwNTtlLmh1aWl0b3NxdWFyZT0xMzEwNztlLmh1a2F0YWthbmE9MTI1MDE7ZS5odWthdGFrYW5haGFsZndpZHRoPTY1NDIwO2UuaHVuZ2FydW1sYXV0PTczMztlLmh1bmdhcnVtbGF1dGNtYj03Nzk7ZS5odj00MDU7ZS5oeXBoZW49NDU7ZS5oeXBoZW5pbmZlcmlvcj02MzIwNTtlLmh5cGhlbm1vbm9zcGFjZT02NTI5MztlLmh5cGhlbnNtYWxsPTY1MTIzO2UuaHlwaGVuc3VwZXJpb3I9NjMyMDY7ZS5oeXBoZW50d289ODIwODtlLmk9MTA1O2UuaWFjdXRlPTIzNztlLmlhY3lyaWxsaWM9MTEwMztlLmliZW5nYWxpPTI0Mzk7ZS5pYm9wb21vZm89MTI1ODM7ZS5pYnJldmU9MzAxO2UuaWNhcm9uPTQ2NDtlLmljaXJjbGU9OTQzMjtlLmljaXJjdW1mbGV4PTIzODtlLmljeXJpbGxpYz0xMTEwO2UuaWRibGdyYXZlPTUyMTtlLmlkZW9ncmFwaGVhcnRoY2lyY2xlPTEyOTQzO2UuaWRlb2dyYXBoZmlyZWNpcmNsZT0xMjkzOTtlLmlkZW9ncmFwaGljYWxsaWFuY2VwYXJlbj0xMjg2MztlLmlkZW9ncmFwaGljY2FsbHBhcmVuPTEyODU4O2UuaWRlb2dyYXBoaWNjZW50cmVjaXJjbGU9MTI5NjU7ZS5pZGVvZ3JhcGhpY2Nsb3NlPTEyMjk0O2UuaWRlb2dyYXBoaWNjb21tYT0xMjI4OTtlLmlkZW9ncmFwaGljY29tbWFsZWZ0PTY1MzgwO2UuaWRlb2dyYXBoaWNjb25ncmF0dWxhdGlvbnBhcmVuPTEyODU1O2UuaWRlb2dyYXBoaWNjb3JyZWN0Y2lyY2xlPTEyOTYzO2UuaWRlb2dyYXBoaWNlYXJ0aHBhcmVuPTEyODQ3O2UuaWRlb2dyYXBoaWNlbnRlcnByaXNlcGFyZW49MTI4NjE7ZS5pZGVvZ3JhcGhpY2V4Y2VsbGVudGNpcmNsZT0xMjk1NztlLmlkZW9ncmFwaGljZmVzdGl2YWxwYXJlbj0xMjg2NDtlLmlkZW9ncmFwaGljZmluYW5jaWFsY2lyY2xlPTEyOTUwO2UuaWRlb2dyYXBoaWNmaW5hbmNpYWxwYXJlbj0xMjg1NDtlLmlkZW9ncmFwaGljZmlyZXBhcmVuPTEyODQzO2UuaWRlb2dyYXBoaWNoYXZlcGFyZW49MTI4NTA7ZS5pZGVvZ3JhcGhpY2hpZ2hjaXJjbGU9MTI5NjQ7ZS5pZGVvZ3JhcGhpY2l0ZXJhdGlvbm1hcms9MTIyOTM7ZS5pZGVvZ3JhcGhpY2xhYm9yY2lyY2xlPTEyOTUyO2UuaWRlb2dyYXBoaWNsYWJvcnBhcmVuPTEyODU2O2UuaWRlb2dyYXBoaWNsZWZ0Y2lyY2xlPTEyOTY3O2UuaWRlb2dyYXBoaWNsb3djaXJjbGU9MTI5NjY7ZS5pZGVvZ3JhcGhpY21lZGljaW5lY2lyY2xlPTEyOTY5O2UuaWRlb2dyYXBoaWNtZXRhbHBhcmVuPTEyODQ2O2UuaWRlb2dyYXBoaWNtb29ucGFyZW49MTI4NDI7ZS5pZGVvZ3JhcGhpY25hbWVwYXJlbj0xMjg1MjtlLmlkZW9ncmFwaGljcGVyaW9kPTEyMjkwO2UuaWRlb2dyYXBoaWNwcmludGNpcmNsZT0xMjk1ODtlLmlkZW9ncmFwaGljcmVhY2hwYXJlbj0xMjg2NztlLmlkZW9ncmFwaGljcmVwcmVzZW50cGFyZW49MTI4NTc7ZS5pZGVvZ3JhcGhpY3Jlc291cmNlcGFyZW49MTI4NjI7ZS5pZGVvZ3JhcGhpY3JpZ2h0Y2lyY2xlPTEyOTY4O2UuaWRlb2dyYXBoaWNzZWNyZXRjaXJjbGU9MTI5NTM7ZS5pZGVvZ3JhcGhpY3NlbGZwYXJlbj0xMjg2NjtlLmlkZW9ncmFwaGljc29jaWV0eXBhcmVuPTEyODUxO2UuaWRlb2dyYXBoaWNzcGFjZT0xMjI4ODtlLmlkZW9ncmFwaGljc3BlY2lhbHBhcmVuPTEyODUzO2UuaWRlb2dyYXBoaWNzdG9ja3BhcmVuPTEyODQ5O2UuaWRlb2dyYXBoaWNzdHVkeXBhcmVuPTEyODU5O2UuaWRlb2dyYXBoaWNzdW5wYXJlbj0xMjg0ODtlLmlkZW9ncmFwaGljc3VwZXJ2aXNlcGFyZW49MTI4NjA7ZS5pZGVvZ3JhcGhpY3dhdGVycGFyZW49MTI4NDQ7ZS5pZGVvZ3JhcGhpY3dvb2RwYXJlbj0xMjg0NTtlLmlkZW9ncmFwaGljemVybz0xMjI5NTtlLmlkZW9ncmFwaG1ldGFsY2lyY2xlPTEyOTQyO2UuaWRlb2dyYXBobW9vbmNpcmNsZT0xMjkzODtlLmlkZW9ncmFwaG5hbWVjaXJjbGU9MTI5NDg7ZS5pZGVvZ3JhcGhzdW5jaXJjbGU9MTI5NDQ7ZS5pZGVvZ3JhcGh3YXRlcmNpcmNsZT0xMjk0MDtlLmlkZW9ncmFwaHdvb2RjaXJjbGU9MTI5NDE7ZS5pZGV2YT0yMzExO2UuaWRpZXJlc2lzPTIzOTtlLmlkaWVyZXNpc2FjdXRlPTc3Mjc7ZS5pZGllcmVzaXNjeXJpbGxpYz0xMjUzO2UuaWRvdGJlbG93PTc4ODM7ZS5pZWJyZXZlY3lyaWxsaWM9MTIzOTtlLmllY3lyaWxsaWM9MTA3NztlLmlldW5nYWNpcmNsZWtvcmVhbj0xMjkxNztlLmlldW5nYXBhcmVua29yZWFuPTEyODIxO2UuaWV1bmdjaXJjbGVrb3JlYW49MTI5MDM7ZS5pZXVuZ2tvcmVhbj0xMjYxNTtlLmlldW5ncGFyZW5rb3JlYW49MTI4MDc7ZS5pZ3JhdmU9MjM2O2UuaWd1amFyYXRpPTI2OTU7ZS5pZ3VybXVraGk9MjU2NztlLmloaXJhZ2FuYT0xMjM1NjtlLmlob29rYWJvdmU9Nzg4MTtlLmlpYmVuZ2FsaT0yNDQwO2UuaWljeXJpbGxpYz0xMDgwO2UuaWlkZXZhPTIzMTI7ZS5paWd1amFyYXRpPTI2OTY7ZS5paWd1cm11a2hpPTI1Njg7ZS5paW1hdHJhZ3VybXVraGk9MjYyNDtlLmlpbnZlcnRlZGJyZXZlPTUyMztlLmlpc2hvcnRjeXJpbGxpYz0xMDgxO2UuaWl2b3dlbHNpZ25iZW5nYWxpPTI0OTY7ZS5paXZvd2Vsc2lnbmRldmE9MjM2ODtlLmlpdm93ZWxzaWduZ3VqYXJhdGk9Mjc1MjtlLmlqPTMwNztlLmlrYXRha2FuYT0xMjQ1MjtlLmlrYXRha2FuYWhhbGZ3aWR0aD02NTM5NDtlLmlrb3JlYW49MTI2NDM7ZS5pbGRlPTczMjtlLmlsdXloZWJyZXc9MTQ1MjtlLmltYWNyb249Mjk5O2UuaW1hY3JvbmN5cmlsbGljPTEyNTE7ZS5pbWFnZW9yYXBwcm94aW1hdGVseWVxdWFsPTg3ODc7ZS5pbWF0cmFndXJtdWtoaT0yNjIzO2UuaW1vbm9zcGFjZT02NTM1MztlLmluY3JlbWVudD04NzEwO2UuaW5maW5pdHk9ODczNDtlLmluaWFybWVuaWFuPTEzODc7ZS5pbnRlZ3JhbD04NzQ3O2UuaW50ZWdyYWxib3R0b209ODk5MztlLmludGVncmFsYnQ9ODk5MztlLmludGVncmFsZXg9NjM3MzM7ZS5pbnRlZ3JhbHRvcD04OTkyO2UuaW50ZWdyYWx0cD04OTkyO2UuaW50ZXJzZWN0aW9uPTg3NDU7ZS5pbnRpc3F1YXJlPTEzMDYxO2UuaW52YnVsbGV0PTk2ODg7ZS5pbnZjaXJjbGU9OTY4OTtlLmludnNtaWxlZmFjZT05Nzg3O2UuaW9jeXJpbGxpYz0xMTA1O2UuaW9nb25laz0zMDM7ZS5pb3RhPTk1MztlLmlvdGFkaWVyZXNpcz05NzA7ZS5pb3RhZGllcmVzaXN0b25vcz05MTI7ZS5pb3RhbGF0aW49NjE3O2UuaW90YXRvbm9zPTk0MztlLmlwYXJlbj05MzgwO2UuaXJpZ3VybXVraGk9MjY3NDtlLmlzbWFsbGhpcmFnYW5hPTEyMzU1O2UuaXNtYWxsa2F0YWthbmE9MTI0NTE7ZS5pc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NDtlLmlzc2hhcmJlbmdhbGk9MjU1NDtlLmlzdHJva2U9NjE2O2UuaXN1cGVyaW9yPTYzMjEzO2UuaXRlcmF0aW9uaGlyYWdhbmE9MTI0NDU7ZS5pdGVyYXRpb25rYXRha2FuYT0xMjU0MTtlLml0aWxkZT0yOTc7ZS5pdGlsZGViZWxvdz03NzI1O2UuaXVib3BvbW9mbz0xMjU4NTtlLml1Y3lyaWxsaWM9MTEwMjtlLml2b3dlbHNpZ25iZW5nYWxpPTI0OTU7ZS5pdm93ZWxzaWduZGV2YT0yMzY3O2UuaXZvd2Vsc2lnbmd1amFyYXRpPTI3NTE7ZS5pemhpdHNhY3lyaWxsaWM9MTE0MTtlLml6aGl0c2FkYmxncmF2ZWN5cmlsbGljPTExNDM7ZS5qPTEwNjtlLmphYXJtZW5pYW49MTM5MztlLmphYmVuZ2FsaT0yNDYwO2UuamFkZXZhPTIzMzI7ZS5qYWd1amFyYXRpPTI3MTY7ZS5qYWd1cm11a2hpPTI1ODg7ZS5qYm9wb21vZm89MTI1NjA7ZS5qY2Fyb249NDk2O2UuamNpcmNsZT05NDMzO2UuamNpcmN1bWZsZXg9MzA5O2UuamNyb3NzZWR0YWlsPTY2OTtlLmpkb3RsZXNzc3Ryb2tlPTYwNztlLmplY3lyaWxsaWM9MTExMjtlLmplZW1hcmFiaWM9MTU4MDtlLmplZW1maW5hbGFyYWJpYz02NTE4MjtlLmplZW1pbml0aWFsYXJhYmljPTY1MTgzO2UuamVlbW1lZGlhbGFyYWJpYz02NTE4NDtlLmplaGFyYWJpYz0xNjg4O2UuamVoZmluYWxhcmFiaWM9NjQzOTU7ZS5qaGFiZW5nYWxpPTI0NjE7ZS5qaGFkZXZhPTIzMzM7ZS5qaGFndWphcmF0aT0yNzE3O2UuamhhZ3VybXVraGk9MjU4OTtlLmpoZWhhcm1lbmlhbj0xNDAzO2UuamlzPTEyMjkyO2Uuam1vbm9zcGFjZT02NTM1NDtlLmpwYXJlbj05MzgxO2UuanN1cGVyaW9yPTY5MDtlLms9MTA3O2Uua2FiYXNoa2lyY3lyaWxsaWM9MTE4NTtlLmthYmVuZ2FsaT0yNDUzO2Uua2FjdXRlPTc3Mjk7ZS5rYWN5cmlsbGljPTEwODI7ZS5rYWRlc2NlbmRlcmN5cmlsbGljPTExNzk7ZS5rYWRldmE9MjMyNTtlLmthZj0xNDk5O2Uua2FmYXJhYmljPTE2MDM7ZS5rYWZkYWdlc2g9NjQzMTU7ZS5rYWZkYWdlc2hoZWJyZXc9NjQzMTU7ZS5rYWZmaW5hbGFyYWJpYz02NTI0MjtlLmthZmhlYnJldz0xNDk5O2Uua2FmaW5pdGlhbGFyYWJpYz02NTI0MztlLmthZm1lZGlhbGFyYWJpYz02NTI0NDtlLmthZnJhZmVoZWJyZXc9NjQzMzM7ZS5rYWd1amFyYXRpPTI3MDk7ZS5rYWd1cm11a2hpPTI1ODE7ZS5rYWhpcmFnYW5hPTEyMzYzO2Uua2Fob29rY3lyaWxsaWM9MTIyMDtlLmtha2F0YWthbmE9MTI0NTk7ZS5rYWthdGFrYW5haGFsZndpZHRoPTY1Mzk4O2Uua2FwcGE9OTU0O2Uua2FwcGFzeW1ib2xncmVlaz0xMDA4O2Uua2FweWVvdW5taWV1bWtvcmVhbj0xMjY1NztlLmthcHllb3VucGhpZXVwaGtvcmVhbj0xMjY3NjtlLmthcHllb3VucGlldXBrb3JlYW49MTI2NjQ7ZS5rYXB5ZW91bnNzYW5ncGlldXBrb3JlYW49MTI2NjU7ZS5rYXJvcmlpc3F1YXJlPTEzMDY5O2Uua2FzaGlkYWF1dG9hcmFiaWM9MTYwMDtlLmthc2hpZGFhdXRvbm9zaWRlYmVhcmluZ2FyYWJpYz0xNjAwO2Uua2FzbWFsbGthdGFrYW5hPTEyNTMzO2Uua2FzcXVhcmU9MTMxODg7ZS5rYXNyYWFyYWJpYz0xNjE2O2Uua2FzcmF0YW5hcmFiaWM9MTYxMztlLmthc3Ryb2tlY3lyaWxsaWM9MTE4MztlLmthdGFoaXJhcHJvbG9uZ21hcmtoYWxmd2lkdGg9NjUzOTI7ZS5rYXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWM9MTE4MTtlLmtib3BvbW9mbz0xMjU1ODtlLmtjYWxzcXVhcmU9MTMxOTM7ZS5rY2Fyb249NDg5O2Uua2NlZGlsbGE9MzExO2Uua2NpcmNsZT05NDM0O2Uua2NvbW1hYWNjZW50PTMxMTtlLmtkb3RiZWxvdz03NzMxO2Uua2VoYXJtZW5pYW49MTQxMjtlLmtlaGlyYWdhbmE9MTIzNjk7ZS5rZWthdGFrYW5hPTEyNDY1O2Uua2VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMTtlLmtlbmFybWVuaWFuPTEzOTE7ZS5rZXNtYWxsa2F0YWthbmE9MTI1MzQ7ZS5rZ3JlZW5sYW5kaWM9MzEyO2Uua2hhYmVuZ2FsaT0yNDU0O2Uua2hhY3lyaWxsaWM9MTA5MztlLmtoYWRldmE9MjMyNjtlLmtoYWd1amFyYXRpPTI3MTA7ZS5raGFndXJtdWtoaT0yNTgyO2Uua2hhaGFyYWJpYz0xNTgyO2Uua2hhaGZpbmFsYXJhYmljPTY1MTkwO2Uua2hhaGluaXRpYWxhcmFiaWM9NjUxOTE7ZS5raGFobWVkaWFsYXJhYmljPTY1MTkyO2Uua2hlaWNvcHRpYz05OTk7ZS5raGhhZGV2YT0yMzkzO2Uua2hoYWd1cm11a2hpPTI2NDk7ZS5raGlldWtoYWNpcmNsZWtvcmVhbj0xMjkyMDtlLmtoaWV1a2hhcGFyZW5rb3JlYW49MTI4MjQ7ZS5raGlldWtoY2lyY2xla29yZWFuPTEyOTA2O2Uua2hpZXVraGtvcmVhbj0xMjYxOTtlLmtoaWV1a2hwYXJlbmtvcmVhbj0xMjgxMDtlLmtob2toYWl0aGFpPTM1ODY7ZS5raG9raG9udGhhaT0zNTg5O2Uua2hva2h1YXR0aGFpPTM1ODc7ZS5raG9raHdhaXRoYWk9MzU4ODtlLmtob211dHRoYWk9MzY3NTtlLmtob29rPTQwOTtlLmtob3Jha2hhbmd0aGFpPTM1OTA7ZS5raHpzcXVhcmU9MTMyMDE7ZS5raWhpcmFnYW5hPTEyMzY1O2Uua2lrYXRha2FuYT0xMjQ2MTtlLmtpa2F0YWthbmFoYWxmd2lkdGg9NjUzOTk7ZS5raXJvZ3VyYW11c3F1YXJlPTEzMDc3O2Uua2lyb21lZXRvcnVzcXVhcmU9MTMwNzg7ZS5raXJvc3F1YXJlPTEzMDc2O2Uua2l5ZW9rYWNpcmNsZWtvcmVhbj0xMjkxMDtlLmtpeWVva2FwYXJlbmtvcmVhbj0xMjgxNDtlLmtpeWVva2NpcmNsZWtvcmVhbj0xMjg5NjtlLmtpeWVva2tvcmVhbj0xMjU5MztlLmtpeWVva3BhcmVua29yZWFuPTEyODAwO2Uua2l5ZW9rc2lvc2tvcmVhbj0xMjU5NTtlLmtqZWN5cmlsbGljPTExMTY7ZS5rbGluZWJlbG93PTc3MzM7ZS5rbHNxdWFyZT0xMzIwODtlLmttY3ViZWRzcXVhcmU9MTMyMjI7ZS5rbW9ub3NwYWNlPTY1MzU1O2Uua21zcXVhcmVkc3F1YXJlPTEzMjE4O2Uua29oaXJhZ2FuYT0xMjM3MTtlLmtvaG1zcXVhcmU9MTMyNDg7ZS5rb2thaXRoYWk9MzU4NTtlLmtva2F0YWthbmE9MTI0Njc7ZS5rb2thdGFrYW5haGFsZndpZHRoPTY1NDAyO2Uua29vcG9zcXVhcmU9MTMwODY7ZS5rb3BwYWN5cmlsbGljPTExNTM7ZS5rb3JlYW5zdGFuZGFyZHN5bWJvbD0xMjkyNztlLmtvcm9uaXNjbWI9ODM1O2Uua3BhcmVuPTkzODI7ZS5rcGFzcXVhcmU9MTMyMjY7ZS5rc2ljeXJpbGxpYz0xMTM1O2Uua3RzcXVhcmU9MTMyNjM7ZS5rdHVybmVkPTY3MDtlLmt1aGlyYWdhbmE9MTIzNjc7ZS5rdWthdGFrYW5hPTEyNDYzO2Uua3VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMDtlLmt2c3F1YXJlPTEzMjQwO2Uua3dzcXVhcmU9MTMyNDY7ZS5sPTEwODtlLmxhYmVuZ2FsaT0yNDgyO2UubGFjdXRlPTMxNDtlLmxhZGV2YT0yMzU0O2UubGFndWphcmF0aT0yNzM4O2UubGFndXJtdWtoaT0yNjEwO2UubGFra2hhbmd5YW90aGFpPTM2NTM7ZS5sYW1hbGVmZmluYWxhcmFiaWM9NjUyNzY7ZS5sYW1hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MjcyO2UubGFtYWxlZmhhbXphYWJvdmVpc29sYXRlZGFyYWJpYz02NTI3MTtlLmxhbWFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUyNzQ7ZS5sYW1hbGVmaGFtemFiZWxvd2lzb2xhdGVkYXJhYmljPTY1MjczO2UubGFtYWxlZmlzb2xhdGVkYXJhYmljPTY1Mjc1O2UubGFtYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTI3MDtlLmxhbWFsZWZtYWRkYWFib3ZlaXNvbGF0ZWRhcmFiaWM9NjUyNjk7ZS5sYW1hcmFiaWM9MTYwNDtlLmxhbWJkYT05NTU7ZS5sYW1iZGFzdHJva2U9NDExO2UubGFtZWQ9MTUwMDtlLmxhbWVkZGFnZXNoPTY0MzE2O2UubGFtZWRkYWdlc2hoZWJyZXc9NjQzMTY7ZS5sYW1lZGhlYnJldz0xNTAwO2UubGFtZmluYWxhcmFiaWM9NjUyNDY7ZS5sYW1oYWhpbml0aWFsYXJhYmljPTY0NzE0O2UubGFtaW5pdGlhbGFyYWJpYz02NTI0NztlLmxhbWplZW1pbml0aWFsYXJhYmljPTY0NzEzO2UubGFta2hhaGluaXRpYWxhcmFiaWM9NjQ3MTU7ZS5sYW1sYW1oZWhpc29sYXRlZGFyYWJpYz02NTAxMDtlLmxhbW1lZGlhbGFyYWJpYz02NTI0ODtlLmxhbW1lZW1oYWhpbml0aWFsYXJhYmljPTY0OTA0O2UubGFtbWVlbWluaXRpYWxhcmFiaWM9NjQ3MTY7ZS5sYXJnZWNpcmNsZT05NzExO2UubGJhcj00MTA7ZS5sYmVsdD02MjA7ZS5sYm9wb21vZm89MTI1NTY7ZS5sY2Fyb249MzE4O2UubGNlZGlsbGE9MzE2O2UubGNpcmNsZT05NDM1O2UubGNpcmN1bWZsZXhiZWxvdz03NzQxO2UubGNvbW1hYWNjZW50PTMxNjtlLmxkb3Q9MzIwO2UubGRvdGFjY2VudD0zMjA7ZS5sZG90YmVsb3c9NzczNTtlLmxkb3RiZWxvd21hY3Jvbj03NzM3O2UubGVmdGFuZ2xlYWJvdmVjbWI9Nzk0O2UubGVmdHRhY2tiZWxvd2NtYj03OTI7ZS5sZXNzPTYwO2UubGVzc2VxdWFsPTg4MDQ7ZS5sZXNzZXF1YWxvcmdyZWF0ZXI9ODkyMjtlLmxlc3Ntb25vc3BhY2U9NjUzMDg7ZS5sZXNzb3JlcXVpdmFsZW50PTg4MTg7ZS5sZXNzb3JncmVhdGVyPTg4MjI7ZS5sZXNzb3ZlcmVxdWFsPTg4MDY7ZS5sZXNzc21hbGw9NjUxMjQ7ZS5sZXpoPTYyMjtlLmxmYmxvY2s9OTYxMjtlLmxob29rcmV0cm9mbGV4PTYyMTtlLmxpcmE9ODM1NjtlLmxpd25hcm1lbmlhbj0xMzg4O2UubGo9NDU3O2UubGplY3lyaWxsaWM9MTExMztlLmxsPTYzMTY4O2UubGxhZGV2YT0yMzU1O2UubGxhZ3VqYXJhdGk9MjczOTtlLmxsaW5lYmVsb3c9NzczOTtlLmxsbGFkZXZhPTIzNTY7ZS5sbHZvY2FsaWNiZW5nYWxpPTI1Mjk7ZS5sbHZvY2FsaWNkZXZhPTI0MDE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25kZXZhPTI0MDM7ZS5sbWlkZGxldGlsZGU9NjE5O2UubG1vbm9zcGFjZT02NTM1NjtlLmxtc3F1YXJlPTEzMjY0O2UubG9jaHVsYXRoYWk9MzYyODtlLmxvZ2ljYWxhbmQ9ODc0MztlLmxvZ2ljYWxub3Q9MTcyO2UubG9naWNhbG5vdHJldmVyc2VkPTg5NzY7ZS5sb2dpY2Fsb3I9ODc0NDtlLmxvbGluZ3RoYWk9MzYyMTtlLmxvbmdzPTM4MztlLmxvd2xpbmVjZW50ZXJsaW5lPTY1MTAyO2UubG93bGluZWNtYj04MTg7ZS5sb3dsaW5lZGFzaGVkPTY1MTAxO2UubG96ZW5nZT05Njc0O2UubHBhcmVuPTkzODM7ZS5sc2xhc2g9MzIyO2UubHNxdWFyZT04NDY3O2UubHN1cGVyaW9yPTYzMjE0O2UubHRzaGFkZT05NjE3O2UubHV0aGFpPTM2MjI7ZS5sdm9jYWxpY2JlbmdhbGk9MjQ0NDtlLmx2b2NhbGljZGV2YT0yMzE2O2UubHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzA7ZS5sdm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjQwMjtlLmx4c3F1YXJlPTEzMjY3O2UubT0xMDk7ZS5tYWJlbmdhbGk9MjQ3ODtlLm1hY3Jvbj0xNzU7ZS5tYWNyb25iZWxvd2NtYj04MTc7ZS5tYWNyb25jbWI9NzcyO2UubWFjcm9ubG93bW9kPTcxNztlLm1hY3Jvbm1vbm9zcGFjZT02NTUwNztlLm1hY3V0ZT03NzQzO2UubWFkZXZhPTIzNTA7ZS5tYWd1amFyYXRpPTI3MzQ7ZS5tYWd1cm11a2hpPTI2MDY7ZS5tYWhhcGFraGhlYnJldz0xNDQ0O2UubWFoYXBha2hsZWZ0aGVicmV3PTE0NDQ7ZS5tYWhpcmFnYW5hPTEyNDE0O2UubWFpY2hhdHRhd2Fsb3dsZWZ0dGhhaT02MzYzNztlLm1haWNoYXR0YXdhbG93cmlnaHR0aGFpPTYzNjM2O2UubWFpY2hhdHRhd2F0aGFpPTM2NTk7ZS5tYWljaGF0dGF3YXVwcGVybGVmdHRoYWk9NjM2MzU7ZS5tYWlla2xvd2xlZnR0aGFpPTYzNjI4O2UubWFpZWtsb3dyaWdodHRoYWk9NjM2Mjc7ZS5tYWlla3RoYWk9MzY1NjtlLm1haWVrdXBwZXJsZWZ0dGhhaT02MzYyNjtlLm1haWhhbmFrYXRsZWZ0dGhhaT02MzYyMDtlLm1haWhhbmFrYXR0aGFpPTM2MzM7ZS5tYWl0YWlraHVsZWZ0dGhhaT02MzYyNTtlLm1haXRhaWtodXRoYWk9MzY1NTtlLm1haXRob2xvd2xlZnR0aGFpPTYzNjMxO2UubWFpdGhvbG93cmlnaHR0aGFpPTYzNjMwO2UubWFpdGhvdGhhaT0zNjU3O2UubWFpdGhvdXBwZXJsZWZ0dGhhaT02MzYyOTtlLm1haXRyaWxvd2xlZnR0aGFpPTYzNjM0O2UubWFpdHJpbG93cmlnaHR0aGFpPTYzNjMzO2UubWFpdHJpdGhhaT0zNjU4O2UubWFpdHJpdXBwZXJsZWZ0dGhhaT02MzYzMjtlLm1haXlhbW9rdGhhaT0zNjU0O2UubWFrYXRha2FuYT0xMjUxMDtlLm1ha2F0YWthbmFoYWxmd2lkdGg9NjU0MjM7ZS5tYWxlPTk3OTQ7ZS5tYW5zeW9uc3F1YXJlPTEzMTI3O2UubWFxYWZoZWJyZXc9MTQ3MDtlLm1hcnM9OTc5NDtlLm1hc29yYWNpcmNsZWhlYnJldz0xNDU1O2UubWFzcXVhcmU9MTMxODc7ZS5tYm9wb21vZm89MTI1NTE7ZS5tYnNxdWFyZT0xMzI2ODtlLm1jaXJjbGU9OTQzNjtlLm1jdWJlZHNxdWFyZT0xMzIyMTtlLm1kb3RhY2NlbnQ9Nzc0NTtlLm1kb3RiZWxvdz03NzQ3O2UubWVlbWFyYWJpYz0xNjA1O2UubWVlbWZpbmFsYXJhYmljPTY1MjUwO2UubWVlbWluaXRpYWxhcmFiaWM9NjUyNTE7ZS5tZWVtbWVkaWFsYXJhYmljPTY1MjUyO2UubWVlbW1lZW1pbml0aWFsYXJhYmljPTY0NzIxO2UubWVlbW1lZW1pc29sYXRlZGFyYWJpYz02NDU4NDtlLm1lZXRvcnVzcXVhcmU9MTMxMzM7ZS5tZWhpcmFnYW5hPTEyNDE3O2UubWVpemllcmFzcXVhcmU9MTMxODI7ZS5tZWthdGFrYW5hPTEyNTEzO2UubWVrYXRha2FuYWhhbGZ3aWR0aD02NTQyNjtlLm1lbT0xNTAyO2UubWVtZGFnZXNoPTY0MzE4O2UubWVtZGFnZXNoaGVicmV3PTY0MzE4O2UubWVtaGVicmV3PTE1MDI7ZS5tZW5hcm1lbmlhbj0xMzk2O2UubWVya2hhaGVicmV3PTE0NDU7ZS5tZXJraGFrZWZ1bGFoZWJyZXc9MTQ0NjtlLm1lcmtoYWtlZnVsYWxlZnRoZWJyZXc9MTQ0NjtlLm1lcmtoYWxlZnRoZWJyZXc9MTQ0NTtlLm1ob29rPTYyNTtlLm1oenNxdWFyZT0xMzIwMjtlLm1pZGRsZWRvdGthdGFrYW5haGFsZndpZHRoPTY1MzgxO2UubWlkZG90PTE4MztlLm1pZXVtYWNpcmNsZWtvcmVhbj0xMjkxNDtlLm1pZXVtYXBhcmVua29yZWFuPTEyODE4O2UubWlldW1jaXJjbGVrb3JlYW49MTI5MDA7ZS5taWV1bWtvcmVhbj0xMjYwOTtlLm1pZXVtcGFuc2lvc2tvcmVhbj0xMjY1NjtlLm1pZXVtcGFyZW5rb3JlYW49MTI4MDQ7ZS5taWV1bXBpZXVwa29yZWFuPTEyNjU0O2UubWlldW1zaW9za29yZWFuPTEyNjU1O2UubWloaXJhZ2FuYT0xMjQxNTtlLm1pa2F0YWthbmE9MTI1MTE7ZS5taWthdGFrYW5haGFsZndpZHRoPTY1NDI0O2UubWludXM9ODcyMjtlLm1pbnVzYmVsb3djbWI9ODAwO2UubWludXNjaXJjbGU9ODg1NDtlLm1pbnVzbW9kPTcyNztlLm1pbnVzcGx1cz04NzIzO2UubWludXRlPTgyNDI7ZS5taXJpYmFhcnVzcXVhcmU9MTMxMzA7ZS5taXJpc3F1YXJlPTEzMTI5O2UubWxvbmdsZWd0dXJuZWQ9NjI0O2UubWxzcXVhcmU9MTMyMDY7ZS5tbWN1YmVkc3F1YXJlPTEzMjE5O2UubW1vbm9zcGFjZT02NTM1NztlLm1tc3F1YXJlZHNxdWFyZT0xMzIxNTtlLm1vaGlyYWdhbmE9MTI0MTg7ZS5tb2htc3F1YXJlPTEzMjQ5O2UubW9rYXRha2FuYT0xMjUxNDtlLm1va2F0YWthbmFoYWxmd2lkdGg9NjU0Mjc7ZS5tb2xzcXVhcmU9MTMyNzA7ZS5tb21hdGhhaT0zNjE3O2UubW92ZXJzc3F1YXJlPTEzMjIzO2UubW92ZXJzc3F1YXJlZHNxdWFyZT0xMzIyNDtlLm1wYXJlbj05Mzg0O2UubXBhc3F1YXJlPTEzMjI3O2UubXNzcXVhcmU9MTMyMzU7ZS5tc3VwZXJpb3I9NjMyMTU7ZS5tdHVybmVkPTYyMztlLm11PTE4MTtlLm11MT0xODE7ZS5tdWFzcXVhcmU9MTMxODY7ZS5tdWNoZ3JlYXRlcj04ODExO2UubXVjaGxlc3M9ODgxMDtlLm11ZnNxdWFyZT0xMzE5NjtlLm11Z3JlZWs9OTU2O2UubXVnc3F1YXJlPTEzMTk3O2UubXVoaXJhZ2FuYT0xMjQxNjtlLm11a2F0YWthbmE9MTI1MTI7ZS5tdWthdGFrYW5haGFsZndpZHRoPTY1NDI1O2UubXVsc3F1YXJlPTEzMjA1O2UubXVsdGlwbHk9MjE1O2UubXVtc3F1YXJlPTEzMjExO2UubXVuYWhoZWJyZXc9MTQ0MztlLm11bmFobGVmdGhlYnJldz0xNDQzO2UubXVzaWNhbG5vdGU9OTgzNDtlLm11c2ljYWxub3RlZGJsPTk4MzU7ZS5tdXNpY2ZsYXRzaWduPTk4Mzc7ZS5tdXNpY3NoYXJwc2lnbj05ODM5O2UubXVzc3F1YXJlPTEzMjM0O2UubXV2c3F1YXJlPTEzMjM4O2UubXV3c3F1YXJlPTEzMjQ0O2UubXZtZWdhc3F1YXJlPTEzMjQxO2UubXZzcXVhcmU9MTMyMzk7ZS5td21lZ2FzcXVhcmU9MTMyNDc7ZS5td3NxdWFyZT0xMzI0NTtlLm49MTEwO2UubmFiZW5nYWxpPTI0NzI7ZS5uYWJsYT04NzExO2UubmFjdXRlPTMyNDtlLm5hZGV2YT0yMzQ0O2UubmFndWphcmF0aT0yNzI4O2UubmFndXJtdWtoaT0yNjAwO2UubmFoaXJhZ2FuYT0xMjM5NDtlLm5ha2F0YWthbmE9MTI0OTA7ZS5uYWthdGFrYW5haGFsZndpZHRoPTY1NDEzO2UubmFwb3N0cm9waGU9MzI5O2UubmFzcXVhcmU9MTMxODU7ZS5uYm9wb21vZm89MTI1NTU7ZS5uYnNwYWNlPTE2MDtlLm5jYXJvbj0zMjg7ZS5uY2VkaWxsYT0zMjY7ZS5uY2lyY2xlPTk0Mzc7ZS5uY2lyY3VtZmxleGJlbG93PTc3NTU7ZS5uY29tbWFhY2NlbnQ9MzI2O2UubmRvdGFjY2VudD03NzQ5O2UubmRvdGJlbG93PTc3NTE7ZS5uZWhpcmFnYW5hPTEyMzk3O2UubmVrYXRha2FuYT0xMjQ5MztlLm5la2F0YWthbmFoYWxmd2lkdGg9NjU0MTY7ZS5uZXdzaGVxZWxzaWduPTgzNjI7ZS5uZnNxdWFyZT0xMzE5NTtlLm5nYWJlbmdhbGk9MjQ1NztlLm5nYWRldmE9MjMyOTtlLm5nYWd1amFyYXRpPTI3MTM7ZS5uZ2FndXJtdWtoaT0yNTg1O2Uubmdvbmd1dGhhaT0zNTkxO2UubmhpcmFnYW5hPTEyNDM1O2Uubmhvb2tsZWZ0PTYyNjtlLm5ob29rcmV0cm9mbGV4PTYyNztlLm5pZXVuYWNpcmNsZWtvcmVhbj0xMjkxMTtlLm5pZXVuYXBhcmVua29yZWFuPTEyODE1O2UubmlldW5jaWV1Y2tvcmVhbj0xMjU5NztlLm5pZXVuY2lyY2xla29yZWFuPTEyODk3O2UubmlldW5oaWV1aGtvcmVhbj0xMjU5ODtlLm5pZXVua29yZWFuPTEyNTk2O2UubmlldW5wYW5zaW9za29yZWFuPTEyNjQ4O2UubmlldW5wYXJlbmtvcmVhbj0xMjgwMTtlLm5pZXVuc2lvc2tvcmVhbj0xMjY0NztlLm5pZXVudGlrZXV0a29yZWFuPTEyNjQ2O2UubmloaXJhZ2FuYT0xMjM5NTtlLm5pa2F0YWthbmE9MTI0OTE7ZS5uaWthdGFrYW5haGFsZndpZHRoPTY1NDE0O2UubmlraGFoaXRsZWZ0dGhhaT02MzY0MTtlLm5pa2hhaGl0dGhhaT0zNjYxO2UubmluZT01NztlLm5pbmVhcmFiaWM9MTY0MTtlLm5pbmViZW5nYWxpPTI1NDM7ZS5uaW5lY2lyY2xlPTkzMjA7ZS5uaW5lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEzMDtlLm5pbmVkZXZhPTI0MTU7ZS5uaW5lZ3VqYXJhdGk9Mjc5OTtlLm5pbmVndXJtdWtoaT0yNjcxO2UubmluZWhhY2thcmFiaWM9MTY0MTtlLm5pbmVoYW5nemhvdT0xMjMyOTtlLm5pbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODQwO2UubmluZWluZmVyaW9yPTgzMjk7ZS5uaW5lbW9ub3NwYWNlPTY1MzA1O2UubmluZW9sZHN0eWxlPTYzMjg5O2UubmluZXBhcmVuPTkzNDA7ZS5uaW5lcGVyaW9kPTkzNjA7ZS5uaW5lcGVyc2lhbj0xNzg1O2UubmluZXJvbWFuPTg1Njg7ZS5uaW5lc3VwZXJpb3I9ODMxMztlLm5pbmV0ZWVuY2lyY2xlPTkzMzA7ZS5uaW5ldGVlbnBhcmVuPTkzNTA7ZS5uaW5ldGVlbnBlcmlvZD05MzcwO2UubmluZXRoYWk9MzY3MztlLm5qPTQ2MDtlLm5qZWN5cmlsbGljPTExMTQ7ZS5ua2F0YWthbmE9MTI1MzE7ZS5ua2F0YWthbmFoYWxmd2lkdGg9NjU0Mzc7ZS5ubGVncmlnaHRsb25nPTQxNDtlLm5saW5lYmVsb3c9Nzc1MztlLm5tb25vc3BhY2U9NjUzNTg7ZS5ubXNxdWFyZT0xMzIxMDtlLm5uYWJlbmdhbGk9MjQ2NztlLm5uYWRldmE9MjMzOTtlLm5uYWd1amFyYXRpPTI3MjM7ZS5ubmFndXJtdWtoaT0yNTk1O2Uubm5uYWRldmE9MjM0NTtlLm5vaGlyYWdhbmE9MTIzOTg7ZS5ub2thdGFrYW5hPTEyNDk0O2Uubm9rYXRha2FuYWhhbGZ3aWR0aD02NTQxNztlLm5vbmJyZWFraW5nc3BhY2U9MTYwO2Uubm9uZW50aGFpPTM2MDM7ZS5ub251dGhhaT0zNjA5O2Uubm9vbmFyYWJpYz0xNjA2O2Uubm9vbmZpbmFsYXJhYmljPTY1MjU0O2Uubm9vbmdodW5uYWFyYWJpYz0xNzIyO2Uubm9vbmdodW5uYWZpbmFsYXJhYmljPTY0NDE1O2Uubm9vbmluaXRpYWxhcmFiaWM9NjUyNTU7ZS5ub29uamVlbWluaXRpYWxhcmFiaWM9NjQ3MjI7ZS5ub29uamVlbWlzb2xhdGVkYXJhYmljPTY0NTg3O2Uubm9vbm1lZGlhbGFyYWJpYz02NTI1NjtlLm5vb25tZWVtaW5pdGlhbGFyYWJpYz02NDcyNTtlLm5vb25tZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1OTA7ZS5ub29ubm9vbmZpbmFsYXJhYmljPTY0NjUzO2Uubm90Y29udGFpbnM9ODcxNjtlLm5vdGVsZW1lbnQ9ODcxMztlLm5vdGVsZW1lbnRvZj04NzEzO2Uubm90ZXF1YWw9ODgwMDtlLm5vdGdyZWF0ZXI9ODgxNTtlLm5vdGdyZWF0ZXJub3JlcXVhbD04ODE3O2Uubm90Z3JlYXRlcm5vcmxlc3M9ODgyNTtlLm5vdGlkZW50aWNhbD04ODAyO2Uubm90bGVzcz04ODE0O2Uubm90bGVzc25vcmVxdWFsPTg4MTY7ZS5ub3RwYXJhbGxlbD04NzQyO2Uubm90cHJlY2VkZXM9ODgzMjtlLm5vdHN1YnNldD04ODM2O2Uubm90c3VjY2VlZHM9ODgzMztlLm5vdHN1cGVyc2V0PTg4Mzc7ZS5ub3dhcm1lbmlhbj0xMzk4O2UubnBhcmVuPTkzODU7ZS5uc3NxdWFyZT0xMzIzMztlLm5zdXBlcmlvcj04MzE5O2UubnRpbGRlPTI0MTtlLm51PTk1NztlLm51aGlyYWdhbmE9MTIzOTY7ZS5udWthdGFrYW5hPTEyNDkyO2UubnVrYXRha2FuYWhhbGZ3aWR0aD02NTQxNTtlLm51a3RhYmVuZ2FsaT0yNDkyO2UubnVrdGFkZXZhPTIzNjQ7ZS5udWt0YWd1amFyYXRpPTI3NDg7ZS5udWt0YWd1cm11a2hpPTI2MjA7ZS5udW1iZXJzaWduPTM1O2UubnVtYmVyc2lnbm1vbm9zcGFjZT02NTI4MztlLm51bWJlcnNpZ25zbWFsbD02NTExOTtlLm51bWVyYWxzaWduZ3JlZWs9ODg0O2UubnVtZXJhbHNpZ25sb3dlcmdyZWVrPTg4NTtlLm51bWVybz04NDcwO2UubnVuPTE1MDQ7ZS5udW5kYWdlc2g9NjQzMjA7ZS5udW5kYWdlc2hoZWJyZXc9NjQzMjA7ZS5udW5oZWJyZXc9MTUwNDtlLm52c3F1YXJlPTEzMjM3O2UubndzcXVhcmU9MTMyNDM7ZS5ueWFiZW5nYWxpPTI0NjI7ZS5ueWFkZXZhPTIzMzQ7ZS5ueWFndWphcmF0aT0yNzE4O2UubnlhZ3VybXVraGk9MjU5MDtlLm89MTExO2Uub2FjdXRlPTI0MztlLm9hbmd0aGFpPTM2Mjk7ZS5vYmFycmVkPTYyOTtlLm9iYXJyZWRjeXJpbGxpYz0xMjU3O2Uub2JhcnJlZGRpZXJlc2lzY3lyaWxsaWM9MTI1OTtlLm9iZW5nYWxpPTI0NTE7ZS5vYm9wb21vZm89MTI1NzE7ZS5vYnJldmU9MzM1O2Uub2NhbmRyYWRldmE9MjMyMTtlLm9jYW5kcmFndWphcmF0aT0yNzA1O2Uub2NhbmRyYXZvd2Vsc2lnbmRldmE9MjM3NztlLm9jYW5kcmF2b3dlbHNpZ25ndWphcmF0aT0yNzYxO2Uub2Nhcm9uPTQ2NjtlLm9jaXJjbGU9OTQzODtlLm9jaXJjdW1mbGV4PTI0NDtlLm9jaXJjdW1mbGV4YWN1dGU9Nzg4OTtlLm9jaXJjdW1mbGV4ZG90YmVsb3c9Nzg5NztlLm9jaXJjdW1mbGV4Z3JhdmU9Nzg5MTtlLm9jaXJjdW1mbGV4aG9va2Fib3ZlPTc4OTM7ZS5vY2lyY3VtZmxleHRpbGRlPTc4OTU7ZS5vY3lyaWxsaWM9MTA4NjtlLm9kYmxhY3V0ZT0zMzc7ZS5vZGJsZ3JhdmU9NTI1O2Uub2RldmE9MjMyMztlLm9kaWVyZXNpcz0yNDY7ZS5vZGllcmVzaXNjeXJpbGxpYz0xMjU1O2Uub2RvdGJlbG93PTc4ODU7ZS5vZT0zMzk7ZS5vZWtvcmVhbj0xMjYzNDtlLm9nb25laz03MzE7ZS5vZ29uZWtjbWI9ODA4O2Uub2dyYXZlPTI0MjtlLm9ndWphcmF0aT0yNzA3O2Uub2hhcm1lbmlhbj0xNDEzO2Uub2hpcmFnYW5hPTEyMzYyO2Uub2hvb2thYm92ZT03ODg3O2Uub2hvcm49NDE3O2Uub2hvcm5hY3V0ZT03ODk5O2Uub2hvcm5kb3RiZWxvdz03OTA3O2Uub2hvcm5ncmF2ZT03OTAxO2Uub2hvcm5ob29rYWJvdmU9NzkwMztlLm9ob3JudGlsZGU9NzkwNTtlLm9odW5nYXJ1bWxhdXQ9MzM3O2Uub2k9NDE5O2Uub2ludmVydGVkYnJldmU9NTI3O2Uub2thdGFrYW5hPTEyNDU4O2Uub2thdGFrYW5haGFsZndpZHRoPTY1Mzk3O2Uub2tvcmVhbj0xMjYzMTtlLm9sZWhlYnJldz0xNDUxO2Uub21hY3Jvbj0zMzM7ZS5vbWFjcm9uYWN1dGU9Nzc2MztlLm9tYWNyb25ncmF2ZT03NzYxO2Uub21kZXZhPTIzODQ7ZS5vbWVnYT05Njk7ZS5vbWVnYTE9OTgyO2Uub21lZ2FjeXJpbGxpYz0xMTIxO2Uub21lZ2FsYXRpbmNsb3NlZD02MzE7ZS5vbWVnYXJvdW5kY3lyaWxsaWM9MTE0NztlLm9tZWdhdGl0bG9jeXJpbGxpYz0xMTQ5O2Uub21lZ2F0b25vcz05NzQ7ZS5vbWd1amFyYXRpPTI3Njg7ZS5vbWljcm9uPTk1OTtlLm9taWNyb250b25vcz05NzI7ZS5vbW9ub3NwYWNlPTY1MzU5O2Uub25lPTQ5O2Uub25lYXJhYmljPTE2MzM7ZS5vbmViZW5nYWxpPTI1MzU7ZS5vbmVjaXJjbGU9OTMxMjtlLm9uZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjI7ZS5vbmVkZXZhPTI0MDc7ZS5vbmVkb3RlbmxlYWRlcj04MjI4O2Uub25lZWlnaHRoPTg1Mzk7ZS5vbmVmaXR0ZWQ9NjMxOTY7ZS5vbmVndWphcmF0aT0yNzkxO2Uub25lZ3VybXVraGk9MjY2MztlLm9uZWhhY2thcmFiaWM9MTYzMztlLm9uZWhhbGY9MTg5O2Uub25laGFuZ3pob3U9MTIzMjE7ZS5vbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODMyO2Uub25laW5mZXJpb3I9ODMyMTtlLm9uZW1vbm9zcGFjZT02NTI5NztlLm9uZW51bWVyYXRvcmJlbmdhbGk9MjU0ODtlLm9uZW9sZHN0eWxlPTYzMjgxO2Uub25lcGFyZW49OTMzMjtlLm9uZXBlcmlvZD05MzUyO2Uub25lcGVyc2lhbj0xNzc3O2Uub25lcXVhcnRlcj0xODg7ZS5vbmVyb21hbj04NTYwO2Uub25lc3VwZXJpb3I9MTg1O2Uub25ldGhhaT0zNjY1O2Uub25ldGhpcmQ9ODUzMTtlLm9vZ29uZWs9NDkxO2Uub29nb25la21hY3Jvbj00OTM7ZS5vb2d1cm11a2hpPTI1Nzk7ZS5vb21hdHJhZ3VybXVraGk9MjYzNTtlLm9vcGVuPTU5NjtlLm9wYXJlbj05Mzg2O2Uub3BlbmJ1bGxldD05NzAyO2Uub3B0aW9uPTg5OTc7ZS5vcmRmZW1pbmluZT0xNzA7ZS5vcmRtYXNjdWxpbmU9MTg2O2Uub3J0aG9nb25hbD04NzM1O2Uub3Nob3J0ZGV2YT0yMzIyO2Uub3Nob3J0dm93ZWxzaWduZGV2YT0yMzc4O2Uub3NsYXNoPTI0ODtlLm9zbGFzaGFjdXRlPTUxMTtlLm9zbWFsbGhpcmFnYW5hPTEyMzYxO2Uub3NtYWxsa2F0YWthbmE9MTI0NTc7ZS5vc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NztlLm9zdHJva2VhY3V0ZT01MTE7ZS5vc3VwZXJpb3I9NjMyMTY7ZS5vdGN5cmlsbGljPTExNTE7ZS5vdGlsZGU9MjQ1O2Uub3RpbGRlYWN1dGU9Nzc1NztlLm90aWxkZWRpZXJlc2lzPTc3NTk7ZS5vdWJvcG9tb2ZvPTEyNTc3O2Uub3ZlcmxpbmU9ODI1NDtlLm92ZXJsaW5lY2VudGVybGluZT02NTA5ODtlLm92ZXJsaW5lY21iPTc3MztlLm92ZXJsaW5lZGFzaGVkPTY1MDk3O2Uub3ZlcmxpbmVkYmx3YXZ5PTY1MTAwO2Uub3ZlcmxpbmV3YXZ5PTY1MDk5O2Uub3ZlcnNjb3JlPTE3NTtlLm92b3dlbHNpZ25iZW5nYWxpPTI1MDc7ZS5vdm93ZWxzaWduZGV2YT0yMzc5O2Uub3Zvd2Vsc2lnbmd1amFyYXRpPTI3NjM7ZS5wPTExMjtlLnBhYW1wc3NxdWFyZT0xMzE4NDtlLnBhYXNlbnRvc3F1YXJlPTEzMDk5O2UucGFiZW5nYWxpPTI0NzQ7ZS5wYWN1dGU9Nzc2NTtlLnBhZGV2YT0yMzQ2O2UucGFnZWRvd249ODY3MTtlLnBhZ2V1cD04NjcwO2UucGFndWphcmF0aT0yNzMwO2UucGFndXJtdWtoaT0yNjAyO2UucGFoaXJhZ2FuYT0xMjQwMTtlLnBhaXlhbm5vaXRoYWk9MzYzMTtlLnBha2F0YWthbmE9MTI0OTc7ZS5wYWxhdGFsaXphdGlvbmN5cmlsbGljY21iPTExNTY7ZS5wYWxvY2hrYWN5cmlsbGljPTEyMTY7ZS5wYW5zaW9za29yZWFuPTEyNjcxO2UucGFyYWdyYXBoPTE4MjtlLnBhcmFsbGVsPTg3NDE7ZS5wYXJlbmxlZnQ9NDA7ZS5wYXJlbmxlZnRhbHRvbmVhcmFiaWM9NjQ4MzA7ZS5wYXJlbmxlZnRidD02MzcyNTtlLnBhcmVubGVmdGV4PTYzNzI0O2UucGFyZW5sZWZ0aW5mZXJpb3I9ODMzMztlLnBhcmVubGVmdG1vbm9zcGFjZT02NTI4ODtlLnBhcmVubGVmdHNtYWxsPTY1MTEzO2UucGFyZW5sZWZ0c3VwZXJpb3I9ODMxNztlLnBhcmVubGVmdHRwPTYzNzIzO2UucGFyZW5sZWZ0dmVydGljYWw9NjUwNzc7ZS5wYXJlbnJpZ2h0PTQxO2UucGFyZW5yaWdodGFsdG9uZWFyYWJpYz02NDgzMTtlLnBhcmVucmlnaHRidD02MzczNjtlLnBhcmVucmlnaHRleD02MzczNTtlLnBhcmVucmlnaHRpbmZlcmlvcj04MzM0O2UucGFyZW5yaWdodG1vbm9zcGFjZT02NTI4OTtlLnBhcmVucmlnaHRzbWFsbD02NTExNDtlLnBhcmVucmlnaHRzdXBlcmlvcj04MzE4O2UucGFyZW5yaWdodHRwPTYzNzM0O2UucGFyZW5yaWdodHZlcnRpY2FsPTY1MDc4O2UucGFydGlhbGRpZmY9ODcwNjtlLnBhc2VxaGVicmV3PTE0NzI7ZS5wYXNodGFoZWJyZXc9MTQzMztlLnBhc3F1YXJlPTEzMjI1O2UucGF0YWg9MTQ2MztlLnBhdGFoMTE9MTQ2MztlLnBhdGFoMWQ9MTQ2MztlLnBhdGFoMmE9MTQ2MztlLnBhdGFoaGVicmV3PTE0NjM7ZS5wYXRhaG5hcnJvd2hlYnJldz0xNDYzO2UucGF0YWhxdWFydGVyaGVicmV3PTE0NjM7ZS5wYXRhaHdpZGVoZWJyZXc9MTQ2MztlLnBhemVyaGVicmV3PTE0NDE7ZS5wYm9wb21vZm89MTI1NTA7ZS5wY2lyY2xlPTk0Mzk7ZS5wZG90YWNjZW50PTc3Njc7ZS5wZT0xNTA4O2UucGVjeXJpbGxpYz0xMDg3O2UucGVkYWdlc2g9NjQzMjQ7ZS5wZWRhZ2VzaGhlYnJldz02NDMyNDtlLnBlZXppc3F1YXJlPTEzMTE1O2UucGVmaW5hbGRhZ2VzaGhlYnJldz02NDMyMztlLnBlaGFyYWJpYz0xNjYyO2UucGVoYXJtZW5pYW49MTQwMjtlLnBlaGVicmV3PTE1MDg7ZS5wZWhmaW5hbGFyYWJpYz02NDM0MztlLnBlaGluaXRpYWxhcmFiaWM9NjQzNDQ7ZS5wZWhpcmFnYW5hPTEyNDEwO2UucGVobWVkaWFsYXJhYmljPTY0MzQ1O2UucGVrYXRha2FuYT0xMjUwNjtlLnBlbWlkZGxlaG9va2N5cmlsbGljPTExOTE7ZS5wZXJhZmVoZWJyZXc9NjQzMzQ7ZS5wZXJjZW50PTM3O2UucGVyY2VudGFyYWJpYz0xNjQyO2UucGVyY2VudG1vbm9zcGFjZT02NTI4NTtlLnBlcmNlbnRzbWFsbD02NTEzMDtlLnBlcmlvZD00NjtlLnBlcmlvZGFybWVuaWFuPTE0MTc7ZS5wZXJpb2RjZW50ZXJlZD0xODM7ZS5wZXJpb2RoYWxmd2lkdGg9NjUzNzc7ZS5wZXJpb2RpbmZlcmlvcj02MzIwNztlLnBlcmlvZG1vbm9zcGFjZT02NTI5NDtlLnBlcmlvZHNtYWxsPTY1MTA2O2UucGVyaW9kc3VwZXJpb3I9NjMyMDg7ZS5wZXJpc3BvbWVuaWdyZWVrY21iPTgzNDtlLnBlcnBlbmRpY3VsYXI9ODg2OTtlLnBlcnRob3VzYW5kPTgyNDA7ZS5wZXNldGE9ODM1OTtlLnBmc3F1YXJlPTEzMTk0O2UucGhhYmVuZ2FsaT0yNDc1O2UucGhhZGV2YT0yMzQ3O2UucGhhZ3VqYXJhdGk9MjczMTtlLnBoYWd1cm11a2hpPTI2MDM7ZS5waGk9OTY2O2UucGhpMT05ODE7ZS5waGlldXBoYWNpcmNsZWtvcmVhbj0xMjkyMjtlLnBoaWV1cGhhcGFyZW5rb3JlYW49MTI4MjY7ZS5waGlldXBoY2lyY2xla29yZWFuPTEyOTA4O2UucGhpZXVwaGtvcmVhbj0xMjYyMTtlLnBoaWV1cGhwYXJlbmtvcmVhbj0xMjgxMjtlLnBoaWxhdGluPTYzMjtlLnBoaW50aHV0aGFpPTM2NDI7ZS5waGlzeW1ib2xncmVlaz05ODE7ZS5waG9vaz00MjE7ZS5waG9waGFudGhhaT0zNjE0O2UucGhvcGh1bmd0aGFpPTM2MTI7ZS5waG9zYW1waGFvdGhhaT0zNjE2O2UucGk9OTYwO2UucGlldXBhY2lyY2xla29yZWFuPTEyOTE1O2UucGlldXBhcGFyZW5rb3JlYW49MTI4MTk7ZS5waWV1cGNpZXVja29yZWFuPTEyNjYyO2UucGlldXBjaXJjbGVrb3JlYW49MTI5MDE7ZS5waWV1cGtpeWVva2tvcmVhbj0xMjY1ODtlLnBpZXVwa29yZWFuPTEyNjEwO2UucGlldXBwYXJlbmtvcmVhbj0xMjgwNTtlLnBpZXVwc2lvc2tpeWVva2tvcmVhbj0xMjY2MDtlLnBpZXVwc2lvc2tvcmVhbj0xMjYxMjtlLnBpZXVwc2lvc3Rpa2V1dGtvcmVhbj0xMjY2MTtlLnBpZXVwdGhpZXV0aGtvcmVhbj0xMjY2MztlLnBpZXVwdGlrZXV0a29yZWFuPTEyNjU5O2UucGloaXJhZ2FuYT0xMjQwNDtlLnBpa2F0YWthbmE9MTI1MDA7ZS5waXN5bWJvbGdyZWVrPTk4MjtlLnBpd3Jhcm1lbmlhbj0xNDExO2UucGxhbmNrb3ZlcjJwaT04NDYzO2UucGxhbmNrb3ZlcjJwaTE9ODQ2MztlLnBsdXM9NDM7ZS5wbHVzYmVsb3djbWI9Nzk5O2UucGx1c2NpcmNsZT04ODUzO2UucGx1c21pbnVzPTE3NztlLnBsdXNtb2Q9NzI2O2UucGx1c21vbm9zcGFjZT02NTI5MTtlLnBsdXNzbWFsbD02NTEyMjtlLnBsdXNzdXBlcmlvcj04MzE0O2UucG1vbm9zcGFjZT02NTM2MDtlLnBtc3F1YXJlPTEzMjcyO2UucG9oaXJhZ2FuYT0xMjQxMztlLnBvaW50aW5naW5kZXhkb3dud2hpdGU9OTc1OTtlLnBvaW50aW5naW5kZXhsZWZ0d2hpdGU9OTc1NjtlLnBvaW50aW5naW5kZXhyaWdodHdoaXRlPTk3NTg7ZS5wb2ludGluZ2luZGV4dXB3aGl0ZT05NzU3O2UucG9rYXRha2FuYT0xMjUwOTtlLnBvcGxhdGhhaT0zNjExO2UucG9zdGFsbWFyaz0xMjMwNjtlLnBvc3RhbG1hcmtmYWNlPTEyMzIwO2UucHBhcmVuPTkzODc7ZS5wcmVjZWRlcz04ODI2O2UucHJlc2NyaXB0aW9uPTg0Nzg7ZS5wcmltZW1vZD02OTc7ZS5wcmltZXJldmVyc2VkPTgyNDU7ZS5wcm9kdWN0PTg3MTk7ZS5wcm9qZWN0aXZlPTg5NjU7ZS5wcm9sb25nZWRrYW5hPTEyNTQwO2UucHJvcGVsbG9yPTg5ODQ7ZS5wcm9wZXJzdWJzZXQ9ODgzNDtlLnByb3BlcnN1cGVyc2V0PTg4MzU7ZS5wcm9wb3J0aW9uPTg3NTk7ZS5wcm9wb3J0aW9uYWw9ODczMztlLnBzaT05Njg7ZS5wc2ljeXJpbGxpYz0xMTM3O2UucHNpbGlwbmV1bWF0YWN5cmlsbGljY21iPTExNTg7ZS5wc3NxdWFyZT0xMzIzMjtlLnB1aGlyYWdhbmE9MTI0MDc7ZS5wdWthdGFrYW5hPTEyNTAzO2UucHZzcXVhcmU9MTMyMzY7ZS5wd3NxdWFyZT0xMzI0MjtlLnE9MTEzO2UucWFkZXZhPTIzOTI7ZS5xYWRtYWhlYnJldz0xNDQ4O2UucWFmYXJhYmljPTE2MDI7ZS5xYWZmaW5hbGFyYWJpYz02NTIzODtlLnFhZmluaXRpYWxhcmFiaWM9NjUyMzk7ZS5xYWZtZWRpYWxhcmFiaWM9NjUyNDA7ZS5xYW1hdHM9MTQ2NDtlLnFhbWF0czEwPTE0NjQ7ZS5xYW1hdHMxYT0xNDY0O2UucWFtYXRzMWM9MTQ2NDtlLnFhbWF0czI3PTE0NjQ7ZS5xYW1hdHMyOT0xNDY0O2UucWFtYXRzMzM9MTQ2NDtlLnFhbWF0c2RlPTE0NjQ7ZS5xYW1hdHNoZWJyZXc9MTQ2NDtlLnFhbWF0c25hcnJvd2hlYnJldz0xNDY0O2UucWFtYXRzcWF0YW5oZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFubmFycm93aGVicmV3PTE0NjQ7ZS5xYW1hdHNxYXRhbnF1YXJ0ZXJoZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFud2lkZWhlYnJldz0xNDY0O2UucWFtYXRzcXVhcnRlcmhlYnJldz0xNDY0O2UucWFtYXRzd2lkZWhlYnJldz0xNDY0O2UucWFybmV5cGFyYWhlYnJldz0xNDM5O2UucWJvcG9tb2ZvPTEyNTYxO2UucWNpcmNsZT05NDQwO2UucWhvb2s9NjcyO2UucW1vbm9zcGFjZT02NTM2MTtlLnFvZj0xNTExO2UucW9mZGFnZXNoPTY0MzI3O2UucW9mZGFnZXNoaGVicmV3PTY0MzI3O2UucW9maGVicmV3PTE1MTE7ZS5xcGFyZW49OTM4ODtlLnF1YXJ0ZXJub3RlPTk4MzM7ZS5xdWJ1dHM9MTQ2NztlLnF1YnV0czE4PTE0Njc7ZS5xdWJ1dHMyNT0xNDY3O2UucXVidXRzMzE9MTQ2NztlLnF1YnV0c2hlYnJldz0xNDY3O2UucXVidXRzbmFycm93aGVicmV3PTE0Njc7ZS5xdWJ1dHNxdWFydGVyaGVicmV3PTE0Njc7ZS5xdWJ1dHN3aWRlaGVicmV3PTE0Njc7ZS5xdWVzdGlvbj02MztlLnF1ZXN0aW9uYXJhYmljPTE1Njc7ZS5xdWVzdGlvbmFybWVuaWFuPTEzNzQ7ZS5xdWVzdGlvbmRvd249MTkxO2UucXVlc3Rpb25kb3duc21hbGw9NjM0MjM7ZS5xdWVzdGlvbmdyZWVrPTg5NDtlLnF1ZXN0aW9ubW9ub3NwYWNlPTY1MzExO2UucXVlc3Rpb25zbWFsbD02MzI5NTtlLnF1b3RlZGJsPTM0O2UucXVvdGVkYmxiYXNlPTgyMjI7ZS5xdW90ZWRibGxlZnQ9ODIyMDtlLnF1b3RlZGJsbW9ub3NwYWNlPTY1MjgyO2UucXVvdGVkYmxwcmltZT0xMjMxODtlLnF1b3RlZGJscHJpbWVyZXZlcnNlZD0xMjMxNztlLnF1b3RlZGJscmlnaHQ9ODIyMTtlLnF1b3RlbGVmdD04MjE2O2UucXVvdGVsZWZ0cmV2ZXJzZWQ9ODIxOTtlLnF1b3RlcmV2ZXJzZWQ9ODIxOTtlLnF1b3RlcmlnaHQ9ODIxNztlLnF1b3RlcmlnaHRuPTMyOTtlLnF1b3Rlc2luZ2xiYXNlPTgyMTg7ZS5xdW90ZXNpbmdsZT0zOTtlLnF1b3Rlc2luZ2xlbW9ub3NwYWNlPTY1Mjg3O2Uucj0xMTQ7ZS5yYWFybWVuaWFuPTE0MDQ7ZS5yYWJlbmdhbGk9MjQ4MDtlLnJhY3V0ZT0zNDE7ZS5yYWRldmE9MjM1MjtlLnJhZGljYWw9ODczMDtlLnJhZGljYWxleD02MzcxNztlLnJhZG92ZXJzc3F1YXJlPTEzMjMwO2UucmFkb3ZlcnNzcXVhcmVkc3F1YXJlPTEzMjMxO2UucmFkc3F1YXJlPTEzMjI5O2UucmFmZT0xNDcxO2UucmFmZWhlYnJldz0xNDcxO2UucmFndWphcmF0aT0yNzM2O2UucmFndXJtdWtoaT0yNjA4O2UucmFoaXJhZ2FuYT0xMjQyNTtlLnJha2F0YWthbmE9MTI1MjE7ZS5yYWthdGFrYW5haGFsZndpZHRoPTY1NDMxO2UucmFsb3dlcmRpYWdvbmFsYmVuZ2FsaT0yNTQ1O2UucmFtaWRkbGVkaWFnb25hbGJlbmdhbGk9MjU0NDtlLnJhbXNob3JuPTYxMjtlLnJhdGlvPTg3NTg7ZS5yYm9wb21vZm89MTI1NjY7ZS5yY2Fyb249MzQ1O2UucmNlZGlsbGE9MzQzO2UucmNpcmNsZT05NDQxO2UucmNvbW1hYWNjZW50PTM0MztlLnJkYmxncmF2ZT01Mjk7ZS5yZG90YWNjZW50PTc3Njk7ZS5yZG90YmVsb3c9Nzc3MTtlLnJkb3RiZWxvd21hY3Jvbj03NzczO2UucmVmZXJlbmNlbWFyaz04MjUxO2UucmVmbGV4c3Vic2V0PTg4Mzg7ZS5yZWZsZXhzdXBlcnNldD04ODM5O2UucmVnaXN0ZXJlZD0xNzQ7ZS5yZWdpc3RlcnNhbnM9NjM3MjA7ZS5yZWdpc3RlcnNlcmlmPTYzMTk0O2UucmVoYXJhYmljPTE1ODU7ZS5yZWhhcm1lbmlhbj0xNDA4O2UucmVoZmluYWxhcmFiaWM9NjUxOTg7ZS5yZWhpcmFnYW5hPTEyNDI4O2UucmVrYXRha2FuYT0xMjUyNDtlLnJla2F0YWthbmFoYWxmd2lkdGg9NjU0MzQ7ZS5yZXNoPTE1MTI7ZS5yZXNoZGFnZXNoaGVicmV3PTY0MzI4O2UucmVzaGhlYnJldz0xNTEyO2UucmV2ZXJzZWR0aWxkZT04NzY1O2UucmV2aWFoZWJyZXc9MTQzMTtlLnJldmlhbXVncmFzaGhlYnJldz0xNDMxO2UucmV2bG9naWNhbG5vdD04OTc2O2UucmZpc2hob29rPTYzODtlLnJmaXNoaG9va3JldmVyc2VkPTYzOTtlLnJoYWJlbmdhbGk9MjUyNTtlLnJoYWRldmE9MjM5NztlLnJobz05NjE7ZS5yaG9vaz02Mzc7ZS5yaG9va3R1cm5lZD02MzU7ZS5yaG9va3R1cm5lZHN1cGVyaW9yPTY5MztlLnJob3N5bWJvbGdyZWVrPTEwMDk7ZS5yaG90aWNob29rbW9kPTczNDtlLnJpZXVsYWNpcmNsZWtvcmVhbj0xMjkxMztlLnJpZXVsYXBhcmVua29yZWFuPTEyODE3O2UucmlldWxjaXJjbGVrb3JlYW49MTI4OTk7ZS5yaWV1bGhpZXVoa29yZWFuPTEyNjA4O2UucmlldWxraXllb2trb3JlYW49MTI2MDI7ZS5yaWV1bGtpeWVva3Npb3Nrb3JlYW49MTI2NDk7ZS5yaWV1bGtvcmVhbj0xMjYwMTtlLnJpZXVsbWlldW1rb3JlYW49MTI2MDM7ZS5yaWV1bHBhbnNpb3Nrb3JlYW49MTI2NTI7ZS5yaWV1bHBhcmVua29yZWFuPTEyODAzO2UucmlldWxwaGlldXBoa29yZWFuPTEyNjA3O2UucmlldWxwaWV1cGtvcmVhbj0xMjYwNDtlLnJpZXVscGlldXBzaW9za29yZWFuPTEyNjUxO2UucmlldWxzaW9za29yZWFuPTEyNjA1O2UucmlldWx0aGlldXRoa29yZWFuPTEyNjA2O2UucmlldWx0aWtldXRrb3JlYW49MTI2NTA7ZS5yaWV1bHllb3JpbmhpZXVoa29yZWFuPTEyNjUzO2UucmlnaHRhbmdsZT04NzM1O2UucmlnaHR0YWNrYmVsb3djbWI9NzkzO2UucmlnaHR0cmlhbmdsZT04ODk1O2UucmloaXJhZ2FuYT0xMjQyNjtlLnJpa2F0YWthbmE9MTI1MjI7ZS5yaWthdGFrYW5haGFsZndpZHRoPTY1NDMyO2UucmluZz03MzA7ZS5yaW5nYmVsb3djbWI9ODA1O2UucmluZ2NtYj03Nzg7ZS5yaW5naGFsZmxlZnQ9NzAzO2UucmluZ2hhbGZsZWZ0YXJtZW5pYW49MTM2OTtlLnJpbmdoYWxmbGVmdGJlbG93Y21iPTc5NjtlLnJpbmdoYWxmbGVmdGNlbnRlcmVkPTcyMztlLnJpbmdoYWxmcmlnaHQ9NzAyO2UucmluZ2hhbGZyaWdodGJlbG93Y21iPTgyNTtlLnJpbmdoYWxmcmlnaHRjZW50ZXJlZD03MjI7ZS5yaW52ZXJ0ZWRicmV2ZT01MzE7ZS5yaXR0b3J1c3F1YXJlPTEzMTM3O2UucmxpbmViZWxvdz03Nzc1O2UucmxvbmdsZWc9NjM2O2UucmxvbmdsZWd0dXJuZWQ9NjM0O2Uucm1vbm9zcGFjZT02NTM2MjtlLnJvaGlyYWdhbmE9MTI0Mjk7ZS5yb2thdGFrYW5hPTEyNTI1O2Uucm9rYXRha2FuYWhhbGZ3aWR0aD02NTQzNTtlLnJvcnVhdGhhaT0zNjE5O2UucnBhcmVuPTkzODk7ZS5ycmFiZW5nYWxpPTI1MjQ7ZS5ycmFkZXZhPTIzNTM7ZS5ycmFndXJtdWtoaT0yNjUyO2UucnJlaGFyYWJpYz0xNjgxO2UucnJlaGZpbmFsYXJhYmljPTY0Mzk3O2UucnJ2b2NhbGljYmVuZ2FsaT0yNTI4O2UucnJ2b2NhbGljZGV2YT0yNDAwO2UucnJ2b2NhbGljZ3VqYXJhdGk9Mjc4NDtlLnJydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUwMDtlLnJydm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjM3MjtlLnJydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpPTI3NTY7ZS5yc3VwZXJpb3I9NjMyMTc7ZS5ydGJsb2NrPTk2MTY7ZS5ydHVybmVkPTYzMztlLnJ0dXJuZWRzdXBlcmlvcj02OTI7ZS5ydWhpcmFnYW5hPTEyNDI3O2UucnVrYXRha2FuYT0xMjUyMztlLnJ1a2F0YWthbmFoYWxmd2lkdGg9NjU0MzM7ZS5ydXBlZW1hcmtiZW5nYWxpPTI1NDY7ZS5ydXBlZXNpZ25iZW5nYWxpPTI1NDc7ZS5ydXBpYWg9NjMxOTc7ZS5ydXRoYWk9MzYyMDtlLnJ2b2NhbGljYmVuZ2FsaT0yNDQzO2UucnZvY2FsaWNkZXZhPTIzMTU7ZS5ydm9jYWxpY2d1amFyYXRpPTI2OTk7ZS5ydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjQ5OTtlLnJ2b2NhbGljdm93ZWxzaWduZGV2YT0yMzcxO2UucnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aT0yNzU1O2Uucz0xMTU7ZS5zYWJlbmdhbGk9MjQ4ODtlLnNhY3V0ZT0zNDc7ZS5zYWN1dGVkb3RhY2NlbnQ9Nzc4MTtlLnNhZGFyYWJpYz0xNTg5O2Uuc2FkZXZhPTIzNjA7ZS5zYWRmaW5hbGFyYWJpYz02NTIxMDtlLnNhZGluaXRpYWxhcmFiaWM9NjUyMTE7ZS5zYWRtZWRpYWxhcmFiaWM9NjUyMTI7ZS5zYWd1amFyYXRpPTI3NDQ7ZS5zYWd1cm11a2hpPTI2MTY7ZS5zYWhpcmFnYW5hPTEyMzczO2Uuc2FrYXRha2FuYT0xMjQ2OTtlLnNha2F0YWthbmFoYWxmd2lkdGg9NjU0MDM7ZS5zYWxsYWxsYWhvdWFsYXloZXdhc2FsbGFtYXJhYmljPTY1MDE4O2Uuc2FtZWtoPTE1MDU7ZS5zYW1la2hkYWdlc2g9NjQzMjE7ZS5zYW1la2hkYWdlc2hoZWJyZXc9NjQzMjE7ZS5zYW1la2hoZWJyZXc9MTUwNTtlLnNhcmFhYXRoYWk9MzYzNDtlLnNhcmFhZXRoYWk9MzY0OTtlLnNhcmFhaW1haW1hbGFpdGhhaT0zNjUyO2Uuc2FyYWFpbWFpbXVhbnRoYWk9MzY1MTtlLnNhcmFhbXRoYWk9MzYzNTtlLnNhcmFhdGhhaT0zNjMyO2Uuc2FyYWV0aGFpPTM2NDg7ZS5zYXJhaWlsZWZ0dGhhaT02MzYyMjtlLnNhcmFpaXRoYWk9MzYzNztlLnNhcmFpbGVmdHRoYWk9NjM2MjE7ZS5zYXJhaXRoYWk9MzYzNjtlLnNhcmFvdGhhaT0zNjUwO2Uuc2FyYXVlZWxlZnR0aGFpPTYzNjI0O2Uuc2FyYXVlZXRoYWk9MzYzOTtlLnNhcmF1ZWxlZnR0aGFpPTYzNjIzO2Uuc2FyYXVldGhhaT0zNjM4O2Uuc2FyYXV0aGFpPTM2NDA7ZS5zYXJhdXV0aGFpPTM2NDE7ZS5zYm9wb21vZm89MTI1Njk7ZS5zY2Fyb249MzUzO2Uuc2Nhcm9uZG90YWNjZW50PTc3ODM7ZS5zY2VkaWxsYT0zNTE7ZS5zY2h3YT02MDE7ZS5zY2h3YWN5cmlsbGljPTEyNDE7ZS5zY2h3YWRpZXJlc2lzY3lyaWxsaWM9MTI0MztlLnNjaHdhaG9vaz02MDI7ZS5zY2lyY2xlPTk0NDI7ZS5zY2lyY3VtZmxleD0zNDk7ZS5zY29tbWFhY2NlbnQ9NTM3O2Uuc2RvdGFjY2VudD03Nzc3O2Uuc2RvdGJlbG93PTc3Nzk7ZS5zZG90YmVsb3dkb3RhY2NlbnQ9Nzc4NTtlLnNlYWd1bGxiZWxvd2NtYj04Mjg7ZS5zZWNvbmQ9ODI0MztlLnNlY29uZHRvbmVjaGluZXNlPTcxNDtlLnNlY3Rpb249MTY3O2Uuc2VlbmFyYWJpYz0xNTg3O2Uuc2VlbmZpbmFsYXJhYmljPTY1MjAyO2Uuc2VlbmluaXRpYWxhcmFiaWM9NjUyMDM7ZS5zZWVubWVkaWFsYXJhYmljPTY1MjA0O2Uuc2Vnb2w9MTQ2MjtlLnNlZ29sMTM9MTQ2MjtlLnNlZ29sMWY9MTQ2MjtlLnNlZ29sMmM9MTQ2MjtlLnNlZ29saGVicmV3PTE0NjI7ZS5zZWdvbG5hcnJvd2hlYnJldz0xNDYyO2Uuc2Vnb2xxdWFydGVyaGVicmV3PTE0NjI7ZS5zZWdvbHRhaGVicmV3PTE0MjY7ZS5zZWdvbHdpZGVoZWJyZXc9MTQ2MjtlLnNlaGFybWVuaWFuPTE0MDU7ZS5zZWhpcmFnYW5hPTEyMzc5O2Uuc2VrYXRha2FuYT0xMjQ3NTtlLnNla2F0YWthbmFoYWxmd2lkdGg9NjU0MDY7ZS5zZW1pY29sb249NTk7ZS5zZW1pY29sb25hcmFiaWM9MTU2MztlLnNlbWljb2xvbm1vbm9zcGFjZT02NTMwNztlLnNlbWljb2xvbnNtYWxsPTY1MTA4O2Uuc2VtaXZvaWNlZG1hcmtrYW5hPTEyNDQ0O2Uuc2VtaXZvaWNlZG1hcmtrYW5haGFsZndpZHRoPTY1NDM5O2Uuc2VudGlzcXVhcmU9MTMwOTA7ZS5zZW50b3NxdWFyZT0xMzA5MTtlLnNldmVuPTU1O2Uuc2V2ZW5hcmFiaWM9MTYzOTtlLnNldmVuYmVuZ2FsaT0yNTQxO2Uuc2V2ZW5jaXJjbGU9OTMxODtlLnNldmVuY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyODtlLnNldmVuZGV2YT0yNDEzO2Uuc2V2ZW5laWdodGhzPTg1NDI7ZS5zZXZlbmd1amFyYXRpPTI3OTc7ZS5zZXZlbmd1cm11a2hpPTI2Njk7ZS5zZXZlbmhhY2thcmFiaWM9MTYzOTtlLnNldmVuaGFuZ3pob3U9MTIzMjc7ZS5zZXZlbmlkZW9ncmFwaGljcGFyZW49MTI4Mzg7ZS5zZXZlbmluZmVyaW9yPTgzMjc7ZS5zZXZlbm1vbm9zcGFjZT02NTMwMztlLnNldmVub2xkc3R5bGU9NjMyODc7ZS5zZXZlbnBhcmVuPTkzMzg7ZS5zZXZlbnBlcmlvZD05MzU4O2Uuc2V2ZW5wZXJzaWFuPTE3ODM7ZS5zZXZlbnJvbWFuPTg1NjY7ZS5zZXZlbnN1cGVyaW9yPTgzMTE7ZS5zZXZlbnRlZW5jaXJjbGU9OTMyODtlLnNldmVudGVlbnBhcmVuPTkzNDg7ZS5zZXZlbnRlZW5wZXJpb2Q9OTM2ODtlLnNldmVudGhhaT0zNjcxO2Uuc2Z0aHlwaGVuPTE3MztlLnNoYWFybWVuaWFuPTEzOTk7ZS5zaGFiZW5nYWxpPTI0ODY7ZS5zaGFjeXJpbGxpYz0xMDk2O2Uuc2hhZGRhYXJhYmljPTE2MTc7ZS5zaGFkZGFkYW1tYWFyYWJpYz02NDYwOTtlLnNoYWRkYWRhbW1hdGFuYXJhYmljPTY0NjA2O2Uuc2hhZGRhZmF0aGFhcmFiaWM9NjQ2MDg7ZS5zaGFkZGFrYXNyYWFyYWJpYz02NDYxMDtlLnNoYWRkYWthc3JhdGFuYXJhYmljPTY0NjA3O2Uuc2hhZGU9OTYxODtlLnNoYWRlZGFyaz05NjE5O2Uuc2hhZGVsaWdodD05NjE3O2Uuc2hhZGVtZWRpdW09OTYxODtlLnNoYWRldmE9MjM1ODtlLnNoYWd1amFyYXRpPTI3NDI7ZS5zaGFndXJtdWtoaT0yNjE0O2Uuc2hhbHNoZWxldGhlYnJldz0xNDI3O2Uuc2hib3BvbW9mbz0xMjU2NTtlLnNoY2hhY3lyaWxsaWM9MTA5NztlLnNoZWVuYXJhYmljPTE1ODg7ZS5zaGVlbmZpbmFsYXJhYmljPTY1MjA2O2Uuc2hlZW5pbml0aWFsYXJhYmljPTY1MjA3O2Uuc2hlZW5tZWRpYWxhcmFiaWM9NjUyMDg7ZS5zaGVpY29wdGljPTk5NTtlLnNoZXFlbD04MzYyO2Uuc2hlcWVsaGVicmV3PTgzNjI7ZS5zaGV2YT0xNDU2O2Uuc2hldmExMTU9MTQ1NjtlLnNoZXZhMTU9MTQ1NjtlLnNoZXZhMjI9MTQ1NjtlLnNoZXZhMmU9MTQ1NjtlLnNoZXZhaGVicmV3PTE0NTY7ZS5zaGV2YW5hcnJvd2hlYnJldz0xNDU2O2Uuc2hldmFxdWFydGVyaGVicmV3PTE0NTY7ZS5zaGV2YXdpZGVoZWJyZXc9MTQ1NjtlLnNoaGFjeXJpbGxpYz0xMjExO2Uuc2hpbWFjb3B0aWM9MTAwNTtlLnNoaW49MTUxMztlLnNoaW5kYWdlc2g9NjQzMjk7ZS5zaGluZGFnZXNoaGVicmV3PTY0MzI5O2Uuc2hpbmRhZ2VzaHNoaW5kb3Q9NjQzMDA7ZS5zaGluZGFnZXNoc2hpbmRvdGhlYnJldz02NDMwMDtlLnNoaW5kYWdlc2hzaW5kb3Q9NjQzMDE7ZS5zaGluZGFnZXNoc2luZG90aGVicmV3PTY0MzAxO2Uuc2hpbmRvdGhlYnJldz0xNDczO2Uuc2hpbmhlYnJldz0xNTEzO2Uuc2hpbnNoaW5kb3Q9NjQyOTg7ZS5zaGluc2hpbmRvdGhlYnJldz02NDI5ODtlLnNoaW5zaW5kb3Q9NjQyOTk7ZS5zaGluc2luZG90aGVicmV3PTY0Mjk5O2Uuc2hvb2s9NjQyO2Uuc2lnbWE9OTYzO2Uuc2lnbWExPTk2MjtlLnNpZ21hZmluYWw9OTYyO2Uuc2lnbWFsdW5hdGVzeW1ib2xncmVlaz0xMDEwO2Uuc2loaXJhZ2FuYT0xMjM3NTtlLnNpa2F0YWthbmE9MTI0NzE7ZS5zaWthdGFrYW5haGFsZndpZHRoPTY1NDA0O2Uuc2lsdXFoZWJyZXc9MTQ2OTtlLnNpbHVxbGVmdGhlYnJldz0xNDY5O2Uuc2ltaWxhcj04NzY0O2Uuc2luZG90aGVicmV3PTE0NzQ7ZS5zaW9zYWNpcmNsZWtvcmVhbj0xMjkxNjtlLnNpb3NhcGFyZW5rb3JlYW49MTI4MjA7ZS5zaW9zY2lldWNrb3JlYW49MTI2NzA7ZS5zaW9zY2lyY2xla29yZWFuPTEyOTAyO2Uuc2lvc2tpeWVva2tvcmVhbj0xMjY2NjtlLnNpb3Nrb3JlYW49MTI2MTM7ZS5zaW9zbmlldW5rb3JlYW49MTI2Njc7ZS5zaW9zcGFyZW5rb3JlYW49MTI4MDY7ZS5zaW9zcGlldXBrb3JlYW49MTI2Njk7ZS5zaW9zdGlrZXV0a29yZWFuPTEyNjY4O2Uuc2l4PTU0O2Uuc2l4YXJhYmljPTE2Mzg7ZS5zaXhiZW5nYWxpPTI1NDA7ZS5zaXhjaXJjbGU9OTMxNztlLnNpeGNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjc7ZS5zaXhkZXZhPTI0MTI7ZS5zaXhndWphcmF0aT0yNzk2O2Uuc2l4Z3VybXVraGk9MjY2ODtlLnNpeGhhY2thcmFiaWM9MTYzODtlLnNpeGhhbmd6aG91PTEyMzI2O2Uuc2l4aWRlb2dyYXBoaWNwYXJlbj0xMjgzNztlLnNpeGluZmVyaW9yPTgzMjY7ZS5zaXhtb25vc3BhY2U9NjUzMDI7ZS5zaXhvbGRzdHlsZT02MzI4NjtlLnNpeHBhcmVuPTkzMzc7ZS5zaXhwZXJpb2Q9OTM1NztlLnNpeHBlcnNpYW49MTc4MjtlLnNpeHJvbWFuPTg1NjU7ZS5zaXhzdXBlcmlvcj04MzEwO2Uuc2l4dGVlbmNpcmNsZT05MzI3O2Uuc2l4dGVlbmN1cnJlbmN5ZGVub21pbmF0b3JiZW5nYWxpPTI1NTM7ZS5zaXh0ZWVucGFyZW49OTM0NztlLnNpeHRlZW5wZXJpb2Q9OTM2NztlLnNpeHRoYWk9MzY3MDtlLnNsYXNoPTQ3O2Uuc2xhc2htb25vc3BhY2U9NjUyOTU7ZS5zbG9uZz0zODM7ZS5zbG9uZ2RvdGFjY2VudD03ODM1O2Uuc21pbGVmYWNlPTk3ODY7ZS5zbW9ub3NwYWNlPTY1MzYzO2Uuc29mcGFzdXFoZWJyZXc9MTQ3NTtlLnNvZnRoeXBoZW49MTczO2Uuc29mdHNpZ25jeXJpbGxpYz0xMTAwO2Uuc29oaXJhZ2FuYT0xMjM4MTtlLnNva2F0YWthbmE9MTI0Nzc7ZS5zb2thdGFrYW5haGFsZndpZHRoPTY1NDA3O2Uuc29saWR1c2xvbmdvdmVybGF5Y21iPTgyNDtlLnNvbGlkdXNzaG9ydG92ZXJsYXljbWI9ODIzO2Uuc29ydXNpdGhhaT0zNjI1O2Uuc29zYWxhdGhhaT0zNjI0O2Uuc29zb3RoYWk9MzU5NTtlLnNvc3VhdGhhaT0zNjI2O2Uuc3BhY2U9MzI7ZS5zcGFjZWhhY2thcmFiaWM9MzI7ZS5zcGFkZT05ODI0O2Uuc3BhZGVzdWl0YmxhY2s9OTgyNDtlLnNwYWRlc3VpdHdoaXRlPTk4Mjg7ZS5zcGFyZW49OTM5MDtlLnNxdWFyZWJlbG93Y21iPTgyNztlLnNxdWFyZWNjPTEzMjUyO2Uuc3F1YXJlY209MTMyMTM7ZS5zcXVhcmVkaWFnb25hbGNyb3NzaGF0Y2hmaWxsPTk2NDE7ZS5zcXVhcmVob3Jpem9udGFsZmlsbD05NjM2O2Uuc3F1YXJla2c9MTMxOTk7ZS5zcXVhcmVrbT0xMzIxNDtlLnNxdWFyZWttY2FwaXRhbD0xMzI2MjtlLnNxdWFyZWxuPTEzMjY1O2Uuc3F1YXJlbG9nPTEzMjY2O2Uuc3F1YXJlbWc9MTMxOTg7ZS5zcXVhcmVtaWw9MTMyNjk7ZS5zcXVhcmVtbT0xMzIxMjtlLnNxdWFyZW1zcXVhcmVkPTEzMjE3O2Uuc3F1YXJlb3J0aG9nb25hbGNyb3NzaGF0Y2hmaWxsPTk2Mzg7ZS5zcXVhcmV1cHBlcmxlZnR0b2xvd2VycmlnaHRmaWxsPTk2Mzk7ZS5zcXVhcmV1cHBlcnJpZ2h0dG9sb3dlcmxlZnRmaWxsPTk2NDA7ZS5zcXVhcmV2ZXJ0aWNhbGZpbGw9OTYzNztlLnNxdWFyZXdoaXRld2l0aHNtYWxsYmxhY2s9OTYzNTtlLnNyc3F1YXJlPTEzMjc1O2Uuc3NhYmVuZ2FsaT0yNDg3O2Uuc3NhZGV2YT0yMzU5O2Uuc3NhZ3VqYXJhdGk9Mjc0MztlLnNzYW5nY2lldWNrb3JlYW49MTI2MTc7ZS5zc2FuZ2hpZXVoa29yZWFuPTEyNjc3O2Uuc3NhbmdpZXVuZ2tvcmVhbj0xMjY3MjtlLnNzYW5na2l5ZW9ra29yZWFuPTEyNTk0O2Uuc3NhbmduaWV1bmtvcmVhbj0xMjY0NTtlLnNzYW5ncGlldXBrb3JlYW49MTI2MTE7ZS5zc2FuZ3Npb3Nrb3JlYW49MTI2MTQ7ZS5zc2FuZ3Rpa2V1dGtvcmVhbj0xMjYwMDtlLnNzdXBlcmlvcj02MzIxODtlLnN0ZXJsaW5nPTE2MztlLnN0ZXJsaW5nbW9ub3NwYWNlPTY1NTA1O2Uuc3Ryb2tlbG9uZ292ZXJsYXljbWI9ODIyO2Uuc3Ryb2tlc2hvcnRvdmVybGF5Y21iPTgyMTtlLnN1YnNldD04ODM0O2Uuc3Vic2V0bm90ZXF1YWw9ODg0MjtlLnN1YnNldG9yZXF1YWw9ODgzODtlLnN1Y2NlZWRzPTg4Mjc7ZS5zdWNodGhhdD04NzE1O2Uuc3VoaXJhZ2FuYT0xMjM3NztlLnN1a2F0YWthbmE9MTI0NzM7ZS5zdWthdGFrYW5haGFsZndpZHRoPTY1NDA1O2Uuc3VrdW5hcmFiaWM9MTYxODtlLnN1bW1hdGlvbj04NzIxO2Uuc3VuPTk3ODg7ZS5zdXBlcnNldD04ODM1O2Uuc3VwZXJzZXRub3RlcXVhbD04ODQzO2Uuc3VwZXJzZXRvcmVxdWFsPTg4Mzk7ZS5zdnNxdWFyZT0xMzI3NjtlLnN5b3V3YWVyYXNxdWFyZT0xMzE4MDtlLnQ9MTE2O2UudGFiZW5nYWxpPTI0Njg7ZS50YWNrZG93bj04ODY4O2UudGFja2xlZnQ9ODg2NztlLnRhZGV2YT0yMzQwO2UudGFndWphcmF0aT0yNzI0O2UudGFndXJtdWtoaT0yNTk2O2UudGFoYXJhYmljPTE1OTE7ZS50YWhmaW5hbGFyYWJpYz02NTIxODtlLnRhaGluaXRpYWxhcmFiaWM9NjUyMTk7ZS50YWhpcmFnYW5hPTEyMzgzO2UudGFobWVkaWFsYXJhYmljPTY1MjIwO2UudGFpc3lvdWVyYXNxdWFyZT0xMzE4MTtlLnRha2F0YWthbmE9MTI0Nzk7ZS50YWthdGFrYW5haGFsZndpZHRoPTY1NDA4O2UudGF0d2VlbGFyYWJpYz0xNjAwO2UudGF1PTk2NDtlLnRhdj0xNTE0O2UudGF2ZGFnZXM9NjQzMzA7ZS50YXZkYWdlc2g9NjQzMzA7ZS50YXZkYWdlc2hoZWJyZXc9NjQzMzA7ZS50YXZoZWJyZXc9MTUxNDtlLnRiYXI9MzU5O2UudGJvcG9tb2ZvPTEyNTU0O2UudGNhcm9uPTM1NztlLnRjY3VybD02ODA7ZS50Y2VkaWxsYT0zNTU7ZS50Y2hlaGFyYWJpYz0xNjcwO2UudGNoZWhmaW5hbGFyYWJpYz02NDM3OTtlLnRjaGVoaW5pdGlhbGFyYWJpYz02NDM4MDtlLnRjaGVobWVkaWFsYXJhYmljPTY0MzgxO2UudGNpcmNsZT05NDQzO2UudGNpcmN1bWZsZXhiZWxvdz03NzkzO2UudGNvbW1hYWNjZW50PTM1NTtlLnRkaWVyZXNpcz03ODMxO2UudGRvdGFjY2VudD03Nzg3O2UudGRvdGJlbG93PTc3ODk7ZS50ZWN5cmlsbGljPTEwOTA7ZS50ZWRlc2NlbmRlcmN5cmlsbGljPTExOTc7ZS50ZWhhcmFiaWM9MTU3ODtlLnRlaGZpbmFsYXJhYmljPTY1MTc0O2UudGVoaGFoaW5pdGlhbGFyYWJpYz02NDY3NDtlLnRlaGhhaGlzb2xhdGVkYXJhYmljPTY0NTI0O2UudGVoaW5pdGlhbGFyYWJpYz02NTE3NTtlLnRlaGlyYWdhbmE9MTIzOTA7ZS50ZWhqZWVtaW5pdGlhbGFyYWJpYz02NDY3MztlLnRlaGplZW1pc29sYXRlZGFyYWJpYz02NDUyMztlLnRlaG1hcmJ1dGFhcmFiaWM9MTU3NztlLnRlaG1hcmJ1dGFmaW5hbGFyYWJpYz02NTE3MjtlLnRlaG1lZGlhbGFyYWJpYz02NTE3NjtlLnRlaG1lZW1pbml0aWFsYXJhYmljPTY0Njc2O2UudGVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTI2O2UudGVobm9vbmZpbmFsYXJhYmljPTY0NjI3O2UudGVrYXRha2FuYT0xMjQ4NjtlLnRla2F0YWthbmFoYWxmd2lkdGg9NjU0MTE7ZS50ZWxlcGhvbmU9ODQ4MTtlLnRlbGVwaG9uZWJsYWNrPTk3NDI7ZS50ZWxpc2hhZ2Vkb2xhaGVicmV3PTE0NDA7ZS50ZWxpc2hhcWV0YW5haGVicmV3PTE0NDk7ZS50ZW5jaXJjbGU9OTMyMTtlLnRlbmlkZW9ncmFwaGljcGFyZW49MTI4NDE7ZS50ZW5wYXJlbj05MzQxO2UudGVucGVyaW9kPTkzNjE7ZS50ZW5yb21hbj04NTY5O2UudGVzaD02Nzk7ZS50ZXQ9MTQ5NjtlLnRldGRhZ2VzaD02NDMxMjtlLnRldGRhZ2VzaGhlYnJldz02NDMxMjtlLnRldGhlYnJldz0xNDk2O2UudGV0c2VjeXJpbGxpYz0xMjA1O2UudGV2aXJoZWJyZXc9MTQzNTtlLnRldmlybGVmdGhlYnJldz0xNDM1O2UudGhhYmVuZ2FsaT0yNDY5O2UudGhhZGV2YT0yMzQxO2UudGhhZ3VqYXJhdGk9MjcyNTtlLnRoYWd1cm11a2hpPTI1OTc7ZS50aGFsYXJhYmljPTE1ODQ7ZS50aGFsZmluYWxhcmFiaWM9NjUxOTY7ZS50aGFudGhha2hhdGxvd2xlZnR0aGFpPTYzNjQwO2UudGhhbnRoYWtoYXRsb3dyaWdodHRoYWk9NjM2Mzk7ZS50aGFudGhha2hhdHRoYWk9MzY2MDtlLnRoYW50aGFraGF0dXBwZXJsZWZ0dGhhaT02MzYzODtlLnRoZWhhcmFiaWM9MTU3OTtlLnRoZWhmaW5hbGFyYWJpYz02NTE3ODtlLnRoZWhpbml0aWFsYXJhYmljPTY1MTc5O2UudGhlaG1lZGlhbGFyYWJpYz02NTE4MDtlLnRoZXJlZXhpc3RzPTg3MDc7ZS50aGVyZWZvcmU9ODc1NjtlLnRoZXRhPTk1MjtlLnRoZXRhMT05Nzc7ZS50aGV0YXN5bWJvbGdyZWVrPTk3NztlLnRoaWV1dGhhY2lyY2xla29yZWFuPTEyOTIxO2UudGhpZXV0aGFwYXJlbmtvcmVhbj0xMjgyNTtlLnRoaWV1dGhjaXJjbGVrb3JlYW49MTI5MDc7ZS50aGlldXRoa29yZWFuPTEyNjIwO2UudGhpZXV0aHBhcmVua29yZWFuPTEyODExO2UudGhpcnRlZW5jaXJjbGU9OTMyNDtlLnRoaXJ0ZWVucGFyZW49OTM0NDtlLnRoaXJ0ZWVucGVyaW9kPTkzNjQ7ZS50aG9uYW5nbW9udGhvdGhhaT0zNjAxO2UudGhvb2s9NDI5O2UudGhvcGh1dGhhb3RoYWk9MzYwMjtlLnRob3JuPTI1NDtlLnRob3RoYWhhbnRoYWk9MzYwNztlLnRob3RoYW50aGFpPTM2MDA7ZS50aG90aG9uZ3RoYWk9MzYwODtlLnRob3RodW5ndGhhaT0zNjA2O2UudGhvdXNhbmRjeXJpbGxpYz0xMTU0O2UudGhvdXNhbmRzc2VwYXJhdG9yYXJhYmljPTE2NDQ7ZS50aG91c2FuZHNzZXBhcmF0b3JwZXJzaWFuPTE2NDQ7ZS50aHJlZT01MTtlLnRocmVlYXJhYmljPTE2MzU7ZS50aHJlZWJlbmdhbGk9MjUzNztlLnRocmVlY2lyY2xlPTkzMTQ7ZS50aHJlZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjQ7ZS50aHJlZWRldmE9MjQwOTtlLnRocmVlZWlnaHRocz04NTQwO2UudGhyZWVndWphcmF0aT0yNzkzO2UudGhyZWVndXJtdWtoaT0yNjY1O2UudGhyZWVoYWNrYXJhYmljPTE2MzU7ZS50aHJlZWhhbmd6aG91PTEyMzIzO2UudGhyZWVpZGVvZ3JhcGhpY3BhcmVuPTEyODM0O2UudGhyZWVpbmZlcmlvcj04MzIzO2UudGhyZWVtb25vc3BhY2U9NjUyOTk7ZS50aHJlZW51bWVyYXRvcmJlbmdhbGk9MjU1MDtlLnRocmVlb2xkc3R5bGU9NjMyODM7ZS50aHJlZXBhcmVuPTkzMzQ7ZS50aHJlZXBlcmlvZD05MzU0O2UudGhyZWVwZXJzaWFuPTE3Nzk7ZS50aHJlZXF1YXJ0ZXJzPTE5MDtlLnRocmVlcXVhcnRlcnNlbWRhc2g9NjMxOTg7ZS50aHJlZXJvbWFuPTg1NjI7ZS50aHJlZXN1cGVyaW9yPTE3OTtlLnRocmVldGhhaT0zNjY3O2UudGh6c3F1YXJlPTEzMjA0O2UudGloaXJhZ2FuYT0xMjM4NTtlLnRpa2F0YWthbmE9MTI0ODE7ZS50aWthdGFrYW5haGFsZndpZHRoPTY1NDA5O2UudGlrZXV0YWNpcmNsZWtvcmVhbj0xMjkxMjtlLnRpa2V1dGFwYXJlbmtvcmVhbj0xMjgxNjtlLnRpa2V1dGNpcmNsZWtvcmVhbj0xMjg5ODtlLnRpa2V1dGtvcmVhbj0xMjU5OTtlLnRpa2V1dHBhcmVua29yZWFuPTEyODAyO2UudGlsZGU9NzMyO2UudGlsZGViZWxvd2NtYj04MTY7ZS50aWxkZWNtYj03NzE7ZS50aWxkZWNvbWI9NzcxO2UudGlsZGVkb3VibGVjbWI9ODY0O2UudGlsZGVvcGVyYXRvcj04NzY0O2UudGlsZGVvdmVybGF5Y21iPTgyMDtlLnRpbGRldmVydGljYWxjbWI9ODMwO2UudGltZXNjaXJjbGU9ODg1NTtlLnRpcGVoYWhlYnJldz0xNDMwO2UudGlwZWhhbGVmdGhlYnJldz0xNDMwO2UudGlwcGlndXJtdWtoaT0yNjcyO2UudGl0bG9jeXJpbGxpY2NtYj0xMTU1O2UudGl3bmFybWVuaWFuPTE0MDc7ZS50bGluZWJlbG93PTc3OTE7ZS50bW9ub3NwYWNlPTY1MzY0O2UudG9hcm1lbmlhbj0xMzg1O2UudG9oaXJhZ2FuYT0xMjM5MjtlLnRva2F0YWthbmE9MTI0ODg7ZS50b2thdGFrYW5haGFsZndpZHRoPTY1NDEyO2UudG9uZWJhcmV4dHJhaGlnaG1vZD03NDE7ZS50b25lYmFyZXh0cmFsb3dtb2Q9NzQ1O2UudG9uZWJhcmhpZ2htb2Q9NzQyO2UudG9uZWJhcmxvd21vZD03NDQ7ZS50b25lYmFybWlkbW9kPTc0MztlLnRvbmVmaXZlPTQ0NTtlLnRvbmVzaXg9Mzg5O2UudG9uZXR3bz00MjQ7ZS50b25vcz05MDA7ZS50b25zcXVhcmU9MTMwOTU7ZS50b3BhdGFrdGhhaT0zNTk5O2UudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0PTEyMzA4O2UudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0c21hbGw9NjUxMTc7ZS50b3J0b2lzZXNoZWxsYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MTtlLnRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQ9MTIzMDk7ZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0c21hbGw9NjUxMTg7ZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwODI7ZS50b3Rhb3RoYWk9MzYwNTtlLnRwYWxhdGFsaG9vaz00Mjc7ZS50cGFyZW49OTM5MTtlLnRyYWRlbWFyaz04NDgyO2UudHJhZGVtYXJrc2Fucz02MzcyMjtlLnRyYWRlbWFya3NlcmlmPTYzMTk1O2UudHJldHJvZmxleGhvb2s9NjQ4O2UudHJpYWdkbj05NjYwO2UudHJpYWdsZj05NjY4O2UudHJpYWdydD05NjU4O2UudHJpYWd1cD05NjUwO2UudHM9Njc4O2UudHNhZGk9MTUxMDtlLnRzYWRpZGFnZXNoPTY0MzI2O2UudHNhZGlkYWdlc2hoZWJyZXc9NjQzMjY7ZS50c2FkaWhlYnJldz0xNTEwO2UudHNlY3lyaWxsaWM9MTA5NDtlLnRzZXJlPTE0NjE7ZS50c2VyZTEyPTE0NjE7ZS50c2VyZTFlPTE0NjE7ZS50c2VyZTJiPTE0NjE7ZS50c2VyZWhlYnJldz0xNDYxO2UudHNlcmVuYXJyb3doZWJyZXc9MTQ2MTtlLnRzZXJlcXVhcnRlcmhlYnJldz0xNDYxO2UudHNlcmV3aWRlaGVicmV3PTE0NjE7ZS50c2hlY3lyaWxsaWM9MTExNTtlLnRzdXBlcmlvcj02MzIxOTtlLnR0YWJlbmdhbGk9MjQ2MztlLnR0YWRldmE9MjMzNTtlLnR0YWd1amFyYXRpPTI3MTk7ZS50dGFndXJtdWtoaT0yNTkxO2UudHRlaGFyYWJpYz0xNjU3O2UudHRlaGZpbmFsYXJhYmljPTY0MzU5O2UudHRlaGluaXRpYWxhcmFiaWM9NjQzNjA7ZS50dGVobWVkaWFsYXJhYmljPTY0MzYxO2UudHRoYWJlbmdhbGk9MjQ2NDtlLnR0aGFkZXZhPTIzMzY7ZS50dGhhZ3VqYXJhdGk9MjcyMDtlLnR0aGFndXJtdWtoaT0yNTkyO2UudHR1cm5lZD02NDc7ZS50dWhpcmFnYW5hPTEyMzg4O2UudHVrYXRha2FuYT0xMjQ4NDtlLnR1a2F0YWthbmFoYWxmd2lkdGg9NjU0MTA7ZS50dXNtYWxsaGlyYWdhbmE9MTIzODc7ZS50dXNtYWxsa2F0YWthbmE9MTI0ODM7ZS50dXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzOTE7ZS50d2VsdmVjaXJjbGU9OTMyMztlLnR3ZWx2ZXBhcmVuPTkzNDM7ZS50d2VsdmVwZXJpb2Q9OTM2MztlLnR3ZWx2ZXJvbWFuPTg1NzE7ZS50d2VudHljaXJjbGU9OTMzMTtlLnR3ZW50eWhhbmd6aG91PTIxMzE2O2UudHdlbnR5cGFyZW49OTM1MTtlLnR3ZW50eXBlcmlvZD05MzcxO2UudHdvPTUwO2UudHdvYXJhYmljPTE2MzQ7ZS50d29iZW5nYWxpPTI1MzY7ZS50d29jaXJjbGU9OTMxMztlLnR3b2NpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjM7ZS50d29kZXZhPTI0MDg7ZS50d29kb3RlbmxlYWRlcj04MjI5O2UudHdvZG90bGVhZGVyPTgyMjk7ZS50d29kb3RsZWFkZXJ2ZXJ0aWNhbD02NTA3MjtlLnR3b2d1amFyYXRpPTI3OTI7ZS50d29ndXJtdWtoaT0yNjY0O2UudHdvaGFja2FyYWJpYz0xNjM0O2UudHdvaGFuZ3pob3U9MTIzMjI7ZS50d29pZGVvZ3JhcGhpY3BhcmVuPTEyODMzO2UudHdvaW5mZXJpb3I9ODMyMjtlLnR3b21vbm9zcGFjZT02NTI5ODtlLnR3b251bWVyYXRvcmJlbmdhbGk9MjU0OTtlLnR3b29sZHN0eWxlPTYzMjgyO2UudHdvcGFyZW49OTMzMztlLnR3b3BlcmlvZD05MzUzO2UudHdvcGVyc2lhbj0xNzc4O2UudHdvcm9tYW49ODU2MTtlLnR3b3N0cm9rZT00NDM7ZS50d29zdXBlcmlvcj0xNzg7ZS50d290aGFpPTM2NjY7ZS50d290aGlyZHM9ODUzMjtlLnU9MTE3O2UudWFjdXRlPTI1MDtlLnViYXI9NjQ5O2UudWJlbmdhbGk9MjQ0MTtlLnVib3BvbW9mbz0xMjU4NDtlLnVicmV2ZT0zNjU7ZS51Y2Fyb249NDY4O2UudWNpcmNsZT05NDQ0O2UudWNpcmN1bWZsZXg9MjUxO2UudWNpcmN1bWZsZXhiZWxvdz03Nzk5O2UudWN5cmlsbGljPTEwOTE7ZS51ZGF0dGFkZXZhPTIzODU7ZS51ZGJsYWN1dGU9MzY5O2UudWRibGdyYXZlPTUzMztlLnVkZXZhPTIzMTM7ZS51ZGllcmVzaXM9MjUyO2UudWRpZXJlc2lzYWN1dGU9NDcyO2UudWRpZXJlc2lzYmVsb3c9Nzc5NTtlLnVkaWVyZXNpc2Nhcm9uPTQ3NDtlLnVkaWVyZXNpc2N5cmlsbGljPTEyNjU7ZS51ZGllcmVzaXNncmF2ZT00NzY7ZS51ZGllcmVzaXNtYWNyb249NDcwO2UudWRvdGJlbG93PTc5MDk7ZS51Z3JhdmU9MjQ5O2UudWd1amFyYXRpPTI2OTc7ZS51Z3VybXVraGk9MjU2OTtlLnVoaXJhZ2FuYT0xMjM1ODtlLnVob29rYWJvdmU9NzkxMTtlLnVob3JuPTQzMjtlLnVob3JuYWN1dGU9NzkxMztlLnVob3JuZG90YmVsb3c9NzkyMTtlLnVob3JuZ3JhdmU9NzkxNTtlLnVob3JuaG9va2Fib3ZlPTc5MTc7ZS51aG9ybnRpbGRlPTc5MTk7ZS51aHVuZ2FydW1sYXV0PTM2OTtlLnVodW5nYXJ1bWxhdXRjeXJpbGxpYz0xMjY3O2UudWludmVydGVkYnJldmU9NTM1O2UudWthdGFrYW5hPTEyNDU0O2UudWthdGFrYW5haGFsZndpZHRoPTY1Mzk1O2UudWtjeXJpbGxpYz0xMTQ1O2UudWtvcmVhbj0xMjYzNjtlLnVtYWNyb249MzYzO2UudW1hY3JvbmN5cmlsbGljPTEyNjM7ZS51bWFjcm9uZGllcmVzaXM9NzgwMztlLnVtYXRyYWd1cm11a2hpPTI2MjU7ZS51bW9ub3NwYWNlPTY1MzY1O2UudW5kZXJzY29yZT05NTtlLnVuZGVyc2NvcmVkYmw9ODIxNTtlLnVuZGVyc2NvcmVtb25vc3BhY2U9NjUzNDM7ZS51bmRlcnNjb3JldmVydGljYWw9NjUwNzU7ZS51bmRlcnNjb3Jld2F2eT02NTEwMztlLnVuaW9uPTg3NDY7ZS51bml2ZXJzYWw9ODcwNDtlLnVvZ29uZWs9MzcxO2UudXBhcmVuPTkzOTI7ZS51cGJsb2NrPTk2MDA7ZS51cHBlcmRvdGhlYnJldz0xNDc2O2UudXBzaWxvbj05NjU7ZS51cHNpbG9uZGllcmVzaXM9OTcxO2UudXBzaWxvbmRpZXJlc2lzdG9ub3M9OTQ0O2UudXBzaWxvbmxhdGluPTY1MDtlLnVwc2lsb250b25vcz05NzM7ZS51cHRhY2tiZWxvd2NtYj03OTc7ZS51cHRhY2ttb2Q9NzI0O2UudXJhZ3VybXVraGk9MjY3NTtlLnVyaW5nPTM2NztlLnVzaG9ydGN5cmlsbGljPTExMTg7ZS51c21hbGxoaXJhZ2FuYT0xMjM1NztlLnVzbWFsbGthdGFrYW5hPTEyNDUzO2UudXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODU7ZS51c3RyYWlnaHRjeXJpbGxpYz0xMTk5O2UudXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWM9MTIwMTtlLnV0aWxkZT0zNjE7ZS51dGlsZGVhY3V0ZT03ODAxO2UudXRpbGRlYmVsb3c9Nzc5NztlLnV1YmVuZ2FsaT0yNDQyO2UudXVkZXZhPTIzMTQ7ZS51dWd1amFyYXRpPTI2OTg7ZS51dWd1cm11a2hpPTI1NzA7ZS51dW1hdHJhZ3VybXVraGk9MjYyNjtlLnV1dm93ZWxzaWduYmVuZ2FsaT0yNDk4O2UudXV2b3dlbHNpZ25kZXZhPTIzNzA7ZS51dXZvd2Vsc2lnbmd1amFyYXRpPTI3NTQ7ZS51dm93ZWxzaWduYmVuZ2FsaT0yNDk3O2UudXZvd2Vsc2lnbmRldmE9MjM2OTtlLnV2b3dlbHNpZ25ndWphcmF0aT0yNzUzO2Uudj0xMTg7ZS52YWRldmE9MjM1NztlLnZhZ3VqYXJhdGk9Mjc0MTtlLnZhZ3VybXVraGk9MjYxMztlLnZha2F0YWthbmE9MTI1MzU7ZS52YXY9MTQ5MztlLnZhdmRhZ2VzaD02NDMwOTtlLnZhdmRhZ2VzaDY1PTY0MzA5O2UudmF2ZGFnZXNoaGVicmV3PTY0MzA5O2UudmF2aGVicmV3PTE0OTM7ZS52YXZob2xhbT02NDMzMTtlLnZhdmhvbGFtaGVicmV3PTY0MzMxO2UudmF2dmF2aGVicmV3PTE1MjA7ZS52YXZ5b2RoZWJyZXc9MTUyMTtlLnZjaXJjbGU9OTQ0NTtlLnZkb3RiZWxvdz03ODA3O2UudmVjeXJpbGxpYz0xMDc0O2UudmVoYXJhYmljPTE3MDA7ZS52ZWhmaW5hbGFyYWJpYz02NDM2MztlLnZlaGluaXRpYWxhcmFiaWM9NjQzNjQ7ZS52ZWhtZWRpYWxhcmFiaWM9NjQzNjU7ZS52ZWthdGFrYW5hPTEyNTM3O2UudmVudXM9OTc5MjtlLnZlcnRpY2FsYmFyPTEyNDtlLnZlcnRpY2FsbGluZWFib3ZlY21iPTc4MTtlLnZlcnRpY2FsbGluZWJlbG93Y21iPTgwOTtlLnZlcnRpY2FsbGluZWxvd21vZD03MTY7ZS52ZXJ0aWNhbGxpbmVtb2Q9NzEyO2UudmV3YXJtZW5pYW49MTQwNjtlLnZob29rPTY1MTtlLnZpa2F0YWthbmE9MTI1MzY7ZS52aXJhbWFiZW5nYWxpPTI1MDk7ZS52aXJhbWFkZXZhPTIzODE7ZS52aXJhbWFndWphcmF0aT0yNzY1O2UudmlzYXJnYWJlbmdhbGk9MjQzNTtlLnZpc2FyZ2FkZXZhPTIzMDc7ZS52aXNhcmdhZ3VqYXJhdGk9MjY5MTtlLnZtb25vc3BhY2U9NjUzNjY7ZS52b2FybWVuaWFuPTE0MDA7ZS52b2ljZWRpdGVyYXRpb25oaXJhZ2FuYT0xMjQ0NjtlLnZvaWNlZGl0ZXJhdGlvbmthdGFrYW5hPTEyNTQyO2Uudm9pY2VkbWFya2thbmE9MTI0NDM7ZS52b2ljZWRtYXJra2FuYWhhbGZ3aWR0aD02NTQzODtlLnZva2F0YWthbmE9MTI1Mzg7ZS52cGFyZW49OTM5MztlLnZ0aWxkZT03ODA1O2UudnR1cm5lZD02NTI7ZS52dWhpcmFnYW5hPTEyNDM2O2UudnVrYXRha2FuYT0xMjUzMjtlLnc9MTE5O2Uud2FjdXRlPTc4MTE7ZS53YWVrb3JlYW49MTI2MzM7ZS53YWhpcmFnYW5hPTEyNDMxO2Uud2FrYXRha2FuYT0xMjUyNztlLndha2F0YWthbmFoYWxmd2lkdGg9NjU0MzY7ZS53YWtvcmVhbj0xMjYzMjtlLndhc21hbGxoaXJhZ2FuYT0xMjQzMDtlLndhc21hbGxrYXRha2FuYT0xMjUyNjtlLndhdHRvc3F1YXJlPTEzMTQzO2Uud2F2ZWRhc2g9MTIzMTY7ZS53YXZ5dW5kZXJzY29yZXZlcnRpY2FsPTY1MDc2O2Uud2F3YXJhYmljPTE2MDg7ZS53YXdmaW5hbGFyYWJpYz02NTI2MjtlLndhd2hhbXphYWJvdmVhcmFiaWM9MTU3MjtlLndhd2hhbXphYWJvdmVmaW5hbGFyYWJpYz02NTE1ODtlLndic3F1YXJlPTEzMjc3O2Uud2NpcmNsZT05NDQ2O2Uud2NpcmN1bWZsZXg9MzczO2Uud2RpZXJlc2lzPTc4MTM7ZS53ZG90YWNjZW50PTc4MTU7ZS53ZG90YmVsb3c9NzgxNztlLndlaGlyYWdhbmE9MTI0MzM7ZS53ZWllcnN0cmFzcz04NDcyO2Uud2VrYXRha2FuYT0xMjUyOTtlLndla29yZWFuPTEyNjM4O2Uud2Vva29yZWFuPTEyNjM3O2Uud2dyYXZlPTc4MDk7ZS53aGl0ZWJ1bGxldD05NzAyO2Uud2hpdGVjaXJjbGU9OTY3NTtlLndoaXRlY2lyY2xlaW52ZXJzZT05Njg5O2Uud2hpdGVjb3JuZXJicmFja2V0bGVmdD0xMjMwMjtlLndoaXRlY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA5MTtlLndoaXRlY29ybmVyYnJhY2tldHJpZ2h0PTEyMzAzO2Uud2hpdGVjb3JuZXJicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA5MjtlLndoaXRlZGlhbW9uZD05NjcxO2Uud2hpdGVkaWFtb25kY29udGFpbmluZ2JsYWNrc21hbGxkaWFtb25kPTk2NzI7ZS53aGl0ZWRvd25wb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY2MztlLndoaXRlZG93bnBvaW50aW5ndHJpYW5nbGU9OTY2MTtlLndoaXRlbGVmdHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjY3O2Uud2hpdGVsZWZ0cG9pbnRpbmd0cmlhbmdsZT05NjY1O2Uud2hpdGVsZW50aWN1bGFyYnJhY2tldGxlZnQ9MTIzMTA7ZS53aGl0ZWxlbnRpY3VsYXJicmFja2V0cmlnaHQ9MTIzMTE7ZS53aGl0ZXJpZ2h0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NTc7ZS53aGl0ZXJpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU1O2Uud2hpdGVzbWFsbHNxdWFyZT05NjQzO2Uud2hpdGVzbWlsaW5nZmFjZT05Nzg2O2Uud2hpdGVzcXVhcmU9OTYzMztlLndoaXRlc3Rhcj05NzM0O2Uud2hpdGV0ZWxlcGhvbmU9OTc0MztlLndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0PTEyMzEyO2Uud2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0PTEyMzEzO2Uud2hpdGV1cHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjUzO2Uud2hpdGV1cHBvaW50aW5ndHJpYW5nbGU9OTY1MTtlLndpaGlyYWdhbmE9MTI0MzI7ZS53aWthdGFrYW5hPTEyNTI4O2Uud2lrb3JlYW49MTI2Mzk7ZS53bW9ub3NwYWNlPTY1MzY3O2Uud29oaXJhZ2FuYT0xMjQzNDtlLndva2F0YWthbmE9MTI1MzA7ZS53b2thdGFrYW5haGFsZndpZHRoPTY1MzgyO2Uud29uPTgzNjE7ZS53b25tb25vc3BhY2U9NjU1MTA7ZS53b3dhZW50aGFpPTM2MjM7ZS53cGFyZW49OTM5NDtlLndyaW5nPTc4MzI7ZS53c3VwZXJpb3I9Njk1O2Uud3R1cm5lZD02NTM7ZS53eW5uPTQ0NztlLng9MTIwO2UueGFib3ZlY21iPTgyOTtlLnhib3BvbW9mbz0xMjU2MjtlLnhjaXJjbGU9OTQ0NztlLnhkaWVyZXNpcz03ODIxO2UueGRvdGFjY2VudD03ODE5O2UueGVoYXJtZW5pYW49MTM4OTtlLnhpPTk1ODtlLnhtb25vc3BhY2U9NjUzNjg7ZS54cGFyZW49OTM5NTtlLnhzdXBlcmlvcj03Mzk7ZS55PTEyMTtlLnlhYWRvc3F1YXJlPTEzMTM0O2UueWFiZW5nYWxpPTI0Nzk7ZS55YWN1dGU9MjUzO2UueWFkZXZhPTIzNTE7ZS55YWVrb3JlYW49MTI2MjY7ZS55YWd1amFyYXRpPTI3MzU7ZS55YWd1cm11a2hpPTI2MDc7ZS55YWhpcmFnYW5hPTEyNDIwO2UueWFrYXRha2FuYT0xMjUxNjtlLnlha2F0YWthbmFoYWxmd2lkdGg9NjU0Mjg7ZS55YWtvcmVhbj0xMjYyNTtlLnlhbWFra2FudGhhaT0zNjYyO2UueWFzbWFsbGhpcmFnYW5hPTEyNDE5O2UueWFzbWFsbGthdGFrYW5hPTEyNTE1O2UueWFzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg4O2UueWF0Y3lyaWxsaWM9MTEyMztlLnljaXJjbGU9OTQ0ODtlLnljaXJjdW1mbGV4PTM3NTtlLnlkaWVyZXNpcz0yNTU7ZS55ZG90YWNjZW50PTc4MjM7ZS55ZG90YmVsb3c9NzkyNTtlLnllaGFyYWJpYz0xNjEwO2UueWVoYmFycmVlYXJhYmljPTE3NDY7ZS55ZWhiYXJyZWVmaW5hbGFyYWJpYz02NDQzMTtlLnllaGZpbmFsYXJhYmljPTY1MjY2O2UueWVoaGFtemFhYm92ZWFyYWJpYz0xNTc0O2UueWVoaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTYyO2UueWVoaGFtemFhYm92ZWluaXRpYWxhcmFiaWM9NjUxNjM7ZS55ZWhoYW16YWFib3ZlbWVkaWFsYXJhYmljPTY1MTY0O2UueWVoaW5pdGlhbGFyYWJpYz02NTI2NztlLnllaG1lZGlhbGFyYWJpYz02NTI2ODtlLnllaG1lZW1pbml0aWFsYXJhYmljPTY0NzMzO2UueWVobWVlbWlzb2xhdGVkYXJhYmljPTY0NjAwO2UueWVobm9vbmZpbmFsYXJhYmljPTY0NjYwO2UueWVodGhyZWVkb3RzYmVsb3dhcmFiaWM9MTc0NTtlLnlla29yZWFuPTEyNjMwO2UueWVuPTE2NTtlLnllbm1vbm9zcGFjZT02NTUwOTtlLnllb2tvcmVhbj0xMjYyOTtlLnllb3JpbmhpZXVoa29yZWFuPTEyNjc4O2UueWVyYWhiZW55b21vaGVicmV3PTE0NTA7ZS55ZXJhaGJlbnlvbW9sZWZ0aGVicmV3PTE0NTA7ZS55ZXJpY3lyaWxsaWM9MTA5OTtlLnllcnVkaWVyZXNpc2N5cmlsbGljPTEyNzM7ZS55ZXNpZXVuZ2tvcmVhbj0xMjY3MztlLnllc2lldW5ncGFuc2lvc2tvcmVhbj0xMjY3NTtlLnllc2lldW5nc2lvc2tvcmVhbj0xMjY3NDtlLnlldGl2aGVicmV3PTE0MzQ7ZS55Z3JhdmU9NzkyMztlLnlob29rPTQzNjtlLnlob29rYWJvdmU9NzkyNztlLnlpYXJtZW5pYW49MTM5NztlLnlpY3lyaWxsaWM9MTExMTtlLnlpa29yZWFuPTEyNjQyO2UueWlueWFuZz05Nzc1O2UueWl3bmFybWVuaWFuPTE0MTA7ZS55bW9ub3NwYWNlPTY1MzY5O2UueW9kPTE0OTc7ZS55b2RkYWdlc2g9NjQzMTM7ZS55b2RkYWdlc2hoZWJyZXc9NjQzMTM7ZS55b2RoZWJyZXc9MTQ5NztlLnlvZHlvZGhlYnJldz0xNTIyO2UueW9keW9kcGF0YWhoZWJyZXc9NjQyODc7ZS55b2hpcmFnYW5hPTEyNDI0O2UueW9pa29yZWFuPTEyNjgxO2UueW9rYXRha2FuYT0xMjUyMDtlLnlva2F0YWthbmFoYWxmd2lkdGg9NjU0MzA7ZS55b2tvcmVhbj0xMjYzNTtlLnlvc21hbGxoaXJhZ2FuYT0xMjQyMztlLnlvc21hbGxrYXRha2FuYT0xMjUxOTtlLnlvc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM5MDtlLnlvdGdyZWVrPTEwMTE7ZS55b3lhZWtvcmVhbj0xMjY4MDtlLnlveWFrb3JlYW49MTI2Nzk7ZS55b3lha3RoYWk9MzYxODtlLnlveWluZ3RoYWk9MzU5NztlLnlwYXJlbj05Mzk2O2UueXBvZ2VncmFtbWVuaT04OTA7ZS55cG9nZWdyYW1tZW5pZ3JlZWtjbWI9ODM3O2UueXI9NDIyO2UueXJpbmc9NzgzMztlLnlzdXBlcmlvcj02OTY7ZS55dGlsZGU9NzkyOTtlLnl0dXJuZWQ9NjU0O2UueXVoaXJhZ2FuYT0xMjQyMjtlLnl1aWtvcmVhbj0xMjY4NDtlLnl1a2F0YWthbmE9MTI1MTg7ZS55dWthdGFrYW5haGFsZndpZHRoPTY1NDI5O2UueXVrb3JlYW49MTI2NDA7ZS55dXNiaWdjeXJpbGxpYz0xMTMxO2UueXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMzO2UueXVzbGl0dGxlY3lyaWxsaWM9MTEyNztlLnl1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyOTtlLnl1c21hbGxoaXJhZ2FuYT0xMjQyMTtlLnl1c21hbGxrYXRha2FuYT0xMjUxNztlLnl1c21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4OTtlLnl1eWVrb3JlYW49MTI2ODM7ZS55dXllb2tvcmVhbj0xMjY4MjtlLnl5YWJlbmdhbGk9MjUyNztlLnl5YWRldmE9MjM5OTtlLno9MTIyO2UuemFhcm1lbmlhbj0xMzgyO2UuemFjdXRlPTM3ODtlLnphZGV2YT0yMzk1O2UuemFndXJtdWtoaT0yNjUxO2UuemFoYXJhYmljPTE1OTI7ZS56YWhmaW5hbGFyYWJpYz02NTIyMjtlLnphaGluaXRpYWxhcmFiaWM9NjUyMjM7ZS56YWhpcmFnYW5hPTEyMzc0O2UuemFobWVkaWFsYXJhYmljPTY1MjI0O2UuemFpbmFyYWJpYz0xNTg2O2UuemFpbmZpbmFsYXJhYmljPTY1MjAwO2UuemFrYXRha2FuYT0xMjQ3MDtlLnphcWVmZ2Fkb2xoZWJyZXc9MTQyOTtlLnphcWVmcWF0YW5oZWJyZXc9MTQyODtlLnphcnFhaGVicmV3PTE0MzI7ZS56YXlpbj0xNDk0O2UuemF5aW5kYWdlc2g9NjQzMTA7ZS56YXlpbmRhZ2VzaGhlYnJldz02NDMxMDtlLnpheWluaGVicmV3PTE0OTQ7ZS56Ym9wb21vZm89MTI1Njc7ZS56Y2Fyb249MzgyO2UuemNpcmNsZT05NDQ5O2UuemNpcmN1bWZsZXg9NzgyNTtlLnpjdXJsPTY1NztlLnpkb3Q9MzgwO2UuemRvdGFjY2VudD0zODA7ZS56ZG90YmVsb3c9NzgyNztlLnplY3lyaWxsaWM9MTA3OTtlLnplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NztlLnplZGllcmVzaXNjeXJpbGxpYz0xMjQ3O2UuemVoaXJhZ2FuYT0xMjM4MDtlLnpla2F0YWthbmE9MTI0NzY7ZS56ZXJvPTQ4O2UuemVyb2FyYWJpYz0xNjMyO2UuemVyb2JlbmdhbGk9MjUzNDtlLnplcm9kZXZhPTI0MDY7ZS56ZXJvZ3VqYXJhdGk9Mjc5MDtlLnplcm9ndXJtdWtoaT0yNjYyO2UuemVyb2hhY2thcmFiaWM9MTYzMjtlLnplcm9pbmZlcmlvcj04MzIwO2UuemVyb21vbm9zcGFjZT02NTI5NjtlLnplcm9vbGRzdHlsZT02MzI4MDtlLnplcm9wZXJzaWFuPTE3NzY7ZS56ZXJvc3VwZXJpb3I9ODMwNDtlLnplcm90aGFpPTM2NjQ7ZS56ZXJvd2lkdGhqb2luZXI9NjUyNzk7ZS56ZXJvd2lkdGhub25qb2luZXI9ODIwNDtlLnplcm93aWR0aHNwYWNlPTgyMDM7ZS56ZXRhPTk1MDtlLnpoYm9wb21vZm89MTI1NjM7ZS56aGVhcm1lbmlhbj0xMzg2O2UuemhlYnJldmVjeXJpbGxpYz0xMjE4O2UuemhlY3lyaWxsaWM9MTA3ODtlLnpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzU7ZS56aGVkaWVyZXNpc2N5cmlsbGljPTEyNDU7ZS56aWhpcmFnYW5hPTEyMzc2O2UuemlrYXRha2FuYT0xMjQ3MjtlLnppbm9yaGVicmV3PTE0NTQ7ZS56bGluZWJlbG93PTc4Mjk7ZS56bW9ub3NwYWNlPTY1MzcwO2Uuem9oaXJhZ2FuYT0xMjM4MjtlLnpva2F0YWthbmE9MTI0Nzg7ZS56cGFyZW49OTM5NztlLnpyZXRyb2ZsZXhob29rPTY1NjtlLnpzdHJva2U9NDM4O2UuenVoaXJhZ2FuYT0xMjM3ODtlLnp1a2F0YWthbmE9MTI0NzQ7ZVsiLm5vdGRlZiJdPTA7ZS5hbmdicmFja2V0bGVmdGJpZz05MDAxO2UuYW5nYnJhY2tldGxlZnRCaWc9OTAwMTtlLmFuZ2JyYWNrZXRsZWZ0YmlnZz05MDAxO2UuYW5nYnJhY2tldGxlZnRCaWdnPTkwMDE7ZS5hbmdicmFja2V0cmlnaHRCaWc9OTAwMjtlLmFuZ2JyYWNrZXRyaWdodGJpZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0QmlnZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0YmlnZz05MDAyO2UuYXJyb3dob29rbGVmdD04NjE4O2UuYXJyb3dob29rcmlnaHQ9ODYxNztlLmFycm93bGVmdHRvcGhhbGY9ODYzNjtlLmFycm93bGVmdGJvdGhhbGY9ODYzNztlLmFycm93bm9ydGhlYXN0PTg1OTk7ZS5hcnJvd25vcnRod2VzdD04NTk4O2UuYXJyb3dyaWdodHRvcGhhbGY9ODY0MDtlLmFycm93cmlnaHRib3RoYWxmPTg2NDE7ZS5hcnJvd3NvdXRoZWFzdD04NjAwO2UuYXJyb3dzb3V0aHdlc3Q9ODYwMTtlLmJhY2tzbGFzaGJpZz04NzI2O2UuYmFja3NsYXNoQmlnPTg3MjY7ZS5iYWNrc2xhc2hCaWdnPTg3MjY7ZS5iYWNrc2xhc2hiaWdnPTg3MjY7ZS5iYXJkYmw9ODIxNDtlLmJyYWNlaHRpcGRvd25sZWZ0PTY1MDc5O2UuYnJhY2VodGlwZG93bnJpZ2h0PTY1MDc5O2UuYnJhY2VodGlwdXBsZWZ0PTY1MDgwO2UuYnJhY2VodGlwdXByaWdodD02NTA4MDtlLmJyYWNlbGVmdEJpZz0xMjM7ZS5icmFjZWxlZnRiaWc9MTIzO2UuYnJhY2VsZWZ0YmlnZz0xMjM7ZS5icmFjZWxlZnRCaWdnPTEyMztlLmJyYWNlcmlnaHRCaWc9MTI1O2UuYnJhY2VyaWdodGJpZz0xMjU7ZS5icmFjZXJpZ2h0YmlnZz0xMjU7ZS5icmFjZXJpZ2h0QmlnZz0xMjU7ZS5icmFja2V0bGVmdGJpZz05MTtlLmJyYWNrZXRsZWZ0QmlnPTkxO2UuYnJhY2tldGxlZnRiaWdnPTkxO2UuYnJhY2tldGxlZnRCaWdnPTkxO2UuYnJhY2tldHJpZ2h0QmlnPTkzO2UuYnJhY2tldHJpZ2h0YmlnPTkzO2UuYnJhY2tldHJpZ2h0YmlnZz05MztlLmJyYWNrZXRyaWdodEJpZ2c9OTM7ZS5jZWlsaW5nbGVmdGJpZz04OTY4O2UuY2VpbGluZ2xlZnRCaWc9ODk2ODtlLmNlaWxpbmdsZWZ0QmlnZz04OTY4O2UuY2VpbGluZ2xlZnRiaWdnPTg5Njg7ZS5jZWlsaW5ncmlnaHRiaWc9ODk2OTtlLmNlaWxpbmdyaWdodEJpZz04OTY5O2UuY2VpbGluZ3JpZ2h0YmlnZz04OTY5O2UuY2VpbGluZ3JpZ2h0QmlnZz04OTY5O2UuY2lyY2xlZG90ZGlzcGxheT04ODU3O2UuY2lyY2xlZG90dGV4dD04ODU3O2UuY2lyY2xlbXVsdGlwbHlkaXNwbGF5PTg4NTU7ZS5jaXJjbGVtdWx0aXBseXRleHQ9ODg1NTtlLmNpcmNsZXBsdXNkaXNwbGF5PTg4NTM7ZS5jaXJjbGVwbHVzdGV4dD04ODUzO2UuY29udGludGVncmFsZGlzcGxheT04NzUwO2UuY29udGludGVncmFsdGV4dD04NzUwO2UuY29wcm9kdWN0ZGlzcGxheT04NzIwO2UuY29wcm9kdWN0dGV4dD04NzIwO2UuZmxvb3JsZWZ0QmlnPTg5NzA7ZS5mbG9vcmxlZnRiaWc9ODk3MDtlLmZsb29ybGVmdGJpZ2c9ODk3MDtlLmZsb29ybGVmdEJpZ2c9ODk3MDtlLmZsb29ycmlnaHRiaWc9ODk3MTtlLmZsb29ycmlnaHRCaWc9ODk3MTtlLmZsb29ycmlnaHRCaWdnPTg5NzE7ZS5mbG9vcnJpZ2h0YmlnZz04OTcxO2UuaGF0d2lkZT03NzA7ZS5oYXR3aWRlcj03NzA7ZS5oYXR3aWRlc3Q9NzcwO2UuaW50ZXJjYWw9NzQ4ODtlLmludGVncmFsZGlzcGxheT04NzQ3O2UuaW50ZWdyYWx0ZXh0PTg3NDc7ZS5pbnRlcnNlY3Rpb25kaXNwbGF5PTg4OTg7ZS5pbnRlcnNlY3Rpb250ZXh0PTg4OTg7ZS5sb2dpY2FsYW5kZGlzcGxheT04NzQzO2UubG9naWNhbGFuZHRleHQ9ODc0MztlLmxvZ2ljYWxvcmRpc3BsYXk9ODc0NDtlLmxvZ2ljYWxvcnRleHQ9ODc0NDtlLnBhcmVubGVmdEJpZz00MDtlLnBhcmVubGVmdGJpZz00MDtlLnBhcmVubGVmdEJpZ2c9NDA7ZS5wYXJlbmxlZnRiaWdnPTQwO2UucGFyZW5yaWdodEJpZz00MTtlLnBhcmVucmlnaHRiaWc9NDE7ZS5wYXJlbnJpZ2h0QmlnZz00MTtlLnBhcmVucmlnaHRiaWdnPTQxO2UucHJpbWU9ODI0MjtlLnByb2R1Y3RkaXNwbGF5PTg3MTk7ZS5wcm9kdWN0dGV4dD04NzE5O2UucmFkaWNhbGJpZz04NzMwO2UucmFkaWNhbEJpZz04NzMwO2UucmFkaWNhbEJpZ2c9ODczMDtlLnJhZGljYWxiaWdnPTg3MzA7ZS5yYWRpY2FsYnQ9ODczMDtlLnJhZGljYWx0cD04NzMwO2UucmFkaWNhbHZlcnRleD04NzMwO2Uuc2xhc2hiaWc9NDc7ZS5zbGFzaEJpZz00NztlLnNsYXNoQmlnZz00NztlLnNsYXNoYmlnZz00NztlLnN1bW1hdGlvbmRpc3BsYXk9ODcyMTtlLnN1bW1hdGlvbnRleHQ9ODcyMTtlLnRpbGRld2lkZT03MzI7ZS50aWxkZXdpZGVyPTczMjtlLnRpbGRld2lkZXN0PTczMjtlLnVuaW9uZGlzcGxheT04ODk5O2UudW5pb25tdWx0aWRpc3BsYXk9ODg0NjtlLnVuaW9ubXVsdGl0ZXh0PTg4NDY7ZS51bmlvbnNxZGlzcGxheT04ODUyO2UudW5pb25zcXRleHQ9ODg1MjtlLnVuaW9udGV4dD04ODk5O2UudmV4dGVuZGRvdWJsZT04NzQxO2UudmV4dGVuZHNpbmdsZT04NzM5fSksZ3I9Z2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MzI7ZS5hMT05OTg1O2UuYTI9OTk4NjtlLmEyMDI9OTk4NztlLmEzPTk5ODg7ZS5hND05NzQyO2UuYTU9OTk5MDtlLmExMTk9OTk5MTtlLmExMTg9OTk5MjtlLmExMTc9OTk5MztlLmExMT05NzU1O2UuYTEyPTk3NTg7ZS5hMTM9OTk5NjtlLmExND05OTk3O2UuYTE1PTk5OTg7ZS5hMTY9OTk5OTtlLmExMDU9MWU0O2UuYTE3PTEwMDAxO2UuYTE4PTEwMDAyO2UuYTE5PTEwMDAzO2UuYTIwPTEwMDA0O2UuYTIxPTEwMDA1O2UuYTIyPTEwMDA2O2UuYTIzPTEwMDA3O2UuYTI0PTEwMDA4O2UuYTI1PTEwMDA5O2UuYTI2PTEwMDEwO2UuYTI3PTEwMDExO2UuYTI4PTEwMDEyO2UuYTY9MTAwMTM7ZS5hNz0xMDAxNDtlLmE4PTEwMDE1O2UuYTk9MTAwMTY7ZS5hMTA9MTAwMTc7ZS5hMjk9MTAwMTg7ZS5hMzA9MTAwMTk7ZS5hMzE9MTAwMjA7ZS5hMzI9MTAwMjE7ZS5hMzM9MTAwMjI7ZS5hMzQ9MTAwMjM7ZS5hMzU9OTczMztlLmEzNj0xMDAyNTtlLmEzNz0xMDAyNjtlLmEzOD0xMDAyNztlLmEzOT0xMDAyODtlLmE0MD0xMDAyOTtlLmE0MT0xMDAzMDtlLmE0Mj0xMDAzMTtlLmE0Mz0xMDAzMjtlLmE0ND0xMDAzMztlLmE0NT0xMDAzNDtlLmE0Nj0xMDAzNTtlLmE0Nz0xMDAzNjtlLmE0OD0xMDAzNztlLmE0OT0xMDAzODtlLmE1MD0xMDAzOTtlLmE1MT0xMDA0MDtlLmE1Mj0xMDA0MTtlLmE1Mz0xMDA0MjtlLmE1ND0xMDA0MztlLmE1NT0xMDA0NDtlLmE1Nj0xMDA0NTtlLmE1Nz0xMDA0NjtlLmE1OD0xMDA0NztlLmE1OT0xMDA0ODtlLmE2MD0xMDA0OTtlLmE2MT0xMDA1MDtlLmE2Mj0xMDA1MTtlLmE2Mz0xMDA1MjtlLmE2ND0xMDA1MztlLmE2NT0xMDA1NDtlLmE2Nj0xMDA1NTtlLmE2Nz0xMDA1NjtlLmE2OD0xMDA1NztlLmE2OT0xMDA1ODtlLmE3MD0xMDA1OTtlLmE3MT05Njc5O2UuYTcyPTEwMDYxO2UuYTczPTk2MzI7ZS5hNzQ9MTAwNjM7ZS5hMjAzPTEwMDY0O2UuYTc1PTEwMDY1O2UuYTIwND0xMDA2NjtlLmE3Nj05NjUwO2UuYTc3PTk2NjA7ZS5hNzg9OTY3MDtlLmE3OT0xMDA3MDtlLmE4MT05Njg3O2UuYTgyPTEwMDcyO2UuYTgzPTEwMDczO2UuYTg0PTEwMDc0O2UuYTk3PTEwMDc1O2UuYTk4PTEwMDc2O2UuYTk5PTEwMDc3O2UuYTEwMD0xMDA3ODtlLmExMDE9MTAwODE7ZS5hMTAyPTEwMDgyO2UuYTEwMz0xMDA4MztlLmExMDQ9MTAwODQ7ZS5hMTA2PTEwMDg1O2UuYTEwNz0xMDA4NjtlLmExMDg9MTAwODc7ZS5hMTEyPTk4Mjc7ZS5hMTExPTk4MzA7ZS5hMTEwPTk4Mjk7ZS5hMTA5PTk4MjQ7ZS5hMTIwPTkzMTI7ZS5hMTIxPTkzMTM7ZS5hMTIyPTkzMTQ7ZS5hMTIzPTkzMTU7ZS5hMTI0PTkzMTY7ZS5hMTI1PTkzMTc7ZS5hMTI2PTkzMTg7ZS5hMTI3PTkzMTk7ZS5hMTI4PTkzMjA7ZS5hMTI5PTkzMjE7ZS5hMTMwPTEwMTAyO2UuYTEzMT0xMDEwMztlLmExMzI9MTAxMDQ7ZS5hMTMzPTEwMTA1O2UuYTEzND0xMDEwNjtlLmExMzU9MTAxMDc7ZS5hMTM2PTEwMTA4O2UuYTEzNz0xMDEwOTtlLmExMzg9MTAxMTA7ZS5hMTM5PTEwMTExO2UuYTE0MD0xMDExMjtlLmExNDE9MTAxMTM7ZS5hMTQyPTEwMTE0O2UuYTE0Mz0xMDExNTtlLmExNDQ9MTAxMTY7ZS5hMTQ1PTEwMTE3O2UuYTE0Nj0xMDExODtlLmExNDc9MTAxMTk7ZS5hMTQ4PTEwMTIwO2UuYTE0OT0xMDEyMTtlLmExNTA9MTAxMjI7ZS5hMTUxPTEwMTIzO2UuYTE1Mj0xMDEyNDtlLmExNTM9MTAxMjU7ZS5hMTU0PTEwMTI2O2UuYTE1NT0xMDEyNztlLmExNTY9MTAxMjg7ZS5hMTU3PTEwMTI5O2UuYTE1OD0xMDEzMDtlLmExNTk9MTAxMzE7ZS5hMTYwPTEwMTMyO2UuYTE2MT04NTk0O2UuYTE2Mz04NTk2O2UuYTE2ND04NTk3O2UuYTE5Nj0xMDEzNjtlLmExNjU9MTAxMzc7ZS5hMTkyPTEwMTM4O2UuYTE2Nj0xMDEzOTtlLmExNjc9MTAxNDA7ZS5hMTY4PTEwMTQxO2UuYTE2OT0xMDE0MjtlLmExNzA9MTAxNDM7ZS5hMTcxPTEwMTQ0O2UuYTE3Mj0xMDE0NTtlLmExNzM9MTAxNDY7ZS5hMTYyPTEwMTQ3O2UuYTE3ND0xMDE0ODtlLmExNzU9MTAxNDk7ZS5hMTc2PTEwMTUwO2UuYTE3Nz0xMDE1MTtlLmExNzg9MTAxNTI7ZS5hMTc5PTEwMTUzO2UuYTE5Mz0xMDE1NDtlLmExODA9MTAxNTU7ZS5hMTk5PTEwMTU2O2UuYTE4MT0xMDE1NztlLmEyMDA9MTAxNTg7ZS5hMTgyPTEwMTU5O2UuYTIwMT0xMDE2MTtlLmExODM9MTAxNjI7ZS5hMTg0PTEwMTYzO2UuYTE5Nz0xMDE2NDtlLmExODU9MTAxNjU7ZS5hMTk0PTEwMTY2O2UuYTE5OD0xMDE2NztlLmExODY9MTAxNjg7ZS5hMTk1PTEwMTY5O2UuYTE4Nz0xMDE3MDtlLmExODg9MTAxNzE7ZS5hMTg5PTEwMTcyO2UuYTE5MD0xMDE3MztlLmExOTE9MTAxNzQ7ZS5hODk9MTAwODg7ZS5hOTA9MTAwODk7ZS5hOTM9MTAwOTA7ZS5hOTQ9MTAwOTE7ZS5hOTE9MTAwOTI7ZS5hOTI9MTAwOTM7ZS5hMjA1PTEwMDk0O2UuYTg1PTEwMDk1O2UuYTIwNj0xMDA5NjtlLmE4Nj0xMDA5NztlLmE4Nz0xMDA5ODtlLmE4OD0xMDA5OTtlLmE5NT0xMDEwMDtlLmE5Nj0xMDEwMTtlWyIubm90ZGVmIl09MH0pLHByPWdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbihlKXtlWzYzNzIxXT0xNjk7ZVs2MzE5M109MTY5O2VbNjM3MjBdPTE3NDtlWzYzMTk0XT0xNzQ7ZVs2MzcyMl09ODQ4MjtlWzYzMTk1XT04NDgyO2VbNjM3MjldPTkxMjc7ZVs2MzczMF09OTEyODtlWzYzNzMxXT05MTI5O2VbNjM3NDBdPTkxMzE7ZVs2Mzc0MV09OTEzMjtlWzYzNzQyXT05MTMzO2VbNjM3MjZdPTkxMjE7ZVs2MzcyN109OTEyMjtlWzYzNzI4XT05MTIzO2VbNjM3MzddPTkxMjQ7ZVs2MzczOF09OTEyNTtlWzYzNzM5XT05MTI2O2VbNjM3MjNdPTkxMTU7ZVs2MzcyNF09OTExNjtlWzYzNzI1XT05MTE3O2VbNjM3MzRdPTkxMTg7ZVs2MzczNV09OTExOTtlWzYzNzM2XT05MTIwfSk7ZnVuY3Rpb24gZ2V0VW5pY29kZUZvckdseXBoKGUsdCl7bGV0IGE9dFtlXTtpZih2b2lkIDAhPT1hKXJldHVybiBhO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IHI7aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pcj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7cj1lLnN1YnN0cmluZygxKX1pZihyPT09ci50b1VwcGVyQ2FzZSgpKXthPXBhcnNlSW50KHIsMTYpO2lmKGE+PTApcmV0dXJuIGF9fXJldHVybi0xfWNvbnN0IG1yPVtbMCwxMjddLFsxMjgsMjU1XSxbMjU2LDM4M10sWzM4NCw1OTFdLFs1OTIsNjg3LDc0MjQsNzU1MSw3NTUyLDc2MTVdLFs2ODgsNzY3LDQyNzUyLDQyNzgzXSxbNzY4LDg3OSw3NjE2LDc2NzldLFs4ODAsMTAyM10sWzExMzkyLDExNTE5XSxbMTAyNCwxMjc5LDEyODAsMTMyNywxMTc0NCwxMTc3NSw0MjU2MCw0MjY1NV0sWzEzMjgsMTQyM10sWzE0MjQsMTUzNV0sWzQyMjQwLDQyNTU5XSxbMTUzNiwxNzkxLDE4NzIsMTkxOV0sWzE5ODQsMjA0N10sWzIzMDQsMjQzMV0sWzI0MzIsMjU1OV0sWzI1NjAsMjY4N10sWzI2ODgsMjgxNV0sWzI4MTYsMjk0M10sWzI5NDQsMzA3MV0sWzMwNzIsMzE5OV0sWzMyMDAsMzMyN10sWzMzMjgsMzQ1NV0sWzM1ODQsMzcxMV0sWzM3MTIsMzgzOV0sWzQyNTYsNDM1MSwxMTUyMCwxMTU2N10sWzY5MTIsNzAzOV0sWzQzNTIsNDYwN10sWzc2ODAsNzkzNSwxMTM2MCwxMTM5MSw0Mjc4NCw0MzAwN10sWzc5MzYsODE5MV0sWzgxOTIsODMwMywxMTc3NiwxMTkwM10sWzgzMDQsODM1MV0sWzgzNTIsODM5OV0sWzg0MDAsODQ0N10sWzg0NDgsODUyN10sWzg1MjgsODU5MV0sWzg1OTIsODcwMywxMDIyNCwxMDIzOSwxMDQ5NiwxMDYyMywxMTAwOCwxMTI2M10sWzg3MDQsODk1OSwxMDc1MiwxMTAwNywxMDE3NiwxMDIyMywxMDYyNCwxMDc1MV0sWzg5NjAsOTIxNV0sWzkyMTYsOTI3OV0sWzkyODAsOTMxMV0sWzkzMTIsOTQ3MV0sWzk0NzIsOTU5OV0sWzk2MDAsOTYzMV0sWzk2MzIsOTcyN10sWzk3MjgsOTk4M10sWzk5ODQsMTAxNzVdLFsxMjI4OCwxMjM1MV0sWzEyMzUyLDEyNDQ3XSxbMTI0NDgsMTI1NDMsMTI3ODQsMTI3OTldLFsxMjU0NCwxMjU5MSwxMjcwNCwxMjczNV0sWzEyNTkyLDEyNjg3XSxbNDMwNzIsNDMxMzVdLFsxMjgwMCwxMzA1NV0sWzEzMDU2LDEzMzExXSxbNDQwMzIsNTUyMTVdLFs1NTI5Niw1NzM0M10sWzY3ODQwLDY3ODcxXSxbMTk5NjgsNDA5NTksMTE5MDQsMTIwMzEsMTIwMzIsMTIyNTUsMTIyNzIsMTIyODcsMTMzMTIsMTk5MDMsMTMxMDcyLDE3Mzc5MSwxMjY4OCwxMjcwM10sWzU3MzQ0LDYzNzQzXSxbMTI3MzYsMTI3ODMsNjM3NDQsNjQyNTUsMTk0NTYwLDE5NTEwM10sWzY0MjU2LDY0MzM1XSxbNjQzMzYsNjUwMjNdLFs2NTA1Niw2NTA3MV0sWzY1MDQwLDY1MDU1XSxbNjUxMDQsNjUxMzVdLFs2NTEzNiw2NTI3OV0sWzY1MjgwLDY1NTE5XSxbNjU1MjAsNjU1MzVdLFszODQwLDQwOTVdLFsxNzkyLDE4NzFdLFsxOTIwLDE5ODNdLFszNDU2LDM1ODNdLFs0MDk2LDQyNTVdLFs0NjA4LDQ5OTEsNDk5Miw1MDIzLDExNjQ4LDExNzQzXSxbNTAyNCw1MTE5XSxbNTEyMCw1NzU5XSxbNTc2MCw1NzkxXSxbNTc5Miw1ODg3XSxbNjAxNiw2MTQzXSxbNjE0NCw2MzE5XSxbMTAyNDAsMTA0OTVdLFs0MDk2MCw0MjEyN10sWzU4ODgsNTkxOSw1OTIwLDU5NTEsNTk1Miw1OTgzLDU5ODQsNjAxNV0sWzY2MzA0LDY2MzUxXSxbNjYzNTIsNjYzODNdLFs2NjU2MCw2NjYzOV0sWzExODc4NCwxMTkwMzksMTE5MDQwLDExOTI5NSwxMTkyOTYsMTE5Mzc1XSxbMTE5ODA4LDEyMDgzMV0sWzEwNDQ0ODAsMTA0ODU3M10sWzY1MDI0LDY1MDM5LDkxNzc2MCw5MTc5OTldLFs5MTc1MDQsOTE3NjMxXSxbNjQwMCw2NDc5XSxbNjQ4MCw2NTI3XSxbNjUyOCw2NjIzXSxbNjY1Niw2Njg3XSxbMTEyNjQsMTEzNTldLFsxMTU2OCwxMTY0N10sWzE5OTA0LDE5OTY3XSxbNDMwMDgsNDMwNTVdLFs2NTUzNiw2NTY2Myw2NTY2NCw2NTc5MSw2NTc5Miw2NTg1NV0sWzY1ODU2LDY1OTM1XSxbNjY0MzIsNjY0NjNdLFs2NjQ2NCw2NjUyN10sWzY2NjQwLDY2Njg3XSxbNjY2ODgsNjY3MzVdLFs2NzU4NCw2NzY0N10sWzY4MDk2LDY4MTkxXSxbMTE5NTUyLDExOTY0N10sWzczNzI4LDc0NzUxLDc0NzUyLDc0ODc5XSxbMTE5NjQ4LDExOTY3OV0sWzcwNDAsNzEwM10sWzcxNjgsNzI0N10sWzcyNDgsNzI5NV0sWzQzMTM2LDQzMjMxXSxbNDMyNjQsNDMzMTFdLFs0MzMxMiw0MzM1OV0sWzQzNTIwLDQzNjE1XSxbNjU5MzYsNjU5OTldLFs2NmUzLDY2MDQ3XSxbNjYyMDgsNjYyNzEsNjYxNzYsNjYyMDcsNjc4NzIsNjc5MDNdLFsxMjcwMjQsMTI3MTM1LDEyNjk3NiwxMjcwMjNdXTtmdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IoZSx0PS0xKXtpZigtMSE9PXQpe2NvbnN0IGE9bXJbdF07Zm9yKGxldCByPTAsaT1hLmxlbmd0aDtyPGk7cis9MilpZihlPj1hW3JdJiZlPD1hW3IrMV0pcmV0dXJuIHR9Zm9yKGxldCB0PTAsYT1tci5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT1tclt0XTtmb3IobGV0IHI9MCxpPWEubGVuZ3RoO3I8aTtyKz0yKWlmKGU+PWFbcl0mJmU8PWFbcisxXSlyZXR1cm4gdH1yZXR1cm4tMX1jb25zdCBicj1uZXcgUmVnRXhwKCJeKFxccyl8KFxccHtNbn0pfChcXHB7Q2Z9KSQiLCJ1IikseXI9bmV3IE1hcDtjb25zdCB3cj0hMCx4cj0xLFNyPTIsQXI9NCxrcj0zMixDcj1bIi5ub3RkZWYiLCIubnVsbCIsIm5vbm1hcmtpbmdyZXR1cm4iLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsIm5vbmJyZWFraW5nc3BhY2UiLCJBZ3JhdmUiLCJBdGlsZGUiLCJPdGlsZGUiLCJPRSIsIm9lIiwiZW5kYXNoIiwiZW1kYXNoIiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJkaXZpZGUiLCJsb3plbmdlIiwieWRpZXJlc2lzIiwiWWRpZXJlc2lzIiwiZnJhY3Rpb24iLCJjdXJyZW5jeSIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicGVydGhvdXNhbmQiLCJBY2lyY3VtZmxleCIsIkVjaXJjdW1mbGV4IiwiQWFjdXRlIiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsImFwcGxlIiwiT2dyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZ3JhdmUiLCJkb3RsZXNzaSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsIkxzbGFzaCIsImxzbGFzaCIsIlNjYXJvbiIsInNjYXJvbiIsIlpjYXJvbiIsInpjYXJvbiIsImJyb2tlbmJhciIsIkV0aCIsImV0aCIsIllhY3V0ZSIsInlhY3V0ZSIsIlRob3JuIiwidGhvcm4iLCJtaW51cyIsIm11bHRpcGx5Iiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJvbmVoYWxmIiwib25lcXVhcnRlciIsInRocmVlcXVhcnRlcnMiLCJmcmFuYyIsIkdicmV2ZSIsImdicmV2ZSIsIklkb3RhY2NlbnQiLCJTY2VkaWxsYSIsInNjZWRpbGxhIiwiQ2FjdXRlIiwiY2FjdXRlIiwiQ2Nhcm9uIiwiY2Nhcm9uIiwiZGNyb2F0Il07ZnVuY3Rpb24gcmVjb3ZlckdseXBoTmFtZShlLHQpe2lmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIGU7Y29uc3QgYT1nZXRVbmljb2RlRm9yR2x5cGgoZSx0KTtpZigtMSE9PWEpZm9yKGNvbnN0IGUgaW4gdClpZih0W2VdPT09YSlyZXR1cm4gZTtpbmZvKCJVbmFibGUgdG8gcmVjb3ZlciBhIHN0YW5kYXJkIGdseXBoIG5hbWUgZm9yOiAiK2UpO3JldHVybiBlfWZ1bmN0aW9uIHR5cGUxRm9udEdseXBoTWFwcGluZyhlLHQsYSl7Y29uc3Qgcj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBpLG4scztjb25zdCBvPSEhKGUuZmxhZ3MmQXIpO2lmKGUuaXNJbnRlcm5hbEZvbnQpe3M9dDtmb3Iobj0wO248cy5sZW5ndGg7bisrKXtpPWEuaW5kZXhPZihzW25dKTtyW25dPWk+PTA/aTowfX1lbHNlIGlmKGUuYmFzZUVuY29kaW5nTmFtZSl7cz1nZXRFbmNvZGluZyhlLmJhc2VFbmNvZGluZ05hbWUpO2ZvcihuPTA7bjxzLmxlbmd0aDtuKyspe2k9YS5pbmRleE9mKHNbbl0pO3Jbbl09aT49MD9pOjB9fWVsc2UgaWYobylmb3IobiBpbiB0KXJbbl09dFtuXTtlbHNle3M9bHI7Zm9yKG49MDtuPHMubGVuZ3RoO24rKyl7aT1hLmluZGV4T2Yoc1tuXSk7cltuXT1pPj0wP2k6MH19Y29uc3QgYz1lLmRpZmZlcmVuY2VzO2xldCBsO2lmKGMpZm9yKG4gaW4gYyl7Y29uc3QgZT1jW25dO2k9YS5pbmRleE9mKGUpO2lmKC0xPT09aSl7bHx8KGw9ZnIoKSk7Y29uc3QgdD1yZWNvdmVyR2x5cGhOYW1lKGUsbCk7dCE9PWUmJihpPWEuaW5kZXhPZih0KSl9cltuXT1pPj0wP2k6MH1yZXR1cm4gcn1mdW5jdGlvbiBub3JtYWxpemVGb250TmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlQWxsKC9bLF9dL2csIi0iKS5yZXBsYWNlQWxsKC9ccy9nLCIiKX1jb25zdCB2cj1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZT0+e2VbODIxMV09NjUwNzQ7ZVs4MjEyXT02NTA3MztlWzgyMjldPTY1MDcyO2VbODIzMF09NjUwNDk7ZVsxMjI4OV09NjUwNDE7ZVsxMjI5MF09NjUwNDI7ZVsxMjI5Nl09NjUwODc7ZVsxMjI5N109NjUwODg7ZVsxMjI5OF09NjUwODU7ZVsxMjI5OV09NjUwODY7ZVsxMjMwMF09NjUwODk7ZVsxMjMwMV09NjUwOTA7ZVsxMjMwMl09NjUwOTE7ZVsxMjMwM109NjUwOTI7ZVsxMjMwNF09NjUwODM7ZVsxMjMwNV09NjUwODQ7ZVsxMjMwOF09NjUwODE7ZVsxMjMwOV09NjUwODI7ZVsxMjMxMF09NjUwNDc7ZVsxMjMxMV09NjUwNDg7ZVs2NTEwM109NjUwNzY7ZVs2NTI4MV09NjUwNDU7ZVs2NTI4OF09NjUwNzc7ZVs2NTI4OV09NjUwNzg7ZVs2NTI5Ml09NjUwNDA7ZVs2NTMwNl09NjUwNDM7ZVs2NTMwN109NjUwNDQ7ZVs2NTMxMV09NjUwNDY7ZVs2NTMzOV09NjUwOTU7ZVs2NTM0MV09NjUwOTY7ZVs2NTM0M109NjUwNzU7ZVs2NTM3MV09NjUwNzk7ZVs2NTM3M109NjUwODB9KTtjb25zdCBGcj1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiJdLElyPVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCJdLFRyPVsiLm5vdGRlZiIsInNwYWNlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsImh5cGhlbnN1cGVyaW9yIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsImNlbnRvbGRzdHlsZSIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciJdLE9yPVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCJxdWVzdGlvbmRvd24iLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCJBRSIsIm9yZGZlbWluaW5lIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCJhZSIsImRvdGxlc3NpIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwib25lc3VwZXJpb3IiLCJsb2dpY2Fsbm90IiwibXUiLCJ0cmFkZW1hcmsiLCJFdGgiLCJvbmVoYWxmIiwicGx1c21pbnVzIiwiVGhvcm4iLCJvbmVxdWFydGVyIiwiZGl2aWRlIiwiYnJva2VuYmFyIiwiZGVncmVlIiwidGhvcm4iLCJ0aHJlZXF1YXJ0ZXJzIiwidHdvc3VwZXJpb3IiLCJyZWdpc3RlcmVkIiwibWludXMiLCJldGgiLCJtdWx0aXBseSIsInRocmVlc3VwZXJpb3IiLCJjb3B5cmlnaHQiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkFkaWVyZXNpcyIsIkFncmF2ZSIsIkFyaW5nIiwiQXRpbGRlIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiTnRpbGRlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPZGllcmVzaXMiLCJPZ3JhdmUiLCJPdGlsZGUiLCJTY2Fyb24iLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIlVncmF2ZSIsIllhY3V0ZSIsIllkaWVyZXNpcyIsIlpjYXJvbiIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYWdyYXZlIiwiYXJpbmciLCJhdGlsZGUiLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiZWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJpZ3JhdmUiLCJudGlsZGUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm9ncmF2ZSIsIm90aWxkZSIsInNjYXJvbiIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwidWdyYXZlIiwieWFjdXRlIiwieWRpZXJlc2lzIiwiemNhcm9uIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCIsIjAwMS4wMDAiLCIwMDEuMDAxIiwiMDAxLjAwMiIsIjAwMS4wMDMiLCJCbGFjayIsIkJvbGQiLCJCb29rIiwiTGlnaHQiLCJNZWRpdW0iLCJSZWd1bGFyIiwiUm9tYW4iLCJTZW1pYm9sZCJdLE1yPTM5MSxEcj1bbnVsbCx7aWQ6ImhzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LG51bGwse2lkOiJ2c3RlbSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InZtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoicmxpbmV0byIsbWluOjIscmVzZXRTdGFjazohMH0se2lkOiJobGluZXRvIixtaW46MSxyZXNldFN0YWNrOiEwfSx7aWQ6InZsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoicnJjdXJ2ZXRvIixtaW46NixyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbHN1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoicmV0dXJuIixtaW46MCx1bmRlZlN0YWNrOiEwfSxudWxsLG51bGwse2lkOiJlbmRjaGFyIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSxudWxsLG51bGwsbnVsbCx7aWQ6ImhzdGVtaG0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0se2lkOiJoaW50bWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJjbnRybWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybW92ZXRvIixtaW46MixzdGFja0NsZWFyaW5nOiEwfSx7aWQ6Imhtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoidnN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InJjdXJ2ZWxpbmUiLG1pbjo4LHJlc2V0U3RhY2s6ITB9LHtpZDoicmxpbmVjdXJ2ZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJ2dmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LHtpZDoiaGhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbGdzdWJyIixtaW46MSx1bmRlZlN0YWNrOiEwfSx7aWQ6InZoY3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJodmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9XSxScj1bbnVsbCxudWxsLG51bGwse2lkOiJhbmQiLG1pbjoyLHN0YWNrRGVsdGE6LTF9LHtpZDoib3IiLG1pbjoyLHN0YWNrRGVsdGE6LTF9LHtpZDoibm90IixtaW46MSxzdGFja0RlbHRhOjB9LG51bGwsbnVsbCxudWxsLHtpZDoiYWJzIixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiYWRkIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdK2VbdC0xXX19LHtpZDoic3ViIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdLWVbdC0xXX19LHtpZDoiZGl2IixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdL2VbdC0xXX19LG51bGwse2lkOiJuZWciLG1pbjoxLHN0YWNrRGVsdGE6MCxzdGFja0ZuKGUsdCl7ZVt0LTFdPS1lW3QtMV19fSx7aWQ6ImVxIixtaW46MixzdGFja0RlbHRhOi0xfSxudWxsLG51bGwse2lkOiJkcm9wIixtaW46MSxzdGFja0RlbHRhOi0xfSxudWxsLHtpZDoicHV0IixtaW46MixzdGFja0RlbHRhOi0yfSx7aWQ6ImdldCIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImlmZWxzZSIsbWluOjQsc3RhY2tEZWx0YTotM30se2lkOiJyYW5kb20iLG1pbjowLHN0YWNrRGVsdGE6MX0se2lkOiJtdWwiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbihlLHQpe2VbdC0yXT1lW3QtMl0qZVt0LTFdfX0sbnVsbCx7aWQ6InNxcnQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJkdXAiLG1pbjoxLHN0YWNrRGVsdGE6MX0se2lkOiJleGNoIixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoiaW5kZXgiLG1pbjoyLHN0YWNrRGVsdGE6MH0se2lkOiJyb2xsIixtaW46MyxzdGFja0RlbHRhOi0yfSxudWxsLG51bGwsbnVsbCx7aWQ6ImhmbGV4IixtaW46NyxyZXNldFN0YWNrOiEwfSx7aWQ6ImZsZXgiLG1pbjoxMyxyZXNldFN0YWNrOiEwfSx7aWQ6ImhmbGV4MSIsbWluOjkscmVzZXRTdGFjazohMH0se2lkOiJmbGV4MSIsbWluOjExLHJlc2V0U3RhY2s6ITB9XTtjbGFzcyBDRkZQYXJzZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuYnl0ZXM9ZS5nZXRCeXRlcygpO3RoaXMucHJvcGVydGllcz10O3RoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIWF9cGFyc2UoKXtjb25zdCBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBDRkY7dGhpcy5jZmY9dDtjb25zdCBhPXRoaXMucGFyc2VIZWFkZXIoKSxyPXRoaXMucGFyc2VJbmRleChhLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgoci5lbmRQb3MpLG49dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxzPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcyksbz10aGlzLnBhcnNlRGljdChpLm9iai5nZXQoMCkpLGM9dGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3Qsbyx0LnN0cmluZ3MpO3QuaGVhZGVyPWEub2JqO3QubmFtZXM9dGhpcy5wYXJzZU5hbWVJbmRleChyLm9iaik7dC5zdHJpbmdzPXRoaXMucGFyc2VTdHJpbmdJbmRleChuLm9iaik7dC50b3BEaWN0PWM7dC5nbG9iYWxTdWJySW5kZXg9cy5vYmo7dGhpcy5wYXJzZVByaXZhdGVEaWN0KHQudG9wRGljdCk7dC5pc0NJREZvbnQ9Yy5oYXNOYW1lKCJST1MiKTtjb25zdCBsPWMuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGg9dGhpcy5wYXJzZUluZGV4KGwpLm9iaix1PWMuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7dSYmKGUuZm9udE1hdHJpeD11KTtjb25zdCBkPWMuZ2V0QnlOYW1lKCJGb250QkJveCIpO2lmKGQpe2UuYXNjZW50PU1hdGgubWF4KGRbM10sZFsxXSk7ZS5kZXNjZW50PU1hdGgubWluKGRbMV0sZFszXSk7ZS5hc2NlbnRTY2FsZWQ9ITB9bGV0IGYsZztpZih0LmlzQ0lERm9udCl7Y29uc3QgZT10aGlzLnBhcnNlSW5kZXgoYy5nZXRCeU5hbWUoIkZEQXJyYXkiKSkub2JqO2ZvcihsZXQgYT0wLHI9ZS5jb3VudDthPHI7KythKXtjb25zdCByPWUuZ2V0KGEpLGk9dGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3QsdGhpcy5wYXJzZURpY3QociksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoaSk7dC5mZEFycmF5LnB1c2goaSl9Zz1udWxsO2Y9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksaC5jb3VudCx0LnN0cmluZ3MsITApO3QuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGguY291bnQpfWVsc2V7Zj10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxoLmNvdW50LHQuc3RyaW5ncywhMSk7Zz10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MsZi5jaGFyc2V0KX10LmNoYXJzZXQ9Zjt0LmVuY29kaW5nPWc7Y29uc3QgcD10aGlzLnBhcnNlQ2hhclN0cmluZ3Moe2NoYXJTdHJpbmdzOmgsbG9jYWxTdWJySW5kZXg6Yy5wcml2YXRlRGljdC5zdWJyc0luZGV4LGdsb2JhbFN1YnJJbmRleDpzLm9iaixmZFNlbGVjdDp0LmZkU2VsZWN0LGZkQXJyYXk6dC5mZEFycmF5LHByaXZhdGVEaWN0OmMucHJpdmF0ZURpY3R9KTt0LmNoYXJTdHJpbmdzPXAuY2hhclN0cmluZ3M7dC5zZWFjcz1wLnNlYWNzO3Qud2lkdGhzPXAud2lkdGhzO3JldHVybiB0fXBhcnNlSGVhZGVyKCl7bGV0IGU9dGhpcy5ieXRlcztjb25zdCB0PWUubGVuZ3RoO2xldCBhPTA7Zm9yKDthPHQmJjEhPT1lW2FdOykrK2E7aWYoYT49dCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgQ0ZGIGhlYWRlciIpO2lmKDAhPT1hKXtpbmZvKCJjZmYgZGF0YSBpcyBzaGlmdGVkIik7ZT1lLnN1YmFycmF5KGEpO3RoaXMuYnl0ZXM9ZX1jb25zdCByPWVbMF0saT1lWzFdLG49ZVsyXSxzPWVbM107cmV0dXJue29iajpuZXcgQ0ZGSGVhZGVyKHIsaSxuLHMpLGVuZFBvczpufX1wYXJzZURpY3QoZSl7bGV0IHQ9MDtmdW5jdGlvbiBwYXJzZU9wZXJhbmQoKXtsZXQgYT1lW3QrK107aWYoMzA9PT1hKXJldHVybiBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpe2xldCBhPSIiO2NvbnN0IHI9MTUsaT1bIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIuIiwiRSIsIkUtIixudWxsLCItIl0sbj1lLmxlbmd0aDtmb3IoO3Q8bjspe2NvbnN0IG49ZVt0KytdLHM9bj4+NCxvPTE1Jm47aWYocz09PXIpYnJlYWs7YSs9aVtzXTtpZihvPT09cilicmVhazthKz1pW29dfXJldHVybiBwYXJzZUZsb2F0KGEpfSgpO2lmKDI4PT09YSl7YT1yZWFkSW50MTYoZSx0KTt0Kz0yO3JldHVybiBhfWlmKDI5PT09YSl7YT1lW3QrK107YT1hPDw4fGVbdCsrXTthPWE8PDh8ZVt0KytdO2E9YTw8OHxlW3QrK107cmV0dXJuIGF9aWYoYT49MzImJmE8PTI0NilyZXR1cm4gYS0xMzk7aWYoYT49MjQ3JiZhPD0yNTApcmV0dXJuIDI1NiooYS0yNDcpK2VbdCsrXSsxMDg7aWYoYT49MjUxJiZhPD0yNTQpcmV0dXJuLTI1NiooYS0yNTEpLWVbdCsrXS0xMDg7d2FybignQ0ZGUGFyc2VyX3BhcnNlRGljdDogIicrYSsnIiBpcyBhIHJlc2VydmVkIGNvbW1hbmQuJyk7cmV0dXJuIE5hTn1sZXQgYT1bXTtjb25zdCByPVtdO3Q9MDtjb25zdCBpPWUubGVuZ3RoO2Zvcig7dDxpOyl7bGV0IGk9ZVt0XTtpZihpPD0yMSl7MTI9PT1pJiYoaT1pPDw4fGVbKyt0XSk7ci5wdXNoKFtpLGFdKTthPVtdOysrdH1lbHNlIGEucHVzaChwYXJzZU9wZXJhbmQoKSl9cmV0dXJuIHJ9cGFyc2VJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleCxhPXRoaXMuYnl0ZXMscj1hW2UrK108PDh8YVtlKytdLGk9W107bGV0IG4scyxvPWU7aWYoMCE9PXIpe2NvbnN0IHQ9YVtlKytdLGM9ZSsocisxKSp0LTE7Zm9yKG49MCxzPXIrMTtuPHM7KytuKXtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8dDsrK2kpe3I8PD04O3IrPWFbZSsrXX1pLnB1c2goYytyKX1vPWlbcl19Zm9yKG49MCxzPWkubGVuZ3RoLTE7bjxzOysrbil7Y29uc3QgZT1pW25dLHI9aVtuKzFdO3QuYWRkKGEuc3ViYXJyYXkoZSxyKSl9cmV0dXJue29iajp0LGVuZFBvczpvfX1wYXJzZU5hbWVJbmRleChlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wLHI9ZS5jb3VudDthPHI7KythKXtjb25zdCByPWUuZ2V0KGEpO3QucHVzaChieXRlc1RvU3RyaW5nKHIpKX1yZXR1cm4gdH1wYXJzZVN0cmluZ0luZGV4KGUpe2NvbnN0IHQ9bmV3IENGRlN0cmluZ3M7Zm9yKGxldCBhPTAscj1lLmNvdW50O2E8cjsrK2Epe2NvbnN0IHI9ZS5nZXQoYSk7dC5hZGQoYnl0ZXNUb1N0cmluZyhyKSl9cmV0dXJuIHR9Y3JlYXRlRGljdChlLHQsYSl7Y29uc3Qgcj1uZXcgZShhKTtmb3IoY29uc3RbZSxhXW9mIHQpci5zZXRCeUtleShlLGEpO3JldHVybiByfXBhcnNlQ2hhclN0cmluZyhlLHQsYSxyKXtpZighdHx8ZS5jYWxsRGVwdGg+MTApcmV0dXJuITE7bGV0IGk9ZS5zdGFja1NpemU7Y29uc3Qgbj1lLnN0YWNrO2xldCBzPXQubGVuZ3RoO2ZvcihsZXQgbz0wO288czspe2NvbnN0IGM9dFtvKytdO2xldCBsPW51bGw7aWYoMTI9PT1jKXtjb25zdCBlPXRbbysrXTtpZigwPT09ZSl7dFtvLTJdPTEzOTt0W28tMV09MjI7aT0wfWVsc2UgbD1ScltlXX1lbHNlIGlmKDI4PT09Yyl7bltpXT1yZWFkSW50MTYodCxvKTtvKz0yO2krK31lbHNlIGlmKDE0PT09Yyl7aWYoaT49NCl7aS09NDtpZih0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpe2Uuc2VhYz1uLnNsaWNlKGksaSs0KTtyZXR1cm4hMX19bD1EcltjXX1lbHNlIGlmKGM+PTMyJiZjPD0yNDYpe25baV09Yy0xMzk7aSsrfWVsc2UgaWYoYz49MjQ3JiZjPD0yNTQpe25baV09YzwyNTE/KGMtMjQ3PDw4KSt0W29dKzEwODotKGMtMjUxPDw4KS10W29dLTEwODtvKys7aSsrfWVsc2UgaWYoMjU1PT09Yyl7bltpXT0odFtvXTw8MjR8dFtvKzFdPDwxNnx0W28rMl08PDh8dFtvKzNdKS82NTUzNjtvKz00O2krK31lbHNlIGlmKDE5PT09Y3x8MjA9PT1jKXtlLmhpbnRzKz1pPj4xO2lmKDA9PT1lLmhpbnRzKXt0LmNvcHlXaXRoaW4oby0xLG8sLTEpO28tPTE7cy09MTtjb250aW51ZX1vKz1lLmhpbnRzKzc+PjM7aSU9MjtsPURyW2NdfWVsc2V7aWYoMTA9PT1jfHwyOT09PWMpe2NvbnN0IHQ9MTA9PT1jP2E6cjtpZighdCl7bD1EcltjXTt3YXJuKCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yICIrbC5pZCk7cmV0dXJuITF9bGV0IHM9MzI3Njg7dC5jb3VudDwxMjQwP3M9MTA3OnQuY291bnQ8MzM5MDAmJihzPTExMzEpO2NvbnN0IG89blstLWldK3M7aWYobzwwfHxvPj10LmNvdW50fHxpc05hTihvKSl7bD1EcltjXTt3YXJuKCJPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgIitsLmlkKTtyZXR1cm4hMX1lLnN0YWNrU2l6ZT1pO2UuY2FsbERlcHRoKys7aWYoIXRoaXMucGFyc2VDaGFyU3RyaW5nKGUsdC5nZXQobyksYSxyKSlyZXR1cm4hMTtlLmNhbGxEZXB0aC0tO2k9ZS5zdGFja1NpemU7Y29udGludWV9aWYoMTE9PT1jKXtlLnN0YWNrU2l6ZT1pO3JldHVybiEwfWlmKDA9PT1jJiZvPT09dC5sZW5ndGgpe3Rbby0xXT0xNDtsPURyWzE0XX1lbHNle2lmKDk9PT1jKXt0LmNvcHlXaXRoaW4oby0xLG8sLTEpO28tPTE7cy09MTtjb250aW51ZX1sPURyW2NdfX1pZihsKXtpZihsLnN0ZW0pe2UuaGludHMrPWk+PjE7aWYoMz09PWN8fDIzPT09YyllLmhhc1ZTdGVtcz0hMDtlbHNlIGlmKGUuaGFzVlN0ZW1zJiYoMT09PWN8fDE4PT09Yykpe3dhcm4oIkNGRiBzdGVtIGhpbnRzIGFyZSBpbiB3cm9uZyBvcmRlciIpO3Rbby0xXT0xPT09Yz8zOjIzfX1pZigibWluImluIGwmJiFlLnVuZGVmU3RhY2smJmk8bC5taW4pe3dhcm4oIk5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIitsLmlkKyI7IGFjdHVhbDogIitpKyIsIGV4cGVjdGVkOiAiK2wubWluKTtpZigwPT09aSl7dFtvLTFdPTE0O3JldHVybiEwfXJldHVybiExfWlmKGUuZmlyc3RTdGFja0NsZWFyaW5nJiZsLnN0YWNrQ2xlYXJpbmcpe2UuZmlyc3RTdGFja0NsZWFyaW5nPSExO2ktPWwubWluO2k+PTImJmwuc3RlbT9pJT0yOmk+MSYmd2FybigiRm91bmQgdG9vIG1hbnkgcGFyYW1ldGVycyBmb3Igc3RhY2stY2xlYXJpbmcgY29tbWFuZCIpO2k+MCYmKGUud2lkdGg9bltpLTFdKX1pZigic3RhY2tEZWx0YSJpbiBsKXsic3RhY2tGbiJpbiBsJiZsLnN0YWNrRm4obixpKTtpKz1sLnN0YWNrRGVsdGF9ZWxzZSBpZihsLnN0YWNrQ2xlYXJpbmcpaT0wO2Vsc2UgaWYobC5yZXNldFN0YWNrKXtpPTA7ZS51bmRlZlN0YWNrPSExfWVsc2UgaWYobC51bmRlZlN0YWNrKXtpPTA7ZS51bmRlZlN0YWNrPSEwO2UuZmlyc3RTdGFja0NsZWFyaW5nPSExfX19czx0Lmxlbmd0aCYmdC5maWxsKDE0LHMpO2Uuc3RhY2tTaXplPWk7cmV0dXJuITB9cGFyc2VDaGFyU3RyaW5ncyh7Y2hhclN0cmluZ3M6ZSxsb2NhbFN1YnJJbmRleDp0LGdsb2JhbFN1YnJJbmRleDphLGZkU2VsZWN0OnIsZmRBcnJheTppLHByaXZhdGVEaWN0Om59KXtjb25zdCBzPVtdLG89W10sYz1lLmNvdW50O2ZvcihsZXQgbD0wO2w8YztsKyspe2NvbnN0IGM9ZS5nZXQobCksaD17Y2FsbERlcHRoOjAsc3RhY2tTaXplOjAsc3RhY2s6W10sdW5kZWZTdGFjazohMCxoaW50czowLGZpcnN0U3RhY2tDbGVhcmluZzohMCxzZWFjOm51bGwsd2lkdGg6bnVsbCxoYXNWU3RlbXM6ITF9O2xldCB1PSEwLGQ9bnVsbCxmPW47aWYociYmaS5sZW5ndGgpe2NvbnN0IGU9ci5nZXRGREluZGV4KGwpO2lmKC0xPT09ZSl7d2FybigiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKTt1PSExfWlmKGU+PWkubGVuZ3RoKXt3YXJuKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKTt1PSExfWlmKHUpe2Y9aVtlXS5wcml2YXRlRGljdDtkPWYuc3VicnNJbmRleH19ZWxzZSB0JiYoZD10KTt1JiYodT10aGlzLnBhcnNlQ2hhclN0cmluZyhoLGMsZCxhKSk7aWYobnVsbCE9PWgud2lkdGgpe2NvbnN0IGU9Zi5nZXRCeU5hbWUoIm5vbWluYWxXaWR0aFgiKTtvW2xdPWUraC53aWR0aH1lbHNle2NvbnN0IGU9Zi5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTtvW2xdPWV9bnVsbCE9PWguc2VhYyYmKHNbbF09aC5zZWFjKTt1fHxlLnNldChsLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6ZSxzZWFjczpzLHdpZHRoczpvfX1lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpe2NvbnN0IHQ9dGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSk7ZS5wcml2YXRlRGljdD10fXBhcnNlUHJpdmF0ZURpY3QoZSl7aWYoIWUuaGFzTmFtZSgiUHJpdmF0ZSIpKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IHQ9ZS5nZXRCeU5hbWUoIlByaXZhdGUiKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RoKXtlLnJlbW92ZUJ5TmFtZSgiUHJpdmF0ZSIpO3JldHVybn1jb25zdCBhPXRbMF0scj10WzFdO2lmKDA9PT1hfHxyPj10aGlzLmJ5dGVzLmxlbmd0aCl7dGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO3JldHVybn1jb25zdCBpPXIrYSxuPXRoaXMuYnl0ZXMuc3ViYXJyYXkocixpKSxzPXRoaXMucGFyc2VEaWN0KG4pLG89dGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LHMsZS5zdHJpbmdzKTtlLnByaXZhdGVEaWN0PW87MD09PW8uZ2V0QnlOYW1lKCJFeHBhbnNpb25GYWN0b3IiKSYmby5zZXRCeU5hbWUoIkV4cGFuc2lvbkZhY3RvciIsLjA2KTtpZighby5nZXRCeU5hbWUoIlN1YnJzIikpcmV0dXJuO2NvbnN0IGM9by5nZXRCeU5hbWUoIlN1YnJzIiksbD1yK2M7aWYoMD09PWN8fGw+PXRoaXMuYnl0ZXMubGVuZ3RoKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IGg9dGhpcy5wYXJzZUluZGV4KGwpO28uc3VicnNJbmRleD1oLm9ian1wYXJzZUNoYXJzZXRzKGUsdCxhLHIpe2lmKDA9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxQci5JU09fQURPQkUsRnIpO2lmKDE9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxQci5FWFBFUlQsSXIpO2lmKDI9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxQci5FWFBFUlRfU1VCU0VULFRyKTtjb25zdCBpPXRoaXMuYnl0ZXMsbj1lLHM9aVtlKytdLG89W3I/MDoiLm5vdGRlZiJdO2xldCBjLGwsaDt0LT0xO3N3aXRjaChzKXtjYXNlIDA6Zm9yKGg9MDtoPHQ7aCsrKXtjPWlbZSsrXTw8OHxpW2UrK107by5wdXNoKHI/YzphLmdldChjKSl9YnJlYWs7Y2FzZSAxOmZvcig7by5sZW5ndGg8PXQ7KXtjPWlbZSsrXTw8OHxpW2UrK107bD1pW2UrK107Zm9yKGg9MDtoPD1sO2grKylvLnB1c2gocj9jKys6YS5nZXQoYysrKSl9YnJlYWs7Y2FzZSAyOmZvcig7by5sZW5ndGg8PXQ7KXtjPWlbZSsrXTw8OHxpW2UrK107bD1pW2UrK108PDh8aVtlKytdO2ZvcihoPTA7aDw9bDtoKyspby5wdXNoKHI/YysrOmEuZ2V0KGMrKykpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIGNoYXJzZXQgZm9ybWF0Iil9Y29uc3QgdT1lLGQ9aS5zdWJhcnJheShuLHUpO3JldHVybiBuZXcgQ0ZGQ2hhcnNldCghMSxzLG8sZCl9cGFyc2VFbmNvZGluZyhlLHQsYSxyKXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCksbj10aGlzLmJ5dGVzO2xldCBzLG8sYyxsPSExLGg9bnVsbDtpZigwPT09ZXx8MT09PWUpe2w9ITA7cz1lO2NvbnN0IHQ9ZT9zcjpscjtmb3Iobz0wLGM9ci5sZW5ndGg7bzxjO28rKyl7Y29uc3QgZT10LmluZGV4T2YocltvXSk7LTEhPT1lJiYoaVtlXT1vKX19ZWxzZXtjb25zdCB0PWU7cz1uW2UrK107c3dpdGNoKDEyNyZzKXtjYXNlIDA6Y29uc3QgdD1uW2UrK107Zm9yKG89MTtvPD10O28rKylpW25bZSsrXV09bzticmVhaztjYXNlIDE6Y29uc3QgYT1uW2UrK107bGV0IHI9MTtmb3Iobz0wO288YTtvKyspe2NvbnN0IHQ9bltlKytdLGE9bltlKytdO2ZvcihsZXQgZT10O2U8PXQrYTtlKyspaVtlXT1yKyt9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVua25vd24gZW5jb2RpbmcgZm9ybWF0OiAke3N9IGluIENGRmApfWNvbnN0IGM9ZTtpZigxMjgmcyl7blt0XSY9MTI3OyFmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpe2NvbnN0IHQ9bltlKytdO2ZvcihvPTA7bzx0O28rKyl7Y29uc3QgdD1uW2UrK10scz0obltlKytdPDw4KSsoMjU1Jm5bZSsrXSk7aVt0XT1yLmluZGV4T2YoYS5nZXQocykpfX0oKX1oPW4uc3ViYXJyYXkodCxjKX1zJj0xMjc7cmV0dXJuIG5ldyBDRkZFbmNvZGluZyhsLHMsaSxoKX1wYXJzZUZEU2VsZWN0KGUsdCl7Y29uc3QgYT10aGlzLmJ5dGVzLHI9YVtlKytdLGk9W107bGV0IG47c3dpdGNoKHIpe2Nhc2UgMDpmb3Iobj0wO248dDsrK24pe2NvbnN0IHQ9YVtlKytdO2kucHVzaCh0KX1icmVhaztjYXNlIDM6Y29uc3Qgcz1hW2UrK108PDh8YVtlKytdO2ZvcihuPTA7bjxzOysrbil7bGV0IHQ9YVtlKytdPDw4fGFbZSsrXTtpZigwPT09biYmMCE9PXQpe3dhcm4oInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKTt0PTB9Y29uc3Qgcj1hW2UrK10scz1hW2VdPDw4fGFbZSsxXTtmb3IobGV0IGU9dDtlPHM7KytlKWkucHVzaChyKX1lKz0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJHtyfSIuYCl9aWYoaS5sZW5ndGghPT10KXRocm93IG5ldyBGb3JtYXRFcnJvcigicGFyc2VGRFNlbGVjdDogSW52YWxpZCBmb250IGRhdGEuIik7cmV0dXJuIG5ldyBDRkZGRFNlbGVjdChyLGkpfX1jbGFzcyBDRkZ7Y29uc3RydWN0b3IoKXt0aGlzLmhlYWRlcj1udWxsO3RoaXMubmFtZXM9W107dGhpcy50b3BEaWN0PW51bGw7dGhpcy5zdHJpbmdzPW5ldyBDRkZTdHJpbmdzO3RoaXMuZ2xvYmFsU3VickluZGV4PW51bGw7dGhpcy5lbmNvZGluZz1udWxsO3RoaXMuY2hhcnNldD1udWxsO3RoaXMuY2hhclN0cmluZ3M9bnVsbDt0aGlzLmZkQXJyYXk9W107dGhpcy5mZFNlbGVjdD1udWxsO3RoaXMuaXNDSURGb250PSExfWR1cGxpY2F0ZUZpcnN0R2x5cGgoKXtpZih0aGlzLmNoYXJTdHJpbmdzLmNvdW50Pj02NTUzNSl7d2FybigiTm90IGVub3VnaCBzcGFjZSBpbiBjaGFyc3RyaW5ncyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIik7cmV0dXJufWNvbnN0IGU9dGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7dGhpcy5jaGFyU3RyaW5ncy5hZGQoZSk7dGhpcy5pc0NJREZvbnQmJnRoaXMuZmRTZWxlY3QuZmRTZWxlY3QucHVzaCh0aGlzLmZkU2VsZWN0LmZkU2VsZWN0WzBdKX1oYXNHbHlwaElkKGUpe2lmKGU8MHx8ZT49dGhpcy5jaGFyU3RyaW5ncy5jb3VudClyZXR1cm4hMTtyZXR1cm4gdGhpcy5jaGFyU3RyaW5ncy5nZXQoZSkubGVuZ3RoPjB9fWNsYXNzIENGRkhlYWRlcntjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLm1ham9yPWU7dGhpcy5taW5vcj10O3RoaXMuaGRyU2l6ZT1hO3RoaXMub2ZmU2l6ZT1yfX1jbGFzcyBDRkZTdHJpbmdze2NvbnN0cnVjdG9yKCl7dGhpcy5zdHJpbmdzPVtdfWdldChlKXtyZXR1cm4gZT49MCYmZTw9MzkwP09yW2VdOmUtTXI8PXRoaXMuc3RyaW5ncy5sZW5ndGg/dGhpcy5zdHJpbmdzW2UtTXJdOk9yWzBdfWdldFNJRChlKXtsZXQgdD1Pci5pbmRleE9mKGUpO2lmKC0xIT09dClyZXR1cm4gdDt0PXRoaXMuc3RyaW5ncy5pbmRleE9mKGUpO3JldHVybi0xIT09dD90K01yOi0xfWFkZChlKXt0aGlzLnN0cmluZ3MucHVzaChlKX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5zdHJpbmdzLmxlbmd0aH19Y2xhc3MgQ0ZGSW5kZXh7Y29uc3RydWN0b3IoKXt0aGlzLm9iamVjdHM9W107dGhpcy5sZW5ndGg9MH1hZGQoZSl7dGhpcy5sZW5ndGgrPWUubGVuZ3RoO3RoaXMub2JqZWN0cy5wdXNoKGUpfXNldChlLHQpe3RoaXMubGVuZ3RoKz10Lmxlbmd0aC10aGlzLm9iamVjdHNbZV0ubGVuZ3RoO3RoaXMub2JqZWN0c1tlXT10fWdldChlKXtyZXR1cm4gdGhpcy5vYmplY3RzW2VdfWdldCBjb3VudCgpe3JldHVybiB0aGlzLm9iamVjdHMubGVuZ3RofX1jbGFzcyBDRkZEaWN0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5rZXlUb05hbWVNYXA9ZS5rZXlUb05hbWVNYXA7dGhpcy5uYW1lVG9LZXlNYXA9ZS5uYW1lVG9LZXlNYXA7dGhpcy5kZWZhdWx0cz1lLmRlZmF1bHRzO3RoaXMudHlwZXM9ZS50eXBlczt0aGlzLm9wY29kZXM9ZS5vcGNvZGVzO3RoaXMub3JkZXI9ZS5vcmRlcjt0aGlzLnN0cmluZ3M9dDt0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXNldEJ5S2V5KGUsdCl7aWYoIShlIGluIHRoaXMua2V5VG9OYW1lTWFwKSlyZXR1cm4hMTtpZigwPT09dC5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0IGEgb2YgdClpZihpc05hTihhKSl7d2FybihgSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJHt0fSIgZm9yIGtleSAiJHtlfSIuYCk7cmV0dXJuITB9Y29uc3QgYT10aGlzLnR5cGVzW2VdOyJudW0iIT09YSYmInNpZCIhPT1hJiYib2Zmc2V0IiE9PWF8fCh0PXRbMF0pO3RoaXMudmFsdWVzW2VdPXQ7cmV0dXJuITB9c2V0QnlOYW1lKGUsdCl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgZGljdGlvbmFyeSBuYW1lICIke2V9ImApO3RoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW2VdXT10fWhhc05hbWUoZSl7cmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW2VdaW4gdGhpcy52YWx1ZXN9Z2V0QnlOYW1lKGUpe2lmKCEoZSBpbiB0aGlzLm5hbWVUb0tleU1hcCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAke2V9ImApO2NvbnN0IHQ9dGhpcy5uYW1lVG9LZXlNYXBbZV07cmV0dXJuIHQgaW4gdGhpcy52YWx1ZXM/dGhpcy52YWx1ZXNbdF06dGhpcy5kZWZhdWx0c1t0XX1yZW1vdmVCeU5hbWUoZSl7ZGVsZXRlIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW2VdXX1zdGF0aWMgY3JlYXRlVGFibGVzKGUpe2NvbnN0IHQ9e2tleVRvTmFtZU1hcDp7fSxuYW1lVG9LZXlNYXA6e30sZGVmYXVsdHM6e30sdHlwZXM6e30sb3Bjb2Rlczp7fSxvcmRlcjpbXX07Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1BcnJheS5pc0FycmF5KGFbMF0pPyhhWzBdWzBdPDw4KSthWzBdWzFdOmFbMF07dC5rZXlUb05hbWVNYXBbZV09YVsxXTt0Lm5hbWVUb0tleU1hcFthWzFdXT1lO3QudHlwZXNbZV09YVsyXTt0LmRlZmF1bHRzW2VdPWFbM107dC5vcGNvZGVzW2VdPUFycmF5LmlzQXJyYXkoYVswXSk/YVswXTpbYVswXV07dC5vcmRlci5wdXNoKGUpfXJldHVybiB0fX1jb25zdCBOcj1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dO2NsYXNzIENGRlRvcERpY3QgZXh0ZW5kcyBDRkZEaWN0e3N0YXRpYyBnZXQgdGFibGVzKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKE5yKSl9Y29uc3RydWN0b3IoZSl7c3VwZXIoQ0ZGVG9wRGljdC50YWJsZXMsZSk7dGhpcy5wcml2YXRlRGljdD1udWxsfX1jb25zdCBFcj1bWzYsIkJsdWVWYWx1ZXMiLCJkZWx0YSIsbnVsbF0sWzcsIk90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzgsIkZhbWlseUJsdWVzIiwiZGVsdGEiLG51bGxdLFs5LCJGYW1pbHlPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFtbMTIsOV0sIkJsdWVTY2FsZSIsIm51bSIsLjAzOTYyNV0sW1sxMiwxMF0sIkJsdWVTaGlmdCIsIm51bSIsN10sW1sxMiwxMV0sIkJsdWVGdXp6IiwibnVtIiwxXSxbMTAsIlN0ZEhXIiwibnVtIixudWxsXSxbMTEsIlN0ZFZXIiwibnVtIixudWxsXSxbWzEyLDEyXSwiU3RlbVNuYXBIIiwiZGVsdGEiLG51bGxdLFtbMTIsMTNdLCJTdGVtU25hcFYiLCJkZWx0YSIsbnVsbF0sW1sxMiwxNF0sIkZvcmNlQm9sZCIsIm51bSIsMF0sW1sxMiwxN10sIkxhbmd1YWdlR3JvdXAiLCJudW0iLDBdLFtbMTIsMThdLCJFeHBhbnNpb25GYWN0b3IiLCJudW0iLC4wNl0sW1sxMiwxOV0sImluaXRpYWxSYW5kb21TZWVkIiwibnVtIiwwXSxbMjAsImRlZmF1bHRXaWR0aFgiLCJudW0iLDBdLFsyMSwibm9taW5hbFdpZHRoWCIsIm51bSIsMF0sWzE5LCJTdWJycyIsIm9mZnNldCIsbnVsbF1dO2NsYXNzIENGRlByaXZhdGVEaWN0IGV4dGVuZHMgQ0ZGRGljdHtzdGF0aWMgZ2V0IHRhYmxlcygpe3JldHVybiBzaGFkb3codGhpcywidGFibGVzIix0aGlzLmNyZWF0ZVRhYmxlcyhFcikpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKENGRlByaXZhdGVEaWN0LnRhYmxlcyxlKTt0aGlzLnN1YnJzSW5kZXg9bnVsbH19Y29uc3QgUHI9e0lTT19BRE9CRTowLEVYUEVSVDoxLEVYUEVSVF9TVUJTRVQ6Mn07Y2xhc3MgQ0ZGQ2hhcnNldHtjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLnByZWRlZmluZWQ9ZTt0aGlzLmZvcm1hdD10O3RoaXMuY2hhcnNldD1hO3RoaXMucmF3PXJ9fWNsYXNzIENGRkVuY29kaW5ne2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMucHJlZGVmaW5lZD1lO3RoaXMuZm9ybWF0PXQ7dGhpcy5lbmNvZGluZz1hO3RoaXMucmF3PXJ9fWNsYXNzIENGRkZEU2VsZWN0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mb3JtYXQ9ZTt0aGlzLmZkU2VsZWN0PXR9Z2V0RkRJbmRleChlKXtyZXR1cm4gZTwwfHxlPj10aGlzLmZkU2VsZWN0Lmxlbmd0aD8tMTp0aGlzLmZkU2VsZWN0W2VdfX1jbGFzcyBDRkZPZmZzZXRUcmFja2Vye2NvbnN0cnVjdG9yKCl7dGhpcy5vZmZzZXRzPU9iamVjdC5jcmVhdGUobnVsbCl9aXNUcmFja2luZyhlKXtyZXR1cm4gZSBpbiB0aGlzLm9mZnNldHN9dHJhY2soZSx0KXtpZihlIGluIHRoaXMub2Zmc2V0cyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO3RoaXMub2Zmc2V0c1tlXT10fW9mZnNldChlKXtmb3IoY29uc3QgdCBpbiB0aGlzLm9mZnNldHMpdGhpcy5vZmZzZXRzW3RdKz1lfXNldEVudHJ5TG9jYXRpb24oZSx0LGEpe2lmKCEoZSBpbiB0aGlzLm9mZnNldHMpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgTm90IHRyYWNraW5nIGxvY2F0aW9uIG9mICR7ZX1gKTtjb25zdCByPWEuZGF0YSxpPXRoaXMub2Zmc2V0c1tlXTtmb3IobGV0IGU9MCxhPXQubGVuZ3RoO2U8YTsrK2Upe2NvbnN0IGE9NSplK2ksbj1hKzEscz1hKzIsbz1hKzMsYz1hKzQ7aWYoMjkhPT1yW2FdfHwwIT09cltuXXx8MCE9PXJbc118fDAhPT1yW29dfHwwIT09cltjXSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIndyaXRpbmcgdG8gYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGVtcHR5Iik7Y29uc3QgbD10W2VdO3JbYV09Mjk7cltuXT1sPj4yNCYyNTU7cltzXT1sPj4xNiYyNTU7cltvXT1sPj44JjI1NTtyW2NdPTI1NSZsfX19Y2xhc3MgQ0ZGQ29tcGlsZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5jZmY9ZX1jb21waWxlKCl7Y29uc3QgZT10aGlzLmNmZix0PXtkYXRhOltdLGxlbmd0aDowLGFkZChlKXt0cnl7dGhpcy5kYXRhLnB1c2goLi4uZSl9Y2F0Y2h7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSl9dGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LGE9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChhKTtjb25zdCByPXRoaXMuY29tcGlsZU5hbWVJbmRleChlLm5hbWVzKTt0LmFkZChyKTtpZihlLmlzQ0lERm9udCYmZS50b3BEaWN0Lmhhc05hbWUoIkZvbnRNYXRyaXgiKSl7Y29uc3QgdD1lLnRvcERpY3QuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7ZS50b3BEaWN0LnJlbW92ZUJ5TmFtZSgiRm9udE1hdHJpeCIpO2Zvcihjb25zdCBhIG9mIGUuZmRBcnJheSl7bGV0IGU9dC5zbGljZSgwKTthLmhhc05hbWUoIkZvbnRNYXRyaXgiKSYmKGU9VXRpbC50cmFuc2Zvcm0oZSxhLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpKSk7YS5zZXRCeU5hbWUoIkZvbnRNYXRyaXgiLGUpfX1jb25zdCBpPWUudG9wRGljdC5nZXRCeU5hbWUoIlhVSUQiKTtpPy5sZW5ndGg+MTYmJmUudG9wRGljdC5yZW1vdmVCeU5hbWUoIlhVSUQiKTtlLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTtsZXQgbj10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQobi5vdXRwdXQpO2NvbnN0IHM9bi50cmFja2Vyc1swXSxvPXRoaXMuY29tcGlsZVN0cmluZ0luZGV4KGUuc3RyaW5ncy5zdHJpbmdzKTt0LmFkZChvKTtjb25zdCBjPXRoaXMuY29tcGlsZUluZGV4KGUuZ2xvYmFsU3VickluZGV4KTt0LmFkZChjKTtpZihlLmVuY29kaW5nJiZlLnRvcERpY3QuaGFzTmFtZSgiRW5jb2RpbmciKSlpZihlLmVuY29kaW5nLnByZWRlZmluZWQpcy5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW2UuZW5jb2RpbmcuZm9ybWF0XSx0KTtlbHNle2NvbnN0IGE9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7cy5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KTt0LmFkZChhKX1jb25zdCBsPXRoaXMuY29tcGlsZUNoYXJzZXQoZS5jaGFyc2V0LGUuY2hhclN0cmluZ3MuY291bnQsZS5zdHJpbmdzLGUuaXNDSURGb250KTtzLnNldEVudHJ5TG9jYXRpb24oImNoYXJzZXQiLFt0Lmxlbmd0aF0sdCk7dC5hZGQobCk7Y29uc3QgaD10aGlzLmNvbXBpbGVDaGFyU3RyaW5ncyhlLmNoYXJTdHJpbmdzKTtzLnNldEVudHJ5TG9jYXRpb24oIkNoYXJTdHJpbmdzIixbdC5sZW5ndGhdLHQpO3QuYWRkKGgpO2lmKGUuaXNDSURGb250KXtzLnNldEVudHJ5TG9jYXRpb24oIkZEU2VsZWN0IixbdC5sZW5ndGhdLHQpO2NvbnN0IGE9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQoYSk7bj10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApO3Muc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KTt0LmFkZChuLm91dHB1dCk7Y29uc3Qgcj1uLnRyYWNrZXJzO3RoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhlLmZkQXJyYXkscix0KX10aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2UudG9wRGljdF0sW3NdLHQpO3QuYWRkKFswXSk7cmV0dXJuIHQuZGF0YX1lbmNvZGVOdW1iZXIoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSk/dGhpcy5lbmNvZGVJbnRlZ2VyKGUpOnRoaXMuZW5jb2RlRmxvYXQoZSl9c3RhdGljIGdldCBFbmNvZGVGbG9hdFJlZ0V4cCgpe3JldHVybiBzaGFkb3codGhpcywiRW5jb2RlRmxvYXRSZWdFeHAiLC9cLihcZCo/KSg/Ojl7NSwyMH18MHs1LDIwfSlcZHswLDJ9KD86ZSguKyl8JCkvKX1lbmNvZGVGbG9hdChlKXtsZXQgdD1lLnRvU3RyaW5nKCk7Y29uc3QgYT1DRkZDb21waWxlci5FbmNvZGVGbG9hdFJlZ0V4cC5leGVjKHQpO2lmKGEpe2NvbnN0IHI9cGFyc2VGbG9hdCgiMWUiKygoYVsyXT8rYVsyXTowKSthWzFdLmxlbmd0aCkpO3Q9KE1hdGgucm91bmQoZSpyKS9yKS50b1N0cmluZygpfWxldCByLGksbj0iIjtmb3Iocj0wLGk9dC5sZW5ndGg7cjxpOysrcil7Y29uc3QgZT10W3JdO24rPSJlIj09PWU/Ii0iPT09dFsrK3JdPyJjIjoiYiI6Ii4iPT09ZT8iYSI6Ii0iPT09ZT8iZSI6ZX1uKz0xJm4ubGVuZ3RoPyJmIjoiZmYiO2NvbnN0IHM9WzMwXTtmb3Iocj0wLGk9bi5sZW5ndGg7cjxpO3IrPTIpcy5wdXNoKHBhcnNlSW50KG4uc3Vic3RyaW5nKHIscisyKSwxNikpO3JldHVybiBzfWVuY29kZUludGVnZXIoZSl7bGV0IHQ7dD1lPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXTtyZXR1cm4gdH1jb21waWxlSGVhZGVyKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfWNvbXBpbGVOYW1lSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1NYXRoLm1pbihhLmxlbmd0aCwxMjcpO2xldCByPW5ldyBBcnJheShlKTtmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgZT1hW3RdOyhlPCIhInx8ZT4ifiJ8fCJbIj09PWV8fCJdIj09PWV8fCIoIj09PWV8fCIpIj09PWV8fCJ7Ij09PWV8fCJ9Ij09PWV8fCI8Ij09PWV8fCI+Ij09PWV8fCIvIj09PWV8fCIlIj09PWUpJiYoZT0iXyIpO3JbdF09ZX1yPXIuam9pbigiIik7IiI9PT1yJiYocj0iQmFkX0ZvbnRfTmFtZSIpO3QuYWRkKHN0cmluZ1RvQnl0ZXMocikpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlVG9wRGljdHMoZSx0LGEpe2NvbnN0IHI9W107bGV0IGk9bmV3IENGRkluZGV4O2Zvcihjb25zdCBuIG9mIGUpe2lmKGEpe24ucmVtb3ZlQnlOYW1lKCJDSURGb250VmVyc2lvbiIpO24ucmVtb3ZlQnlOYW1lKCJDSURGb250UmV2aXNpb24iKTtuLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFR5cGUiKTtuLnJlbW92ZUJ5TmFtZSgiQ0lEQ291bnQiKTtuLnJlbW92ZUJ5TmFtZSgiVUlEQmFzZSIpfWNvbnN0IGU9bmV3IENGRk9mZnNldFRyYWNrZXIscz10aGlzLmNvbXBpbGVEaWN0KG4sZSk7ci5wdXNoKGUpO2kuYWRkKHMpO2Uub2Zmc2V0KHQpfWk9dGhpcy5jb21waWxlSW5kZXgoaSxyKTtyZXR1cm57dHJhY2tlcnM6cixvdXRwdXQ6aX19Y29tcGlsZVByaXZhdGVEaWN0cyhlLHQsYSl7Zm9yKGxldCByPTAsaT1lLmxlbmd0aDtyPGk7KytyKXtjb25zdCBpPWVbcl0sbj1pLnByaXZhdGVEaWN0O2lmKCFufHwhaS5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJUaGVyZSBtdXN0IGJlIGEgcHJpdmF0ZSBkaWN0aW9uYXJ5LiIpO2NvbnN0IHM9bmV3IENGRk9mZnNldFRyYWNrZXIsbz10aGlzLmNvbXBpbGVEaWN0KG4scyk7bGV0IGM9YS5sZW5ndGg7cy5vZmZzZXQoYyk7by5sZW5ndGh8fChjPTApO3Rbcl0uc2V0RW50cnlMb2NhdGlvbigiUHJpdmF0ZSIsW28ubGVuZ3RoLGNdLGEpO2EuYWRkKG8pO2lmKG4uc3VicnNJbmRleCYmbi5oYXNOYW1lKCJTdWJycyIpKXtjb25zdCBlPXRoaXMuY29tcGlsZUluZGV4KG4uc3VicnNJbmRleCk7cy5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW28ubGVuZ3RoXSxhKTthLmFkZChlKX19fWNvbXBpbGVEaWN0KGUsdCl7Y29uc3QgYT1bXTtmb3IoY29uc3QgciBvZiBlLm9yZGVyKXtpZighKHIgaW4gZS52YWx1ZXMpKWNvbnRpbnVlO2xldCBpPWUudmFsdWVzW3JdLG49ZS50eXBlc1tyXTtBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pO0FycmF5LmlzQXJyYXkoaSl8fChpPVtpXSk7aWYoMCE9PWkubGVuZ3RoKXtmb3IobGV0IHM9MCxvPW4ubGVuZ3RoO3M8bzsrK3Mpe2NvbnN0IG89bltzXSxjPWlbc107c3dpdGNoKG8pe2Nhc2UibnVtIjpjYXNlInNpZCI6YS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGMpKTticmVhaztjYXNlIm9mZnNldCI6Y29uc3Qgbj1lLmtleVRvTmFtZU1hcFtyXTt0LmlzVHJhY2tpbmcobil8fHQudHJhY2sobixhLmxlbmd0aCk7YS5wdXNoKDI5LDAsMCwwLDApO2JyZWFrO2Nhc2UiYXJyYXkiOmNhc2UiZGVsdGEiOmEucHVzaCguLi50aGlzLmVuY29kZU51bWJlcihjKSk7Zm9yKGxldCBlPTEsdD1pLmxlbmd0aDtlPHQ7KytlKWEucHVzaCguLi50aGlzLmVuY29kZU51bWJlcihpW2VdKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVua25vd24gZGF0YSB0eXBlIG9mICR7b31gKX19YS5wdXNoKC4uLmUub3Bjb2Rlc1tyXSl9fXJldHVybiBhfWNvbXBpbGVTdHJpbmdJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleDtmb3IoY29uc3QgYSBvZiBlKXQuYWRkKHN0cmluZ1RvQnl0ZXMoYSkpO3JldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlQ2hhclN0cmluZ3MoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGxldCBhPTA7YTxlLmNvdW50O2ErKyl7Y29uc3Qgcj1lLmdldChhKTswIT09ci5sZW5ndGg/dC5hZGQocik6dC5hZGQobmV3IFVpbnQ4QXJyYXkoWzEzOSwxNF0pKX1yZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUNoYXJzZXQoZSx0LGEscil7bGV0IGk7Y29uc3Qgbj10LTE7aWYocil7Y29uc3QgZT1uLTE7aT1uZXcgVWludDhBcnJheShbMiwwLDEsZT4+OCYyNTUsMjU1JmVdKX1lbHNle2k9bmV3IFVpbnQ4QXJyYXkoMSsyKm4pO2lbMF09MDtsZXQgdD0wO2NvbnN0IHI9ZS5jaGFyc2V0Lmxlbmd0aDtsZXQgcz0hMTtmb3IobGV0IG49MTtuPGkubGVuZ3RoO24rPTIpe2xldCBvPTA7aWYodDxyKXtjb25zdCByPWUuY2hhcnNldFt0KytdO289YS5nZXRTSUQocik7aWYoLTE9PT1vKXtvPTA7aWYoIXMpe3M9ITA7d2FybihgQ291bGRuJ3QgZmluZCAke3J9IGluIENGRiBzdHJpbmdzYCl9fX1pW25dPW8+PjgmMjU1O2lbbisxXT0yNTUmb319cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoaSl9Y29tcGlsZUVuY29kaW5nKGUpe3JldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGUucmF3KX1jb21waWxlRkRTZWxlY3QoZSl7Y29uc3QgdD1lLmZvcm1hdDtsZXQgYSxyO3N3aXRjaCh0KXtjYXNlIDA6YT1uZXcgVWludDhBcnJheSgxK2UuZmRTZWxlY3QubGVuZ3RoKTthWzBdPXQ7Zm9yKHI9MDtyPGUuZmRTZWxlY3QubGVuZ3RoO3IrKylhW3IrMV09ZS5mZFNlbGVjdFtyXTticmVhaztjYXNlIDM6Y29uc3QgaT0wO2xldCBuPWUuZmRTZWxlY3RbMF07Y29uc3Qgcz1bdCwwLDAsaT4+OCYyNTUsMjU1Jmksbl07Zm9yKHI9MTtyPGUuZmRTZWxlY3QubGVuZ3RoO3IrKyl7Y29uc3QgdD1lLmZkU2VsZWN0W3JdO2lmKHQhPT1uKXtzLnB1c2gocj4+OCYyNTUsMjU1JnIsdCk7bj10fX1jb25zdCBvPShzLmxlbmd0aC0zKS8zO3NbMV09bz4+OCYyNTU7c1syXT0yNTUmbztzLnB1c2gocj4+OCYyNTUsMjU1JnIpO2E9bmV3IFVpbnQ4QXJyYXkocyl9cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoYSl9Y29tcGlsZVR5cGVkQXJyYXkoZSl7cmV0dXJuIEFycmF5LmZyb20oZSl9Y29tcGlsZUluZGV4KGUsdD1bXSl7Y29uc3QgYT1lLm9iamVjdHMscj1hLmxlbmd0aDtpZigwPT09cilyZXR1cm5bMCwwXTtjb25zdCBpPVtyPj44JjI1NSwyNTUmcl07bGV0IG4scyxvPTE7Zm9yKG49MDtuPHI7KytuKW8rPWFbbl0ubGVuZ3RoO3M9bzwyNTY/MTpvPDY1NTM2PzI6bzwxNjc3NzIxNj8zOjQ7aS5wdXNoKHMpO2xldCBjPTE7Zm9yKG49MDtuPHIrMTtuKyspezE9PT1zP2kucHVzaCgyNTUmYyk6Mj09PXM/aS5wdXNoKGM+PjgmMjU1LDI1NSZjKTozPT09cz9pLnB1c2goYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjKTppLnB1c2goYz4+PjI0JjI1NSxjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMpO2Fbbl0mJihjKz1hW25dLmxlbmd0aCl9Zm9yKG49MDtuPHI7bisrKXt0W25dJiZ0W25dLm9mZnNldChpLmxlbmd0aCk7aS5wdXNoKC4uLmFbbl0pfXJldHVybiBpfX1jb25zdCBMcj1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZVsiVGltZXMtUm9tYW4iXT0iVGltZXMtUm9tYW4iO2UuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiO2UuQ291cmllcj0iQ291cmllciI7ZS5TeW1ib2w9IlN5bWJvbCI7ZVsiVGltZXMtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJIZWx2ZXRpY2EtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQ291cmllci1Cb2xkIl09IkNvdXJpZXItQm9sZCI7ZS5aYXBmRGluZ2JhdHM9IlphcGZEaW5nYmF0cyI7ZVsiVGltZXMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyI7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkNvdXJpZXItT2JsaXF1ZSJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlLkFyaWFsTmFycm93PSJIZWx2ZXRpY2EiO2VbIkFyaWFsTmFycm93LUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbE5hcnJvdy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxCbGFjaz0iSGVsdmV0aWNhIjtlWyJBcmlhbEJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJBcmlhbC1CbGFjayJdPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1CbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWw9IkhlbHZldGljYSI7ZVsiQXJpYWwtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbE1UPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkFyaWFsLUJvbGRJdGFsaWNNVC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWwtQm9sZE1ULUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUl0YWxpY01ULUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbFVuaWNvZGVNUz0iSGVsdmV0aWNhIjtlWyJBcmlhbFVuaWNvZGVNUy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbFVuaWNvZGVNUy1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWxVbmljb2RlTVMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJDb3VyaWVyLUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllci1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIjtlLkNvdXJpZXJOZXc9IkNvdXJpZXIiO2VbIkNvdXJpZXJOZXctQm9sZCJdPSJDb3VyaWVyLUJvbGQiO2VbIkNvdXJpZXJOZXctQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJDb3VyaWVyTmV3LUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIkNvdXJpZXJOZXdQUy1Cb2xkSXRhbGljTVQiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllck5ld1BTLUJvbGRNVCJdPSJDb3VyaWVyLUJvbGQiO2VbIkNvdXJpZXJOZXdQUy1JdGFsaWNNVCJdPSJDb3VyaWVyLU9ibGlxdWUiO2UuQ291cmllck5ld1BTTVQ9IkNvdXJpZXIiO2VbIkhlbHZldGljYS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiSGVsdmV0aWNhLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiSGVsdmV0aWNhTFRTdGQtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiU3ltYm9sLUJvbGQiXT0iU3ltYm9sIjtlWyJTeW1ib2wtQm9sZEl0YWxpYyJdPSJTeW1ib2wiO2VbIlN5bWJvbC1JdGFsaWMiXT0iU3ltYm9sIjtlLlRpbWVzTmV3Um9tYW49IlRpbWVzLVJvbWFuIjtlWyJUaW1lc05ld1JvbWFuLUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hbi1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW4tSXRhbGljIl09IlRpbWVzLUl0YWxpYyI7ZS5UaW1lc05ld1JvbWFuUFM9IlRpbWVzLVJvbWFuIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpY01UIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkTVQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hblBTLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVCJdPSJUaW1lcy1JdGFsaWMiO2UuVGltZXNOZXdSb21hblBTTVQ9IlRpbWVzLVJvbWFuIjtlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW5QU01ULUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTTVQtSXRhbGljIl09IlRpbWVzLUl0YWxpYyJ9KSxfcj1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPSJGb3hpdEZpeGVkLnBmYiI7ZVsiQ291cmllci1Cb2xkIl09IkZveGl0Rml4ZWRCb2xkLnBmYiI7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiO2VbIkNvdXJpZXItT2JsaXF1ZSJdPSJGb3hpdEZpeGVkSXRhbGljLnBmYiI7ZS5IZWx2ZXRpY2E9IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIjtlWyJIZWx2ZXRpY2EtQm9sZCJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiI7ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIjtlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPSJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIjtlWyJUaW1lcy1Sb21hbiJdPSJGb3hpdFNlcmlmLnBmYiI7ZVsiVGltZXMtQm9sZCJdPSJGb3hpdFNlcmlmQm9sZC5wZmIiO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0iRm94aXRTZXJpZkJvbGRJdGFsaWMucGZiIjtlWyJUaW1lcy1JdGFsaWMiXT0iRm94aXRTZXJpZkl0YWxpYy5wZmIiO2UuU3ltYm9sPSJGb3hpdFN5bWJvbC5wZmIiO2UuWmFwZkRpbmdiYXRzPSJGb3hpdERpbmdiYXRzLnBmYiI7ZVsiTGliZXJhdGlvblNhbnMtUmVndWxhciJdPSJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiI7ZVsiTGliZXJhdGlvblNhbnMtQm9sZCJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiI7ZVsiTGliZXJhdGlvblNhbnMtSXRhbGljIl09IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYifSksVXI9Z2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uKGUpe2UuQ2FsaWJyaT0iSGVsdmV0aWNhIjtlWyJDYWxpYnJpLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkNhbGlicmktSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkNlbnR1cnlHb3RoaWM9IkhlbHZldGljYSI7ZVsiQ2VudHVyeUdvdGhpYy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJDZW50dXJ5R290aGljLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJDZW50dXJ5R290aGljLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5Db21pY1NhbnNNUz0iQ29taWMgU2FucyBNUyI7ZVsiQ29taWNTYW5zTVMtQm9sZCJdPSJDb21pYyBTYW5zIE1TLUJvbGQiO2VbIkNvbWljU2Fuc01TLUJvbGRJdGFsaWMiXT0iQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljIjtlWyJDb21pY1NhbnNNUy1JdGFsaWMiXT0iQ29taWMgU2FucyBNUy1JdGFsaWMiO2UuR2lsbFNhbnNNVD0iSGVsdmV0aWNhIjtlWyJHaWxsU2Fuc01ULUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkdpbGxTYW5zTVQtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkdpbGxTYW5zTVQtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkltcGFjdD0iSGVsdmV0aWNhIjtlWyJJdGNTeW1ib2wtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiSXRjU3ltYm9sLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJJdGNTeW1ib2wtQm9vayJdPSJIZWx2ZXRpY2EiO2VbIkl0Y1N5bWJvbC1Cb29rSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJJdGNTeW1ib2wtTWVkaXVtIl09IkhlbHZldGljYSI7ZVsiSXRjU3ltYm9sLU1lZGl1bUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5MdWNpZGFDb25zb2xlPSJDb3VyaWVyIjtlWyJMdWNpZGFDb25zb2xlLUJvbGQiXT0iQ291cmllci1Cb2xkIjtlWyJMdWNpZGFDb25zb2xlLUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiTHVjaWRhQ29uc29sZS1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIjtlWyJMdWNpZGFTYW5zLURlbWkiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIk1TLUdvdGhpYyJdPSJNUyBHb3RoaWMiO2VbIk1TLUdvdGhpYy1Cb2xkIl09Ik1TIEdvdGhpYy1Cb2xkIjtlWyJNUy1Hb3RoaWMtQm9sZEl0YWxpYyJdPSJNUyBHb3RoaWMtQm9sZEl0YWxpYyI7ZVsiTVMtR290aGljLUl0YWxpYyJdPSJNUyBHb3RoaWMtSXRhbGljIjtlWyJNUy1NaW5jaG8iXT0iTVMgTWluY2hvIjtlWyJNUy1NaW5jaG8tQm9sZCJdPSJNUyBNaW5jaG8tQm9sZCI7ZVsiTVMtTWluY2hvLUJvbGRJdGFsaWMiXT0iTVMgTWluY2hvLUJvbGRJdGFsaWMiO2VbIk1TLU1pbmNoby1JdGFsaWMiXT0iTVMgTWluY2hvLUl0YWxpYyI7ZVsiTVMtUEdvdGhpYyJdPSJNUyBQR290aGljIjtlWyJNUy1QR290aGljLUJvbGQiXT0iTVMgUEdvdGhpYy1Cb2xkIjtlWyJNUy1QR290aGljLUJvbGRJdGFsaWMiXT0iTVMgUEdvdGhpYy1Cb2xkSXRhbGljIjtlWyJNUy1QR290aGljLUl0YWxpYyJdPSJNUyBQR290aGljLUl0YWxpYyI7ZVsiTVMtUE1pbmNobyJdPSJNUyBQTWluY2hvIjtlWyJNUy1QTWluY2hvLUJvbGQiXT0iTVMgUE1pbmNoby1Cb2xkIjtlWyJNUy1QTWluY2hvLUJvbGRJdGFsaWMiXT0iTVMgUE1pbmNoby1Cb2xkSXRhbGljIjtlWyJNUy1QTWluY2hvLUl0YWxpYyJdPSJNUyBQTWluY2hvLUl0YWxpYyI7ZS5OdXB0aWFsU2NyaXB0PSJUaW1lcy1JdGFsaWMiO2UuU2Vnb2VVSVN5bWJvbD0iSGVsdmV0aWNhIn0pLGpyPWdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbihlKXtlWyJBZG9iZSBKZW5zb24iXT0hMDtlWyJBZG9iZSBUZXh0Il09ITA7ZS5BbGJlcnR1cz0hMDtlLkFsZHVzPSEwO2UuQWxleGFuZHJpYT0hMDtlLkFsZ2VyaWFuPSEwO2VbIkFtZXJpY2FuIFR5cGV3cml0ZXIiXT0hMDtlLkFudGlxdWE9ITA7ZS5BcGV4PSEwO2UuQXJubz0hMDtlLkFzdGVyPSEwO2UuQXVyb3JhPSEwO2UuQmFza2VydmlsbGU9ITA7ZS5CZWxsPSEwO2UuQmVtYm89ITA7ZVsiQmVtYm8gU2Nob29sYm9vayJdPSEwO2UuQmVuZ3VpYXQ9ITA7ZVsiQmVya2VsZXkgT2xkIFN0eWxlIl09ITA7ZVsiQmVybmhhcmQgTW9kZXJuIl09ITA7ZVsiQmVydGhvbGQgQ2l0eSJdPSEwO2UuQm9kb25pPSEwO2VbIkJhdWVyIEJvZG9uaSJdPSEwO2VbIkJvb2sgQW50aXF1YSJdPSEwO2UuQm9va21hbj0hMDtlWyJCb3JkZWF1eCBSb21hbiJdPSEwO2VbIkNhbGlmb3JuaWFuIEZCIl09ITA7ZS5DYWxpc3RvPSEwO2UuQ2FsdmVydD0hMDtlLkNhcGl0YWxzPSEwO2UuQ2FtYnJpYT0hMDtlLkNhcnRpZXI9ITA7ZS5DYXNsb249ITA7ZS5DYXR1bGw9ITA7ZS5DZW50YXVyPSEwO2VbIkNlbnR1cnkgT2xkIFN0eWxlIl09ITA7ZVsiQ2VudHVyeSBTY2hvb2xib29rIl09ITA7ZS5DaGFwYXJyYWw9ITA7ZVsiQ2hhcmlzIFNJTCJdPSEwO2UuQ2hlbHRlbmhhbT0hMDtlWyJDaG9sbGEgU2xhYiJdPSEwO2UuQ2xhcmVuZG9uPSEwO2UuQ2xlYXJmYWNlPSEwO2UuQ29jaGluPSEwO2UuQ29sb25uYT0hMDtlWyJDb21wdXRlciBNb2Rlcm4iXT0hMDtlWyJDb25jcmV0ZSBSb21hbiJdPSEwO2UuQ29uc3RhbnRpYT0hMDtlWyJDb29wZXIgQmxhY2siXT0hMDtlLkNvcm9uYT0hMDtlLkVjb3R5cGU9ITA7ZS5FZ3lwdGllbm5lPSEwO2UuRWxlcGhhbnQ9ITA7ZS5FeGNlbHNpb3I9ITA7ZS5GYWlyZmllbGQ9ITA7ZVsiRkYgU2NhbGEiXT0hMDtlLkZvbGthcmQ9ITA7ZS5Gb290bGlnaHQ9ITA7ZS5GcmVlU2VyaWY9ITA7ZVsiRnJpeiBRdWFkcmF0YSJdPSEwO2UuR2FyYW1vbmQ9ITA7ZS5HZW50aXVtPSEwO2UuR2VvcmdpYT0hMDtlLkdsb3VjZXN0ZXI9ITA7ZVsiR291ZHkgT2xkIFN0eWxlIl09ITA7ZVsiR291ZHkgU2Nob29sYm9vayJdPSEwO2VbIkdvdWR5IFBybyBGb250Il09ITA7ZS5HcmFuam9uPSEwO2VbIkd1YXJkaWFuIEVneXB0aWFuIl09ITA7ZS5IZWF0aGVyPSEwO2UuSGVyY3VsZXM9ITA7ZVsiSGlnaCBUb3dlciBUZXh0Il09ITA7ZS5IaXJvc2hpZ2U9ITA7ZVsiSG9lZmxlciBUZXh0Il09ITA7ZVsiSHVtYW5hIFNlcmlmIl09ITA7ZS5JbXByaW50PSEwO2VbIklvbmljIE5vLiA1Il09ITA7ZS5KYW5zb249ITA7ZS5Kb2FubmE9ITA7ZS5Lb3Jpbm5hPSEwO2UuTGV4aWNvbj0hMDtlLkxpYmVyYXRpb25TZXJpZj0hMDtlWyJMaWJlcmF0aW9uIFNlcmlmIl09ITA7ZVsiTGludXggTGliZXJ0aW5lIl09ITA7ZS5MaXRlcmF0dXJuYXlhPSEwO2UuTHVjaWRhPSEwO2VbIkx1Y2lkYSBCcmlnaHQiXT0hMDtlLk1lbGlvcj0hMDtlLk1lbXBoaXM9ITA7ZS5NaWxsZXI9ITA7ZS5NaW5pb249ITA7ZS5Nb2Rlcm49ITA7ZVsiTW9uYSBMaXNhIl09ITA7ZVsiTXJzIEVhdmVzIl09ITA7ZVsiTVMgU2VyaWYiXT0hMDtlWyJNdXNlbyBTbGFiIl09ITA7ZVsiTmV3IFlvcmsiXT0hMDtlWyJOaW1idXMgUm9tYW4iXT0hMDtlWyJOUFMgUmF3bGluc29uIFJvYWR3YXkiXT0hMDtlLk51cHRpYWxTY3JpcHQ9ITA7ZS5QYWxhdGlubz0hMDtlLlBlcnBldHVhPSEwO2UuUGxhbnRpbj0hMDtlWyJQbGFudGluIFNjaG9vbGJvb2siXT0hMDtlLlBsYXliaWxsPSEwO2VbIlBvb3IgUmljaGFyZCJdPSEwO2VbIlJhd2xpbnNvbiBSb2Fkd2F5Il09ITA7ZS5SZW5hdWx0PSEwO2UuUmVxdWllbT0hMDtlLlJvY2t3ZWxsPSEwO2UuUm9tYW49ITA7ZVsiUm90aXMgU2VyaWYiXT0hMDtlLlNhYm9uPSEwO2UuU2NhbGE9ITA7ZS5TZWFndWxsPSEwO2UuU2lzdGluYT0hMDtlLlNvdXZlbmlyPSEwO2UuU1RJWD0hMDtlWyJTdG9uZSBJbmZvcm1hbCJdPSEwO2VbIlN0b25lIFNlcmlmIl09ITA7ZS5TeWxmYWVuPSEwO2UuVGltZXM9ITA7ZS5UcmFqYW49ITA7ZVsiVHJpbml0w6kiXT0hMDtlWyJUcnVtcCBNZWRpYWV2YWwiXT0hMDtlLlV0b3BpYT0hMDtlWyJWYWxlIFR5cGUiXT0hMDtlWyJCaXRzdHJlYW0gVmVyYSJdPSEwO2VbIlZlcmEgU2VyaWYiXT0hMDtlLlZlcnNhaWxsZXM9ITA7ZS5XYW50ZWQ9ITA7ZS5XZWlzcz0hMDtlWyJXaWRlIExhdGluIl09ITA7ZS5XaW5kc29yPSEwO2UuWElUUz0hMH0pLFhyPWdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbihlKXtlLkRpbmdiYXRzPSEwO2UuU3ltYm9sPSEwO2UuWmFwZkRpbmdiYXRzPSEwO2UuV2luZ2RpbmdzPSEwO2VbIldpbmdkaW5ncy1Cb2xkIl09ITA7ZVsiV2luZ2RpbmdzLVJlZ3VsYXIiXT0hMH0pLHFyPWdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbihlKXtlWzJdPTEwO2VbM109MzI7ZVs0XT0zMztlWzVdPTM0O2VbNl09MzU7ZVs3XT0zNjtlWzhdPTM3O2VbOV09Mzg7ZVsxMF09Mzk7ZVsxMV09NDA7ZVsxMl09NDE7ZVsxM109NDI7ZVsxNF09NDM7ZVsxNV09NDQ7ZVsxNl09NDU7ZVsxN109NDY7ZVsxOF09NDc7ZVsxOV09NDg7ZVsyMF09NDk7ZVsyMV09NTA7ZVsyMl09NTE7ZVsyM109NTI7ZVsyNF09NTM7ZVsyNV09NTQ7ZVsyNl09NTU7ZVsyN109NTY7ZVsyOF09NTc7ZVsyOV09NTg7ZVszMF09ODk0O2VbMzFdPTYwO2VbMzJdPTYxO2VbMzNdPTYyO2VbMzRdPTYzO2VbMzVdPTY0O2VbMzZdPTY1O2VbMzddPTY2O2VbMzhdPTY3O2VbMzldPTY4O2VbNDBdPTY5O2VbNDFdPTcwO2VbNDJdPTcxO2VbNDNdPTcyO2VbNDRdPTczO2VbNDVdPTc0O2VbNDZdPTc1O2VbNDddPTc2O2VbNDhdPTc3O2VbNDldPTc4O2VbNTBdPTc5O2VbNTFdPTgwO2VbNTJdPTgxO2VbNTNdPTgyO2VbNTRdPTgzO2VbNTVdPTg0O2VbNTZdPTg1O2VbNTddPTg2O2VbNThdPTg3O2VbNTldPTg4O2VbNjBdPTg5O2VbNjFdPTkwO2VbNjJdPTkxO2VbNjNdPTkyO2VbNjRdPTkzO2VbNjVdPTk0O2VbNjZdPTk1O2VbNjddPTk2O2VbNjhdPTk3O2VbNjldPTk4O2VbNzBdPTk5O2VbNzFdPTEwMDtlWzcyXT0xMDE7ZVs3M109MTAyO2VbNzRdPTEwMztlWzc1XT0xMDQ7ZVs3Nl09MTA1O2VbNzddPTEwNjtlWzc4XT0xMDc7ZVs3OV09MTA4O2VbODBdPTEwOTtlWzgxXT0xMTA7ZVs4Ml09MTExO2VbODNdPTExMjtlWzg0XT0xMTM7ZVs4NV09MTE0O2VbODZdPTExNTtlWzg3XT0xMTY7ZVs4OF09MTE3O2VbODldPTExODtlWzkwXT0xMTk7ZVs5MV09MTIwO2VbOTJdPTEyMTtlWzkzXT0xMjI7ZVs5NF09MTIzO2VbOTVdPTEyNDtlWzk2XT0xMjU7ZVs5N109MTI2O2VbOThdPTE5NjtlWzk5XT0xOTc7ZVsxMDBdPTE5OTtlWzEwMV09MjAxO2VbMTAyXT0yMDk7ZVsxMDNdPTIxNDtlWzEwNF09MjIwO2VbMTA1XT0yMjU7ZVsxMDZdPTIyNDtlWzEwN109MjI2O2VbMTA4XT0yMjg7ZVsxMDldPTIyNztlWzExMF09MjI5O2VbMTExXT0yMzE7ZVsxMTJdPTIzMztlWzExM109MjMyO2VbMTE0XT0yMzQ7ZVsxMTVdPTIzNTtlWzExNl09MjM3O2VbMTE3XT0yMzY7ZVsxMThdPTIzODtlWzExOV09MjM5O2VbMTIwXT0yNDE7ZVsxMjFdPTI0MztlWzEyMl09MjQyO2VbMTIzXT0yNDQ7ZVsxMjRdPTI0NjtlWzEyNV09MjQ1O2VbMTI2XT0yNTA7ZVsxMjddPTI0OTtlWzEyOF09MjUxO2VbMTI5XT0yNTI7ZVsxMzBdPTgyMjQ7ZVsxMzFdPTE3NjtlWzEzMl09MTYyO2VbMTMzXT0xNjM7ZVsxMzRdPTE2NztlWzEzNV09ODIyNjtlWzEzNl09MTgyO2VbMTM3XT0yMjM7ZVsxMzhdPTE3NDtlWzEzOV09MTY5O2VbMTQwXT04NDgyO2VbMTQxXT0xODA7ZVsxNDJdPTE2ODtlWzE0M109ODgwMDtlWzE0NF09MTk4O2VbMTQ1XT0yMTY7ZVsxNDZdPTg3MzQ7ZVsxNDddPTE3NztlWzE0OF09ODgwNDtlWzE0OV09ODgwNTtlWzE1MF09MTY1O2VbMTUxXT0xODE7ZVsxNTJdPTg3MDY7ZVsxNTNdPTg3MjE7ZVsxNTRdPTg3MTk7ZVsxNTZdPTg3NDc7ZVsxNTddPTE3MDtlWzE1OF09MTg2O2VbMTU5XT04NDg2O2VbMTYwXT0yMzA7ZVsxNjFdPTI0ODtlWzE2Ml09MTkxO2VbMTYzXT0xNjE7ZVsxNjRdPTE3MjtlWzE2NV09ODczMDtlWzE2Nl09NDAyO2VbMTY3XT04Nzc2O2VbMTY4XT04NzEwO2VbMTY5XT0xNzE7ZVsxNzBdPTE4NztlWzE3MV09ODIzMDtlWzE3OV09ODIyMDtlWzE4MF09ODIyMTtlWzE4MV09ODIxNjtlWzE4Ml09ODIxNztlWzIwMF09MTkzO2VbMjAzXT0yMDU7ZVsyMDddPTIxMTtlWzIxMF09MjE4O2VbMjIzXT03MTE7ZVsyMjRdPTMyMTtlWzIyNV09MzIyO2VbMjI2XT0zNTI7ZVsyMjddPTM1MztlWzIyOF09MzgxO2VbMjI5XT0zODI7ZVsyMzNdPTIyMTtlWzIzNF09MjUzO2VbMjUyXT0yNjM7ZVsyNTNdPTI2ODtlWzI1NF09MjY5O2VbMjU4XT0yNTg7ZVsyNjBdPTI2MDtlWzI2MV09MjYxO2VbMjY1XT0yODA7ZVsyNjZdPTI4MTtlWzI2N109MjgyO2VbMjY4XT0yODM7ZVsyNjldPTMxMztlWzI3NV09MzIzO2VbMjc2XT0zMjQ7ZVsyNzhdPTMyODtlWzI4M109MzQ0O2VbMjg0XT0zNDU7ZVsyODVdPTM0NjtlWzI4Nl09MzQ3O2VbMjkyXT0zNjc7ZVsyOTVdPTM3NztlWzI5Nl09Mzc4O2VbMjk4XT0zODA7ZVszMDVdPTk2MztlWzMwNl09OTY0O2VbMzA3XT05NjY7ZVszMDhdPTgyMTU7ZVszMDldPTgyNTI7ZVszMTBdPTgzMTk7ZVszMTFdPTgzNTk7ZVszMTJdPTg1OTI7ZVszMTNdPTg1OTM7ZVszMzddPTk1NTI7ZVs0OTNdPTEwMzk7ZVs0OTRdPTEwNDA7ZVs1NzBdPTEwNDA7ZVs1NzFdPTEwNDE7ZVs1NzJdPTEwNDI7ZVs1NzNdPTEwNDM7ZVs1NzRdPTEwNDQ7ZVs1NzVdPTEwNDU7ZVs1NzZdPTEwNDY7ZVs1NzddPTEwNDc7ZVs1NzhdPTEwNDg7ZVs1NzldPTEwNDk7ZVs1ODBdPTEwNTA7ZVs1ODFdPTEwNTE7ZVs1ODJdPTEwNTI7ZVs1ODNdPTEwNTM7ZVs1ODRdPTEwNTQ7ZVs1ODVdPTEwNTU7ZVs1ODZdPTEwNTY7ZVs1ODddPTEwNTc7ZVs1ODhdPTEwNTg7ZVs1ODldPTEwNTk7ZVs1OTBdPTEwNjA7ZVs1OTFdPTEwNjE7ZVs1OTJdPTEwNjI7ZVs1OTNdPTEwNjM7ZVs1OTRdPTEwNjQ7ZVs1OTVdPTEwNjU7ZVs1OTZdPTEwNjY7ZVs1OTddPTEwNjc7ZVs1OThdPTEwNjg7ZVs1OTldPTEwNjk7ZVs2MDBdPTEwNzA7ZVs2NzJdPTE0ODg7ZVs2NzNdPTE0ODk7ZVs2NzRdPTE0OTA7ZVs2NzVdPTE0OTE7ZVs2NzZdPTE0OTI7ZVs2NzddPTE0OTM7ZVs2NzhdPTE0OTQ7ZVs2NzldPTE0OTU7ZVs2ODBdPTE0OTY7ZVs2ODFdPTE0OTc7ZVs2ODJdPTE0OTg7ZVs2ODNdPTE0OTk7ZVs2ODRdPTE1MDA7ZVs2ODVdPTE1MDE7ZVs2ODZdPTE1MDI7ZVs2ODddPTE1MDM7ZVs2ODhdPTE1MDQ7ZVs2ODldPTE1MDU7ZVs2OTBdPTE1MDY7ZVs2OTFdPTE1MDc7ZVs2OTJdPTE1MDg7ZVs2OTNdPTE1MDk7ZVs2OTRdPTE1MTA7ZVs2OTVdPTE1MTE7ZVs2OTZdPTE1MTI7ZVs2OTddPTE1MTM7ZVs2OThdPTE1MTQ7ZVs3MDVdPTE1MjQ7ZVs3MDZdPTgzNjI7ZVs3MTBdPTY0Mjg4O2VbNzExXT02NDI5ODtlWzc1OV09MTYxNztlWzc2MV09MTc3NjtlWzc2M109MTc3ODtlWzc3NV09MTY1MjtlWzc3N109MTc2NDtlWzc3OF09MTc4MDtlWzc3OV09MTc4MTtlWzc4MF09MTc4MjtlWzc4Ml09NzcxO2VbNzgzXT02NDcyNjtlWzc4Nl09ODM2MztlWzc4OF09ODUzMjtlWzc5MF09NzY4O2VbNzkxXT03Njk7ZVs3OTJdPTc2ODtlWzc5NV09ODAzO2VbNzk3XT02NDMzNjtlWzc5OF09NjQzMzc7ZVs3OTldPTY0MzQyO2VbODAwXT02NDM0MztlWzgwMV09NjQzNDQ7ZVs4MDJdPTY0MzQ1O2VbODAzXT02NDM2MjtlWzgwNF09NjQzNjM7ZVs4MDVdPTY0MzY0O2VbMjQyNF09NzgyMTtlWzI0MjVdPTc4MjI7ZVsyNDI2XT03ODIzO2VbMjQyN109NzgyNDtlWzI0MjhdPTc4MjU7ZVsyNDI5XT03ODI2O2VbMjQzMF09NzgyNztlWzI0MzNdPTc2ODI7ZVsyNjc4XT04MDQ1O2VbMjY3OV09ODA0NjtlWzI4MzBdPTE1NTI7ZVsyODM4XT02ODY7ZVsyODQwXT03NTE7ZVsyODQyXT03NTM7ZVsyODQzXT03NTQ7ZVsyODQ0XT03NTU7ZVsyODQ2XT03NTc7ZVsyODU2XT03Njc7ZVsyODU3XT04NDg7ZVsyODU4XT04NDk7ZVsyODYyXT04NTM7ZVsyODYzXT04NTQ7ZVsyODY0XT04NTU7ZVsyODY1XT04NjE7ZVsyODY2XT04NjI7ZVsyOTA2XT03NDYwO2VbMjkwOF09NzQ2MjtlWzI5MDldPTc0NjM7ZVsyOTEwXT03NDY0O2VbMjkxMl09NzQ2NjtlWzI5MTNdPTc0Njc7ZVsyOTE0XT03NDY4O2VbMjkxNl09NzQ3MDtlWzI5MTddPTc0NzE7ZVsyOTE4XT03NDcyO2VbMjkyMF09NzQ3NDtlWzI5MjFdPTc0NzU7ZVsyOTIyXT03NDc2O2VbMjkyNF09NzQ3ODtlWzI5MjVdPTc0Nzk7ZVsyOTI2XT03NDgwO2VbMjkyOF09NzQ4MjtlWzI5MjldPTc0ODM7ZVsyOTMwXT03NDg0O2VbMjkzMl09NzQ4NjtlWzI5MzNdPTc0ODc7ZVsyOTM0XT03NDg4O2VbMjkzNl09NzQ5MDtlWzI5MzddPTc0OTE7ZVsyOTM4XT03NDkyO2VbMjk0MF09NzQ5NDtlWzI5NDFdPTc0OTU7ZVsyOTQyXT03NDk2O2VbMjk0NF09NzQ5ODtlWzI5NDZdPTc1MDA7ZVsyOTQ4XT03NTAyO2VbMjk1MF09NzUwNDtlWzI5NTFdPTc1MDU7ZVsyOTUyXT03NTA2O2VbMjk1NF09NzUwODtlWzI5NTVdPTc1MDk7ZVsyOTU2XT03NTEwO2VbMjk1OF09NzUxMjtlWzI5NTldPTc1MTM7ZVsyOTYwXT03NTE0O2VbMjk2Ml09NzUxNjtlWzI5NjNdPTc1MTc7ZVsyOTY0XT03NTE4O2VbMjk2Nl09NzUyMDtlWzI5NjddPTc1MjE7ZVsyOTY4XT03NTIyO2VbMjk3MF09NzUyNDtlWzI5NzFdPTc1MjU7ZVsyOTcyXT03NTI2O2VbMjk3NF09NzUyODtlWzI5NzVdPTc1Mjk7ZVsyOTc2XT03NTMwO2VbMjk3OF09MTUzNztlWzI5NzldPTE1Mzg7ZVsyOTgwXT0xNTM5O2VbMjk4Ml09MTU0OTtlWzI5ODNdPTE1NTE7ZVsyOTg0XT0xNTUyO2VbMjk4Nl09MTU1NDtlWzI5ODddPTE1NTU7ZVsyOTg4XT0xNTU2O2VbMjk5MF09MTYyMztlWzI5OTFdPTE2MjQ7ZVsyOTk1XT0xNzc1O2VbMjk5OV09MTc5MTtlWzMwMDJdPTY0MjkwO2VbMzAwM109NjQyOTE7ZVszMDA0XT02NDI5MjtlWzMwMDZdPTY0Mjk0O2VbMzAwN109NjQyOTU7ZVszMDA4XT02NDI5NjtlWzMwMTFdPTE5MDA7ZVszMDE0XT04MjIzO2VbMzAxNV09ODI0NDtlWzMwMTddPTc1MzI7ZVszMDE4XT03NTMzO2VbMzAxOV09NzUzNDtlWzMwNzVdPTc1OTA7ZVszMDc2XT03NTkxO2VbMzA3OV09NzU5NDtlWzMwODBdPTc1OTU7ZVszMDgzXT03NTk4O2VbMzA4NF09NzU5OTtlWzMwODddPTc2MDI7ZVszMDg4XT03NjAzO2VbMzA5MV09NzYwNjtlWzMwOTJdPTc2MDc7ZVszMDk1XT03NjEwO2VbMzA5Nl09NzYxMTtlWzMwOTldPTc2MTQ7ZVszMTAwXT03NjE1O2VbMzEwM109NzYxODtlWzMxMDRdPTc2MTk7ZVszMTA3XT04MzM3O2VbMzEwOF09ODMzODtlWzMxMTZdPTE4ODQ7ZVszMTE5XT0xODg1O2VbMzEyMF09MTg4NTtlWzMxMjNdPTE4ODY7ZVszMTI0XT0xODg2O2VbMzEyN109MTg4NztlWzMxMjhdPTE4ODc7ZVszMTMxXT0xODg4O2VbMzEzMl09MTg4ODtlWzMxMzVdPTE4ODk7ZVszMTM2XT0xODg5O2VbMzEzOV09MTg5MDtlWzMxNDBdPTE4OTA7ZVszMTQzXT0xODkxO2VbMzE0NF09MTg5MTtlWzMxNDddPTE4OTI7ZVszMTQ4XT0xODkyO2VbMzE1M109NTgwO2VbMzE1NF09NTgxO2VbMzE1N109NTg0O2VbMzE1OF09NTg1O2VbMzE2MV09NTg4O2VbMzE2Ml09NTg5O2VbMzE2NV09ODkxO2VbMzE2Nl09ODkyO2VbMzE2OV09MTI3NDtlWzMxNzBdPTEyNzU7ZVszMTczXT0xMjc4O2VbMzE3NF09MTI3OTtlWzMxODFdPTc2MjI7ZVszMTgyXT03NjIzO2VbMzI4Ml09MTE3OTk7ZVszMzE2XT01Nzg7ZVszMzc5XT00Mjc4NTtlWzMzOTNdPTExNTk7ZVszNDE2XT04Mzc3fSksSHI9Z2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjI7ZVsyNjRdPTI2MTtlWzI5MV09MzQ2fSksV3I9Z2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uKGUpe2VbMV09MzI7ZVs0XT02NTtlWzVdPTE5MjtlWzZdPTE5MztlWzldPTE5NjtlWzE3XT02NjtlWzE4XT02NztlWzIxXT0yNjg7ZVsyNF09Njg7ZVsyOF09Njk7ZVsyOV09MjAwO2VbMzBdPTIwMTtlWzMyXT0yODI7ZVszOF09NzA7ZVszOV09NzE7ZVs0NF09NzI7ZVs0N109NzM7ZVs0OF09MjA0O2VbNDldPTIwNTtlWzU4XT03NDtlWzYwXT03NTtlWzYyXT03NjtlWzY4XT03NztlWzY5XT03ODtlWzc1XT03OTtlWzc2XT0yMTA7ZVs4MF09MjE0O2VbODddPTgwO2VbODldPTgxO2VbOTBdPTgyO2VbOTJdPTM0NDtlWzk0XT04MztlWzk3XT0zNTI7ZVsxMDBdPTg0O2VbMTA0XT04NTtlWzEwOV09MjIwO2VbMTE1XT04NjtlWzExNl09ODc7ZVsxMjFdPTg4O2VbMTIyXT04OTtlWzEyNF09MjIxO2VbMTI3XT05MDtlWzEyOV09MzgxO2VbMjU4XT05NztlWzI1OV09MjI0O2VbMjYwXT0yMjU7ZVsyNjNdPTIyODtlWzI2OF09MjYxO2VbMjcxXT05ODtlWzI3Ml09OTk7ZVsyNzNdPTI2MztlWzI3NV09MjY5O2VbMjgyXT0xMDA7ZVsyODZdPTEwMTtlWzI4N109MjMyO2VbMjg4XT0yMzM7ZVsyOTBdPTI4MztlWzI5NV09MjgxO2VbMjk2XT0xMDI7ZVszMzZdPTEwMztlWzM0Nl09MTA0O2VbMzQ5XT0xMDU7ZVszNTBdPTIzNjtlWzM1MV09MjM3O2VbMzYxXT0xMDY7ZVszNjRdPTEwNztlWzM2N109MTA4O2VbMzcxXT0zMjI7ZVszNzNdPTEwOTtlWzM3NF09MTEwO2VbMzgxXT0xMTE7ZVszODJdPTI0MjtlWzM4M109MjQzO2VbMzg2XT0yNDY7ZVszOTNdPTExMjtlWzM5NV09MTEzO2VbMzk2XT0xMTQ7ZVszOThdPTM0NTtlWzQwMF09MTE1O2VbNDAxXT0zNDc7ZVs0MDNdPTM1MztlWzQxMF09MTE2O2VbNDM3XT0xMTc7ZVs0NDJdPTI1MjtlWzQ0OF09MTE4O2VbNDQ5XT0xMTk7ZVs0NTRdPTEyMDtlWzQ1NV09MTIxO2VbNDU3XT0yNTM7ZVs0NjBdPTEyMjtlWzQ2Ml09MzgyO2VbNDYzXT0zODA7ZVs4NTNdPTQ0O2VbODU1XT01ODtlWzg1Nl09NDY7ZVs4NzZdPTQ3O2VbODc4XT00NTtlWzg4Ml09NDU7ZVs4OTRdPTQwO2VbODk1XT00MTtlWzg5Nl09OTE7ZVs4OTddPTkzO2VbOTIzXT02NDtlWzk0MF09MTYzO2VbMTAwNF09NDg7ZVsxMDA1XT00OTtlWzEwMDZdPTUwO2VbMTAwN109NTE7ZVsxMDA4XT01MjtlWzEwMDldPTUzO2VbMTAxMF09NTQ7ZVsxMDExXT01NTtlWzEwMTJdPTU2O2VbMTAxM109NTc7ZVsxMDgxXT0zNztlWzEwODVdPTQzO2VbMTA4Nl09NDV9KTtmdW5jdGlvbiBnZXRTdGFuZGFyZEZvbnROYW1lKGUpe2NvbnN0IHQ9bm9ybWFsaXplRm9udE5hbWUoZSk7cmV0dXJuIExyKClbdF19ZnVuY3Rpb24gaXNLbm93bkZvbnROYW1lKGUpe2NvbnN0IHQ9bm9ybWFsaXplRm9udE5hbWUoZSk7cmV0dXJuISEoTHIoKVt0XXx8VXIoKVt0XXx8anIoKVt0XXx8WHIoKVt0XSl9Y2xhc3MgVG9Vbmljb2RlTWFwe2NvbnN0cnVjdG9yKGU9W10pe3RoaXMuX21hcD1lfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH1mb3JFYWNoKGUpe2Zvcihjb25zdCB0IGluIHRoaXMuX21hcCllKHQsdGhpcy5fbWFwW3RdLmNvZGVQb2ludEF0KDApKX1oYXMoZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcFtlXX1jaGFyQ29kZU9mKGUpe2NvbnN0IHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcihjb25zdCBhIGluIHQpaWYodFthXT09PWUpcmV0dXJuIDB8YTtyZXR1cm4tMX1hbWVuZChlKXtmb3IoY29uc3QgdCBpbiBlKXRoaXMuX21hcFt0XT1lW3RdfX1jbGFzcyBJZGVudGl0eVRvVW5pY29kZU1hcHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmlyc3RDaGFyPWU7dGhpcy5sYXN0Q2hhcj10fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5sYXN0Q2hhcisxLXRoaXMuZmlyc3RDaGFyfWZvckVhY2goZSl7Zm9yKGxldCB0PXRoaXMuZmlyc3RDaGFyLGE9dGhpcy5sYXN0Q2hhcjt0PD1hO3QrKyllKHQsdCl9aGFzKGUpe3JldHVybiB0aGlzLmZpcnN0Q2hhcjw9ZSYmZTw9dGhpcy5sYXN0Q2hhcn1nZXQoZSl7aWYodGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSl9Y2hhckNvZGVPZihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZT49dGhpcy5maXJzdENoYXImJmU8PXRoaXMubGFzdENoYXI/ZTotMX1hbWVuZChlKXt1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIGFtZW5kKCkiKX19Y2xhc3MgQ0ZGRm9udHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMucHJvcGVydGllcz10O2NvbnN0IGE9bmV3IENGRlBhcnNlcihlLHQsd3IpO3RoaXMuY2ZmPWEucGFyc2UoKTt0aGlzLmNmZi5kdXBsaWNhdGVGaXJzdEdseXBoKCk7Y29uc3Qgcj1uZXcgQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO3RoaXMuc2VhY3M9dGhpcy5jZmYuc2VhY3M7dHJ5e3RoaXMuZGF0YT1yLmNvbXBpbGUoKX1jYXRjaHt3YXJuKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrdC5sb2FkZWROYW1lKTt0aGlzLmRhdGE9ZX10aGlzLl9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50fWdldENoYXJzZXQoKXtyZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0fWdldEdseXBoTWFwcGluZygpe2NvbnN0IGU9dGhpcy5jZmYsdD10aGlzLnByb3BlcnRpZXMse2NpZFRvR2lkTWFwOmEsY01hcDpyfT10LGk9ZS5jaGFyc2V0LmNoYXJzZXQ7bGV0IG4scztpZih0LmNvbXBvc2l0ZSl7bGV0IHQsbztpZihhPy5sZW5ndGg+MCl7dD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgZT0wLHI9YS5sZW5ndGg7ZTxyO2UrKyl7Y29uc3Qgcj1hW2VdO3ZvaWQgMCE9PXImJih0W3JdPWUpfX1uPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZS5pc0NJREZvbnQpZm9yKHM9MDtzPGkubGVuZ3RoO3MrKyl7Y29uc3QgZT1pW3NdO289ci5jaGFyQ29kZU9mKGUpO3ZvaWQgMCE9PXQ/LltvXSYmKG89dFtvXSk7bltvXT1zfWVsc2UgZm9yKHM9MDtzPGUuY2hhclN0cmluZ3MuY291bnQ7cysrKXtvPXIuY2hhckNvZGVPZihzKTtuW29dPXN9cmV0dXJuIG59bGV0IG89ZS5lbmNvZGluZz9lLmVuY29kaW5nLmVuY29kaW5nOm51bGw7dC5pc0ludGVybmFsRm9udCYmKG89dC5kZWZhdWx0RW5jb2RpbmcpO249dHlwZTFGb250R2x5cGhNYXBwaW5nKHQsbyxpKTtyZXR1cm4gbn1oYXNHbHlwaElkKGUpe3JldHVybiB0aGlzLmNmZi5oYXNHbHlwaElkKGUpfV9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKXtjb25zdHtjaGFyc2V0OmUsZW5jb2Rpbmc6dH09dGhpcy5jZmY7aWYoIWV8fCF0KXJldHVybjtjb25zdCBhPWUuY2hhcnNldCxyPXQuZW5jb2RpbmcsaT1bXTtmb3IoY29uc3QgZSBpbiByKXtjb25zdCB0PXJbZV07aWYodD49MCl7Y29uc3Qgcj1hW3RdO3ImJihpW2VdPXIpfX1pLmxlbmd0aD4wJiYodGhpcy5wcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZz1pKX19ZnVuY3Rpb24gZ2V0RmxvYXQyMTQoZSx0KXtyZXR1cm4gcmVhZEludDE2KGUsdCkvMTYzODR9ZnVuY3Rpb24gZ2V0U3Vicm91dGluZUJpYXMoZSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgYT0zMjc2ODt0PDEyNDA/YT0xMDc6dDwzMzkwMCYmKGE9MTEzMSk7cmV0dXJuIGF9ZnVuY3Rpb24gcGFyc2VDbWFwKGUsdCxhKXtjb25zdCByPTE9PT1yZWFkVWludDE2KGUsdCsyKT9yZWFkVWludDMyKGUsdCs4KTpyZWFkVWludDMyKGUsdCsxNiksaT1yZWFkVWludDE2KGUsdCtyKTtsZXQgbixzLG87aWYoND09PWkpe3JlYWRVaW50MTYoZSx0K3IrMik7Y29uc3QgYT1yZWFkVWludDE2KGUsdCtyKzYpPj4xO3M9dCtyKzE0O249W107Zm9yKG89MDtvPGE7bysrLHMrPTIpbltvXT17ZW5kOnJlYWRVaW50MTYoZSxzKX07cys9Mjtmb3Iobz0wO288YTtvKysscys9MiluW29dLnN0YXJ0PXJlYWRVaW50MTYoZSxzKTtmb3Iobz0wO288YTtvKysscys9MiluW29dLmlkRGVsdGE9cmVhZFVpbnQxNihlLHMpO2ZvcihvPTA7bzxhO28rKyxzKz0yKXtsZXQgdD1yZWFkVWludDE2KGUscyk7aWYoMCE9PXQpe25bb10uaWRzPVtdO2ZvcihsZXQgYT0wLHI9bltvXS5lbmQtbltvXS5zdGFydCsxO2E8cjthKyspe25bb10uaWRzW2FdPXJlYWRVaW50MTYoZSxzK3QpO3QrPTJ9fX1yZXR1cm4gbn1pZigxMj09PWkpe2NvbnN0IGE9cmVhZFVpbnQzMihlLHQrcisxMik7cz10K3IrMTY7bj1bXTtmb3Iobz0wO288YTtvKyspe3Q9cmVhZFVpbnQzMihlLHMpO24ucHVzaCh7c3RhcnQ6dCxlbmQ6cmVhZFVpbnQzMihlLHMrNCksaWREZWx0YTpyZWFkVWludDMyKGUscys4KS10fSk7cys9MTJ9cmV0dXJuIG59dGhyb3cgbmV3IEZvcm1hdEVycm9yKGB1bnN1cHBvcnRlZCBjbWFwOiAke2l9YCl9ZnVuY3Rpb24gcGFyc2VDZmYoZSx0LGEscil7Y29uc3QgaT1uZXcgQ0ZGUGFyc2VyKG5ldyBTdHJlYW0oZSx0LGEtdCkse30scikucGFyc2UoKTtyZXR1cm57Z2x5cGhzOmkuY2hhclN0cmluZ3Mub2JqZWN0cyxzdWJyczppLnRvcERpY3QucHJpdmF0ZURpY3Q/LnN1YnJzSW5kZXg/Lm9iamVjdHMsZ3N1YnJzOmkuZ2xvYmFsU3VickluZGV4Py5vYmplY3RzLGlzQ0ZGQ0lERm9udDppLmlzQ0lERm9udCxmZFNlbGVjdDppLmZkU2VsZWN0LGZkQXJyYXk6aS5mZEFycmF5fX1mdW5jdGlvbiBsb29rdXBDbWFwKGUsdCl7Y29uc3QgYT10LmNvZGVQb2ludEF0KDApO2xldCByPTAsaT0wLG49ZS5sZW5ndGgtMTtmb3IoO2k8bjspe2NvbnN0IHQ9aStuKzE+PjE7YTxlW3RdLnN0YXJ0P249dC0xOmk9dH1lW2ldLnN0YXJ0PD1hJiZhPD1lW2ldLmVuZCYmKHI9ZVtpXS5pZERlbHRhKyhlW2ldLmlkcz9lW2ldLmlkc1thLWVbaV0uc3RhcnRdOmEpJjY1NTM1KTtyZXR1cm57Y2hhckNvZGU6YSxnbHlwaElkOnJ9fWZ1bmN0aW9uIGNvbXBpbGVHbHlmKGUsdCxhKXtmdW5jdGlvbiBtb3ZlVG8oZSxhKXtzJiZ0LmFkZCgkdCxzKTtzPVtlLGFdO3QuYWRkKHp0LFtlLGFdKX1mdW5jdGlvbiBsaW5lVG8oZSxhKXt0LmFkZCgkdCxbZSxhXSl9ZnVuY3Rpb24gcXVhZHJhdGljQ3VydmVUbyhlLGEscixpKXt0LmFkZChLdCxbZSxhLHIsaV0pfWxldCByPTA7Y29uc3QgaT1yZWFkSW50MTYoZSxyKTtsZXQgbixzPW51bGwsbz0wLGM9MDtyKz0xMDtpZihpPDApZG97bj1yZWFkVWludDE2KGUscik7Y29uc3QgaT1yZWFkVWludDE2KGUscisyKTtyKz00O2xldCBzLGw7aWYoMSZuKXtpZigyJm4pe3M9cmVhZEludDE2KGUscik7bD1yZWFkSW50MTYoZSxyKzIpfWVsc2V7cz1yZWFkVWludDE2KGUscik7bD1yZWFkVWludDE2KGUscisyKX1yKz00fWVsc2UgaWYoMiZuKXtzPXJlYWRJbnQ4KGUscisrKTtsPXJlYWRJbnQ4KGUscisrKX1lbHNle3M9ZVtyKytdO2w9ZVtyKytdfWlmKDImbil7bz1zO2M9bH1lbHNle289MDtjPTB9bGV0IGg9MSx1PTEsZD0wLGY9MDtpZig4Jm4pe2g9dT1nZXRGbG9hdDIxNChlLHIpO3IrPTJ9ZWxzZSBpZig2NCZuKXtoPWdldEZsb2F0MjE0KGUscik7dT1nZXRGbG9hdDIxNChlLHIrMik7cis9NH1lbHNlIGlmKDEyOCZuKXtoPWdldEZsb2F0MjE0KGUscik7ZD1nZXRGbG9hdDIxNChlLHIrMik7Zj1nZXRGbG9hdDIxNChlLHIrNCk7dT1nZXRGbG9hdDIxNChlLHIrNik7cis9OH1jb25zdCBnPWEuZ2x5cGhzW2ldO2lmKGcpe3Quc2F2ZSgpO3QudHJhbnNmb3JtKFtoLGQsZix1LG8sY10pO2NvbXBpbGVHbHlmKGcsdCxhKTt0LnJlc3RvcmUoKX19d2hpbGUoMzImbik7ZWxzZXtjb25zdCB0PVtdO2xldCBhLHM7Zm9yKGE9MDthPGk7YSsrKXt0LnB1c2gocmVhZFVpbnQxNihlLHIpKTtyKz0yfXIrPTIrcmVhZFVpbnQxNihlLHIpO2NvbnN0IGw9dC5hdCgtMSkrMSxoPVtdO2Zvcig7aC5sZW5ndGg8bDspe249ZVtyKytdO2xldCB0PTE7OCZuJiYodCs9ZVtyKytdKTtmb3IoO3QtLSA+MDspaC5wdXNoKHtmbGFnczpufSl9Zm9yKGE9MDthPGw7YSsrKXtzd2l0Y2goMTgmaFthXS5mbGFncyl7Y2FzZSAwOm8rPXJlYWRJbnQxNihlLHIpO3IrPTI7YnJlYWs7Y2FzZSAyOm8tPWVbcisrXTticmVhaztjYXNlIDE4Om8rPWVbcisrXX1oW2FdLng9b31mb3IoYT0wO2E8bDthKyspe3N3aXRjaCgzNiZoW2FdLmZsYWdzKXtjYXNlIDA6Yys9cmVhZEludDE2KGUscik7cis9MjticmVhaztjYXNlIDQ6Yy09ZVtyKytdO2JyZWFrO2Nhc2UgMzY6Yys9ZVtyKytdfWhbYV0ueT1jfWxldCB1PTA7Zm9yKHI9MDtyPGk7cisrKXtjb25zdCBlPXRbcl0saT1oLnNsaWNlKHUsZSsxKTtpZigxJmlbMF0uZmxhZ3MpaS5wdXNoKGlbMF0pO2Vsc2UgaWYoMSZpLmF0KC0xKS5mbGFncylpLnVuc2hpZnQoaS5hdCgtMSkpO2Vsc2V7Y29uc3QgZT17ZmxhZ3M6MSx4OihpWzBdLngraS5hdCgtMSkueCkvMix5OihpWzBdLnkraS5hdCgtMSkueSkvMn07aS51bnNoaWZ0KGUpO2kucHVzaChlKX1tb3ZlVG8oaVswXS54LGlbMF0ueSk7Zm9yKGE9MSxzPWkubGVuZ3RoO2E8czthKyspaWYoMSZpW2FdLmZsYWdzKWxpbmVUbyhpW2FdLngsaVthXS55KTtlbHNlIGlmKDEmaVthKzFdLmZsYWdzKXtxdWFkcmF0aWNDdXJ2ZVRvKGlbYV0ueCxpW2FdLnksaVthKzFdLngsaVthKzFdLnkpO2ErK31lbHNlIHF1YWRyYXRpY0N1cnZlVG8oaVthXS54LGlbYV0ueSwoaVthXS54K2lbYSsxXS54KS8yLChpW2FdLnkraVthKzFdLnkpLzIpO3U9ZSsxfX19ZnVuY3Rpb24gY29tcGlsZUNoYXJTdHJpbmcoZSx0LGEscil7ZnVuY3Rpb24gbW92ZVRvKGUsYSl7YyYmdC5hZGQoJHQsYyk7Yz1bZSxhXTt0LmFkZCh6dCxbZSxhXSl9ZnVuY3Rpb24gbGluZVRvKGUsYSl7dC5hZGQoJHQsW2UsYV0pfWZ1bmN0aW9uIGJlemllckN1cnZlVG8oZSxhLHIsaSxuLHMpe3QuYWRkKFZ0LFtlLGEscixpLG4sc10pfWNvbnN0IGk9W107bGV0IG49MCxzPTAsbz0wLGM9bnVsbDshZnVuY3Rpb24gcGFyc2UoZSl7bGV0IGM9MDtmb3IoO2M8ZS5sZW5ndGg7KXtsZXQgbCxoLHUsZCxmLGcscCxtLGIseT0hMSx3PWVbYysrXTtzd2l0Y2godyl7Y2FzZSAxOmNhc2UgMzpjYXNlIDE4OmNhc2UgMjM6bys9aS5sZW5ndGg+PjE7eT0hMDticmVhaztjYXNlIDQ6cys9aS5wb3AoKTttb3ZlVG8obixzKTt5PSEwO2JyZWFrO2Nhc2UgNTpmb3IoO2kubGVuZ3RoPjA7KXtuKz1pLnNoaWZ0KCk7cys9aS5zaGlmdCgpO2xpbmVUbyhuLHMpfWJyZWFrO2Nhc2UgNjpmb3IoO2kubGVuZ3RoPjA7KXtuKz1pLnNoaWZ0KCk7bGluZVRvKG4scyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO3MrPWkuc2hpZnQoKTtsaW5lVG8obixzKX1icmVhaztjYXNlIDc6Zm9yKDtpLmxlbmd0aD4wOyl7cys9aS5zaGlmdCgpO2xpbmVUbyhuLHMpO2lmKDA9PT1pLmxlbmd0aClicmVhaztuKz1pLnNoaWZ0KCk7bGluZVRvKG4scyl9YnJlYWs7Y2FzZSA4OmZvcig7aS5sZW5ndGg+MDspe2w9bitpLnNoaWZ0KCk7dT1zK2kuc2hpZnQoKTtoPWwraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7bj1oK2kuc2hpZnQoKTtzPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8obCx1LGgsZCxuLHMpfWJyZWFrO2Nhc2UgMTA6bT1pLnBvcCgpO2I9bnVsbDtpZihhLmlzQ0ZGQ0lERm9udCl7Y29uc3QgZT1hLmZkU2VsZWN0LmdldEZESW5kZXgocik7aWYoZT49MCYmZTxhLmZkQXJyYXkubGVuZ3RoKXtjb25zdCB0PWEuZmRBcnJheVtlXTtsZXQgcjt0LnByaXZhdGVEaWN0Py5zdWJyc0luZGV4JiYocj10LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyk7aWYocil7bSs9Z2V0U3Vicm91dGluZUJpYXMocik7Yj1yW21dfX1lbHNlIHdhcm4oIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWVsc2UgYj1hLnN1YnJzW20rYS5zdWJyc0JpYXNdO2ImJnBhcnNlKGIpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6dz1lW2MrK107c3dpdGNoKHcpe2Nhc2UgMzQ6bD1uK2kuc2hpZnQoKTtoPWwraS5zaGlmdCgpO2Y9cytpLnNoaWZ0KCk7bj1oK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKGwscyxoLGYsbixmKTtsPW4raS5zaGlmdCgpO2g9bCtpLnNoaWZ0KCk7bj1oK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKGwsZixoLHMsbixzKTticmVhaztjYXNlIDM1Omw9bitpLnNoaWZ0KCk7dT1zK2kuc2hpZnQoKTtoPWwraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7bj1oK2kuc2hpZnQoKTtzPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8obCx1LGgsZCxuLHMpO2w9bitpLnNoaWZ0KCk7dT1zK2kuc2hpZnQoKTtoPWwraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7bj1oK2kuc2hpZnQoKTtzPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8obCx1LGgsZCxuLHMpO2kucG9wKCk7YnJlYWs7Y2FzZSAzNjpsPW4raS5zaGlmdCgpO2Y9cytpLnNoaWZ0KCk7aD1sK2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO249aCtpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyhsLGYsaCxnLG4sZyk7bD1uK2kuc2hpZnQoKTtoPWwraS5zaGlmdCgpO3A9ZytpLnNoaWZ0KCk7bj1oK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKGwsZyxoLHAsbixzKTticmVhaztjYXNlIDM3OmNvbnN0IGU9bix0PXM7bD1uK2kuc2hpZnQoKTt1PXMraS5zaGlmdCgpO2g9bCtpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtuPWgraS5zaGlmdCgpO3M9ZCtpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyhsLHUsaCxkLG4scyk7bD1uK2kuc2hpZnQoKTt1PXMraS5zaGlmdCgpO2g9bCtpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtuPWg7cz1kO01hdGguYWJzKG4tZSk+TWF0aC5hYnMocy10KT9uKz1pLnNoaWZ0KCk6cys9aS5zaGlmdCgpO2JlemllckN1cnZlVG8obCx1LGgsZCxuLHMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGB1bmtub3duIG9wZXJhdG9yOiAxMiAke3d9YCl9YnJlYWs7Y2FzZSAxNDppZihpLmxlbmd0aD49NCl7Y29uc3QgZT1pLnBvcCgpLHI9aS5wb3AoKTtzPWkucG9wKCk7bj1pLnBvcCgpO3Quc2F2ZSgpO3QudHJhbnNsYXRlKG4scyk7bGV0IG89bG9va3VwQ21hcChhLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShhLmdseXBoTmFtZU1hcFtscltlXV0pKTtjb21waWxlQ2hhclN0cmluZyhhLmdseXBoc1tvLmdseXBoSWRdLHQsYSxvLmdseXBoSWQpO3QucmVzdG9yZSgpO289bG9va3VwQ21hcChhLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShhLmdseXBoTmFtZU1hcFtscltyXV0pKTtjb21waWxlQ2hhclN0cmluZyhhLmdseXBoc1tvLmdseXBoSWRdLHQsYSxvLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6bys9aS5sZW5ndGg+PjE7Yys9bys3Pj4zO3k9ITA7YnJlYWs7Y2FzZSAyMTpzKz1pLnBvcCgpO24rPWkucG9wKCk7bW92ZVRvKG4scyk7eT0hMDticmVhaztjYXNlIDIyOm4rPWkucG9wKCk7bW92ZVRvKG4scyk7eT0hMDticmVhaztjYXNlIDI0OmZvcig7aS5sZW5ndGg+Mjspe2w9bitpLnNoaWZ0KCk7dT1zK2kuc2hpZnQoKTtoPWwraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7bj1oK2kuc2hpZnQoKTtzPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8obCx1LGgsZCxuLHMpfW4rPWkuc2hpZnQoKTtzKz1pLnNoaWZ0KCk7bGluZVRvKG4scyk7YnJlYWs7Y2FzZSAyNTpmb3IoO2kubGVuZ3RoPjY7KXtuKz1pLnNoaWZ0KCk7cys9aS5zaGlmdCgpO2xpbmVUbyhuLHMpfWw9bitpLnNoaWZ0KCk7dT1zK2kuc2hpZnQoKTtoPWwraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7bj1oK2kuc2hpZnQoKTtzPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8obCx1LGgsZCxuLHMpO2JyZWFrO2Nhc2UgMjY6aS5sZW5ndGglMiYmKG4rPWkuc2hpZnQoKSk7Zm9yKDtpLmxlbmd0aD4wOyl7bD1uO3U9cytpLnNoaWZ0KCk7aD1sK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO249aDtzPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8obCx1LGgsZCxuLHMpfWJyZWFrO2Nhc2UgMjc6aS5sZW5ndGglMiYmKHMrPWkuc2hpZnQoKSk7Zm9yKDtpLmxlbmd0aD4wOyl7bD1uK2kuc2hpZnQoKTt1PXM7aD1sK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO249aCtpLnNoaWZ0KCk7cz1kO2JlemllckN1cnZlVG8obCx1LGgsZCxuLHMpfWJyZWFrO2Nhc2UgMjg6aS5wdXNoKHJlYWRJbnQxNihlLGMpKTtjKz0yO2JyZWFrO2Nhc2UgMjk6bT1pLnBvcCgpK2EuZ3N1YnJzQmlhcztiPWEuZ3N1YnJzW21dO2ImJnBhcnNlKGIpO2JyZWFrO2Nhc2UgMzA6Zm9yKDtpLmxlbmd0aD4wOyl7bD1uO3U9cytpLnNoaWZ0KCk7aD1sK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO249aCtpLnNoaWZ0KCk7cz1kKygxPT09aS5sZW5ndGg/aS5zaGlmdCgpOjApO2JlemllckN1cnZlVG8obCx1LGgsZCxuLHMpO2lmKDA9PT1pLmxlbmd0aClicmVhaztsPW4raS5zaGlmdCgpO3U9cztoPWwraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7cz1kK2kuc2hpZnQoKTtuPWgrKDE9PT1pLmxlbmd0aD9pLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyhsLHUsaCxkLG4scyl9YnJlYWs7Y2FzZSAzMTpmb3IoO2kubGVuZ3RoPjA7KXtsPW4raS5zaGlmdCgpO3U9cztoPWwraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7cz1kK2kuc2hpZnQoKTtuPWgrKDE9PT1pLmxlbmd0aD9pLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyhsLHUsaCxkLG4scyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO2w9bjt1PXMraS5zaGlmdCgpO2g9bCtpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtuPWgraS5zaGlmdCgpO3M9ZCsoMT09PWkubGVuZ3RoP2kuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKGwsdSxoLGQsbixzKX1icmVhaztkZWZhdWx0OmlmKHc8MzIpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGB1bmtub3duIG9wZXJhdG9yOiAke3d9YCk7aWYodzwyNDcpaS5wdXNoKHctMTM5KTtlbHNlIGlmKHc8MjUxKWkucHVzaCgyNTYqKHctMjQ3KStlW2MrK10rMTA4KTtlbHNlIGlmKHc8MjU1KWkucHVzaCgyNTYqLSh3LTI1MSktZVtjKytdLTEwOCk7ZWxzZXtpLnB1c2goKGVbY108PDI0fGVbYysxXTw8MTZ8ZVtjKzJdPDw4fGVbYyszXSkvNjU1MzYpO2MrPTR9fXkmJihpLmxlbmd0aD0wKX19KGUpfWNsYXNzIENvbW1hbmRze2NtZHM9W107dHJhbnNmb3JtU3RhY2s9W107Y3VycmVudFRyYW5zZm9ybT1bMSwwLDAsMSwwLDBdO2FkZChlLHQpe2lmKHQpe2NvbnN0e2N1cnJlbnRUcmFuc2Zvcm06YX09dGhpcztmb3IobGV0IGU9MCxyPXQubGVuZ3RoO2U8cjtlKz0yKVV0aWwuYXBwbHlUcmFuc2Zvcm0odCxhLGUpO3RoaXMuY21kcy5wdXNoKGUsLi4udCl9ZWxzZSB0aGlzLmNtZHMucHVzaChlKX10cmFuc2Zvcm0oZSl7dGhpcy5jdXJyZW50VHJhbnNmb3JtPVV0aWwudHJhbnNmb3JtKHRoaXMuY3VycmVudFRyYW5zZm9ybSxlKX10cmFuc2xhdGUoZSx0KXt0aGlzLnRyYW5zZm9ybShbMSwwLDAsMSxlLHRdKX1zYXZlKCl7dGhpcy50cmFuc2Zvcm1TdGFjay5wdXNoKHRoaXMuY3VycmVudFRyYW5zZm9ybS5zbGljZSgpKX1yZXN0b3JlKCl7dGhpcy5jdXJyZW50VHJhbnNmb3JtPXRoaXMudHJhbnNmb3JtU3RhY2sucG9wKCl8fFsxLDAsMCwxLDAsMF19Z2V0UGF0aCgpe3JldHVybiBuZXcoRmVhdHVyZVRlc3QuaXNGbG9hdDE2QXJyYXlTdXBwb3J0ZWQ/RmxvYXQxNkFycmF5OkZsb2F0MzJBcnJheSkodGhpcy5jbWRzKX19Y2xhc3MgQ29tcGlsZWRGb250e2NvbnN0cnVjdG9yKGUpe3RoaXMuZm9udE1hdHJpeD1lO3RoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWQ9T2JqZWN0LmNyZWF0ZShudWxsKX1nZXRQYXRoSnMoZSl7Y29uc3R7Y2hhckNvZGU6dCxnbHlwaElkOmF9PWxvb2t1cENtYXAodGhpcy5jbWFwLGUpO2xldCByLGk9dGhpcy5jb21waWxlZEdseXBoc1thXTtpZih2b2lkIDA9PT1pKXt0cnl7aT10aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1thXSxhKX1jYXRjaChlKXtpPSIiO3I9ZX10aGlzLmNvbXBpbGVkR2x5cGhzW2FdPWl9dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPz89YTtpZihyKXRocm93IHI7cmV0dXJuIGl9Y29tcGlsZUdseXBoKGUsYSl7aWYoIWU/Lmxlbmd0aHx8MTQ9PT1lWzBdKXJldHVybiIiO2xldCByPXRoaXMuZm9udE1hdHJpeDtpZih0aGlzLmlzQ0ZGQ0lERm9udCl7Y29uc3QgZT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgoYSk7aWYoZT49MCYmZTx0aGlzLmZkQXJyYXkubGVuZ3RoKXtyPXRoaXMuZmRBcnJheVtlXS5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKXx8dH1lbHNlIHdhcm4oIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWFzc2VydChpc051bWJlckFycmF5KHIsNiksIkV4cGVjdGVkIGEgdmFsaWQgZm9udE1hdHJpeC4iKTtjb25zdCBpPW5ldyBDb21tYW5kcztpLnRyYW5zZm9ybShyLnNsaWNlKCkpO3RoaXMuY29tcGlsZUdseXBoSW1wbChlLGksYSk7aS5hZGQoSnQpO3JldHVybiBpLmdldFBhdGgoKX1jb21waWxlR2x5cGhJbXBsKCl7dW5yZWFjaGFibGUoIkNoaWxkcmVuIGNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCB0aGlzLiIpfWhhc0J1aWx0UGF0aChlKXtjb25zdHtjaGFyQ29kZTp0LGdseXBoSWQ6YX09bG9va3VwQ21hcCh0aGlzLmNtYXAsZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbYV0mJnZvaWQgMCE9PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFt0XX19Y2xhc3MgVHJ1ZVR5cGVDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoYXx8WzQ4OGUtNiwwLDAsNDg4ZS02LDAsMF0pO3RoaXMuZ2x5cGhzPWU7dGhpcy5jbWFwPXR9Y29tcGlsZUdseXBoSW1wbChlLHQpe2NvbXBpbGVHbHlmKGUsdCx0aGlzKX19Y2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoYXx8Wy4wMDEsMCwwLC4wMDEsMCwwXSk7dGhpcy5nbHlwaHM9ZS5nbHlwaHM7dGhpcy5nc3VicnM9ZS5nc3VicnN8fFtdO3RoaXMuc3VicnM9ZS5zdWJyc3x8W107dGhpcy5jbWFwPXQ7dGhpcy5nbHlwaE5hbWVNYXA9ZnIoKTt0aGlzLmdzdWJyc0JpYXM9Z2V0U3Vicm91dGluZUJpYXModGhpcy5nc3VicnMpO3RoaXMuc3VicnNCaWFzPWdldFN1YnJvdXRpbmVCaWFzKHRoaXMuc3VicnMpO3RoaXMuaXNDRkZDSURGb250PWUuaXNDRkZDSURGb250O3RoaXMuZmRTZWxlY3Q9ZS5mZFNlbGVjdDt0aGlzLmZkQXJyYXk9ZS5mZEFycmF5fWNvbXBpbGVHbHlwaEltcGwoZSx0LGEpe2NvbXBpbGVDaGFyU3RyaW5nKGUsdCx0aGlzLGEpfX1jbGFzcyBGb250UmVuZGVyZXJGYWN0b3J5e3N0YXRpYyBjcmVhdGUoZSx0KXtjb25zdCBhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7bGV0IHIsaSxuLHMsbyxjO2NvbnN0IGw9cmVhZFVpbnQxNihhLDQpO2ZvcihsZXQgZT0wLGg9MTI7ZTxsO2UrKyxoKz0xNil7Y29uc3QgZT1ieXRlc1RvU3RyaW5nKGEuc3ViYXJyYXkoaCxoKzQpKSxsPXJlYWRVaW50MzIoYSxoKzgpLHU9cmVhZFVpbnQzMihhLGgrMTIpO3N3aXRjaChlKXtjYXNlImNtYXAiOnI9cGFyc2VDbWFwKGEsbCk7YnJlYWs7Y2FzZSJnbHlmIjppPWEuc3ViYXJyYXkobCxsK3UpO2JyZWFrO2Nhc2UibG9jYSI6bj1hLnN1YmFycmF5KGwsbCt1KTticmVhaztjYXNlImhlYWQiOmM9cmVhZFVpbnQxNihhLGwrMTgpO289cmVhZFVpbnQxNihhLGwrNTApO2JyZWFrO2Nhc2UiQ0ZGICI6cz1wYXJzZUNmZihhLGwsbCt1LHQpfX1pZihpKXtjb25zdCB0PWM/WzEvYywwLDAsMS9jLDAsMF06ZS5mb250TWF0cml4O3JldHVybiBuZXcgVHJ1ZVR5cGVDb21waWxlZChmdW5jdGlvbiBwYXJzZUdseWZUYWJsZShlLHQsYSl7bGV0IHIsaTtpZihhKXtyPTQ7aT1yZWFkVWludDMyfWVsc2V7cj0yO2k9KGUsdCk9PjIqcmVhZFVpbnQxNihlLHQpfWNvbnN0IG49W107bGV0IHM9aSh0LDApO2ZvcihsZXQgYT1yO2E8dC5sZW5ndGg7YSs9cil7Y29uc3Qgcj1pKHQsYSk7bi5wdXNoKGUuc3ViYXJyYXkocyxyKSk7cz1yfXJldHVybiBufShpLG4sbykscix0KX1yZXR1cm4gbmV3IFR5cGUyQ29tcGlsZWQocyxyLGUuZm9udE1hdHJpeCl9fWNvbnN0IEdyPWdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbihlKXtlLkNvdXJpZXI9NjAwO2VbIkNvdXJpZXItQm9sZCJdPTYwMDtlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09NjAwO2VbIkNvdXJpZXItT2JsaXF1ZSJdPTYwMDtlLkhlbHZldGljYT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09Mjc4O2UucXVvdGVkYmw9MzU1O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NjY3O2UucXVvdGVyaWdodD0yMjI7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0yNzg7ZS5zZW1pY29sb249Mjc4O2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTU1NjtlLmF0PTEwMTU7ZS5BPTY2NztlLkI9NjY3O2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTUwMDtlLks9NjY3O2UuTD01NTY7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9Mjc4O2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0yNzg7ZS5hc2NpaWNpcmN1bT00Njk7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yMjI7ZS5hPTU1NjtlLmI9NTU2O2UuYz01MDA7ZS5kPTU1NjtlLmU9NTU2O2UuZj0yNzg7ZS5nPTU1NjtlLmg9NTU2O2UuaT0yMjI7ZS5qPTIyMjtlLms9NTAwO2UubD0yMjI7ZS5tPTgzMztlLm49NTU2O2Uubz01NTY7ZS5wPTU1NjtlLnE9NTU2O2Uucj0zMzM7ZS5zPTUwMDtlLnQ9Mjc4O2UudT01NTY7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NTAwO2UuYnJhY2VsZWZ0PTMzNDtlLmJhcj0yNjA7ZS5icmFjZXJpZ2h0PTMzNDtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0xOTE7ZS5xdW90ZWRibGxlZnQ9MzMzO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTUwMDtlLmZsPTUwMDtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01Mzc7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MjIyO2UucXVvdGVkYmxiYXNlPTMzMztlLnF1b3RlZGJscmlnaHQ9MzMzO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTU1NjtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTIyMjtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTY2NztlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTUwMDtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTUwMDtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9MjIyO2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTUwMDtlLnNjZWRpbGxhPTUwMDtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj02Njc7ZS5yY2Fyb249MzMzO2UuY2NlZGlsbGE9NTAwO2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTY0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTY2NztlLkFicmV2ZT02Njc7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTAwO2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI2MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9MzMzO2Uub21hY3Jvbj01NTY7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTIyMjtlLnRjYXJvbj0zMTc7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTY2NztlLkFkaWVyZXNpcz02Njc7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9MjIyO2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT01NTY7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01MDA7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTU1NjtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT01NTY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01NTY7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01NTY7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj0yOTk7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTU1NjtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj01NTY7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01NTY7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NTU2O2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01NTY7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zMzM7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTU1NjtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NTU2O2UuQXRpbGRlPTY2NztlLkFvZ29uZWs9NjY3O2UuQXJpbmc9NjY3O2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NTU2O2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01NTY7ZS5ldGg9NTU2O2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSk7ZVsiSGVsdmV0aWNhLUJvbGQiXT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDc0O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NzIyO2UucXVvdGVyaWdodD0yNzg7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTYxMTtlLmF0PTk3NTtlLkE9NzIyO2UuQj03MjI7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTU2O2UuSz03MjI7ZS5MPTYxMTtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU4NDtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTI3ODtlLmE9NTU2O2UuYj02MTE7ZS5jPTU1NjtlLmQ9NjExO2UuZT01NTY7ZS5mPTMzMztlLmc9NjExO2UuaD02MTE7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01NTY7ZS5sPTI3ODtlLm09ODg5O2Uubj02MTE7ZS5vPTYxMTtlLnA9NjExO2UucT02MTE7ZS5yPTM4OTtlLnM9NTU2O2UudD0zMzM7ZS51PTYxMTtlLnY9NTU2O2Uudz03Nzg7ZS54PTU1NjtlLnk9NTU2O2Uuej01MDA7ZS5icmFjZWxlZnQ9Mzg5O2UuYmFyPTI4MDtlLmJyYWNlcmlnaHQ9Mzg5O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTIzODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NjExO2UuZmw9NjExO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTU1NjtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yNzg7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD02MTE7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01NTY7ZS5zY29tbWFhY2NlbnQ9NTU2O2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NjExO2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTU2O2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTU2O2Uuc2NlZGlsbGE9NTU2O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD02MTE7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT01NTY7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NzQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz02MTE7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT02MTE7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTU1NjtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01NTY7ZS5uYWN1dGU9NjExO2UudW1hY3Jvbj02MTE7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjgwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTYxMTtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM4OTtlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTYxMTtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTU1NjtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NjExO2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTYxMTtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTYxMTtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTYxMTtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTQwMDtlLktjb21tYWFjY2VudD03MjI7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTYxMTtlLm50aWxkZT02MTE7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT02MTE7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTYxMTtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NjExO2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NjExO2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTU2O2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTYxMTtlLnRjb21tYWFjY2VudD0zMzM7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz02MTE7ZS51ZGllcmVzaXM9NjExO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTYxMTtlLmV0aD02MTE7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTYxMTtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KTtlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDc0O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NzIyO2UucXVvdGVyaWdodD0yNzg7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTYxMTtlLmF0PTk3NTtlLkE9NzIyO2UuQj03MjI7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTU2O2UuSz03MjI7ZS5MPTYxMTtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU4NDtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTI3ODtlLmE9NTU2O2UuYj02MTE7ZS5jPTU1NjtlLmQ9NjExO2UuZT01NTY7ZS5mPTMzMztlLmc9NjExO2UuaD02MTE7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01NTY7ZS5sPTI3ODtlLm09ODg5O2Uubj02MTE7ZS5vPTYxMTtlLnA9NjExO2UucT02MTE7ZS5yPTM4OTtlLnM9NTU2O2UudD0zMzM7ZS51PTYxMTtlLnY9NTU2O2Uudz03Nzg7ZS54PTU1NjtlLnk9NTU2O2Uuej01MDA7ZS5icmFjZWxlZnQ9Mzg5O2UuYmFyPTI4MDtlLmJyYWNlcmlnaHQ9Mzg5O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTIzODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NjExO2UuZmw9NjExO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTU1NjtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yNzg7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD02MTE7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01NTY7ZS5zY29tbWFhY2NlbnQ9NTU2O2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NjExO2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTU2O2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTU2O2Uuc2NlZGlsbGE9NTU2O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD02MTE7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT01NTY7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NzQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz02MTE7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT02MTE7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTU1NjtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01NTY7ZS5uYWN1dGU9NjExO2UudW1hY3Jvbj02MTE7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjgwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTYxMTtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM4OTtlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTYxMTtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTU1NjtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NjExO2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTYxMTtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTYxMTtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTYxMTtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTQwMDtlLktjb21tYWFjY2VudD03MjI7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTYxMTtlLm50aWxkZT02MTE7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT02MTE7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTYxMTtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NjExO2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NjExO2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTU2O2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTYxMTtlLnRjb21tYWFjY2VudD0zMzM7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz02MTE7ZS51ZGllcmVzaXM9NjExO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTYxMTtlLmV0aD02MTE7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTYxMTtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KTtlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPWdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0yNzg7ZS5xdW90ZWRibD0zNTU7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD02Njc7ZS5xdW90ZXJpZ2h0PTIyMjtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NTU2O2UuYXQ9MTAxNTtlLkE9NjY3O2UuQj02Njc7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTAwO2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0yNzg7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTI3ODtlLmFzY2lpY2lyY3VtPTQ2OTtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTIyMjtlLmE9NTU2O2UuYj01NTY7ZS5jPTUwMDtlLmQ9NTU2O2UuZT01NTY7ZS5mPTI3ODtlLmc9NTU2O2UuaD01NTY7ZS5pPTIyMjtlLmo9MjIyO2Uuaz01MDA7ZS5sPTIyMjtlLm09ODMzO2Uubj01NTY7ZS5vPTU1NjtlLnA9NTU2O2UucT01NTY7ZS5yPTMzMztlLnM9NTAwO2UudD0yNzg7ZS51PTU1NjtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej01MDA7ZS5icmFjZWxlZnQ9MzM0O2UuYmFyPTI2MDtlLmJyYWNlcmlnaHQ9MzM0O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTE5MTtlLnF1b3RlZGJsbGVmdD0zMzM7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTUzNztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yMjI7ZS5xdW90ZWRibGJhc2U9MzMzO2UucXVvdGVkYmxyaWdodD0zMzM7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9MjIyO2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NjY3O2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9NTAwO2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTAwO2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yMjI7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTAwO2Uuc2NlZGlsbGE9NTAwO2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTY2NztlLnJjYXJvbj0zMzM7ZS5jY2VkaWxsYT01MDA7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NjQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NjY3O2UuQWJyZXZlPTY2NztlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01MDA7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjYwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zMzM7ZS5vbWFjcm9uPTU1NjtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9MjIyO2UudGNhcm9uPTMxNztlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjY3O2UuQWRpZXJlc2lzPTY2NztlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yMjI7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTU1NjtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTUwMDtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTU2O2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTU1NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTU1NjtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTU1NjtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTI5OTtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTU1NjtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTU1NjtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT01NTY7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTU1NjtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTMzMztlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTU2O2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjY3O2UuQW9nb25laz02Njc7ZS5BcmluZz02Njc7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz01NTY7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTU1NjtlLmV0aD01NTY7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KTtlLlN5bWJvbD1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UudW5pdmVyc2FsPTcxMztlLm51bWJlcnNpZ249NTAwO2UuZXhpc3RlbnRpYWw9NTQ5O2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2Uuc3VjaHRoYXQ9NDM5O2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2ttYXRoPTUwMDtlLnBsdXM9NTQ5O2UuY29tbWE9MjUwO2UubWludXM9NTQ5O2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTQ5O2UuZXF1YWw9NTQ5O2UuZ3JlYXRlcj01NDk7ZS5xdWVzdGlvbj00NDQ7ZS5jb25ncnVlbnQ9NTQ5O2UuQWxwaGE9NzIyO2UuQmV0YT02Njc7ZS5DaGk9NzIyO2UuRGVsdGE9NjEyO2UuRXBzaWxvbj02MTE7ZS5QaGk9NzYzO2UuR2FtbWE9NjAzO2UuRXRhPTcyMjtlLklvdGE9MzMzO2UudGhldGExPTYzMTtlLkthcHBhPTcyMjtlLkxhbWJkYT02ODY7ZS5NdT04ODk7ZS5OdT03MjI7ZS5PbWljcm9uPTcyMjtlLlBpPTc2ODtlLlRoZXRhPTc0MTtlLlJobz01NTY7ZS5TaWdtYT01OTI7ZS5UYXU9NjExO2UuVXBzaWxvbj02OTA7ZS5zaWdtYTE9NDM5O2UuT21lZ2E9NzY4O2UuWGk9NjQ1O2UuUHNpPTc5NTtlLlpldGE9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UudGhlcmVmb3JlPTg2MztlLmJyYWNrZXRyaWdodD0zMzM7ZS5wZXJwZW5kaWN1bGFyPTY1ODtlLnVuZGVyc2NvcmU9NTAwO2UucmFkaWNhbGV4PTUwMDtlLmFscGhhPTYzMTtlLmJldGE9NTQ5O2UuY2hpPTU0OTtlLmRlbHRhPTQ5NDtlLmVwc2lsb249NDM5O2UucGhpPTUyMTtlLmdhbW1hPTQxMTtlLmV0YT02MDM7ZS5pb3RhPTMyOTtlLnBoaTE9NjAzO2Uua2FwcGE9NTQ5O2UubGFtYmRhPTU0OTtlLm11PTU3NjtlLm51PTUyMTtlLm9taWNyb249NTQ5O2UucGk9NTQ5O2UudGhldGE9NTIxO2UucmhvPTU0OTtlLnNpZ21hPTYwMztlLnRhdT00Mzk7ZS51cHNpbG9uPTU3NjtlLm9tZWdhMT03MTM7ZS5vbWVnYT02ODY7ZS54aT00OTM7ZS5wc2k9Njg2O2UuemV0YT00OTQ7ZS5icmFjZWxlZnQ9NDgwO2UuYmFyPTIwMDtlLmJyYWNlcmlnaHQ9NDgwO2Uuc2ltaWxhcj01NDk7ZS5FdXJvPTc1MDtlLlVwc2lsb24xPTYyMDtlLm1pbnV0ZT0yNDc7ZS5sZXNzZXF1YWw9NTQ5O2UuZnJhY3Rpb249MTY3O2UuaW5maW5pdHk9NzEzO2UuZmxvcmluPTUwMDtlLmNsdWI9NzUzO2UuZGlhbW9uZD03NTM7ZS5oZWFydD03NTM7ZS5zcGFkZT03NTM7ZS5hcnJvd2JvdGg9MTA0MjtlLmFycm93bGVmdD05ODc7ZS5hcnJvd3VwPTYwMztlLmFycm93cmlnaHQ9OTg3O2UuYXJyb3dkb3duPTYwMztlLmRlZ3JlZT00MDA7ZS5wbHVzbWludXM9NTQ5O2Uuc2Vjb25kPTQxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5tdWx0aXBseT01NDk7ZS5wcm9wb3J0aW9uYWw9NzEzO2UucGFydGlhbGRpZmY9NDk0O2UuYnVsbGV0PTQ2MDtlLmRpdmlkZT01NDk7ZS5ub3RlcXVhbD01NDk7ZS5lcXVpdmFsZW5jZT01NDk7ZS5hcHByb3hlcXVhbD01NDk7ZS5lbGxpcHNpcz0xZTM7ZS5hcnJvd3ZlcnRleD02MDM7ZS5hcnJvd2hvcml6ZXg9MWUzO2UuY2FycmlhZ2VyZXR1cm49NjU4O2UuYWxlcGg9ODIzO2UuSWZyYWt0dXI9Njg2O2UuUmZyYWt0dXI9Nzk1O2Uud2VpZXJzdHJhc3M9OTg3O2UuY2lyY2xlbXVsdGlwbHk9NzY4O2UuY2lyY2xlcGx1cz03Njg7ZS5lbXB0eXNldD04MjM7ZS5pbnRlcnNlY3Rpb249NzY4O2UudW5pb249NzY4O2UucHJvcGVyc3VwZXJzZXQ9NzEzO2UucmVmbGV4c3VwZXJzZXQ9NzEzO2Uubm90c3Vic2V0PTcxMztlLnByb3BlcnN1YnNldD03MTM7ZS5yZWZsZXhzdWJzZXQ9NzEzO2UuZWxlbWVudD03MTM7ZS5ub3RlbGVtZW50PTcxMztlLmFuZ2xlPTc2ODtlLmdyYWRpZW50PTcxMztlLnJlZ2lzdGVyc2VyaWY9NzkwO2UuY29weXJpZ2h0c2VyaWY9NzkwO2UudHJhZGVtYXJrc2VyaWY9ODkwO2UucHJvZHVjdD04MjM7ZS5yYWRpY2FsPTU0OTtlLmRvdG1hdGg9MjUwO2UubG9naWNhbG5vdD03MTM7ZS5sb2dpY2FsYW5kPTYwMztlLmxvZ2ljYWxvcj02MDM7ZS5hcnJvd2RibGJvdGg9MTA0MjtlLmFycm93ZGJsbGVmdD05ODc7ZS5hcnJvd2RibHVwPTYwMztlLmFycm93ZGJscmlnaHQ9OTg3O2UuYXJyb3dkYmxkb3duPTYwMztlLmxvemVuZ2U9NDk0O2UuYW5nbGVsZWZ0PTMyOTtlLnJlZ2lzdGVyc2Fucz03OTA7ZS5jb3B5cmlnaHRzYW5zPTc5MDtlLnRyYWRlbWFya3NhbnM9Nzg2O2Uuc3VtbWF0aW9uPTcxMztlLnBhcmVubGVmdHRwPTM4NDtlLnBhcmVubGVmdGV4PTM4NDtlLnBhcmVubGVmdGJ0PTM4NDtlLmJyYWNrZXRsZWZ0dHA9Mzg0O2UuYnJhY2tldGxlZnRleD0zODQ7ZS5icmFja2V0bGVmdGJ0PTM4NDtlLmJyYWNlbGVmdHRwPTQ5NDtlLmJyYWNlbGVmdG1pZD00OTQ7ZS5icmFjZWxlZnRidD00OTQ7ZS5icmFjZWV4PTQ5NDtlLmFuZ2xlcmlnaHQ9MzI5O2UuaW50ZWdyYWw9Mjc0O2UuaW50ZWdyYWx0cD02ODY7ZS5pbnRlZ3JhbGV4PTY4NjtlLmludGVncmFsYnQ9Njg2O2UucGFyZW5yaWdodHRwPTM4NDtlLnBhcmVucmlnaHRleD0zODQ7ZS5wYXJlbnJpZ2h0YnQ9Mzg0O2UuYnJhY2tldHJpZ2h0dHA9Mzg0O2UuYnJhY2tldHJpZ2h0ZXg9Mzg0O2UuYnJhY2tldHJpZ2h0YnQ9Mzg0O2UuYnJhY2VyaWdodHRwPTQ5NDtlLmJyYWNlcmlnaHRtaWQ9NDk0O2UuYnJhY2VyaWdodGJ0PTQ5NDtlLmFwcGxlPTc5MH0pO2VbIlRpbWVzLVJvbWFuIl09Z2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQwODtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NjQ7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTY0O2UuZXF1YWw9NTY0O2UuZ3JlYXRlcj01NjQ7ZS5xdWVzdGlvbj00NDQ7ZS5hdD05MjE7ZS5BPTcyMjtlLkI9NjY3O2UuQz02Njc7ZS5EPTcyMjtlLkU9NjExO2UuRj01NTY7ZS5HPTcyMjtlLkg9NzIyO2UuST0zMzM7ZS5KPTM4OTtlLks9NzIyO2UuTD02MTE7ZS5NPTg4OTtlLk49NzIyO2UuTz03MjI7ZS5QPTU1NjtlLlE9NzIyO2UuUj02Njc7ZS5TPTU1NjtlLlQ9NjExO2UuVT03MjI7ZS5WPTcyMjtlLlc9OTQ0O2UuWD03MjI7ZS5ZPTcyMjtlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT00Njk7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTQ0NDtlLmI9NTAwO2UuYz00NDQ7ZS5kPTUwMDtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTAwO2UuaT0yNzg7ZS5qPTI3ODtlLms9NTAwO2UubD0yNzg7ZS5tPTc3ODtlLm49NTAwO2Uubz01MDA7ZS5wPTUwMDtlLnE9NTAwO2Uucj0zMzM7ZS5zPTM4OTtlLnQ9Mjc4O2UudT01MDA7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NDQ0O2UuYnJhY2VsZWZ0PTQ4MDtlLmJhcj0yMDA7ZS5icmFjZXJpZ2h0PTQ4MDtlLmFzY2lpdGlsZGU9NTQxO2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0xODA7ZS5xdW90ZWRibGxlZnQ9NDQ0O2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD00NTM7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTQ0NDtlLnF1b3RlZGJscmlnaHQ9NDQ0O2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTQ0NDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9ODg5O2Uub3JkZmVtaW5pbmU9Mjc2O2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03MjI7ZS5PRT04ODk7ZS5vcmRtYXNjdWxpbmU9MzEwO2UuYWU9NjY3O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTUwMDtlLklkaWVyZXNpcz0zMzM7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTQ0NDtlLnVodW5nYXJ1bWxhdXQ9NTAwO2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz03MjI7ZS5kaXZpZGU9NTY0O2UuWWFjdXRlPTcyMjtlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT00NDQ7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTQ0NDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTUwMDtlLkVkaWVyZXNpcz02MTE7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc2MDtlLkVtYWNyb249NjExO2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTQ0NDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTQ0NDtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NjY3O2UuYXRpbGRlPTQ0NDtlLkVkb3RhY2NlbnQ9NjExO2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj02Njc7ZS5HY29tbWFhY2NlbnQ9NzIyO2UudWNpcmN1bWZsZXg9NTAwO2UuYWNpcmN1bWZsZXg9NDQ0O2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249MzMzO2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj01NTY7ZS5PbWFjcm9uPTcyMjtlLlJhY3V0ZT02Njc7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTU4ODtlLlVtYWNyb249NzIyO2UudXJpbmc9NTAwO2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9NzIyO2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01NjQ7ZS51YWN1dGU9NTAwO2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjExO2UuYWRpZXJlc2lzPTQ0NDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTUwMDtlLnVtYWNyb249NTAwO2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zMzM7ZS5wbHVzbWludXM9NTY0O2UuYnJva2VuYmFyPTIwMDtlLnJlZ2lzdGVyZWQ9NzYwO2UuR2JyZXZlPTcyMjtlLklkb3RhY2NlbnQ9MzMzO2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02MTE7ZS5yYWN1dGU9MzMzO2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NjY3O2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zMjY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTQ0NDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTcyMjtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTQ0NDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9NzIyO2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTUwMDtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03MjI7ZS5tdT01MDA7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTYxMTtlLmRjcm9hdD01MDA7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zNDQ7ZS5LY29tbWFhY2NlbnQ9NzIyO2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz05ODA7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zMzM7ZS5JbWFjcm9uPTMzMztlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTAwO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjExO2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9NzIyO2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NjY3O2UudWdyYXZlPTUwMDtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zMzM7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD02Njc7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTcyMjtlLnpkb3RhY2NlbnQ9NDQ0O2UuRWNhcm9uPTYxMTtlLklvZ29uZWs9MzMzO2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTU2NDtlLkljaXJjdW1mbGV4PTMzMztlLm5jYXJvbj01MDA7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD01NjQ7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTUwMDtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTQ0NDtlLm5jb21tYWFjY2VudD01MDA7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSk7ZVsiVGltZXMtQm9sZCJdPWdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD01NTU7ZS5udW1iZXJzaWduPTUwMDtlLmRvbGxhcj01MDA7ZS5wZXJjZW50PTFlMztlLmFtcGVyc2FuZD04MzM7ZS5xdW90ZXJpZ2h0PTMzMztlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTUwMDtlLnBsdXM9NTcwO2UuY29tbWE9MjUwO2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTU3MDtlLmVxdWFsPTU3MDtlLmdyZWF0ZXI9NTcwO2UucXVlc3Rpb249NTAwO2UuYXQ9OTMwO2UuQT03MjI7ZS5CPTY2NztlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTc3ODtlLkk9Mzg5O2UuSj01MDA7ZS5LPTc3ODtlLkw9NjY3O2UuTT05NDQ7ZS5OPTcyMjtlLk89Nzc4O2UuUD02MTE7ZS5RPTc3ODtlLlI9NzIyO2UuUz01NTY7ZS5UPTY2NztlLlU9NzIyO2UuVj03MjI7ZS5XPTFlMztlLlg9NzIyO2UuWT03MjI7ZS5aPTY2NztlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NTgxO2UudW5kZXJzY29yZT01MDA7ZS5xdW90ZWxlZnQ9MzMzO2UuYT01MDA7ZS5iPTU1NjtlLmM9NDQ0O2UuZD01NTY7ZS5lPTQ0NDtlLmY9MzMzO2UuZz01MDA7ZS5oPTU1NjtlLmk9Mjc4O2Uuaj0zMzM7ZS5rPTU1NjtlLmw9Mjc4O2UubT04MzM7ZS5uPTU1NjtlLm89NTAwO2UucD01NTY7ZS5xPTU1NjtlLnI9NDQ0O2Uucz0zODk7ZS50PTMzMztlLnU9NTU2O2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTQ0NDtlLmJyYWNlbGVmdD0zOTQ7ZS5iYXI9MjIwO2UuYnJhY2VyaWdodD0zOTQ7ZS5hc2NpaXRpbGRlPTUyMDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01MDA7ZS5zdGVybGluZz01MDA7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTAwO2UuZmxvcmluPTUwMDtlLnNlY3Rpb249NTAwO2UuY3VycmVuY3k9NTAwO2UucXVvdGVzaW5nbGU9Mjc4O2UucXVvdGVkYmxsZWZ0PTUwMDtlLmd1aWxsZW1vdGxlZnQ9NTAwO2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01NTY7ZS5mbD01NTY7ZS5lbmRhc2g9NTAwO2UuZGFnZ2VyPTUwMDtlLmRhZ2dlcmRibD01MDA7ZS5wZXJpb2RjZW50ZXJlZD0yNTA7ZS5wYXJhZ3JhcGg9NTQwO2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTMzMztlLnF1b3RlZGJsYmFzZT01MDA7ZS5xdW90ZWRibHJpZ2h0PTUwMDtlLmd1aWxsZW1vdHJpZ2h0PTUwMDtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj01MDA7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTMwMDtlLkxzbGFzaD02Njc7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTMzMDtlLmFlPTcyMjtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NTAwO2Uub2U9NzIyO2UuZ2VybWFuZGJscz01NTY7ZS5JZGllcmVzaXM9Mzg5O2UuZWFjdXRlPTQ0NDtlLmFicmV2ZT01MDA7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj00NDQ7ZS5ZZGllcmVzaXM9NzIyO2UuZGl2aWRlPTU3MDtlLllhY3V0ZT03MjI7ZS5BY2lyY3VtZmxleD03MjI7ZS5hYWN1dGU9NTAwO2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD0zODk7ZS5lY2lyY3VtZmxleD00NDQ7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01MDA7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03NDc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj00NDQ7ZS5hcmluZz01MDA7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT01MDA7ZS5UY29tbWFhY2NlbnQ9NjY3O2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01MDA7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj0zODk7ZS5zY2VkaWxsYT0zODk7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00OTQ7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTUwMDtlLkFtYWNyb249NzIyO2UucmNhcm9uPTQ0NDtlLmNjZWRpbGxhPTQ0NDtlLlpkb3RhY2NlbnQ9NjY3O2UuVGhvcm49NjExO2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTU1NjtlLmRjYXJvbj02NzI7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzAwO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT03MjI7ZS5BYnJldmU9NzIyO2UubXVsdGlwbHk9NTcwO2UudWFjdXRlPTU1NjtlLlRjYXJvbj02Njc7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01MDA7ZS5lZGllcmVzaXM9NDQ0O2UuY2FjdXRlPTQ0NDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mzg5O2UucGx1c21pbnVzPTU3MDtlLmJyb2tlbmJhcj0yMjA7ZS5yZWdpc3RlcmVkPTc0NztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTM4OTtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTQ0NDtlLm9tYWNyb249NTAwO2UuWmFjdXRlPTY2NztlLlpjYXJvbj02Njc7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249NDE2O2UuZW9nb25laz00NDQ7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT03MjI7ZS5BZGllcmVzaXM9NzIyO2UuZWdyYXZlPTQ0NDtlLnphY3V0ZT00NDQ7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NTAwO2UuYW1hY3Jvbj01MDA7ZS5zYWN1dGU9Mzg5O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01NTY7ZS50d29zdXBlcmlvcj0zMDA7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NTU2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTAwO2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTU2O2UudGhyZWVxdWFydGVycz03NTA7ZS5TY2VkaWxsYT01NTY7ZS5sY2Fyb249Mzk0O2UuS2NvbW1hYWNjZW50PTc3ODtlLkxhY3V0ZT02Njc7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD00NDQ7ZS5JZ3JhdmU9Mzg5O2UuSW1hY3Jvbj0zODk7ZS5MY2Fyb249NjY3O2Uub25laGFsZj03NTA7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTAwO2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NDQ0O2UuZ2JyZXZlPTUwMDtlLm9uZXF1YXJ0ZXI9NzUwO2UuU2Nhcm9uPTU1NjtlLlNjb21tYWFjY2VudD01NTY7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTAwO2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTU0OTtlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9NDQ0O2UuTnRpbGRlPTcyMjtlLm90aWxkZT01MDA7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTY2NztlLkF0aWxkZT03MjI7ZS5Bb2dvbmVrPTcyMjtlLkFyaW5nPTcyMjtlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTQ0NDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTM4OTtlLmtjb21tYWFjY2VudD01NTY7ZS5taW51cz01NzA7ZS5JY2lyY3VtZmxleD0zODk7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTMzMztlLmxvZ2ljYWxub3Q9NTcwO2Uub2RpZXJlc2lzPTUwMDtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTAwO2UuZXRoPTUwMDtlLnpjYXJvbj00NDQ7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzAwO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTUwMH0pO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09Mzg5O2UucXVvdGVkYmw9NTU1O2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTU3MDtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01NzA7ZS5lcXVhbD01NzA7ZS5ncmVhdGVyPTU3MDtlLnF1ZXN0aW9uPTUwMDtlLmF0PTgzMjtlLkE9NjY3O2UuQj02Njc7ZS5DPTY2NztlLkQ9NzIyO2UuRT02Njc7ZS5GPTY2NztlLkc9NzIyO2UuSD03Nzg7ZS5JPTM4OTtlLko9NTAwO2UuSz02Njc7ZS5MPTYxMTtlLk09ODg5O2UuTj03MjI7ZS5PPTcyMjtlLlA9NjExO2UuUT03MjI7ZS5SPTY2NztlLlM9NTU2O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz04ODk7ZS5YPTY2NztlLlk9NjExO2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU3MDtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NTAwO2UuYj01MDA7ZS5jPTQ0NDtlLmQ9NTAwO2UuZT00NDQ7ZS5mPTMzMztlLmc9NTAwO2UuaD01NTY7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01MDA7ZS5sPTI3ODtlLm09Nzc4O2Uubj01NTY7ZS5vPTUwMDtlLnA9NTAwO2UucT01MDA7ZS5yPTM4OTtlLnM9Mzg5O2UudD0yNzg7ZS51PTU1NjtlLnY9NDQ0O2Uudz02Njc7ZS54PTUwMDtlLnk9NDQ0O2Uuej0zODk7ZS5icmFjZWxlZnQ9MzQ4O2UuYmFyPTIyMDtlLmJyYWNlcmlnaHQ9MzQ4O2UuYXNjaWl0aWxkZT01NzA7ZS5leGNsYW1kb3duPTM4OTtlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTI3ODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTU2O2UuZmw9NTU2O2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTUwMDtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NTAwO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT05NDQ7ZS5vcmRmZW1pbmluZT0yNjY7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTcyMjtlLk9FPTk0NDtlLm9yZG1hc2N1bGluZT0zMDA7ZS5hZT03MjI7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTcyMjtlLmdlcm1hbmRibHM9NTAwO2UuSWRpZXJlc2lzPTM4OTtlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NTAwO2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTYxMTtlLmRpdmlkZT01NzA7ZS5ZYWN1dGU9NjExO2UuQWNpcmN1bWZsZXg9NjY3O2UuYWFjdXRlPTUwMDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT00NDQ7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTAwO2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzQ3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NTAwO2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTAwO2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT02Njc7ZS5hdGlsZGU9NTAwO2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTY2NztlLkdjb21tYWFjY2VudD03MjI7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01MDA7ZS5BbWFjcm9uPTY2NztlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTYxMTtlLk9tYWNyb249NzIyO2UuUmFjdXRlPTY2NztlLlNhY3V0ZT01NTY7ZS5kY2Fyb249NjA4O2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03MjI7ZS5BZ3JhdmU9NjY3O2UuQWJyZXZlPTY2NztlLm11bHRpcGx5PTU3MDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTQ0NDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTAwO2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTM4OTtlLnBsdXNtaW51cz01NzA7ZS5icm9rZW5iYXI9MjIwO2UucmVnaXN0ZXJlZD03NDc7ZS5HYnJldmU9NzIyO2UuSWRvdGFjY2VudD0zODk7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT02Njc7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM2NjtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjY3O2UuQWRpZXJlc2lzPTY2NztlLmVncmF2ZT00NDQ7ZS56YWN1dGU9Mzg5O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9NzIyO2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NTAwO2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03MjI7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTAwO2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTcyMjtlLm11PTU3NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTUwMDtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTU2O2UubGNhcm9uPTM4MjtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTM4OTtlLkltYWNyb249Mzg5O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01NTY7ZS5TY29tbWFhY2NlbnQ9NTU2O2UuT2h1bmdhcnVtbGF1dD03MjI7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj02Njc7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTY2NztlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NjY3O2UuQW9nb25laz02Njc7ZS5BcmluZz02Njc7ZS5PdGlsZGU9NzIyO2UuemRvdGFjY2VudD0zODk7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0zODk7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NjA2O2UuSWNpcmN1bWZsZXg9Mzg5O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTYwNjtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249Mzg5O2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KTtlWyJUaW1lcy1JdGFsaWMiXT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDIwO2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTY3NTtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz02NzU7ZS5lcXVhbD02NzU7ZS5ncmVhdGVyPTY3NTtlLnF1ZXN0aW9uPTUwMDtlLmF0PTkyMDtlLkE9NjExO2UuQj02MTE7ZS5DPTY2NztlLkQ9NzIyO2UuRT02MTE7ZS5GPTYxMTtlLkc9NzIyO2UuSD03MjI7ZS5JPTMzMztlLko9NDQ0O2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj02Njc7ZS5PPTcyMjtlLlA9NjExO2UuUT03MjI7ZS5SPTYxMTtlLlM9NTAwO2UuVD01NTY7ZS5VPTcyMjtlLlY9NjExO2UuVz04MzM7ZS5YPTYxMTtlLlk9NTU2O2UuWj01NTY7ZS5icmFja2V0bGVmdD0zODk7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTM4OTtlLmFzY2lpY2lyY3VtPTQyMjtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NTAwO2UuYj01MDA7ZS5jPTQ0NDtlLmQ9NTAwO2UuZT00NDQ7ZS5mPTI3ODtlLmc9NTAwO2UuaD01MDA7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz00NDQ7ZS5sPTI3ODtlLm09NzIyO2Uubj01MDA7ZS5vPTUwMDtlLnA9NTAwO2UucT01MDA7ZS5yPTM4OTtlLnM9Mzg5O2UudD0yNzg7ZS51PTUwMDtlLnY9NDQ0O2Uudz02Njc7ZS54PTQ0NDtlLnk9NDQ0O2Uuej0zODk7ZS5icmFjZWxlZnQ9NDAwO2UuYmFyPTI3NTtlLmJyYWNlcmlnaHQ9NDAwO2UuYXNjaWl0aWxkZT01NDE7ZS5leGNsYW1kb3duPTM4OTtlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTIxNDtlLnF1b3RlZGJsbGVmdD01NTY7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTUyMztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NTU2O2UucXVvdGVkYmxyaWdodD01NTY7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz04ODk7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NTAwO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD04ODk7ZS5BRT04ODk7ZS5vcmRmZW1pbmluZT0yNzY7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTcyMjtlLk9FPTk0NDtlLm9yZG1hc2N1bGluZT0zMTA7ZS5hZT02Njc7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTY2NztlLmdlcm1hbmRibHM9NTAwO2UuSWRpZXJlc2lzPTMzMztlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NTAwO2UudWh1bmdhcnVtbGF1dD01MDA7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTU1NjtlLmRpdmlkZT02NzU7ZS5ZYWN1dGU9NTU2O2UuQWNpcmN1bWZsZXg9NjExO2UuYWFjdXRlPTUwMDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT00NDQ7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTAwO2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTAwO2UuRWRpZXJlc2lzPTYxMTtlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzYwO2UuRW1hY3Jvbj02MTE7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NTAwO2UuTmNvbW1hYWNjZW50PTY2NztlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTAwO2UuVGNvbW1hYWNjZW50PTU1NjtlLkNhY3V0ZT02Njc7ZS5hdGlsZGU9NTAwO2UuRWRvdGFjY2VudD02MTE7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTYxMTtlLkdjb21tYWFjY2VudD03MjI7ZS51Y2lyY3VtZmxleD01MDA7ZS5hY2lyY3VtZmxleD01MDA7ZS5BbWFjcm9uPTYxMTtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTU1NjtlLlRob3JuPTYxMTtlLk9tYWNyb249NzIyO2UuUmFjdXRlPTYxMTtlLlNhY3V0ZT01MDA7ZS5kY2Fyb249NTQ0O2UuVW1hY3Jvbj03MjI7ZS51cmluZz01MDA7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03MjI7ZS5BZ3JhdmU9NjExO2UuQWJyZXZlPTYxMTtlLm11bHRpcGx5PTY3NTtlLnVhY3V0ZT01MDA7ZS5UY2Fyb249NTU2O2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTQ0NDtlLk5hY3V0ZT02Njc7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02MTE7ZS5hZGllcmVzaXM9NTAwO2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTAwO2UudW1hY3Jvbj01MDA7ZS5OY2Fyb249NjY3O2UuSWFjdXRlPTMzMztlLnBsdXNtaW51cz02NzU7ZS5icm9rZW5iYXI9Mjc1O2UucmVnaXN0ZXJlZD03NjA7ZS5HYnJldmU9NzIyO2UuSWRvdGFjY2VudD0zMzM7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTYxMTtlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT01NTY7ZS5aY2Fyb249NTU2O2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT02Njc7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTMwMDtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjExO2UuQWRpZXJlc2lzPTYxMTtlLmVncmF2ZT00NDQ7ZS56YWN1dGU9Mzg5O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9NzIyO2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NTAwO2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03MjI7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTAwO2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTcyMjtlLm11PTUwMDtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjExO2UuZGNyb2F0PTUwMDtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTAwO2UubGNhcm9uPTMwMDtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTk4MDtlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTMzMztlLkltYWNyb249MzMzO2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01MDA7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02MTE7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01MDA7ZS5TY29tbWFhY2NlbnQ9NTAwO2UuT2h1bmdhcnVtbGF1dD03MjI7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj02Njc7ZS51Z3JhdmU9NTAwO2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT02Njc7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTYxMTtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjExO2UuQW9nb25laz02MTE7ZS5BcmluZz02MTE7ZS5PdGlsZGU9NzIyO2UuemRvdGFjY2VudD0zODk7ZS5FY2Fyb249NjExO2UuSW9nb25laz0zMzM7ZS5rY29tbWFhY2NlbnQ9NDQ0O2UubWludXM9Njc1O2UuSWNpcmN1bWZsZXg9MzMzO2UubmNhcm9uPTUwMDtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTY3NTtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTAwO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249Mzg5O2UubmNvbW1hYWNjZW50PTUwMDtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KTtlLlphcGZEaW5nYmF0cz1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5hMT05NzQ7ZS5hMj05NjE7ZS5hMjAyPTk3NDtlLmEzPTk4MDtlLmE0PTcxOTtlLmE1PTc4OTtlLmExMTk9NzkwO2UuYTExOD03OTE7ZS5hMTE3PTY5MDtlLmExMT05NjA7ZS5hMTI9OTM5O2UuYTEzPTU0OTtlLmExND04NTU7ZS5hMTU9OTExO2UuYTE2PTkzMztlLmExMDU9OTExO2UuYTE3PTk0NTtlLmExOD05NzQ7ZS5hMTk9NzU1O2UuYTIwPTg0NjtlLmEyMT03NjI7ZS5hMjI9NzYxO2UuYTIzPTU3MTtlLmEyND02Nzc7ZS5hMjU9NzYzO2UuYTI2PTc2MDtlLmEyNz03NTk7ZS5hMjg9NzU0O2UuYTY9NDk0O2UuYTc9NTUyO2UuYTg9NTM3O2UuYTk9NTc3O2UuYTEwPTY5MjtlLmEyOT03ODY7ZS5hMzA9Nzg4O2UuYTMxPTc4ODtlLmEzMj03OTA7ZS5hMzM9NzkzO2UuYTM0PTc5NDtlLmEzNT04MTY7ZS5hMzY9ODIzO2UuYTM3PTc4OTtlLmEzOD04NDE7ZS5hMzk9ODIzO2UuYTQwPTgzMztlLmE0MT04MTY7ZS5hNDI9ODMxO2UuYTQzPTkyMztlLmE0ND03NDQ7ZS5hNDU9NzIzO2UuYTQ2PTc0OTtlLmE0Nz03OTA7ZS5hNDg9NzkyO2UuYTQ5PTY5NTtlLmE1MD03NzY7ZS5hNTE9NzY4O2UuYTUyPTc5MjtlLmE1Mz03NTk7ZS5hNTQ9NzA3O2UuYTU1PTcwODtlLmE1Nj02ODI7ZS5hNTc9NzAxO2UuYTU4PTgyNjtlLmE1OT04MTU7ZS5hNjA9Nzg5O2UuYTYxPTc4OTtlLmE2Mj03MDc7ZS5hNjM9Njg3O2UuYTY0PTY5NjtlLmE2NT02ODk7ZS5hNjY9Nzg2O2UuYTY3PTc4NztlLmE2OD03MTM7ZS5hNjk9NzkxO2UuYTcwPTc4NTtlLmE3MT03OTE7ZS5hNzI9ODczO2UuYTczPTc2MTtlLmE3ND03NjI7ZS5hMjAzPTc2MjtlLmE3NT03NTk7ZS5hMjA0PTc1OTtlLmE3Nj04OTI7ZS5hNzc9ODkyO2UuYTc4PTc4ODtlLmE3OT03ODQ7ZS5hODE9NDM4O2UuYTgyPTEzODtlLmE4Mz0yNzc7ZS5hODQ9NDE1O2UuYTk3PTM5MjtlLmE5OD0zOTI7ZS5hOTk9NjY4O2UuYTEwMD02Njg7ZS5hODk9MzkwO2UuYTkwPTM5MDtlLmE5Mz0zMTc7ZS5hOTQ9MzE3O2UuYTkxPTI3NjtlLmE5Mj0yNzY7ZS5hMjA1PTUwOTtlLmE4NT01MDk7ZS5hMjA2PTQxMDtlLmE4Nj00MTA7ZS5hODc9MjM0O2UuYTg4PTIzNDtlLmE5NT0zMzQ7ZS5hOTY9MzM0O2UuYTEwMT03MzI7ZS5hMTAyPTU0NDtlLmExMDM9NTQ0O2UuYTEwND05MTA7ZS5hMTA2PTY2NztlLmExMDc9NzYwO2UuYTEwOD03NjA7ZS5hMTEyPTc3NjtlLmExMTE9NTk1O2UuYTExMD02OTQ7ZS5hMTA5PTYyNjtlLmExMjA9Nzg4O2UuYTEyMT03ODg7ZS5hMTIyPTc4ODtlLmExMjM9Nzg4O2UuYTEyND03ODg7ZS5hMTI1PTc4ODtlLmExMjY9Nzg4O2UuYTEyNz03ODg7ZS5hMTI4PTc4ODtlLmExMjk9Nzg4O2UuYTEzMD03ODg7ZS5hMTMxPTc4ODtlLmExMzI9Nzg4O2UuYTEzMz03ODg7ZS5hMTM0PTc4ODtlLmExMzU9Nzg4O2UuYTEzNj03ODg7ZS5hMTM3PTc4ODtlLmExMzg9Nzg4O2UuYTEzOT03ODg7ZS5hMTQwPTc4ODtlLmExNDE9Nzg4O2UuYTE0Mj03ODg7ZS5hMTQzPTc4ODtlLmExNDQ9Nzg4O2UuYTE0NT03ODg7ZS5hMTQ2PTc4ODtlLmExNDc9Nzg4O2UuYTE0OD03ODg7ZS5hMTQ5PTc4ODtlLmExNTA9Nzg4O2UuYTE1MT03ODg7ZS5hMTUyPTc4ODtlLmExNTM9Nzg4O2UuYTE1ND03ODg7ZS5hMTU1PTc4ODtlLmExNTY9Nzg4O2UuYTE1Nz03ODg7ZS5hMTU4PTc4ODtlLmExNTk9Nzg4O2UuYTE2MD04OTQ7ZS5hMTYxPTgzODtlLmExNjM9MTAxNjtlLmExNjQ9NDU4O2UuYTE5Nj03NDg7ZS5hMTY1PTkyNDtlLmExOTI9NzQ4O2UuYTE2Nj05MTg7ZS5hMTY3PTkyNztlLmExNjg9OTI4O2UuYTE2OT05Mjg7ZS5hMTcwPTgzNDtlLmExNzE9ODczO2UuYTE3Mj04Mjg7ZS5hMTczPTkyNDtlLmExNjI9OTI0O2UuYTE3ND05MTc7ZS5hMTc1PTkzMDtlLmExNzY9OTMxO2UuYTE3Nz00NjM7ZS5hMTc4PTg4MztlLmExNzk9ODM2O2UuYTE5Mz04MzY7ZS5hMTgwPTg2NztlLmExOTk9ODY3O2UuYTE4MT02OTY7ZS5hMjAwPTY5NjtlLmExODI9ODc0O2UuYTIwMT04NzQ7ZS5hMTgzPTc2MDtlLmExODQ9OTQ2O2UuYTE5Nz03NzE7ZS5hMTg1PTg2NTtlLmExOTQ9NzcxO2UuYTE5OD04ODg7ZS5hMTg2PTk2NztlLmExOTU9ODg4O2UuYTE4Nz04MzE7ZS5hMTg4PTg3MztlLmExODk9OTI3O2UuYTE5MD05NzA7ZS5hMTkxPTkxOH0pfSksenI9Z2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uKGUpe2UuQ291cmllcj17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0Oi00MjZ9O2VbIkNvdXJpZXItQm9sZCJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDM5fTtlWyJDb3VyaWVyLU9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn07ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDI2fTtlLkhlbHZldGljYT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM307ZVsiSGVsdmV0aWNhLUJvbGQiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUzMn07ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM307ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9O2VbIlRpbWVzLVJvbWFuIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjIseEhlaWdodDo0NTB9O2VbIlRpbWVzLUJvbGQiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY3Nix4SGVpZ2h0OjQ2MX07ZVsiVGltZXMtSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NTMseEhlaWdodDo0NDF9O2VbIlRpbWVzLUJvbGRJdGFsaWMiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY2OSx4SGVpZ2h0OjQ2Mn07ZS5TeW1ib2w9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfTtlLlphcGZEaW5nYmF0cz17YXNjZW50Ok1hdGguTmFOLGRlc2NlbnQ6TWF0aC5OYU4sY2FwSGVpZ2h0Ok1hdGguTmFOLHhIZWlnaHQ6TWF0aC5OYU59fSk7Y2xhc3MgR2x5ZlRhYmxle2NvbnN0cnVjdG9yKHtnbHlmVGFibGU6ZSxpc0dseXBoTG9jYXRpb25zTG9uZzp0LGxvY2FUYWJsZTphLG51bUdseXBoczpyfSl7dGhpcy5nbHlwaHM9W107Y29uc3QgaT1uZXcgRGF0YVZpZXcoYS5idWZmZXIsYS5ieXRlT2Zmc2V0LGEuYnl0ZUxlbmd0aCksbj1uZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCkscz10PzQ6MjtsZXQgbz10P2kuZ2V0VWludDMyKDApOjIqaS5nZXRVaW50MTYoMCksYz0wO2ZvcihsZXQgZT0wO2U8cjtlKyspe2MrPXM7Y29uc3QgZT10P2kuZ2V0VWludDMyKGMpOjIqaS5nZXRVaW50MTYoYyk7aWYoZT09PW8pe3RoaXMuZ2x5cGhzLnB1c2gobmV3IEdseXBoKHt9KSk7Y29udGludWV9Y29uc3QgYT1HbHlwaC5wYXJzZShvLG4pO3RoaXMuZ2x5cGhzLnB1c2goYSk7bz1lfX1nZXRTaXplKCl7cmV0dXJuIE1hdGguc3VtUHJlY2lzZSh0aGlzLmdseXBocy5tYXAoZT0+ZS5nZXRTaXplKCkrMyYtNCkpfXdyaXRlKCl7Y29uc3QgZT10aGlzLmdldFNpemUoKSx0PW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoZSkpLGE9ZT4xMzEwNzAscj1hPzQ6MixpPW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoKHRoaXMuZ2x5cGhzLmxlbmd0aCsxKSpyKSk7YT9pLnNldFVpbnQzMigwLDApOmkuc2V0VWludDE2KDAsMCk7bGV0IG49MCxzPTA7Zm9yKGNvbnN0IGUgb2YgdGhpcy5nbHlwaHMpe24rPWUud3JpdGUobix0KTtuPW4rMyYtNDtzKz1yO2E/aS5zZXRVaW50MzIocyxuKTppLnNldFVpbnQxNihzLG4+PjEpfXJldHVybntpc0xvY2F0aW9uTG9uZzphLGxvY2E6bmV3IFVpbnQ4QXJyYXkoaS5idWZmZXIpLGdseWY6bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpfX1zY2FsZShlKXtmb3IobGV0IHQ9MCxhPXRoaXMuZ2x5cGhzLmxlbmd0aDt0PGE7dCsrKXRoaXMuZ2x5cGhzW3RdLnNjYWxlKGVbdF0pfX1jbGFzcyBHbHlwaHtjb25zdHJ1Y3Rvcih7aGVhZGVyOmU9bnVsbCxzaW1wbGU6dD1udWxsLGNvbXBvc2l0ZXM6YT1udWxsfSl7dGhpcy5oZWFkZXI9ZTt0aGlzLnNpbXBsZT10O3RoaXMuY29tcG9zaXRlcz1hfXN0YXRpYyBwYXJzZShlLHQpe2NvbnN0W2Escl09R2x5cGhIZWFkZXIucGFyc2UoZSx0KTtlKz1hO2lmKHIubnVtYmVyT2ZDb250b3VyczwwKXtjb25zdCBhPVtdO2Zvcig7Oyl7Y29uc3RbcixpXT1Db21wb3NpdGVHbHlwaC5wYXJzZShlLHQpO2UrPXI7YS5wdXNoKGkpO2lmKCEoMzImaS5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBHbHlwaCh7aGVhZGVyOnIsY29tcG9zaXRlczphfSl9Y29uc3QgaT1TaW1wbGVHbHlwaC5wYXJzZShlLHQsci5udW1iZXJPZkNvbnRvdXJzKTtyZXR1cm4gbmV3IEdseXBoKHtoZWFkZXI6cixzaW1wbGU6aX0pfWdldFNpemUoKXtpZighdGhpcy5oZWFkZXIpcmV0dXJuIDA7Y29uc3QgZT10aGlzLnNpbXBsZT90aGlzLnNpbXBsZS5nZXRTaXplKCk6TWF0aC5zdW1QcmVjaXNlKHRoaXMuY29tcG9zaXRlcy5tYXAoZT0+ZS5nZXRTaXplKCkpKTtyZXR1cm4gdGhpcy5oZWFkZXIuZ2V0U2l6ZSgpK2V9d3JpdGUoZSx0KXtpZighdGhpcy5oZWFkZXIpcmV0dXJuIDA7Y29uc3QgYT1lO2UrPXRoaXMuaGVhZGVyLndyaXRlKGUsdCk7aWYodGhpcy5zaW1wbGUpZSs9dGhpcy5zaW1wbGUud3JpdGUoZSx0KTtlbHNlIGZvcihjb25zdCBhIG9mIHRoaXMuY29tcG9zaXRlcyllKz1hLndyaXRlKGUsdCk7cmV0dXJuIGUtYX1zY2FsZShlKXtpZighdGhpcy5oZWFkZXIpcmV0dXJuO2NvbnN0IHQ9KHRoaXMuaGVhZGVyLnhNaW4rdGhpcy5oZWFkZXIueE1heCkvMjt0aGlzLmhlYWRlci5zY2FsZSh0LGUpO2lmKHRoaXMuc2ltcGxlKXRoaXMuc2ltcGxlLnNjYWxlKHQsZSk7ZWxzZSBmb3IoY29uc3QgYSBvZiB0aGlzLmNvbXBvc2l0ZXMpYS5zY2FsZSh0LGUpfX1jbGFzcyBHbHlwaEhlYWRlcntjb25zdHJ1Y3Rvcih7bnVtYmVyT2ZDb250b3VyczplLHhNaW46dCx5TWluOmEseE1heDpyLHlNYXg6aX0pe3RoaXMubnVtYmVyT2ZDb250b3Vycz1lO3RoaXMueE1pbj10O3RoaXMueU1pbj1hO3RoaXMueE1heD1yO3RoaXMueU1heD1pfXN0YXRpYyBwYXJzZShlLHQpe3JldHVyblsxMCxuZXcgR2x5cGhIZWFkZXIoe251bWJlck9mQ29udG91cnM6dC5nZXRJbnQxNihlKSx4TWluOnQuZ2V0SW50MTYoZSsyKSx5TWluOnQuZ2V0SW50MTYoZSs0KSx4TWF4OnQuZ2V0SW50MTYoZSs2KSx5TWF4OnQuZ2V0SW50MTYoZSs4KX0pXX1nZXRTaXplKCl7cmV0dXJuIDEwfXdyaXRlKGUsdCl7dC5zZXRJbnQxNihlLHRoaXMubnVtYmVyT2ZDb250b3Vycyk7dC5zZXRJbnQxNihlKzIsdGhpcy54TWluKTt0LnNldEludDE2KGUrNCx0aGlzLnlNaW4pO3Quc2V0SW50MTYoZSs2LHRoaXMueE1heCk7dC5zZXRJbnQxNihlKzgsdGhpcy55TWF4KTtyZXR1cm4gMTB9c2NhbGUoZSx0KXt0aGlzLnhNaW49TWF0aC5yb3VuZChlKyh0aGlzLnhNaW4tZSkqdCk7dGhpcy54TWF4PU1hdGgucm91bmQoZSsodGhpcy54TWF4LWUpKnQpfX1jbGFzcyBDb250b3Vye2NvbnN0cnVjdG9yKHtmbGFnczplLHhDb29yZGluYXRlczp0LHlDb29yZGluYXRlczphfSl7dGhpcy54Q29vcmRpbmF0ZXM9dDt0aGlzLnlDb29yZGluYXRlcz1hO3RoaXMuZmxhZ3M9ZX19Y2xhc3MgU2ltcGxlR2x5cGh7Y29uc3RydWN0b3Ioe2NvbnRvdXJzOmUsaW5zdHJ1Y3Rpb25zOnR9KXt0aGlzLmNvbnRvdXJzPWU7dGhpcy5pbnN0cnVjdGlvbnM9dH1zdGF0aWMgcGFyc2UoZSx0LGEpe2NvbnN0IHI9W107Zm9yKGxldCBpPTA7aTxhO2krKyl7Y29uc3QgYT10LmdldFVpbnQxNihlKTtlKz0yO3IucHVzaChhKX1jb25zdCBpPXJbYS0xXSsxLG49dC5nZXRVaW50MTYoZSk7ZSs9Mjtjb25zdCBzPW5ldyBVaW50OEFycmF5KHQpLnNsaWNlKGUsZStuKTtlKz1uO2NvbnN0IG89W107Zm9yKGxldCBhPTA7YTxpO2UrKyxhKyspe2xldCByPXQuZ2V0VWludDgoZSk7by5wdXNoKHIpO2lmKDgmcil7Y29uc3QgaT10LmdldFVpbnQ4KCsrZSk7cl49ODtmb3IobGV0IGU9MDtlPGk7ZSsrKW8ucHVzaChyKTthKz1pfX1jb25zdCBjPVtdO2xldCBsPVtdLGg9W10sdT1bXTtjb25zdCBkPVtdO2xldCBmPTAsZz0wO2ZvcihsZXQgYT0wO2E8aTthKyspe2NvbnN0IGk9b1thXTtpZigyJmkpe2NvbnN0IGE9dC5nZXRVaW50OChlKyspO2crPTE2Jmk/YTotYTtsLnB1c2goZyl9ZWxzZSBpZigxNiZpKWwucHVzaChnKTtlbHNle2crPXQuZ2V0SW50MTYoZSk7ZSs9MjtsLnB1c2goZyl9aWYocltmXT09PWEpe2YrKztjLnB1c2gobCk7bD1bXX19Zz0wO2Y9MDtmb3IobGV0IGE9MDthPGk7YSsrKXtjb25zdCBpPW9bYV07aWYoNCZpKXtjb25zdCBhPXQuZ2V0VWludDgoZSsrKTtnKz0zMiZpP2E6LWE7aC5wdXNoKGcpfWVsc2UgaWYoMzImaSloLnB1c2goZyk7ZWxzZXtnKz10LmdldEludDE2KGUpO2UrPTI7aC5wdXNoKGcpfXUucHVzaCgxJml8NjQmaSk7aWYocltmXT09PWEpe2w9Y1tmXTtmKys7ZC5wdXNoKG5ldyBDb250b3VyKHtmbGFnczp1LHhDb29yZGluYXRlczpsLHlDb29yZGluYXRlczpofSkpO2g9W107dT1bXX19cmV0dXJuIG5ldyBTaW1wbGVHbHlwaCh7Y29udG91cnM6ZCxpbnN0cnVjdGlvbnM6c30pfWdldFNpemUoKXtsZXQgZT0yKnRoaXMuY29udG91cnMubGVuZ3RoKzIrdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoLHQ9MCxhPTA7Zm9yKGNvbnN0IHIgb2YgdGhpcy5jb250b3Vycyl7ZSs9ci5mbGFncy5sZW5ndGg7Zm9yKGxldCBpPTAsbj1yLnhDb29yZGluYXRlcy5sZW5ndGg7aTxuO2krKyl7Y29uc3Qgbj1yLnhDb29yZGluYXRlc1tpXSxzPXIueUNvb3JkaW5hdGVzW2ldO2xldCBvPU1hdGguYWJzKG4tdCk7bz4yNTU/ZSs9MjpvPjAmJihlKz0xKTt0PW47bz1NYXRoLmFicyhzLWEpO28+MjU1P2UrPTI6bz4wJiYoZSs9MSk7YT1zfX1yZXR1cm4gZX13cml0ZShlLHQpe2NvbnN0IGE9ZSxyPVtdLGk9W10sbj1bXTtsZXQgcz0wLG89MDtmb3IoY29uc3QgYSBvZiB0aGlzLmNvbnRvdXJzKXtmb3IobGV0IGU9MCx0PWEueENvb3JkaW5hdGVzLmxlbmd0aDtlPHQ7ZSsrKXtsZXQgdD1hLmZsYWdzW2VdO2NvbnN0IGM9YS54Q29vcmRpbmF0ZXNbZV07bGV0IGw9Yy1zO2lmKDA9PT1sKXt0fD0xNjtyLnB1c2goMCl9ZWxzZXtjb25zdCBlPU1hdGguYWJzKGwpO2lmKGU8PTI1NSl7dHw9bD49MD8xODoyO3IucHVzaChlKX1lbHNlIHIucHVzaChsKX1zPWM7Y29uc3QgaD1hLnlDb29yZGluYXRlc1tlXTtsPWgtbztpZigwPT09bCl7dHw9MzI7aS5wdXNoKDApfWVsc2V7Y29uc3QgZT1NYXRoLmFicyhsKTtpZihlPD0yNTUpe3R8PWw+PTA/MzY6NDtpLnB1c2goZSl9ZWxzZSBpLnB1c2gobCl9bz1oO24ucHVzaCh0KX10LnNldFVpbnQxNihlLHIubGVuZ3RoLTEpO2UrPTJ9dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7aWYodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKXtuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKTtlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGh9Zm9yKGNvbnN0IGEgb2Ygbil0LnNldFVpbnQ4KGUrKyxhKTtmb3IobGV0IGE9MCxpPXIubGVuZ3RoO2E8aTthKyspe2NvbnN0IGk9clthXSxzPW5bYV07aWYoMiZzKXQuc2V0VWludDgoZSsrLGkpO2Vsc2UgaWYoISgxNiZzKSl7dC5zZXRJbnQxNihlLGkpO2UrPTJ9fWZvcihsZXQgYT0wLHI9aS5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1pW2FdLHM9blthXTtpZig0JnMpdC5zZXRVaW50OChlKysscik7ZWxzZSBpZighKDMyJnMpKXt0LnNldEludDE2KGUscik7ZSs9Mn19cmV0dXJuIGUtYX1zY2FsZShlLHQpe2Zvcihjb25zdCBhIG9mIHRoaXMuY29udG91cnMpaWYoMCE9PWEueENvb3JkaW5hdGVzLmxlbmd0aClmb3IobGV0IHI9MCxpPWEueENvb3JkaW5hdGVzLmxlbmd0aDtyPGk7cisrKWEueENvb3JkaW5hdGVzW3JdPU1hdGgucm91bmQoZSsoYS54Q29vcmRpbmF0ZXNbcl0tZSkqdCl9fWNsYXNzIENvbXBvc2l0ZUdseXBoe2NvbnN0cnVjdG9yKHtmbGFnczplLGdseXBoSW5kZXg6dCxhcmd1bWVudDE6YSxhcmd1bWVudDI6cix0cmFuc2Y6aSxpbnN0cnVjdGlvbnM6bn0pe3RoaXMuZmxhZ3M9ZTt0aGlzLmdseXBoSW5kZXg9dDt0aGlzLmFyZ3VtZW50MT1hO3RoaXMuYXJndW1lbnQyPXI7dGhpcy50cmFuc2Y9aTt0aGlzLmluc3RydWN0aW9ucz1ufXN0YXRpYyBwYXJzZShlLHQpe2NvbnN0IGE9ZSxyPVtdO2xldCBpPXQuZ2V0VWludDE2KGUpO2NvbnN0IG49dC5nZXRVaW50MTYoZSsyKTtlKz00O2xldCBzLG87aWYoMSZpKXtpZigyJmkpe3M9dC5nZXRJbnQxNihlKTtvPXQuZ2V0SW50MTYoZSsyKX1lbHNle3M9dC5nZXRVaW50MTYoZSk7bz10LmdldFVpbnQxNihlKzIpfWUrPTQ7aV49MX1lbHNle2lmKDImaSl7cz10LmdldEludDgoZSk7bz10LmdldEludDgoZSsxKX1lbHNle3M9dC5nZXRVaW50OChlKTtvPXQuZ2V0VWludDgoZSsxKX1lKz0yfWlmKDgmaSl7ci5wdXNoKHQuZ2V0VWludDE2KGUpKTtlKz0yfWVsc2UgaWYoNjQmaSl7ci5wdXNoKHQuZ2V0VWludDE2KGUpLHQuZ2V0VWludDE2KGUrMikpO2UrPTR9ZWxzZSBpZigxMjgmaSl7ci5wdXNoKHQuZ2V0VWludDE2KGUpLHQuZ2V0VWludDE2KGUrMiksdC5nZXRVaW50MTYoZSs0KSx0LmdldFVpbnQxNihlKzYpKTtlKz04fWxldCBjPW51bGw7aWYoMjU2Jmkpe2NvbnN0IGE9dC5nZXRVaW50MTYoZSk7ZSs9MjtjPW5ldyBVaW50OEFycmF5KHQpLnNsaWNlKGUsZSthKTtlKz1hfXJldHVybltlLWEsbmV3IENvbXBvc2l0ZUdseXBoKHtmbGFnczppLGdseXBoSW5kZXg6bixhcmd1bWVudDE6cyxhcmd1bWVudDI6byx0cmFuc2Y6cixpbnN0cnVjdGlvbnM6Y30pXX1nZXRTaXplKCl7bGV0IGU9NCsyKnRoaXMudHJhbnNmLmxlbmd0aDsyNTYmdGhpcy5mbGFncyYmKGUrPTIrdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtlKz0yOzImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fChlKz0yKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fChlKz0yKTtyZXR1cm4gZX13cml0ZShlLHQpe2NvbnN0IGE9ZTsyJnRoaXMuZmxhZ3M/dGhpcy5hcmd1bWVudDE+PS0xMjgmJnRoaXMuYXJndW1lbnQxPD0xMjcmJnRoaXMuYXJndW1lbnQyPj0tMTI4JiZ0aGlzLmFyZ3VtZW50Mjw9MTI3fHwodGhpcy5mbGFnc3w9MSk6dGhpcy5hcmd1bWVudDE+PTAmJnRoaXMuYXJndW1lbnQxPD0yNTUmJnRoaXMuYXJndW1lbnQyPj0wJiZ0aGlzLmFyZ3VtZW50Mjw9MjU1fHwodGhpcy5mbGFnc3w9MSk7dC5zZXRVaW50MTYoZSx0aGlzLmZsYWdzKTt0LnNldFVpbnQxNihlKzIsdGhpcy5nbHlwaEluZGV4KTtlKz00O2lmKDEmdGhpcy5mbGFncyl7aWYoMiZ0aGlzLmZsYWdzKXt0LnNldEludDE2KGUsdGhpcy5hcmd1bWVudDEpO3Quc2V0SW50MTYoZSsyLHRoaXMuYXJndW1lbnQyKX1lbHNle3Quc2V0VWludDE2KGUsdGhpcy5hcmd1bWVudDEpO3Quc2V0VWludDE2KGUrMix0aGlzLmFyZ3VtZW50Mil9ZSs9NH1lbHNle3Quc2V0VWludDgoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRVaW50OChlKzEsdGhpcy5hcmd1bWVudDIpO2UrPTJ9aWYoMjU2JnRoaXMuZmxhZ3Mpe3Quc2V0VWludDE2KGUsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtlKz0yO2lmKHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCl7bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSk7ZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RofX1yZXR1cm4gZS1hfXNjYWxlKGUsdCl7fX1mdW5jdGlvbiB3cml0ZUludDE2KGUsdCxhKXtlW3RdPWE+PjgmMjU1O2VbdCsxXT0yNTUmYX1mdW5jdGlvbiB3cml0ZUludDMyKGUsdCxhKXtlW3RdPWE+PjI0JjI1NTtlW3QrMV09YT4+MTYmMjU1O2VbdCsyXT1hPj44JjI1NTtlW3QrM109MjU1JmF9ZnVuY3Rpb24gd3JpdGVEYXRhKGUsdCxhKXtpZihhIGluc3RhbmNlb2YgVWludDhBcnJheSllLnNldChhLHQpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBhKWZvcihsZXQgcj0wLGk9YS5sZW5ndGg7cjxpO3IrKyllW3QrK109MjU1JmEuY2hhckNvZGVBdChyKTtlbHNlIGZvcihjb25zdCByIG9mIGEpZVt0KytdPTI1NSZyfWNsYXNzIE9wZW5UeXBlRmlsZUJ1aWxkZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5zZm50PWU7dGhpcy50YWJsZXM9T2JqZWN0LmNyZWF0ZShudWxsKX1zdGF0aWMgZ2V0U2VhcmNoUGFyYW1zKGUsdCl7bGV0IGE9MSxyPTA7Zm9yKDsoYV5lKT5hOyl7YTw8PTE7cisrfWNvbnN0IGk9YSp0O3JldHVybntyYW5nZTppLGVudHJ5OnIscmFuZ2VTaGlmdDp0KmUtaX19dG9BcnJheSgpe2xldCBlPXRoaXMuc2ZudDtjb25zdCB0PXRoaXMudGFibGVzLGE9T2JqZWN0LmtleXModCk7YS5zb3J0KCk7Y29uc3Qgcj1hLmxlbmd0aDtsZXQgaSxuLHMsbyxjLGw9MTIrMTYqcjtjb25zdCBoPVtsXTtmb3IoaT0wO2k8cjtpKyspe289dFthW2ldXTtsKz0oby5sZW5ndGgrMyYtNCk+Pj4wO2gucHVzaChsKX1jb25zdCB1PW5ldyBVaW50OEFycmF5KGwpO2ZvcihpPTA7aTxyO2krKyl7bz10W2FbaV1dO3dyaXRlRGF0YSh1LGhbaV0sbyl9InRydWUiPT09ZSYmKGU9c3RyaW5nMzIoNjU1MzYpKTt1WzBdPTI1NSZlLmNoYXJDb2RlQXQoMCk7dVsxXT0yNTUmZS5jaGFyQ29kZUF0KDEpO3VbMl09MjU1JmUuY2hhckNvZGVBdCgyKTt1WzNdPTI1NSZlLmNoYXJDb2RlQXQoMyk7d3JpdGVJbnQxNih1LDQscik7Y29uc3QgZD1PcGVuVHlwZUZpbGVCdWlsZGVyLmdldFNlYXJjaFBhcmFtcyhyLDE2KTt3cml0ZUludDE2KHUsNixkLnJhbmdlKTt3cml0ZUludDE2KHUsOCxkLmVudHJ5KTt3cml0ZUludDE2KHUsMTAsZC5yYW5nZVNoaWZ0KTtsPTEyO2ZvcihpPTA7aTxyO2krKyl7Yz1hW2ldO3VbbF09MjU1JmMuY2hhckNvZGVBdCgwKTt1W2wrMV09MjU1JmMuY2hhckNvZGVBdCgxKTt1W2wrMl09MjU1JmMuY2hhckNvZGVBdCgyKTt1W2wrM109MjU1JmMuY2hhckNvZGVBdCgzKTtsZXQgZT0wO2ZvcihuPWhbaV0scz1oW2krMV07bjxzO24rPTQpe2U9ZStyZWFkVWludDMyKHUsbik+Pj4wfXdyaXRlSW50MzIodSxsKzQsZSk7d3JpdGVJbnQzMih1LGwrOCxoW2ldKTt3cml0ZUludDMyKHUsbCsxMix0W2NdLmxlbmd0aCk7bCs9MTZ9cmV0dXJuIHV9YWRkVGFibGUoZSx0KXtpZihlIGluIHRoaXMudGFibGVzKXRocm93IG5ldyBFcnJvcigiVGFibGUgIitlKyIgYWxyZWFkeSBleGlzdHMiKTt0aGlzLnRhYmxlc1tlXT10fX1jb25zdCAkcj1bNF0sVnI9WzVdLEtyPVs2XSxKcj1bN10sWXI9WzhdLFpyPVsxMiwzNV0sUXI9WzE0XSxlaT1bMjFdLHRpPVsyMl0sYWk9WzMwXSxyaT1bMzFdO2NsYXNzIFR5cGUxQ2hhclN0cmluZ3tjb25zdHJ1Y3Rvcigpe3RoaXMud2lkdGg9MDt0aGlzLmxzYj0wO3RoaXMuZmxleGluZz0hMTt0aGlzLm91dHB1dD1bXTt0aGlzLnN0YWNrPVtdfWNvbnZlcnQoZSx0LGEpe2NvbnN0IHI9ZS5sZW5ndGg7bGV0IGksbixzLG89ITE7Zm9yKGxldCBjPTA7YzxyO2MrKyl7bGV0IHI9ZVtjXTtpZihyPDMyKXsxMj09PXImJihyPShyPDw4KStlWysrY10pO3N3aXRjaChyKXtjYXNlIDE6Y2FzZSAzOmNhc2UgOTpjYXNlIDMwNzI6Y2FzZSAzMDczOmNhc2UgMzA3NDpjYXNlIDMxMDU6dGhpcy5zdGFjaz1bXTticmVhaztjYXNlIDQ6aWYodGhpcy5mbGV4aW5nKXtpZih0aGlzLnN0YWNrLmxlbmd0aDwxKXtvPSEwO2JyZWFrfWNvbnN0IGU9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnN0YWNrLnB1c2goMCxlKTticmVha31vPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwkcik7YnJlYWs7Y2FzZSA1Om89dGhpcy5leGVjdXRlQ29tbWFuZCgyLFZyKTticmVhaztjYXNlIDY6bz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsS3IpO2JyZWFrO2Nhc2UgNzpvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxKcik7YnJlYWs7Y2FzZSA4Om89dGhpcy5leGVjdXRlQ29tbWFuZCg2LFlyKTticmVhaztjYXNlIDEwOmlmKHRoaXMuc3RhY2subGVuZ3RoPDEpe289ITA7YnJlYWt9cz10aGlzLnN0YWNrLnBvcCgpO2lmKCF0W3NdKXtvPSEwO2JyZWFrfW89dGhpcy5jb252ZXJ0KHRbc10sdCxhKTticmVhaztjYXNlIDExOnJldHVybiBvO2Nhc2UgMTM6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7bz0hMDticmVha31pPXRoaXMuc3RhY2sucG9wKCk7bj10aGlzLnN0YWNrLnBvcCgpO3RoaXMubHNiPW47dGhpcy53aWR0aD1pO3RoaXMuc3RhY2sucHVzaChpLG4pO289dGhpcy5leGVjdXRlQ29tbWFuZCgyLHRpKTticmVhaztjYXNlIDE0OnRoaXMub3V0cHV0LnB1c2goUXJbMF0pO2JyZWFrO2Nhc2UgMjE6aWYodGhpcy5mbGV4aW5nKWJyZWFrO289dGhpcy5leGVjdXRlQ29tbWFuZCgyLGVpKTticmVhaztjYXNlIDIyOmlmKHRoaXMuZmxleGluZyl7dGhpcy5zdGFjay5wdXNoKDApO2JyZWFrfW89dGhpcy5leGVjdXRlQ29tbWFuZCgxLHRpKTticmVhaztjYXNlIDMwOm89dGhpcy5leGVjdXRlQ29tbWFuZCg0LGFpKTticmVhaztjYXNlIDMxOm89dGhpcy5leGVjdXRlQ29tbWFuZCg0LHJpKTticmVhaztjYXNlIDMwNzg6aWYoYSl7Y29uc3QgZT10aGlzLnN0YWNrLmF0KC01KTt0aGlzLnNlYWM9dGhpcy5zdGFjay5zcGxpY2UoLTQsNCk7dGhpcy5zZWFjWzBdKz10aGlzLmxzYi1lO289dGhpcy5leGVjdXRlQ29tbWFuZCgwLFFyKX1lbHNlIG89dGhpcy5leGVjdXRlQ29tbWFuZCg0LFFyKTticmVhaztjYXNlIDMwNzk6aWYodGhpcy5zdGFjay5sZW5ndGg8NCl7bz0hMDticmVha310aGlzLnN0YWNrLnBvcCgpO2k9dGhpcy5zdGFjay5wb3AoKTtjb25zdCBlPXRoaXMuc3RhY2sucG9wKCk7bj10aGlzLnN0YWNrLnBvcCgpO3RoaXMubHNiPW47dGhpcy53aWR0aD1pO3RoaXMuc3RhY2sucHVzaChpLG4sZSk7bz10aGlzLmV4ZWN1dGVDb21tYW5kKDMsZWkpO2JyZWFrO2Nhc2UgMzA4NDppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtvPSEwO2JyZWFrfWNvbnN0IGM9dGhpcy5zdGFjay5wb3AoKSxsPXRoaXMuc3RhY2sucG9wKCk7dGhpcy5zdGFjay5wdXNoKGwvYyk7YnJlYWs7Y2FzZSAzMDg4OmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe289ITA7YnJlYWt9cz10aGlzLnN0YWNrLnBvcCgpO2NvbnN0IGg9dGhpcy5zdGFjay5wb3AoKTtpZigwPT09cyYmMz09PWgpe2NvbnN0IGU9dGhpcy5zdGFjay5zcGxpY2UoLTE3LDE3KTt0aGlzLnN0YWNrLnB1c2goZVsyXStlWzBdLGVbM10rZVsxXSxlWzRdLGVbNV0sZVs2XSxlWzddLGVbOF0sZVs5XSxlWzEwXSxlWzExXSxlWzEyXSxlWzEzXSxlWzE0XSk7bz10aGlzLmV4ZWN1dGVDb21tYW5kKDEzLFpyLCEwKTt0aGlzLmZsZXhpbmc9ITE7dGhpcy5zdGFjay5wdXNoKGVbMTVdLGVbMTZdKX1lbHNlIDE9PT1zJiYwPT09aCYmKHRoaXMuZmxleGluZz0hMCk7YnJlYWs7Y2FzZSAzMDg5OmJyZWFrO2RlZmF1bHQ6d2FybignVW5rbm93biB0eXBlIDEgY2hhcnN0cmluZyBjb21tYW5kIG9mICInK3IrJyInKX1pZihvKWJyZWFrfWVsc2V7cjw9MjQ2P3ItPTEzOTpyPXI8PTI1MD8yNTYqKHItMjQ3KStlWysrY10rMTA4OnI8PTI1ND8tMjU2KihyLTI1MSktZVsrK2NdLTEwODooMjU1JmVbKytjXSk8PDI0fCgyNTUmZVsrK2NdKTw8MTZ8KDI1NSZlWysrY10pPDw4fDI1NSZlWysrY107dGhpcy5zdGFjay5wdXNoKHIpfX1yZXR1cm4gb31leGVjdXRlQ29tbWFuZChlLHQsYSl7Y29uc3Qgcj10aGlzLnN0YWNrLmxlbmd0aDtpZihlPnIpcmV0dXJuITA7Y29uc3QgaT1yLWU7Zm9yKGxldCBlPWk7ZTxyO2UrKyl7bGV0IHQ9dGhpcy5zdGFja1tlXTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXRoaXMub3V0cHV0LnB1c2goMjgsdD4+OCYyNTUsMjU1JnQpO2Vsc2V7dD02NTUzNip0fDA7dGhpcy5vdXRwdXQucHVzaCgyNTUsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9fXRoaXMub3V0cHV0LnB1c2goLi4udCk7YT90aGlzLnN0YWNrLnNwbGljZShpLGUpOnRoaXMuc3RhY2subGVuZ3RoPTA7cmV0dXJuITF9fWZ1bmN0aW9uIGlzSGV4RGlnaXQoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIGRlY3J5cHQoZSx0LGEpe2lmKGE+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtsZXQgcixpLG49MHx0O2ZvcihyPTA7cjxhO3IrKyluPTUyODQ1KihlW3JdK24pKzIyNzE5JjY1NTM1O2NvbnN0IHM9ZS5sZW5ndGgtYSxvPW5ldyBVaW50OEFycmF5KHMpO2ZvcihyPWEsaT0wO2k8cztyKyssaSsrKXtjb25zdCB0PWVbcl07b1tpXT10Xm4+Pjg7bj01Mjg0NSoodCtuKSsyMjcxOSY2NTUzNX1yZXR1cm4gb31mdW5jdGlvbiBpc1NwZWNpYWwoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfWNsYXNzIFR5cGUxUGFyc2Vye2NvbnN0cnVjdG9yKGUsdCxhKXtpZih0KXtjb25zdCB0PWUuZ2V0Qnl0ZXMoKSxhPSEoKGlzSGV4RGlnaXQodFswXSl8fGlzV2hpdGVTcGFjZSh0WzBdKSkmJmlzSGV4RGlnaXQodFsxXSkmJmlzSGV4RGlnaXQodFsyXSkmJmlzSGV4RGlnaXQodFszXSkmJmlzSGV4RGlnaXQodFs0XSkmJmlzSGV4RGlnaXQodFs1XSkmJmlzSGV4RGlnaXQodFs2XSkmJmlzSGV4RGlnaXQodFs3XSkpO2U9bmV3IFN0cmVhbShhP2RlY3J5cHQodCw1NTY2NSw0KTpmdW5jdGlvbiBkZWNyeXB0QXNjaWkoZSx0LGEpe2xldCByPTB8dDtjb25zdCBpPWUubGVuZ3RoLG49bmV3IFVpbnQ4QXJyYXkoaT4+PjEpO2xldCBzLG87Zm9yKHM9MCxvPTA7czxpO3MrKyl7Y29uc3QgdD1lW3NdO2lmKCFpc0hleERpZ2l0KHQpKWNvbnRpbnVlO3MrKztsZXQgYTtmb3IoO3M8aSYmIWlzSGV4RGlnaXQoYT1lW3NdKTspcysrO2lmKHM8aSl7Y29uc3QgZT1wYXJzZUludChTdHJpbmcuZnJvbUNoYXJDb2RlKHQsYSksMTYpO25bbysrXT1lXnI+Pjg7cj01Mjg0NSooZStyKSsyMjcxOSY2NTUzNX19cmV0dXJuIG4uc2xpY2UoYSxvKX0odCw1NTY2NSw0KSl9dGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkPSEhYTt0aGlzLnN0cmVhbT1lO3RoaXMubmV4dENoYXIoKX1yZWFkTnVtYmVyQXJyYXkoKXt0aGlzLmdldFRva2VuKCk7Y29uc3QgZT1bXTtmb3IoOzspe2NvbnN0IHQ9dGhpcy5nZXRUb2tlbigpO2lmKG51bGw9PT10fHwiXSI9PT10fHwifSI9PT10KWJyZWFrO2UucHVzaChwYXJzZUZsb2F0KHR8fDApKX1yZXR1cm4gZX1yZWFkTnVtYmVyKCl7Y29uc3QgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9cmVhZEludCgpe2NvbnN0IGU9dGhpcy5nZXRUb2tlbigpO3JldHVybiAwfHBhcnNlSW50KGV8fDAsMTApfXJlYWRCb29sZWFuKCl7cmV0dXJuInRydWUiPT09dGhpcy5nZXRUb2tlbigpPzE6MH1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1wcmV2Q2hhcigpe3RoaXMuc3RyZWFtLnNraXAoLTIpO3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1nZXRUb2tlbigpe2xldCBlPSExLHQ9dGhpcy5jdXJyZW50Q2hhcjtmb3IoOzspe2lmKC0xPT09dClyZXR1cm4gbnVsbDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCFpc1doaXRlU3BhY2UodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9aWYoaXNTcGVjaWFsKHQpKXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9bGV0IGE9IiI7ZG97YSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KTt0PXRoaXMubmV4dENoYXIoKX13aGlsZSh0Pj0wJiYhaXNXaGl0ZVNwYWNlKHQpJiYhaXNTcGVjaWFsKHQpKTtyZXR1cm4gYX1yZWFkQ2hhclN0cmluZ3MoZSx0KXtyZXR1cm4tMT09PXQ/ZTpkZWNyeXB0KGUsNDMzMCx0KX1leHRyYWN0Rm9udFByb2dyYW0oZSl7Y29uc3QgdD10aGlzLnN0cmVhbSxhPVtdLHI9W10saT1PYmplY3QuY3JlYXRlKG51bGwpO2kubGVuSVY9NDtjb25zdCBuPXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTppfX07bGV0IHMsbyxjLGw7Zm9yKDtudWxsIT09KHM9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09cyl7cz10aGlzLmdldFRva2VuKCk7c3dpdGNoKHMpe2Nhc2UiQ2hhclN0cmluZ3MiOnRoaXMuZ2V0VG9rZW4oKTt0aGlzLmdldFRva2VuKCk7dGhpcy5nZXRUb2tlbigpO3RoaXMuZ2V0VG9rZW4oKTtmb3IoOzspe3M9dGhpcy5nZXRUb2tlbigpO2lmKG51bGw9PT1zfHwiZW5kIj09PXMpYnJlYWs7aWYoIi8iIT09cyljb250aW51ZTtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtvPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtjPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApO2w9bi5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO2NvbnN0IGE9dGhpcy5yZWFkQ2hhclN0cmluZ3MoYyxsKTt0aGlzLm5leHRDaGFyKCk7cz10aGlzLmdldFRva2VuKCk7Im5vYWNjZXNzIj09PXM/dGhpcy5nZXRUb2tlbigpOiIvIj09PXMmJnRoaXMucHJldkNoYXIoKTtyLnB1c2goe2dseXBoOmUsZW5jb2RlZDphfSl9YnJlYWs7Y2FzZSJTdWJycyI6dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2Zvcig7ImR1cCI9PT10aGlzLmdldFRva2VuKCk7KXtjb25zdCBlPXRoaXMucmVhZEludCgpO289dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2M9bz4wP3QuZ2V0Qnl0ZXMobyk6bmV3IFVpbnQ4QXJyYXkoMCk7bD1uLnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVY7Y29uc3Qgcj10aGlzLnJlYWRDaGFyU3RyaW5ncyhjLGwpO3RoaXMubmV4dENoYXIoKTtzPXRoaXMuZ2V0VG9rZW4oKTsibm9hY2Nlc3MiPT09cyYmdGhpcy5nZXRUb2tlbigpO2FbZV09cn1icmVhaztjYXNlIkJsdWVWYWx1ZXMiOmNhc2UiT3RoZXJCbHVlcyI6Y2FzZSJGYW1pbHlCbHVlcyI6Y2FzZSJGYW1pbHlPdGhlckJsdWVzIjpjb25zdCBlPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5sZW5ndGg+MCYmZS5sZW5ndGgsMDticmVhaztjYXNlIlN0ZW1TbmFwSCI6Y2FzZSJTdGVtU25hcFYiOm4ucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXJBcnJheSgpO2JyZWFrO2Nhc2UiU3RkSFciOmNhc2UiU3RkVlciOm4ucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXJBcnJheSgpWzBdO2JyZWFrO2Nhc2UiQmx1ZVNoaWZ0IjpjYXNlImxlbklWIjpjYXNlIkJsdWVGdXp6IjpjYXNlIkJsdWVTY2FsZSI6Y2FzZSJMYW5ndWFnZUdyb3VwIjpuLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyKCk7YnJlYWs7Y2FzZSJFeHBhbnNpb25GYWN0b3IiOm4ucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXIoKXx8LjA2O2JyZWFrO2Nhc2UiRm9yY2VCb2xkIjpuLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkQm9vbGVhbigpfX1mb3IoY29uc3R7ZW5jb2RlZDp0LGdseXBoOml9b2Ygcil7Y29uc3Qgcj1uZXcgVHlwZTFDaGFyU3RyaW5nLHM9ci5jb252ZXJ0KHQsYSx0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpO2xldCBvPXIub3V0cHV0O3MmJihvPVsxNF0pO2NvbnN0IGM9e2dseXBoTmFtZTppLGNoYXJzdHJpbmc6byx3aWR0aDpyLndpZHRoLGxzYjpyLmxzYixzZWFjOnIuc2VhY307Ii5ub3RkZWYiPT09aT9uLmNoYXJzdHJpbmdzLnVuc2hpZnQoYyk6bi5jaGFyc3RyaW5ncy5wdXNoKGMpO2lmKGUuYnVpbHRJbkVuY29kaW5nKXtjb25zdCB0PWUuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoaSk7dD4tMSYmdm9pZCAwPT09ZS53aWR0aHNbdF0mJnQ+PWUuZmlyc3RDaGFyJiZ0PD1lLmxhc3RDaGFyJiYoZS53aWR0aHNbdF09ci53aWR0aCl9fXJldHVybiBufWV4dHJhY3RGb250SGVhZGVyKGUpe2xldCB0O2Zvcig7bnVsbCE9PSh0PXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PXQpe3Q9dGhpcy5nZXRUb2tlbigpO3N3aXRjaCh0KXtjYXNlIkZvbnRNYXRyaXgiOmNvbnN0IGE9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9YTticmVhaztjYXNlIkVuY29kaW5nIjpjb25zdCByPXRoaXMuZ2V0VG9rZW4oKTtsZXQgaTtpZigvXlxkKyQvLnRlc3Qocikpe2k9W107Y29uc3QgZT0wfHBhcnNlSW50KHIsMTApO3RoaXMuZ2V0VG9rZW4oKTtmb3IobGV0IGE9MDthPGU7YSsrKXt0PXRoaXMuZ2V0VG9rZW4oKTtmb3IoOyJkdXAiIT09dCYmImRlZiIhPT10Oyl7dD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXQpcmV0dXJufWlmKCJkZWYiPT09dClicmVhaztjb25zdCBlPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtjb25zdCBhPXRoaXMuZ2V0VG9rZW4oKTtpW2VdPWE7dGhpcy5nZXRUb2tlbigpfX1lbHNlIGk9Z2V0RW5jb2Rpbmcocik7ZS5idWlsdEluRW5jb2Rpbmc9aTticmVhaztjYXNlIkZvbnRCQm94Ijpjb25zdCBuPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5hc2NlbnQ9TWF0aC5tYXgoblszXSxuWzFdKTtlLmRlc2NlbnQ9TWF0aC5taW4oblsxXSxuWzNdKTtlLmFzY2VudFNjYWxlZD0hMH19fX1mdW5jdGlvbiBmaW5kQmxvY2soZSx0LGEpe2NvbnN0IHI9ZS5sZW5ndGgsaT10Lmxlbmd0aCxuPXItaTtsZXQgcz1hLG89ITE7Zm9yKDtzPG47KXtsZXQgYT0wO2Zvcig7YTxpJiZlW3MrYV09PT10W2FdOylhKys7aWYoYT49aSl7cys9YTtmb3IoO3M8ciYmaXNXaGl0ZVNwYWNlKGVbc10pOylzKys7bz0hMDticmVha31zKyt9cmV0dXJue2ZvdW5kOm8sbGVuZ3RoOnN9fWNsYXNzIFR5cGUxRm9udHtjb25zdHJ1Y3RvcihlLHQsYSl7bGV0IHI9YS5sZW5ndGgxLGk9YS5sZW5ndGgyLG49dC5wZWVrQnl0ZXMoNik7Y29uc3Qgcz0xMjg9PT1uWzBdJiYxPT09blsxXTtpZihzKXt0LnNraXAoNik7cj1uWzVdPDwyNHxuWzRdPDwxNnxuWzNdPDw4fG5bMl19Y29uc3Qgbz1mdW5jdGlvbiBnZXRIZWFkZXJCbG9jayhlLHQpe2NvbnN0IGE9WzEwMSwxMDEsMTIwLDEwMSw5OV0scj1lLnBvcztsZXQgaSxuLHMsbzt0cnl7aT1lLmdldEJ5dGVzKHQpO249aS5sZW5ndGh9Y2F0Y2h7fWlmKG49PT10KXtzPWZpbmRCbG9jayhpLGEsdC0yKmEubGVuZ3RoKTtpZihzLmZvdW5kJiZzLmxlbmd0aD09PXQpcmV0dXJue3N0cmVhbTpuZXcgU3RyZWFtKGkpLGxlbmd0aDp0fX13YXJuKCdJbnZhbGlkICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO2UucG9zPXI7Zm9yKDs7KXtzPWZpbmRCbG9jayhlLnBlZWtCeXRlcygyMDQ4KSxhLDApO2lmKDA9PT1zLmxlbmd0aClicmVhaztlLnBvcys9cy5sZW5ndGg7aWYocy5mb3VuZCl7bz1lLnBvcy1yO2JyZWFrfX1lLnBvcz1yO2lmKG8pcmV0dXJue3N0cmVhbTpuZXcgU3RyZWFtKGUuZ2V0Qnl0ZXMobykpLGxlbmd0aDpvfTt3YXJuKCdVbmFibGUgdG8gcmVjb3ZlciAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB1c2luZyBhcyBpcy4nKTtyZXR1cm57c3RyZWFtOm5ldyBTdHJlYW0oZS5nZXRCeXRlcyh0KSksbGVuZ3RoOnR9fSh0LHIpO25ldyBUeXBlMVBhcnNlcihvLnN0cmVhbSwhMSx3cikuZXh0cmFjdEZvbnRIZWFkZXIoYSk7aWYocyl7bj10LmdldEJ5dGVzKDYpO2k9bls1XTw8MjR8bls0XTw8MTZ8blszXTw8OHxuWzJdfWNvbnN0IGM9ZnVuY3Rpb24gZ2V0RWV4ZWNCbG9jayhlLHQpe2NvbnN0IGE9ZS5nZXRCeXRlcygpO2lmKDA9PT1hLmxlbmd0aCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImdldEVleGVjQmxvY2sgLSBubyBmb250IHByb2dyYW0gZm91bmQuIik7cmV0dXJue3N0cmVhbTpuZXcgU3RyZWFtKGEpLGxlbmd0aDphLmxlbmd0aH19KHQpLGw9bmV3IFR5cGUxUGFyc2VyKGMuc3RyZWFtLCEwLHdyKS5leHRyYWN0Rm9udFByb2dyYW0oYSk7Zm9yKGNvbnN0IGUgaW4gbC5wcm9wZXJ0aWVzKWFbZV09bC5wcm9wZXJ0aWVzW2VdO2NvbnN0IGg9bC5jaGFyc3RyaW5ncyx1PXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhoKSxkPXRoaXMuZ2V0VHlwZTJTdWJycyhsLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPWg7dGhpcy5kYXRhPXRoaXMud3JhcChlLHUsdGhpcy5jaGFyc3RyaW5ncyxkLGEpO3RoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhsLmNoYXJzdHJpbmdzKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9Z2V0Q2hhcnNldCgpe2NvbnN0IGU9WyIubm90ZGVmIl07Zm9yKGNvbnN0e2dseXBoTmFtZTp0fW9mIHRoaXMuY2hhcnN0cmluZ3MpZS5wdXNoKHQpO3JldHVybiBlfWdldEdseXBoTWFwcGluZyhlKXtjb25zdCB0PXRoaXMuY2hhcnN0cmluZ3M7aWYoZS5jb21wb3NpdGUpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspe2FbZS5jTWFwLmNoYXJDb2RlT2YocildPXIrMX1yZXR1cm4gYX1jb25zdCBhPVsiLm5vdGRlZiJdO2xldCByLGk7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylhLnB1c2godFtpXS5nbHlwaE5hbWUpO2NvbnN0IG49ZS5idWlsdEluRW5jb2Rpbmc7aWYobil7cj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCBlIGluIG4pe2k9YS5pbmRleE9mKG5bZV0pO2k+PTAmJihyW2VdPWkpfX1yZXR1cm4gdHlwZTFGb250R2x5cGhNYXBwaW5nKGUscixhKX1oYXNHbHlwaElkKGUpe2lmKGU8MHx8ZT49dGhpcy5udW1HbHlwaHMpcmV0dXJuITE7aWYoMD09PWUpcmV0dXJuITA7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3NbZS0xXS5jaGFyc3RyaW5nLmxlbmd0aD4wfWdldFNlYWNzKGUpe2NvbnN0IHQ9W107Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPWVbYV07ci5zZWFjJiYodFthKzFdPXIuc2VhYyl9cmV0dXJuIHR9Z2V0VHlwZTJDaGFyc3RyaW5ncyhlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBhIG9mIGUpdC5wdXNoKGEuY2hhcnN0cmluZyk7cmV0dXJuIHR9Z2V0VHlwZTJTdWJycyhlKXtsZXQgdD0wO2NvbnN0IGE9ZS5sZW5ndGg7dD1hPDExMzM/MTA3OmE8MzM3Njk/MTEzMTozMjc2ODtjb25zdCByPVtdO2xldCBpO2ZvcihpPTA7aTx0O2krKylyLnB1c2goWzExXSk7Zm9yKGk9MDtpPGE7aSsrKXIucHVzaChlW2ldKTtyZXR1cm4gcn13cmFwKGUsdCxhLHIsaSl7Y29uc3Qgbj1uZXcgQ0ZGO24uaGVhZGVyPW5ldyBDRkZIZWFkZXIoMSwwLDQsNCk7bi5uYW1lcz1bZV07Y29uc3Qgcz1uZXcgQ0ZGVG9wRGljdDtzLnNldEJ5TmFtZSgidmVyc2lvbiIsMzkxKTtzLnNldEJ5TmFtZSgiTm90aWNlIiwzOTIpO3Muc2V0QnlOYW1lKCJGdWxsTmFtZSIsMzkzKTtzLnNldEJ5TmFtZSgiRmFtaWx5TmFtZSIsMzk0KTtzLnNldEJ5TmFtZSgiV2VpZ2h0IiwzOTUpO3Muc2V0QnlOYW1lKCJFbmNvZGluZyIsbnVsbCk7cy5zZXRCeU5hbWUoIkZvbnRNYXRyaXgiLGkuZm9udE1hdHJpeCk7cy5zZXRCeU5hbWUoIkZvbnRCQm94IixpLmJib3gpO3Muc2V0QnlOYW1lKCJjaGFyc2V0IixudWxsKTtzLnNldEJ5TmFtZSgiQ2hhclN0cmluZ3MiLG51bGwpO3Muc2V0QnlOYW1lKCJQcml2YXRlIixudWxsKTtuLnRvcERpY3Q9cztjb25zdCBvPW5ldyBDRkZTdHJpbmdzO28uYWRkKCJWZXJzaW9uIDAuMTEiKTtvLmFkZCgiU2VlIG9yaWdpbmFsIG5vdGljZSIpO28uYWRkKGUpO28uYWRkKGUpO28uYWRkKCJNZWRpdW0iKTtuLnN0cmluZ3M9bztuLmdsb2JhbFN1YnJJbmRleD1uZXcgQ0ZGSW5kZXg7Y29uc3QgYz10Lmxlbmd0aCxsPVsiLm5vdGRlZiJdO2xldCBoLHU7Zm9yKGg9MDtoPGM7aCsrKXtjb25zdCBlPWFbaF0uZ2x5cGhOYW1lOy0xPT09T3IuaW5kZXhPZihlKSYmby5hZGQoZSk7bC5wdXNoKGUpfW4uY2hhcnNldD1uZXcgQ0ZGQ2hhcnNldCghMSwwLGwpO2NvbnN0IGQ9bmV3IENGRkluZGV4O2QuYWRkKFsxMzksMTRdKTtmb3IoaD0wO2g8YztoKyspZC5hZGQodFtoXSk7bi5jaGFyU3RyaW5ncz1kO2NvbnN0IGY9bmV3IENGRlByaXZhdGVEaWN0O2Yuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7Y29uc3QgZz1bIkJsdWVWYWx1ZXMiLCJPdGhlckJsdWVzIiwiRmFtaWx5Qmx1ZXMiLCJGYW1pbHlPdGhlckJsdWVzIiwiU3RlbVNuYXBIIiwiU3RlbVNuYXBWIiwiQmx1ZVNoaWZ0IiwiQmx1ZUZ1enoiLCJCbHVlU2NhbGUiLCJMYW5ndWFnZUdyb3VwIiwiRXhwYW5zaW9uRmFjdG9yIiwiRm9yY2VCb2xkIiwiU3RkSFciLCJTdGRWVyJdO2ZvcihoPTAsdT1nLmxlbmd0aDtoPHU7aCsrKXtjb25zdCBlPWdbaF07aWYoIShlIGluIGkucHJpdmF0ZURhdGEpKWNvbnRpbnVlO2NvbnN0IHQ9aS5wcml2YXRlRGF0YVtlXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+MDtlLS0pdFtlXS09dFtlLTFdO2Yuc2V0QnlOYW1lKGUsdCl9bi50b3BEaWN0LnByaXZhdGVEaWN0PWY7Y29uc3QgcD1uZXcgQ0ZGSW5kZXg7Zm9yKGg9MCx1PXIubGVuZ3RoO2g8dTtoKyspcC5hZGQocltoXSk7Zi5zdWJyc0luZGV4PXA7cmV0dXJuIG5ldyBDRkZDb21waWxlcihuKS5jb21waWxlKCl9fWNvbnN0IGlpPVtbNTczNDQsNjM3NDNdLFsxMDQ4NTc2LDExMTQxMDldXSxuaT0xZTMsc2k9WyJhc2NlbnQiLCJiYm94IiwiYmxhY2siLCJib2xkIiwiY2hhclByb2NPcGVyYXRvckxpc3QiLCJjc3NGb250SW5mbyIsImRhdGEiLCJkZWZhdWx0Vk1ldHJpY3MiLCJkZWZhdWx0V2lkdGgiLCJkZXNjZW50IiwiZGlzYWJsZUZvbnRGYWNlIiwiZmFsbGJhY2tOYW1lIiwiZm9udEV4dHJhUHJvcGVydGllcyIsImZvbnRNYXRyaXgiLCJpc0ludmFsaWRQREZqc0ZvbnQiLCJpc1R5cGUzRm9udCIsIml0YWxpYyIsImxvYWRlZE5hbWUiLCJtaW1ldHlwZSIsIm1pc3NpbmdGaWxlIiwibmFtZSIsInJlbWVhc3VyZSIsInN5c3RlbUZvbnRJbmZvIiwidmVydGljYWwiXSxvaT1bImNNYXAiLCJjb21wb3NpdGUiLCJkZWZhdWx0RW5jb2RpbmciLCJkaWZmZXJlbmNlcyIsImlzTW9ub3NwYWNlIiwiaXNTZXJpZkZvbnQiLCJpc1N5bWJvbGljRm9udCIsInNlYWNNYXAiLCJzdWJ0eXBlIiwidG9Gb250Q2hhciIsInRvVW5pY29kZSIsInR5cGUiLCJ2bWV0cmljcyIsIndpZHRocyJdO2Z1bmN0aW9uIGFkanVzdFdpZHRocyhlKXtpZighZS5mb250TWF0cml4KXJldHVybjtpZihlLmZvbnRNYXRyaXhbMF09PT10WzBdKXJldHVybjtjb25zdCBhPS4wMDEvZS5mb250TWF0cml4WzBdLHI9ZS53aWR0aHM7Zm9yKGNvbnN0IGUgaW4gcilyW2VdKj1hO2UuZGVmYXVsdFdpZHRoKj1hfWZ1bmN0aW9uIGFtZW5kRmFsbGJhY2tUb1VuaWNvZGUoZSl7aWYoIWUuZmFsbGJhY2tUb1VuaWNvZGUpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgaW4gZS5mYWxsYmFja1RvVW5pY29kZSllLnRvVW5pY29kZS5oYXMoYSl8fCh0W2FdPWUuZmFsbGJhY2tUb1VuaWNvZGVbYV0pO3QubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHQpfWNsYXNzIGZvbnRzX0dseXBoe2NvbnN0cnVjdG9yKGUsdCxhLHIsaSxuLHMsbyxjKXt0aGlzLm9yaWdpbmFsQ2hhckNvZGU9ZTt0aGlzLmZvbnRDaGFyPXQ7dGhpcy51bmljb2RlPWE7dGhpcy5hY2NlbnQ9cjt0aGlzLndpZHRoPWk7dGhpcy52bWV0cmljPW47dGhpcy5vcGVyYXRvckxpc3RJZD1zO3RoaXMuaXNTcGFjZT1vO3RoaXMuaXNJbkZvbnQ9Y31nZXQgY2F0ZWdvcnkoKXtyZXR1cm4gc2hhZG93KHRoaXMsImNhdGVnb3J5IixmdW5jdGlvbiBnZXRDaGFyVW5pY29kZUNhdGVnb3J5KGUpe2NvbnN0IHQ9eXIuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3QgYT1lLm1hdGNoKGJyKSxyPXtpc1doaXRlc3BhY2U6ISFhPy5bMV0saXNaZXJvV2lkdGhEaWFjcml0aWM6ISFhPy5bMl0saXNJbnZpc2libGVGb3JtYXRNYXJrOiEhYT8uWzNdfTt5ci5zZXQoZSxyKTtyZXR1cm4gcn0odGhpcy51bmljb2RlKSwhMCl9fWZ1bmN0aW9uIGludDE2KGUsdCl7cmV0dXJuKGU8PDgpK3R9ZnVuY3Rpb24gd3JpdGVTaWduZWRJbnQxNihlLHQsYSl7ZVt0KzFdPWE7ZVt0XT1hPj4+OH1mdW5jdGlvbiBzaWduZWRJbnQxNihlLHQpe2NvbnN0IGE9KGU8PDgpK3Q7cmV0dXJuIDMyNzY4JmE/YS02NTUzNjphfWZ1bmN0aW9uIHN0cmluZzE2KGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBzYWZlU3RyaW5nMTYoZSl7ZT4zMjc2Nz9lPTMyNzY3OmU8LTMyNzY4JiYoZT0tMzI3NjgpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZSl7cmV0dXJuInR0Y2YiPT09Ynl0ZXNUb1N0cmluZyhlLnBlZWtCeXRlcyg0KSl9ZnVuY3Rpb24gZ2V0Rm9udEZpbGVUeXBlKGUse3R5cGU6dCxzdWJ0eXBlOmEsY29tcG9zaXRlOnJ9KXtsZXQgaSxuO2lmKGZ1bmN0aW9uIGlzVHJ1ZVR5cGVGaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIDY1NTM2PT09cmVhZFVpbnQzMih0LDApfHwidHJ1ZSI9PT1ieXRlc1RvU3RyaW5nKHQpfShlKXx8aXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGUpKWk9cj8iQ0lERm9udFR5cGUyIjoiVHJ1ZVR5cGUiO2Vsc2UgaWYoZnVuY3Rpb24gaXNPcGVuVHlwZUZpbGUoZSl7cmV0dXJuIk9UVE8iPT09Ynl0ZXNUb1N0cmluZyhlLnBlZWtCeXRlcyg0KSl9KGUpKWk9cj8iQ0lERm9udFR5cGUyIjoiT3BlblR5cGUiO2Vsc2UgaWYoZnVuY3Rpb24gaXNUeXBlMUZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcygyKTtyZXR1cm4gMzc9PT10WzBdJiYzMz09PXRbMV18fDEyOD09PXRbMF0mJjE9PT10WzFdfShlKSlpPXI/IkNJREZvbnRUeXBlMCI6Ik1NVHlwZTEiPT09dD8iTU1UeXBlMSI6IlR5cGUxIjtlbHNlIGlmKGZ1bmN0aW9uIGlzQ0ZGRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiB0WzBdPj0xJiZ0WzNdPj0xJiZ0WzNdPD00fShlKSlpZihyKXtpPSJDSURGb250VHlwZTAiO249IkNJREZvbnRUeXBlMEMifWVsc2V7aT0iTU1UeXBlMSI9PT10PyJNTVR5cGUxIjoiVHlwZTEiO249IlR5cGUxQyJ9ZWxzZXt3YXJuKCJnZXRGb250RmlsZVR5cGU6IFVuYWJsZSB0byBkZXRlY3QgY29ycmVjdCBmb250IGZpbGUgVHlwZS9TdWJ0eXBlLiIpO2k9dDtuPWF9cmV0dXJuW2ksbl19ZnVuY3Rpb24gYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChlLHQpe2Zvcihjb25zdCBhIGluIHQpZVsrYV09dFthXX1mdW5jdGlvbiBidWlsZFRvRm9udENoYXIoZSx0LGEpe2NvbnN0IHI9W107bGV0IGk7Zm9yKGxldCBhPTAsbj1lLmxlbmd0aDthPG47YSsrKXtpPWdldFVuaWNvZGVGb3JHbHlwaChlW2FdLHQpOy0xIT09aSYmKHJbYV09aSl9Zm9yKGNvbnN0IGUgaW4gYSl7aT1nZXRVbmljb2RlRm9yR2x5cGgoYVtlXSx0KTstMSE9PWkmJihyWytlXT1pKX1yZXR1cm4gcn1mdW5jdGlvbiBpc01hY05hbWVSZWNvcmQoZSl7cmV0dXJuIDE9PT1lLnBsYXRmb3JtJiYwPT09ZS5lbmNvZGluZyYmMD09PWUubGFuZ3VhZ2V9ZnVuY3Rpb24gaXNXaW5OYW1lUmVjb3JkKGUpe3JldHVybiAzPT09ZS5wbGF0Zm9ybSYmMT09PWUuZW5jb2RpbmcmJjEwMzM9PT1lLmxhbmd1YWdlfWZ1bmN0aW9uIGNvbnZlcnRDaWRTdHJpbmcoZSx0LGE9ITEpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybiB0LmNoYXJDb2RlQXQoMCk7Y2FzZSAyOnJldHVybiB0LmNoYXJDb2RlQXQoMCk8PDh8dC5jaGFyQ29kZUF0KDEpfWNvbnN0IHI9YFVuc3VwcG9ydGVkIENJRCBzdHJpbmcgKGNoYXJDb2RlICR7ZX0pOiAiJHt0fSIuYDtpZihhKXRocm93IG5ldyBGb3JtYXRFcnJvcihyKTt3YXJuKHIpO3JldHVybiB0fWZ1bmN0aW9uIGFkanVzdE1hcHBpbmcoZSx0LGEscil7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLG49bmV3IE1hcCxzPVtdLG89bmV3IFNldDtsZXQgYz0wO2xldCBsPWlpW2NdWzBdLGg9aWlbY11bMV07Y29uc3QgaXNJblByaXZhdGVBcmVhPWU9PmlpWzBdWzBdPD1lJiZlPD1paVswXVsxXXx8aWlbMV1bMF08PWUmJmU8PWlpWzFdWzFdO2xldCB1PW51bGw7Zm9yKGNvbnN0IGQgaW4gZSl7bGV0IGY9ZVtkXTtpZighdChmKSljb250aW51ZTtpZihsPmgpe2MrKztpZihjPj1paS5sZW5ndGgpe3dhcm4oIlJhbiBvdXQgb2Ygc3BhY2UgaW4gZm9udCBwcml2YXRlIHVzZSBhcmVhLiIpO2JyZWFrfWw9aWlbY11bMF07aD1paVtjXVsxXX1jb25zdCBnPWwrKzswPT09ZiYmKGY9YSk7bGV0IHA9ci5nZXQoZCk7aWYoInN0cmluZyI9PXR5cGVvZiBwKWlmKDE9PT1wLmxlbmd0aClwPXAuY29kZVBvaW50QXQoMCk7ZWxzZXtpZighdSl7dT1uZXcgTWFwO2ZvcihsZXQgZT02NDI1NjtlPD02NDMzNTtlKyspe2NvbnN0IHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKS5ub3JtYWxpemUoIk5GS0QiKTt0Lmxlbmd0aD4xJiZ1LnNldCh0LGUpfX1wPXUuZ2V0KHApfHxwLmNvZGVQb2ludEF0KDApfWlmKHAmJiFpc0luUHJpdmF0ZUFyZWEocCkmJiFvLmhhcyhmKSl7bi5zZXQocCxmKTtvLmFkZChmKX1pW2ddPWY7c1tkXT1nfXJldHVybnt0b0ZvbnRDaGFyOnMsY2hhckNvZGVUb0dseXBoSWQ6aSx0b1VuaWNvZGVFeHRyYU1hcDpuLG5leHRBdmFpbGFibGVGb250Q2hhckNvZGU6bH19ZnVuY3Rpb24gY3JlYXRlQ21hcFRhYmxlKGUsdCxhKXtjb25zdCByPWZ1bmN0aW9uIGdldFJhbmdlcyhlLHQsYSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgdCBpbiBlKWVbdF0+PWF8fHIucHVzaCh7Zm9udENoYXJDb2RlOjB8dCxnbHlwaElkOmVbdF19KTtpZih0KWZvcihjb25zdFtlLGldb2YgdClpPj1hfHxyLnB1c2goe2ZvbnRDaGFyQ29kZTplLGdseXBoSWQ6aX0pOzA9PT1yLmxlbmd0aCYmci5wdXNoKHtmb250Q2hhckNvZGU6MCxnbHlwaElkOjB9KTtyLnNvcnQoKGUsdCk9PmUuZm9udENoYXJDb2RlLXQuZm9udENoYXJDb2RlKTtjb25zdCBpPVtdLG49ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxuOyl7Y29uc3QgdD1yW2VdLmZvbnRDaGFyQ29kZSxhPVtyW2VdLmdseXBoSWRdOysrZTtsZXQgcz10O2Zvcig7ZTxuJiZzKzE9PT1yW2VdLmZvbnRDaGFyQ29kZTspe2EucHVzaChyW2VdLmdseXBoSWQpOysrczsrK2U7aWYoNjU1MzU9PT1zKWJyZWFrfWkucHVzaChbdCxzLGFdKX1yZXR1cm4gaX0oZSx0LGEpLGk9ci5hdCgtMSlbMV0+NjU1MzU/MjoxO2xldCBuLHMsbyxjLGw9IlwwXDAiK3N0cmluZzE2KGkpKyJcMANcMAEiK3N0cmluZzMyKDQrOCppKTtmb3Iobj1yLmxlbmd0aC0xO24+PTAmJiEocltuXVswXTw9NjU1MzUpOy0tbik7Y29uc3QgaD1uKzE7cltuXVswXTw2NTUzNSYmNjU1MzU9PT1yW25dWzFdJiYocltuXVsxXT02NTUzNCk7Y29uc3QgdT1yW25dWzFdPDY1NTM1PzE6MCxkPWgrdSxmPU9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKGQsMik7bGV0IGcscCxtLGIseT0iIix3PSIiLHg9IiIsUz0iIixrPSIiLEM9MDtmb3Iobj0wLHM9aDtuPHM7bisrKXtnPXJbbl07cD1nWzBdO209Z1sxXTt5Kz1zdHJpbmcxNihwKTt3Kz1zdHJpbmcxNihtKTtiPWdbMl07bGV0IGU9ITA7Zm9yKG89MSxjPWIubGVuZ3RoO288YzsrK28paWYoYltvXSE9PWJbby0xXSsxKXtlPSExO2JyZWFrfWlmKGUpe3grPXN0cmluZzE2KGJbMF0tcCY2NTUzNSk7Uys9c3RyaW5nMTYoMCl9ZWxzZXtjb25zdCBlPTIqKGQtbikrMipDO0MrPW0tcCsxO3grPXN0cmluZzE2KDApO1MrPXN0cmluZzE2KGUpO2ZvcihvPTAsYz1iLmxlbmd0aDtvPGM7KytvKWsrPXN0cmluZzE2KGJbb10pfX1pZih1PjApe3crPSLDv8O/Ijt5Kz0iw7/DvyI7eCs9IlwwASI7Uys9IlwwXDAifWNvbnN0IHY9IlwwXDAiK3N0cmluZzE2KDIqZCkrc3RyaW5nMTYoZi5yYW5nZSkrc3RyaW5nMTYoZi5lbnRyeSkrc3RyaW5nMTYoZi5yYW5nZVNoaWZ0KSt3KyJcMFwwIit5K3grUytrO2xldCBGPSIiLFQ9IiI7aWYoaT4xKXtsKz0iXDADXDBcbiIrc3RyaW5nMzIoNCs4KmkrNCt2Lmxlbmd0aCk7Rj0iIjtmb3Iobj0wLHM9ci5sZW5ndGg7bjxzO24rKyl7Zz1yW25dO3A9Z1swXTtiPWdbMl07bGV0IGU9YlswXTtmb3Iobz0xLGM9Yi5sZW5ndGg7bzxjOysrbylpZihiW29dIT09YltvLTFdKzEpe209Z1swXStvLTE7Ris9c3RyaW5nMzIocCkrc3RyaW5nMzIobSkrc3RyaW5nMzIoZSk7cD1tKzE7ZT1iW29dfUYrPXN0cmluZzMyKHApK3N0cmluZzMyKGdbMV0pK3N0cmluZzMyKGUpfVQ9IlwwXGZcMFwwIitzdHJpbmczMihGLmxlbmd0aCsxNikrIlwwXDBcMFwwIitzdHJpbmczMihGLmxlbmd0aC8xMil9cmV0dXJuIGwrIlwwBCIrc3RyaW5nMTYodi5sZW5ndGgrNCkrditUK0Z9ZnVuY3Rpb24gY3JlYXRlT1MyVGFibGUoZSx0LGEpe2F8fD17dW5pdHNQZXJFbTowLHlNYXg6MCx5TWluOjAsYXNjZW50OjAsZGVzY2VudDowfTtsZXQgcj0wLGk9MCxuPTAscz0wLG89bnVsbCxjPTAsbD0tMTtpZih0KXtmb3IobGV0IGUgaW4gdCl7ZXw9MDsobz5lfHwhbykmJihvPWUpO2M8ZSYmKGM9ZSk7bD1nZXRVbmljb2RlUmFuZ2VGb3IoZSxsKTtpZihsPDMyKXJ8PTE8PGw7ZWxzZSBpZihsPDY0KWl8PTE8PGwtMzI7ZWxzZSBpZihsPDk2KW58PTE8PGwtNjQ7ZWxzZXtpZighKGw8MTIzKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVuaWNvZGUgcmFuZ2VzIEJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSIpO3N8PTE8PGwtOTZ9fWM+NjU1MzUmJihjPTY1NTM1KX1lbHNle289MDtjPTI1NX1jb25zdCBoPWUuYmJveHx8WzAsMCwwLDBdLHU9YS51bml0c1BlckVtfHwoZS5mb250TWF0cml4PzEvTWF0aC5tYXgoLi4uZS5mb250TWF0cml4LnNsaWNlKDAsNCkubWFwKE1hdGguYWJzKSk6MWUzKSxkPWUuYXNjZW50U2NhbGVkPzE6dS9uaSxmPWEuYXNjZW50fHxNYXRoLnJvdW5kKGQqKGUuYXNjZW50fHxoWzNdKSk7bGV0IGc9YS5kZXNjZW50fHxNYXRoLnJvdW5kKGQqKGUuZGVzY2VudHx8aFsxXSkpO2c+MCYmZS5kZXNjZW50PjAmJmhbMV08MCYmKGc9LWcpO2NvbnN0IHA9YS55TWF4fHxmLG09LWEueU1pbnx8LWc7cmV0dXJuIlwwAwIkAcO0XDAFXDBcMALCigLCu1wwXDBcMMKMAsKKAsK7XDBcMAHDn1x4MDAxAQJcMFwwXDBcMAYiK1N0cmluZy5mcm9tQ2hhckNvZGUoZS5maXhlZFBpdGNoPzk6MCkrIlwwXDBcMFwwXDBcMCIrc3RyaW5nMzIocikrc3RyaW5nMzIoaSkrc3RyaW5nMzIobikrc3RyaW5nMzIocykrIioyMSoiK3N0cmluZzE2KGUuaXRhbGljQW5nbGU/MTowKStzdHJpbmcxNihvfHxlLmZpcnN0Q2hhcikrc3RyaW5nMTYoY3x8ZS5sYXN0Q2hhcikrc3RyaW5nMTYoZikrc3RyaW5nMTYoZykrIlwwZCIrc3RyaW5nMTYocCkrc3RyaW5nMTYobSkrIlwwXDBcMFwwXDBcMFwwXDAiK3N0cmluZzE2KGUueEhlaWdodCkrc3RyaW5nMTYoZS5jYXBIZWlnaHQpK3N0cmluZzE2KDApK3N0cmluZzE2KG98fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBjcmVhdGVQb3N0VGFibGUoZSl7cmV0dXJuIlwwA1wwXDAiK3N0cmluZzMyKE1hdGguZmxvb3IoNjU1MzYqZS5pdGFsaWNBbmdsZSkpKyJcMFwwXDBcMCIrc3RyaW5nMzIoZS5maXhlZFBpdGNoPzE6MCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn1mdW5jdGlvbiBjcmVhdGVQb3N0c2NyaXB0TmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlQWxsKC9bXlx4MjEtXHg3RV18W1tcXSgpe308Pi8lXS9nLCIiKS5zbGljZSgwLDYzKX1mdW5jdGlvbiBjcmVhdGVOYW1lVGFibGUoZSx0KXt0fHwodD1bW10sW11dKTtjb25zdCBhPVt0WzBdWzBdfHwiT3JpZ2luYWwgbGljZW5jZSIsdFswXVsxXXx8ZSx0WzBdWzJdfHwiVW5rbm93biIsdFswXVszXXx8InVuaXF1ZUlEIix0WzBdWzRdfHxlLHRbMF1bNV18fCJWZXJzaW9uIDAuMTEiLHRbMF1bNl18fGNyZWF0ZVBvc3RzY3JpcHROYW1lKGUpLHRbMF1bN118fCJVbmtub3duIix0WzBdWzhdfHwiVW5rbm93biIsdFswXVs5XXx8IlVua25vd24iXSxyPVtdO2xldCBpLG4scyxvLGM7Zm9yKGk9MCxuPWEubGVuZ3RoO2k8bjtpKyspe2M9dFsxXVtpXXx8YVtpXTtjb25zdCBlPVtdO2ZvcihzPTAsbz1jLmxlbmd0aDtzPG87cysrKWUucHVzaChzdHJpbmcxNihjLmNoYXJDb2RlQXQocykpKTtyLnB1c2goZS5qb2luKCIiKSl9Y29uc3QgbD1bYSxyXSxoPVsiXDABIiwiXDADIl0sdT1bIlwwXDAiLCJcMAEiXSxkPVsiXDBcMCIsIgRcdCJdLGY9YS5sZW5ndGgqaC5sZW5ndGg7bGV0IGc9IlwwXDAiK3N0cmluZzE2KGYpK3N0cmluZzE2KDEyKmYrNikscD0wO2ZvcihpPTAsbj1oLmxlbmd0aDtpPG47aSsrKXtjb25zdCBlPWxbaV07Zm9yKHM9MCxvPWUubGVuZ3RoO3M8bztzKyspe2M9ZVtzXTtnKz1oW2ldK3VbaV0rZFtpXStzdHJpbmcxNihzKStzdHJpbmcxNihjLmxlbmd0aCkrc3RyaW5nMTYocCk7cCs9Yy5sZW5ndGh9fWcrPWEuam9pbigiIikrci5qb2luKCIiKTtyZXR1cm4gZ31jbGFzcyBGb250e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMubmFtZT1lO3RoaXMucHNOYW1lPW51bGw7dGhpcy5taW1ldHlwZT1udWxsO3RoaXMuZGlzYWJsZUZvbnRGYWNlPXIuZGlzYWJsZUZvbnRGYWNlO3RoaXMuZm9udEV4dHJhUHJvcGVydGllcz1yLmZvbnRFeHRyYVByb3BlcnRpZXM7dGhpcy5sb2FkZWROYW1lPWEubG9hZGVkTmFtZTt0aGlzLmlzVHlwZTNGb250PWEuaXNUeXBlM0ZvbnQ7dGhpcy5taXNzaW5nRmlsZT0hMTt0aGlzLmNzc0ZvbnRJbmZvPWEuY3NzRm9udEluZm87dGhpcy5fY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuX2dseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgaT0hIShhLmZsYWdzJlNyKTtpZighaSYmIWEuaXNTaW11bGF0ZWRGbGFncyl7Y29uc3QgdD1McigpLGE9VXIoKSxyPWpyKCk7Zm9yKGNvbnN0IG4gb2YgZS5zcGxpdCgiKyIpKXtsZXQgZT1uLnJlcGxhY2VBbGwoL1ssX10vZywiLSIpO2U9dFtlXXx8YVtlXXx8ZTtlPWUuc3BsaXQoIi0iLDEpWzBdO2lmKHJbZV0pe2k9ITA7YnJlYWt9fX10aGlzLmlzU2VyaWZGb250PWk7dGhpcy5pc1N5bWJvbGljRm9udD0hIShhLmZsYWdzJkFyKTt0aGlzLmlzTW9ub3NwYWNlPSEhKGEuZmxhZ3MmeHIpO2xldHt0eXBlOm4sc3VidHlwZTpzfT1hO3RoaXMudHlwZT1uO3RoaXMuc3VidHlwZT1zO3RoaXMuc3lzdGVtRm9udEluZm89YS5zeXN0ZW1Gb250SW5mbztjb25zdCBvPWUubWF0Y2goL15JbnZhbGlkUERGanNGb250XyguKilfXGQrJC8pO3RoaXMuaXNJbnZhbGlkUERGanNGb250PSEhbzt0aGlzLmlzSW52YWxpZFBERmpzRm9udD90aGlzLmZhbGxiYWNrTmFtZT1vWzFdOnRoaXMuaXNNb25vc3BhY2U/dGhpcy5mYWxsYmFja05hbWU9Im1vbm9zcGFjZSI6dGhpcy5pc1NlcmlmRm9udD90aGlzLmZhbGxiYWNrTmFtZT0ic2VyaWYiOnRoaXMuZmFsbGJhY2tOYW1lPSJzYW5zLXNlcmlmIjtpZih0aGlzLnN5c3RlbUZvbnRJbmZvPy5ndWVzc0ZhbGxiYWNrKXt0aGlzLnN5c3RlbUZvbnRJbmZvLmd1ZXNzRmFsbGJhY2s9ITE7dGhpcy5zeXN0ZW1Gb250SW5mby5jc3MrPWAsJHt0aGlzLmZhbGxiYWNrTmFtZX1gfXRoaXMuZGlmZmVyZW5jZXM9YS5kaWZmZXJlbmNlczt0aGlzLndpZHRocz1hLndpZHRoczt0aGlzLmRlZmF1bHRXaWR0aD1hLmRlZmF1bHRXaWR0aDt0aGlzLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZTt0aGlzLmNNYXA9YS5jTWFwO3RoaXMuY2FwSGVpZ2h0PWEuY2FwSGVpZ2h0L25pO3RoaXMuYXNjZW50PWEuYXNjZW50L25pO3RoaXMuZGVzY2VudD1hLmRlc2NlbnQvbmk7dGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudDt0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4O3RoaXMuYmJveD1hLmJib3g7dGhpcy5kZWZhdWx0RW5jb2Rpbmc9YS5kZWZhdWx0RW5jb2Rpbmc7dGhpcy50b1VuaWNvZGU9YS50b1VuaWNvZGU7dGhpcy50b0ZvbnRDaGFyPVtdO2lmKCJUeXBlMyI9PT1hLnR5cGUpe2ZvcihsZXQgZT0wO2U8MjU2O2UrKyl0aGlzLnRvRm9udENoYXJbZV09dGhpcy5kaWZmZXJlbmNlc1tlXXx8YS5kZWZhdWx0RW5jb2RpbmdbZV07cmV0dXJufXRoaXMuY2lkRW5jb2Rpbmc9YS5jaWRFbmNvZGluZ3x8IiI7dGhpcy52ZXJ0aWNhbD0hIWEudmVydGljYWw7aWYodGhpcy52ZXJ0aWNhbCl7dGhpcy52bWV0cmljcz1hLnZtZXRyaWNzO3RoaXMuZGVmYXVsdFZNZXRyaWNzPWEuZGVmYXVsdFZNZXRyaWNzfWlmKCF0fHx0LmlzRW1wdHkpe3QmJndhcm4oJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJytlKyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpO3RoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSk7cmV0dXJufVtuLHNdPWdldEZvbnRGaWxlVHlwZSh0LGEpO249PT10aGlzLnR5cGUmJnM9PT10aGlzLnN1YnR5cGV8fGluZm8oYEluY29uc2lzdGVudCBmb250IGZpbGUgVHlwZS9TdWJUeXBlLCBleHBlY3RlZDogJHt0aGlzLnR5cGV9LyR7dGhpcy5zdWJ0eXBlfSBidXQgZm91bmQ6ICR7bn0vJHtzfS5gKTtsZXQgYzt0cnl7c3dpdGNoKG4pe2Nhc2UiTU1UeXBlMSI6aW5mbygiTU1UeXBlMSBmb250ICgiK2UrIiksIGZhbGxpbmcgYmFjayB0byBUeXBlMS4iKTtjYXNlIlR5cGUxIjpjYXNlIkNJREZvbnRUeXBlMCI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSI7Y29uc3Qgcj0iVHlwZTFDIj09PXN8fCJDSURGb250VHlwZTBDIj09PXM/bmV3IENGRkZvbnQodCxhKTpuZXcgVHlwZTFGb250KGUsdCxhKTthZGp1c3RXaWR0aHMoYSk7Yz10aGlzLmNvbnZlcnQoZSxyLGEpO2JyZWFrO2Nhc2UiT3BlblR5cGUiOmNhc2UiVHJ1ZVR5cGUiOmNhc2UiQ0lERm9udFR5cGUyIjp0aGlzLm1pbWV0eXBlPSJmb250L29wZW50eXBlIjtjPXRoaXMuY2hlY2tBbmRSZXBhaXIoZSx0LGEpO2FkanVzdFdpZHRocyhhKTt0aGlzLmlzT3BlblR5cGUmJihuPSJPcGVuVHlwZSIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBGb250ICR7bn0gaXMgbm90IHN1cHBvcnRlZGApfX1jYXRjaChlKXt3YXJuKGUpO3RoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSk7cmV0dXJufWFtZW5kRmFsbGJhY2tUb1VuaWNvZGUoYSk7dGhpcy5kYXRhPWM7dGhpcy50eXBlPW47dGhpcy5zdWJ0eXBlPXM7dGhpcy5mb250TWF0cml4PWEuZm9udE1hdHJpeDt0aGlzLndpZHRocz1hLndpZHRoczt0aGlzLmRlZmF1bHRXaWR0aD1hLmRlZmF1bHRXaWR0aDt0aGlzLnRvVW5pY29kZT1hLnRvVW5pY29kZTt0aGlzLnNlYWNNYXA9YS5zZWFjTWFwfWdldCByZW5kZXJlcigpe3JldHVybiBzaGFkb3codGhpcywicmVuZGVyZXIiLEZvbnRSZW5kZXJlckZhY3RvcnkuY3JlYXRlKHRoaXMsd3IpKX1leHBvcnREYXRhKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCB0IG9mIHNpKXtjb25zdCBhPXRoaXNbdF07dm9pZCAwIT09YSYmKGVbdF09YSl9aWYoIXRoaXMuZm9udEV4dHJhUHJvcGVydGllcylyZXR1cm57ZGF0YTplfTtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IGUgb2Ygb2kpe2NvbnN0IGE9dGhpc1tlXTt2b2lkIDAhPT1hJiYodFtlXT1hKX1yZXR1cm57ZGF0YTplLGV4dHJhOnR9fWZhbGxiYWNrVG9TeXN0ZW1Gb250KGUpe3RoaXMubWlzc2luZ0ZpbGU9ITA7Y29uc3R7bmFtZTp0LHR5cGU6YX09dGhpcztsZXQgcj1ub3JtYWxpemVGb250TmFtZSh0KTtjb25zdCBpPUxyKCksbj1VcigpLHM9ISFpW3JdLG89ISghbltyXXx8IWlbbltyXV0pO3I9aVtyXXx8bltyXXx8cjtjb25zdCBjPXpyKClbcl07aWYoYyl7aXNOYU4odGhpcy5hc2NlbnQpJiYodGhpcy5hc2NlbnQ9Yy5hc2NlbnQvbmkpO2lzTmFOKHRoaXMuZGVzY2VudCkmJih0aGlzLmRlc2NlbnQ9Yy5kZXNjZW50L25pKTtpc05hTih0aGlzLmNhcEhlaWdodCkmJih0aGlzLmNhcEhlaWdodD1jLmNhcEhlaWdodC9uaSl9dGhpcy5ib2xkPS9ib2xkL2dpLnRlc3Qocik7dGhpcy5pdGFsaWM9L29ibGlxdWV8aXRhbGljL2dpLnRlc3Qocik7dGhpcy5ibGFjaz0vQmxhY2svZy50ZXN0KHQpO2NvbnN0IGw9L05hcnJvdy9nLnRlc3QodCk7dGhpcy5yZW1lYXN1cmU9KCFzfHxsKSYmT2JqZWN0LmtleXModGhpcy53aWR0aHMpLmxlbmd0aD4wO2lmKChzfHxvKSYmIkNJREZvbnRUeXBlMiI9PT1hJiZ0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpKXtjb25zdCBhPWUuY2lkVG9HaWRNYXAscj1bXTthcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKHIscXIoKSk7L0FyaWFsLT9CbGFjay9pLnRlc3QodCk/YXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChyLEhyKCkpOi9DYWxpYnJpL2kudGVzdCh0KSYmYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChyLFdyKCkpO2lmKGEpe2Zvcihjb25zdCBlIGluIHIpe2NvbnN0IHQ9cltlXTt2b2lkIDAhPT1hW3RdJiYoclsrZV09YVt0XSl9YS5sZW5ndGghPT10aGlzLnRvVW5pY29kZS5sZW5ndGgmJmUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtjb25zdCBpPXJbZV07dm9pZCAwPT09YVtpXSYmKHJbK2VdPXQpfSl9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcHx8dGhpcy50b1VuaWNvZGUuZm9yRWFjaChmdW5jdGlvbihlLHQpe3JbK2VdPXR9KTt0aGlzLnRvRm9udENoYXI9cjt0aGlzLnRvVW5pY29kZT1uZXcgVG9Vbmljb2RlTWFwKHIpfWVsc2UgaWYoL1N5bWJvbC9pLnRlc3QocikpdGhpcy50b0ZvbnRDaGFyPWJ1aWxkVG9Gb250Q2hhcih1cixmcigpLHRoaXMuZGlmZmVyZW5jZXMpO2Vsc2UgaWYoL0RpbmdiYXRzL2kudGVzdChyKSl0aGlzLnRvRm9udENoYXI9YnVpbGRUb0ZvbnRDaGFyKGRyLGdyKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZihzfHxvKXtjb25zdCBlPWJ1aWxkVG9Gb250Q2hhcih0aGlzLmRlZmF1bHRFbmNvZGluZyxmcigpLHRoaXMuZGlmZmVyZW5jZXMpOyJDSURGb250VHlwZTIiIT09YXx8dGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKXx8dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcHx8dGhpcy50b1VuaWNvZGUuZm9yRWFjaChmdW5jdGlvbih0LGEpe2VbK3RdPWF9KTt0aGlzLnRvRm9udENoYXI9ZX1lbHNle2NvbnN0IGU9ZnIoKSxhPVtdO3RoaXMudG9Vbmljb2RlLmZvckVhY2goKHQscik9PntpZighdGhpcy5jb21wb3NpdGUpe2NvbnN0IGE9Z2V0VW5pY29kZUZvckdseXBoKHRoaXMuZGlmZmVyZW5jZXNbdF18fHRoaXMuZGVmYXVsdEVuY29kaW5nW3RdLGUpOy0xIT09YSYmKHI9YSl9YVsrdF09cn0pO3RoaXMuY29tcG9zaXRlJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwJiYvVGFob21hfFZlcmRhbmEvaS50ZXN0KHQpJiZhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKGEscXIoKSk7dGhpcy50b0ZvbnRDaGFyPWF9YW1lbmRGYWxsYmFja1RvVW5pY29kZShlKTt0aGlzLmxvYWRlZE5hbWU9ci5zcGxpdCgiLSIsMSlbMF19Y2hlY2tBbmRSZXBhaXIoZSx0LGEpe2NvbnN0IHI9WyJPUy8yIiwiY21hcCIsImhlYWQiLCJoaGVhIiwiaG10eCIsIm1heHAiLCJuYW1lIiwicG9zdCIsImxvY2EiLCJnbHlmIiwiZnBnbSIsInByZXAiLCJjdnQgIiwiQ0ZGICJdO2Z1bmN0aW9uIHJlYWRUYWJsZXMoZSx0KXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7YVsiT1MvMiJdPW51bGw7YS5jbWFwPW51bGw7YS5oZWFkPW51bGw7YS5oaGVhPW51bGw7YS5obXR4PW51bGw7YS5tYXhwPW51bGw7YS5uYW1lPW51bGw7YS5wb3N0PW51bGw7Zm9yKGxldCBpPTA7aTx0O2krKyl7Y29uc3QgdD1yZWFkVGFibGVFbnRyeShlKTtyLmluY2x1ZGVzKHQudGFnKSYmKDAhPT10Lmxlbmd0aCYmKGFbdC50YWddPXQpKX1yZXR1cm4gYX1mdW5jdGlvbiByZWFkVGFibGVFbnRyeShlKXtjb25zdCB0PWUuZ2V0U3RyaW5nKDQpLGE9ZS5nZXRJbnQzMigpPj4+MCxyPWUuZ2V0SW50MzIoKT4+PjAsaT1lLmdldEludDMyKCk+Pj4wLG49ZS5wb3M7ZS5wb3M9ZS5zdGFydHx8MDtlLnNraXAocik7Y29uc3Qgcz1lLmdldEJ5dGVzKGkpO2UucG9zPW47aWYoImhlYWQiPT09dCl7c1s4XT1zWzldPXNbMTBdPXNbMTFdPTA7c1sxN118PTMyfXJldHVybnt0YWc6dCxjaGVja3N1bTphLGxlbmd0aDppLG9mZnNldDpyLGRhdGE6c319ZnVuY3Rpb24gcmVhZE9wZW5UeXBlSGVhZGVyKGUpe3JldHVybnt2ZXJzaW9uOmUuZ2V0U3RyaW5nKDQpLG51bVRhYmxlczplLmdldFVpbnQxNigpLHNlYXJjaFJhbmdlOmUuZ2V0VWludDE2KCksZW50cnlTZWxlY3RvcjplLmdldFVpbnQxNigpLHJhbmdlU2hpZnQ6ZS5nZXRVaW50MTYoKX19ZnVuY3Rpb24gc2FuaXRpemVHbHlwaChlLHQsYSxyLGksbil7Y29uc3Qgcz17bGVuZ3RoOjAsc2l6ZU9mSW5zdHJ1Y3Rpb25zOjB9O2lmKHQ8MHx8dD49ZS5sZW5ndGh8fGE+ZS5sZW5ndGh8fGEtdDw9MTIpcmV0dXJuIHM7Y29uc3Qgbz1lLnN1YmFycmF5KHQsYSksYz1zaWduZWRJbnQxNihvWzJdLG9bM10pLGw9c2lnbmVkSW50MTYob1s0XSxvWzVdKSxoPXNpZ25lZEludDE2KG9bNl0sb1s3XSksdT1zaWduZWRJbnQxNihvWzhdLG9bOV0pO2lmKGM+aCl7d3JpdGVTaWduZWRJbnQxNihvLDIsaCk7d3JpdGVTaWduZWRJbnQxNihvLDYsYyl9aWYobD51KXt3cml0ZVNpZ25lZEludDE2KG8sNCx1KTt3cml0ZVNpZ25lZEludDE2KG8sOCxsKX1jb25zdCBkPXNpZ25lZEludDE2KG9bMF0sb1sxXSk7aWYoZDwwKXtpZihkPC0xKXJldHVybiBzO3Iuc2V0KG8saSk7cy5sZW5ndGg9by5sZW5ndGg7cmV0dXJuIHN9bGV0IGYsZz0xMCxwPTA7Zm9yKGY9MDtmPGQ7ZisrKXtwPShvW2ddPDw4fG9bZysxXSkrMTtnKz0yfWNvbnN0IG09ZyxiPW9bZ108PDh8b1tnKzFdO3Muc2l6ZU9mSW5zdHJ1Y3Rpb25zPWI7Zys9MitiO2NvbnN0IHk9ZztsZXQgdz0wO2ZvcihmPTA7ZjxwO2YrKyl7Y29uc3QgZT1vW2crK107MTkyJmUmJihvW2ctMV09NjMmZSk7bGV0IHQ9MjsyJmU/dD0xOjE2JmUmJih0PTApO2xldCBhPTI7NCZlP2E9MTozMiZlJiYoYT0wKTtjb25zdCByPXQrYTt3Kz1yO2lmKDgmZSl7Y29uc3QgZT1vW2crK107MD09PWUmJihvW2ctMV1ePTgpO2YrPWU7dys9ZSpyfX1pZigwPT09dylyZXR1cm4gcztsZXQgeD1nK3c7aWYoeD5vLmxlbmd0aClyZXR1cm4gcztpZighbiYmYj4wKXtyLnNldChvLnN1YmFycmF5KDAsbSksaSk7ci5zZXQoWzAsMF0saSttKTtyLnNldChvLnN1YmFycmF5KHkseCksaSttKzIpO3gtPWI7by5sZW5ndGgteD4zJiYoeD14KzMmLTQpO3MubGVuZ3RoPXg7cmV0dXJuIHN9aWYoby5sZW5ndGgteD4zKXt4PXgrMyYtNDtyLnNldChvLnN1YmFycmF5KDAseCksaSk7cy5sZW5ndGg9eDtyZXR1cm4gc31yLnNldChvLGkpO3MubGVuZ3RoPW8ubGVuZ3RoO3JldHVybiBzfWZ1bmN0aW9uIHJlYWROYW1lVGFibGUoZSl7Y29uc3QgYT0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9YTtjb25zdCByPVtbXSxbXV0saT1bXSxuPWUubGVuZ3RoLHM9YStuO2lmKDAhPT10LmdldFVpbnQxNigpfHxuPDYpcmV0dXJuW3IsaV07Y29uc3Qgbz10LmdldFVpbnQxNigpLGM9dC5nZXRVaW50MTYoKTtsZXQgbCxoO2ZvcihsPTA7bDxvJiZ0LnBvcysxMjw9cztsKyspe2NvbnN0IGU9e3BsYXRmb3JtOnQuZ2V0VWludDE2KCksZW5jb2Rpbmc6dC5nZXRVaW50MTYoKSxsYW5ndWFnZTp0LmdldFVpbnQxNigpLG5hbWU6dC5nZXRVaW50MTYoKSxsZW5ndGg6dC5nZXRVaW50MTYoKSxvZmZzZXQ6dC5nZXRVaW50MTYoKX07KGlzTWFjTmFtZVJlY29yZChlKXx8aXNXaW5OYW1lUmVjb3JkKGUpKSYmaS5wdXNoKGUpfWZvcihsPTAsaD1pLmxlbmd0aDtsPGg7bCsrKXtjb25zdCBlPWlbbF07aWYoZS5sZW5ndGg8PTApY29udGludWU7Y29uc3Qgbj1hK2MrZS5vZmZzZXQ7aWYobitlLmxlbmd0aD5zKWNvbnRpbnVlO3QucG9zPW47Y29uc3Qgbz1lLm5hbWU7aWYoZS5lbmNvZGluZyl7bGV0IGE9IiI7Zm9yKGxldCByPTAsaT1lLmxlbmd0aDtyPGk7cis9MilhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuZ2V0VWludDE2KCkpO3JbMV1bb109YX1lbHNlIHJbMF1bb109dC5nZXRTdHJpbmcoZS5sZW5ndGgpfXJldHVybltyLGldfWNvbnN0IGk9WzAsMCwwLDAsMCwwLDAsMCwtMiwtMiwtMiwtMiwwLDAsLTIsLTUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsMCwwLC0xLDAsLTEsLTEsLTEsLTEsMSwtMSwtOTk5LDAsMSwwLC0xLC0yLDAsLTEsLTIsLTEsLTEsMCwtMSwtMSwwLDAsLTk5OSwtOTk5LC0xLC0xLC0xLC0xLC0yLC05OTksLTIsLTIsLTk5OSwwLC0yLC0yLDAsMCwtMiwwLC0yLDAsMCwwLC0yLC0xLC0xLDEsMSwwLDAsLTEsLTEsLTEsLTEsLTEsLTEsLTEsMCwwLC0xLDAsLTEsLTEsMCwtOTk5LC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLC0yLC05OTksLTk5OSwtOTk5LC05OTksLTk5OSwtMSwtMSwtMiwtMiwwLDAsMCwwLC0xLC0xLC05OTksLTIsLTIsMCwwLC0xLC0yLC0yLDAsMCwwLC0xLC0xLC0xLC0yXTtmdW5jdGlvbiBzYW5pdGl6ZVRUUHJvZ3JhbShlLHQpe2xldCBhLHIsbixzLG8sYz1lLmRhdGEsbD0wLGg9MCx1PTA7Y29uc3QgZD1bXSxmPVtdLGc9W107bGV0IHA9dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMsbT0hMSxiPTAseT0wO2ZvcihsZXQgZT1jLmxlbmd0aDtsPGU7KXtjb25zdCBlPWNbbCsrXTtpZig2ND09PWUpe3I9Y1tsKytdO2lmKG18fHkpbCs9cjtlbHNlIGZvcihhPTA7YTxyO2ErKylkLnB1c2goY1tsKytdKX1lbHNlIGlmKDY1PT09ZSl7cj1jW2wrK107aWYobXx8eSlsKz0yKnI7ZWxzZSBmb3IoYT0wO2E8cjthKyspe249Y1tsKytdO2QucHVzaChuPDw4fGNbbCsrXSl9fWVsc2UgaWYoMTc2PT0oMjQ4JmUpKXtyPWUtMTc2KzE7aWYobXx8eSlsKz1yO2Vsc2UgZm9yKGE9MDthPHI7YSsrKWQucHVzaChjW2wrK10pfWVsc2UgaWYoMTg0PT0oMjQ4JmUpKXtyPWUtMTg0KzE7aWYobXx8eSlsKz0yKnI7ZWxzZSBmb3IoYT0wO2E8cjthKyspe249Y1tsKytdO2QucHVzaChzaWduZWRJbnQxNihuLGNbbCsrXSkpfX1lbHNlIGlmKDQzIT09ZXx8cClpZig0NCE9PWV8fHApe2lmKDQ1PT09ZSlpZihtKXttPSExO2g9bH1lbHNle289Zi5wb3AoKTtpZighbyl7d2FybigiVFQ6IEVOREYgYmFkIHN0YWNrIik7dC5oaW50c1ZhbGlkPSExO3JldHVybn1zPWcucG9wKCk7Yz1vLmRhdGE7bD1vLmk7dC5mdW5jdGlvbnNTdGFja0RlbHRhc1tzXT1kLmxlbmd0aC1vLnN0YWNrVG9wfWVsc2UgaWYoMTM3PT09ZSl7aWYobXx8eSl7d2FybigiVFQ6IG5lc3RlZCBJREVGcyBub3QgYWxsb3dlZCIpO3A9ITB9bT0hMDt1PWx9ZWxzZSBpZig4OD09PWUpKytiO2Vsc2UgaWYoMjc9PT1lKXk9YjtlbHNlIGlmKDg5PT09ZSl7eT09PWImJih5PTApOy0tYn1lbHNlIGlmKDI4PT09ZSYmIW0mJiF5KXtjb25zdCBlPWQuYXQoLTEpO2U+MCYmKGwrPWUtMSl9fWVsc2V7aWYobXx8eSl7d2FybigiVFQ6IG5lc3RlZCBGREVGcyBub3QgYWxsb3dlZCIpO3A9ITB9bT0hMDt1PWw7cz1kLnBvcCgpO3QuZnVuY3Rpb25zRGVmaW5lZFtzXT17ZGF0YTpjLGk6bH19ZWxzZSBpZighbSYmIXkpe3M9ZC5hdCgtMSk7aWYoaXNOYU4ocykpaW5mbygiVFQ6IENBTEwgZW1wdHkgc3RhY2sgKG9yIGludmFsaWQgZW50cnkpLiIpO2Vsc2V7dC5mdW5jdGlvbnNVc2VkW3NdPSEwO2lmKHMgaW4gdC5mdW5jdGlvbnNTdGFja0RlbHRhcyl7Y29uc3QgZT1kLmxlbmd0aCt0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW3NdO2lmKGU8MCl7d2FybigiVFQ6IENBTEwgaW52YWxpZCBmdW5jdGlvbnMgc3RhY2sgZGVsdGEuIik7dC5oaW50c1ZhbGlkPSExO3JldHVybn1kLmxlbmd0aD1lfWVsc2UgaWYocyBpbiB0LmZ1bmN0aW9uc0RlZmluZWQmJiFnLmluY2x1ZGVzKHMpKXtmLnB1c2goe2RhdGE6YyxpOmwsc3RhY2tUb3A6ZC5sZW5ndGgtMX0pO2cucHVzaChzKTtvPXQuZnVuY3Rpb25zRGVmaW5lZFtzXTtpZighbyl7d2FybigiVFQ6IENBTEwgbm9uLWV4aXN0ZW50IGZ1bmN0aW9uIik7dC5oaW50c1ZhbGlkPSExO3JldHVybn1jPW8uZGF0YTtsPW8uaX19fWlmKCFtJiYheSl7bGV0IHQ9MDtlPD0xNDI/dD1pW2VdOmU+PTE5MiYmZTw9MjIzP3Q9LTE6ZT49MjI0JiYodD0tMik7aWYoZT49MTEzJiZlPD0xMTcpe3I9ZC5wb3AoKTtpc05hTihyKXx8KHQ9Miotcil9Zm9yKDt0PDAmJmQubGVuZ3RoPjA7KXtkLnBvcCgpO3QrK31mb3IoO3Q+MDspe2QucHVzaChOYU4pO3QtLX19fXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zPXA7Y29uc3Qgdz1bY107bD5jLmxlbmd0aCYmdy5wdXNoKG5ldyBVaW50OEFycmF5KGwtYy5sZW5ndGgpKTtpZih1Pmgpe3dhcm4oIlRUOiBjb21wbGVtZW50aW5nIGEgbWlzc2luZyBmdW5jdGlvbiB0YWlsIik7dy5wdXNoKG5ldyBVaW50OEFycmF5KFszNCw0NV0pKX0hZnVuY3Rpb24gZm9sZFRUVGFibGUoZSx0KXtpZih0Lmxlbmd0aD4xKXtsZXQgYSxyLGk9MDtmb3IoYT0wLHI9dC5sZW5ndGg7YTxyO2ErKylpKz10W2FdLmxlbmd0aDtpPWkrMyYtNDtjb25zdCBuPW5ldyBVaW50OEFycmF5KGkpO2xldCBzPTA7Zm9yKGE9MCxyPXQubGVuZ3RoO2E8cjthKyspe24uc2V0KHRbYV0scyk7cys9dFthXS5sZW5ndGh9ZS5kYXRhPW47ZS5sZW5ndGg9aX19KGUsdyl9bGV0IG4scyxvLGM7aWYoaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKHQ9bmV3IFN0cmVhbShuZXcgVWludDhBcnJheSh0LmdldEJ5dGVzKCkpKSkpe2NvbnN0IGU9ZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZSx0KXtjb25zdHtudW1Gb250czphLG9mZnNldFRhYmxlOnJ9PWZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIoZSl7Y29uc3QgdD1lLmdldFN0cmluZyg0KTthc3NlcnQoInR0Y2YiPT09dCwiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC4iKTtjb25zdCBhPWUuZ2V0VWludDE2KCkscj1lLmdldFVpbnQxNigpLGk9ZS5nZXRJbnQzMigpPj4+MCxuPVtdO2ZvcihsZXQgdD0wO3Q8aTt0Kyspbi5wdXNoKGUuZ2V0SW50MzIoKT4+PjApO2NvbnN0IHM9e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjphLG1pbm9yVmVyc2lvbjpyLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6bn07c3dpdGNoKGEpe2Nhc2UgMTpyZXR1cm4gcztjYXNlIDI6cy5kc2lnVGFnPWUuZ2V0SW50MzIoKT4+PjA7cy5kc2lnTGVuZ3RoPWUuZ2V0SW50MzIoKT4+PjA7cy5kc2lnT2Zmc2V0PWUuZ2V0SW50MzIoKT4+PjA7cmV0dXJuIHN9dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFRydWVUeXBlIENvbGxlY3Rpb24gbWFqb3JWZXJzaW9uOiAke2F9LmApfShlKSxpPXQuc3BsaXQoIisiKTtsZXQgbjtmb3IobGV0IHM9MDtzPGE7cysrKXtlLnBvcz0oZS5zdGFydHx8MCkrcltzXTtjb25zdCBhPXJlYWRPcGVuVHlwZUhlYWRlcihlKSxvPXJlYWRUYWJsZXMoZSxhLm51bVRhYmxlcyk7aWYoIW8ubmFtZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSAibmFtZSIgdGFibGUuJyk7Y29uc3RbY109cmVhZE5hbWVUYWJsZShvLm5hbWUpO2ZvcihsZXQgZT0wLHI9Yy5sZW5ndGg7ZTxyO2UrKylmb3IobGV0IHI9MCxzPWNbZV0ubGVuZ3RoO3I8cztyKyspe2NvbnN0IHM9Y1tlXVtyXT8ucmVwbGFjZUFsbCgvXHMvZywiIik7aWYocyl7aWYocz09PXQpcmV0dXJue2hlYWRlcjphLHRhYmxlczpvfTtpZighKGkubGVuZ3RoPDIpKWZvcihjb25zdCBlIG9mIGkpcz09PWUmJihuPXtuYW1lOmUsaGVhZGVyOmEsdGFibGVzOm99KX19fWlmKG4pe3dhcm4oYFRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiAiJHt0fSIgZm9udCwgZmFsbGluZyBiYWNrIHRvICIke24ubmFtZX0iIGZvbnQgaW5zdGVhZC5gKTtyZXR1cm57aGVhZGVyOm4uaGVhZGVyLHRhYmxlczpuLnRhYmxlc319dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIiR7dH0iIGZvbnQuYCl9KHQsdGhpcy5uYW1lKTtuPWUuaGVhZGVyO3M9ZS50YWJsZXN9ZWxzZXtuPXJlYWRPcGVuVHlwZUhlYWRlcih0KTtzPXJlYWRUYWJsZXModCxuLm51bVRhYmxlcyl9Y29uc3QgbD0hc1siQ0ZGICJdO2lmKGwpe2lmKCFzLmxvY2EpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCdSZXF1aXJlZCAibG9jYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7aWYoIXMuZ2x5Zil7d2FybignUmVxdWlyZWQgImdseWYiIHRhYmxlIGlzIG5vdCBmb3VuZCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtzLmdseWY9e3RhZzoiZ2x5ZiIsZGF0YTpuZXcgVWludDhBcnJheSgwKX19dGhpcy5pc09wZW5UeXBlPSExfWVsc2V7Y29uc3QgdD1hLmNvbXBvc2l0ZSYmKGEuY2lkVG9HaWRNYXA/Lmxlbmd0aD4wfHwhKGEuY01hcCBpbnN0YW5jZW9mIElkZW50aXR5Q01hcCkpO2lmKCJPVFRPIj09PW4udmVyc2lvbiYmIXR8fCFzLmhlYWR8fCFzLmhoZWF8fCFzLm1heHB8fCFzLnBvc3Qpe2M9bmV3IFN0cmVhbShzWyJDRkYgIl0uZGF0YSk7bz1uZXcgQ0ZGRm9udChjLGEpO3JldHVybiB0aGlzLmNvbnZlcnQoZSxvLGEpfWRlbGV0ZSBzLmdseWY7ZGVsZXRlIHMubG9jYTtkZWxldGUgcy5mcGdtO2RlbGV0ZSBzLnByZXA7ZGVsZXRlIHNbImN2dCAiXTt0aGlzLmlzT3BlblR5cGU9ITB9aWYoIXMubWF4cCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTt0LnBvcz0odC5zdGFydHx8MCkrcy5tYXhwLm9mZnNldDtsZXQgaD10LmdldEludDMyKCk7Y29uc3QgdT10LmdldFVpbnQxNigpO2lmKDY1NTM2IT09aCYmMjA0ODAhPT1oKXtpZig2PT09cy5tYXhwLmxlbmd0aCloPTIwNDgwO2Vsc2V7aWYoIShzLm1heHAubGVuZ3RoPj0zMikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCcibWF4cCIgdGFibGUgaGFzIGEgd3JvbmcgdmVyc2lvbiBudW1iZXInKTtoPTY1NTM2fSFmdW5jdGlvbiB3cml0ZVVpbnQzMihlLHQsYSl7ZVt0KzNdPTI1NSZhO2VbdCsyXT1hPj4+ODtlW3QrMV09YT4+PjE2O2VbdF09YT4+PjI0fShzLm1heHAuZGF0YSwwLGgpfWlmKGEuc2NhbGVGYWN0b3JzPy5sZW5ndGg9PT11JiZsKXtjb25zdHtzY2FsZUZhY3RvcnM6ZX09YSx0PWludDE2KHMuaGVhZC5kYXRhWzUwXSxzLmhlYWQuZGF0YVs1MV0pLHI9bmV3IEdseWZUYWJsZSh7Z2x5ZlRhYmxlOnMuZ2x5Zi5kYXRhLGlzR2x5cGhMb2NhdGlvbnNMb25nOnQsbG9jYVRhYmxlOnMubG9jYS5kYXRhLG51bUdseXBoczp1fSk7ci5zY2FsZShlKTtjb25zdHtnbHlmOmksbG9jYTpuLGlzTG9jYXRpb25Mb25nOm99PXIud3JpdGUoKTtzLmdseWYuZGF0YT1pO3MubG9jYS5kYXRhPW47aWYobyE9PSEhdCl7cy5oZWFkLmRhdGFbNTBdPTA7cy5oZWFkLmRhdGFbNTFdPW8/MTowfWNvbnN0IGM9cy5obXR4LmRhdGE7Zm9yKGxldCB0PTA7dDx1O3QrKyl7Y29uc3QgYT00KnQscj1NYXRoLnJvdW5kKGVbdF0qaW50MTYoY1thXSxjW2ErMV0pKTtjW2FdPXI+PjgmMjU1O2NbYSsxXT0yNTUmcjt3cml0ZVNpZ25lZEludDE2KGMsYSsyLE1hdGgucm91bmQoZVt0XSpzaWduZWRJbnQxNihjW2ErMl0sY1thKzNdKSkpfX1sZXQgZD11KzEsZj0hMDtpZihkPjY1NTM1KXtmPSExO2Q9dTt3YXJuKCJOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKX1sZXQgZz0wLHA9MDtpZihoPj02NTUzNiYmcy5tYXhwLmxlbmd0aD49MzIpe3QucG9zKz04O2lmKHQuZ2V0VWludDE2KCk+Mil7cy5tYXhwLmRhdGFbMTRdPTA7cy5tYXhwLmRhdGFbMTVdPTJ9dC5wb3MrPTQ7Zz10LmdldFVpbnQxNigpO3QucG9zKz00O3A9dC5nZXRVaW50MTYoKX1zLm1heHAuZGF0YVs0XT1kPj44O3MubWF4cC5kYXRhWzVdPTI1NSZkO2NvbnN0IG09ZnVuY3Rpb24gc2FuaXRpemVUVFByb2dyYW1zKGUsdCxhLHIpe2NvbnN0IGk9e2Z1bmN0aW9uc0RlZmluZWQ6W10sZnVuY3Rpb25zVXNlZDpbXSxmdW5jdGlvbnNTdGFja0RlbHRhczpbXSx0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6ITEsaGludHNWYWxpZDohMH07ZSYmc2FuaXRpemVUVFByb2dyYW0oZSxpKTt0JiZzYW5pdGl6ZVRUUHJvZ3JhbSh0LGkpO2UmJmZ1bmN0aW9uIGNoZWNrSW52YWxpZEZ1bmN0aW9ucyhlLHQpe2lmKCFlLnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucylpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpe3dhcm4oIlRUOiBtb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoYW4gZXhwZWN0ZWQiKTtlLmhpbnRzVmFsaWQ9ITF9ZWxzZSBmb3IobGV0IGE9MCxyPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7YTxyO2ErKyl7aWYoYT50KXt3YXJuKCJUVDogaW52YWxpZCBmdW5jdGlvbiBpZDogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufWlmKGUuZnVuY3Rpb25zVXNlZFthXSYmIWUuZnVuY3Rpb25zRGVmaW5lZFthXSl7d2FybigiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufX19KGkscik7aWYoYSYmMSZhLmxlbmd0aCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShhLmxlbmd0aCsxKTtlLnNldChhLmRhdGEpO2EuZGF0YT1lfXJldHVybiBpLmhpbnRzVmFsaWR9KHMuZnBnbSxzLnByZXAsc1siY3Z0ICJdLGcpO2lmKCFtKXtkZWxldGUgcy5mcGdtO2RlbGV0ZSBzLnByZXA7ZGVsZXRlIHNbImN2dCAiXX0hZnVuY3Rpb24gc2FuaXRpemVNZXRyaWNzKGUsdCxhLHIsaSxuKXtpZighdCl7YSYmKGEuZGF0YT1udWxsKTtyZXR1cm59ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0O2UucG9zKz00O2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2NvbnN0IHM9ZS5nZXRVaW50MTYoKTtlLnBvcys9ODtlLnBvcys9MjtsZXQgbz1lLmdldFVpbnQxNigpO2lmKDAhPT1zKXtpZighKDImaW50MTYoci5kYXRhWzQ0XSxyLmRhdGFbNDVdKSkpe3QuZGF0YVsyMl09MDt0LmRhdGFbMjNdPTB9fWlmKG8+aSl7aW5mbyhgVGhlIG51bU9mTWV0cmljcyAoJHtvfSkgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bUdseXBocyAoJHtpfSkuYCk7bz1pO3QuZGF0YVszNF09KDY1MjgwJm8pPj44O3QuZGF0YVszNV09MjU1Jm99Y29uc3QgYz1pLW8tKGEubGVuZ3RoLTQqbz4+MSk7aWYoYz4wKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKzIqYyk7ZS5zZXQoYS5kYXRhKTtpZihuKXtlW2EubGVuZ3RoXT1hLmRhdGFbMl07ZVthLmxlbmd0aCsxXT1hLmRhdGFbM119YS5kYXRhPWV9fSh0LHMuaGhlYSxzLmhtdHgscy5oZWFkLGQsZik7aWYoIXMuaGVhZCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJoZWFkIiB0YWJsZSBpcyBub3QgZm91bmQnKTshZnVuY3Rpb24gc2FuaXRpemVIZWFkKGUsdCxhKXtjb25zdCByPWUuZGF0YSxpPWZ1bmN0aW9uIGludDMyKGUsdCxhLHIpe3JldHVybihlPDwyNCkrKHQ8PDE2KSsoYTw8OCkrcn0oclswXSxyWzFdLHJbMl0sclszXSk7aWYoaT4+MTYhPTEpe2luZm8oIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgdmVyc2lvbiBpbiBoZWFkIHRhYmxlOiAiK2kpO3JbMF09MDtyWzFdPTE7clsyXT0wO3JbM109MH1jb25zdCBuPWludDE2KHJbNTBdLHJbNTFdKTtpZihuPDB8fG4+MSl7aW5mbygiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCBpbmRleFRvTG9jRm9ybWF0IGluIGhlYWQgdGFibGU6ICIrbik7Y29uc3QgZT10KzE7aWYoYT09PWU8PDEpe3JbNTBdPTA7cls1MV09MH1lbHNle2lmKGEhPT1lPDwyKXRocm93IG5ldyBGb3JtYXRFcnJvcigiQ291bGQgbm90IGZpeCBpbmRleFRvTG9jRm9ybWF0OiAiK24pO3JbNTBdPTA7cls1MV09MX19fShzLmhlYWQsdSxsP3MubG9jYS5sZW5ndGg6MCk7bGV0IGI9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihsKXtjb25zdCBlPWludDE2KHMuaGVhZC5kYXRhWzUwXSxzLmhlYWQuZGF0YVs1MV0pLHQ9ZnVuY3Rpb24gc2FuaXRpemVHbHlwaExvY2F0aW9ucyhlLHQsYSxyLGksbixzKXtsZXQgbyxjLGw7aWYocil7bz00O2M9ZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGVMb25nKGUsdCl7cmV0dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX07bD1mdW5jdGlvbiBmb250SXRlbUVuY29kZUxvbmcoZSx0LGEpe2VbdF09YT4+PjI0JjI1NTtlW3QrMV09YT4+MTYmMjU1O2VbdCsyXT1hPj44JjI1NTtlW3QrM109MjU1JmF9fWVsc2V7bz0yO2M9ZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZSx0KXtyZXR1cm4gZVt0XTw8OXxlW3QrMV08PDF9O2w9ZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGUoZSx0LGEpe2VbdF09YT4+OSYyNTU7ZVt0KzFdPWE+PjEmMjU1fX1jb25zdCBoPW4/YSsxOmEsdT1vKigxK2gpLGQ9bmV3IFVpbnQ4QXJyYXkodSk7ZC5zZXQoZS5kYXRhLnN1YmFycmF5KDAsdSkpO2UuZGF0YT1kO2NvbnN0IGY9dC5kYXRhLGc9Zi5sZW5ndGgscD1uZXcgVWludDhBcnJheShnKTtsZXQgbSxiO2NvbnN0IHk9W107Zm9yKG09MCxiPTA7bTxhKzE7bSsrLGIrPW8pe2xldCBlPWMoZCxiKTtlPmcmJihlPWcpO3kucHVzaCh7aW5kZXg6bSxvZmZzZXQ6ZSxlbmRPZmZzZXQ6MH0pfXkuc29ydCgoZSx0KT0+ZS5vZmZzZXQtdC5vZmZzZXQpO2ZvcihtPTA7bTxhO20rKyl5W21dLmVuZE9mZnNldD15W20rMV0ub2Zmc2V0O3kuc29ydCgoZSx0KT0+ZS5pbmRleC10LmluZGV4KTtmb3IobT0wO208YTttKyspe2NvbnN0e29mZnNldDplLGVuZE9mZnNldDp0fT15W21dO2lmKDAhPT1lfHwwIT09dClicmVhaztjb25zdCBhPXlbbSsxXS5vZmZzZXQ7aWYoMCE9PWEpe3lbbV0uZW5kT2Zmc2V0PWE7YnJlYWt9fWNvbnN0IHc9eS5hdCgtMik7MCE9PXcub2Zmc2V0JiYwPT09dy5lbmRPZmZzZXQmJih3LmVuZE9mZnNldD1nKTtjb25zdCB4PU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IFM9MDtsKGQsMCxTKTtmb3IobT0wLGI9bzttPGE7bSsrLGIrPW8pe2NvbnN0IGU9c2FuaXRpemVHbHlwaChmLHlbbV0ub2Zmc2V0LHlbbV0uZW5kT2Zmc2V0LHAsUyxpKSx0PWUubGVuZ3RoOzA9PT10JiYoeFttXT0hMCk7ZS5zaXplT2ZJbnN0cnVjdGlvbnM+cyYmKHM9ZS5zaXplT2ZJbnN0cnVjdGlvbnMpO1MrPXQ7bChkLGIsUyl9aWYoMD09PVMpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoWzAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0OSwwXSk7Zm9yKG09MCxiPW87bTxoO20rKyxiKz1vKWwoZCxiLGUubGVuZ3RoKTt0LmRhdGE9ZX1lbHNlIGlmKG4pe2NvbnN0IGE9YyhkLG8pO2lmKHAubGVuZ3RoPmErUyl0LmRhdGE9cC5zdWJhcnJheSgwLGErUyk7ZWxzZXt0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoYStTKTt0LmRhdGEuc2V0KHAuc3ViYXJyYXkoMCxTKSl9dC5kYXRhLnNldChwLnN1YmFycmF5KDAsYSksUyk7bChlLmRhdGEsZC5sZW5ndGgtbyxTK2EpfWVsc2UgdC5kYXRhPXAuc3ViYXJyYXkoMCxTKTtyZXR1cm57bWlzc2luZ0dseXBoczp4LG1heFNpemVPZkluc3RydWN0aW9uczpzfX0ocy5sb2NhLHMuZ2x5Zix1LGUsbSxmLHApO2I9dC5taXNzaW5nR2x5cGhzO2lmKGg+PTY1NTM2JiZzLm1heHAubGVuZ3RoPj0zMil7cy5tYXhwLmRhdGFbMjZdPXQubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zPj44O3MubWF4cC5kYXRhWzI3XT0yNTUmdC5tYXhTaXplT2ZJbnN0cnVjdGlvbnN9fWlmKCFzLmhoZWEpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGhlYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7aWYoMD09PXMuaGhlYS5kYXRhWzEwXSYmMD09PXMuaGhlYS5kYXRhWzExXSl7cy5oaGVhLmRhdGFbMTBdPTI1NTtzLmhoZWEuZGF0YVsxMV09MjU1fWNvbnN0IHk9e3VuaXRzUGVyRW06aW50MTYocy5oZWFkLmRhdGFbMThdLHMuaGVhZC5kYXRhWzE5XSkseU1heDpzaWduZWRJbnQxNihzLmhlYWQuZGF0YVs0Ml0scy5oZWFkLmRhdGFbNDNdKSx5TWluOnNpZ25lZEludDE2KHMuaGVhZC5kYXRhWzM4XSxzLmhlYWQuZGF0YVszOV0pLGFzY2VudDpzaWduZWRJbnQxNihzLmhoZWEuZGF0YVs0XSxzLmhoZWEuZGF0YVs1XSksZGVzY2VudDpzaWduZWRJbnQxNihzLmhoZWEuZGF0YVs2XSxzLmhoZWEuZGF0YVs3XSksbGluZUdhcDpzaWduZWRJbnQxNihzLmhoZWEuZGF0YVs4XSxzLmhoZWEuZGF0YVs5XSl9O3RoaXMuYXNjZW50PXkuYXNjZW50L3kudW5pdHNQZXJFbTt0aGlzLmRlc2NlbnQ9eS5kZXNjZW50L3kudW5pdHNQZXJFbTt0aGlzLmxpbmVHYXA9eS5saW5lR2FwL3kudW5pdHNQZXJFbTtpZih0aGlzLmNzc0ZvbnRJbmZvPy5saW5lSGVpZ2h0KXt0aGlzLmxpbmVIZWlnaHQ9dGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVIZWlnaHQ7dGhpcy5saW5lR2FwPXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lR2FwfWVsc2UgdGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXA7cy5wb3N0JiZmdW5jdGlvbiByZWFkUG9zdFNjcmlwdFRhYmxlKGUsYSxyKXtjb25zdCBpPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1pO2NvbnN0IG49aStlLmxlbmd0aCxzPXQuZ2V0SW50MzIoKTt0LnNraXAoMjgpO2xldCBvLGMsbD0hMDtzd2l0Y2gocyl7Y2FzZSA2NTUzNjpvPUNyO2JyZWFrO2Nhc2UgMTMxMDcyOmNvbnN0IGU9dC5nZXRVaW50MTYoKTtpZihlIT09cil7bD0hMTticmVha31jb25zdCBpPVtdO2ZvcihjPTA7YzxlOysrYyl7Y29uc3QgZT10LmdldFVpbnQxNigpO2lmKGU+PTMyNzY4KXtsPSExO2JyZWFrfWkucHVzaChlKX1pZighbClicmVhaztjb25zdCBoPVtdLHU9W107Zm9yKDt0LnBvczxuOyl7Y29uc3QgZT10LmdldEJ5dGUoKTt1Lmxlbmd0aD1lO2ZvcihjPTA7YzxlOysrYyl1W2NdPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRCeXRlKCkpO2gucHVzaCh1LmpvaW4oIiIpKX1vPVtdO2ZvcihjPTA7YzxlOysrYyl7Y29uc3QgZT1pW2NdO2U8MjU4P28ucHVzaChDcltlXSk6by5wdXNoKGhbZS0yNThdKX1icmVhaztjYXNlIDE5NjYwODpicmVhaztkZWZhdWx0Ondhcm4oIlVua25vd24vdW5zdXBwb3J0ZWQgcG9zdCB0YWJsZSB2ZXJzaW9uICIrcyk7bD0hMTthLmRlZmF1bHRFbmNvZGluZyYmKG89YS5kZWZhdWx0RW5jb2RpbmcpfWEuZ2x5cGhOYW1lcz1vO3JldHVybiBsfShzLnBvc3QsYSx1KTtzLnBvc3Q9e3RhZzoicG9zdCIsZGF0YTpjcmVhdGVQb3N0VGFibGUoYSl9O2NvbnN0IHc9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBoYXNHbHlwaChlKXtyZXR1cm4hYltlXX1pZihhLmNvbXBvc2l0ZSl7Y29uc3QgZT1hLmNpZFRvR2lkTWFwfHxbXSx0PTA9PT1lLmxlbmd0aDthLmNNYXAuZm9yRWFjaChmdW5jdGlvbihhLHIpeyJzdHJpbmciPT10eXBlb2YgciYmKHI9Y29udmVydENpZFN0cmluZyhhLHIsITApKTtpZihyPjY1NTM1KXRocm93IG5ldyBGb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpO2xldCBpPS0xO3Q/aT1yOnZvaWQgMCE9PWVbcl0mJihpPWVbcl0pO2k+PTAmJmk8dSYmaGFzR2x5cGgoaSkmJih3W2FdPWkpfSl9ZWxzZXtjb25zdCBlPWZ1bmN0aW9uIHJlYWRDbWFwVGFibGUoZSx0LGEscil7aWYoIWUpe3dhcm4oIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLiIpO3JldHVybntwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfX1sZXQgaSxuPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1uO3Quc2tpcCgyKTtjb25zdCBzPXQuZ2V0VWludDE2KCk7bGV0IG8sYz0hMTtmb3IobGV0IGU9MDtlPHM7ZSsrKXtjb25zdCBpPXQuZ2V0VWludDE2KCksbj10LmdldFVpbnQxNigpLGw9dC5nZXRJbnQzMigpPj4+MDtsZXQgaD0hMTtpZihvPy5wbGF0Zm9ybUlkIT09aXx8bz8uZW5jb2RpbmdJZCE9PW4pe2lmKDAhPT1pfHwwIT09biYmMSE9PW4mJjMhPT1uKWlmKDE9PT1pJiYwPT09biloPSEwO2Vsc2UgaWYoMyE9PWl8fDEhPT1ufHwhciYmbyl7aWYoYSYmMz09PWkmJjA9PT1uKXtoPSEwO2xldCBhPSEwO2lmKGU8cy0xKXtjb25zdCBlPXQucGVla0J5dGVzKDIpO2ludDE2KGVbMF0sZVsxXSk8aSYmKGE9ITEpfWEmJihjPSEwKX19ZWxzZXtoPSEwO2F8fChjPSEwKX1lbHNlIGg9ITA7aCYmKG89e3BsYXRmb3JtSWQ6aSxlbmNvZGluZ0lkOm4sb2Zmc2V0Omx9KTtpZihjKWJyZWFrfX1vJiYodC5wb3M9bitvLm9mZnNldCk7aWYoIW98fC0xPT09dC5wZWVrQnl0ZSgpKXt3YXJuKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpO3JldHVybntwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfX1jb25zdCBsPXQuZ2V0VWludDE2KCk7bGV0IGg9ITE7Y29uc3QgdT1bXTtsZXQgZCxmO2lmKDA9PT1sKXt0LnNraXAoNCk7Zm9yKGQ9MDtkPDI1NjtkKyspe2NvbnN0IGU9dC5nZXRCeXRlKCk7ZSYmdS5wdXNoKHtjaGFyQ29kZTpkLGdseXBoSWQ6ZX0pfWg9ITB9ZWxzZSBpZigyPT09bCl7dC5za2lwKDQpO2NvbnN0IGU9W107bGV0IGE9MDtmb3IobGV0IHI9MDtyPDI1NjtyKyspe2NvbnN0IHI9dC5nZXRVaW50MTYoKT4+MztlLnB1c2gocik7YT1NYXRoLm1heChyLGEpfWNvbnN0IHI9W107Zm9yKGxldCBlPTA7ZTw9YTtlKyspci5wdXNoKHtmaXJzdENvZGU6dC5nZXRVaW50MTYoKSxlbnRyeUNvdW50OnQuZ2V0VWludDE2KCksaWREZWx0YTpzaWduZWRJbnQxNih0LmdldEJ5dGUoKSx0LmdldEJ5dGUoKSksaWRSYW5nZVBvczp0LnBvcyt0LmdldFVpbnQxNigpfSk7Zm9yKGxldCBhPTA7YTwyNTY7YSsrKWlmKDA9PT1lW2FdKXt0LnBvcz1yWzBdLmlkUmFuZ2VQb3MrMiphO2Y9dC5nZXRVaW50MTYoKTt1LnB1c2goe2NoYXJDb2RlOmEsZ2x5cGhJZDpmfSl9ZWxzZXtjb25zdCBpPXJbZVthXV07Zm9yKGQ9MDtkPGkuZW50cnlDb3VudDtkKyspe2NvbnN0IGU9KGE8PDgpK2QraS5maXJzdENvZGU7dC5wb3M9aS5pZFJhbmdlUG9zKzIqZDtmPXQuZ2V0VWludDE2KCk7MCE9PWYmJihmPShmK2kuaWREZWx0YSklNjU1MzYpO3UucHVzaCh7Y2hhckNvZGU6ZSxnbHlwaElkOmZ9KX19fWVsc2UgaWYoND09PWwpe3Quc2tpcCg0KTtjb25zdCBlPXQuZ2V0VWludDE2KCk+PjE7dC5za2lwKDYpO2NvbnN0IGE9W107bGV0IHI7Zm9yKHI9MDtyPGU7cisrKWEucHVzaCh7ZW5kOnQuZ2V0VWludDE2KCl9KTt0LnNraXAoMik7Zm9yKHI9MDtyPGU7cisrKWFbcl0uc3RhcnQ9dC5nZXRVaW50MTYoKTtmb3Iocj0wO3I8ZTtyKyspYVtyXS5kZWx0YT10LmdldFVpbnQxNigpO2xldCBzLG89MDtmb3Iocj0wO3I8ZTtyKyspe2k9YVtyXTtjb25zdCBuPXQuZ2V0VWludDE2KCk7aWYobil7cz0obj4+MSktKGUtcik7aS5vZmZzZXRJbmRleD1zO289TWF0aC5tYXgobyxzK2kuZW5kLWkuc3RhcnQrMSl9ZWxzZSBpLm9mZnNldEluZGV4PS0xfWNvbnN0IGM9W107Zm9yKGQ9MDtkPG87ZCsrKWMucHVzaCh0LmdldFVpbnQxNigpKTtmb3Iocj0wO3I8ZTtyKyspe2k9YVtyXTtuPWkuc3RhcnQ7Y29uc3QgZT1pLmVuZCx0PWkuZGVsdGE7cz1pLm9mZnNldEluZGV4O2ZvcihkPW47ZDw9ZTtkKyspaWYoNjU1MzUhPT1kKXtmPXM8MD9kOmNbcytkLW5dO2Y9Zit0JjY1NTM1O3UucHVzaCh7Y2hhckNvZGU6ZCxnbHlwaElkOmZ9KX19fWVsc2UgaWYoNj09PWwpe3Quc2tpcCg0KTtjb25zdCBlPXQuZ2V0VWludDE2KCksYT10LmdldFVpbnQxNigpO2ZvcihkPTA7ZDxhO2QrKyl7Zj10LmdldFVpbnQxNigpO2NvbnN0IGE9ZStkO3UucHVzaCh7Y2hhckNvZGU6YSxnbHlwaElkOmZ9KX19ZWxzZXtpZigxMiE9PWwpe3dhcm4oImNtYXAgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdDogIitsKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19e3Quc2tpcCgxMCk7Y29uc3QgZT10LmdldEludDMyKCk+Pj4wO2ZvcihkPTA7ZDxlO2QrKyl7Y29uc3QgZT10LmdldEludDMyKCk+Pj4wLGE9dC5nZXRJbnQzMigpPj4+MDtsZXQgcj10LmdldEludDMyKCk+Pj4wO2ZvcihsZXQgdD1lO3Q8PWE7dCsrKXUucHVzaCh7Y2hhckNvZGU6dCxnbHlwaElkOnIrK30pfX19dS5zb3J0KChlLHQpPT5lLmNoYXJDb2RlLXQuY2hhckNvZGUpO2NvbnN0IGc9W10scD1uZXcgU2V0O2Zvcihjb25zdCBlIG9mIHUpe2NvbnN0e2NoYXJDb2RlOnR9PWU7aWYoIXAuaGFzKHQpKXtwLmFkZCh0KTtnLnB1c2goZSl9fXJldHVybntwbGF0Zm9ybUlkOm8ucGxhdGZvcm1JZCxlbmNvZGluZ0lkOm8uZW5jb2RpbmdJZCxtYXBwaW5nczpnLGhhc1Nob3J0Q21hcDpofX0ocy5jbWFwLHQsdGhpcy5pc1N5bWJvbGljRm9udCxhLmhhc0VuY29kaW5nKSxyPWUucGxhdGZvcm1JZCxpPWUuZW5jb2RpbmdJZCxuPWUubWFwcGluZ3M7bGV0IG89W10sYz0hMTshYS5oYXNFbmNvZGluZ3x8Ik1hY1JvbWFuRW5jb2RpbmciIT09YS5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PWEuYmFzZUVuY29kaW5nTmFtZXx8KG89Z2V0RW5jb2RpbmcoYS5iYXNlRW5jb2RpbmdOYW1lKSk7aWYoYS5oYXNFbmNvZGluZyYmIXRoaXMuaXNTeW1ib2xpY0ZvbnQmJigzPT09ciYmMT09PWl8fDE9PT1yJiYwPT09aSkpe2NvbnN0IGU9ZnIoKTtmb3IobGV0IHQ9MDt0PDI1Njt0Kyspe2xldCBzO3M9dm9pZCAwIT09dGhpcy5kaWZmZXJlbmNlc1t0XT90aGlzLmRpZmZlcmVuY2VzW3RdOm8ubGVuZ3RoJiYiIiE9PW9bdF0/b1t0XTpsclt0XTtpZighcyljb250aW51ZTtjb25zdCBjPXJlY292ZXJHbHlwaE5hbWUocyxlKTtsZXQgbDszPT09ciYmMT09PWk/bD1lW2NdOjE9PT1yJiYwPT09aSYmKGw9Y3IuaW5kZXhPZihjKSk7aWYodm9pZCAwPT09bCl7aWYoIWEuZ2x5cGhOYW1lcyYmYS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCYmISh0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKSl7Y29uc3QgZT10aGlzLnRvVW5pY29kZS5nZXQodCk7ZSYmKGw9ZS5jb2RlUG9pbnRBdCgwKSl9aWYodm9pZCAwPT09bCljb250aW51ZX1mb3IoY29uc3QgZSBvZiBuKWlmKGUuY2hhckNvZGU9PT1sKXt3W3RdPWUuZ2x5cGhJZDticmVha319fWVsc2UgaWYoMD09PXIpe2Zvcihjb25zdCBlIG9mIG4pd1tlLmNoYXJDb2RlXT1lLmdseXBoSWQ7Yz0hMH1lbHNlIGlmKDM9PT1yJiYwPT09aSlmb3IoY29uc3QgZSBvZiBuKXtsZXQgdD1lLmNoYXJDb2RlO3Q+PTYxNDQwJiZ0PD02MTY5NSYmKHQmPTI1NSk7d1t0XT1lLmdseXBoSWR9ZWxzZSBmb3IoY29uc3QgZSBvZiBuKXdbZS5jaGFyQ29kZV09ZS5nbHlwaElkO2lmKGEuZ2x5cGhOYW1lcyYmKG8ubGVuZ3RofHx0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpZm9yKGxldCBlPTA7ZTwyNTY7KytlKXtpZighYyYmdm9pZCAwIT09d1tlXSljb250aW51ZTtjb25zdCB0PXRoaXMuZGlmZmVyZW5jZXNbZV18fG9bZV07aWYoIXQpY29udGludWU7Y29uc3Qgcj1hLmdseXBoTmFtZXMuaW5kZXhPZih0KTtyPjAmJmhhc0dseXBoKHIpJiYod1tlXT1yKX19MD09PXcubGVuZ3RoJiYod1swXT0wKTtsZXQgeD1kLTE7Znx8KHg9MCk7aWYoIWEuY3NzRm9udEluZm8pe2NvbnN0IGU9YWRqdXN0TWFwcGluZyh3LGhhc0dseXBoLHgsdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1lLnRvRm9udENoYXI7cy5jbWFwPXt0YWc6ImNtYXAiLGRhdGE6Y3JlYXRlQ21hcFRhYmxlKGUuY2hhckNvZGVUb0dseXBoSWQsZS50b1VuaWNvZGVFeHRyYU1hcCxkKX07c1siT1MvMiJdJiZmdW5jdGlvbiB2YWxpZGF0ZU9TMlRhYmxlKGUsdCl7dC5wb3M9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O2NvbnN0IGE9dC5nZXRVaW50MTYoKTt0LnNraXAoNjApO2NvbnN0IHI9dC5nZXRVaW50MTYoKTtpZihhPDQmJjc2OCZyKXJldHVybiExO2lmKHQuZ2V0VWludDE2KCk+dC5nZXRVaW50MTYoKSlyZXR1cm4hMTt0LnNraXAoNik7aWYoMD09PXQuZ2V0VWludDE2KCkpcmV0dXJuITE7ZS5kYXRhWzhdPWUuZGF0YVs5XT0wO3JldHVybiEwfShzWyJPUy8yIl0sdCl8fChzWyJPUy8yIl09e3RhZzoiT1MvMiIsZGF0YTpjcmVhdGVPUzJUYWJsZShhLGUuY2hhckNvZGVUb0dseXBoSWQseSl9KX1pZighbCl0cnl7Yz1uZXcgU3RyZWFtKHNbIkNGRiAiXS5kYXRhKTtvPW5ldyBDRkZQYXJzZXIoYyxhLHdyKS5wYXJzZSgpO28uZHVwbGljYXRlRmlyc3RHbHlwaCgpO2NvbnN0IGU9bmV3IENGRkNvbXBpbGVyKG8pO3NbIkNGRiAiXS5kYXRhPWUuY29tcGlsZSgpfWNhdGNoe3dhcm4oIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIithLmxvYWRlZE5hbWUpfWlmKHMubmFtZSl7Y29uc3RbdCxyXT1yZWFkTmFtZVRhYmxlKHMubmFtZSk7cy5uYW1lLmRhdGE9Y3JlYXRlTmFtZVRhYmxlKGUsdCk7dGhpcy5wc05hbWU9dFswXVs2XXx8bnVsbDthLmNvbXBvc2l0ZXx8ZnVuY3Rpb24gYWRqdXN0VHJ1ZVR5cGVUb1VuaWNvZGUoZSx0LGEpe2lmKGUuaXNJbnRlcm5hbEZvbnQpcmV0dXJuO2lmKGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApcmV0dXJuO2lmKGUuaGFzRW5jb2RpbmcpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2lmKCF0KXJldHVybjtpZigwPT09YS5sZW5ndGgpcmV0dXJuO2lmKGUuZGVmYXVsdEVuY29kaW5nPT09aHIpcmV0dXJuO2Zvcihjb25zdCBlIG9mIGEpaWYoIWlzV2luTmFtZVJlY29yZChlKSlyZXR1cm47Y29uc3Qgcj1ocixpPVtdLG49ZnIoKTtmb3IoY29uc3QgZSBpbiByKXtjb25zdCB0PXJbZV07aWYoIiI9PT10KWNvbnRpbnVlO2NvbnN0IGE9blt0XTt2b2lkIDAhPT1hJiYoaVtlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpKX1pLmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZChpKX0oYSx0aGlzLmlzU3ltYm9saWNGb250LHIpfWVsc2Ugcy5uYW1lPXt0YWc6Im5hbWUiLGRhdGE6Y3JlYXRlTmFtZVRhYmxlKHRoaXMubmFtZSl9O2NvbnN0IFM9bmV3IE9wZW5UeXBlRmlsZUJ1aWxkZXIobi52ZXJzaW9uKTtmb3IoY29uc3QgZSBpbiBzKVMuYWRkVGFibGUoZSxzW2VdLmRhdGEpO3JldHVybiBTLnRvQXJyYXkoKX1jb252ZXJ0KGUsYSxyKXtyLmZpeGVkUGl0Y2g9ITE7ci5idWlsdEluRW5jb2RpbmcmJmZ1bmN0aW9uIGFkanVzdFR5cGUxVG9Vbmljb2RlKGUsdCl7aWYoZS5pc0ludGVybmFsRm9udClyZXR1cm47aWYoZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcClyZXR1cm47aWYodD09PWUuZGVmYXVsdEVuY29kaW5nKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKXJldHVybjtjb25zdCBhPVtdLHI9ZnIoKTtmb3IoY29uc3QgaSBpbiB0KXtpZihlLmhhc0VuY29kaW5nJiYoZS5iYXNlRW5jb2RpbmdOYW1lfHx2b2lkIDAhPT1lLmRpZmZlcmVuY2VzW2ldKSljb250aW51ZTtjb25zdCBuPWdldFVuaWNvZGVGb3JHbHlwaCh0W2ldLHIpOy0xIT09biYmKGFbaV09U3RyaW5nLmZyb21DaGFyQ29kZShuKSl9YS5sZW5ndGg+MCYmZS50b1VuaWNvZGUuYW1lbmQoYSl9KHIsci5idWlsdEluRW5jb2RpbmcpO2xldCBpPTE7YSBpbnN0YW5jZW9mIENGRkZvbnQmJihpPWEubnVtR2x5cGhzLTEpO2NvbnN0IG49YS5nZXRHbHlwaE1hcHBpbmcocik7bGV0IHM9bnVsbCxvPW4sYz1udWxsO2lmKCFyLmNzc0ZvbnRJbmZvKXtzPWFkanVzdE1hcHBpbmcobixhLmhhc0dseXBoSWQuYmluZChhKSxpLHRoaXMudG9Vbmljb2RlKTt0aGlzLnRvRm9udENoYXI9cy50b0ZvbnRDaGFyO289cy5jaGFyQ29kZVRvR2x5cGhJZDtjPXMudG9Vbmljb2RlRXh0cmFNYXB9Y29uc3QgbD1hLm51bUdseXBocztmdW5jdGlvbiBnZXRDaGFyQ29kZXMoZSx0KXtsZXQgYT1udWxsO2Zvcihjb25zdCByIGluIGUpdD09PWVbcl0mJihhfHw9W10pLnB1c2goMHxyKTtyZXR1cm4gYX1mdW5jdGlvbiBjcmVhdGVDaGFyQ29kZShlLHQpe2Zvcihjb25zdCBhIGluIGUpaWYodD09PWVbYV0pcmV0dXJuIDB8YTtzLmNoYXJDb2RlVG9HbHlwaElkW3MubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV09dDtyZXR1cm4gcy5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKyt9Y29uc3QgaD1hLnNlYWNzO2lmKHMmJmg/Lmxlbmd0aCl7Y29uc3QgZT1yLmZvbnRNYXRyaXh8fHQsaT1hLmdldENoYXJzZXQoKSxvPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCB0IGluIGgpe3R8PTA7Y29uc3QgYT1oW3RdLHI9bHJbYVsyXV0sYz1sclthWzNdXSxsPWkuaW5kZXhPZihyKSx1PWkuaW5kZXhPZihjKTtpZihsPDB8fHU8MCljb250aW51ZTtjb25zdCBkPXt4OmFbMF0qZVswXSthWzFdKmVbMl0rZVs0XSx5OmFbMF0qZVsxXSthWzFdKmVbM10rZVs1XX0sZj1nZXRDaGFyQ29kZXMobix0KTtpZihmKWZvcihjb25zdCBlIG9mIGYpe2NvbnN0IHQ9cy5jaGFyQ29kZVRvR2x5cGhJZCxhPWNyZWF0ZUNoYXJDb2RlKHQsbCkscj1jcmVhdGVDaGFyQ29kZSh0LHUpO29bZV09e2Jhc2VGb250Q2hhckNvZGU6YSxhY2NlbnRGb250Q2hhckNvZGU6cixhY2NlbnRPZmZzZXQ6ZH19fXIuc2VhY01hcD1vfWNvbnN0IHU9ci5mb250TWF0cml4PzEvTWF0aC5tYXgoLi4uci5mb250TWF0cml4LnNsaWNlKDAsNCkubWFwKE1hdGguYWJzKSk6MWUzLGQ9bmV3IE9wZW5UeXBlRmlsZUJ1aWxkZXIoIk9UVE8iKTtkLmFkZFRhYmxlKCJDRkYgIixhLmRhdGEpO2QuYWRkVGFibGUoIk9TLzIiLGNyZWF0ZU9TMlRhYmxlKHIsbykpO2QuYWRkVGFibGUoImNtYXAiLGNyZWF0ZUNtYXBUYWJsZShvLGMsbCkpO2QuYWRkVGFibGUoImhlYWQiLCJcMAFcMFwwXDBcMBBcMFwwXDBcMFwwXw88w7VcMFwwIitzYWZlU3RyaW5nMTYodSkrIlwwXDBcMFwwwp5cdn4nXDBcMFwwXDDCnlx2fidcMFwwIitzYWZlU3RyaW5nMTYoci5kZXNjZW50KSsiD8O/IitzYWZlU3RyaW5nMTYoci5hc2NlbnQpK3N0cmluZzE2KHIuaXRhbGljQW5nbGU/MjowKSsiXDARXDBcMFwwXDBcMFwwIik7ZC5hZGRUYWJsZSgiaGhlYSIsIlwwAVwwXDAiK3NhZmVTdHJpbmcxNihyLmFzY2VudCkrc2FmZVN0cmluZzE2KHIuZGVzY2VudCkrIlwwXDDDv8O/XDBcMFwwXDBcMFwwIitzYWZlU3RyaW5nMTYoci5jYXBIZWlnaHQpK3NhZmVTdHJpbmcxNihNYXRoLnRhbihyLml0YWxpY0FuZ2xlKSpyLnhIZWlnaHQpKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiK3N0cmluZzE2KGwpKTtkLmFkZFRhYmxlKCJobXR4IixmdW5jdGlvbiBmb250RmllbGRzSG10eCgpe2NvbnN0IGU9YS5jaGFyc3RyaW5ncyx0PWEuY2ZmP2EuY2ZmLndpZHRoczpudWxsO2xldCByPSJcMFwwXDBcMCI7Zm9yKGxldCBhPTEsaT1sO2E8aTthKyspe2xldCBpPTA7aWYoZSl7Y29uc3QgdD1lW2EtMV07aT0id2lkdGgiaW4gdD90LndpZHRoOjB9ZWxzZSB0JiYoaT1NYXRoLmNlaWwodFthXXx8MCkpO3IrPXN0cmluZzE2KGkpK3N0cmluZzE2KDApfXJldHVybiByfSgpKTtkLmFkZFRhYmxlKCJtYXhwIiwiXDBcMFBcMCIrc3RyaW5nMTYobCkpO2QuYWRkVGFibGUoIm5hbWUiLGNyZWF0ZU5hbWVUYWJsZShlKSk7ZC5hZGRUYWJsZSgicG9zdCIsY3JlYXRlUG9zdFRhYmxlKHIpKTtyZXR1cm4gZC50b0FycmF5KCl9Z2V0IF9zcGFjZVdpZHRoKCl7Y29uc3QgZT1bInNwYWNlIiwibWludXMiLCJvbmUiLCJpIiwiSSJdO2xldCB0O2Zvcihjb25zdCBhIG9mIGUpe2lmKGEgaW4gdGhpcy53aWR0aHMpe3Q9dGhpcy53aWR0aHNbYV07YnJlYWt9Y29uc3QgZT1mcigpW2FdO2xldCByPTA7aWYodGhpcy5jb21wb3NpdGUmJnRoaXMuY01hcC5jb250YWlucyhlKSl7cj10aGlzLmNNYXAubG9va3VwKGUpOyJzdHJpbmciPT10eXBlb2YgciYmKHI9Y29udmVydENpZFN0cmluZyhlLHIpKX0hciYmdGhpcy50b1VuaWNvZGUmJihyPXRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoZSkpO3I8PTAmJihyPWUpO3Q9dGhpcy53aWR0aHNbcl07aWYodClicmVha31yZXR1cm4gc2hhZG93KHRoaXMsIl9zcGFjZVdpZHRoIix0fHx0aGlzLmRlZmF1bHRXaWR0aCl9X2NoYXJUb0dseXBoKGUsdD0hMSl7bGV0IGEscixpLG49dGhpcy5fZ2x5cGhDYWNoZVtlXTtpZihuPy5pc1NwYWNlPT09dClyZXR1cm4gbjtsZXQgcz1lO2lmKHRoaXMuY01hcD8uY29udGFpbnMoZSkpe3M9dGhpcy5jTWFwLmxvb2t1cChlKTsic3RyaW5nIj09dHlwZW9mIHMmJihzPWNvbnZlcnRDaWRTdHJpbmcoZSxzKSl9cj10aGlzLndpZHRoc1tzXTsibnVtYmVyIiE9dHlwZW9mIHImJihyPXRoaXMuZGVmYXVsdFdpZHRoKTtjb25zdCBvPXRoaXMudm1ldHJpY3M/LltzXTtsZXQgYz10aGlzLnRvVW5pY29kZS5nZXQoZSl8fGU7Im51bWJlciI9PXR5cGVvZiBjJiYoYz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtsZXQgbD12b2lkIDAhPT10aGlzLnRvRm9udENoYXJbZV07YT10aGlzLnRvRm9udENoYXJbZV18fGU7aWYodGhpcy5taXNzaW5nRmlsZSl7Y29uc3QgdD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTtpZigoIi5ub3RkZWYiPT09dHx8IiI9PT10KSYmIlR5cGUxIj09PXRoaXMudHlwZSl7YT0zMjtpZigiIj09PXQpe3J8fD10aGlzLl9zcGFjZVdpZHRoO2M9U3RyaW5nLmZyb21DaGFyQ29kZShhKX19YT1mdW5jdGlvbiBtYXBTcGVjaWFsVW5pY29kZVZhbHVlcyhlKXtyZXR1cm4gZT49NjU1MjAmJmU8PTY1NTM1PzA6ZT49NjI5NzYmJmU8PTYzNzQzP3ByKClbZV18fGU6MTczPT09ZT80NTplfShhKX10aGlzLmlzVHlwZTNGb250JiYoaT1hKTtsZXQgaD1udWxsO2lmKHRoaXMuc2VhY01hcD8uW2VdKXtsPSEwO2NvbnN0IHQ9dGhpcy5zZWFjTWFwW2VdO2E9dC5iYXNlRm9udENoYXJDb2RlO2g9e2ZvbnRDaGFyOlN0cmluZy5mcm9tQ29kZVBvaW50KHQuYWNjZW50Rm9udENoYXJDb2RlKSxvZmZzZXQ6dC5hY2NlbnRPZmZzZXR9fWxldCB1PSIiOyJudW1iZXIiPT10eXBlb2YgYSYmKGE8PTExMTQxMTE/dT1TdHJpbmcuZnJvbUNvZGVQb2ludChhKTp3YXJuKGBjaGFyVG9HbHlwaCAtIGludmFsaWQgZm9udENoYXJDb2RlOiAke2F9YCkpO2lmKHRoaXMubWlzc2luZ0ZpbGUmJnRoaXMudmVydGljYWwmJjE9PT11Lmxlbmd0aCl7Y29uc3QgZT12cigpW3UuY2hhckNvZGVBdCgwKV07ZSYmKHU9Yz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1uPW5ldyBmb250c19HbHlwaChlLHUsYyxoLHIsbyxpLHQsbCk7cmV0dXJuIHRoaXMuX2dseXBoQ2FjaGVbZV09bn1jaGFyc1RvR2x5cGhzKGUpe2xldCB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDt0PVtdO2lmKHRoaXMuY01hcCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9ZS5sZW5ndGg7bGV0IGk9MDtmb3IoO2k8cjspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxpLGEpO2NvbnN0e2NoYXJjb2RlOnIsbGVuZ3RoOm59PWE7aSs9bjtjb25zdCBzPXRoaXMuX2NoYXJUb0dseXBoKHIsMT09PW4mJjMyPT09ZS5jaGFyQ29kZUF0KGktMSkpO3QucHVzaChzKX19ZWxzZSBmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjsrK2Epe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGEpLGk9dGhpcy5fY2hhclRvR2x5cGgociwzMj09PXIpO3QucHVzaChpKX1yZXR1cm4gdGhpcy5fY2hhcnNDYWNoZVtlXT10fWdldENoYXJQb3NpdGlvbnMoZSl7Y29uc3QgdD1bXTtpZih0aGlzLmNNYXApe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgcj0wO2Zvcig7cjxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxyLGEpO2NvbnN0IGk9YS5sZW5ndGg7dC5wdXNoKFtyLHIraV0pO3IrPWl9fWVsc2UgZm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7KythKXQucHVzaChbYSxhKzFdKTtyZXR1cm4gdH1nZXQgZ2x5cGhDYWNoZVZhbHVlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfWVuY29kZVN0cmluZyhlKXtjb25zdCB0PVtdLGE9W10saGFzQ3VycmVudEJ1ZkVycm9ycz0oKT0+dC5sZW5ndGglMj09MSxyPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXA/ZT0+dGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihlKTplPT50aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKFN0cmluZy5mcm9tQ29kZVBvaW50KGUpKTtmb3IobGV0IGk9MCxuPWUubGVuZ3RoO2k8bjtpKyspe2NvbnN0IG49ZS5jb2RlUG9pbnRBdChpKTtuPjU1Mjk1JiYobjw1NzM0NHx8bj42NTUzMykmJmkrKztpZih0aGlzLnRvVW5pY29kZSl7Y29uc3QgZT1yKG4pO2lmKC0xIT09ZSl7aWYoaGFzQ3VycmVudEJ1ZkVycm9ycygpKXt0LnB1c2goYS5qb2luKCIiKSk7YS5sZW5ndGg9MH1mb3IobGV0IHQ9KHRoaXMuY01hcD90aGlzLmNNYXAuZ2V0Q2hhckNvZGVMZW5ndGgoZSk6MSktMTt0Pj0wO3QtLSlhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlPj44KnQmMjU1KSk7Y29udGludWV9fWlmKCFoYXNDdXJyZW50QnVmRXJyb3JzKCkpe3QucHVzaChhLmpvaW4oIiIpKTthLmxlbmd0aD0wfWEucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChuKSl9dC5wdXNoKGEuam9pbigiIikpO3JldHVybiB0fX1jbGFzcyBFcnJvckZvbnR7Y29uc3RydWN0b3IoZSl7dGhpcy5lcnJvcj1lO3RoaXMubG9hZGVkTmFtZT0iZ19mb250X2Vycm9yIjt0aGlzLm1pc3NpbmdGaWxlPSEwfWNoYXJzVG9HbHlwaHMoKXtyZXR1cm5bXX1lbmNvZGVTdHJpbmcoZSl7cmV0dXJuW2VdfWV4cG9ydERhdGEoKXtyZXR1cm57ZXJyb3I6dGhpcy5lcnJvcn19fWNsYXNzIENzc0ZvbnRJbmZveyNFOyNIOyNXO3N0YXRpYyBzdHJpbmdzPVsiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJpdGFsaWNBbmdsZSJdO3N0YXRpYyB3cml0ZShlKXtjb25zdCB0PW5ldyBUZXh0RW5jb2RlcixhPXt9O2xldCByPTA7Zm9yKGNvbnN0IGkgb2YgQ3NzRm9udEluZm8uc3RyaW5ncyl7Y29uc3Qgbj10LmVuY29kZShlW2ldKTthW2ldPW47cis9NCtuLmxlbmd0aH1jb25zdCBpPW5ldyBBcnJheUJ1ZmZlcihyKSxuPW5ldyBVaW50OEFycmF5KGkpLHM9bmV3IERhdGFWaWV3KGkpO2xldCBvPTA7Zm9yKGNvbnN0IGUgb2YgQ3NzRm9udEluZm8uc3RyaW5ncyl7Y29uc3QgdD1hW2VdLHI9dC5sZW5ndGg7cy5zZXRVaW50MzIobyxyKTtuLnNldCh0LG8rNCk7bys9NCtyfWFzc2VydChvPT09aS5ieXRlTGVuZ3RoLCJDc3NGb250SW5mby53cml0ZTogQnVmZmVyIG92ZXJmbG93Iik7cmV0dXJuIGl9Y29uc3RydWN0b3IoZSl7dGhpcy4jRT1lO3RoaXMuI0g9bmV3IERhdGFWaWV3KHRoaXMuI0UpO3RoaXMuI1c9bmV3IFRleHREZWNvZGVyfSNHKGUpe2Fzc2VydChlPENzc0ZvbnRJbmZvLnN0cmluZ3MubGVuZ3RoLCJJbnZhbGlkIHN0cmluZyBpbmRleCIpO2xldCB0PTA7Zm9yKGxldCBhPTA7YTxlO2ErKyl0Kz10aGlzLiNILmdldFVpbnQzMih0KSs0O2NvbnN0IGE9dGhpcy4jSC5nZXRVaW50MzIodCk7cmV0dXJuIHRoaXMuI1cuZGVjb2RlKG5ldyBVaW50OEFycmF5KHRoaXMuI0UsdCs0LGEpKX1nZXQgZm9udEZhbWlseSgpe3JldHVybiB0aGlzLiNHKDApfWdldCBmb250V2VpZ2h0KCl7cmV0dXJuIHRoaXMuI0coMSl9Z2V0IGl0YWxpY0FuZ2xlKCl7cmV0dXJuIHRoaXMuI0coMil9fWNsYXNzIFN5c3RlbUZvbnRJbmZveyNFOyNIOyNXO3N0YXRpYyBzdHJpbmdzPVsiY3NzIiwibG9hZGVkTmFtZSIsImJhc2VGb250TmFtZSIsInNyYyJdO3N0YXRpYyB3cml0ZShlKXtjb25zdCB0PW5ldyBUZXh0RW5jb2RlcixhPXt9O2xldCByPTA7Zm9yKGNvbnN0IGkgb2YgU3lzdGVtRm9udEluZm8uc3RyaW5ncyl7Y29uc3Qgbj10LmVuY29kZShlW2ldKTthW2ldPW47cis9NCtuLmxlbmd0aH1yKz00O2xldCBpLG4scz0xK3I7aWYoZS5zdHlsZSl7aT10LmVuY29kZShlLnN0eWxlLnN0eWxlKTtuPXQuZW5jb2RlKGUuc3R5bGUud2VpZ2h0KTtzKz00K2kubGVuZ3RoKzQrbi5sZW5ndGh9Y29uc3Qgbz1uZXcgQXJyYXlCdWZmZXIocyksYz1uZXcgVWludDhBcnJheShvKSxsPW5ldyBEYXRhVmlldyhvKTtsZXQgaD0wO2wuc2V0VWludDgoaCsrLGUuZ3Vlc3NGYWxsYmFjaz8xOjApO2wuc2V0VWludDMyKGgsMCk7aCs9NDtyPTA7Zm9yKGNvbnN0IGUgb2YgU3lzdGVtRm9udEluZm8uc3RyaW5ncyl7Y29uc3QgdD1hW2VdLGk9dC5sZW5ndGg7cis9NCtpO2wuc2V0VWludDMyKGgsaSk7Yy5zZXQodCxoKzQpO2grPTQraX1sLnNldFVpbnQzMihoLXItNCxyKTtpZihlLnN0eWxlKXtsLnNldFVpbnQzMihoLGkubGVuZ3RoKTtjLnNldChpLGgrNCk7aCs9NCtpLmxlbmd0aDtsLnNldFVpbnQzMihoLG4ubGVuZ3RoKTtjLnNldChuLGgrNCk7aCs9NCtuLmxlbmd0aH1hc3NlcnQoaDw9by5ieXRlTGVuZ3RoLCJTdWJzdGl0aW9uSW5mby53cml0ZTogQnVmZmVyIG92ZXJmbG93Iik7cmV0dXJuIG8udHJhbnNmZXJUb0ZpeGVkTGVuZ3RoKGgpfWNvbnN0cnVjdG9yKGUpe3RoaXMuI0U9ZTt0aGlzLiNIPW5ldyBEYXRhVmlldyh0aGlzLiNFKTt0aGlzLiNXPW5ldyBUZXh0RGVjb2Rlcn1nZXQgZ3Vlc3NGYWxsYmFjaygpe3JldHVybiAwIT09dGhpcy4jSC5nZXRVaW50OCgwKX0jRyhlKXthc3NlcnQoZTxTeXN0ZW1Gb250SW5mby5zdHJpbmdzLmxlbmd0aCwiSW52YWxpZCBzdHJpbmcgaW5kZXgiKTtsZXQgdD01O2ZvcihsZXQgYT0wO2E8ZTthKyspdCs9dGhpcy4jSC5nZXRVaW50MzIodCkrNDtjb25zdCBhPXRoaXMuI0guZ2V0VWludDMyKHQpO3JldHVybiB0aGlzLiNXLmRlY29kZShuZXcgVWludDhBcnJheSh0aGlzLiNFLHQrNCxhKSl9Z2V0IGNzcygpe3JldHVybiB0aGlzLiNHKDApfWdldCBsb2FkZWROYW1lKCl7cmV0dXJuIHRoaXMuI0coMSl9Z2V0IGJhc2VGb250TmFtZSgpe3JldHVybiB0aGlzLiNHKDIpfWdldCBzcmMoKXtyZXR1cm4gdGhpcy4jRygzKX1nZXQgc3R5bGUoKXtsZXQgZT0xO2UrPTQrdGhpcy4jSC5nZXRVaW50MzIoZSk7Y29uc3QgdD10aGlzLiNILmdldFVpbnQzMihlKSxhPXRoaXMuI1cuZGVjb2RlKG5ldyBVaW50OEFycmF5KHRoaXMuI0UsZSs0LHQpKTtlKz00K3Q7Y29uc3Qgcj10aGlzLiNILmdldFVpbnQzMihlKTtyZXR1cm57c3R5bGU6YSx3ZWlnaHQ6dGhpcy4jVy5kZWNvZGUobmV3IFVpbnQ4QXJyYXkodGhpcy4jRSxlKzQscikpfX19Y2xhc3MgRm9udEluZm97c3RhdGljIGJvb2xzPVsiYmxhY2siLCJib2xkIiwiZGlzYWJsZUZvbnRGYWNlIiwiZm9udEV4dHJhUHJvcGVydGllcyIsImlzSW52YWxpZFBERmpzRm9udCIsImlzVHlwZTNGb250IiwiaXRhbGljIiwibWlzc2luZ0ZpbGUiLCJyZW1lYXN1cmUiLCJ2ZXJ0aWNhbCJdO3N0YXRpYyBudW1iZXJzPVsiYXNjZW50IiwiZGVmYXVsdFdpZHRoIiwiZGVzY2VudCJdO3N0YXRpYyBzdHJpbmdzPVsiZmFsbGJhY2tOYW1lIiwibG9hZGVkTmFtZSIsIm1pbWV0eXBlIiwibmFtZSJdO3N0YXRpYyN6PU1hdGguY2VpbCgyKnRoaXMuYm9vbHMubGVuZ3RoLzgpO3N0YXRpYyMkPXRoaXMuI3orOCp0aGlzLm51bWJlcnMubGVuZ3RoO3N0YXRpYyNWPXRoaXMuIyQrMSs4O3N0YXRpYyNLPXRoaXMuI1YrMSs0ODtzdGF0aWMjSj10aGlzLiNLKzErNjsjRTsjVzsjSDtjb25zdHJ1Y3Rvcih7ZGF0YTplLGV4dHJhOnR9KXt0aGlzLiNFPWU7dGhpcy4jVz1uZXcgVGV4dERlY29kZXI7dGhpcy4jSD1uZXcgRGF0YVZpZXcodGhpcy4jRSk7dCYmT2JqZWN0LmFzc2lnbih0aGlzLHQpfSNZKGUpe2Fzc2VydChlPEZvbnRJbmZvLmJvb2xzLmxlbmd0aCwiSW52YWxpZCBib29sZWFuIGluZGV4Iik7Y29uc3QgdD1NYXRoLmZsb29yKGUvNCksYT0yKmUlOCxyPXRoaXMuI0guZ2V0VWludDgodCk+PmEmMztyZXR1cm4gMD09PXI/dm9pZCAwOjI9PT1yfWdldCBibGFjaygpe3JldHVybiB0aGlzLiNZKDApfWdldCBib2xkKCl7cmV0dXJuIHRoaXMuI1koMSl9Z2V0IGRpc2FibGVGb250RmFjZSgpe3JldHVybiB0aGlzLiNZKDIpfWdldCBmb250RXh0cmFQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuI1koMyl9Z2V0IGlzSW52YWxpZFBERmpzRm9udCgpe3JldHVybiB0aGlzLiNZKDQpfWdldCBpc1R5cGUzRm9udCgpe3JldHVybiB0aGlzLiNZKDUpfWdldCBpdGFsaWMoKXtyZXR1cm4gdGhpcy4jWSg2KX1nZXQgbWlzc2luZ0ZpbGUoKXtyZXR1cm4gdGhpcy4jWSg3KX1nZXQgcmVtZWFzdXJlKCl7cmV0dXJuIHRoaXMuI1koOCl9Z2V0IHZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuI1koOSl9I1ooZSl7YXNzZXJ0KGU8Rm9udEluZm8ubnVtYmVycy5sZW5ndGgsIkludmFsaWQgbnVtYmVyIGluZGV4Iik7cmV0dXJuIHRoaXMuI0guZ2V0RmxvYXQ2NChGb250SW5mby4jeis4KmUpfWdldCBhc2NlbnQoKXtyZXR1cm4gdGhpcy4jWigwKX1nZXQgZGVmYXVsdFdpZHRoKCl7cmV0dXJuIHRoaXMuI1ooMSl9Z2V0IGRlc2NlbnQoKXtyZXR1cm4gdGhpcy4jWigyKX1nZXQgYmJveCgpe2xldCBlPUZvbnRJbmZvLiMkO2lmKDA9PT10aGlzLiNILmdldFVpbnQ4KGUpKXJldHVybjtlKz0xO2NvbnN0IHQ9W107Zm9yKGxldCBhPTA7YTw0O2ErKyl7dC5wdXNoKHRoaXMuI0guZ2V0SW50MTYoZSwhMCkpO2UrPTJ9cmV0dXJuIHR9Z2V0IGZvbnRNYXRyaXgoKXtsZXQgZT1Gb250SW5mby4jVjtpZigwPT09dGhpcy4jSC5nZXRVaW50OChlKSlyZXR1cm47ZSs9MTtjb25zdCB0PVtdO2ZvcihsZXQgYT0wO2E8NjthKyspe3QucHVzaCh0aGlzLiNILmdldEZsb2F0NjQoZSwhMCkpO2UrPTh9cmV0dXJuIHR9Z2V0IGRlZmF1bHRWTWV0cmljcygpe2xldCBlPUZvbnRJbmZvLiNLO2lmKDA9PT10aGlzLiNILmdldFVpbnQ4KGUpKXJldHVybjtlKz0xO2NvbnN0IHQ9W107Zm9yKGxldCBhPTA7YTwzO2ErKyl7dC5wdXNoKHRoaXMuI0guZ2V0SW50MTYoZSwhMCkpO2UrPTJ9cmV0dXJuIHR9I0coZSl7YXNzZXJ0KGU8Rm9udEluZm8uc3RyaW5ncy5sZW5ndGgsIkludmFsaWQgc3RyaW5nIGluZGV4Iik7bGV0IHQ9Rm9udEluZm8uI0orNDtmb3IobGV0IGE9MDthPGU7YSsrKXQrPXRoaXMuI0guZ2V0VWludDMyKHQpKzQ7Y29uc3QgYT10aGlzLiNILmdldFVpbnQzMih0KSxyPW5ldyBVaW50OEFycmF5KGEpO3Iuc2V0KG5ldyBVaW50OEFycmF5KHRoaXMuI0UsdCs0LGEpKTtyZXR1cm4gdGhpcy4jVy5kZWNvZGUocil9Z2V0IGZhbGxiYWNrTmFtZSgpe3JldHVybiB0aGlzLiNHKDApfWdldCBsb2FkZWROYW1lKCl7cmV0dXJuIHRoaXMuI0coMSl9Z2V0IG1pbWV0eXBlKCl7cmV0dXJuIHRoaXMuI0coMil9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy4jRygzKX1nZXQgZGF0YSgpe2xldCBlPUZvbnRJbmZvLiNKO2UrPTQrdGhpcy4jSC5nZXRVaW50MzIoZSk7ZSs9NCt0aGlzLiNILmdldFVpbnQzMihlKTtlKz00K3RoaXMuI0guZ2V0VWludDMyKGUpO2NvbnN0IHQ9dGhpcy4jSC5nZXRVaW50MzIoZSk7aWYoMCE9PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KHRoaXMuI0UsZSs0LHQpfWNsZWFyRGF0YSgpe2xldCBlPUZvbnRJbmZvLiNKO2UrPTQrdGhpcy4jSC5nZXRVaW50MzIoZSk7ZSs9NCt0aGlzLiNILmdldFVpbnQzMihlKTtlKz00K3RoaXMuI0guZ2V0VWludDMyKGUpO2NvbnN0IHQ9dGhpcy4jSC5nZXRVaW50MzIoZSk7bmV3IFVpbnQ4QXJyYXkodGhpcy4jRSxlKzQsdCkuZmlsbCgwKTt0aGlzLiNILnNldFVpbnQzMihlLDApfWdldCBjc3NGb250SW5mbygpe2xldCBlPUZvbnRJbmZvLiNKO2UrPTQrdGhpcy4jSC5nZXRVaW50MzIoZSk7ZSs9NCt0aGlzLiNILmdldFVpbnQzMihlKTtjb25zdCB0PXRoaXMuI0guZ2V0VWludDMyKGUpO2lmKDA9PT10KXJldHVybiBudWxsO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkodCk7YS5zZXQobmV3IFVpbnQ4QXJyYXkodGhpcy4jRSxlKzQsdCkpO3JldHVybiBuZXcgQ3NzRm9udEluZm8oYS5idWZmZXIpfWdldCBzeXN0ZW1Gb250SW5mbygpe2xldCBlPUZvbnRJbmZvLiNKO2UrPTQrdGhpcy4jSC5nZXRVaW50MzIoZSk7Y29uc3QgdD10aGlzLiNILmdldFVpbnQzMihlKTtpZigwPT09dClyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyBVaW50OEFycmF5KHQpO2Euc2V0KG5ldyBVaW50OEFycmF5KHRoaXMuI0UsZSs0LHQpKTtyZXR1cm4gbmV3IFN5c3RlbUZvbnRJbmZvKGEuYnVmZmVyKX1zdGF0aWMgd3JpdGUoZSl7Y29uc3QgdD1lLnN5c3RlbUZvbnRJbmZvP1N5c3RlbUZvbnRJbmZvLndyaXRlKGUuc3lzdGVtRm9udEluZm8pOm51bGwsYT1lLmNzc0ZvbnRJbmZvP0Nzc0ZvbnRJbmZvLndyaXRlKGUuY3NzRm9udEluZm8pOm51bGwscj1uZXcgVGV4dEVuY29kZXIsaT17fTtsZXQgbj0wO2Zvcihjb25zdCB0IG9mIEZvbnRJbmZvLnN0cmluZ3Mpe2lbdF09ci5lbmNvZGUoZVt0XSk7bis9NCtpW3RdLmxlbmd0aH1jb25zdCBzPUZvbnRJbmZvLiNKKzQrbis0Kyh0P3QuYnl0ZUxlbmd0aDowKSs0KyhhP2EuYnl0ZUxlbmd0aDowKSs0KyhlLmRhdGE/ZS5kYXRhLmxlbmd0aDowKSxvPW5ldyBBcnJheUJ1ZmZlcihzKSxjPW5ldyBVaW50OEFycmF5KG8pLGw9bmV3IERhdGFWaWV3KG8pO2xldCBoPTA7Y29uc3QgdT1Gb250SW5mby5ib29scy5sZW5ndGg7bGV0IGQ9MCxmPTA7Zm9yKGxldCB0PTA7dDx1O3QrKyl7Y29uc3QgYT1lW0ZvbnRJbmZvLmJvb2xzW3RdXTtkfD0odm9pZCAwPT09YT8wOmE/MjoxKTw8ZjtmKz0yO2lmKDg9PT1mfHx0PT09dS0xKXtsLnNldFVpbnQ4KGgrKyxkKTtkPTA7Zj0wfX1hc3NlcnQoaD09PUZvbnRJbmZvLiN6LCJGb250SW5mby53cml0ZTogQm9vbGVhbiBwcm9wZXJ0aWVzIG9mZnNldCBtaXNtYXRjaCIpO2Zvcihjb25zdCB0IG9mIEZvbnRJbmZvLm51bWJlcnMpe2wuc2V0RmxvYXQ2NChoLGVbdF0pO2grPTh9YXNzZXJ0KGg9PT1Gb250SW5mby4jJCwiRm9udEluZm8ud3JpdGU6IE51bWJlciBwcm9wZXJ0aWVzIG9mZnNldCBtaXNtYXRjaCIpO2lmKGUuYmJveCl7bC5zZXRVaW50OChoKyssNCk7Zm9yKGNvbnN0IHQgb2YgZS5iYm94KXtsLnNldEludDE2KGgsdCwhMCk7aCs9Mn19ZWxzZXtsLnNldFVpbnQ4KGgrKywwKTtoKz04fWFzc2VydChoPT09Rm9udEluZm8uI1YsIkZvbnRJbmZvLndyaXRlOiBCQm94IHByb3BlcnRpZXMgb2Zmc2V0IG1pc21hdGNoIik7aWYoZS5mb250TWF0cml4KXtsLnNldFVpbnQ4KGgrKyw2KTtmb3IoY29uc3QgdCBvZiBlLmZvbnRNYXRyaXgpe2wuc2V0RmxvYXQ2NChoLHQsITApO2grPTh9fWVsc2V7bC5zZXRVaW50OChoKyssMCk7aCs9NDh9YXNzZXJ0KGg9PT1Gb250SW5mby4jSywiRm9udEluZm8ud3JpdGU6IEZvbnRNYXRyaXggcHJvcGVydGllcyBvZmZzZXQgbWlzbWF0Y2giKTtpZihlLmRlZmF1bHRWTWV0cmljcyl7bC5zZXRVaW50OChoKyssMSk7Zm9yKGNvbnN0IHQgb2YgZS5kZWZhdWx0Vk1ldHJpY3Mpe2wuc2V0SW50MTYoaCx0LCEwKTtoKz0yfX1lbHNle2wuc2V0VWludDgoaCsrLDApO2grPTZ9YXNzZXJ0KGg9PT1Gb250SW5mby4jSiwiRm9udEluZm8ud3JpdGU6IERlZmF1bHRWTWV0cmljcyBwcm9wZXJ0aWVzIG9mZnNldCBtaXNtYXRjaCIpO2wuc2V0VWludDMyKEZvbnRJbmZvLiNKLDApO2grPTQ7Zm9yKGNvbnN0IGUgb2YgRm9udEluZm8uc3RyaW5ncyl7Y29uc3QgdD1pW2VdLGE9dC5sZW5ndGg7bC5zZXRVaW50MzIoaCxhKTtjLnNldCh0LGgrNCk7aCs9NCthfWwuc2V0VWludDMyKEZvbnRJbmZvLiNKLGgtRm9udEluZm8uI0otNCk7aWYodCl7Y29uc3QgZT10LmJ5dGVMZW5ndGg7bC5zZXRVaW50MzIoaCxlKTthc3NlcnQoaCs0K2U8PW8uYnl0ZUxlbmd0aCwiRm9udEluZm8ud3JpdGU6IEJ1ZmZlciBvdmVyZmxvdyBhdCBzeXN0ZW1Gb250SW5mbyIpO2Muc2V0KG5ldyBVaW50OEFycmF5KHQpLGgrNCk7aCs9NCtlfWVsc2V7bC5zZXRVaW50MzIoaCwwKTtoKz00fWlmKGEpe2NvbnN0IGU9YS5ieXRlTGVuZ3RoO2wuc2V0VWludDMyKGgsZSk7YXNzZXJ0KGgrNCtlPD1vLmJ5dGVMZW5ndGgsIkZvbnRJbmZvLndyaXRlOiBCdWZmZXIgb3ZlcmZsb3cgYXQgY3NzRm9udEluZm8iKTtjLnNldChuZXcgVWludDhBcnJheShhKSxoKzQpO2grPTQrZX1lbHNle2wuc2V0VWludDMyKGgsMCk7aCs9NH1pZih2b2lkIDA9PT1lLmRhdGEpe2wuc2V0VWludDMyKGgsMCk7aCs9NH1lbHNle2wuc2V0VWludDMyKGgsZS5kYXRhLmxlbmd0aCk7Yy5zZXQoZS5kYXRhLGgrNCk7aCs9NCtlLmRhdGEubGVuZ3RofWFzc2VydChoPD1vLmJ5dGVMZW5ndGgsIkZvbnRJbmZvLndyaXRlOiBCdWZmZXIgb3ZlcmZsb3ciKTtyZXR1cm4gby50cmFuc2ZlclRvRml4ZWRMZW5ndGgoaCl9fWNsYXNzIFBhdHRlcm5JbmZve3N0YXRpYyNRPTA7c3RhdGljI2VlPTE7c3RhdGljI3RlPTI7c3RhdGljI2FlPTM7c3RhdGljI3JlPTQ7c3RhdGljI2llPTg7c3RhdGljI25lPTEyO3N0YXRpYyNzZT0xNjtjb25zdHJ1Y3RvcihlKXt0aGlzLmJ1ZmZlcj1lO3RoaXMudmlldz1uZXcgRGF0YVZpZXcoZSk7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KGUpfXN0YXRpYyB3cml0ZShlKXtsZXQgdCxhPW51bGwscj1bXSxpPVtdLG49W10scz1bXSxvPW51bGwsYz1udWxsO3N3aXRjaChlWzBdKXtjYXNlIlJhZGlhbEF4aWFsIjp0PSJheGlhbCI9PT1lWzFdPzE6MjthPWVbMl07bj1lWzNdOzE9PT10P3IucHVzaCguLi5lWzRdLC4uLmVbNV0pOnIucHVzaChlWzRdWzBdLGVbNF1bMV0sZVs2XSxlWzVdWzBdLGVbNV1bMV0sZVs3XSk7YnJlYWs7Y2FzZSJNZXNoIjp0PTM7bz1lWzFdO3I9ZVsyXTtpPWVbM107cz1lWzRdfHxbXTthPWVbNl07Yz1lWzddO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBwYXR0ZXJuIHR5cGU6ICR7ZVswXX1gKX1jb25zdCBsPU1hdGguZmxvb3Ioci5sZW5ndGgvMiksaD1NYXRoLmZsb29yKGkubGVuZ3RoLzMpLHU9bi5sZW5ndGgsZD1zLmxlbmd0aDtsZXQgZj0wO2Zvcihjb25zdCBlIG9mIHMpe2YrPTE7Zj00Kk1hdGguY2VpbChmLzQpO2YrPTQrNCplLmNvb3Jkcy5sZW5ndGg7Zis9NCs0KmUuY29sb3JzLmxlbmd0aDt2b2lkIDAhPT1lLnZlcnRpY2VzUGVyUm93JiYoZis9NCl9Y29uc3QgZz1uZXcgQXJyYXlCdWZmZXIoMjArOCpsKzMqaCs4KnUrKGE/MTY6MCkrKGM/MzowKStmKSxwPW5ldyBEYXRhVmlldyhnKSxtPW5ldyBVaW50OEFycmF5KGcpO3Auc2V0VWludDgoUGF0dGVybkluZm8uI1EsdCk7cC5zZXRVaW50OChQYXR0ZXJuSW5mby4jZWUsYT8xOjApO3Auc2V0VWludDgoUGF0dGVybkluZm8uI3RlLGM/MTowKTtwLnNldFVpbnQ4KFBhdHRlcm5JbmZvLiNhZSxvKTtwLnNldFVpbnQzMihQYXR0ZXJuSW5mby4jcmUsbCwhMCk7cC5zZXRVaW50MzIoUGF0dGVybkluZm8uI2llLGgsITApO3Auc2V0VWludDMyKFBhdHRlcm5JbmZvLiNuZSx1LCEwKTtwLnNldFVpbnQzMihQYXR0ZXJuSW5mby4jc2UsZCwhMCk7bGV0IGI9MjA7bmV3IEZsb2F0MzJBcnJheShnLGIsMipsKS5zZXQocik7Yis9OCpsO20uc2V0KGksYik7Yis9MypoO2Zvcihjb25zdFtlLHRdb2Ygbil7cC5zZXRGbG9hdDMyKGIsZSwhMCk7Yis9NDtwLnNldFVpbnQzMihiLHBhcnNlSW50KHQuc2xpY2UoMSksMTYpLCEwKTtiKz00fWlmKGEpZm9yKGNvbnN0IGUgb2YgYSl7cC5zZXRGbG9hdDMyKGIsZSwhMCk7Yis9NH1pZihjKXttLnNldChjLGIpO2IrPTN9Zm9yKGxldCBlPTA7ZTxzLmxlbmd0aDtlKyspe2NvbnN0IHQ9c1tlXTtwLnNldFVpbnQ4KGIsdC50eXBlKTtiKz0xO2I9NCpNYXRoLmNlaWwoYi80KTtwLnNldFVpbnQzMihiLHQuY29vcmRzLmxlbmd0aCwhMCk7Yis9NDtuZXcgSW50MzJBcnJheShnLGIsdC5jb29yZHMubGVuZ3RoKS5zZXQodC5jb29yZHMpO2IrPTQqdC5jb29yZHMubGVuZ3RoO3Auc2V0VWludDMyKGIsdC5jb2xvcnMubGVuZ3RoLCEwKTtiKz00O25ldyBJbnQzMkFycmF5KGcsYix0LmNvbG9ycy5sZW5ndGgpLnNldCh0LmNvbG9ycyk7Yis9NCp0LmNvbG9ycy5sZW5ndGg7aWYodm9pZCAwIT09dC52ZXJ0aWNlc1BlclJvdyl7cC5zZXRVaW50MzIoYix0LnZlcnRpY2VzUGVyUm93LCEwKTtiKz00fX1yZXR1cm4gZ31nZXRJUigpe2NvbnN0IGU9dGhpcy52aWV3LHQ9dGhpcy5kYXRhW1BhdHRlcm5JbmZvLiNRXSxhPSEhdGhpcy5kYXRhW1BhdHRlcm5JbmZvLiNlZV0scj0hIXRoaXMuZGF0YVtQYXR0ZXJuSW5mby4jdGVdLGk9ZS5nZXRVaW50MzIoUGF0dGVybkluZm8uI3JlLCEwKSxuPWUuZ2V0VWludDMyKFBhdHRlcm5JbmZvLiNpZSwhMCkscz1lLmdldFVpbnQzMihQYXR0ZXJuSW5mby4jbmUsITApLG89ZS5nZXRVaW50MzIoUGF0dGVybkluZm8uI3NlLCEwKTtsZXQgYz0yMDtjb25zdCBsPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5idWZmZXIsYywyKmkpO2MrPTgqaTtjb25zdCBoPW5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLGMsMypuKTtjKz0zKm47Y29uc3QgdT1bXTtmb3IobGV0IHQ9MDt0PHM7Kyt0KXtjb25zdCB0PWUuZ2V0RmxvYXQzMihjLCEwKTtjKz00O2NvbnN0IGE9ZS5nZXRVaW50MzIoYywhMCk7Yys9NDt1LnB1c2goW3QsYCMke2EudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDYsIjAiKX1gXSl9bGV0IGQ9bnVsbDtpZihhKXtkPVtdO2ZvcihsZXQgdD0wO3Q8NDsrK3Qpe2QucHVzaChlLmdldEZsb2F0MzIoYywhMCkpO2MrPTR9fWxldCBmPW51bGw7aWYocil7Zj1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixjLDMpO2MrPTN9Y29uc3QgZz1bXTtmb3IobGV0IHQ9MDt0PG87Kyt0KXtjb25zdCB0PWUuZ2V0VWludDgoYyk7Yys9MTtjPTQqTWF0aC5jZWlsKGMvNCk7Y29uc3QgYT1lLmdldFVpbnQzMihjLCEwKTtjKz00O2NvbnN0IHI9bmV3IEludDMyQXJyYXkodGhpcy5idWZmZXIsYyxhKTtjKz00KmE7Y29uc3QgaT1lLmdldFVpbnQzMihjLCEwKTtjKz00O2NvbnN0IG49bmV3IEludDMyQXJyYXkodGhpcy5idWZmZXIsYyxpKTtjKz00Kmk7Y29uc3Qgcz17dHlwZTp0LGNvb3JkczpyLGNvbG9yczpufTtpZih0PT09Uyl7cy52ZXJ0aWNlc1BlclJvdz1lLmdldFVpbnQzMihjLCEwKTtjKz00fWcucHVzaChzKX1pZigxPT09dClyZXR1cm5bIlJhZGlhbEF4aWFsIiwiYXhpYWwiLGQsdSxBcnJheS5mcm9tKGwuc2xpY2UoMCwyKSksQXJyYXkuZnJvbShsLnNsaWNlKDIsNCkpLG51bGwsbnVsbF07aWYoMj09PXQpcmV0dXJuWyJSYWRpYWxBeGlhbCIsInJhZGlhbCIsZCx1LFtsWzBdLGxbMV1dLFtsWzNdLGxbNF1dLGxbMl0sbFs1XV07aWYoMz09PXQpe2NvbnN0IGU9dGhpcy5kYXRhW1BhdHRlcm5JbmZvLiNhZV07bGV0IHQ9bnVsbDtpZihsLmxlbmd0aD4wKXtsZXQgZT1sWzBdLGE9bFswXSxyPWxbMV0saT1sWzFdO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCs9Mil7Y29uc3Qgbj1sW3RdLHM9bFt0KzFdO2U9ZT5uP246ZTtyPXI+cz9zOnI7YT1hPG4/bjphO2k9aTxzP3M6aX10PVtlLHIsYSxpXX1yZXR1cm5bIk1lc2giLGUsbCxoLGcsdCxkLGZdfXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGF0dGVybiBraW5kOiAke3R9YCl9fWNvbnN0IGNpPTIsbGk9MyxoaT00LHVpPTUsZGk9NixmaT03O2NsYXNzIFBhdHRlcm57Y29uc3RydWN0b3IoKXt1bnJlYWNoYWJsZSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKX1zdGF0aWMgcGFyc2VTaGFkaW5nKGUsdCxhLHIsaSxuKXtjb25zdCBzPWUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtP2UuZGljdDplLG89cy5nZXQoIlNoYWRpbmdUeXBlIik7dHJ5e3N3aXRjaChvKXtjYXNlIGNpOmNhc2UgbGk6cmV0dXJuIG5ldyBSYWRpYWxBeGlhbFNoYWRpbmcocyx0LGEscixpLG4pO2Nhc2UgaGk6Y2FzZSB1aTpjYXNlIGRpOmNhc2UgZmk6cmV0dXJuIG5ldyBNZXNoU2hhZGluZyhlLHQsYSxyLGksbik7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK28pfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKGUpO3JldHVybiBuZXcgRHVtbXlTaGFkaW5nfX19Y2xhc3MgQmFzZVNoYWRpbmd7c3RhdGljIFNNQUxMX05VTUJFUj0xZS02O2dldElSKCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZ2V0SVJgIGNhbGxlZC4iKX19Y2xhc3MgUmFkaWFsQXhpYWxTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmd7Y29uc3RydWN0b3IoZSx0LGEscixpLG4pe3N1cGVyKCk7dGhpcy5zaGFkaW5nVHlwZT1lLmdldCgiU2hhZGluZ1R5cGUiKTtsZXQgcz0wO3RoaXMuc2hhZGluZ1R5cGU9PT1jaT9zPTQ6dGhpcy5zaGFkaW5nVHlwZT09PWxpJiYocz02KTt0aGlzLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKTtpZighaXNOdW1iZXJBcnJheSh0aGlzLmNvb3Jkc0FycixzKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlJhZGlhbEF4aWFsU2hhZGluZzogSW52YWxpZCAvQ29vcmRzIGFycmF5LiIpO2NvbnN0IG89Q29sb3JTcGFjZVV0aWxzLnBhcnNlKHtjczplLmdldFJhdygiQ1MiKXx8ZS5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOnQscmVzb3VyY2VzOmEscGRmRnVuY3Rpb25GYWN0b3J5OnIsZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOmksbG9jYWxDb2xvclNwYWNlQ2FjaGU6bn0pO3RoaXMuYmJveD1sb29rdXBOb3JtYWxSZWN0KGUuZ2V0QXJyYXkoIkJCb3giKSxudWxsKTtsZXQgYz0wLGw9MTtjb25zdCBoPWUuZ2V0QXJyYXkoIkRvbWFpbiIpO2lzTnVtYmVyQXJyYXkoaCwyKSYmKFtjLGxdPWgpO2xldCB1PSExLGQ9ITE7Y29uc3QgZj1lLmdldEFycmF5KCJFeHRlbmQiKTsoZnVuY3Rpb24gaXNCb29sZWFuQXJyYXkoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmKG51bGw9PT10fHxlLmxlbmd0aD09PXQpJiZlLmV2ZXJ5KGU9PiJib29sZWFuIj09dHlwZW9mIGUpfSkoZiwyKSYmKFt1LGRdPWYpO2lmKCEodGhpcy5zaGFkaW5nVHlwZSE9PWxpfHx1JiZkKSl7Y29uc3RbZSx0LGEscixpLG5dPXRoaXMuY29vcmRzQXJyLHM9TWF0aC5oeXBvdChlLXIsdC1pKTthPD1uK3MmJm48PWErcyYmd2FybigiVW5zdXBwb3J0ZWQgcmFkaWFsIGdyYWRpZW50LiIpfXRoaXMuZXh0ZW5kU3RhcnQ9dTt0aGlzLmV4dGVuZEVuZD1kO2NvbnN0IGc9ZS5nZXRSYXcoIkZ1bmN0aW9uIikscD1yLmNyZWF0ZShnLCEwKSxtPShsLWMpLzg0MCxiPXRoaXMuY29sb3JTdG9wcz1bXTtpZihjPj1sfHxtPD0wKXtpbmZvKCJCYWQgc2hhZGluZyBkb21haW4uIik7cmV0dXJufWNvbnN0IHk9bmV3IEZsb2F0MzJBcnJheShvLm51bUNvbXBzKSx3PW5ldyBGbG9hdDMyQXJyYXkoMSk7bGV0IHg9MDt3WzBdPWM7cCh3LDAseSwwKTtjb25zdCBTPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtvLmdldFJnYih5LDAsUyk7bGV0W2ssQyx2XT1TO2IucHVzaChbMCxVdGlsLm1ha2VIZXhDb2xvcihrLEMsdildKTtsZXQgRj0xO3dbMF09YyttO3AodywwLHksMCk7by5nZXRSZ2IoeSwwLFMpO2xldFtULE8sTV09UyxEPVQtaysxLFI9Ty1DKzEsTj1NLXYrMSxFPVQtay0xLEw9Ty1DLTEsXz1NLXYtMTtmb3IobGV0IGU9MjtlPDg0MDtlKyspe3dbMF09YytlKm07cCh3LDAseSwwKTtvLmdldFJnYih5LDAsUyk7Y29uc3RbdCxhLHJdPVMsaT1lLXg7RD1NYXRoLm1pbihELCh0LWsrMSkvaSk7Uj1NYXRoLm1pbihSLChhLUMrMSkvaSk7Tj1NYXRoLm1pbihOLChyLXYrMSkvaSk7RT1NYXRoLm1heChFLCh0LWstMSkvaSk7TD1NYXRoLm1heChMLChhLUMtMSkvaSk7Xz1NYXRoLm1heChfLChyLXYtMSkvaSk7aWYoIShFPD1EJiZMPD1SJiZfPD1OKSl7Y29uc3QgZT1VdGlsLm1ha2VIZXhDb2xvcihULE8sTSk7Yi5wdXNoKFtGLzg0MCxlXSk7RD10LVQrMTtSPWEtTysxO049ci1NKzE7RT10LVQtMTtMPWEtTy0xO189ci1NLTE7eD1GO2s9VDtDPU87dj1NfUY9ZTtUPXQ7Tz1hO009cn1iLnB1c2goWzEsVXRpbC5tYWtlSGV4Q29sb3IoVCxPLE0pXSk7bGV0IFU9InRyYW5zcGFyZW50IjtlLmhhcygiQmFja2dyb3VuZCIpJiYoVT1vLmdldFJnYkhleChlLmdldCgiQmFja2dyb3VuZCIpLDApKTtpZighdSl7Yi51bnNoaWZ0KFswLFVdKTtiWzFdWzBdKz1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVJ9aWYoIWQpe2IuYXQoLTEpWzBdLT1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVI7Yi5wdXNoKFsxLFVdKX10aGlzLmNvbG9yU3RvcHM9Yn1nZXRJUigpe2NvbnN0e2Nvb3Jkc0FycjplLHNoYWRpbmdUeXBlOnR9PXRoaXM7bGV0IGEscixpLG4scztpZih0PT09Y2kpe3I9W2VbMF0sZVsxXV07aT1bZVsyXSxlWzNdXTtuPW51bGw7cz1udWxsO2E9ImF4aWFsIn1lbHNlIGlmKHQ9PT1saSl7cj1bZVswXSxlWzFdXTtpPVtlWzNdLGVbNF1dO249ZVsyXTtzPWVbNV07YT0icmFkaWFsIn1lbHNlIHVucmVhY2hhYmxlKGBnZXRQYXR0ZXJuIHR5cGUgdW5rbm93bjogJHt0fWApO3JldHVyblsiUmFkaWFsQXhpYWwiLGEsdGhpcy5iYm94LHRoaXMuY29sb3JTdG9wcyxyLGksbixzXX19Y2xhc3MgTWVzaFN0cmVhbVJlYWRlcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuc3RyZWFtPWU7dGhpcy5jb250ZXh0PXQ7dGhpcy5idWZmZXI9MDt0aGlzLmJ1ZmZlckxlbmd0aD0wO2NvbnN0IGE9dC5udW1Db21wczt0aGlzLnRtcENvbXBzQnVmPW5ldyBGbG9hdDMyQXJyYXkoYSk7Y29uc3Qgcj10LmNvbG9yU3BhY2UubnVtQ29tcHM7dGhpcy50bXBDc0NvbXBzQnVmPXQuY29sb3JGbj9uZXcgRmxvYXQzMkFycmF5KHIpOnRoaXMudG1wQ29tcHNCdWZ9Z2V0IGhhc0RhdGEoKXtpZih0aGlzLnN0cmVhbS5lbmQpcmV0dXJuIHRoaXMuc3RyZWFtLnBvczx0aGlzLnN0cmVhbS5lbmQ7aWYodGhpcy5idWZmZXJMZW5ndGg+MClyZXR1cm4hMDtjb25zdCBlPXRoaXMuc3RyZWFtLmdldEJ5dGUoKTtpZihlPDApcmV0dXJuITE7dGhpcy5idWZmZXI9ZTt0aGlzLmJ1ZmZlckxlbmd0aD04O3JldHVybiEwfXJlYWRCaXRzKGUpe2NvbnN0e3N0cmVhbTp0fT10aGlzO2xldHtidWZmZXI6YSxidWZmZXJMZW5ndGg6cn09dGhpcztpZigzMj09PWUpe2lmKDA9PT1yKXJldHVybiB0LmdldEludDMyKCk+Pj4wO2E9YTw8MjR8dC5nZXRCeXRlKCk8PDE2fHQuZ2V0Qnl0ZSgpPDw4fHQuZ2V0Qnl0ZSgpO2NvbnN0IGU9dC5nZXRCeXRlKCk7dGhpcy5idWZmZXI9ZSYoMTw8ciktMTtyZXR1cm4oYTw8OC1yfCgyNTUmZSk+PnIpPj4+MH1pZig4PT09ZSYmMD09PXIpcmV0dXJuIHQuZ2V0Qnl0ZSgpO2Zvcig7cjxlOyl7YT1hPDw4fHQuZ2V0Qnl0ZSgpO3IrPTh9ci09ZTt0aGlzLmJ1ZmZlckxlbmd0aD1yO3RoaXMuYnVmZmVyPWEmKDE8PHIpLTE7cmV0dXJuIGE+PnJ9YWxpZ24oKXt0aGlzLmJ1ZmZlcj0wO3RoaXMuYnVmZmVyTGVuZ3RoPTB9cmVhZEZsYWcoKXtyZXR1cm4gdGhpcy5yZWFkQml0cyh0aGlzLmNvbnRleHQuYml0c1BlckZsYWcpfXJlYWRDb29yZGluYXRlKCl7Y29uc3R7Yml0c1BlckNvb3JkaW5hdGU6ZSxkZWNvZGU6dH09dGhpcy5jb250ZXh0LGE9dGhpcy5yZWFkQml0cyhlKSxyPXRoaXMucmVhZEJpdHMoZSksaT1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwO3JldHVyblthKmkqKHRbMV0tdFswXSkrdFswXSxyKmkqKHRbM10tdFsyXSkrdFsyXV19cmVhZENvbXBvbmVudHMoKXtjb25zdHtiaXRzUGVyQ29tcG9uZW50OmUsY29sb3JGbjp0LGNvbG9yU3BhY2U6YSxkZWNvZGU6cixudW1Db21wczppfT10aGlzLmNvbnRleHQsbj1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwLHM9dGhpcy50bXBDb21wc0J1Zjtmb3IobGV0IHQ9MCxhPTQ7dDxpO3QrKyxhKz0yKXtjb25zdCBpPXRoaXMucmVhZEJpdHMoZSk7c1t0XT1pKm4qKHJbYSsxXS1yW2FdKStyW2FdfWNvbnN0IG89dGhpcy50bXBDc0NvbXBzQnVmO3Q/LihzLDAsbywwKTtyZXR1cm4gYS5nZXRSZ2IobywwKX19bGV0IGdpPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gZ2V0QihlKXtyZXR1cm4gZ2lbZV18fD1mdW5jdGlvbiBidWlsZEIoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MDthPD1lO2ErKyl7Y29uc3Qgcj1hL2UsaT0xLXI7dC5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoW2kqKjMsMypyKmkqKjIsMypyKioyKmkscioqM10pKX1yZXR1cm4gdH0oZSl9Y2xhc3MgTWVzaFNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tzdGF0aWMgTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MztzdGF0aWMgTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MjA7c3RhdGljIFRSSUFOR0xFX0RFTlNJVFk9MjA7Y29uc3RydWN0b3IoZSx0LGEscixpLG4pe3N1cGVyKCk7aWYoIShlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtIik7Y29uc3Qgcz1lLmRpY3Q7dGhpcy5zaGFkaW5nVHlwZT1zLmdldCgiU2hhZGluZ1R5cGUiKTt0aGlzLmJib3g9bG9va3VwTm9ybWFsUmVjdChzLmdldEFycmF5KCJCQm94IiksbnVsbCk7Y29uc3Qgbz1Db2xvclNwYWNlVXRpbHMucGFyc2Uoe2NzOnMuZ2V0UmF3KCJDUyIpfHxzLmdldFJhdygiQ29sb3JTcGFjZSIpLHhyZWY6dCxyZXNvdXJjZXM6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6cixnbG9iYWxDb2xvclNwYWNlQ2FjaGU6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTpufSk7dGhpcy5iYWNrZ3JvdW5kPXMuaGFzKCJCYWNrZ3JvdW5kIik/by5nZXRSZ2Iocy5nZXQoIkJhY2tncm91bmQiKSwwKTpudWxsO2NvbnN0IGM9cy5nZXRSYXcoIkZ1bmN0aW9uIiksbD1jP3IuY3JlYXRlKGMsITApOm51bGw7dGhpcy5jb29yZHM9W107dGhpcy5jb2xvcnM9W107dGhpcy5maWd1cmVzPVtdO2NvbnN0IGg9e2JpdHNQZXJDb29yZGluYXRlOnMuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6cy5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpzLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6cy5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjpsLGNvbG9yU3BhY2U6byxudW1Db21wczpsPzE6by5udW1Db21wc30sdT1uZXcgTWVzaFN0cmVhbVJlYWRlcihlLGgpO2xldCBkPSExO3N3aXRjaCh0aGlzLnNoYWRpbmdUeXBlKXtjYXNlIGhpOnRoaXMuX2RlY29kZVR5cGU0U2hhZGluZyh1KTticmVhaztjYXNlIHVpOmNvbnN0IGU9MHxzLmdldCgiVmVydGljZXNQZXJSb3ciKTtpZihlPDIpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7dGhpcy5fZGVjb2RlVHlwZTVTaGFkaW5nKHUsZSk7YnJlYWs7Y2FzZSBkaTp0aGlzLl9kZWNvZGVUeXBlNlNoYWRpbmcodSk7ZD0hMDticmVhaztjYXNlIGZpOnRoaXMuX2RlY29kZVR5cGU3U2hhZGluZyh1KTtkPSEwO2JyZWFrO2RlZmF1bHQ6dW5yZWFjaGFibGUoIlVuc3VwcG9ydGVkIG1lc2ggdHlwZS4iKX1pZihkKXt0aGlzLl91cGRhdGVCb3VuZHMoKTtmb3IobGV0IGU9MCx0PXRoaXMuZmlndXJlcy5sZW5ndGg7ZTx0O2UrKyl0aGlzLl9idWlsZEZpZ3VyZUZyb21QYXRjaChlKX10aGlzLl91cGRhdGVCb3VuZHMoKTt0aGlzLl9wYWNrRGF0YSgpfV9kZWNvZGVUeXBlNFNoYWRpbmcoZSl7Y29uc3QgdD10aGlzLmNvb3JkcyxhPXRoaXMuY29sb3JzLHI9W10saT1bXTtsZXQgbj0wO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgcz1lLnJlYWRGbGFnKCksbz1lLnJlYWRDb29yZGluYXRlKCksYz1lLnJlYWRDb21wb25lbnRzKCk7aWYoMD09PW4pe2lmKCEoMDw9cyYmczw9MikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU0IGZsYWciKTtzd2l0Y2gocyl7Y2FzZSAwOm49MzticmVhaztjYXNlIDE6aS5wdXNoKGkuYXQoLTIpLGkuYXQoLTEpKTtuPTE7YnJlYWs7Y2FzZSAyOmkucHVzaChpLmF0KC0zKSxpLmF0KC0xKSk7bj0xfXIucHVzaChzKX1pLnB1c2godC5sZW5ndGgpO3QucHVzaChvKTthLnB1c2goYyk7bi0tO2UuYWxpZ24oKX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZTp4LGNvb3JkczpuZXcgSW50MzJBcnJheShpKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoaSl9KX1fZGVjb2RlVHlwZTVTaGFkaW5nKGUsdCl7Y29uc3QgYT10aGlzLmNvb3JkcyxyPXRoaXMuY29sb3JzLGk9W107Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCB0PWUucmVhZENvb3JkaW5hdGUoKSxuPWUucmVhZENvbXBvbmVudHMoKTtpLnB1c2goYS5sZW5ndGgpO2EucHVzaCh0KTtyLnB1c2gobil9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6Uyxjb29yZHM6bmV3IEludDMyQXJyYXkoaSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpLHZlcnRpY2VzUGVyUm93OnR9KX1fZGVjb2RlVHlwZTZTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxyPW5ldyBJbnQzMkFycmF5KDE2KSxpPW5ldyBJbnQzMkFycmF5KDQpO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgbj1lLnJlYWRGbGFnKCk7aWYoISgwPD1uJiZuPD0zKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTYgZmxhZyIpO2NvbnN0IHM9dC5sZW5ndGg7Zm9yKGxldCBhPTAscj0wIT09bj84OjEyO2E8cjthKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Y29uc3Qgbz1hLmxlbmd0aDtmb3IobGV0IHQ9MCxyPTAhPT1uPzI6NDt0PHI7dCsrKWEucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO2xldCBjLGwsaCx1O3N3aXRjaChuKXtjYXNlIDA6clsxMl09cyszO3JbMTNdPXMrNDtyWzE0XT1zKzU7clsxNV09cys2O3JbOF09cysyO3JbMTFdPXMrNztyWzRdPXMrMTtyWzddPXMrODtyWzBdPXM7clsxXT1zKzExO3JbMl09cysxMDtyWzNdPXMrOTtpWzJdPW8rMTtpWzNdPW8rMjtpWzBdPW87aVsxXT1vKzM7YnJlYWs7Y2FzZSAxOmM9clsxMl07bD1yWzEzXTtoPXJbMTRdO3U9clsxNV07clsxMl09dTtyWzEzXT1zKzA7clsxNF09cysxO3JbMTVdPXMrMjtyWzhdPWg7clsxMV09cyszO3JbNF09bDtyWzddPXMrNDtyWzBdPWM7clsxXT1zKzc7clsyXT1zKzY7clszXT1zKzU7Yz1pWzJdO2w9aVszXTtpWzJdPWw7aVszXT1vO2lbMF09YztpWzFdPW8rMTticmVhaztjYXNlIDI6Yz1yWzE1XTtsPXJbMTFdO3JbMTJdPXJbM107clsxM109cyswO3JbMTRdPXMrMTtyWzE1XT1zKzI7cls4XT1yWzddO3JbMTFdPXMrMztyWzRdPWw7cls3XT1zKzQ7clswXT1jO3JbMV09cys3O3JbMl09cys2O3JbM109cys1O2M9aVszXTtpWzJdPWlbMV07aVszXT1vO2lbMF09YztpWzFdPW8rMTticmVhaztjYXNlIDM6clsxMl09clswXTtyWzEzXT1zKzA7clsxNF09cysxO3JbMTVdPXMrMjtyWzhdPXJbMV07clsxMV09cyszO3JbNF09clsyXTtyWzddPXMrNDtyWzBdPXJbM107clsxXT1zKzc7clsyXT1zKzY7clszXT1zKzU7aVsyXT1pWzBdO2lbM109bztpWzBdPWlbMV07aVsxXT1vKzF9cls1XT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W3JbMF1dWzBdLXRbclsxNV1dWzBdKzYqKHRbcls0XV1bMF0rdFtyWzFdXVswXSktMioodFtyWzEyXV1bMF0rdFtyWzNdXVswXSkrMyoodFtyWzEzXV1bMF0rdFtyWzddXVswXSkpLzksKC00KnRbclswXV1bMV0tdFtyWzE1XV1bMV0rNioodFtyWzRdXVsxXSt0W3JbMV1dWzFdKS0yKih0W3JbMTJdXVsxXSt0W3JbM11dWzFdKSszKih0W3JbMTNdXVsxXSt0W3JbN11dWzFdKSkvOV0pO3JbNl09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFtyWzNdXVswXS10W3JbMTJdXVswXSs2Kih0W3JbMl1dWzBdK3Rbcls3XV1bMF0pLTIqKHRbclswXV1bMF0rdFtyWzE1XV1bMF0pKzMqKHRbcls0XV1bMF0rdFtyWzE0XV1bMF0pKS85LCgtNCp0W3JbM11dWzFdLXRbclsxMl1dWzFdKzYqKHRbclsyXV1bMV0rdFtyWzddXVsxXSktMioodFtyWzBdXVsxXSt0W3JbMTVdXVsxXSkrMyoodFtyWzRdXVsxXSt0W3JbMTRdXVsxXSkpLzldKTtyWzldPXQubGVuZ3RoO3QucHVzaChbKC00KnRbclsxMl1dWzBdLXRbclszXV1bMF0rNioodFtyWzhdXVswXSt0W3JbMTNdXVswXSktMioodFtyWzBdXVswXSt0W3JbMTVdXVswXSkrMyoodFtyWzExXV1bMF0rdFtyWzFdXVswXSkpLzksKC00KnRbclsxMl1dWzFdLXRbclszXV1bMV0rNioodFtyWzhdXVsxXSt0W3JbMTNdXVsxXSktMioodFtyWzBdXVsxXSt0W3JbMTVdXVsxXSkrMyoodFtyWzExXV1bMV0rdFtyWzFdXVsxXSkpLzldKTtyWzEwXT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W3JbMTVdXVswXS10W3JbMF1dWzBdKzYqKHRbclsxMV1dWzBdK3RbclsxNF1dWzBdKS0yKih0W3JbMTJdXVswXSt0W3JbM11dWzBdKSszKih0W3JbMl1dWzBdK3Rbcls4XV1bMF0pKS85LCgtNCp0W3JbMTVdXVsxXS10W3JbMF1dWzFdKzYqKHRbclsxMV1dWzFdK3RbclsxNF1dWzFdKS0yKih0W3JbMTJdXVsxXSt0W3JbM11dWzFdKSszKih0W3JbMl1dWzFdK3Rbcls4XV1bMV0pKS85XSk7dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6ayxjb29yZHM6bmV3IEludDMyQXJyYXkociksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fV9kZWNvZGVUeXBlN1NoYWRpbmcoZSl7Y29uc3QgdD10aGlzLmNvb3JkcyxhPXRoaXMuY29sb3JzLHI9bmV3IEludDMyQXJyYXkoMTYpLGk9bmV3IEludDMyQXJyYXkoNCk7Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCBuPWUucmVhZEZsYWcoKTtpZighKDA8PW4mJm48PTMpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7Y29uc3Qgcz10Lmxlbmd0aDtmb3IobGV0IGE9MCxyPTAhPT1uPzEyOjE2O2E8cjthKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Y29uc3Qgbz1hLmxlbmd0aDtmb3IobGV0IHQ9MCxyPTAhPT1uPzI6NDt0PHI7dCsrKWEucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO2xldCBjLGwsaCx1O3N3aXRjaChuKXtjYXNlIDA6clsxMl09cyszO3JbMTNdPXMrNDtyWzE0XT1zKzU7clsxNV09cys2O3JbOF09cysyO3JbOV09cysxMztyWzEwXT1zKzE0O3JbMTFdPXMrNztyWzRdPXMrMTtyWzVdPXMrMTI7cls2XT1zKzE1O3JbN109cys4O3JbMF09cztyWzFdPXMrMTE7clsyXT1zKzEwO3JbM109cys5O2lbMl09bysxO2lbM109bysyO2lbMF09bztpWzFdPW8rMzticmVhaztjYXNlIDE6Yz1yWzEyXTtsPXJbMTNdO2g9clsxNF07dT1yWzE1XTtyWzEyXT11O3JbMTNdPXMrMDtyWzE0XT1zKzE7clsxNV09cysyO3JbOF09aDtyWzldPXMrOTtyWzEwXT1zKzEwO3JbMTFdPXMrMztyWzRdPWw7cls1XT1zKzg7cls2XT1zKzExO3JbN109cys0O3JbMF09YztyWzFdPXMrNztyWzJdPXMrNjtyWzNdPXMrNTtjPWlbMl07bD1pWzNdO2lbMl09bDtpWzNdPW87aVswXT1jO2lbMV09bysxO2JyZWFrO2Nhc2UgMjpjPXJbMTVdO2w9clsxMV07clsxMl09clszXTtyWzEzXT1zKzA7clsxNF09cysxO3JbMTVdPXMrMjtyWzhdPXJbN107cls5XT1zKzk7clsxMF09cysxMDtyWzExXT1zKzM7cls0XT1sO3JbNV09cys4O3JbNl09cysxMTtyWzddPXMrNDtyWzBdPWM7clsxXT1zKzc7clsyXT1zKzY7clszXT1zKzU7Yz1pWzNdO2lbMl09aVsxXTtpWzNdPW87aVswXT1jO2lbMV09bysxO2JyZWFrO2Nhc2UgMzpyWzEyXT1yWzBdO3JbMTNdPXMrMDtyWzE0XT1zKzE7clsxNV09cysyO3JbOF09clsxXTtyWzldPXMrOTtyWzEwXT1zKzEwO3JbMTFdPXMrMztyWzRdPXJbMl07cls1XT1zKzg7cls2XT1zKzExO3JbN109cys0O3JbMF09clszXTtyWzFdPXMrNztyWzJdPXMrNjtyWzNdPXMrNTtpWzJdPWlbMF07aVszXT1vO2lbMF09aVsxXTtpWzFdPW8rMX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZTprLGNvb3JkczpuZXcgSW50MzJBcnJheShyKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoaSl9KX19X2J1aWxkRmlndXJlRnJvbVBhdGNoKGUpe2NvbnN0IHQ9dGhpcy5maWd1cmVzW2VdO2Fzc2VydCh0LnR5cGU9PT1rLCJVbmV4cGVjdGVkIHBhdGNoIG1lc2ggZmlndXJlIik7Y29uc3QgYT10aGlzLmNvb3JkcyxyPXRoaXMuY29sb3JzLGk9dC5jb29yZHMsbj10LmNvbG9ycyxzPU1hdGgubWluKGFbaVswXV1bMF0sYVtpWzNdXVswXSxhW2lbMTJdXVswXSxhW2lbMTVdXVswXSksbz1NYXRoLm1pbihhW2lbMF1dWzFdLGFbaVszXV1bMV0sYVtpWzEyXV1bMV0sYVtpWzE1XV1bMV0pLGM9TWF0aC5tYXgoYVtpWzBdXVswXSxhW2lbM11dWzBdLGFbaVsxMl1dWzBdLGFbaVsxNV1dWzBdKSxsPU1hdGgubWF4KGFbaVswXV1bMV0sYVtpWzNdXVsxXSxhW2lbMTJdXVsxXSxhW2lbMTVdXVsxXSk7bGV0IGg9TWF0aC5jZWlsKChjLXMpKk1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzJdLXRoaXMuYm91bmRzWzBdKSk7aD1NYXRoQ2xhbXAoaCxNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNZXNoU2hhZGluZy5NQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCk7bGV0IHU9TWF0aC5jZWlsKChsLW8pKk1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzNdLXRoaXMuYm91bmRzWzFdKSk7dT1NYXRoQ2xhbXAodSxNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNZXNoU2hhZGluZy5NQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCk7Y29uc3QgZD1oKzEsZj1uZXcgSW50MzJBcnJheSgodSsxKSpkKSxnPW5ldyBJbnQzMkFycmF5KCh1KzEpKmQpO2xldCBwPTA7Y29uc3QgbT1uZXcgVWludDhBcnJheSgzKSxiPW5ldyBVaW50OEFycmF5KDMpLHk9cltuWzBdXSx3PXJbblsxXV0seD1yW25bMl1dLEM9cltuWzNdXSx2PWdldEIodSksRj1nZXRCKGgpO2ZvcihsZXQgZT0wO2U8PXU7ZSsrKXttWzBdPSh5WzBdKih1LWUpK3hbMF0qZSkvdXwwO21bMV09KHlbMV0qKHUtZSkreFsxXSplKS91fDA7bVsyXT0oeVsyXSoodS1lKSt4WzJdKmUpL3V8MDtiWzBdPSh3WzBdKih1LWUpK0NbMF0qZSkvdXwwO2JbMV09KHdbMV0qKHUtZSkrQ1sxXSplKS91fDA7YlsyXT0od1syXSoodS1lKStDWzJdKmUpL3V8MDtmb3IobGV0IHQ9MDt0PD1oO3QrKyxwKyspe2lmKCEoMCE9PWUmJmUhPT11fHwwIT09dCYmdCE9PWgpKWNvbnRpbnVlO2xldCBuPTAscz0wLG89MDtmb3IobGV0IHI9MDtyPD0zO3IrKylmb3IobGV0IGM9MDtjPD0zO2MrKyxvKyspe2NvbnN0IGw9dltlXVtyXSpGW3RdW2NdO24rPWFbaVtvXV1bMF0qbDtzKz1hW2lbb11dWzFdKmx9ZltwXT1hLmxlbmd0aDthLnB1c2goW24sc10pO2dbcF09ci5sZW5ndGg7Y29uc3QgYz1uZXcgVWludDhBcnJheSgzKTtjWzBdPShtWzBdKihoLXQpK2JbMF0qdCkvaHwwO2NbMV09KG1bMV0qKGgtdCkrYlsxXSp0KS9ofDA7Y1syXT0obVsyXSooaC10KStiWzJdKnQpL2h8MDtyLnB1c2goYyl9fWZbMF09aVswXTtnWzBdPW5bMF07ZltoXT1pWzNdO2dbaF09blsxXTtmW2QqdV09aVsxMl07Z1tkKnVdPW5bMl07ZltkKnUraF09aVsxNV07Z1tkKnUraF09blszXTt0aGlzLmZpZ3VyZXNbZV09e3R5cGU6Uyxjb29yZHM6Zixjb2xvcnM6Zyx2ZXJ0aWNlc1BlclJvdzpkfX1fdXBkYXRlQm91bmRzKCl7bGV0IGU9dGhpcy5jb29yZHNbMF1bMF0sdD10aGlzLmNvb3Jkc1swXVsxXSxhPWUscj10O2ZvcihsZXQgaT0xLG49dGhpcy5jb29yZHMubGVuZ3RoO2k8bjtpKyspe2NvbnN0IG49dGhpcy5jb29yZHNbaV1bMF0scz10aGlzLmNvb3Jkc1tpXVsxXTtlPWU+bj9uOmU7dD10PnM/czp0O2E9YTxuP246YTtyPXI8cz9zOnJ9dGhpcy5ib3VuZHM9W2UsdCxhLHJdfV9wYWNrRGF0YSgpe2xldCBlLHQsYSxyO2NvbnN0IGk9dGhpcy5jb29yZHMsbj1uZXcgRmxvYXQzMkFycmF5KDIqaS5sZW5ndGgpO2ZvcihlPTAsYT0wLHQ9aS5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1pW2VdO25bYSsrXT10WzBdO25bYSsrXT10WzFdfXRoaXMuY29vcmRzPW47Y29uc3Qgcz10aGlzLmNvbG9ycyxvPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAsYT0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1zW2VdO29bYSsrXT10WzBdO29bYSsrXT10WzFdO29bYSsrXT10WzJdfXRoaXMuY29sb3JzPW87Y29uc3QgYz10aGlzLmZpZ3VyZXM7Zm9yKGU9MCx0PWMubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9Y1tlXSxpPXQuY29vcmRzLG49dC5jb2xvcnM7Zm9yKGE9MCxyPWkubGVuZ3RoO2E8cjthKyspe2lbYV0qPTI7blthXSo9M319fWdldElSKCl7Y29uc3R7Ym91bmRzOmV9PXRoaXM7aWYoZVsyXS1lWzBdPT09MHx8ZVszXS1lWzFdPT09MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgTWVzaFNoYWRpbmcgYm91bmRzOiBbJHtlfV0uYCk7cmV0dXJuWyJNZXNoIix0aGlzLnNoYWRpbmdUeXBlLHRoaXMuY29vcmRzLHRoaXMuY29sb3JzLHRoaXMuZmlndXJlcyxlLHRoaXMuYmJveCx0aGlzLmJhY2tncm91bmRdfX1jbGFzcyBEdW1teVNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tnZXRJUigpe3JldHVyblsiRHVtbXkiXX19ZnVuY3Rpb24gZ2V0VGlsaW5nUGF0dGVybklSKGUsdCxhKXtjb25zdCByPWxvb2t1cE1hdHJpeCh0LmdldEFycmF5KCJNYXRyaXgiKSxmYSksaT1sb29rdXBOb3JtYWxSZWN0KHQuZ2V0QXJyYXkoIkJCb3giKSxudWxsKTtpZighaXx8aVsyXS1pWzBdPT09MHx8aVszXS1pWzFdPT09MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5LiIpO2NvbnN0IG49dC5nZXQoIlhTdGVwIik7aWYoIm51bWJlciIhPXR5cGVvZiBuKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL1hTdGVwIHZhbHVlLiIpO2NvbnN0IHM9dC5nZXQoIllTdGVwIik7aWYoIm51bWJlciIhPXR5cGVvZiBzKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL1lTdGVwIHZhbHVlLiIpO2NvbnN0IG89dC5nZXQoIlBhaW50VHlwZSIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL1BhaW50VHlwZSB2YWx1ZS4iKTtjb25zdCBjPXQuZ2V0KCJUaWxpbmdUeXBlIik7aWYoIU51bWJlci5pc0ludGVnZXIoYykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvVGlsaW5nVHlwZSB2YWx1ZS4iKTtyZXR1cm5bIlRpbGluZ1BhdHRlcm4iLGEsZSxyLGksbixzLG8sY119Y29uc3QgcGk9WzEuMzg3NywxLDEsMSwuOTc4MDEsLjkyNDgyLC44OTU1MiwuOTExMzMsLjgxOTg4LC45NzU2NiwuOTgxNTIsLjkzNTQ4LC45MzU0OCwxLjI3OTgsLjg1Mjg0LC45Mjc5NCwxLC45NjEzNCwxLjU0NjU3LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuODI4NDUsLjgyODQ1LC44NTI4NCwuODUyODQsLjg1Mjg0LC43NTg1OSwuOTIxMzgsLjgzOTA4LC43NzYyLC43MzI5MywuODcyODksLjczMTMzLC43NTE0LC44MTkyMSwuODczNTYsLjk1OTU4LC41OTUyNiwuNzU3MjcsLjY5MjI1LDEuMDQ5MjQsLjkxMjEsLjg2OTQzLC43OTc5NSwuODgxOTgsLjc3OTU4LC43MDg2NCwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwMTcsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTQ2NTcsLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC44ODc2MiwuODc4NSwuNzUyNDEsLjg3ODUsLjkwNTE4LC45NTAxNSwuNzc2MTgsLjg3ODUsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MTQ4OCwuODc4NSwuODgwMSwuODc4NSwuODc4NSwuOTEzNDMsLjcxNzMsMS4wNDEwNiwuODc4NSwuODUwNzUsLjk1Nzk0LC44MjYxNiwuODUxNjIsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjEyNDAxLC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjczMjkzLC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MTIxLC44Njk0MywuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg1Mjg0LC44NzUwOCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg3MTUsLjc1MjQxLC45MDUxOCwuOTA1MTgsLjkwNTE4LC45MDUxOCwuODg0MDEsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg3ODUsLjg3ODUsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjkwNzQ3LC44OTA0OSwuODc4NSwuODc4NSwuODc4NSwuODc4NSwuODUxNjIsLjg3ODUsLjg1MTYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuODM5MDgsLjg4NzYyLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjg3Mjg5LC44MzAxNiwuODg1MDYsLjkzMTI1LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsLjgxOTIxLC43NzYxOCwxLDEsLjg3MzU2LC44Nzg1LC45MTA3NSwuODk2MDgsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjIyOSwuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzk0NjgsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MTIxLC44Nzg1LDEsMSwuOTEyMSwuODc4NSwuODc4MDIsLjg4NjU2LC44Nzg1LC44Njk0MywuODgwMSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44NzQwMiwuODkyOTEsLjc3OTU4LC45MTM0MywxLDEsLjc3OTU4LC45MTM0MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC44ODc2MiwuNzc1MzksLjg3MTUsLjg3NTA4LC44OTA0OSwxLDEsLjgxMDU1LDEuMDQxMDYsMS4yMDUyOCwxLjIwNTI4LDEsMS4xNTU0MywuNzA2NzQsLjk4Mzg3LC45NDcyMSwxLjMzNDMxLDEuNDU4OTQsLjk1MTYxLDEuMDYzMDMsLjgzOTA4LC44MDM1MiwuNTcxODQsLjY5NjUsLjU2Mjg5LC44MjAwMSwuNTYwMjksLjgxMjM1LDEuMDI5ODgsLjgzOTA4LC43NzYyLC42ODE1NiwuODAzNjcsLjczMTMzLC43ODI1NywuODczNTYsLjg2OTQzLC45NTk1OCwuNzU3MjcsLjg5MDE5LDEuMDQ5MjQsLjkxMjEsLjc2NDgsLjg2OTQzLC44NzM1NiwuNzk3OTUsLjc4Mjc1LC44MTA1NSwuNzc4OTIsLjk3NjIsLjgyNTc3LC45OTgxOSwuODQ4OTYsLjk1OTU4LC43Nzg5MiwuOTYxMDgsMS4wMTQwNywuODkwNDksMS4wMjk4OCwuOTQyMTEsLjk2MTA4LC44OTM2LC44NDAyMSwuODc4NDIsLjk2Mzk5LC43OTEwOSwuODkwNDksMS4wMDgxMywxLjAyOTg4LC44NjA3NywuODc0NDUsLjkyMDk5LC44NDcyMywuODY1MTMsLjg4MDEsLjc1NjM4LC44NTcxNCwuNzgyMTYsLjc5NTg2LC44Nzk2NSwuOTQyMTEsLjk3NzQ3LC43ODI4NywuOTc5MjYsLjg0OTcxLDEuMDI5ODgsLjk0MjExLC44ODAxLC45NDIxMSwuODQ5NzEsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDI2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA1MTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTQ4LDEsMSwxLDEsMSwxLC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuOTYwMTcsLjk1Nzk0LC43Nzg5MiwuODUxNjIsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjkyNzk0LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzExNDMsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45MzgzNSwuODM0MDYsLjkxMTMzLC44NDEwNywuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTAwNiwxLjUzNzExLC45NDQzNCwxLjA4Njk2LDEsLjk1MDE4LC43NzE5MiwuODUyODQsLjkwNzQ3LDEuMTc1MzQsLjY5ODI1LC45NzE2LDEuMzcwNzcsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjA4MDA0LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNzI3LC45MDcyNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sbWk9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9LGJpPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NjIzOSwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzE4MDUsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MDg3MiwuODU5MzgsLjc5Nzk1LC44NzA2OCwuNzc5NTgsLjY5NzY2LC44MTA1NSwuOTAzOTksLjg4NjUzLC45NjA2OCwuODI1NzcsLjc3ODkyLC43ODI1NywuOTc1MDcsMS41MjksLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC45NDkwOCwuODY0MTEsLjc0MDEyLC44NjQxMSwuODgzMjMsLjk1MDE1LC44NjQxMSwuODYzMzEsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MDM5LC44NjMzMSwuODYzMzEsLjg2NDExLC44NjQxMSwuOTA0NjQsLjcwODUyLDEuMDQxMDYsLjg2MzMxLC44NDM3MiwuOTU3OTQsLjgyNjE2LC44NDU0OCwuNzk0OTIsLjg4MzMxLDEuNjk4MDgsLjg4MzMxLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuNzgwMSwuODk1NTIsMS4yNDQ4NywxLjEzMjU0LDEuMTkxMjksLjk2ODM5LC44NTI4NCwuNjg3ODcsLjcwNjQ1LC44NTU5MiwuOTA3NDcsMS4wMTQ2NiwxLjAwODgsLjkwMzIzLDEsMS4wNzQ2MywxLC45MTA1NiwuNzU4MDYsMS4xOTExOCwuOTY4MzksLjc4ODY0LC44Mjg0NSwuODQxMzMsLjc1ODU5LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC43NzUzOSwuNzE4MDUsLjczMTMzLC43MzEzMywuNzMxMzMsLjczMTMzLC45NTk1OCwuOTU5NTgsLjk1OTU4LC45NTk1OCwuODg1MDYsLjkwODcyLC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1Mjg0LC44NzA2OCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjg1ODg3LC43NDAxMiwuODgzMjMsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC45MDc0NywuODkwNDksLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NDU0OCwuODY0MTEsLjg0NTQ4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuODM5MDgsLjk0OTA4LC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjg3Mjg5LC43OTUzOCwuODg1MDYsLjkyNzI2LC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsLjgxOTIxLC44NjQxMSwxLDEsLjg3MzU2LC44NjMzMSwuOTEwNzUsLjg3NzcsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjQ2NywuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzczMTIsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MDg3MiwuODYzMzEsMSwxLC45MDg3MiwuODYzMzEsLjg2OTA2LC44ODExNiwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg3NDAyLC44NjU0OSwuNzc5NTgsLjkwNDY0LDEsMSwuNzc5NTgsLjkwNDY0LC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjk2MDY4LC45NTc5NCwuNzc4OTIsLjg0NTQ4LC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC45NDkwOCwuNzc1MzksLjg1ODg3LC44NzA2OCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwMDg4LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjQ4Mzg3LC44MzkwOCwuODAzNTIsLjU3MTE4LC42OTY1LC41NjM0NywuNzkxNzksLjU1ODUzLC44MDM0NiwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjcxNzQsLjg2MDM2LC43MzEzMywuNzgyNTcsLjg3MzU2LC44NjQ0MSwuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MDg3MiwuNzQ4ODksLjg1OTM4LC44Nzg5MSwuNzk3OTUsLjc5NTcsLjgxMDU1LC43Nzg5MiwuOTc0NDcsLjgyNTc3LC45NzQ2NiwuODcxNzksLjk1OTU4LC43Nzg5MiwuOTQyNTIsLjk1NjEyLC44NzUzLDEuMDI5ODgsLjkyNzMzLC45NDI1MiwuODc0MTEsLjg0MDIxLC44NzI4LC45NTYxMiwuNzQwODEsLjg3NTMsMS4wMjE4OSwxLjAyOTg4LC44NDgxNCwuODc0NDUsLjkxODIyLC44NDcyMywuODU2NjgsLjg2MzMxLC44MTM0NCwuODc1ODEsLjc2NDIyLC44MjA0NiwuOTYwNTcsLjkyNzMzLC45OTM3NSwuNzgwMjIsLjk1NDUyLC44NjAxNSwxLjAyOTg4LC45MjczMywuODYzMzEsLjkyNzMzLC44NjAxNSwuNzMxMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNjMxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODMyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODUxNzQsMSwxLDEsMSwxLDEsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwxLDEsLjg5NTUyLC45MDUyNywxLC45MDM2MywuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODk4MDcsLjg3MDEyLC44NzAxMiwuODcwMTIsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC43MTA5NCwxLjA2MTUyLDEsMSwxLjAzMzcyLDEuMDMzNzIsLjk3MTcxLDEuNDk1NiwyLjI4MDcsLjkyOTcyLC44MzQwNiwuOTExMzMsLjgzMzI2LC45MTEzMywxLDEsMSwuNzIwMjEsMSwxLjIzMTA4LC44MzQ4OSwuODg1MjUsLjg4NTI1LC44MTQ5OSwuOTA2MTYsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjMxMDcsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHlpPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fSx3aT1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzk1NDMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjcyMzQ2LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTI0OSwuODQxMTgsLjc3NDUyLC44NTM3NCwuNzUxODYsLjY3Nzg5LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDMwOSwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zODMxMywxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC45MjQ1LC45MjQ1LC44MzIwMywuOTI0NSwuODU4NjUsMS4wOTg0MiwuOTI0NSwuOTI0NSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk0OTU5LC45MjQ1LC45MjI3NCwuOTI0NSwuOTI0NSwxLjAyOTMzLC43NzgzMiwxLjIwNTYyLC45MjQ1LC44OTE2LC45ODk4NiwuODY2MjEsLjg5NDUzLC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMTYzNTksLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzIzNDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5MjQ5LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODQxMTgsLjg1Mjg0LC44NDU1NywuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODQ4NDMsLjgzMjAzLC44NTg2NSwuODU4NjUsLjg1ODY1LC44NTg2NSwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45MjQ1LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkwNzQ3LC44NjY1MSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODk0NTMsLjkyNDUsLjg5NDUzLC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjg1MTkzLC44ODc1LC44NjQ3NywuOTkwMzQsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsLjgxMTA1LC45MjQ1LDEsMSwuODYyNzUsLjkyNDUsLjkwODcyLC45MzU5MSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzg5NiwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45Mzc1LC45ODE1NiwuOTM0MDcsLjc3MjYxLDEuMTE0MjksLjg5MjQ5LC45MjQ1LDEsMSwuODkyNDksLjkyNDUsLjkyNTM0LC44NjY5OCwuOTI0NSwuODQxMTgsLjkyMjc0LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODY2NywuODYyOTEsLjc1MTg2LDEuMDI5MzMsMSwxLC43NTE4NiwxLjAyOTMzLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsMSwxLC43OTc3NiwuOTc2NTUsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjkyNDUsLjc2MzE4LC44NDg0MywuODQ1NTcsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3MDA5LC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44Njc1LC45MDg2MSwuNjE5MiwuNzM2MywuNjQ4MjQsLjgyNDExLC41NjMyMSwuODU2OTYsMS4yMzUxNiwuODY3NSwuODE1NTIsLjcyODYsLjg0MTM0LC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NDM2OSwuOTA2ODUsLjc3ODkyLC44NTg3MSwxLjAyNjM4LC44OTI0OSwuNzU4MjgsLjg0MTE4LC44NTk4NCwuNzc0NTIsLjc2NDY2LC43OTc3NiwuNzMwNiwuOTA3ODIsLjc3ODE4LC45MDMsLjg3MjkxLC45MDY4NSwuNzMwNiwuOTkwNTgsMS4wMzY2NywuOTQ2MzUsMS4yMzUxNiwuOTg0OSwuOTkwNTgsLjkyMzkzLC44OTE2LC45NDIsMS4wMzY2NywuNzUwMjYsLjk0NjM1LDEuMDI5NywxLjIzNTE2LC45MDkxOCwuOTQwNDgsLjk4MjE3LC44OTc0NiwuODQxNTMsLjkyMjc0LC44MjUwNywuODg4MzIsLjg0NDM4LC44ODE3OCwxLjAzNTI1LC45ODQ5LDEuMDAyMjUsLjc4MDg2LC45NzI0OCwuODk0MDQsMS4yMzUxNiwuOTg0OSwuOTIyNzQsLjk4NDksLjg5NDA0LC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2OTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1ODY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDkzMywxLDEsMSwxLDEsMSwuOTQzMDksLjk4OTg2LC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY4OTk0LDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTc4NTgsLjgyNjE2LC45MTEzMywuODM0MzcsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1NzIsMS44MTA1NSwuOTA3NDksMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTI4NCwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0seGk9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9LFNpPVsxLjM4NzcsMSwxLDEsMS4xNzIyMywxLjEyOTMsLjg5NTUyLC45MTEzMywuODAzOTUsMS4wMjI2OSwxLjE1NjAxLC45MTA1NiwuOTEwNTYsMS4yNzk4LC44NTI4NCwuODk4MDcsMSwuOTA4NjEsMS4zOTAxNiwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjk2MzA5LC45NjMwOSwuODUyODQsLjg1Mjg0LC44NTI4NCwuODMzMTksLjg4MDcxLC44Njc1LC44MTU1MiwuNzM4MzQsLjg1MTkzLC43MzIwNiwuNzUyMiwuODExMDUsLjg2Mjc1LC45MDY4NSwuNjM3NywuNzc4OTIsLjc1NTkzLDEuMDI2MzgsLjg5Mzg1LC44NTEyMiwuNzc0NTIsLjg2NTAzLC43NTE4NiwuNjg4ODcsLjc5Nzc2LC44ODg0NCwuODUwNjYsLjk0MjU4LC43NzgxOCwuNzMwNiwuNzY2NTksMS4xMDM2OSwxLjM5MDE2LDEuMTAzNjksMS4wNjEzOSwuODk1NTIsLjg3MzksLjg2MTI4LC45NDQ2OSwuODQ1NywuOTQ0NjksLjg5NDY0LDEuMDk4NDIsLjg0NjM2LC45NDQ2OSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk1ODk3LC45NDQ2OSwuOTQ4MiwuOTQ0NjksLjk0NDY5LDEuMDQ2OTIsLjc4MjIzLDEuMjA1NjIsLjk0NDY5LC45MDMzMiwuOTg5ODYsLjg2NjIxLC45MDUyNywuNzkwMDQsLjk0MTUyLDEuNzcyNTYsLjk0MTUyLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuOTE3MjksLjg5NTUyLDEuMTc4ODksMS4xMzI1NCwxLjA4NzA3LC45MjA5OCwuODUyODQsLjY4Nzg3LC43MTM1MywuODQ3MzcsLjkwNzQ3LDEuMDA4OCwxLjAwNDQsLjg3NjgzLDEsMS4wOTA5MSwxLC45MjIyOSwuNzM5LDEuMTU2NDIsLjkyMDk4LC43NjI4OCwuODA1MDQsLjgwOTcyLC43NTg1OSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuNzYzMTgsLjczODM0LC43MzIwNiwuNzMyMDYsLjczMjA2LC43MzIwNiwuOTA2ODUsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjg2NDc3LC44OTM4NSwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTI4NCwuODUzMTEsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjg4ODQ0LC43MzA2LC43NzQ1MiwuODYzMzEsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2OTMsLjg0NTcsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjg5NDY0LC44MjYwMSwuODI2MDEsLjgyNjAxLC44MjYwMSwuOTQ0NjksLjk0NDY5LC45NDgyLC45NDgyLC45NDgyLC45NDgyLC45NDgyLC45MDc0NywuODY2NTEsLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjk0NDY5LC45MDUyNywuOTQ0NjksLjkwNTI3LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjg2NzUsLjg2MTI4LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuODUxOTMsLjkyNDU0LC44NjQ3NywuOTkyMSwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjgxMTA1LC44NDYzNiwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsMSwxLC44NjI3NSwuOTQ0NjksLjkwODcyLC45NTc4NiwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzc0MSwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45MDQ1MiwuOTgxNTYsMS4xMTg0MiwuNzcyNjEsMS4xMTQyOSwuODkzODUsLjk0NDY5LDEsMSwuODkzODUsLjk0NDY5LC45NTg3NywuODY5MDEsLjk0NDY5LC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg1MTIyLC45NDgyLC44NjY3LC45MDAxNiwuNzUxODYsMS4wNDY5MiwxLDEsLjc1MTg2LDEuMDQ2OTIsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywxLDEsLjc5Nzc2LC45MjE4OCwuNzk3NzYsMS4yMzAyMywuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuOTQyNTgsLjk4OTg2LC43MzA2LC45MDUyNywuNzMwNiwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwxLjA5MjMxLC41NDg3MywuODY3NSwuODYxMjgsLjc2MzE4LC44NjkzLC44NTMxMSwuODY2NTEsMSwxLC43OTc3NiwxLjIwNTYyLDEuMTg2MjIsMS4xODYyMiwxLDEuMTQzNywuNjc3NDIsLjk2MzM0LC45MzY5NSwxLjM1MTkxLDEuNDA5MDksLjk1MTYxLDEuNDgzODcsLjg2Njg2LC45MDg2MSwuNjIyNjcsLjc0MzU5LC42NTY0OSwuODU0OTgsLjU2OTYzLC44ODI1NCwxLjIzNTE2LC44Njc1LC44MTU1MiwuNzU0NDMsLjg0NTAzLC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NTEyMiwuOTA2ODUsLjc3ODkyLC44NTc0NiwxLjAyNjM4LC44OTM4NSwuNzU2NTcsLjg1MTIyLC44NjI3NSwuNzc0NTIsLjc0MTcxLC43OTc3NiwuNzMwNiwuOTUxNjUsLjc3ODE4LC44OTc3MiwuODg4MzEsLjkwNjg1LC43MzA2LC45ODE0MiwxLjAyMTkxLC45NjU3NiwxLjIzNTE2LC45OTAxOCwuOTgxNDIsLjkyMzYsLjg5MjU4LC45NDAzNSwxLjAyMTkxLC43ODg0OCwuOTY1NzYsLjk1NjEsMS4yMzUxNiwuOTA5MTgsLjkyNTc4LC45NTQyNCwuODk3NDYsLjgzOTY5LC45NDgyLC44MDExMywuODk0NDIsLjg1MjA4LC44NjE1NSwuOTgwMjIsLjk5MDE4LDEuMDA0NTIsLjgxMjA5LC45OTI0NywuODkxODEsMS4yMzUxNiwuOTkwMTgsLjk0ODIsLjk5MDE4LC44OTE4MSwuNzMyMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg4ODQ0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTQ2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTY3NjYsMSwxLDEsMSwxLDEsLjk0MjU4LC45ODk4NiwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMTg2LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4yNTY2LDEuMjU2NiwxLjI1NjYsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC42OTA0MywxLjAzODA5LDEsMSwxLjAxNzYsMS4wMTc2LDEuMTE1MjMsMS40OTU2LDIuMDE0NjIsLjk5MzMxLC44MjYxNiwuOTExMzMsLjg0Mjg2LC45MTEzMywxLDEsMSwuNzA1MDgsMSwxLjIzMTA4LC43OTgwMSwuODQ0MjYsLjg0NDI2LC43NzQsLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4yODgwOSwxLjU1NDY5LC45NDQzNCwxLjA3ODA2LDEsLjk3MDk0LC43NTg5LC44NTI4NCwuOTA3NDcsMS4xOTY1OCwuNjk4MjUsLjk3NjIyLDEuMzM1MTIsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjAzMzYsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1ODU5LDEuMDU4NTksMSwxLDEsMS4wNzE4NSwuOTk0MTMsLjk2MzM0LDEuMDgwNjUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxBaT17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sa2k9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAzMzc0LC45OTk3NywxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA0MiwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDM4MjgsMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwxLjAwMDYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTMsLjk5OTgsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLDEuMDAwMTYsLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsMS4wMDAyNiwuODEyMSwxLjAwMDI2LC45OTk5OCwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDYsLjk5OTczLC45OTk3NywuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLjAwMDM0LC45OTk3NywxLC45OTk5NywxLjAwMDI2LDEuMDAwNzgsMS4wMDAzNiwuOTk5NzMsMS4wMDAxMywxLjAwMDYsLjk5OTc3LC45OTk3NywuOTk5ODgsLjg1MTQ4LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsLjk5OTc3LDEuMDAwMDEsLjk5OTk5LC45OTk3NywxLjAwMDY5LDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsLjk5OTg0LDEuMDAwMjYsMS4wMDAwMSwxLjAwMDI0LDEuMDAwMDEsLjk5OTksMSwxLjAwMDYsMS4wMDAwMSwxLjAwMDQxLC45OTk2MiwxLjAwMDI2LDEuMDAwNiwuOTk5OTUsMS4wMDA0MSwuOTk5NDIsLjk5OTczLC45OTkyNywxLjAwMDgyLC45OTkwMiwxLjAwMDI2LDEuMDAwODcsMS4wMDA2LDEuMDAwNjksLjk5OTczLC45OTg2NywuOTk5NzMsLjk5OTMsMS4wMDAyNiwxLjAwMDQ5LDEuMDAwNTYsMSwuOTk5ODgsLjk5OTM1LC45OTk5NSwuOTk5NTQsMS4wMDA1NSwuOTk5NDUsMS4wMDAzMiwxLjAwMDYsLjk5OTk1LDEuMDAwMjYsLjk5OTk1LDEuMDAwMzIsMS4wMDAwMSwxLjAwMDA4LC45OTk3MSwxLjAwMDE5LC45OTk0LDEuMDAwMDEsMS4wMDA2LDEuMDAwNDQsLjk5OTczLDEuMDAwMjMsMS4wMDA0NywxLC45OTk0MiwuOTk1NjEsLjk5OTg5LDEuMDAwMzUsLjk5OTc3LDEuMDAwMzUsLjk5OTc3LDEuMDAwMTksLjk5OTQ0LDEuMDAwMDEsMS4wMDAyMSwuOTk5MjYsMS4wMDAzNSwxLjAwMDM1LC45OTk0MiwxLjAwMDQ4LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDM1LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTg5LDEuMDAwNTcsMS4wMDAwMSwuOTk5MzYsMS4wMDA1MiwxLjAwMDEyLC45OTk5NiwxLjAwMDQzLDEsMS4wMDAzNSwuOTk5NCwuOTk5NzYsMS4wMDAzNSwuOTk5NzMsMS4wMDA1MiwxLjAwMDQxLDEuMDAxMTksMS4wMDAzNywuOTk5NzMsMS4wMDAwMiwuOTk5ODYsMS4wMDA0MSwxLjAwMDQxLC45OTkwMiwuOTk5NiwxLjAwMDM0LC45OTk5OSwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LC45OTk3MywxLjAwMDUyLC45OTk3MywxLC45OTk3MywxLjAwMDQxLDEuMDAwNzUsLjk5OTQsMS4wMDAzLC45OTk5OSwxLDEuMDAwNDEsLjk5OTU1LDEsLjk5OTE1LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMTE5LC45OTk1NSwuOTk5NzMsMS4wMDA2LC45OTkxMSwxLjAwMDYsMS4wMDAyNiwuOTk5NzIsMS4wMDAyNiwuOTk5MDIsMS4wMDA0MSwuOTk5NzMsLjk5OTk5LDEsMSwxLjAwMDM4LDEuMDAwNSwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLDEsLjk5OTczLDEsMSwuOTk5NTUsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEsMSwxLC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMTA2LC45OTk5OSwuOTk5OTgsLjk5OTk4LC45OTk5OSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsLjk5OTcxLDEuMDAwNDcsMS4wMDAyMywxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLDEsMSwxLDEsMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxDaT17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sdmk9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAwNDQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAxMDExLDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3NywxLDEsMS4wMDAyNiwuOTk5NjksLjk5OTcyLC45OTk4MSwuOTk5OCwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLC45MTE1NSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTY2LDEuMDAwMjIsMS4wMDAzMiwxLjAwMDAxLC45OTk0NCwxLjAwMDI2LDEuMDAwMDEsLjk5OTY4LDEuMDAwMDEsMS4wMDA0NywxLDEuMDAwNiwxLjAwMDAxLC45OTk4MSwxLjAwMTAxLDEuMDAwMjYsMS4wMDA2LC45OTk0OCwuOTk5ODEsMS4wMDA2NCwuOTk5NzMsLjk5OTQyLDEuMDAxMDEsMS4wMDA2MSwxLjAwMDI2LDEuMDAwNjksMS4wMDA2LDEuMDAwMTQsLjk5OTczLDEuMDEzMjIsLjk5OTczLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDEyLC45OTkyMywxLDEuMDAwNjQsMS4wMDA3NiwuOTk5NDgsMS4wMDA1NSwxLjAwMDYzLDEuMDAwMDcsLjk5OTQzLDEuMDAwNiwuOTk5NDgsMS4wMDAyNiwuOTk5NDgsLjk5OTQzLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI5LDEuMDAwMzgsMS4wMDAzNSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3OCwxLjAwMDAxLDEuMDAwNTcsLjk5OTg5LC45OTk2NywuOTk5NjQsLjk5OTY3LC45OTk3NywuOTk5OTksLjk5OTc3LDEuMDAwMzgsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwNjYsLjk5OTY3LC45OTk2NywxLjAwMDQxLC45OTk5OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsLjk5OTY3LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTY0LDEuMDAwMzEsMS4wMDAwMSwuOTk5OTksLjk5OTk5LDEsMS4wMDAyMywxLDEsLjk5OTk5LDEuMDAwMzUsMS4wMDAwMSwuOTk5OTksLjk5OTczLC45OTk3NywuOTk5OTksMS4wMDA1OCwuOTk5NzMsLjk5OTczLC45OTk1NSwuOTk5NSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAzMiwuOTk5ODksMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLC40NTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAwMSwuOTk5OTksLjk5OTgyLC45OTk5NCwuOTk5OTYsMSwxLjAwMDQyLDEuMDAwNDQsMS4wMDAyOSwxLjAwMDIzLC45OTk3MywuOTk5NzMsMS4wMDAyNiwuOTk5NDksMS4wMDAwMiwuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45ODY4NSwuOTk5NzMsMS4wMDAyNiwxLDEsLjk5OTY2LDEuMDAwNDQsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MSwuOTk5NzgsMSwxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDk4LDEsMSwxLDEuMDAwNDksMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxGaT17bGluZUhlaWdodDoxLjM1LGxpbmVHYXA6LjJ9LElpPVsuNzYxMTYsMSwxLDEuMDAwNiwxLjAwMDYsMS4wMDAwNiwuOTk5NzMsLjk5OTczLC45OTk4MiwxLjAwMDAxLDEuMDAwNDMsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLC45OTk3MywuOTk5ODcsMS4wMDAwMSwxLjAwMDAxLC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwxLDEuMDAwMDEsLjk5OTczLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk0OSwuOTk5NzMsLjk5OTk4LC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTkyNCwuOTk5MjQsMSwuOTk5MjQsLjk5OTk5LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDYsLjk5OTczLDEsLjk5OTc3LDEsMSwxLDEuMDAwMDUsMS4wMDA5LDEuMDAwMDUsMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwOSwuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTgsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwxLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDY0MDksMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsMSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMS4wMjg4LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwuOTk5NDYsMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDYzMTEsLjk5OTczLDEuMDAwMjQsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDQxLC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg5NTQ3LDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDU0LC45OTk3NywxLjAwMDg0LDEuMDAwMDcsLjk5OTczLDEuMDAwMTMsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwuOTk5NDUsLjkxMjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTMzLDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMSwxLjAwMDAxLDEuMDAwNTIsMSwxLjAwMDYsMS4wMDAwMSwuOTk5NDUsLjk5ODk3LC45OTk2OCwuOTk5MjQsMS4wMDAzNiwuOTk5NDUsLjk5OTQ5LDEsMS4wMDA2LC45OTg5NywuOTk5MTgsLjk5OTY4LC45OTkxMSwuOTk5MjQsMSwuOTk5NjIsMS4wMTQ4NywxLDEuMDAwNSwuOTk5NzMsMS4wMDAxMiwxLjAwMDQzLDEsLjk5OTk1LC45OTk5NCwxLjAwMDM2LC45OTk0NywxLjAwMDE5LDEuMDAwNjMsMS4wMDAyNSwuOTk5MjQsMS4wMDAzNiwuOTk5NzMsMS4wMDAzNiwxLjAwMDI1LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI3LDEuMDAwMSwxLjAwMDY4LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLDEuMDAwMDgsLjk5OTU3LC45OTk3MiwuOTk5NCwuOTk5NTQsLjk5OTc1LDEuMDAwNTEsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsMS4wMDAxLC45OTk4NiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAzOCwuOTk5NTQsLjk5OTU0LC45OTk0LDEuMDAwNjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwNTQsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NzUsMS4wMDAxLDEuMDAwMDEsLjk5OTkzLC45OTk1LC45OTk1NSwxLjAwMDE2LC45OTk3OCwuOTk5NzQsMS4wMDAxOSwxLjAwMDIyLC45OTk1NSwxLjAwMDUzLC45OTk3MywxLjAwMDg5LDEuMDAwMDUsLjk5OTY3LDEuMDAwNDgsLjk5OTczLDEuMDAwMDIsMS4wMDAzNCwuOTk5NzMsLjk5OTczLC45OTk2NCwxLjAwMDA2LDEuMDAwNjYsLjk5OTQ3LC45OTk3MywuOTg4OTQsLjk5OTczLDEsLjQ0ODk4LDEsLjk5OTQ2LDEsMS4wMDAzOSwxLjAwMDgyLC45OTk5MSwuOTk5OTEsLjk5OTg1LDEuMDAwMjIsMS4wMDAyMywxLjAwMDYxLDEuMDAwMDYsLjk5OTY2LC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwMTksMS4wMDA4LDEsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTgzLDEuMDAwNDQsLjk5OTczLC45OTk2NCwuOTgzMzIsMSwuOTk5NzMsMSwxLC45OTk2MiwuOTk4OTUsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAyNjcsLjk5OTk5LC45OTk5OCwuOTk5OTgsMSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsMS4wMDQyMywuOTk5MjUsLjk5OTk5LDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwNDksMSwxLjAwMjQ1LDEsMSwxLDEsLjk2MzI5LDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsLjgyNTQsMS4wMDAxNSwxLDEuMDAwMzUsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsMS4wMDAwMywxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLFRpPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn0sT2k9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjA0NTk2LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwxLjAwMDE5LDEuMDAwMzQsMSwuOTk5MjQsMS4wMDAwMSwxLDEsLjk5OTczLC45OTkyNCwuOTk5NzMsLjk5OTI0LC45OTk3MywxLjAyNTcyLC45OTk3MywxLjAwMDA1LC45OTk3MywuOTk5MjQsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTk5LC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg0NTMzLDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTkyOCwxLC45OTk3NywxLjAwMDEzLDEuMDAwNTUsLjk5OTQ3LC45OTk0NSwuOTk5NDEsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDQsLjkxNjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDA1LC45OTk5OSwuOTk5NzcsMS4wMDAxNSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk3MywxLjAwMDI2LDEuMDAwMDEsMS4wMDAxOSwxLjAwMDAxLC45OTk0NiwxLDEuMDAwNiwxLjAwMDAxLC45OTk3OCwxLjAwMDQ1LC45OTk3MywuOTk5MjQsMS4wMDAyMywuOTk5NzgsLjk5OTY2LDEsMS4wMDA2NSwxLjAwMDQ1LDEuMDAwMTksLjk5OTczLC45OTk3MywuOTk5MjQsMSwxLC45NjQ5OSwxLDEuMDAwNTUsLjk5OTczLDEuMDAwMDgsMS4wMDAyNywxLC45OTk3LC45OTk5NSwxLjAwMDIzLC45OTkzMywxLjAwMDE5LDEuMDAwMTUsMS4wMDAzMSwuOTk5MjQsMS4wMDAyMywuOTk5NzMsMS4wMDAyMywxLjAwMDMxLDEuMDAwMDEsLjk5OTI4LDEuMDAwMjksMS4wMDA5MiwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLC45OTk4OCwuOTk5NzUsMSwxLjAwMDgyLC45OTU2MSwuOTk5NiwxLjAwMDM1LDEuMDAwMDEsLjk5OTYyLDEuMDAwMDEsMS4wMDA5MiwuOTk5NjQsMS4wMDAwMSwuOTk5NjMsLjk5OTk5LDEuMDAwMzUsMS4wMDAzNSwxLjAwMDgyLC45OTk2MiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk2LC45OTk2NywxLjAwMDAxLDEuMDAwMzQsMS4wMDA3NCwxLjAwMDU0LDEuMDAwNTMsMS4wMDA2MywuOTk5NzEsLjk5OTYyLDEuMDAwMzUsLjk5OTc1LC45OTk3NywuOTk5NzMsMS4wMDA0MywuOTk5NTMsMS4wMDA3LC45OTkxNSwuOTk5NzMsMS4wMDAwOCwuOTk4OTIsMS4wMDA3MywxLjAwMDczLDEuMDAxMTQsLjk5OTE1LDEuMDAwNzMsLjk5OTU1LC45OTk3MywxLjAwMDkyLC45OTk3MywxLC45OTk5OCwxLDEuMDAwMywxLDEuMDAwNDMsMS4wMDAwMSwuOTk5NjksMS4wMDAzLDEsMS4wMDAzNSwxLjAwMDAxLC45OTk1LDEsMS4wMDA5MiwuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDcsLjk5OTUsMSwuOTk5MjQsMS4wMDA2LC45OTkyNCwuOTk5NzIsMS4wMDA2MiwuOTk5NzMsMS4wMDExNCwxLjAwMDczLDEsLjk5OTU1LDEsMSwxLjAwMDQ3LC45OTk2OCwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsLjk5OTI1LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTUzMTcsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sTWk9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LERpPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzE5LDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODUsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzODUsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw0NjUsNzIyLDMzMyw4NTMsOTA2LDQ3NCw4MjUsOTI3LDgzOCwyNzgsNzIyLDcyMiw2MDEsNzE5LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY0NCw3NzgsNzIyLDY2Nyw2MDAsNjExLDY2Nyw4MjEsNjY3LDgwOSw4MDIsMjc4LDY2Nyw2MTUsNDUxLDYxMSwyNzgsNTgyLDYxNSw2MTAsNTU2LDYwNiw0NzUsNDYwLDYxMSw1NDEsMjc4LDU1OCw1NTYsNjEyLDU1Niw0NDUsNjExLDc2Niw2MTksNTIwLDY4NCw0NDYsNTgyLDcxNSw1NzYsNzUzLDg0NSwyNzgsNTgyLDYxMSw1ODIsODQ1LDY2Nyw2NjksODg1LDU2Nyw3MTEsNjY3LDI3OCwyNzYsNTU2LDEwOTQsMTA2Miw4NzUsNjEwLDcyMiw2MjIsNzE5LDcyMiw3MTksNzIyLDU2Nyw3MTIsNjY3LDkwNCw2MjYsNzE5LDcxOSw2MTAsNzAyLDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MjIsODU0LDY2Nyw3MzAsNzAzLDEwMDUsMTAxOSw4NzAsOTc5LDcxOSw3MTEsMTAzMSw3MTksNTU2LDYxOCw2MTUsNDE3LDYzNSw1NTYsNzA5LDQ5Nyw2MTUsNjE1LDUwMCw2MzUsNzQwLDYwNCw2MTEsNjA0LDYxMSw1NTYsNDkwLDU1Niw4NzUsNTU2LDYxNSw1ODEsODMzLDg0NCw3MjksODU0LDYxNSw1NTIsODU0LDU4Myw1NTYsNTU2LDYxMSw0MTcsNTUyLDU1NiwyNzgsMjgxLDI3OCw5NjksOTA2LDYxMSw1MDAsNjE1LDU1Niw2MDQsNzc4LDYxMSw0ODcsNDQ3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDEwOTQsNTU2LDg4NSw0ODksMTExNSwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLEJpPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXSxSaT1bMzY1LDAsMzMzLDI3OCwzMzMsNDc0LDU1Niw1NTYsODg5LDcyMiwyMzgsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMzMzLDMzMyw1ODQsNTg0LDU4NCw2MTEsOTc1LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDU1Niw3MjIsNjExLDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMzMzLDI3OCwzMzMsNTg0LDU1NiwzMzMsNTU2LDYxMSw1NTYsNjExLDU1NiwzMzMsNjExLDYxMSwyNzgsMjc4LDU1NiwyNzgsODg5LDYxMSw2MTEsNjExLDYxMSwzODksNTU2LDMzMyw2MTEsNTU2LDc3OCw1NTYsNTU2LDUwMCwzODksMjgwLDM4OSw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyODAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1NTYsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNzIyLDcyMiw3MjIsNzIyLDcyMiw3MjIsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDU0OSw2MTEsNjExLDYxMSw2MTEsNjExLDU1Niw2MTEsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDc0MCw3MjIsNjExLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDcyMiw2MTEsNzIyLDYxMSwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsNzgyLDU1Niw1NTYsMjc4LDcyMiw1NTYsNTU2LDYxMSwyNzgsNjExLDI3OCw2MTEsMzk2LDYxMSw0NzksNjExLDI3OCw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MDgsNzIzLDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSwxZTMsOTQ0LDcyMiwzODksNzIyLDM4OSw3MjIsMzg5LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjExLDMzMyw2MTEsNDc5LDYxMSwzMzMsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsOTQ0LDc3OCw2NjcsNTU2LDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyNzgsNTU2LDcyMiw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1NTYsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDcyMiwzMzMsODU0LDkwNiw0NzMsODQ0LDkzMCw4NDcsMjc4LDcyMiw3MjIsNjEwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDcyMiw2NjcsODMzLDcyMiw2NTcsNzc4LDcxOCw2NjcsNTkwLDYxMSw2NjcsODIyLDY2Nyw4MjksNzgxLDI3OCw2NjcsNjIwLDQ3OSw2MTEsMjc4LDU5MSw2MjAsNjIxLDU1Niw2MTAsNDc5LDQ5Miw2MTEsNTU4LDI3OCw1NjYsNTU2LDYwMyw1NTYsNDUwLDYxMSw3MTIsNjA1LDUzMiw2NjQsNDA5LDU5MSw3MDQsNTc4LDc3Myw4MzQsMjc4LDU5MSw2MTEsNTkxLDgzNCw2NjcsNjY3LDg4Niw2MTQsNzE5LDY2NywyNzgsMjc4LDU1NiwxMDk0LDEwNDIsODU0LDYyMiw3MTksNjc3LDcxOSw3MjIsNzA4LDcyMiw2MTQsNzIyLDY2Nyw5MjcsNjQzLDcxOSw3MTksNjE1LDY4Nyw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjc3LDc4MSw2NjcsNzI5LDcwOCw5NzksOTg5LDg1NCwxZTMsNzA4LDcxOSwxMDQyLDcyOSw1NTYsNjE5LDYwNCw1MzQsNjE4LDU1Niw3MzYsNTEwLDYxMSw2MTEsNTA3LDYyMiw3NDAsNjA0LDYxMSw2MTEsNjExLDU1Niw4ODksNTU2LDg4NSw1NTYsNjQ2LDU4Myw4ODksOTM1LDcwNyw4NTQsNTk0LDU1Miw4NjUsNTg5LDU1Niw1NTYsNjExLDQ2OSw1NjMsNTU2LDI3OCwyNzgsMjc4LDk2OSw5MDYsNjExLDUwNyw2MTksNTU2LDYxMSw3NzgsNjExLDU3NSw0NjcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTEwNCw1NTYsODg1LDUxNiwxMTQ2LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCw5OTksNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM10sTmk9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLEVpPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYyNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzMzLDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjgxLDU1Niw0MDAsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MTUsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzU0LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg5LDg0NiwzODksNzk0LDg2NSw3NzUsMjIyLDY2Nyw2NjcsNTcwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjcsODMzLDcyMiw2NDgsNzc4LDcyNSw2NjcsNjAwLDYxMSw2NjcsODM3LDY2Nyw4MzEsNzYxLDI3OCw2NjcsNTcwLDQzOSw1NTUsMjIyLDU1MCw1NzAsNTcxLDUwMCw1NTYsNDM5LDQ2Myw1NTUsNTQyLDIyMiw1MDAsNDkyLDU0OCw1MDAsNDQ3LDU1Niw2NzAsNTczLDQ4Niw2MDMsMzc0LDU1MCw2NTIsNTQ2LDcyOCw3NzksMjIyLDU1MCw1NTYsNTUwLDc3OSw2NjcsNjY3LDg0Myw1NDQsNzA4LDY2NywyNzgsMjc4LDUwMCwxMDY2LDk4Miw4NDQsNTg5LDcxNSw2MzksNzI0LDY2Nyw2NTEsNjY3LDU0NCw3MDQsNjY3LDkxNyw2MTQsNzE1LDcxNSw1ODksNjg2LDgzMyw3MjIsNzc4LDcyNSw2NjcsNzIyLDYxMSw2MzksNzk1LDY2Nyw3MjcsNjczLDkyMCw5MjMsODA1LDg4Niw2NTEsNjk0LDEwMjIsNjgyLDU1Niw1NjIsNTIyLDQ5Myw1NTMsNTU2LDY4OCw0NjUsNTU2LDU1Niw0NzIsNTY0LDY4Niw1NTAsNTU2LDU1Niw1NTYsNTAwLDgzMyw1MDAsODM1LDUwMCw1NzIsNTE4LDgzMCw4NTEsNjIxLDczNiw1MjYsNDkyLDc1Miw1MzQsNTU2LDU1Niw1NTYsMzc4LDQ5Niw1MDAsMjIyLDIyMiwyMjIsOTEwLDgyOCw1NTYsNDcyLDU2NSw1MDAsNTU2LDc3OCw1NTYsNDkyLDMzOSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwODMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsOTk4LDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODQsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XSxQaT1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sX2k9WzM2NSwwLDMzMywyNzgsMjc4LDM1NSw1NTYsNTU2LDg4OSw2NjcsMTkxLDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsNTg0LDU4NCw1ODQsNTU2LDEwMTUsNjY3LDY2Nyw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTAwLDY2Nyw1NTYsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwyNzgsMjc4LDI3OCw0NjksNTU2LDMzMyw1NTYsNTU2LDUwMCw1NTYsNTU2LDI3OCw1NTYsNTU2LDIyMiwyMjIsNTAwLDIyMiw4MzMsNTU2LDU1Niw1NTYsNTU2LDMzMyw1MDAsMjc4LDU1Niw1MDAsNzIyLDUwMCw1MDAsNTAwLDMzNCwyNjAsMzM0LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI2MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDUzNywyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1MDAsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTQ5LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTAwLDU1Niw1MDAsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNjE1LDcyMiw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzIyLDU1Niw3MjIsNTU2LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyMjIsMjc4LDI3OCw3MzUsNDQ0LDUwMCwyMjIsNjY3LDUwMCw1MDAsNTU2LDIyMiw1NTYsMjIyLDU1NiwyOTIsNTU2LDMzNCw1NTYsMjIyLDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDYwNCw3MjMsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDFlMyw5NDQsNzIyLDMzMyw3MjIsMzMzLDcyMiwzMzMsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2MTEsMjc4LDYxMSwzNzUsNjExLDI3OCw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw5NDQsNzIyLDY2Nyw1MDAsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDIyMiw1NTYsNjY3LDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDUwMCw2MTEsMjc4LDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNjY3LDI3OCw3ODQsODM4LDM4NCw3NzQsODU1LDc1MiwyMjIsNjY3LDY2Nyw1NTEsNjY4LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNjY3LDY2OCw4MzMsNzIyLDY1MCw3NzgsNzIyLDY2Nyw2MTgsNjExLDY2Nyw3OTgsNjY3LDgzNSw3NDgsMjc4LDY2Nyw1NzgsNDQ2LDU1NiwyMjIsNTQ3LDU3OCw1NzUsNTAwLDU1Nyw0NDYsNDQxLDU1Niw1NTYsMjIyLDUwMCw1MDAsNTc2LDUwMCw0NDgsNTU2LDY5MCw1NjksNDgyLDYxNywzOTUsNTQ3LDY0OCw1MjUsNzEzLDc4MSwyMjIsNTQ3LDU1Niw1NDcsNzgxLDY2Nyw2NjcsODY1LDU0Miw3MTksNjY3LDI3OCwyNzgsNTAwLDEwNTcsMTAxMCw4NTQsNTgzLDcyMiw2MzUsNzE5LDY2Nyw2NTYsNjY3LDU0Miw2NzcsNjY3LDkyMyw2MDQsNzE5LDcxOSw1ODMsNjU2LDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MzUsNzYwLDY2Nyw3NDAsNjY3LDkxNyw5MzgsNzkyLDg4NSw2NTYsNzE5LDEwMTAsNzIyLDU1Niw1NzMsNTMxLDM2NSw1ODMsNTU2LDY2OSw0NTgsNTU5LDU1OSw0MzgsNTgzLDY4OCw1NTIsNTU2LDU0Miw1NTYsNTAwLDQ1OCw1MDAsODIzLDUwMCw1NzMsNTIxLDgwMiw4MjMsNjI1LDcxOSw1MjEsNTEwLDc1MCw1NDIsNTU2LDU1Niw1NTYsMzY1LDUxMCw1MDAsMjIyLDI3OCwyMjIsOTA2LDgxMiw1NTYsNDM4LDU1OSw1MDAsNTUyLDc3OCw1NTYsNDg5LDQxMSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwNzMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XSxqaT1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sWGk9WzEuMzY4OTgsMSwxLC43MjcwNiwuODA0NzksLjgzNzM0LC45ODg5NCwuOTk3OTMsLjk4OTcsLjkzODg0LC44NjIwOSwuOTQyOTIsLjk0MjkyLDEuMTY2NjEsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE5MTM3LC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43Mjg1MSwuNzg5NjYsLjkwODM4LC44MzYzNywuODIzOTEsLjk2Mzc2LC44MDA2MSwuODYyNzUsLjg3NjgsLjk1NDA3LDEuMDI1OCwuNzM5MDEsLjg1MDIyLC44MzY1NSwxLjAxNTYsLjk1NTQ2LC45MjE3OSwuODcxMDcsLjkyMTc5LC44MjExNCwuODA5NiwuODk3MTMsLjk0NDM4LC45NTM1MywuOTQwODMsLjkxOTA1LC45MDQwNiwuOTQ0NiwuOTQyOTIsMS4xODc3NywuOTQyOTIsMS4wMjA1OCwuODk5MDMsLjkwMDg4LC45NDkzOCwuOTc4OTgsLjgxMDkzLC45NzU3MSwuOTQ5MzgsMS4wMjQsLjk1NzcsLjk1OTMzLC45ODYyMSwxLjA0NzQsLjk3NDU1LC45ODk4MSwuOTY3MiwuOTU5MzMsLjk0NDYsLjk3ODk4LC45NzQwNywuOTc2NDYsLjc4MDM2LDEuMTAyMDgsLjk1NDQyLC45NTI5OCwuOTc1NzksLjkzMzIsLjk0MDM5LC45MzgsLjgwNjg3LDEuMDExNDksLjgwNjg3LDEuMDIwNTgsLjgwNDc5LC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywxLjAxMTQ5LDEuMDA4NzIsLjkwMDg4LC45MTg4MiwxLjAyMTMsLjgzNjEsMS4wMjA1OCwuNjIyOTUsLjU0MzI0LC44OTAyMiwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTc0NTUsLjkzNTgyLC45MDA4OCwxLDEuMDU2ODYsLjgzNjEsLjk5NjQyLC45OTY0MiwuOTk2NDIsLjcyODUxLC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC44NjgsLjgyMzkxLC44MDA2MSwuODAwNjEsLjgwMDYxLC44MDA2MSwxLjAyNTgsMS4wMjU4LDEuMDI1OCwxLjAyNTgsLjk3NDg0LC45NTU0NiwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksLjkyMTc5LDEuMDIwNTgsLjkyMTc5LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45NDQzOCwuOTA0MDYsLjg2OTU4LC45ODIyNSwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTAzMSwuODEwOTMsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45ODYyMSwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTM5NjksLjk1OTMzLC45NDQ2LC45NDQ2LC45NDQ2LC45NDQ2LC45NDQ2LDEuMDg1OTUsLjk0NDYsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk1NDQyLC45NDAzOSwuOTc4OTgsLjk0MDM5LC45MDgzOCwuOTQ5MzgsLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjk2Mzc2LC44NDMxMywuOTc0ODQsLjk3NTcxLC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODc2OCwuOTU3NywuODc2OCwuOTU3NywuODc2OCwuOTU3NywxLDEsLjk1NDA3LC45NTkzMywuOTcwNjksLjk1OTMzLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwuODg3LDEuMDE1OTEsLjczOTAxLDEuMDQ3NCwxLDEsLjk3NDU1LC44MzY1NSwuOTg5ODEsMSwxLC44MzY1NSwuNzM5NzcsLjgzNjU1LC43MzkwMywuODQ2MzgsMS4wMzMsLjk1NTQ2LC45NTkzMywxLDEsLjk1NTQ2LC45NTkzMywuODI3MSwuOTU0MTcsLjk1OTMzLC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkyMTc5LC45NDQ2LC45MzYsLjkxOTY0LC44MjExNCwuOTc2NDYsMSwxLC44MjExNCwuOTc2NDYsLjgwOTYsLjc4MDM2LC44MDk2LC43ODAzNiwxLDEsLjgwOTYsLjc4MDM2LDEsMSwuODk3MTMsLjc3NDUyLC44OTcxMywxLjEwMjA4LC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDA4MywuOTc1NzksLjkwNDA2LC45NDAzOSwuOTA0MDYsLjk0NDYsLjkzOCwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsMSwuOTk3OTMsLjkwODM4LC45NDkzOCwuODY4LC45MDMxLC45MjE3OSwuOTQ0NiwxLDEsLjg5NzEzLDEuMTAyMDgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwOTg5LC45MzU4LC45MTk0NSwuODMxODEsLjc1MjYxLC44Nzk5MiwuODI5NzYsLjk2MDM0LC44MzY4OSwuOTcyNjgsMS4wMDc4LC45MDgzOCwuODM2MzcsLjgwMTksLjkwMTU3LC44MDA2MSwuOTQ0NiwuOTU0MDcsLjkyNDM2LDEuMDI1OCwuODUwMjIsLjk3MTUzLDEuMDE1NiwuOTU1NDYsLjg5MTkyLC45MjE3OSwuOTIzNjEsLjg3MTA3LC45NjMxOCwuODk3MTMsLjkzNzA0LC45NTYzOCwuOTE5MDUsLjkxNzA5LC45Mjc5NiwxLjAyNTgsLjkzNzA0LC45NDgzNiwxLjAzNzMsLjk1OTMzLDEuMDA3OCwuOTU4NzEsLjk0ODM2LC45NjE3NCwuOTI2MDEsLjk0OTgsLjk4NjA3LC45NTc3NiwuOTU5MzMsMS4wNTQ1MywxLjAwNzgsLjk4Mjc1LC45MzE0LC45NTYxNywuOTE3MDEsMS4wNTk5MywuOTQ0NiwuNzgzNjcsLjk1NTMsMSwuODY4MzIsMS4wMTI4LC45NTg3MSwuOTkzOTQsLjg3NTQ4LC45NjM2MSwuODY3NzQsMS4wMDc4LC45NTg3MSwuOTQ0NiwuOTU4NzEsLjg2Nzc0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk0MDgzLC45NzU3OSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjkwNDA2LC45NDAzOSwuOTY2OTQsMSwuODk5MDMsMSwxLDEsLjkzNTgyLC45MzU4MiwuOTM1ODIsMSwuOTA4LC45MDgsLjkxOCwuOTQyMTksLjk0MjE5LC45NjU0NCwxLDEuMjg1LDEsMSwuODEwNzksLjgxMDc5LDEsMSwuNzQ4NTQsMSwxLDEsMSwuOTk3OTMsMSwxLDEsLjY1LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNzE3MywxLC44MDUzNSwuNzYxNjksMS4wMjA1OCwxLjA3MzIsMS4wNTQ4NiwxLDEsMS4zMDY5MiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE2MTYxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHFpPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSxIaT1bMS4zNjg5OCwxLDEsLjY2MjI3LC44MDc3OSwuODE2MjUsLjk3Mjc2LC45NzI3NiwuOTc3MzMsLjkyMjIyLC44MzI2NiwuOTQyOTIsLjk0MjkyLDEuMTYxNDgsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE3MzM3LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MTU0MSwuNzY4MTMsLjg1NTc2LC44MDU5MSwuODA3MjksLjk0Mjk5LC43NzUxMiwuODM2NTUsLjg2NTIzLC45MjIyMiwuOTg2MjEsLjcxNzQzLC44MTY5OCwuNzk3MjYsLjk4NTU4LC45MjIyMiwuOTA2MzcsLjgzODA5LC45MDYzNywuODA3MjksLjc2NDYzLC44NjI3NSwuOTA2OTksLjkxNjA1LC45MTU0LC44NTMwOCwuODU0NTgsLjkwNTMxLC45NDI5MiwxLjIxMjk2LC45NDI5MiwxLjAyMDU4LC44OTkwMywxLjE4NjE2LC45OTYxMywuOTE2NzcsLjc4MjE2LC45MTY3NywuOTAwODMsLjk4Nzk2LC45MTM1LC45MjE2OCwuOTUzODEsLjk4OTgxLC45NTI5OCwuOTUzODEsLjkzNDU5LC45MjE2OCwuOTE1MTMsLjkyMDA0LC45MTY3NywuOTUwNzcsLjc0OCwxLjA0NTAyLC45MTY3NywuOTIwNjEsLjk0MjM2LC44OTU0NCwuODkzNjQsLjksLjgwNjg3LC44NTc4LC44MDY4NywxLjAyMDU4LC44MDc3OSwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjg1NzgsLjk5OTczLDEuMTg2MTYsLjkxMzM5LDEuMDgwNzQsLjgyODkxLDEuMDIwNTgsLjU1NTA5LC43MTUyNiwuODkwMjIsMS4wODU5NSwxLDEsMS4xODYxNiwxLC45NjczNiwuOTM1ODIsMS4xODYxNiwxLDEuMDQ4NjQsLjgyNzExLC45OTA0MywuOTkwNDMsLjk5MDQzLC43MTU0MSwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODQ1LC44MDcyOSwuNzc1MTIsLjc3NTEyLC43NzUxMiwuNzc1MTIsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45NTk2MSwuOTIyMjIsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LC45MDYzNywxLjAyMDU4LC45MDI1MSwuOTA2OTksLjkwNjk5LC45MDY5OSwuOTA2OTksLjg1NDU4LC44MzY1OSwuOTQ5NTEsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjg1ODExLC43ODIxNiwuOTAwODMsLjkwMDgzLC45MDA4MywuOTAwODMsLjk1MzgxLC45NTM4MSwuOTUzODEsLjk1MzgxLC45MTM1LC45MjE2OCwuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsLjkxNTEzLDEuMDg1OTUsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC45MTY3NywuODkzNjQsLjkyMzMyLC44OTM2NCwuODU1NzYsLjk5NjEzLC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC45NDI5OSwuNzY3ODMsLjk1OTYxLC45MTY3NywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwuODY1MjMsLjkxMzUsMSwxLC45MjIyMiwuOTIxNjgsLjkyMjIyLC45MjE2OCwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjg2MDM2LC45NzA5NiwuNzE3NDMsLjk4OTgxLDEsMSwuOTUyOTgsLjc5NzI2LC45NTM4MSwxLDEsLjc5NzI2LC42ODk0LC43OTcyNiwuNzQzMjEsLjgxNjkxLDEuMDAwNiwuOTIyMjIsLjkyMTY4LDEsMSwuOTIyMjIsLjkyMTY4LC43OTQ2NCwuOTIwOTgsLjkyMTY4LC45MDYzNywuOTE1MTMsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDksLjg3NTE0LC44MDcyOSwuOTUwNzcsMSwxLC44MDcyOSwuOTUwNzcsLjc2NDYzLC43NDgsLjc2NDYzLC43NDgsMSwxLC43NjQ2MywuNzQ4LDEsMSwuODYyNzUsLjcyNjUxLC44NjI3NSwxLjA0NTAyLC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MTU0LC45NDIzNiwuODU0NTgsLjg5MzY0LC44NTQ1OCwuOTA1MzEsLjksLjkwNTMxLC45LC45MDUzMSwuOSwxLC45NzI3NiwuODU1NzYsLjk5NjEzLC44NDUsLjg1ODExLC45MDI1MSwuOTE2NzcsMSwxLC44NjI3NSwxLjA0NTAyLDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMDA4OTksMS4zMDYyOCwuODU1NzYsLjgwMTc4LC42Njg2MiwuNzkyNywuNjkzMjMsLjg4MTI3LC43MjQ1OSwuODk3MTEsLjk1MzgxLC44NTU3NiwuODA1OTEsLjc4MDUsLjk0NzI5LC43NzUxMiwuOTA1MzEsLjkyMjIyLC45MDYzNywuOTg2MjEsLjgxNjk4LC45MjY1NSwuOTg1NTgsLjkyMjIyLC44NTM1OSwuOTA2MzcsLjkwOTc2LC44MzgwOSwuOTQ1MjMsLjg2Mjc1LC44MzUwOSwuOTMxNTcsLjg1MzA4LC44MzM5MiwuOTIzNDYsLjk4NjIxLC44MzUwOSwuOTI4ODYsLjkxMzI0LC45MjE2OCwuOTUzODEsLjkwNjQ2LC45Mjg4NiwuOTA1NTcsLjg2ODQ3LC45MDI3NiwuOTEzMjQsLjg2ODQyLC45MjE2OCwuOTk1MzEsLjk1MzgxLC45MjI0LC44NTQwOCwuOTI2OTksLjg2ODQ3LDEuMDA1MSwuOTE1MTMsLjgwNDg3LC45MzQ4MSwxLC44ODE1OSwxLjA1MjE0LC45MDY0NiwuOTczNTUsLjgxNTM5LC44OTM5OCwuODU5MjMsLjk1MzgxLC45MDY0NiwuOTE1MTMsLjkwNjQ2LC44NTkyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MTc4MiwuOTE3ODIsLjkxNzgyLDEsLjg5NiwuODk2LC44OTYsLjkzMzIsLjkzMzIsLjk1OTczLDEsMS4yNiwxLDEsLjgwNDc5LC44MDE3OCwxLDEsLjg1NjMzLDEsMSwxLDEsLjk3Mjc2LDEsMSwxLC42OTgsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE0NTQyLDEsLjc5MTk5LC43ODY5NCwxLjAyMDU4LDEuMDM0OTMsMS4wNTQ4NiwxLDEsMS4yMzAyNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjIwMDA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLFdpPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSxHaT1bMS4zNjg5OCwxLDEsLjY1NTA3LC44NDk0MywuODU2MzksLjg4NDY1LC44ODQ2NSwuODY5MzYsLjg4MzA3LC44Njk0OCwuODUyODMsLjg1MjgzLDEuMDYzODMsMS4wMjA1OCwuNzU5NDUsLjkyMTksLjc1OTQ1LDEuMTczMzcsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC43NTk0NSwuNzU5NDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjY5MDQ2LC43MDkyNiwuODUxNTgsLjc3ODEyLC43Njg1MiwuODk1OTEsLjcwNDY2LC43NjEyNSwuODAwOTQsLjg2ODIyLC44Mzg2NCwuNzI4LC43NzIxMiwuNzk0NzUsLjkzNjM3LC44NzUxNCwuODU4OCwuNzYwMTMsLjg1ODgsLjcyNDIxLC42OTg2NiwuNzc1OTgsLjg1OTkxLC44MDgxMSwuODc4MzIsLjc4MTEyLC43NzUxMiwuODU2MiwxLjAyMjIsMS4xODQxNywxLjAyMjIsMS4yNzAxNCwuODk5MDMsMS4xNTAxMiwuOTM4NTksLjk0Mzk5LC44NDYsLjk0Mzk5LC44MTQ1MywxLjAxODYsLjk0MjE5LC45NjAxNywxLjAzMDc1LDEuMDIxNzUsLjkxMiwxLjAzMDc1LC45Njk5OCwuOTYwMTcsLjkzODU5LC45NDM5OSwuOTQzOTksLjk1NDkzLC43NDYsMS4xMjY1OCwuOTQ1NzgsLjkxLC45NzksLjg4MiwuODgyLC44MywuODUwMzQsLjgzNTM3LC44NTAzNCwxLjAyMDU4LC43MDg2OSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjgzNTM3LC45MDA4MywxLjE1MDEyLC45MTYxLC45NDU2NSwuNzM1NDEsMS4wMjA1OCwuNTM2MDksLjY5MzUzLC43OTUxOSwxLjA4NTk1LDEsMSwxLjE1MDEyLDEsLjkxOTc0LC43NTk0NSwxLjE1MDEyLDEsLjk0NDYsLjczMzYxLC45MDA1LC45MDA1LC45MDA1LC42Mjg2NCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuNzczLC43Njg1MiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuNzA0NjYsLjgzODY0LC44Mzg2NCwuODM4NjQsLjgzODY0LC45MDU2MSwuODc1MTQsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsMS4wMjA1OCwuODU3NTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjg1OTkxLC43NzUxMiwuNzYwMTMsLjg4MDc1LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC44MDc1LC44NDYsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgxNDUzLC44MjQyNCwuODI0MjQsLjgyNDI0LC44MjQyNCwuOTI3OCwuOTYwMTcsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwxLjA4NTk1LC44NTYyLC45NDU3OCwuOTQ1NzgsLjk0NTc4LC45NDU3OCwuODgyLC45NDU3OCwuODgyLC44NTE1OCwuOTM4NTksLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC44OTU5MSwuODU0NCwuOTA1NjEsLjk0Mzk5LC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuODAwOTQsLjk0MjE5LC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwxLDEsLjg2ODIyLC45NjAxNywuODY4MjIsLjk2MDE3LC44Mzg2NCwuODI0MjQsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwxLjAzMDc1LC44Mzg2NCwuODI0MjQsLjgxNDAyLDEuMDI3MzgsLjcyOCwxLjAyMTc1LDEsMSwuOTEyLC43OTQ3NSwxLjAzMDc1LDEsMSwuNzk0NzUsLjgzOTExLC43OTQ3NSwuNjYyNjYsLjgwNTUzLDEuMDY2NzYsLjg3NTE0LC45NjAxNywxLDEsLjg3NTE0LC45NjAxNywuODY4NjUsLjg3Mzk2LC45NjAxNywuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NTg4LC45Mzg1OSwuODY3LC44NDc1OSwuNzI0MjEsLjk1NDkzLDEsMSwuNzI0MjEsLjk1NDkzLC42OTg2NiwuNzQ2LC42OTg2NiwuNzQ2LDEsMSwuNjk4NjYsLjc0NiwxLDEsLjc3NTk4LC44ODQxNywuNzc1OTgsMS4xMjY1OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODc4MzIsLjk3OSwuNzc1MTIsLjg4MiwuNzc1MTIsLjg1NjIsLjgzLC44NTYyLC44MywuODU2MiwuODMsMSwuODg0NjUsLjg1MTU4LC45Mzg1OSwuNzczLC44MDc1LC44NTc1MSwuODU2MiwxLDEsLjc3NTk4LDEuMTI2NTgsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUzMTMsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4wODEwNiwxLjAzOTAxLC44NTE1OCwuNzcwMjUsLjYyMjY0LC43NjQ2LC42NTM1MSwuODYwMjYsLjY5NDYxLC44OTk0NywxLjAzMDc1LC44NTE1OCwuNzc4MTIsLjc2NDQ5LC44ODgzNiwuNzA0NjYsLjg1NjIsLjg2ODIyLC44NTg4LC44Mzg2NCwuNzcyMTIsLjg1MzA4LC45MzYzNywuODc1MTQsLjgyMzUyLC44NTg4LC44NTcwMSwuNzYwMTMsLjg5MDU4LC43NzU5OCwuODE1NiwuODI1NjUsLjc4MTEyLC43Nzg5OSwuODkzODYsLjgzODY0LC44MTU2LC45NDg2LC45MjM4OCwuOTYxODYsMS4wMzA3NSwuOTExMjMsLjk0ODYsLjkzMjk4LC44NzgsLjkzOTQyLC45MjM4OCwuODQ1OTYsLjk2MTg2LC45NTExOSwxLjAzMDc1LC45MjIsLjg4Nzg3LC45NTgyOSwuODgsLjkzNTU5LC45Mzg1OSwuNzg4MTUsLjkzNzU4LDEsLjg5MjE3LDEuMDM3MzcsLjkxMTIzLC45Mzk2OSwuNzc0ODcsLjg1NzY5LC44Njc5OSwxLjAzMDc1LC45MTEyMywuOTM4NTksLjkxMTIzLC44Njc5OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC44NzMyMSwuODczMjEsLjg3MzIxLDEsMS4wMjcsMS4wMjcsMS4wMjcsLjg2ODQ3LC44Njg0NywuNzkxMjEsMSwxLjEyNCwxLDEsLjczNTcyLC43MzU3MiwxLDEsLjg1MDM0LDEsMSwxLDEsLjg4NDY1LDEsMSwxLC42NjksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0ODI4LDEsLjc0OTQ4LC43NTE4NywxLjAyMDU4LC45ODM5MSwxLjAyMTE5LDEsMSwxLjA2MjMzLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDUyMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0semk9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LCRpPVsxLjM2ODk4LDEsMSwuNzYzMDUsLjgyNzg0LC45NDkzNSwuODkzNjQsLjkyMjQxLC44OTA3MywuOTA3MDYsLjk4NDcyLC44NTI4MywuODUyODMsMS4wNjY0LDEuMDIwNTgsLjc0NTA1LC45MjE5LC43NDUwNSwxLjIzNDU2LC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuNzQ1MDUsLjc0NTA1LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MzAwMiwuNzI2MDEsLjkxNzU1LC44MTI2LC44MDMxNCwuOTIyMjIsLjczNzY0LC43OTcyNiwuODMwNTEsLjkwMjg0LC44NjAyMywuNzQsLjgxMjYsLjg0ODY5LC45NjUxOCwuOTExMTUsLjg4NTgsLjc5NzYxLC44ODU4LC43NDQ5OCwuNzM5MTQsLjgxMzYzLC44OTU5MSwuODM2NTksLjg5NjMzLC44NTYwOCwuODExMSwuOTA1MzEsMS4wMjIyLDEuMjI3MzYsMS4wMjIyLDEuMjcwMTQsLjg5OTAzLC45MDA4OCwuODY2NjcsMS4wMjMxLC44OTYsMS4wMTQxMSwuOTAwODMsMS4wNTA5OSwxLjAwNTEyLC45OTc5MywxLjA1MzI2LDEuMDkzNzcsLjkzOCwxLjA2MjI2LDEuMDAxMTksLjk5NzkzLC45ODcxNCwxLjAyMzEsMS4wMTIzMSwuOTgxOTYsLjc5MiwxLjE5MTM3LC45OTA3NCwuOTYyLDEuMDE5MTUsLjkyNiwuOTQyLC44NTYsLjg1MDM0LC45MjAwNiwuODUwMzQsMS4wMjA1OCwuNjkwNjcsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjAwNiwuOTMzMiwuOTAwODgsLjkxODgyLC45MzQ4NCwuNzUzMzksMS4wMjA1OCwuNTY4NjYsLjU0MzI0LC43OTUxOSwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTUzMjUsLjc0NTA1LC45MDA4OCwxLC45NzE5OCwuNzUzMzksLjkxMDA5LC45MTAwOSwuOTEwMDksLjY2NDY2LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC43ODgsLjgwMzE0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC43Mzc2NCwuODYwMjMsLjg2MDIzLC44NjAyMywuODYwMjMsLjkyOTE1LC45MTExNSwuODg1OCwuODg1OCwuODg1OCwuODg1OCwuODg1OCwxLjAyMDU4LC44ODU4LC44OTU5MSwuODk1OTEsLjg5NTkxLC44OTU5MSwuODExMSwuNzk2MTEsLjg5NzEzLC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjkzNiwuODk2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuODQyMjQsLjg0MjI0LC44NDIyNCwuODQyMjQsLjk3Mjc2LC45OTc5MywuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsLjk4NzE0LDEuMDg1OTUsLjg5ODc2LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45OTA3NCwuOTQyLDEuMDIzMSwuOTQyLC45MTc1NSwuODY2NjcsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC45MjIyMiwuOTMzNzIsLjkyOTE1LDEuMDE0MTEsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLDEsMSwuOTAyODQsLjk5NzkzLC45MDk3NiwuOTk3OTMsLjg2MDIzLC44NDIyNCwuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLDEuMDUzMjYsLjg2MDIzLC44NDIyNCwuODI4NzMsMS4wNzQ2OSwuNzQsMS4wOTM3NywxLDEsLjkzOCwuODQ4NjksMS4wNjIyNiwxLDEsLjg0ODY5LC44MzcwNCwuODQ4NjksLjgxNDQxLC44NTU4OCwxLjA4OTI3LC45MTExNSwuOTk3OTMsMSwxLC45MTExNSwuOTk3OTMsLjkxODg3LC45MDk5MSwuOTk3OTMsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODg1OCwuOTg3MTQsLjg5NCwuOTE0MzQsLjc0NDk4LC45ODE5NiwxLDEsLjc0NDk4LC45ODE5NiwuNzM5MTQsLjc5MiwuNzM5MTQsLjc5MiwxLDEsLjczOTE0LC43OTIsMSwxLC44MTM2MywuOTA0LC44MTM2MywxLjE5MTM3LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTYzMywxLjAxOTE1LC44MTExLC45NDIsLjgxMTEsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsMSwuOTIyNDEsLjkxNzU1LC44NjY2NywuNzg4LC44NjkzNiwuODg1OCwuODk4NzYsMSwxLC44MTM2MywxLjE5MTM3LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDM4OCwxLjAzOTAxLC45MjEzOCwuNzgxMDUsLjcxNTQsLjg2MTY5LC44MDUxMywuOTQwMDcsLjgyNTI4LC45ODYxMiwxLjA2MjI2LC45MTc1NSwuODEyNiwuODE4ODQsLjkyODE5LC43Mzc2NCwuOTA1MzEsLjkwMjg0LC44ODU4LC44NjAyMywuODEyNiwuOTExNzIsLjk2NTE4LC45MTExNSwuODMwODksLjg4NTgsLjg3NzkxLC43OTc2MSwuODkyOTcsLjgxMzYzLC44ODE1NywuODk5OTIsLjg1NjA4LC44MTk5MiwuOTQzMDcsLjg2MDIzLC44ODE1NywuOTUzMDgsLjk4Njk5LC45OTc5MywxLjA2MjI2LC45NTgxNywuOTUzMDgsLjk3MzU4LC45MjgsLjk4MDg4LC45ODY5OSwuOTI3NjEsLjk5NzkzLC45NjAxNywxLjA2MjI2LC45ODYsLjk0NCwuOTU5NzgsLjkzOCwuOTY3MDUsLjk4NzE0LC44MDQ0MiwuOTg5NzIsMSwuODk3NjIsMS4wNDU1MiwuOTU4MTcsLjk5MDA3LC44NzA2NCwuOTE4NzksLjg4ODg4LDEuMDYyMjYsLjk1ODE3LC45ODcxNCwuOTU4MTcsLjg4ODg4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuOTIxOSwxLC44OTkwMywxLDEsMSwuOTMxNzMsLjkzMTczLC45MzE3MywxLDEuMDYzMDQsMS4wNjMwNCwxLjA2OTA0LC44OTkwMywuODk5MDMsLjgwNTQ5LDEsMS4xNTYsMSwxLC43NjU3NSwuNzY1NzUsMSwxLC43MjQ1OCwxLDEsMSwxLC45MjI0MSwxLDEsMSwuNjE5LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNzI1NywxLC43NDcwNSwuNzExMTksMS4wMjA1OCwxLjAyNCwxLjAyMTE5LDEsMSwxLjE1MzYsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTYzOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxWaT17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sS2k9WzEuNzY3MzgsMSwxLC45OTI5NywuOTgyNCwxLjA0MDE2LDEuMDY0OTcsMS4wMzQyNCwuOTc1MjksMS4xNzY0NywxLjIzMjAzLDEuMTA4NSwxLjEwODUsMS4xNjkzOSwxLjIxMDcsLjk3NTQsMS4yMTQwOCwuOTc1NCwxLjU5NTc4LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsLjgxMzc4LC44MTM3OCwxLjIxMDcsMS4yMTA3LDEuMjEwNywuNzE3MDMsLjk3ODQ3LC45NzM2MywuODg3NzYsLjg2NDEsMS4wMjA5NiwuNzk3OTUsLjg1MTMyLC45MTQsMS4wNjA4NSwxLjE0MDYsLjgwMDcsLjg5ODU4LC44MzY5MywxLjE0ODg5LDEuMDkzOTgsLjk3NDg5LC45MjA5NCwuOTc0ODksLjkwMzk5LC44NDA0MSwuOTU5MjMsMS4wMDEzNSwxLDEuMDY0NjcsLjk4MjQzLC45MDk5NiwuOTkzNjEsMS4xMDg1LDEuNTY5NDIsMS4xMDg1LDEuMjEwNywuNzQ2MjcsLjk0MjgyLC45Njc1MiwxLjAxNTE5LC44NjMwNCwxLjAxMzU5LC45NzI3OCwxLjE1MTAzLDEuMDEzNTksLjk4NTYxLDEuMDIyODUsMS4wMjI4NSwxLjAwNTI3LDEuMDIyODUsMS4wMzAyLC45OTA0MSwxLjAwMDgsMS4wMTUxOSwxLjAxMzU5LDEuMDIyNTgsLjc5MTA0LDEuMTY4NjIsLjk5MDQxLC45NzQ1NCwxLjAyNTExLC45OTI5OCwuOTY3NTIsLjk1ODAxLC45NDg1NiwxLjE2NTc5LC45NDg1NiwxLjIxMDcsLjk4MjQsMS4wMzQyNCwxLjAzNDI0LDEsMS4wMzQyNCwxLjE2NTc5LC44NzI3LDEuMzg3MSwxLjE4NjIyLDEuMTA4MTgsMS4wNDQ3OCwxLjIxMDcsMS4xODYyMiwuNzUxNTUsLjk0OTk0LDEuMjg4MjYsMS4yMTQwOCwxLjIxNDA4LC45MTA1NiwxLC45MTU3MiwuOTc1NCwuNjQ2NjMsMS4xODMyOCwxLjI0ODY2LDEuMDQ0NzgsMS4xNDE2OSwxLjE1NzQ5LDEuMTczODksLjcxNzAzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45MzUwNiwuODY0MSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwuNzk3OTUsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMDIwOTYsMS4wOTM5OCwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsLjk3NDI2LDEuMjEwNywuOTc0ODksMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwuOTA5OTYsLjkyMDk0LDEuMDI3OTgsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjkzMTM2LC44NjMwNCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwuOTcyNzgsMS4wMjI4NSwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwuOTcxMjIsLjk5MDQxLDEsMSwxLDEsMSwxLjI4ODI2LDEuMDAwOCwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTkwNDEsLjk2NzUyLDEuMDE1MTksLjk2NzUyLC45NzM2MywuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwxLjAyMDk2LDEuMDMwNTcsMS4wMjA5NiwxLjAzNTE3LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LC45MTQsMS4wMTM1OSwxLDEsMS4wNjA4NSwuOTg1NjEsMS4wNjA4NSwxLjAwODc5LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LC45NzEzOCwxLjA4NjkyLC44MDA3LDEuMDIyODUsMSwxLDEuMDA1MjcsLjgzNjkzLDEuMDIyODUsMSwxLC44MzY5MywuOTQ1NSwuODM2OTMsLjkwNDE4LC44MzY5MywxLjEzMDA1LDEuMDkzOTgsLjk5MDQxLDEsMSwxLjA5Mzk4LC45OTA0MSwuOTY2OTIsMS4wOTI1MSwuOTkwNDEsLjk3NDg5LDEuMDAwOCwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjkzOTk0LC45NzkzMSwuOTAzOTksMS4wMjI1OCwxLDEsLjkwMzk5LDEuMDIyNTgsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwxLDEsLjk1OTIzLDEuMDcwMzQsLjk1OTIzLDEuMTY4NjIsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wNjQ2NywxLjAyNTExLC45MDk5NiwuOTY3NTIsLjkwOTk2LC45OTM2MSwuOTU4MDEsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLDEuMDc3MzMsMS4wMzQyNCwuOTczNjMsLjk2NzUyLC45MzUwNiwuOTMxMzYsLjk3NDg5LDEuMDAwOCwxLDEsLjk1OTIzLDEuMTY4NjIsMS4xNTEwMywxLjE1MTAzLDEuMDExNzMsMS4wMzk1OSwuNzU5NTMsLjgxMzc4LC43OTkxMiwxLjE1MTAzLDEuMjE5OTQsLjk1MTYxLC44NzgxNSwxLjAxMTQ5LC44MTUyNSwuNzY3NiwuOTgxNjcsMS4wMTEzNCwxLjAyNTQ2LC44NDA5NywxLjAzMDg5LDEuMTgxMDIsLjk3MzYzLC44ODc3NiwuODUxMzQsLjk3ODI2LC43OTc5NSwuOTkzNjEsMS4wNjA4NSwuOTc0ODksMS4xNDA2LC44OTg1OCwxLjAzODgsMS4xNDg4OSwxLjA5Mzk4LC44NjAzOSwuOTc0ODksMS4wNTk1LC45MjA5NCwuOTQ3OTMsLjk1OTIzLC45MDk5NiwuOTkzNDYsLjk4MjQzLDEuMDIxMTIsLjk1NDkzLDEuMTQwNiwuOTA5OTYsMS4wMzU3NCwxLjAyNTk3LDEuMDAwOCwxLjE4MTAyLDEuMDY2MjgsMS4wMzU3NCwxLjAxOTIsMS4wMTkzMiwxLjAwODg2LC45NzUzMSwxLjAxMDYsMS4wMDA4LDEuMTMxODksMS4xODEwMiwxLjAyMjc3LC45ODY4MywxLjAwMTYsLjk5NTYxLDEuMDcyMzcsMS4wMDA4LC45MDQzNCwuOTk5MjEsLjkzODAzLC44OTY1LDEuMjMwODUsMS4wNjYyOCwxLjA0OTgzLC45NjI2OCwxLjA0OTksLjk4NDM5LDEuMTgxMDIsMS4wNjYyOCwxLjAwMDgsMS4wNjYyOCwuOTg0MzksLjc5Nzk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDk0NjYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk3Mjc4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDIwNjUsMSwxLDEsMSwxLDEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwxLDEuMjE0MDgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wNDM5NCwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwuOTg2MzMsLjk4NjMzLC45ODYzMywuNzMwNDcsLjczMDQ3LDEuMjA2NDIsLjkxMjExLDEuMjU2MzUsMS4yMjIsMS4wMjk1NiwxLjAzMzcyLDEuMDMzNzIsLjk2MDM5LDEuMjQ2MzMsMSwxLjEyNDU0LC45MzUwMywxLjAzNDI0LDEuMTk2ODcsMS4wMzQyNCwxLDEsMSwuNzcxLDEsMSwxLjE1NzQ5LDEuMTU3NDksMS4xNTc0OSwxLjEwOTQ4LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMTY4OTcsMSwuOTYwODUsLjkwMTM3LDEuMjEwNywxLjE4NDE2LDEuMTM5NzMsLjY5ODI1LC45NzE2LDIuMTAzMzksMS4yOTAwNCwxLjI5MDA0LDEuMjExNzIsMS4yOTAwNCwxLjI5MDA0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODg3NCwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMDkxOTMsMS4wOTE5MywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sSmk9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9LFlpPVsxLjc2NzM4LDEsMSwuOTg5NDYsMS4wMzk1OSwxLjA0MDE2LDEuMDI4MDksMS4wMzYsLjk3NjM5LDEuMTA5NTMsMS4yMzIwMywxLjExMTQ0LDEuMTExNDQsMS4xNjkzOSwxLjIxMjM3LC45NzU0LDEuMjEyNjEsLjk3NTQsMS41OTc1NCwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwuODEzNzgsLjgxMzc4LDEuMjEyMzcsMS4yMTIzNywxLjIxMjM3LC43MzU0MSwuOTc4NDcsLjk3MzYzLC44OTcyMywuODc4OTcsMS4wNDI2LC43OTQyOSwuODUyOTIsLjkxMTQ5LDEuMDU4MTUsMS4xNDA2LC43OTYzMSwuOTAxMjgsLjgzODUzLDEuMDQzOTYsMS4xMDYxNSwuOTc1NTIsLjk0NDM2LC45NzU1MiwuODg2NDEsLjgwNTI3LC45NjA4MywxLjAwMTM1LDEsMS4wNjc3NywuOTgxNywuOTExNDIsLjk5MzYxLDEuMTExNDQsMS41NzI5MywxLjExMTQ0LDEuMjEyMzcsLjc0NjI3LDEuMzE4MTgsMS4wNjU4NSwuOTcwNDIsLjgzMDU1LC45NzA0MiwuOTM1MDMsMS4xMjYxLC45NzA0MiwuOTc5MjIsMS4xNDIzNiwuOTQ1NTIsMS4wMTA1NCwxLjE0MjM2LDEuMDI0NzEsLjk3OTIyLC45NDE2NSwuOTcwNDIsLjk3MDQyLDEuMDI3NiwuNzg5MjksMS4xMjYxLC45NzkyMiwuOTU4NzQsMS4wMjE5NywuOTg1MDcsLjk2NzUyLC45NzE2OCwuOTUxMDcsMS4xNjU3OSwuOTUxMDcsMS4yMTIzNywxLjAzOTU5LDEuMDM2LDEuMDM2LDEsMS4wMzYsMS4xNjU3OSwuODczNTcsMS4zMTgxOCwxLjE4NzU0LDEuMjY3ODEsMS4wNTM1NiwxLjIxMjM3LDEuMTg2MjIsLjc5NDg3LC45NDk5NCwxLjI5MDA0LDEuMjQwNDcsMS4yNDA0NywxLjMxODE4LDEsLjkxNDg0LC45NzU0LDEuMzE4MTgsMS4xMzQ5LDEuMjQ4NjYsMS4wNTM1NiwxLjEzOTM0LDEuMTU1NzQsMS4xNzM4OSwuNzM1NDEsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk0Mzg1LC44Nzg5NywuNzk0MjksLjc5NDI5LC43OTQyOSwuNzk0MjksMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMDQyNiwxLjEwNjE1LC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwuOTc1NTIsMS4yMTIzNywuOTc1NTIsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwuOTExNDIsLjk0NDM2LC45ODcyMSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwuOTY3MDUsLjgzMDU1LC45MzUwMywuOTM1MDMsLjkzNTAzLC45MzUwMywxLjE0MjM2LDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LC45MzEyNSwuOTc5MjIsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LC45NDE2NSwxLjI5MDA0LC45NDE2NSwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTc5MjIsLjk2NzUyLC45NzA0MiwuOTY3NTIsLjk3MzYzLDEuMDY1ODUsLjk3MzYzLDEuMDY1ODUsLjk3MzYzLDEuMDY1ODUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwxLjA0MjYsMS4wMDMzLDEuMDQyNiwuOTcwNDIsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC45MTE0OSwuOTcwNDIsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLDEsMSwxLjA1ODE1LC45NzkyMiwxLjA1ODE1LC45NzkyMiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwuOTc0NDEsMS4wNDMwMiwuNzk2MzEsMS4wMTU4MiwxLDEsMS4wMTA1NCwuODM4NTMsMS4xNDIzNiwxLDEsLjgzODUzLDEuMDkxMjUsLjgzODUzLC45MDQxOCwuODM4NTMsMS4xOTUwOCwxLjEwNjE1LC45NzkyMiwxLDEsMS4xMDYxNSwuOTc5MjIsMS4wMTAzNCwxLjEwNDY2LC45NzkyMiwuOTc1NTIsLjk0MTY1LC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTE2MDIsLjkxOTgxLC44ODY0MSwxLjAyNzYsMSwxLC44ODY0MSwxLjAyNzYsLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwxLDEsLjk2MDgzLDEuMDU0MDMsLjk1OTIzLDEuMTY4NjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wNjc3NywxLjAyMTk3LC45MTE0MiwuOTY3NTIsLjkxMTQyLC45OTM2MSwuOTcxNjgsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LDEuMjMxOTksMS4wMzYsLjk3MzYzLDEuMDY1ODUsLjk0Mzg1LC45NjcwNSwuOTc1NTIsLjk0MTY1LDEsMSwuOTYwODMsMS4xMjYxLDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LC45NTE2MSwxLjI3MTI2LDEuMDA4MTEsLjgzMjg0LC43NzcwMiwuOTkxMzcsLjk1MjUzLDEuMDM0NywuODYxNDIsMS4wNzIwNSwxLjE0MjM2LC45NzM2MywuODk3MjMsLjg2ODY5LDEuMDk4MTgsLjc5NDI5LC45OTM2MSwxLjA1ODE1LC45NzU1MiwxLjE0MDYsLjkwMTI4LDEuMDY2NjIsMS4wNDM5NiwxLjEwNjE1LC44NDkxOCwuOTc1NTIsMS4wNDY5NCwuOTQ0MzYsLjk4MDE1LC45NjA4MywuOTExNDIsMS4wMDM1NiwuOTgxNywxLjAxOTQ1LC45ODk5OSwxLjE0MDYsLjkxMTQyLDEuMDQ5NjEsLjk4OTgsMS4wMDYzOSwxLjE0MjM2LDEuMDc1MTQsMS4wNDk2MSwuOTk2MDcsMS4wMjg5NywxLjAwOCwuOTg5OCwuOTUxMzQsMS4wMDYzOSwxLjExMTIxLDEuMTQyMzYsMS4wMDUxOCwuOTc5ODEsMS4wMjE4NiwxLDEuMDg1NzgsLjk0MTY1LC45OTMxNCwuOTgzODcsLjkzMDI4LC45MzM3NywxLjM1MTI1LDEuMDc1MTQsMS4xMDY4NywuOTM0OTEsMS4wNDIzMiwxLjAwMzUxLDEuMTQyMzYsMS4wNzUxNCwuOTQxNjUsMS4wNzUxNCwxLjAwMzUxLC43OTQyOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA5MDk3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MzUwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTY2MDksMSwxLDEsMSwxLDEsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwxLDEuMjEyNjEsLjg5OTAzLDEsMSwuNzUxNTUsMS4wNDc0NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDM5NCwuOTg2MzMsLjk4NjMzLC45ODYzMywuNzI5NTksLjcyOTU5LDEuMjA1MDIsLjkxNDA2LDEuMjY1MTQsMS4yMjIsMS4wMjk1NiwxLjAzMzcyLDEuMDMzNzIsLjk2MDM5LDEuMjQ2MzMsMSwxLjA5MTI1LC45MzMyNywxLjAzMzM2LDEuMTY1NDEsMS4wMzYsMSwxLDEsLjc3MSwxLDEsMS4xNTU3NCwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwuODYzNjQsLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MjI0LDEsMSwxLjE2Nzk4LDEsLjk2MDg1LC45MDA2OCwxLjIxMjM3LDEuMTg0MTYsMS4xMzkwNCwuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTMzOSwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4Nzc1LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMzI2OSwxLjEzMjY5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxaaT17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sUWk9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjE0NzYzLDEuMDUzNjUsMS4wNjIzNCwuOTY5MjcsLjkyNTg2LDEuMTUzNzMsMS4xODQxNCwuOTEzNDksLjkxMzQ5LDEuMDc0MDMsMS4xNzMwOCwuNzgzODMsMS4yMDA4OCwuNzgzODMsMS40MjUzMSwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MzgzLC43ODM4MywxLjE3MzA4LDEuMTczMDgsMS4xNzMwOCwuNzczNDksLjk0NTY1LC45NDcyOSwuODU5NDQsLjg4NTA2LC45ODU4LC43NDgxNywuODAwMTYsLjg4NDQ5LC45ODAzOSwuOTU3ODIsLjY5MjM4LC44OTg5OCwuODMyMzEsLjk4MTgzLDEuMDM5ODksLjk2OTI0LC44NjIzNywuOTY5MjQsLjgwNTk1LC43NDUyNCwuODYwOTEsLjk1NDAyLC45NDE0MywuOTg0NDgsLjg4NTgsLjgzMDg5LC45MzI4NSwxLjA5NDksMS4zOTAxNiwxLjA5NDksMS40NTk5NCwuNzQ2MjcsMS4wNDgzOSwuOTc0NTQsLjk3NDU0LC44NzIwNywuOTc0NTQsLjg3NTMzLDEuMDYxNTEsLjk3NDU0LDEuMDAxNzYsMS4xNjQ4NCwxLjA4MTMyLC45ODA0NywxLjE2NDg0LDEuMDI5ODksMS4wMTA1NCwuOTYyMjUsLjk3NDU0LC45NzQ1NCwxLjA2NTk4LC43OTAwNCwxLjE2MzQ0LDEuMDAzNTEsLjk0NjI5LC45OTczLC45MTAxNiwuOTY3NzcsLjkwNDMsLjkxMDgyLC45MjQ4MSwuOTEwODIsMS4xNzMwOCwuOTU3NDgsLjk2OTI3LC45NjkyNywxLC45NjkyNywuOTI0ODEsLjgwNTk3LDEuMDQ4MzksMS4yMzM5MywxLjE3ODEsLjkyNDUsMS4xNzMwOCwxLjIwODA4LC42MzIxOCwuOTQyNjEsMS4yNDgyMiwxLjA5OTcxLDEuMDk5NzEsMS4wNDgzOSwxLC44NTI3MywuNzgwMzIsMS4wNDgzOSwxLjA5OTcxLDEuMjIzMjYsLjkyNDUsMS4wOTgzNiwxLjEzNTI1LDEuMTUyMjIsLjcwNDI0LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC44NTQ5OCwuODg1MDYsLjc0ODE3LC43NDgxNywuNzQ4MTcsLjc0ODE3LC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTg1OCwxLjAzOTg5LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsMS4xNzMwOCwuOTY5MjQsLjk1NDAyLC45NTQwMiwuOTU0MDIsLjk1NDAyLC44MzA4OSwuODYyMzcsLjg4NDA5LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45MjkxNiwuODcyMDcsLjg3NTMzLC44NzUzMywuODc1MzMsLjg3NTMzLC45MzE0NiwuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTM4NTQsMS4wMTA1NCwuOTYyMjUsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LDEuMjQ4MjIsLjg3NjEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsMS4wMDM1MSwuOTY3NzcsLjk3NDU0LC45Njc3NywuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjk0NzI5LC45NzQ1NCwuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC45ODU4LC45NTM5MSwuOTg1OCwuOTc0NTQsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwuODg0NDksLjk3NDU0LDEsMSwuOTgwMzksMS4wMDE3NiwuOTgwMzksMS4wMDE3NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLC45MzE0NiwuOTU3ODIsMS4xNjQ4NCwuOTU3ODIsLjkzMTQ2LC44NDQyMSwxLjEyNzYxLC42OTIzOCwxLjA4MTMyLDEsMSwuOTgwNDcsLjgzMjMxLDEuMTY0ODQsMSwxLC44NDcyMywxLjA0ODYxLC44NDcyMywuNzg3NTUsLjgzMjMxLDEuMjM3MzYsMS4wMzk4OSwxLjAxMDU0LDEsMSwxLjAzOTg5LDEuMDEwNTQsLjk4NTcsMS4wMzg0OSwxLjAxMDU0LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTY5MjQsLjk2MjI1LC45MjM4MywuOTAxNzEsLjgwNTk1LDEuMDY1OTgsMSwxLC44MDU5NSwxLjA2NTk4LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsMSwxLC44NjA5MSwxLjAyNzU5LC44NTc3MSwxLjE2MzQ0LC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LC44MzA4OSwuOTMyODUsLjkwNDMsLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywxLjMxODY4LC45NjkyNywuOTQ3MjksLjk3NDU0LC44NTQ5OCwuOTI5MTYsLjk2OTI0LC44NzYxLDEsMSwuODYwOTEsMS4xNjM0NCwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwuODE5NjUsLjgxOTY1LC45NDcyOSwuNzgwMzIsLjcxMDIyLC45MDg4MywuODQxNzEsLjk5ODc3LC43NzU5NiwxLjA1NzM0LDEuMiwuOTQ3MjksLjg1OTQ0LC44Mjc5MSwuOTYwNywuNzQ4MTcsLjkzMjg1LC45ODAzOSwuOTY5MjQsLjk1NzgyLC44OTg5OCwuOTgzMTYsLjk4MTgzLDEuMDM5ODksLjc4NjE0LC45NjkyNCwuOTc2NDIsLjg2MjM3LC44NjA3NSwuODYwOTEsLjgzMDg5LC45MDA4MiwuODg1OCwuOTcyOTYsMS4wMTI4NCwuOTU3ODIsLjgzMDg5LDEuMDk3NiwxLjA0LDEuMDMzNDIsMS4yLDEuMDY3NSwxLjA5NzYsLjk4MjA1LDEuMDM4MDksMS4wNTA5NywxLjA0LC45NTM2NCwxLjAzMzQyLDEuMDU0MDEsMS4yLDEuMDIxNDgsMS4wMTE5LDEuMDQ3MjQsMS4wMTI3LDEuMDI3MzIsLjk2MjI1LC44OTY1LC45Nzc4MywuOTM1NzQsLjk0ODE4LDEuMzA2NzksMS4wNjc1LDEuMTE4MjYsLjk5ODIxLDEuMDU1NywxLjAzMjYsMS4yLDEuMDY3NSwuOTYyMjUsMS4wNjc1LDEuMDMyNiwuNzQ4MTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzc1NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODc1MzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk4NzA1LDEsMSwxLDEsMSwxLC45ODQ0OCwuOTk3MywuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC44MzA4OSwuOTY3NzcsMSwxLjIwMDg4LC44OTkwMywxLDEsLjc1MTU1LC45NDk0NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwxLjEyMzE3LDEuMTIzMTcsMS4xMjMxNywuNjc2MDMsLjY3NjAzLDEuMTU2MjEsLjczNTg0LDEuMjExOTEsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44NzcwOSwuOTY5MjcsMS4wMTQ3MywuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjA5ODM2LDEuMDk4MzYsMS4wOTgzNiwxLjAxNTIyLC44NjMyMSwuOTQ0MzQsLjg2NDksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NDM4LDEuMTczMDgsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njc5MSwxLjI0ODIyLDEuMjQ4MjIsMS4xNzMwOCwxLjI0ODIyLDEuMjQ4MjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE3OTg0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMDc0MiwxLjEwNzQyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxlbj17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdG49WzEuNzY3MzgsMSwxLC45ODU5NCwxLjAyMjg1LDEuMTA0NTQsMS4wNjIzNCwuOTY5MjcsLjkyMDM3LDEuMTk5ODUsMS4yMDQ2LC45MDYxNiwuOTA2MTYsMS4wNzE1MiwxLjE3MTQsLjc4MDMyLDEuMjAwODgsLjc4MDMyLDEuNDAyNDYsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODAzMiwuNzgwMzIsMS4xNzE0LDEuMTcxNCwxLjE3MTQsLjgwNTk3LC45NDA4NCwuOTY3MDYsLjg1OTQ0LC44NTczNCwuOTcwOTMsLjc1ODQyLC43OTkzNiwuODgxOTgsLjk4MzEsLjk1NzgyLC43MTM4NywuODY5NjksLjg0NjM2LDEuMDc3OTYsMS4wMzU4NCwuOTY5MjQsLjgzOTY4LC45NjkyNCwuODI4MjYsLjc5NjQ5LC44NTc3MSwuOTUxMzIsLjkzMTE5LC45ODk2NSwuODg0MzMsLjgyODcsLjkzMzY1LDEuMDg2MTIsMS4zNjM4LDEuMDg2MTIsMS40NTc4NiwuNzQ2MjcsLjgwNDk5LC45MTQ4NCwxLjA1NzA3LC45MjM4MywxLjA1ODgyLC45NDAzLDEuMTI2NTQsMS4wNTg4MiwxLjAxNzU2LDEuMDkwMTEsMS4wOTAxMSwuOTk0MTQsMS4wOTAxMSwxLjAzNCwxLjAxNzU2LDEuMDUzNTYsMS4wNTcwNywxLjA1ODgyLDEuMDQzOTksLjg0ODYzLDEuMjE5NjgsMS4wMTc1NiwuOTU4MDEsMS4wMDA2OCwuOTE3OTcsLjk2Nzc3LC45MDQzLC45MDM1MSwuOTIxMDUsLjkwMzUxLDEuMTcxNCwuODUzMzcsLjk2OTI3LC45NjkyNywuOTk5MTIsLjk2OTI3LC45MjEwNSwuODA1OTcsMS4yNDM0LDEuMjA4MDgsMS4wNTkzNywuOTA5NTcsMS4xNzE0LDEuMjA4MDgsLjc1MTU1LC45NDI2MSwxLjI0NjQ0LDEuMDk5NzEsMS4wOTk3MSwuODQ3NTEsMSwuODUyNzMsLjc4MDMyLC42MTU4NCwxLjA1NDI1LDEuMTc5MTQsLjkwOTU3LDEuMDg2NjUsMS4xMTU5MywxLjE0MTY5LC43MzM4MSwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuODYwMzUsLjg1NzM0LC43NTg0MiwuNzU4NDIsLjc1ODQyLC43NTg0MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk3MDkzLDEuMDM1ODQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MTQsLjk2OTI0LC45NTEzMiwuOTUxMzIsLjk1MTMyLC45NTEzMiwuODI4NywuODM5NjgsLjg5MDQ5LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MzU3NSwuOTIzODMsLjk0MDMsLjk0MDMsLjk0MDMsLjk0MDMsLjg3MTcsLjg3MTcsLjg3MTcsLjg3MTcsMS4wMDUyNywxLjAxNzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjI0NjQ0LC45NTkyMywxLjAxNzU2LDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LC45Njc3NywxLjA1NzA3LC45Njc3NywuOTY3MDYsLjkxNDg0LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC45NzA5MywxLjA5NjksLjk3MDkzLDEuMDU4ODIsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwxLDEsLjk4MzEsMS4wMTc1NiwuOTgzMSwxLjAxNzU2LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLC44NzE3LC45NTc4MiwxLjA5MDExLC45NTc4MiwuODcxNywuODQ3ODQsMS4xMTU1MSwuNzEzODcsMS4wOTAxMSwxLDEsLjk5NDE0LC44NDYzNiwxLjA5MDExLDEsMSwuODQ2MzYsMS4wNTM2LC44NDYzNiwuOTQyOTgsLjg0NjM2LDEuMjMyOTcsMS4wMzU4NCwxLjAxNzU2LDEsMSwxLjAzNTg0LDEuMDE3NTYsMS4wMDMyMywxLjAzNDQ0LDEuMDE3NTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjkzMDY2LC45ODI5MywuODI4MjYsMS4wNDM5OSwxLDEsLjgyODI2LDEuMDQzOTksLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywxLDEsLjg1NzcxLDEuMTczMTgsLjg1NzcxLDEuMjE5NjgsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LC44Mjg3LC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsLjkzMzY1LC45MDQzLDEuMDg1NzEsLjk2OTI3LC45NjcwNiwuOTE0ODQsLjg2MDM1LC45MzU3NSwuOTY5MjQsLjk1OTIzLDEsMSwuODU3NzEsMS4yMTk2OCwxLjExNDM3LDEuMTE0MzcsLjkzMTA5LC45MTIwMiwuNjA0MTEsLjg0MTY0LC41NTU3MiwxLjAxMTczLC45NzM2MSwuODE4MTgsLjgxODE4LC45NjYzNSwuNzgwMzIsLjcyNzI3LC45MjM2NiwuOTg2MDEsMS4wMzQwNSwuNzc5NjgsMS4wOTc5OSwxLjIsLjk2NzA2LC44NTk0NCwuODU2MzgsLjk2NDkxLC43NTg0MiwuOTMzNjUsLjk4MzEsLjk2OTI0LC45NTc4MiwuODY5NjksLjk0MTUyLDEuMDc3OTYsMS4wMzU4NCwuNzg0MzcsLjk2OTI0LC45ODcxNSwuODM5NjgsLjgzNDkxLC44NTc3MSwuODI4NywuOTQ0OTIsLjg4NDMzLC45Mjg3LDEuMDA5OCwuOTU3ODIsLjgyODcsMS4wNjI1LC45ODI0OCwxLjAzNDI0LDEuMiwxLjAxMDcxLDEuMDYyNSwuOTUyNDYsMS4wMzgwOSwxLjA0OTEyLC45ODI0OCwxLjAwMjIxLDEuMDM0MjQsMS4wNTQ0MywxLjIsMS4wNDc4NSwuOTk2MDksMS4wMDE2OSwxLjA1MTc2LC45OTM0NiwxLjA1MzU2LC45MDg3LDEuMDMwMDQsLjk1NTQyLC45MzExNywxLjIzMzYyLDEuMDEwNzEsMS4wNzgzMSwxLjAyNTEyLDEuMDUyMDUsMS4wMzUwMiwxLjIsMS4wMTA3MSwxLjA1MzU2LDEuMDEwNzEsMS4wMzUwMiwuNzU4NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzcxOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0MDIxLDEsMSwxLDEsMSwxLC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC44Mjg3LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wMzA3NywxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjEzMTk2LDEuMTMxOTYsMS4xMzE5NiwuNjc0MjgsLjY3NDI4LDEuMTYwMzksLjczMjkxLDEuMjA5OTYsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44Nzc5NiwuOTY5MjcsMS4wMTUxOCwuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjEwNTM5LDEuMTA1MzksMS4xMTM1OCwxLjA2OTY3LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjUwNywxLjE3MTQsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njk3LDEuMjQ4MjIsMS4yNDgyMiwxLjE3MjM4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTgwODMsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwOTM4LDEuMTA5MzgsMSwxLDEsMS4wNTQyNSwxLjA5OTcxLDEuMDk5NzEsMS4wOTk3MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLGFuPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfSxybj1nZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24oZSl7ZVsiTXlyaWFkUHJvLVJlZ3VsYXIiXT1lWyJQZGZKUy1GYWxsYmFjay1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6JGksYmFzZVdpZHRoczpfaSxiYXNlTWFwcGluZzpqaSxtZXRyaWNzOlZpfTtlWyJNeXJpYWRQcm8tQm9sZCJdPWVbIlBkZkpTLUZhbGxiYWNrLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpYaSxiYXNlV2lkdGhzOkRpLGJhc2VNYXBwaW5nOkJpLG1ldHJpY3M6cWl9O2VbIk15cmlhZFByby1JdCJdPWVbIk15cmlhZFByby1JdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOkdpLGJhc2VXaWR0aHM6RWksYmFzZU1hcHBpbmc6UGksbWV0cmljczp6aX07ZVsiTXlyaWFkUHJvLUJvbGRJdCJdPWVbIk15cmlhZFByby1Cb2xkSXRhbGljIl09ZVsiUGRmSlMtRmFsbGJhY2stQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOkhpLGJhc2VXaWR0aHM6UmksYmFzZU1hcHBpbmc6TmksbWV0cmljczpXaX07ZS5BcmlhbE1UPWUuQXJpYWw9ZVsiQXJpYWwtUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixiYXNlV2lkdGhzOl9pLGJhc2VNYXBwaW5nOmppfTtlWyJBcmlhbC1Cb2xkTVQiXT1lWyJBcmlhbC1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGJhc2VXaWR0aHM6RGksYmFzZU1hcHBpbmc6Qml9O2VbIkFyaWFsLUl0YWxpY01UIl09ZVsiQXJpYWwtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsYmFzZVdpZHRoczpFaSxiYXNlTWFwcGluZzpQaX07ZVsiQXJpYWwtQm9sZEl0YWxpY01UIl09ZVsiQXJpYWwtQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixiYXNlV2lkdGhzOlJpLGJhc2VNYXBwaW5nOk5pfTtlWyJDYWxpYnJpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpTaSxiYXNlV2lkdGhzOl9pLGJhc2VNYXBwaW5nOmppLG1ldHJpY3M6QWl9O2VbIkNhbGlicmktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnBpLGJhc2VXaWR0aHM6RGksYmFzZU1hcHBpbmc6QmksbWV0cmljczptaX07ZVsiQ2FsaWJyaS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOndpLGJhc2VXaWR0aHM6RWksYmFzZU1hcHBpbmc6UGksbWV0cmljczp4aX07ZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6YmksYmFzZVdpZHRoczpSaSxiYXNlTWFwcGluZzpOaSxtZXRyaWNzOnlpfTtlWyJTZWdvZXVpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczp0bixiYXNlV2lkdGhzOl9pLGJhc2VNYXBwaW5nOmppLG1ldHJpY3M6YW59O2VbIlNlZ29ldWktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOktpLGJhc2VXaWR0aHM6RGksYmFzZU1hcHBpbmc6QmksbWV0cmljczpKaX07ZVsiU2Vnb2V1aS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOlFpLGJhc2VXaWR0aHM6RWksYmFzZU1hcHBpbmc6UGksbWV0cmljczplbn07ZVsiU2Vnb2V1aS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6WWksYmFzZVdpZHRoczpSaSxiYXNlTWFwcGluZzpOaSxtZXRyaWNzOlppfTtlWyJIZWx2ZXRpY2EtUmVndWxhciJdPWUuSGVsdmV0aWNhPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOk9pLGJhc2VXaWR0aHM6X2ksYmFzZU1hcHBpbmc6amksbWV0cmljczpNaX07ZVsiSGVsdmV0aWNhLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpraSxiYXNlV2lkdGhzOkRpLGJhc2VNYXBwaW5nOkJpLG1ldHJpY3M6Q2l9O2VbIkhlbHZldGljYS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOklpLGJhc2VXaWR0aHM6RWksYmFzZU1hcHBpbmc6UGksbWV0cmljczpUaX07ZVsiSGVsdmV0aWNhLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczp2aSxiYXNlV2lkdGhzOlJpLGJhc2VNYXBwaW5nOk5pLG1ldHJpY3M6Rml9fSk7ZnVuY3Rpb24gZ2V0WGZhRm9udE5hbWUoZSl7Y29uc3QgdD1ub3JtYWxpemVGb250TmFtZShlKTtyZXR1cm4gcm4oKVt0XX1mdW5jdGlvbiBnZXRYZmFGb250RGljdChlKXtjb25zdCB0PWZ1bmN0aW9uIGdldFhmYUZvbnRXaWR0aHMoZSl7Y29uc3QgdD1nZXRYZmFGb250TmFtZShlKTtpZighdClyZXR1cm4gbnVsbDtjb25zdHtiYXNlV2lkdGhzOmEsYmFzZU1hcHBpbmc6cixmYWN0b3JzOml9PXQsbj1pP2EubWFwKChlLHQpPT5lKmlbdF0pOmE7bGV0IHMsbz0tMjtjb25zdCBjPVtdO2Zvcihjb25zdFtlLHRdb2Ygci5tYXAoKGUsdCk9PltlLHRdKS5zb3J0KChbZV0sW3RdKT0+ZS10KSlpZigtMSE9PWUpaWYoZT09PW8rMSl7cy5wdXNoKG5bdF0pO28rPTF9ZWxzZXtvPWU7cz1bblt0XV07Yy5wdXNoKGUscyl9cmV0dXJuIGN9KGUpLGE9bmV3IERpY3QobnVsbCk7YS5zZXQoIkJhc2VGb250IixOYW1lLmdldChlKSk7YS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGb250IikpO2Euc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiQ0lERm9udFR5cGUyIikpO2Euc2V0KCJFbmNvZGluZyIsTmFtZS5nZXQoIklkZW50aXR5LUgiKSk7YS5zZXQoIkNJRFRvR0lETWFwIixOYW1lLmdldCgiSWRlbnRpdHkiKSk7YS5zZXQoIlciLHQpO2Euc2V0KCJGaXJzdENoYXIiLHRbMF0pO2Euc2V0KCJMYXN0Q2hhciIsdC5hdCgtMikrdC5hdCgtMSkubGVuZ3RoLTEpO2NvbnN0IHI9bmV3IERpY3QobnVsbCk7YS5zZXQoIkZvbnREZXNjcmlwdG9yIixyKTtjb25zdCBpPW5ldyBEaWN0KG51bGwpO2kuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5Iik7aS5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKTtpLnNldCgiU3VwcGxlbWVudCIsMCk7YS5zZXQoIkNJRFN5c3RlbUluZm8iLGkpO3JldHVybiBhfWNsYXNzIFBvc3RTY3JpcHRQYXJzZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5sZXhlcj1lO3RoaXMub3BlcmF0b3JzPVtdO3RoaXMudG9rZW49bnVsbDt0aGlzLnByZXY9bnVsbH1uZXh0VG9rZW4oKXt0aGlzLnByZXY9dGhpcy50b2tlbjt0aGlzLnRva2VuPXRoaXMubGV4ZXIuZ2V0VG9rZW4oKX1hY2NlcHQoZSl7aWYodGhpcy50b2tlbi50eXBlPT09ZSl7dGhpcy5uZXh0VG9rZW4oKTtyZXR1cm4hMH1yZXR1cm4hMX1leHBlY3QoZSl7aWYodGhpcy5hY2NlcHQoZSkpcmV0dXJuITA7dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBVbmV4cGVjdGVkIHN5bWJvbDogZm91bmQgJHt0aGlzLnRva2VuLnR5cGV9IGV4cGVjdGVkICR7ZX0uYCl9cGFyc2UoKXt0aGlzLm5leHRUb2tlbigpO3RoaXMuZXhwZWN0KG5uLkxCUkFDRSk7dGhpcy5wYXJzZUJsb2NrKCk7dGhpcy5leHBlY3Qobm4uUkJSQUNFKTtyZXR1cm4gdGhpcy5vcGVyYXRvcnN9cGFyc2VCbG9jaygpe2Zvcig7OylpZih0aGlzLmFjY2VwdChubi5OVU1CRVIpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNlIGlmKHRoaXMuYWNjZXB0KG5uLk9QRVJBVE9SKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZXtpZighdGhpcy5hY2NlcHQobm4uTEJSQUNFKSlyZXR1cm47dGhpcy5wYXJzZUNvbmRpdGlvbigpfX1wYXJzZUNvbmRpdGlvbigpe2NvbnN0IGU9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKTt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChubi5SQlJBQ0UpO2lmKHRoaXMuYWNjZXB0KG5uLklGKSl7dGhpcy5vcGVyYXRvcnNbZV09dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMub3BlcmF0b3JzW2UrMV09Imp6In1lbHNle2lmKCF0aGlzLmFjY2VwdChubi5MQlJBQ0UpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiUFMgRnVuY3Rpb246IGVycm9yIHBhcnNpbmcgY29uZGl0aW9uYWwuIik7e2NvbnN0IHQ9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKTtjb25zdCBhPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChubi5SQlJBQ0UpO3RoaXMuZXhwZWN0KG5uLklGRUxTRSk7dGhpcy5vcGVyYXRvcnNbdF09dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMub3BlcmF0b3JzW3QrMV09ImoiO3RoaXMub3BlcmF0b3JzW2VdPWE7dGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifX19fWNvbnN0IG5uPXtMQlJBQ0U6MCxSQlJBQ0U6MSxOVU1CRVI6MixPUEVSQVRPUjozLElGOjQsSUZFTFNFOjV9O2NsYXNzIFBvc3RTY3JpcHRUb2tlbntzdGF0aWMgZ2V0IG9wQ2FjaGUoKXtyZXR1cm4gc2hhZG93KHRoaXMsIm9wQ2FjaGUiLE9iamVjdC5jcmVhdGUobnVsbCkpfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy50eXBlPWU7dGhpcy52YWx1ZT10fXN0YXRpYyBnZXRPcGVyYXRvcihlKXtyZXR1cm4gUG9zdFNjcmlwdFRva2VuLm9wQ2FjaGVbZV18fD1uZXcgUG9zdFNjcmlwdFRva2VuKG5uLk9QRVJBVE9SLGUpfXN0YXRpYyBnZXQgTEJSQUNFKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJMQlJBQ0UiLG5ldyBQb3N0U2NyaXB0VG9rZW4obm4uTEJSQUNFLCJ7IikpfXN0YXRpYyBnZXQgUkJSQUNFKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJSQlJBQ0UiLG5ldyBQb3N0U2NyaXB0VG9rZW4obm4uUkJSQUNFLCJ9IikpfXN0YXRpYyBnZXQgSUYoKXtyZXR1cm4gc2hhZG93KHRoaXMsIklGIixuZXcgUG9zdFNjcmlwdFRva2VuKG5uLklGLCJJRiIpKX1zdGF0aWMgZ2V0IElGRUxTRSgpe3JldHVybiBzaGFkb3codGhpcywiSUZFTFNFIixuZXcgUG9zdFNjcmlwdFRva2VuKG5uLklGRUxTRSwiSUZFTFNFIikpfX1jbGFzcyBQb3N0U2NyaXB0TGV4ZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCk7dGhpcy5zdHJCdWY9W119bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9Z2V0VG9rZW4oKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZih0PDApcmV0dXJuIHNhO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoIWlzV2hpdGVTcGFjZSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1zd2l0Y2goMHx0KXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNDM6Y2FzZSA0NTpjYXNlIDQ2OnJldHVybiBuZXcgUG9zdFNjcmlwdFRva2VuKG5uLk5VTUJFUix0aGlzLmdldE51bWJlcigpKTtjYXNlIDEyMzp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5MQlJBQ0U7Y2FzZSAxMjU6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBQb3N0U2NyaXB0VG9rZW4uUkJSQUNFfWNvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDthWzBdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7Zm9yKDsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYodD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyKTspYS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO2NvbnN0IHI9YS5qb2luKCIiKTtzd2l0Y2goci50b0xvd2VyQ2FzZSgpKXtjYXNlImlmIjpyZXR1cm4gUG9zdFNjcmlwdFRva2VuLklGO2Nhc2UiaWZlbHNlIjpyZXR1cm4gUG9zdFNjcmlwdFRva2VuLklGRUxTRTtkZWZhdWx0OnJldHVybiBQb3N0U2NyaXB0VG9rZW4uZ2V0T3BlcmF0b3Iocil9fWdldE51bWJlcigpe2xldCBlPXRoaXMuY3VycmVudENoYXI7Y29uc3QgdD10aGlzLnN0ckJ1Zjt0Lmxlbmd0aD0wO3RbMF09U3RyaW5nLmZyb21DaGFyQ29kZShlKTtmb3IoOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJihlPj00OCYmZTw9NTd8fDQ1PT09ZXx8NDY9PT1lKTspdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2NvbnN0IGE9cGFyc2VGbG9hdCh0LmpvaW4oIiIpKTtpZihpc05hTihhKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAke2F9YCk7cmV0dXJuIGF9fWNsYXNzIEJhc2VMb2NhbENhY2hle2NvbnN0cnVjdG9yKGUpe3RoaXMuX29ubHlSZWZzPSEwPT09ZT8ub25seVJlZnM7aWYoIXRoaXMuX29ubHlSZWZzKXt0aGlzLl9uYW1lUmVmTWFwPW5ldyBNYXA7dGhpcy5faW1hZ2VNYXA9bmV3IE1hcH10aGlzLl9pbWFnZUNhY2hlPW5ldyBSZWZTZXRDYWNoZX1nZXRCeU5hbWUoZSl7dGhpcy5fb25seVJlZnMmJnVucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgYGdldEJ5TmFtZWAgbWV0aG9kLiIpO2NvbnN0IHQ9dGhpcy5fbmFtZVJlZk1hcC5nZXQoZSk7cmV0dXJuIHQ/dGhpcy5nZXRCeVJlZih0KTp0aGlzLl9pbWFnZU1hcC5nZXQoZSl8fG51bGx9Z2V0QnlSZWYoZSl7cmV0dXJuIHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpfHxudWxsfXNldChlLHQsYSl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgc2V0YCBjYWxsZWQuIil9fWNsYXNzIExvY2FsSW1hZ2VDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hle3NldChlLHQ9bnVsbCxhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbEltYWdlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgIm5hbWUiIGFyZ3VtZW50LicpO2lmKHQpe2lmKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpKXJldHVybjt0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpO3RoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLGEpfX1jbGFzcyBMb2NhbENvbG9yU3BhY2VDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hle3NldChlPW51bGwsdD1udWxsLGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZSYmIXQpdGhyb3cgbmV3IEVycm9yKCdMb2NhbENvbG9yU3BhY2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYW5kL29yICJyZWYiIGFyZ3VtZW50LicpO2lmKHQpe2lmKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpKXJldHVybjtudWxsIT09ZSYmdGhpcy5fbmFtZVJlZk1hcC5zZXQoZSx0KTt0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGEpfWVsc2UgdGhpcy5faW1hZ2VNYXAuaGFzKGUpfHx0aGlzLl9pbWFnZU1hcC5zZXQoZSxhKX19Y2xhc3MgTG9jYWxGdW5jdGlvbkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGEpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxGdW5jdGlvbkNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGEpfX1jbGFzcyBMb2NhbEdTdGF0ZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGUsdD1udWxsLGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsR1N0YXRlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgIm5hbWUiIGFyZ3VtZW50LicpO2lmKHQpe2lmKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpKXJldHVybjt0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpO3RoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLGEpfX1jbGFzcyBMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hle2NvbnN0cnVjdG9yKGUpe3N1cGVyKHtvbmx5UmVmczohMH0pfXNldChlPW51bGwsdCxhKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsVGlsaW5nUGF0dGVybkNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGEpfX1jbGFzcyBSZWdpb25hbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtjb25zdHJ1Y3RvcihlKXtzdXBlcih7b25seVJlZnM6ITB9KX1zZXQoZT1udWxsLHQsYSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCdSZWdpb25hbEltYWdlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXModCl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9fWNsYXNzIEdsb2JhbENvbG9yU3BhY2VDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hle2NvbnN0cnVjdG9yKGUpe3N1cGVyKHtvbmx5UmVmczohMH0pfXNldChlPW51bGwsdCxhKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbENvbG9yU3BhY2VDYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1jbGVhcigpe3RoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKX19Y2xhc3MgR2xvYmFsSW1hZ2VDYWNoZXtzdGF0aWMgTlVNX1BBR0VTX1RIUkVTSE9MRD0yO3N0YXRpYyBNSU5fSU1BR0VTX1RPX0NBQ0hFPTEwO3N0YXRpYyBNQVhfQllURV9TSVpFPTVlNzsjb2U9bmV3IFJlZlNldDtjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlZkNhY2hlPW5ldyBSZWZTZXRDYWNoZTt0aGlzLl9pbWFnZUNhY2hlPW5ldyBSZWZTZXRDYWNoZX1nZXQjY2UoKXtsZXQgZT0wO2Zvcihjb25zdCB0IG9mIHRoaXMuX2ltYWdlQ2FjaGUpZSs9dC5ieXRlU2l6ZTtyZXR1cm4gZX1nZXQjbGUoKXtyZXR1cm4hKHRoaXMuX2ltYWdlQ2FjaGUuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk1JTl9JTUFHRVNfVE9fQ0FDSEUpJiYhKHRoaXMuI2NlPEdsb2JhbEltYWdlQ2FjaGUuTUFYX0JZVEVfU0laRSl9c2hvdWxkQ2FjaGUoZSx0KXtsZXQgYT10aGlzLl9yZWZDYWNoZS5nZXQoZSk7aWYoIWEpe2E9bmV3IFNldDt0aGlzLl9yZWZDYWNoZS5wdXQoZSxhKX1hLmFkZCh0KTtyZXR1cm4hKGEuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpJiYhKCF0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKSYmdGhpcy4jbGUpfWFkZERlY29kZUZhaWxlZChlKXt0aGlzLiNvZS5wdXQoZSl9aGFzRGVjb2RlRmFpbGVkKGUpe3JldHVybiB0aGlzLiNvZS5oYXMoZSl9YWRkQnl0ZVNpemUoZSx0KXtjb25zdCBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO2EmJihhLmJ5dGVTaXplfHwoYS5ieXRlU2l6ZT10KSl9Z2V0RGF0YShlLHQpe2NvbnN0IGE9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpcmV0dXJuIG51bGw7Y29uc3Qgcj10aGlzLl9pbWFnZUNhY2hlLmdldChlKTtpZighcilyZXR1cm4gbnVsbDthLmFkZCh0KTtyZXR1cm4gcn1zZXREYXRhKGUsdCl7aWYoIXRoaXMuX3JlZkNhY2hlLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGV4cGVjdGVkICJzaG91bGRDYWNoZSIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8KHRoaXMuI2xlP3dhcm4oIkdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGNhY2hlIGxpbWl0IHJlYWNoZWQuIik6dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KSl9Y2xlYXIoZT0hMSl7aWYoIWUpe3RoaXMuI29lLmNsZWFyKCk7dGhpcy5fcmVmQ2FjaGUuY2xlYXIoKX10aGlzLl9pbWFnZUNhY2hlLmNsZWFyKCl9fWNsYXNzIFBERkZ1bmN0aW9uRmFjdG9yeXtjb25zdHJ1Y3Rvcih7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0PSEwfSl7dGhpcy54cmVmPWU7dGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT10fWNyZWF0ZShlLHQ9ITEpe2xldCBhLHI7ZSBpbnN0YW5jZW9mIFJlZj9hPWU6ZSBpbnN0YW5jZW9mIERpY3Q/YT1lLm9iaklkOmUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYoYT1lLmRpY3Q/Lm9iaklkKTtpZihhKXtjb25zdCBlPXRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5nZXRCeVJlZihhKTtpZihlKXJldHVybiBlfWNvbnN0IGk9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7aWYoQXJyYXkuaXNBcnJheShpKSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCdQREZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlIC0gZXhwZWN0ZWQgInBhcnNlQXJyYXkiIGFyZ3VtZW50LicpO3I9UERGRnVuY3Rpb24ucGFyc2VBcnJheSh0aGlzLGkpfWVsc2Ugcj1QREZGdW5jdGlvbi5wYXJzZSh0aGlzLGkpO2EmJnRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5zZXQobnVsbCxhLHIpO3JldHVybiByfWdldCBfbG9jYWxGdW5jdGlvbkNhY2hlKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJfbG9jYWxGdW5jdGlvbkNhY2hlIixuZXcgTG9jYWxGdW5jdGlvbkNhY2hlKX19ZnVuY3Rpb24gdG9OdW1iZXJBcnJheShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9pc051bWJlckFycmF5KGUsbnVsbCk/ZTplLm1hcChlPT4rZSk6bnVsbH1jbGFzcyBQREZGdW5jdGlvbntzdGF0aWMgZ2V0U2FtcGxlQXJyYXkoZSx0LGEscil7bGV0IGksbixzPTE7Zm9yKGk9MCxuPWUubGVuZ3RoO2k8bjtpKyspcyo9ZVtpXTtzKj10O2NvbnN0IG89bmV3IEFycmF5KHMpO2xldCBjPTAsbD0wO2NvbnN0IGg9MS8oMioqYS0xKSx1PXIuZ2V0Qnl0ZXMoKHMqYSs3KS84KTtsZXQgZD0wO2ZvcihpPTA7aTxzO2krKyl7Zm9yKDtjPGE7KXtsPDw9ODtsfD11W2QrK107Yys9OH1jLT1hO29baV09KGw+PmMpKmg7bCY9KDE8PGMpLTF9cmV0dXJuIG99c3RhdGljIHBhcnNlKGUsdCl7Y29uc3QgYT10LmRpY3R8fHQ7c3dpdGNoKGEuZ2V0KCJGdW5jdGlvblR5cGUiKSl7Y2FzZSAwOnJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWQoZSx0LGEpO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkKGUsYSk7Y2FzZSAzOnJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWQoZSxhKTtjYXNlIDQ6cmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdChlLHQsYSl9dGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIHR5cGUgb2YgZnVuY3Rpb24iKX1zdGF0aWMgcGFyc2VBcnJheShlLHQpe2NvbnN0e3hyZWY6YX09ZSxyPVtdO2Zvcihjb25zdCBpIG9mIHQpci5wdXNoKHRoaXMucGFyc2UoZSxhLmZldGNoSWZSZWYoaSkpKTtyZXR1cm4gZnVuY3Rpb24oZSx0LGEsaSl7Zm9yKGxldCBuPTAscz1yLmxlbmd0aDtuPHM7bisrKXJbbl0oZSx0LGEsaStuKX19c3RhdGljIGNvbnN0cnVjdFNhbXBsZWQoZSx0LGEpe2Z1bmN0aW9uIHRvTXVsdGlBcnJheShlKXtjb25zdCB0PWUubGVuZ3RoLGE9W107bGV0IHI9MDtmb3IobGV0IGk9MDtpPHQ7aSs9MilhW3IrK109W2VbaV0sZVtpKzFdXTtyZXR1cm4gYX1mdW5jdGlvbiBpbnRlcnBvbGF0ZShlLHQsYSxyLGkpe3JldHVybiByKyhpLXIpLyhhLXQpKihlLXQpfWxldCByPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiRG9tYWluIikpLGk9dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJSYW5nZSIpKTtpZighcnx8IWkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyBkb21haW4gb3IgcmFuZ2UiKTtjb25zdCBuPXIubGVuZ3RoLzIscz1pLmxlbmd0aC8yO3I9dG9NdWx0aUFycmF5KHIpO2k9dG9NdWx0aUFycmF5KGkpO2NvbnN0IG89dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJTaXplIikpLGM9YS5nZXQoIkJpdHNQZXJTYW1wbGUiKSxsPWEuZ2V0KCJPcmRlciIpfHwxOzEhPT1sJiZpbmZvKCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogIitsKTtsZXQgaD10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkVuY29kZSIpKTtpZihoKWg9dG9NdWx0aUFycmF5KGgpO2Vsc2V7aD1bXTtmb3IobGV0IGU9MDtlPG47KytlKWgucHVzaChbMCxvW2VdLTFdKX1sZXQgdT10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkRlY29kZSIpKTt1PXU/dG9NdWx0aUFycmF5KHUpOmk7Y29uc3QgZD10aGlzLmdldFNhbXBsZUFycmF5KG8scyxjLHQpO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RTYW1wbGVkRm4oZSx0LGEsYyl7Y29uc3QgbD0xPDxuLGY9bmV3IEZsb2F0NjRBcnJheShsKS5maWxsKDEpLGc9bmV3IFVpbnQzMkFycmF5KGwpO2xldCBwLG0sYj1zLHk9MTtmb3IocD0wO3A8bjsrK3Ape2NvbnN0IGE9cltwXVswXSxpPXJbcF1bMV07bGV0IG49aW50ZXJwb2xhdGUoTWF0aENsYW1wKGVbdCtwXSxhLGkpLGEsaSxoW3BdWzBdLGhbcF1bMV0pO2NvbnN0IHM9b1twXTtuPU1hdGhDbGFtcChuLDAscy0xKTtjb25zdCBjPW48cy0xP01hdGguZmxvb3Iobik6bi0xLHU9YysxLW4sZD1uLWMsdz1jKmIseD13K2I7Zm9yKG09MDttPGw7bSsrKWlmKG0meSl7ZlttXSo9ZDtnW21dKz14fWVsc2V7ZlttXSo9dTtnW21dKz13fWIqPXM7eTw8PTF9Zm9yKG09MDttPHM7KyttKXtsZXQgZT0wO2ZvcihwPTA7cDxsO3ArKyllKz1kW2dbcF0rbV0qZltwXTtlPWludGVycG9sYXRlKGUsMCwxLHVbbV1bMF0sdVttXVsxXSk7YVtjK21dPU1hdGhDbGFtcChlLGlbbV1bMF0saVttXVsxXSl9fX1zdGF0aWMgY29uc3RydWN0SW50ZXJwb2xhdGVkKGUsdCl7Y29uc3QgYT10b051bWJlckFycmF5KHQuZ2V0QXJyYXkoIkMwIikpfHxbMF0scj10b051bWJlckFycmF5KHQuZ2V0QXJyYXkoIkMxIikpfHxbMV0saT10LmdldCgiTiIpLG49W107Zm9yKGxldCBlPTAsdD1hLmxlbmd0aDtlPHQ7KytlKW4ucHVzaChyW2VdLWFbZV0pO2NvbnN0IHM9bi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdEludGVycG9sYXRlZEZuKGUsdCxyLG8pe2NvbnN0IGM9MT09PWk/ZVt0XTplW3RdKippO2ZvcihsZXQgZT0wO2U8czsrK2UpcltvK2VdPWFbZV0rYypuW2VdfX1zdGF0aWMgY29uc3RydWN0U3RpY2hlZChlLHQpe2NvbnN0IGE9dG9OdW1iZXJBcnJheSh0LmdldEFycmF5KCJEb21haW4iKSk7aWYoIWEpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyBkb21haW4iKTtpZigxIT09YS5sZW5ndGgvMil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb24iKTtjb25zdHt4cmVmOnJ9PWUsaT1bXTtmb3IoY29uc3QgYSBvZiB0LmdldCgiRnVuY3Rpb25zIikpaS5wdXNoKHRoaXMucGFyc2UoZSxyLmZldGNoSWZSZWYoYSkpKTtjb25zdCBuPXRvTnVtYmVyQXJyYXkodC5nZXRBcnJheSgiQm91bmRzIikpLHM9dG9OdW1iZXJBcnJheSh0LmdldEFycmF5KCJFbmNvZGUiKSksbz1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRm4oZSx0LHIsYyl7Y29uc3QgbD1NYXRoQ2xhbXAoZVt0XSxhWzBdLGFbMV0pLGg9bi5sZW5ndGg7bGV0IHU7Zm9yKHU9MDt1PGgmJiEobDxuW3VdKTsrK3UpO2xldCBkPWFbMF07dT4wJiYoZD1uW3UtMV0pO2xldCBmPWFbMV07dTxuLmxlbmd0aCYmKGY9blt1XSk7Y29uc3QgZz1zWzIqdV0scD1zWzIqdSsxXTtvWzBdPWQ9PT1mP2c6ZysobC1kKSoocC1nKS8oZi1kKTtpW3VdKG8sMCxyLGMpfX1zdGF0aWMgY29uc3RydWN0UG9zdFNjcmlwdChlLHQsYSl7Y29uc3Qgcj10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkRvbWFpbiIpKSxpPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiUmFuZ2UiKSk7aWYoIXIpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyBkb21haW4uIik7aWYoIWkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyByYW5nZS4iKTtjb25zdCBuPW5ldyBQb3N0U2NyaXB0TGV4ZXIodCkscz1uZXcgUG9zdFNjcmlwdFBhcnNlcihuKS5wYXJzZSgpO2lmKGUuaXNFdmFsU3VwcG9ydGVkJiZGZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe2NvbnN0IGU9KG5ldyBQb3N0U2NyaXB0Q29tcGlsZXIpLmNvbXBpbGUocyxyLGkpO2lmKGUpcmV0dXJuIG5ldyBGdW5jdGlvbigic3JjIiwic3JjT2Zmc2V0IiwiZGVzdCIsImRlc3RPZmZzZXQiLGUpfWluZm8oIlVuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uIik7Y29uc3Qgbz1pLmxlbmd0aD4+MSxjPXIubGVuZ3RoPj4xLGw9bmV3IFBvc3RTY3JpcHRFdmFsdWF0b3IocyksaD1PYmplY3QuY3JlYXRlKG51bGwpO2xldCB1PTgxOTI7Y29uc3QgZD1uZXcgRmxvYXQzMkFycmF5KGMpO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RQb3N0U2NyaXB0Rm4oZSx0LGEscil7bGV0IG4scyxmPSIiO2NvbnN0IGc9ZDtmb3Iobj0wO248YztuKyspe3M9ZVt0K25dO2dbbl09cztmKz1zKyJfIn1jb25zdCBwPWhbZl07aWYodm9pZCAwIT09cCl7YS5zZXQocCxyKTtyZXR1cm59Y29uc3QgbT1uZXcgRmxvYXQzMkFycmF5KG8pLGI9bC5leGVjdXRlKGcpLHk9Yi5sZW5ndGgtbztmb3Iobj0wO248bztuKyspe3M9Ylt5K25dO2xldCBlPWlbMipuXTtpZihzPGUpcz1lO2Vsc2V7ZT1pWzIqbisxXTtzPmUmJihzPWUpfW1bbl09c31pZih1PjApe3UtLTtoW2ZdPW19YS5zZXQobSxyKX19fWZ1bmN0aW9uIGlzUERGRnVuY3Rpb24oZSl7bGV0IHQ7aWYoZSBpbnN0YW5jZW9mIERpY3QpdD1lO2Vsc2V7aWYoIShlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkpcmV0dXJuITE7dD1lLmRpY3R9cmV0dXJuIHQuaGFzKCJGdW5jdGlvblR5cGUiKX1jbGFzcyBQb3N0U2NyaXB0U3RhY2t7c3RhdGljIE1BWF9TVEFDS19TSVpFPTEwMDtjb25zdHJ1Y3RvcihlKXt0aGlzLnN0YWNrPWU/QXJyYXkuZnJvbShlKTpbXX1wdXNoKGUpe2lmKHRoaXMuc3RhY2subGVuZ3RoPj1Qb3N0U2NyaXB0U3RhY2suTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO3RoaXMuc3RhY2sucHVzaChlKX1wb3AoKXtpZih0aGlzLnN0YWNrLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgdW5kZXJmbG93LiIpO3JldHVybiB0aGlzLnN0YWNrLnBvcCgpfWNvcHkoZSl7aWYodGhpcy5zdGFjay5sZW5ndGgrZT49UG9zdFNjcmlwdFN0YWNrLk1BWF9TVEFDS19TSVpFKXRocm93IG5ldyBFcnJvcigiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayBvdmVyZmxvdy4iKTtjb25zdCB0PXRoaXMuc3RhY2s7Zm9yKGxldCBhPXQubGVuZ3RoLWUscj1lLTE7cj49MDtyLS0sYSsrKXQucHVzaCh0W2FdKX1pbmRleChlKXt0aGlzLnB1c2godGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC1lLTFdKX1yb2xsKGUsdCl7Y29uc3QgYT10aGlzLnN0YWNrLHI9YS5sZW5ndGgtZSxpPWEubGVuZ3RoLTEsbj1yKyh0LU1hdGguZmxvb3IodC9lKSplKTtmb3IobGV0IGU9cix0PWk7ZTx0O2UrKyx0LS0pe2NvbnN0IHI9YVtlXTthW2VdPWFbdF07YVt0XT1yfWZvcihsZXQgZT1yLHQ9bi0xO2U8dDtlKyssdC0tKXtjb25zdCByPWFbZV07YVtlXT1hW3RdO2FbdF09cn1mb3IobGV0IGU9bix0PWk7ZTx0O2UrKyx0LS0pe2NvbnN0IHI9YVtlXTthW2VdPWFbdF07YVt0XT1yfX19Y2xhc3MgUG9zdFNjcmlwdEV2YWx1YXRvcntjb25zdHJ1Y3RvcihlKXt0aGlzLm9wZXJhdG9ycz1lfWV4ZWN1dGUoZSl7Y29uc3QgdD1uZXcgUG9zdFNjcmlwdFN0YWNrKGUpO2xldCBhPTA7Y29uc3Qgcj10aGlzLm9wZXJhdG9ycyxpPXIubGVuZ3RoO2xldCBuLHMsbztmb3IoO2E8aTspe249clthKytdO2lmKCJudW1iZXIiIT10eXBlb2Ygbilzd2l0Y2gobil7Y2FzZSJqeiI6bz10LnBvcCgpO3M9dC5wb3AoKTtzfHwoYT1vKTticmVhaztjYXNlImoiOnM9dC5wb3AoKTthPXM7YnJlYWs7Y2FzZSJhYnMiOnM9dC5wb3AoKTt0LnB1c2goTWF0aC5hYnMocykpO2JyZWFrO2Nhc2UiYWRkIjpvPXQucG9wKCk7cz10LnBvcCgpO3QucHVzaChzK28pO2JyZWFrO2Nhc2UiYW5kIjpvPXQucG9wKCk7cz10LnBvcCgpOyJib29sZWFuIj09dHlwZW9mIHMmJiJib29sZWFuIj09dHlwZW9mIG8/dC5wdXNoKHMmJm8pOnQucHVzaChzJm8pO2JyZWFrO2Nhc2UiYXRhbiI6bz10LnBvcCgpO3M9dC5wb3AoKTtzPU1hdGguYXRhbjIocyxvKS9NYXRoLlBJKjE4MDtzPDAmJihzKz0zNjApO3QucHVzaChzKTticmVhaztjYXNlImJpdHNoaWZ0IjpvPXQucG9wKCk7cz10LnBvcCgpO3M+MD90LnB1c2goczw8byk6dC5wdXNoKHM+Pm8pO2JyZWFrO2Nhc2UiY2VpbGluZyI6cz10LnBvcCgpO3QucHVzaChNYXRoLmNlaWwocykpO2JyZWFrO2Nhc2UiY29weSI6cz10LnBvcCgpO3QuY29weShzKTticmVhaztjYXNlImNvcyI6cz10LnBvcCgpO3QucHVzaChNYXRoLmNvcyhzJTM2MC8xODAqTWF0aC5QSSkpO2JyZWFrO2Nhc2UiY3ZpIjpzPTB8dC5wb3AoKTt0LnB1c2gocyk7YnJlYWs7Y2FzZSJjdnIiOmJyZWFrO2Nhc2UiZGl2IjpvPXQucG9wKCk7cz10LnBvcCgpO3QucHVzaChzL28pO2JyZWFrO2Nhc2UiZHVwIjp0LmNvcHkoMSk7YnJlYWs7Y2FzZSJlcSI6bz10LnBvcCgpO3M9dC5wb3AoKTt0LnB1c2gocz09PW8pO2JyZWFrO2Nhc2UiZXhjaCI6dC5yb2xsKDIsMSk7YnJlYWs7Y2FzZSJleHAiOm89dC5wb3AoKTtzPXQucG9wKCk7dC5wdXNoKHMqKm8pO2JyZWFrO2Nhc2UiZmFsc2UiOnQucHVzaCghMSk7YnJlYWs7Y2FzZSJmbG9vciI6cz10LnBvcCgpO3QucHVzaChNYXRoLmZsb29yKHMpKTticmVhaztjYXNlImdlIjpvPXQucG9wKCk7cz10LnBvcCgpO3QucHVzaChzPj1vKTticmVhaztjYXNlImd0IjpvPXQucG9wKCk7cz10LnBvcCgpO3QucHVzaChzPm8pO2JyZWFrO2Nhc2UiaWRpdiI6bz10LnBvcCgpO3M9dC5wb3AoKTt0LnB1c2gocy9vfDApO2JyZWFrO2Nhc2UiaW5kZXgiOnM9dC5wb3AoKTt0LmluZGV4KHMpO2JyZWFrO2Nhc2UibGUiOm89dC5wb3AoKTtzPXQucG9wKCk7dC5wdXNoKHM8PW8pO2JyZWFrO2Nhc2UibG4iOnM9dC5wb3AoKTt0LnB1c2goTWF0aC5sb2cocykpO2JyZWFrO2Nhc2UibG9nIjpzPXQucG9wKCk7dC5wdXNoKE1hdGgubG9nMTAocykpO2JyZWFrO2Nhc2UibHQiOm89dC5wb3AoKTtzPXQucG9wKCk7dC5wdXNoKHM8byk7YnJlYWs7Y2FzZSJtb2QiOm89dC5wb3AoKTtzPXQucG9wKCk7dC5wdXNoKHMlbyk7YnJlYWs7Y2FzZSJtdWwiOm89dC5wb3AoKTtzPXQucG9wKCk7dC5wdXNoKHMqbyk7YnJlYWs7Y2FzZSJuZSI6bz10LnBvcCgpO3M9dC5wb3AoKTt0LnB1c2gocyE9PW8pO2JyZWFrO2Nhc2UibmVnIjpzPXQucG9wKCk7dC5wdXNoKC1zKTticmVhaztjYXNlIm5vdCI6cz10LnBvcCgpOyJib29sZWFuIj09dHlwZW9mIHM/dC5wdXNoKCFzKTp0LnB1c2gofnMpO2JyZWFrO2Nhc2Uib3IiOm89dC5wb3AoKTtzPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgcyYmImJvb2xlYW4iPT10eXBlb2Ygbz90LnB1c2goc3x8byk6dC5wdXNoKHN8byk7YnJlYWs7Y2FzZSJwb3AiOnQucG9wKCk7YnJlYWs7Y2FzZSJyb2xsIjpvPXQucG9wKCk7cz10LnBvcCgpO3Qucm9sbChzLG8pO2JyZWFrO2Nhc2Uicm91bmQiOnM9dC5wb3AoKTt0LnB1c2goTWF0aC5yb3VuZChzKSk7YnJlYWs7Y2FzZSJzaW4iOnM9dC5wb3AoKTt0LnB1c2goTWF0aC5zaW4ocyUzNjAvMTgwKk1hdGguUEkpKTticmVhaztjYXNlInNxcnQiOnM9dC5wb3AoKTt0LnB1c2goTWF0aC5zcXJ0KHMpKTticmVhaztjYXNlInN1YiI6bz10LnBvcCgpO3M9dC5wb3AoKTt0LnB1c2gocy1vKTticmVhaztjYXNlInRydWUiOnQucHVzaCghMCk7YnJlYWs7Y2FzZSJ0cnVuY2F0ZSI6cz10LnBvcCgpO3M9czwwP01hdGguY2VpbChzKTpNYXRoLmZsb29yKHMpO3QucHVzaChzKTticmVhaztjYXNlInhvciI6bz10LnBvcCgpO3M9dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBzJiYiYm9vbGVhbiI9PXR5cGVvZiBvP3QucHVzaChzIT09byk6dC5wdXNoKHNebyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHtufWApfWVsc2UgdC5wdXNoKG4pfXJldHVybiB0LnN0YWNrfX1jbGFzcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUpe3RoaXMudHlwZT1lfXZpc2l0KGUpe3VucmVhY2hhYmxlKCJhYnN0cmFjdCBtZXRob2QiKX19Y2xhc3MgQXN0QXJndW1lbnQgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiYXJncyIpO3RoaXMuaW5kZXg9ZTt0aGlzLm1pbj10O3RoaXMubWF4PWF9dmlzaXQoZSl7ZS52aXNpdEFyZ3VtZW50KHRoaXMpfX1jbGFzcyBBc3RMaXRlcmFsIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigibGl0ZXJhbCIpO3RoaXMubnVtYmVyPWU7dGhpcy5taW49ZTt0aGlzLm1heD1lfXZpc2l0KGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1jbGFzcyBBc3RCaW5hcnlPcGVyYXRpb24gZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhLHIsaSl7c3VwZXIoImJpbmFyeSIpO3RoaXMub3A9ZTt0aGlzLmFyZzE9dDt0aGlzLmFyZzI9YTt0aGlzLm1pbj1yO3RoaXMubWF4PWl9dmlzaXQoZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19Y2xhc3MgQXN0TWluIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJtYXgiKTt0aGlzLmFyZz1lO3RoaXMubWluPWUubWluO3RoaXMubWF4PXR9dmlzaXQoZSl7ZS52aXNpdE1pbih0aGlzKX19Y2xhc3MgQXN0VmFyaWFibGUgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigidmFyIik7dGhpcy5pbmRleD1lO3RoaXMubWluPXQ7dGhpcy5tYXg9YX12aXNpdChlKXtlLnZpc2l0VmFyaWFibGUodGhpcyl9fWNsYXNzIEFzdFZhcmlhYmxlRGVmaW5pdGlvbiBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigiZGVmaW5pdGlvbiIpO3RoaXMudmFyaWFibGU9ZTt0aGlzLmFyZz10fXZpc2l0KGUpe2UudmlzaXRWYXJpYWJsZURlZmluaXRpb24odGhpcyl9fWNsYXNzIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcntjb25zdHJ1Y3Rvcigpe3RoaXMucGFydHM9W119dmlzaXRBcmd1bWVudChlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWF4KCIsZS5taW4sIiwgTWF0aC5taW4oIixlLm1heCwiLCBzcmNbc3JjT2Zmc2V0ICsgIixlLmluZGV4LCJdKSkiKX12aXNpdFZhcmlhYmxlKGUpe3RoaXMucGFydHMucHVzaCgidiIsZS5pbmRleCl9dmlzaXRMaXRlcmFsKGUpe3RoaXMucGFydHMucHVzaChlLm51bWJlcil9dmlzaXRCaW5hcnlPcGVyYXRpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCIoIik7ZS5hcmcxLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiICIsZS5vcCwiICIpO2UuYXJnMi52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIikiKX12aXNpdFZhcmlhYmxlRGVmaW5pdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goInZhciAiKTtlLnZhcmlhYmxlLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiID0gIik7ZS5hcmcudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCI7Iil9dmlzaXRNaW4oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1pbigiKTtlLmFyZy52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIiwgIixlLm1heCwiKSIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMucGFydHMuam9pbigiIil9fWZ1bmN0aW9uIGJ1aWxkQWRkT3BlcmF0aW9uKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBBc3RMaXRlcmFsKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIrIixlLHQsZS5taW4rdC5taW4sZS5tYXgrdC5tYXgpfWZ1bmN0aW9uIGJ1aWxkTXVsT3BlcmF0aW9uKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fWNvbnN0IGE9TWF0aC5taW4oZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpLHI9TWF0aC5tYXgoZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpO3JldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIqIixlLHQsYSxyKX1mdW5jdGlvbiBidWlsZFN1Yk9wZXJhdGlvbihlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IEFzdExpdGVyYWwoZS5udW1iZXItdC5udW1iZXIpfXJldHVybiJiaW5hcnkiPT09dC50eXBlJiYiLSI9PT10Lm9wJiYibGl0ZXJhbCI9PT1lLnR5cGUmJjE9PT1lLm51bWJlciYmImxpdGVyYWwiPT09dC5hcmcxLnR5cGUmJjE9PT10LmFyZzEubnVtYmVyP3QuYXJnMjpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCItIixlLHQsZS5taW4tdC5tYXgsZS5tYXgtdC5taW4pfWZ1bmN0aW9uIGJ1aWxkTWluT3BlcmF0aW9uKGUsdCl7cmV0dXJuIGUubWluPj10P25ldyBBc3RMaXRlcmFsKHQpOmUubWF4PD10P2U6bmV3IEFzdE1pbihlLHQpfWNsYXNzIFBvc3RTY3JpcHRDb21waWxlcntjb21waWxlKGUsdCxhKXtjb25zdCByPVtdLGk9W10sbj10Lmxlbmd0aD4+MSxzPWEubGVuZ3RoPj4xO2xldCBvLGMsbCxoLHUsZCxmLGcscD0wO2ZvcihsZXQgZT0wO2U8bjtlKyspci5wdXNoKG5ldyBBc3RBcmd1bWVudChlLHRbMiplXSx0WzIqZSsxXSkpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Zz1lW3RdO2lmKCJudW1iZXIiIT10eXBlb2YgZylzd2l0Y2goZyl7Y2FzZSJhZGQiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRBZGRPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJjdnIiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSJtdWwiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRNdWxPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRTdWJPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJleGNoIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO3U9ci5wb3AoKTtkPXIucG9wKCk7ci5wdXNoKHUsZCk7YnJlYWs7Y2FzZSJwb3AiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7ci5wb3AoKTticmVhaztjYXNlImluZGV4IjppZihyLmxlbmd0aDwxKXJldHVybiBudWxsO2w9ci5wb3AoKTtpZigibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7bz1sLm51bWJlcjtpZihvPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHxyLmxlbmd0aDxvKXJldHVybiBudWxsO3U9cltyLmxlbmd0aC1vLTFdO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtby0xXT1mO3IucHVzaChmKTtpLnB1c2gobmV3IEFzdFZhcmlhYmxlRGVmaW5pdGlvbihmLHUpKTticmVhaztjYXNlImR1cCI6aWYoci5sZW5ndGg8MSlyZXR1cm4gbnVsbDtpZigibnVtYmVyIj09dHlwZW9mIGVbdCsxXSYmImd0Ij09PWVbdCsyXSYmZVt0KzNdPT09dCs3JiYianoiPT09ZVt0KzRdJiYicG9wIj09PWVbdCs1XSYmZVt0KzZdPT09ZVt0KzFdKXtsPXIucG9wKCk7ci5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKGwsZVt0KzFdKSk7dCs9NjticmVha311PXIuYXQoLTEpO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtMV09ZjtyLnB1c2goZik7aS5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24oZix1KSk7YnJlYWs7Y2FzZSJyb2xsIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO2g9ci5wb3AoKTtsPXIucG9wKCk7aWYoImxpdGVyYWwiIT09aC50eXBlfHwibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7Yz1oLm51bWJlcjtvPWwubnVtYmVyO2lmKG88PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihjKXx8ci5sZW5ndGg8bylyZXR1cm4gbnVsbDtjPShjJW8rbyklbztpZigwPT09YylicmVhaztyLnB1c2goLi4uci5zcGxpY2Uoci5sZW5ndGgtbyxvLWMpKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfWVsc2Ugci5wdXNoKG5ldyBBc3RMaXRlcmFsKGcpKX1pZihyLmxlbmd0aCE9PXMpcmV0dXJuIG51bGw7Y29uc3QgbT1bXTtmb3IoY29uc3QgZSBvZiBpKXtjb25zdCB0PW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7ZS52aXNpdCh0KTttLnB1c2godC50b1N0cmluZygpKX1mb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9cltlXSxpPW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7dC52aXNpdChpKTtjb25zdCBuPWFbMiplXSxzPWFbMiplKzFdLG89W2kudG9TdHJpbmcoKV07aWYobj50Lm1pbil7by51bnNoaWZ0KCJNYXRoLm1heCgiLG4sIiwgIik7by5wdXNoKCIpIil9aWYoczx0Lm1heCl7by51bnNoaWZ0KCJNYXRoLm1pbigiLHMsIiwgIik7by5wdXNoKCIpIil9by51bnNoaWZ0KCJkZXN0W2Rlc3RPZmZzZXQgKyAiLGUsIl0gPSAiKTtvLnB1c2goIjsiKTttLnB1c2goby5qb2luKCIiKSl9cmV0dXJuIG0uam9pbigiXG4iKX19Y29uc3Qgc249WyJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJTIiwiQiIsIlMiLCJXUyIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkIiLCJCIiwiUyIsIldTIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJFUyIsIkNTIiwiRVMiLCJDUyIsIkNTIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJDUyIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQ1MiLCJPTiIsIkVUIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiT04iLCJPTiIsIkJOIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFTiIsIkVOIiwiT04iLCJMIiwiT04iLCJPTiIsIk9OIiwiRU4iLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCJdLG9uPVsiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiT04iLCJPTiIsIkFMIiwiRVQiLCJFVCIsIkFMIiwiQ1MiLCJBTCIsIk9OIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJFVCIsIkFOIiwiQU4iLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQU4iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCJdO2Z1bmN0aW9uIGlzT2RkKGUpe3JldHVybiEhKDEmZSl9ZnVuY3Rpb24gaXNFdmVuKGUpe3JldHVybiEoMSZlKX1mdW5jdGlvbiBmaW5kVW5lcXVhbChlLHQsYSl7bGV0IHIsaTtmb3Iocj10LGk9ZS5sZW5ndGg7cjxpOysrcilpZihlW3JdIT09YSlyZXR1cm4gcjtyZXR1cm4gcn1mdW5jdGlvbiByZXZlcnNlVmFsdWVzKGUsdCxhKXtmb3IobGV0IHI9dCxpPWEtMTtyPGk7KytyLC0taSl7Y29uc3QgdD1lW3JdO2Vbcl09ZVtpXTtlW2ldPXR9fWZ1bmN0aW9uIGNyZWF0ZUJpZGlUZXh0KGUsdCxhPSExKXtsZXQgcj0ibHRyIjthP3I9InR0YiI6dHx8KHI9InJ0bCIpO3JldHVybntzdHI6ZSxkaXI6cn19Y29uc3QgY249W10sbG49W107ZnVuY3Rpb24gYmlkaShlLHQ9LTEsYT0hMSl7bGV0IHI9ITA7Y29uc3QgaT1lLmxlbmd0aDtpZigwPT09aXx8YSlyZXR1cm4gY3JlYXRlQmlkaVRleHQoZSxyLGEpO2NuLmxlbmd0aD1pO2xuLmxlbmd0aD1pO2xldCBuLHMsbz0wO2ZvcihuPTA7bjxpOysrbil7Y25bbl09ZS5jaGFyQXQobik7Y29uc3QgdD1lLmNoYXJDb2RlQXQobik7bGV0IGE9IkwiO2lmKHQ8PTI1NSlhPXNuW3RdO2Vsc2UgaWYoMTQyNDw9dCYmdDw9MTUyNClhPSJSIjtlbHNlIGlmKDE1MzY8PXQmJnQ8PTE3OTEpe2E9b25bMjU1JnRdO2F8fHdhcm4oIkJpZGk6IGludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIgIit0LnRvU3RyaW5nKDE2KSl9ZWxzZSgxNzkyPD10JiZ0PD0yMjIwfHw2NDMzNjw9dCYmdDw9NjUwMjN8fDY1MTM2PD10JiZ0PD02NTI3OSkmJihhPSJBTCIpOyJSIiE9PWEmJiJBTCIhPT1hJiYiQU4iIT09YXx8bysrO2xuW25dPWF9aWYoMD09PW8pe3I9ITA7cmV0dXJuIGNyZWF0ZUJpZGlUZXh0KGUscil9aWYoLTE9PT10KWlmKG8vaTwuMyYmaT40KXtyPSEwO3Q9MH1lbHNle3I9ITE7dD0xfWNvbnN0IGM9W107Zm9yKG49MDtuPGk7KytuKWNbbl09dDtjb25zdCBsPWlzT2RkKHQpPyJSIjoiTCIsaD1sLHU9aDtsZXQgZCxmPWg7Zm9yKG49MDtuPGk7KytuKSJOU00iPT09bG5bbl0/bG5bbl09ZjpmPWxuW25dO2Y9aDtmb3Iobj0wO248aTsrK24pe2Q9bG5bbl07IkVOIj09PWQ/bG5bbl09IkFMIj09PWY/IkFOIjoiRU4iOiJSIiE9PWQmJiJMIiE9PWQmJiJBTCIhPT1kfHwoZj1kKX1mb3Iobj0wO248aTsrK24pe2Q9bG5bbl07IkFMIj09PWQmJihsbltuXT0iUiIpfWZvcihuPTE7bjxpLTE7KytuKXsiRVMiPT09bG5bbl0mJiJFTiI9PT1sbltuLTFdJiYiRU4iPT09bG5bbisxXSYmKGxuW25dPSJFTiIpOyJDUyIhPT1sbltuXXx8IkVOIiE9PWxuW24tMV0mJiJBTiIhPT1sbltuLTFdfHxsbltuKzFdIT09bG5bbi0xXXx8KGxuW25dPWxuW24tMV0pfWZvcihuPTA7bjxpOysrbilpZigiRU4iPT09bG5bbl0pe2ZvcihsZXQgZT1uLTE7ZT49MCYmIkVUIj09PWxuW2VdOy0tZSlsbltlXT0iRU4iO2ZvcihsZXQgZT1uKzE7ZTxpJiYiRVQiPT09bG5bZV07KytlKWxuW2VdPSJFTiJ9Zm9yKG49MDtuPGk7KytuKXtkPWxuW25dOyJXUyIhPT1kJiYiRVMiIT09ZCYmIkVUIiE9PWQmJiJDUyIhPT1kfHwobG5bbl09Ik9OIil9Zj1oO2ZvcihuPTA7bjxpOysrbil7ZD1sbltuXTsiRU4iPT09ZD9sbltuXT0iTCI9PT1mPyJMIjoiRU4iOiJSIiE9PWQmJiJMIiE9PWR8fChmPWQpfWZvcihuPTA7bjxpOysrbilpZigiT04iPT09bG5bbl0pe2NvbnN0IGU9ZmluZFVuZXF1YWwobG4sbisxLCJPTiIpO2xldCB0PWg7bj4wJiYodD1sbltuLTFdKTtsZXQgYT11O2UrMTxpJiYoYT1sbltlKzFdKTsiTCIhPT10JiYodD0iUiIpOyJMIiE9PWEmJihhPSJSIik7dD09PWEmJmxuLmZpbGwodCxuLGUpO249ZS0xfWZvcihuPTA7bjxpOysrbikiT04iPT09bG5bbl0mJihsbltuXT1sKTtmb3Iobj0wO248aTsrK24pe2Q9bG5bbl07aXNFdmVuKGNbbl0pPyJSIj09PWQ/Y1tuXSs9MToiQU4iIT09ZCYmIkVOIiE9PWR8fChjW25dKz0yKToiTCIhPT1kJiYiQU4iIT09ZCYmIkVOIiE9PWR8fChjW25dKz0xKX1sZXQgZyxwPS0xLG09OTk7Zm9yKG49MCxzPWMubGVuZ3RoO248czsrK24pe2c9Y1tuXTtwPGcmJihwPWcpO20+ZyYmaXNPZGQoZykmJihtPWcpfWZvcihnPXA7Zz49bTstLWcpe2xldCBlPS0xO2ZvcihuPTAscz1jLmxlbmd0aDtuPHM7KytuKWlmKGNbbl08Zyl7aWYoZT49MCl7cmV2ZXJzZVZhbHVlcyhjbixlLG4pO2U9LTF9fWVsc2UgZTwwJiYoZT1uKTtlPj0wJiZyZXZlcnNlVmFsdWVzKGNuLGUsYy5sZW5ndGgpfWZvcihuPTAscz1jbi5sZW5ndGg7bjxzOysrbil7Y29uc3QgZT1jbltuXTsiPCIhPT1lJiYiPiIhPT1lfHwoY25bbl09IiIpfXJldHVybiBjcmVhdGVCaWRpVGV4dChjbi5qb2luKCIiKSxyKX1jb25zdCBobj17c3R5bGU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwifSx1bj17c3R5bGU6Im5vcm1hbCIsd2VpZ2h0OiJib2xkIn0sZG49e3N0eWxlOiJpdGFsaWMiLHdlaWdodDoibm9ybWFsIn0sZm49e3N0eWxlOiJpdGFsaWMiLHdlaWdodDoiYm9sZCJ9LGduPW5ldyBNYXAoW1siVGltZXMtUm9tYW4iLHtsb2NhbDpbIlRpbWVzIE5ldyBSb21hbiIsIlRpbWVzLVJvbWFuIiwiVGltZXMiLCJMaWJlcmF0aW9uIFNlcmlmIiwiTmltYnVzIFJvbWFuIiwiTmltYnVzIFJvbWFuIEwiLCJUaW5vcyIsIlRob3JuZGFsZSIsIlRlWCBHeXJlIFRlcm1lcyIsIkZyZWVTZXJpZiIsIkxpbnV4IExpYmVydGluZSBPIiwiTGliZXJ0aW51cyBTZXJpZiIsIlBUIEFzdHJhIFNlcmlmIiwiRGVqYVZ1IFNlcmlmIiwiQml0c3RyZWFtIFZlcmEgU2VyaWYiLCJVYnVudHUiXSxzdHlsZTpobix1bHRpbWF0ZToic2VyaWYifV0sWyJUaW1lcy1Cb2xkIix7YWxpYXM6IlRpbWVzLVJvbWFuIixzdHlsZTp1bix1bHRpbWF0ZToic2VyaWYifV0sWyJUaW1lcy1JdGFsaWMiLHthbGlhczoiVGltZXMtUm9tYW4iLHN0eWxlOmRuLHVsdGltYXRlOiJzZXJpZiJ9XSxbIlRpbWVzLUJvbGRJdGFsaWMiLHthbGlhczoiVGltZXMtUm9tYW4iLHN0eWxlOmZuLHVsdGltYXRlOiJzZXJpZiJ9XSxbIkhlbHZldGljYSIse2xvY2FsOlsiSGVsdmV0aWNhIiwiSGVsdmV0aWNhIE5ldWUiLCJBcmlhbCIsIkFyaWFsIE5vdmEiLCJMaWJlcmF0aW9uIFNhbnMiLCJBcmltbyIsIk5pbWJ1cyBTYW5zIiwiTmltYnVzIFNhbnMgTCIsIkEwMzAiLCJUZVggR3lyZSBIZXJvcyIsIkZyZWVTYW5zIiwiRGVqYVZ1IFNhbnMiLCJBbGJhbnkiLCJCaXRzdHJlYW0gVmVyYSBTYW5zIiwiQXJpYWwgVW5pY29kZSBNUyIsIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwiQXBwbGUgU3ltYm9scyIsIkNhbnRhcmVsbCJdLHBhdGg6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIixzdHlsZTpobix1bHRpbWF0ZToic2Fucy1zZXJpZiJ9XSxbIkhlbHZldGljYS1Cb2xkIix7YWxpYXM6IkhlbHZldGljYSIscGF0aDoiTGliZXJhdGlvblNhbnMtQm9sZC50dGYiLHN0eWxlOnVuLHVsdGltYXRlOiJzYW5zLXNlcmlmIn1dLFsiSGVsdmV0aWNhLU9ibGlxdWUiLHthbGlhczoiSGVsdmV0aWNhIixwYXRoOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIixzdHlsZTpkbix1bHRpbWF0ZToic2Fucy1zZXJpZiJ9XSxbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIse2FsaWFzOiJIZWx2ZXRpY2EiLHBhdGg6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIixzdHlsZTpmbix1bHRpbWF0ZToic2Fucy1zZXJpZiJ9XSxbIkNvdXJpZXIiLHtsb2NhbDpbIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkxpYmVyYXRpb24gTW9ubyIsIk5pbWJ1cyBNb25vIiwiTmltYnVzIE1vbm8gTCIsIkNvdXNpbmUiLCJDdW1iZXJsYW5kIiwiVGVYIEd5cmUgQ3Vyc29yIiwiRnJlZU1vbm8iLCJMaW51eCBMaWJlcnRpbmUgTW9ubyBPIiwiTGliZXJ0aW51cyBNb25vIl0sc3R5bGU6aG4sdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkNvdXJpZXItQm9sZCIse2FsaWFzOiJDb3VyaWVyIixzdHlsZTp1bix1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQ291cmllci1PYmxpcXVlIix7YWxpYXM6IkNvdXJpZXIiLHN0eWxlOmRuLHVsdGltYXRlOiJtb25vc3BhY2UifV0sWyJDb3VyaWVyLUJvbGRPYmxpcXVlIix7YWxpYXM6IkNvdXJpZXIiLHN0eWxlOmZuLHVsdGltYXRlOiJtb25vc3BhY2UifV0sWyJBcmlhbEJsYWNrIix7bG9jYWw6WyJBcmlhbCBCbGFjayJdLHN0eWxlOntzdHlsZToibm9ybWFsIix3ZWlnaHQ6IjkwMCJ9LGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZCJ9XSxbIkFyaWFsQmxhY2stQm9sZCIse2FsaWFzOiJBcmlhbEJsYWNrIn1dLFsiQXJpYWxCbGFjay1JdGFsaWMiLHthbGlhczoiQXJpYWxCbGFjayIsc3R5bGU6e3N0eWxlOiJpdGFsaWMiLHdlaWdodDoiOTAwIn0sZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJ9XSxbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyIse2FsaWFzOiJBcmlhbEJsYWNrLUl0YWxpYyJ9XSxbIkFyaWFsTmFycm93Iix7bG9jYWw6WyJBcmlhbCBOYXJyb3ciLCJMaWJlcmF0aW9uIFNhbnMgTmFycm93IiwiSGVsdmV0aWNhIENvbmRlbnNlZCIsIk5pbWJ1cyBTYW5zIE5hcnJvdyIsIlRlWCBHeXJlIEhlcm9zIENuIl0sc3R5bGU6aG4sZmFsbGJhY2s6IkhlbHZldGljYSJ9XSxbIkFyaWFsTmFycm93LUJvbGQiLHthbGlhczoiQXJpYWxOYXJyb3ciLHN0eWxlOnVuLGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZCJ9XSxbIkFyaWFsTmFycm93LUl0YWxpYyIse2FsaWFzOiJBcmlhbE5hcnJvdyIsc3R5bGU6ZG4sZmFsbGJhY2s6IkhlbHZldGljYS1PYmxpcXVlIn1dLFsiQXJpYWxOYXJyb3ctQm9sZEl0YWxpYyIse2FsaWFzOiJBcmlhbE5hcnJvdyIsc3R5bGU6Zm4sZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJ9XSxbIkNhbGlicmkiLHtsb2NhbDpbIkNhbGlicmkiLCJDYXJsaXRvIl0sc3R5bGU6aG4sZmFsbGJhY2s6IkhlbHZldGljYSJ9XSxbIkNhbGlicmktQm9sZCIse2FsaWFzOiJDYWxpYnJpIixzdHlsZTp1bixmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGQifV0sWyJDYWxpYnJpLUl0YWxpYyIse2FsaWFzOiJDYWxpYnJpIixzdHlsZTpkbixmYWxsYmFjazoiSGVsdmV0aWNhLU9ibGlxdWUifV0sWyJDYWxpYnJpLUJvbGRJdGFsaWMiLHthbGlhczoiQ2FsaWJyaSIsc3R5bGU6Zm4sZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJ9XSxbIldpbmdkaW5ncyIse2xvY2FsOlsiV2luZ2RpbmdzIiwiVVJXIERpbmdiYXRzIl0sc3R5bGU6aG59XSxbIldpbmdkaW5ncy1SZWd1bGFyIix7YWxpYXM6IldpbmdkaW5ncyJ9XSxbIldpbmdkaW5ncy1Cb2xkIix7YWxpYXM6IldpbmdkaW5ncyJ9XV0pLHBuPW5ldyBNYXAoW1siQXJpYWwtQmxhY2siLCJBcmlhbEJsYWNrIl1dKTtmdW5jdGlvbiBnZXRGYW1pbHlOYW1lKGUpe2NvbnN0IHQ9bmV3IFNldChbInRoaW4iLCJleHRyYWxpZ2h0IiwidWx0cmFsaWdodCIsImRlbWlsaWdodCIsInNlbWlsaWdodCIsImxpZ2h0IiwiYm9vayIsInJlZ3VsYXIiLCJub3JtYWwiLCJtZWRpdW0iLCJkZW1pYm9sZCIsInNlbWlib2xkIiwiYm9sZCIsImV4dHJhYm9sZCIsInVsdHJhYm9sZCIsImJsYWNrIiwiaGVhdnkiLCJleHRyYWJsYWNrIiwidWx0cmFibGFjayIsInJvbWFuIiwiaXRhbGljIiwib2JsaXF1ZSIsInVsdHJhY29uZGVuc2VkIiwiZXh0cmFjb25kZW5zZWQiLCJjb25kZW5zZWQiLCJzZW1pY29uZGVuc2VkIiwibm9ybWFsIiwic2VtaWV4cGFuZGVkIiwiZXhwYW5kZWQiLCJleHRyYWV4cGFuZGVkIiwidWx0cmFleHBhbmRlZCIsImJvbGRpdGFsaWMiXSk7cmV0dXJuIGUuc3BsaXQoL1stICwrXSsvZykuZmlsdGVyKGU9PiF0LmhhcyhlLnRvTG93ZXJDYXNlKCkpKS5qb2luKCIgIil9ZnVuY3Rpb24gZ2VuZXJhdGVGb250KHthbGlhczplLGxvY2FsOnQscGF0aDphLGZhbGxiYWNrOnIsc3R5bGU6aSx1bHRpbWF0ZTpufSxzLG8sYz0hMCxsPSEwLGg9IiIpe2NvbnN0IHU9e3N0eWxlOm51bGwsdWx0aW1hdGU6bnVsbH07aWYodCl7Y29uc3QgZT1oP2AgJHtofWA6IiI7Zm9yKGNvbnN0IGEgb2YgdClzLnB1c2goYGxvY2FsKCR7YX0ke2V9KWApfWlmKGUpe2NvbnN0IHQ9Z24uZ2V0KGUpLG49aHx8ZnVuY3Rpb24gZ2V0U3R5bGVUb0FwcGVuZChlKXtzd2l0Y2goZSl7Y2FzZSB1bjpyZXR1cm4iQm9sZCI7Y2FzZSBkbjpyZXR1cm4iSXRhbGljIjtjYXNlIGZuOnJldHVybiJCb2xkIEl0YWxpYyI7ZGVmYXVsdDppZigiYm9sZCI9PT1lPy53ZWlnaHQpcmV0dXJuIkJvbGQiO2lmKCJpdGFsaWMiPT09ZT8uc3R5bGUpcmV0dXJuIkl0YWxpYyJ9cmV0dXJuIiJ9KGkpO09iamVjdC5hc3NpZ24odSxnZW5lcmF0ZUZvbnQodCxzLG8sYyYmIXIsbCYmIWEsbikpfWkmJih1LnN0eWxlPWkpO24mJih1LnVsdGltYXRlPW4pO2lmKGMmJnIpe2NvbnN0IGU9Z24uZ2V0KHIpLHt1bHRpbWF0ZTp0fT1nZW5lcmF0ZUZvbnQoZSxzLG8sYyxsJiYhYSxoKTt1LnVsdGltYXRlfHw9dH1sJiZhJiZvJiZzLnB1c2goYHVybCgke299JHthfSlgKTtyZXR1cm4gdX1mdW5jdGlvbiBnZXRGb250U3Vic3RpdHV0aW9uKGUsdCxhLHIsaSxuKXtpZihyLnN0YXJ0c1dpdGgoIkludmFsaWRQREZqc0ZvbnRfIikpcmV0dXJuIG51bGw7IlRydWVUeXBlIiE9PW4mJiJUeXBlMSIhPT1ufHwhL15bQS1aXXs2fVwrLy50ZXN0KHIpfHwocj1yLnNsaWNlKDcpKTtjb25zdCBzPXI9bm9ybWFsaXplRm9udE5hbWUocik7bGV0IG89ZS5nZXQocyk7aWYobylyZXR1cm4gbztsZXQgYz1nbi5nZXQocik7aWYoIWMpZm9yKGNvbnN0W2UsdF1vZiBwbilpZihyLnN0YXJ0c1dpdGgoZSkpe3I9YCR7dH0ke3Iuc3Vic3RyaW5nKGUubGVuZ3RoKX1gO2M9Z24uZ2V0KHIpO2JyZWFrfWxldCBsPSExO2lmKCFjKXtjPWduLmdldChpKTtsPSEwfWNvbnN0IGg9YCR7dC5nZXREb2NJZCgpfV9zJHt0LmNyZWF0ZUZvbnRJZCgpfWA7aWYoIWMpe2lmKCF2YWxpZGF0ZUZvbnROYW1lKHIpKXt3YXJuKGBDYW5ub3Qgc3Vic3RpdHV0ZSB0aGUgZm9udCBiZWNhdXNlIG9mIGl0cyBuYW1lOiAke3J9YCk7ZS5zZXQocyxudWxsKTtyZXR1cm4gbnVsbH1jb25zdCB0PS9ib2xkL2dpLnRlc3QociksYT0vb2JsaXF1ZXxpdGFsaWMvZ2kudGVzdChyKSxpPXQmJmEmJmZufHx0JiZ1bnx8YSYmZG58fGhuO289e2NzczpgIiR7Z2V0RmFtaWx5TmFtZShyKX0iLCR7aH1gLGd1ZXNzRmFsbGJhY2s6ITAsbG9hZGVkTmFtZTpoLGJhc2VGb250TmFtZTpyLHNyYzpgbG9jYWwoJHtyfSlgLHN0eWxlOml9O2Uuc2V0KHMsbyk7cmV0dXJuIG99Y29uc3QgdT1bXTtsJiZ2YWxpZGF0ZUZvbnROYW1lKHIpJiZ1LnB1c2goYGxvY2FsKCR7cn0pYCk7Y29uc3R7c3R5bGU6ZCx1bHRpbWF0ZTpmfT1nZW5lcmF0ZUZvbnQoYyx1LGEpLGc9bnVsbD09PWYscD1nPyIiOmAsJHtmfWA7bz17Y3NzOmAiJHtnZXRGYW1pbHlOYW1lKHIpfSIsJHtofSR7cH1gLGd1ZXNzRmFsbGJhY2s6Zyxsb2FkZWROYW1lOmgsYmFzZUZvbnROYW1lOnIsc3JjOnUuam9pbigiLCIpLHN0eWxlOmR9O2Uuc2V0KHMsbyk7cmV0dXJuIG99Y29uc3QgbW49MzI4NTM3NzUyMCxibj00Mjk0OTAxNzYwLHluPTY1NTM1O2NsYXNzIE11cm11ckhhc2gzXzY0e2NvbnN0cnVjdG9yKGUpe3RoaXMuaDE9ZT80Mjk0OTY3Mjk1JmU6bW47dGhpcy5oMj1lPzQyOTQ5NjcyOTUmZTptbn11cGRhdGUoZSl7bGV0IHQsYTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3Q9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCk7YT0wO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3QgaT1lLmNoYXJDb2RlQXQocik7aWYoaTw9MjU1KXRbYSsrXT1pO2Vsc2V7dFthKytdPWk+Pj44O3RbYSsrXT0yNTUmaX19fWVsc2V7aWYoIUFycmF5QnVmZmVyLmlzVmlldyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0YSBmb3JtYXQsIG11c3QgYmUgYSBzdHJpbmcgb3IgVHlwZWRBcnJheS4iKTt0PWUuc2xpY2UoKTthPXQuYnl0ZUxlbmd0aH1jb25zdCByPWE+PjIsaT1hLTQqcixuPW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciwwLHIpO2xldCBzPTAsbz0wLGM9dGhpcy5oMSxsPXRoaXMuaDI7Y29uc3QgaD0zNDMyOTE4MzUzLHU9NDYxODQ1OTA3LGQ9MTE2MDEsZj0xMzcxNTtmb3IobGV0IGU9MDtlPHI7ZSsrKWlmKDEmZSl7cz1uW2VdO3M9cypoJmJufHMqZCZ5bjtzPXM8PDE1fHM+Pj4xNztzPXMqdSZibnxzKmYmeW47Y149cztjPWM8PDEzfGM+Pj4xOTtjPTUqYyszODY0MjkyMTk2fWVsc2V7bz1uW2VdO289bypoJmJufG8qZCZ5bjtvPW88PDE1fG8+Pj4xNztvPW8qdSZibnxvKmYmeW47bF49bztsPWw8PDEzfGw+Pj4xOTtsPTUqbCszODY0MjkyMTk2fXM9MDtzd2l0Y2goaSl7Y2FzZSAzOnNePXRbNCpyKzJdPDwxNjtjYXNlIDI6c149dFs0KnIrMV08PDg7Y2FzZSAxOnNePXRbNCpyXTtzPXMqaCZibnxzKmQmeW47cz1zPDwxNXxzPj4+MTc7cz1zKnUmYm58cypmJnluOzEmcj9jXj1zOmxePXN9dGhpcy5oMT1jO3RoaXMuaDI9bH1oZXhkaWdlc3QoKXtsZXQgZT10aGlzLmgxLHQ9dGhpcy5oMjtlXj10Pj4+MTtlPTM5ODE4MDY3OTcqZSZibnwzNjA0NSplJnluO3Q9NDI4MzU0MzUxMSp0JmJufCgyOTUwMTYzNzk3Kih0PDwxNnxlPj4+MTYpJmJuKT4+PjE2O2VePXQ+Pj4xO2U9NDQ0OTg0NDAzKmUmYm58NjA0OTkqZSZ5bjt0PTMzMDE4ODIzNjYqdCZibnwoMzEyMDQzNzg5MyoodDw8MTZ8ZT4+PjE2KSZibik+Pj4xNjtlXj10Pj4+MTtyZXR1cm4oZT4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIikrKHQ+Pj4wKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwiMCIpfX1mdW5jdGlvbiByZXNpemVJbWFnZU1hc2soZSx0LGEscixpLG4pe2NvbnN0IHM9aSpuO2xldCBvO289dDw9OD9uZXcgVWludDhBcnJheShzKTp0PD0xNj9uZXcgVWludDE2QXJyYXkocyk6bmV3IFVpbnQzMkFycmF5KHMpO2NvbnN0IGM9YS9pLGw9ci9uO2xldCBoLHUsZCxmLGc9MDtjb25zdCBwPW5ldyBVaW50MTZBcnJheShpKSxtPWE7Zm9yKGg9MDtoPGk7aCsrKXBbaF09TWF0aC5mbG9vcihoKmMpO2ZvcihoPTA7aDxuO2grKyl7ZD1NYXRoLmZsb29yKGgqbCkqbTtmb3IodT0wO3U8aTt1Kyspe2Y9ZCtwW3VdO29bZysrXT1lW2ZdfX1yZXR1cm4gb31jbGFzcyBQREZJbWFnZXtjb25zdHJ1Y3Rvcih7eHJlZjplLHJlczp0LGltYWdlOmEsaXNJbmxpbmU6cj0hMSxzbWFzazppPW51bGwsbWFzazpuPW51bGwsaXNNYXNrOnM9ITEscGRmRnVuY3Rpb25GYWN0b3J5Om8sZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOmMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6bH0pe3RoaXMuaW1hZ2U9YTtjb25zdCBoPWEuZGljdCx1PWguZ2V0KCJGIiwiRmlsdGVyIik7bGV0IGQ7aWYodSBpbnN0YW5jZW9mIE5hbWUpZD11Lm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KHUpKXtjb25zdCB0PWUuZmV0Y2hJZlJlZih1WzBdKTt0IGluc3RhbmNlb2YgTmFtZSYmKGQ9dC5uYW1lKX1zd2l0Y2goZCl7Y2FzZSJKUFhEZWNvZGUiOih7d2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsY29tcG9uZW50c0NvdW50OmEubnVtQ29tcHMsYml0c1BlckNvbXBvbmVudDphLmJpdHNQZXJDb21wb25lbnR9PUpweEltYWdlLnBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGEuc3RyZWFtKSk7YS5zdHJlYW0ucmVzZXQoKTtjb25zdCBlPUltYWdlUmVzaXplci5nZXRSZWR1Y2VQb3dlckZvckpQWChhLndpZHRoLGEuaGVpZ2h0LGEubnVtQ29tcHMpO3RoaXMuanB4RGVjb2Rlck9wdGlvbnM9e251bUNvbXBvbmVudHM6MCxpc0luZGV4ZWRDb2xvcm1hcDohMSxzbWFza0luRGF0YTpoLmhhcygiU01hc2tJbkRhdGEiKSxyZWR1Y2VQb3dlcjplfTtpZihlKXtjb25zdCB0PTIqKmU7YS53aWR0aD1NYXRoLmNlaWwoYS53aWR0aC90KTthLmhlaWdodD1NYXRoLmNlaWwoYS5oZWlnaHQvdCl9YnJlYWs7Y2FzZSJKQklHMkRlY29kZSI6YS5iaXRzUGVyQ29tcG9uZW50PTE7YS5udW1Db21wcz0xfWxldCBmPWguZ2V0KCJXIiwiV2lkdGgiKSxnPWguZ2V0KCJIIiwiSGVpZ2h0Iik7aWYoTnVtYmVyLmlzSW50ZWdlcihhLndpZHRoKSYmYS53aWR0aD4wJiZOdW1iZXIuaXNJbnRlZ2VyKGEuaGVpZ2h0KSYmYS5oZWlnaHQ+MCYmKGEud2lkdGghPT1mfHxhLmhlaWdodCE9PWcpKXt3YXJuKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpO2Y9YS53aWR0aDtnPWEuaGVpZ2h0fWVsc2V7Y29uc3QgZT0ibnVtYmVyIj09dHlwZW9mIGYmJmY+MCx0PSJudW1iZXIiPT10eXBlb2YgZyYmZz4wO2lmKCFlfHwhdCl7aWYoIWEuZmFsbGJhY2tEaW1zKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBpbWFnZSB3aWR0aDogJHtmfSBvciBoZWlnaHQ6ICR7Z31gKTt3YXJuKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIHBhcmVudCBpbWFnZSwgZm9yIFNNYXNrL01hc2sgZGF0YS4iKTtlfHwoZj1hLmZhbGxiYWNrRGltcy53aWR0aCk7dHx8KGc9YS5mYWxsYmFja0RpbXMuaGVpZ2h0KX19dGhpcy53aWR0aD1mO3RoaXMuaGVpZ2h0PWc7dGhpcy5pbnRlcnBvbGF0ZT1oLmdldCgiSSIsIkludGVycG9sYXRlIik7dGhpcy5pbWFnZU1hc2s9aC5nZXQoIklNIiwiSW1hZ2VNYXNrIil8fCExO3RoaXMubWF0dGU9aC5nZXQoIk1hdHRlIil8fCExO2xldCBwPWEuYml0c1BlckNvbXBvbmVudDtpZighcCl7cD1oLmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpO2lmKCFwKXtpZighdGhpcy5pbWFnZU1hc2spdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBCaXRzIHBlciBjb21wb25lbnQgbWlzc2luZyBpbiBpbWFnZTogJHt0aGlzLmltYWdlTWFza31gKTtwPTF9fXRoaXMuYnBjPXA7aWYoIXRoaXMuaW1hZ2VNYXNrKXtsZXQgaT1oLmdldFJhdygiQ1MiKXx8aC5nZXRSYXcoIkNvbG9yU3BhY2UiKTtjb25zdCBuPSEhaTtpZihuKXRoaXMuanB4RGVjb2Rlck9wdGlvbnM/LnNtYXNrSW5EYXRhJiYoaT1OYW1lLmdldCgiRGV2aWNlUkdCQSIpKTtlbHNlIGlmKHRoaXMuanB4RGVjb2Rlck9wdGlvbnMpaT1OYW1lLmdldCgiRGV2aWNlUkdCQSIpO2Vsc2Ugc3dpdGNoKGEubnVtQ29tcHMpe2Nhc2UgMTppPU5hbWUuZ2V0KCJEZXZpY2VHcmF5Iik7YnJlYWs7Y2FzZSAzOmk9TmFtZS5nZXQoIkRldmljZVJHQiIpO2JyZWFrO2Nhc2UgNDppPU5hbWUuZ2V0KCJEZXZpY2VDTVlLIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEltYWdlcyB3aXRoICR7YS5udW1Db21wc30gY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLmApfXRoaXMuY29sb3JTcGFjZT1Db2xvclNwYWNlVXRpbHMucGFyc2Uoe2NzOmkseHJlZjplLHJlc291cmNlczpyP3Q6bnVsbCxwZGZGdW5jdGlvbkZhY3Rvcnk6byxnbG9iYWxDb2xvclNwYWNlQ2FjaGU6Yyxsb2NhbENvbG9yU3BhY2VDYWNoZTpsfSk7dGhpcy5udW1Db21wcz10aGlzLmNvbG9yU3BhY2UubnVtQ29tcHM7aWYodGhpcy5qcHhEZWNvZGVyT3B0aW9ucyl7dGhpcy5qcHhEZWNvZGVyT3B0aW9ucy5udW1Db21wb25lbnRzPW4/dGhpcy5udW1Db21wczowO3RoaXMuanB4RGVjb2Rlck9wdGlvbnMuaXNJbmRleGVkQ29sb3JtYXA9IkluZGV4ZWQiPT09dGhpcy5jb2xvclNwYWNlLm5hbWV9fXRoaXMuZGVjb2RlPWguZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTt0aGlzLm5lZWRzRGVjb2RlPSExO2lmKHRoaXMuZGVjb2RlJiYodGhpcy5jb2xvclNwYWNlJiYhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSxwKXx8cyYmIUNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLDEpKSl7dGhpcy5uZWVkc0RlY29kZT0hMDtjb25zdCBlPSgxPDxwKS0xO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzPVtdO3RoaXMuZGVjb2RlQWRkZW5kcz1bXTtjb25zdCB0PSJJbmRleGVkIj09PXRoaXMuY29sb3JTcGFjZT8ubmFtZTtmb3IobGV0IGE9MCxyPTA7YTx0aGlzLmRlY29kZS5sZW5ndGg7YSs9MiwrK3Ipe2NvbnN0IGk9dGhpcy5kZWNvZGVbYV0sbj10aGlzLmRlY29kZVthKzFdO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzW3JdPXQ/KG4taSkvZTpuLWk7dGhpcy5kZWNvZGVBZGRlbmRzW3JdPXQ/aTplKml9fWlmKGkpe2kuZmFsbGJhY2tEaW1zPz89e3dpZHRoOmYsaGVpZ2h0Omd9O3RoaXMuc21hc2s9bmV3IFBERkltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6aSxpc0lubGluZTpyLHBkZkZ1bmN0aW9uRmFjdG9yeTpvLGdsb2JhbENvbG9yU3BhY2VDYWNoZTpjLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KX1lbHNlIGlmKG4paWYobiBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pe2lmKG4uZGljdC5nZXQoIklNIiwiSW1hZ2VNYXNrIikpe24uZmFsbGJhY2tEaW1zPz89e3dpZHRoOmYsaGVpZ2h0Omd9O3RoaXMubWFzaz1uZXcgUERGSW1hZ2Uoe3hyZWY6ZSxyZXM6dCxpbWFnZTpuLGlzSW5saW5lOnIsaXNNYXNrOiEwLHBkZkZ1bmN0aW9uRmFjdG9yeTpvLGdsb2JhbENvbG9yU3BhY2VDYWNoZTpjLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KX1lbHNlIHdhcm4oIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKX1lbHNlIHRoaXMubWFzaz1ufXN0YXRpYyBhc3luYyBidWlsZEltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6YSxpc0lubGluZTpyPSExLHBkZkZ1bmN0aW9uRmFjdG9yeTppLGdsb2JhbENvbG9yU3BhY2VDYWNoZTpuLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnN9KXtjb25zdCBvPWE7bGV0IGM9bnVsbCxsPW51bGw7Y29uc3QgaD1hLmRpY3QuZ2V0KCJTTWFzayIpLHU9YS5kaWN0LmdldCgiTWFzayIpO2g/aCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/Yz1oOndhcm4oIlVuc3VwcG9ydGVkIC9TTWFzayBmb3JtYXQuIik6dSYmKHUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KHUpP2w9dTp3YXJuKCJVbnN1cHBvcnRlZCAvTWFzayBmb3JtYXQuIikpO3JldHVybiBuZXcgUERGSW1hZ2Uoe3hyZWY6ZSxyZXM6dCxpbWFnZTpvLGlzSW5saW5lOnIsc21hc2s6YyxtYXNrOmwscGRmRnVuY3Rpb25GYWN0b3J5OmksZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOm4sbG9jYWxDb2xvclNwYWNlQ2FjaGU6c30pfXN0YXRpYyBhc3luYyBjcmVhdGVNYXNrKHtpbWFnZTplLGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOnQ9ITF9KXtjb25zdHtkaWN0OmF9PWUscj1hLmdldCgiVyIsIldpZHRoIiksaT1hLmdldCgiSCIsIkhlaWdodCIpLG49YS5nZXQoIkkiLCJJbnRlcnBvbGF0ZSIpLHM9YS5nZXRBcnJheSgiRCIsIkRlY29kZSIpLG89cz8uWzBdPjAsYz0ocis3Pj4zKSppLGw9ZS5nZXRCeXRlcyhjKSxoPTE9PT1yJiYxPT09aSYmbz09PSgwPT09bC5sZW5ndGh8fCEhKDEyOCZsWzBdKSk7aWYoaClyZXR1cm57aXNTaW5nbGVPcGFxdWVQaXhlbDpofTtpZih0KXtpZihJbWFnZVJlc2l6ZXIubmVlZHNUb0JlUmVzaXplZChyLGkpKXtjb25zdCBlPW5ldyBVaW50OENsYW1wZWRBcnJheShyKmkqNCk7Y29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEoe3NyYzpsLGRlc3Q6ZSx3aWR0aDpyLGhlaWdodDppLG5vbkJsYWNrQ29sb3I6MCxpbnZlcnNlRGVjb2RlOm99KTtyZXR1cm4gSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKHtraW5kOk8sZGF0YTplLHdpZHRoOnIsaGVpZ2h0OmksaW50ZXJwb2xhdGU6bn0pfWNvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcyhyLGkpLHQ9ZS5nZXRDb250ZXh0KCIyZCIpLGE9dC5jcmVhdGVJbWFnZURhdGEocixpKTtjb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQSh7c3JjOmwsZGVzdDphLmRhdGEsd2lkdGg6cixoZWlnaHQ6aSxub25CbGFja0NvbG9yOjAsaW52ZXJzZURlY29kZTpvfSk7dC5wdXRJbWFnZURhdGEoYSwwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6cixoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpuLGJpdG1hcDplLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpfX1jb25zdCB1PWwuYnl0ZUxlbmd0aDtsZXQgZDtpZihlIGluc3RhbmNlb2YgRGVjb2RlU3RyZWFtJiYoIW98fGM9PT11KSlkPWw7ZWxzZSBpZihvKXtkPW5ldyBVaW50OEFycmF5KGMpO2Quc2V0KGwpO2QuZmlsbCgyNTUsdSl9ZWxzZSBkPW5ldyBVaW50OEFycmF5KGwpO2lmKG8pZm9yKGxldCBlPTA7ZTx1O2UrKylkW2VdXj0yNTU7cmV0dXJue2RhdGE6ZCx3aWR0aDpyLGhlaWdodDppLGludGVycG9sYXRlOm59fWdldCBkcmF3V2lkdGgoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLnNtYXNrPy53aWR0aHx8MCx0aGlzLm1hc2s/LndpZHRofHwwKX1nZXQgZHJhd0hlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmhlaWdodCx0aGlzLnNtYXNrPy5oZWlnaHR8fDAsdGhpcy5tYXNrPy5oZWlnaHR8fDApfWRlY29kZUJ1ZmZlcihlKXtjb25zdCB0PXRoaXMuYnBjLGE9dGhpcy5udW1Db21wcyxyPXRoaXMuZGVjb2RlQWRkZW5kcyxpPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLG49KDE8PHQpLTE7bGV0IHMsbztpZigxPT09dCl7Zm9yKHM9MCxvPWUubGVuZ3RoO3M8bztzKyspZVtzXT0rIWVbc107cmV0dXJufWxldCBjPTA7Zm9yKHM9MCxvPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7czxvO3MrKylmb3IobGV0IHQ9MDt0PGE7dCsrKXtlW2NdPU1hdGhDbGFtcChyW3RdK2VbY10qaVt0XSwwLG4pO2MrK319Z2V0Q29tcG9uZW50cyhlKXtjb25zdCB0PXRoaXMuYnBjO2lmKDg9PT10KXJldHVybiBlO2NvbnN0IGE9dGhpcy53aWR0aCxyPXRoaXMuaGVpZ2h0LGk9dGhpcy5udW1Db21wcyxuPWEqcippO2xldCBzLG89MDtzPXQ8PTg/bmV3IFVpbnQ4QXJyYXkobik6dDw9MTY/bmV3IFVpbnQxNkFycmF5KG4pOm5ldyBVaW50MzJBcnJheShuKTtjb25zdCBjPWEqaSxsPSgxPDx0KS0xO2xldCBoLHUsZD0wO2lmKDE9PT10KXtsZXQgdCxhLGk7Zm9yKGxldCBuPTA7bjxyO24rKyl7YT1kKygtOCZjKTtpPWQrYztmb3IoO2Q8YTspe3U9ZVtvKytdO3NbZF09dT4+NyYxO3NbZCsxXT11Pj42JjE7c1tkKzJdPXU+PjUmMTtzW2QrM109dT4+NCYxO3NbZCs0XT11Pj4zJjE7c1tkKzVdPXU+PjImMTtzW2QrNl09dT4+MSYxO3NbZCs3XT0xJnU7ZCs9OH1pZihkPGkpe3U9ZVtvKytdO3Q9MTI4O2Zvcig7ZDxpOyl7c1tkKytdPSshISh1JnQpO3Q+Pj0xfX19fWVsc2V7bGV0IGE9MDt1PTA7Zm9yKGQ9MCxoPW47ZDxoOysrZCl7aWYoZCVjPT09MCl7dT0wO2E9MH1mb3IoO2E8dDspe3U9dTw8OHxlW28rK107YSs9OH1jb25zdCByPWEtdDtsZXQgaT11Pj5yO2k8MD9pPTA6aT5sJiYoaT1sKTtzW2RdPWk7dSY9KDE8PHIpLTE7YT1yfX1yZXR1cm4gc31hc3luYyBmaWxsT3BhY2l0eShlLHQsYSxyLGkpe2NvbnN0IG49dGhpcy5zbWFzayxzPXRoaXMubWFzaztsZXQgbyxjLGwsaCx1LGQ7aWYobil7Yz1uLndpZHRoO2w9bi5oZWlnaHQ7bz1uZXcgVWludDhDbGFtcGVkQXJyYXkoYypsKTthd2FpdCBuLmZpbGxHcmF5QnVmZmVyKG8pO2M9PT10JiZsPT09YXx8KG89cmVzaXplSW1hZ2VNYXNrKG8sbi5icGMsYyxsLHQsYSkpfWVsc2UgaWYocylpZihzIGluc3RhbmNlb2YgUERGSW1hZ2Upe2M9cy53aWR0aDtsPXMuaGVpZ2h0O289bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGMqbCk7cy5udW1Db21wcz0xO2F3YWl0IHMuZmlsbEdyYXlCdWZmZXIobyk7Zm9yKGg9MCx1PWMqbDtoPHU7KytoKW9baF09MjU1LW9baF07Yz09PXQmJmw9PT1hfHwobz1yZXNpemVJbWFnZU1hc2sobyxzLmJwYyxjLGwsdCxhKSl9ZWxzZXtpZighQXJyYXkuaXNBcnJheShzKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gbWFzayBmb3JtYXQuIik7e289bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqYSk7Y29uc3QgZT10aGlzLm51bUNvbXBzO2ZvcihoPTAsdT10KmE7aDx1OysraCl7bGV0IHQ9MDtjb25zdCBhPWgqZTtmb3IoZD0wO2Q8ZTsrK2Qpe2NvbnN0IGU9aVthK2RdLHI9MipkO2lmKGU8c1tyXXx8ZT5zW3IrMV0pe3Q9MjU1O2JyZWFrfX1vW2hdPXR9fX1pZihvKWZvcihoPTAsZD0zLHU9dCpyO2g8dTsrK2gsZCs9NCllW2RdPW9baF07ZWxzZSBmb3IoaD0wLGQ9Myx1PXQqcjtoPHU7KytoLGQrPTQpZVtkXT0yNTV9dW5kb1ByZWJsZW5kKGUsdCxhKXtjb25zdCByPXRoaXMuc21hc2s/Lm1hdHRlO2lmKCFyKXJldHVybjtjb25zdCBpPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IociwwKSxuPWlbMF0scz1pWzFdLG89aVsyXSxjPXQqYSo0O2ZvcihsZXQgdD0wO3Q8Yzt0Kz00KXtjb25zdCBhPWVbdCszXTtpZigwPT09YSl7ZVt0XT0yNTU7ZVt0KzFdPTI1NTtlW3QrMl09MjU1O2NvbnRpbnVlfWNvbnN0IHI9MjU1L2E7ZVt0XT0oZVt0XS1uKSpyK247ZVt0KzFdPShlW3QrMV0tcykqcitzO2VbdCsyXT0oZVt0KzJdLW8pKnIrb319YXN5bmMgY3JlYXRlSW1hZ2VEYXRhKGU9ITEsdD0hMSl7Y29uc3QgYT10aGlzLmRyYXdXaWR0aCxyPXRoaXMuZHJhd0hlaWdodCxpPXt3aWR0aDphLGhlaWdodDpyLGludGVycG9sYXRlOnRoaXMuaW50ZXJwb2xhdGUsa2luZDowLGRhdGE6bnVsbH0sbj10aGlzLm51bUNvbXBzLHM9dGhpcy53aWR0aCxvPXRoaXMuaGVpZ2h0LGM9dGhpcy5icGMsbD1zKm4qYys3Pj4zLGg9dCYmSW1hZ2VSZXNpemVyLm5lZWRzVG9CZVJlc2l6ZWQoYSxyKTtpZighdGhpcy5zbWFzayYmIXRoaXMubWFzayYmIkRldmljZVJHQkEiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUpe2kua2luZD1PO2NvbnN0IGU9aS5kYXRhPWF3YWl0IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvKnMqNCx7fSk7cmV0dXJuIHQ/aD9JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2UoaSwhMSk6dGhpcy5jcmVhdGVCaXRtYXAoTyxhLHIsZSk6aX1pZighZSl7bGV0IGU7IkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT1jP2U9RjoiRGV2aWNlUkdCIiE9PXRoaXMuY29sb3JTcGFjZS5uYW1lfHw4IT09Y3x8dGhpcy5uZWVkc0RlY29kZXx8KGU9VCk7aWYoZSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJmE9PT1zJiZyPT09byl7Y29uc3Qgbj1hd2FpdCB0aGlzLiNoZShzLG8pO2lmKG4pcmV0dXJuIG47Y29uc3QgYz1hd2FpdCB0aGlzLmdldEltYWdlQnl0ZXMobypsLHt9KTtpZih0KXJldHVybiBoP0ltYWdlUmVzaXplci5jcmVhdGVJbWFnZSh7ZGF0YTpjLGtpbmQ6ZSx3aWR0aDphLGhlaWdodDpyLGludGVycG9sYXRlOnRoaXMuaW50ZXJwb2xhdGV9LHRoaXMubmVlZHNEZWNvZGUpOnRoaXMuY3JlYXRlQml0bWFwKGUscyxvLGMpO2kua2luZD1lO2kuZGF0YT1jO2lmKHRoaXMubmVlZHNEZWNvZGUpe2Fzc2VydChlPT09RiwiUERGSW1hZ2UuY3JlYXRlSW1hZ2VEYXRhOiBUaGUgaW1hZ2UgbXVzdCBiZSBncmF5c2NhbGUuIik7Y29uc3QgdD1pLmRhdGE7Zm9yKGxldCBlPTAsYT10Lmxlbmd0aDtlPGE7ZSsrKXRbZV1ePTI1NX1yZXR1cm4gaX1pZih0aGlzLmltYWdlIGluc3RhbmNlb2YgSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJiF0aGlzLm5lZWRzRGVjb2RlKXtsZXQgZT1vKmw7aWYodCYmIWgpe2xldCB0PSExO3N3aXRjaCh0aGlzLmNvbG9yU3BhY2UubmFtZSl7Y2FzZSJEZXZpY2VHcmF5IjplKj00O3Q9ITA7YnJlYWs7Y2FzZSJEZXZpY2VSR0IiOmU9ZS8zKjQ7dD0hMDticmVhaztjYXNlIkRldmljZUNNWUsiOnQ9ITB9aWYodCl7Y29uc3QgdD1hd2FpdCB0aGlzLiNoZShhLHIpO2lmKHQpcmV0dXJuIHQ7Y29uc3QgaT1hd2FpdCB0aGlzLmdldEltYWdlQnl0ZXMoZSx7ZHJhd1dpZHRoOmEsZHJhd0hlaWdodDpyLGZvcmNlUkdCQTohMH0pO3JldHVybiB0aGlzLmNyZWF0ZUJpdG1hcChPLGEscixpKX19ZWxzZSBzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6ZSo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjppLmtpbmQ9VDtpLmRhdGE9YXdhaXQgdGhpcy5nZXRJbWFnZUJ5dGVzKGUse2RyYXdXaWR0aDphLGRyYXdIZWlnaHQ6cixmb3JjZVJHQjohMH0pO3JldHVybiBoP0ltYWdlUmVzaXplci5jcmVhdGVJbWFnZShpKTppfX19Y29uc3QgdT1hd2FpdCB0aGlzLmdldEltYWdlQnl0ZXMobypsLHtpbnRlcm5hbDohMH0pLGQ9MHx1Lmxlbmd0aC9sKnIvbyxmPXRoaXMuZ2V0Q29tcG9uZW50cyh1KTtsZXQgZyxwLG0sYix5LHc7aWYodCYmIWgpe209bmV3IE9mZnNjcmVlbkNhbnZhcyhhLHIpO2I9bS5nZXRDb250ZXh0KCIyZCIpO3k9Yi5jcmVhdGVJbWFnZURhdGEoYSxyKTt3PXkuZGF0YX1pLmtpbmQ9TztpZihlfHx0aGlzLnNtYXNrfHx0aGlzLm1hc2spe3QmJiFofHwodz1uZXcgVWludDhDbGFtcGVkQXJyYXkoYSpyKjQpKTtnPTE7cD0hMDthd2FpdCB0aGlzLmZpbGxPcGFjaXR5KHcsYSxyLGQsZil9ZWxzZXtpZighdHx8aCl7aS5raW5kPVQ7dz1uZXcgVWludDhDbGFtcGVkQXJyYXkoYSpyKjMpO2c9MH1lbHNle25ldyBVaW50MzJBcnJheSh3LmJ1ZmZlcikuZmlsbChGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSk7Zz0xfXA9ITF9dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIoZik7dGhpcy5jb2xvclNwYWNlLmZpbGxSZ2IodyxzLG8sYSxyLGQsYyxmLGcpO3AmJnRoaXMudW5kb1ByZWJsZW5kKHcsYSxkKTtpZih0JiYhaCl7Yi5wdXRJbWFnZURhdGEoeSwwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6YSxoZWlnaHQ6cixiaXRtYXA6bS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfX1pLmRhdGE9dztyZXR1cm4gaD9JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2UoaSk6aX1hc3luYyBmaWxsR3JheUJ1ZmZlcihlKXtjb25zdCB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBSZWFkaW5nIGdyYXkgc2NhbGUgZnJvbSBhIGNvbG9yIGltYWdlOiAke3R9YCk7Y29uc3QgYT10aGlzLndpZHRoLHI9dGhpcy5oZWlnaHQsaT10aGlzLmJwYyxuPWEqdCppKzc+PjMscz1hd2FpdCB0aGlzLmdldEltYWdlQnl0ZXMocipuLHtpbnRlcm5hbDohMH0pLG89dGhpcy5nZXRDb21wb25lbnRzKHMpO2xldCBjLGw7aWYoMT09PWkpe2w9YSpyO2lmKHRoaXMubmVlZHNEZWNvZGUpZm9yKGM9MDtjPGw7KytjKWVbY109b1tjXS0xJjI1NTtlbHNlIGZvcihjPTA7YzxsOysrYyllW2NdPTI1NSYtb1tjXTtyZXR1cm59dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIobyk7bD1hKnI7Y29uc3QgaD0yNTUvKCgxPDxpKS0xKTtmb3IoYz0wO2M8bDsrK2MpZVtjXT1oKm9bY119Y3JlYXRlQml0bWFwKGUsdCxhLHIpe2NvbnN0IGk9bmV3IE9mZnNjcmVlbkNhbnZhcyh0LGEpLG49aS5nZXRDb250ZXh0KCIyZCIpO2xldCBzO2lmKGU9PT1PKXM9bmV3IEltYWdlRGF0YShyLHQsYSk7ZWxzZXtzPW4uY3JlYXRlSW1hZ2VEYXRhKHQsYSk7Y29udmVydFRvUkdCQSh7a2luZDplLHNyYzpyLGRlc3Q6bmV3IFVpbnQzMkFycmF5KHMuZGF0YS5idWZmZXIpLHdpZHRoOnQsaGVpZ2h0OmEsaW52ZXJzZURlY29kZTp0aGlzLm5lZWRzRGVjb2RlfSl9bi5wdXRJbWFnZURhdGEocywwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6dCxoZWlnaHQ6YSxiaXRtYXA6aS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfX1hc3luYyNoZShlLHQpe2NvbnN0IGE9YXdhaXQgdGhpcy5pbWFnZS5nZXRUcmFuc2ZlcmFibGVJbWFnZSgpO3JldHVybiBhP3tkYXRhOm51bGwsd2lkdGg6ZSxoZWlnaHQ6dCxiaXRtYXA6YSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfTpudWxsfWFzeW5jIGdldEltYWdlQnl0ZXMoZSx7ZHJhd1dpZHRoOnQsZHJhd0hlaWdodDphLGZvcmNlUkdCQTpyPSExLGZvcmNlUkdCOmk9ITEsaW50ZXJuYWw6bj0hMX0pe3RoaXMuaW1hZ2UucmVzZXQoKTt0aGlzLmltYWdlLmRyYXdXaWR0aD10fHx0aGlzLndpZHRoO3RoaXMuaW1hZ2UuZHJhd0hlaWdodD1hfHx0aGlzLmhlaWdodDt0aGlzLmltYWdlLmZvcmNlUkdCQT0hIXI7dGhpcy5pbWFnZS5mb3JjZVJHQj0hIWk7Y29uc3Qgcz1hd2FpdCB0aGlzLmltYWdlLmdldEltYWdlRGF0YShlLHRoaXMuanB4RGVjb2Rlck9wdGlvbnMpO2lmKG58fHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBEZWNvZGVTdHJlYW0pcmV0dXJuIHM7YXNzZXJ0KHMgaW5zdGFuY2VvZiBVaW50OEFycmF5LCdQREZJbWFnZS5nZXRJbWFnZUJ5dGVzOiBVbnN1cHBvcnRlZCAiaW1hZ2VCeXRlcyIgdHlwZS4nKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocyl9fWNvbnN0IHduPU9iamVjdC5mcmVlemUoe21heEltYWdlU2l6ZTotMSxkaXNhYmxlRm9udEZhY2U6ITEsaWdub3JlRXJyb3JzOiExLGlzRXZhbFN1cHBvcnRlZDohMCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDohMSxpc0ltYWdlRGVjb2RlclN1cHBvcnRlZDohMSxjYW52YXNNYXhBcmVhSW5CeXRlczotMSxmb250RXh0cmFQcm9wZXJ0aWVzOiExLHVzZVN5c3RlbUZvbnRzOiEwLHVzZVdhc206ITAsdXNlV29ya2VyRmV0Y2g6ITAsY01hcFVybDpudWxsLGljY1VybDpudWxsLHN0YW5kYXJkRm9udERhdGFVcmw6bnVsbCx3YXNtVXJsOm51bGx9KSx4bj0xLFNuPTIsQW49UHJvbWlzZS5yZXNvbHZlKCk7ZnVuY3Rpb24gbm9ybWFsaXplQmxlbmRNb2RlKGUsdD0hMSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT1ub3JtYWxpemVCbGVuZE1vZGUodCwhMCk7aWYoZSlyZXR1cm4gZX13YXJuKGBVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAke2V9YCk7cmV0dXJuInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBOYW1lKSlyZXR1cm4gdD9udWxsOiJzb3VyY2Utb3ZlciI7c3dpdGNoKGUubmFtZSl7Y2FzZSJOb3JtYWwiOmNhc2UiQ29tcGF0aWJsZSI6cmV0dXJuInNvdXJjZS1vdmVyIjtjYXNlIk11bHRpcGx5IjpyZXR1cm4ibXVsdGlwbHkiO2Nhc2UiU2NyZWVuIjpyZXR1cm4ic2NyZWVuIjtjYXNlIk92ZXJsYXkiOnJldHVybiJvdmVybGF5IjtjYXNlIkRhcmtlbiI6cmV0dXJuImRhcmtlbiI7Y2FzZSJMaWdodGVuIjpyZXR1cm4ibGlnaHRlbiI7Y2FzZSJDb2xvckRvZGdlIjpyZXR1cm4iY29sb3ItZG9kZ2UiO2Nhc2UiQ29sb3JCdXJuIjpyZXR1cm4iY29sb3ItYnVybiI7Y2FzZSJIYXJkTGlnaHQiOnJldHVybiJoYXJkLWxpZ2h0IjtjYXNlIlNvZnRMaWdodCI6cmV0dXJuInNvZnQtbGlnaHQiO2Nhc2UiRGlmZmVyZW5jZSI6cmV0dXJuImRpZmZlcmVuY2UiO2Nhc2UiRXhjbHVzaW9uIjpyZXR1cm4iZXhjbHVzaW9uIjtjYXNlIkh1ZSI6cmV0dXJuImh1ZSI7Y2FzZSJTYXR1cmF0aW9uIjpyZXR1cm4ic2F0dXJhdGlvbiI7Y2FzZSJDb2xvciI6cmV0dXJuImNvbG9yIjtjYXNlIkx1bWlub3NpdHkiOnJldHVybiJsdW1pbm9zaXR5In1pZih0KXJldHVybiBudWxsO3dhcm4oYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICR7ZS5uYW1lfWApO3JldHVybiJzb3VyY2Utb3ZlciJ9ZnVuY3Rpb24gYWRkQ2FjaGVkSW1hZ2VPcHMoZSx7b2JqSWQ6dCxmbjphLGFyZ3M6cixvcHRpb25hbENvbnRlbnQ6aSxoYXNNYXNrOm59KXt0JiZlLmFkZERlcGVuZGVuY3kodCk7ZS5hZGRJbWFnZU9wcyhhLHIsaSxuKTthPT09TnQmJnJbMF0/LmNvdW50PjAmJnJbMF0uY291bnQrK31jbGFzcyBUaW1lU2xvdE1hbmFnZXJ7c3RhdGljIFRJTUVfU0xPVF9EVVJBVElPTl9NUz0yMDtzdGF0aWMgQ0hFQ0tfVElNRV9FVkVSWT0xMDA7Y29uc3RydWN0b3IoKXt0aGlzLnJlc2V0KCl9Y2hlY2soKXtpZigrK3RoaXMuY2hlY2tlZDxUaW1lU2xvdE1hbmFnZXIuQ0hFQ0tfVElNRV9FVkVSWSlyZXR1cm4hMTt0aGlzLmNoZWNrZWQ9MDtyZXR1cm4gdGhpcy5lbmRUaW1lPD1EYXRlLm5vdygpfXJlc2V0KCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrVGltZVNsb3RNYW5hZ2VyLlRJTUVfU0xPVF9EVVJBVElPTl9NUzt0aGlzLmNoZWNrZWQ9MH19Y2xhc3MgUGFydGlhbEV2YWx1YXRvcntjb25zdHJ1Y3Rvcih7eHJlZjplLGhhbmRsZXI6dCxwYWdlSW5kZXg6YSxpZEZhY3Rvcnk6cixmb250Q2FjaGU6aSxidWlsdEluQ01hcENhY2hlOm4sc3RhbmRhcmRGb250RGF0YUNhY2hlOnMsZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOm8sZ2xvYmFsSW1hZ2VDYWNoZTpjLHN5c3RlbUZvbnRDYWNoZTpsLG9wdGlvbnM6aD1udWxsfSl7dGhpcy54cmVmPWU7dGhpcy5oYW5kbGVyPXQ7dGhpcy5wYWdlSW5kZXg9YTt0aGlzLmlkRmFjdG9yeT1yO3RoaXMuZm9udENhY2hlPWk7dGhpcy5idWlsdEluQ01hcENhY2hlPW47dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9czt0aGlzLmdsb2JhbENvbG9yU3BhY2VDYWNoZT1vO3RoaXMuZ2xvYmFsSW1hZ2VDYWNoZT1jO3RoaXMuc3lzdGVtRm9udENhY2hlPWw7dGhpcy5vcHRpb25zPWh8fHduO3RoaXMudHlwZTNGb250UmVmcz1udWxsO3RoaXMuX3JlZ2lvbmFsSW1hZ2VDYWNoZT1uZXcgUmVnaW9uYWxJbWFnZUNhY2hlO3RoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZD10aGlzLmZldGNoQnVpbHRJbkNNYXAuYmluZCh0aGlzKX1nZXQgX3BkZkZ1bmN0aW9uRmFjdG9yeSgpe3JldHVybiBzaGFkb3codGhpcywiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsbmV3IFBERkZ1bmN0aW9uRmFjdG9yeSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMub3B0aW9ucy5pc0V2YWxTdXBwb3J0ZWR9KSl9Z2V0IHBhcnNpbmdUeXBlM0ZvbnQoKXtyZXR1cm4hIXRoaXMudHlwZTNGb250UmVmc31jbG9uZShlPW51bGwpe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZSh0aGlzKTt0Lm9wdGlvbnM9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucyxlKTtyZXR1cm4gdH1oYXNCbGVuZE1vZGVzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuITE7aWYoZS5vYmpJZCYmdC5oYXMoZS5vYmpJZCkpcmV0dXJuITE7Y29uc3QgYT1uZXcgUmVmU2V0KHQpO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IHI9W2VdLGk9dGhpcy54cmVmO2Zvcig7ci5sZW5ndGg7KXtjb25zdCBlPXIuc2hpZnQoKSx0PWUuZ2V0KCJFeHRHU3RhdGUiKTtpZih0IGluc3RhbmNlb2YgRGljdClmb3IobGV0IGUgb2YgdC5nZXRSYXdWYWx1ZXMoKSl7aWYoZSBpbnN0YW5jZW9mIFJlZil7aWYoYS5oYXMoZSkpY29udGludWU7dHJ5e2U9aS5mZXRjaChlKX1jYXRjaCh0KXthLnB1dChlKTtpbmZvKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJHt0fSIuYCk7Y29udGludWV9fWlmKCEoZSBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IHQ9ZS5nZXQoIkJNIik7aWYodCBpbnN0YW5jZW9mIE5hbWUpe2lmKCJOb3JtYWwiIT09dC5uYW1lKXJldHVybiEwfWVsc2UgaWYodm9pZCAwIT09dCYmQXJyYXkuaXNBcnJheSh0KSlmb3IoY29uc3QgZSBvZiB0KWlmKGUgaW5zdGFuY2VvZiBOYW1lJiYiTm9ybWFsIiE9PWUubmFtZSlyZXR1cm4hMH1jb25zdCBuPWUuZ2V0KCJYT2JqZWN0Iik7aWYobiBpbnN0YW5jZW9mIERpY3QpZm9yKGxldCBlIG9mIG4uZ2V0UmF3VmFsdWVzKCkpe2lmKGUgaW5zdGFuY2VvZiBSZWYpe2lmKGEuaGFzKGUpKWNvbnRpbnVlO3RyeXtlPWkuZmV0Y2goZSl9Y2F0Y2godCl7YS5wdXQoZSk7aW5mbyhgaGFzQmxlbmRNb2RlcyAtIGlnbm9yaW5nIFhPYmplY3Q6ICIke3R9Ii5gKTtjb250aW51ZX19aWYoIShlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkpY29udGludWU7ZS5kaWN0Lm9iaklkJiZhLnB1dChlLmRpY3Qub2JqSWQpO2NvbnN0IHQ9ZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7aWYodCBpbnN0YW5jZW9mIERpY3QmJighdC5vYmpJZHx8IWEuaGFzKHQub2JqSWQpKSl7ci5wdXNoKHQpO3Qub2JqSWQmJmEucHV0KHQub2JqSWQpfX19Zm9yKGNvbnN0IGUgb2YgYSl0LnB1dChlKTtyZXR1cm4hMX1hc3luYyBmZXRjaEJ1aWx0SW5DTWFwKGUpe2NvbnN0IHQ9dGhpcy5idWlsdEluQ01hcENhY2hlLmdldChlKTtpZih0KXJldHVybiB0O2xldCBhO2E9dGhpcy5vcHRpb25zLnVzZVdvcmtlckZldGNoP3tjTWFwRGF0YTphd2FpdCBmZXRjaEJpbmFyeURhdGEoYCR7dGhpcy5vcHRpb25zLmNNYXBVcmx9JHtlfS5iY21hcGApLGlzQ29tcHJlc3NlZDohMH06YXdhaXQgdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCaW5hcnlEYXRhIix7dHlwZToiY01hcFJlYWRlckZhY3RvcnkiLG5hbWU6ZX0pO3RoaXMuYnVpbHRJbkNNYXBDYWNoZS5zZXQoZSxhKTtyZXR1cm4gYX1hc3luYyBmZXRjaFN0YW5kYXJkRm9udERhdGEoZSl7Y29uc3QgdD10aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQoZSk7aWYodClyZXR1cm4gbmV3IFN0cmVhbSh0KTtpZih0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMmJiJTeW1ib2wiIT09ZSYmIlphcGZEaW5nYmF0cyIhPT1lKXJldHVybiBudWxsO2NvbnN0IGE9X3IoKVtlXTtsZXQgcjt0cnl7cj10aGlzLm9wdGlvbnMudXNlV29ya2VyRmV0Y2g/YXdhaXQgZmV0Y2hCaW5hcnlEYXRhKGAke3RoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsfSR7YX1gKTphd2FpdCB0aGlzLmhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJGZXRjaEJpbmFyeURhdGEiLHt0eXBlOiJzdGFuZGFyZEZvbnREYXRhRmFjdG9yeSIsZmlsZW5hbWU6YX0pfWNhdGNoKGUpe3dhcm4oZSk7cmV0dXJuIG51bGx9dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuc2V0KGUscik7cmV0dXJuIG5ldyBTdHJlYW0ocil9YXN5bmMgYnVpbGRGb3JtWE9iamVjdChlLHQsYSxyLGksbixzLG8pe2NvbnN0e2RpY3Q6Y309dCxsPWxvb2t1cE1hdHJpeChjLmdldEFycmF5KCJNYXRyaXgiKSxudWxsKSxoPWxvb2t1cE5vcm1hbFJlY3QoYy5nZXRBcnJheSgiQkJveCIpLG51bGwpO2xldCB1LGQ7Yy5oYXMoIk9DIikmJih1PWF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoYy5nZXQoIk9DIiksZSkpO3ZvaWQgMCE9PXUmJnIuYWRkT3AoQ3QsWyJPQyIsdV0pO2NvbnN0IGY9Yy5nZXQoIkdyb3VwIik7aWYoZil7ZD17bWF0cml4OmwsYmJveDpoLHNtYXNrOmEsaXNvbGF0ZWQ6ITEsa25vY2tvdXQ6ITF9O2xldCB0PW51bGw7aWYoaXNOYW1lKGYuZ2V0KCJTIiksIlRyYW5zcGFyZW5jeSIpKXtkLmlzb2xhdGVkPWYuZ2V0KCJJIil8fCExO2Qua25vY2tvdXQ9Zi5nZXQoIksiKXx8ITE7aWYoZi5oYXMoIkNTIikpe2NvbnN0IGE9dGhpcy5fZ2V0Q29sb3JTcGFjZShmLmdldFJhdygiQ1MiKSxlLHMpO3Q9YSBpbnN0YW5jZW9mIENvbG9yU3BhY2U/YTphd2FpdCB0aGlzLl9oYW5kbGVDb2xvclNwYWNlKGEpfX1pZihhPy5iYWNrZHJvcCl7dHx8PUNvbG9yU3BhY2VVdGlscy5yZ2I7YS5iYWNrZHJvcD10LmdldFJnYkhleChhLmJhY2tkcm9wLDApfXIuYWRkT3AoTXQsW2RdKX1jb25zdCBnPVtsJiZuZXcgRmxvYXQzMkFycmF5KGwpLCFmJiZoJiZuZXcgRmxvYXQzMkFycmF5KGgpfHxudWxsXTtyLmFkZE9wKFR0LGcpO2NvbnN0IHA9Yy5nZXQoIlJlc291cmNlcyIpO2F3YWl0IHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOmkscmVzb3VyY2VzOnAgaW5zdGFuY2VvZiBEaWN0P3A6ZSxvcGVyYXRvckxpc3Q6cixpbml0aWFsU3RhdGU6bixwcmV2UmVmczpvfSk7ci5hZGRPcChPdCxbXSk7ZiYmci5hZGRPcChEdCxbZF0pO3ZvaWQgMCE9PXUmJnIuYWRkT3AodnQsW10pfV9zZW5kSW1nRGF0YShlLHQsYT0hMSl7Y29uc3Qgcj10P1t0LmJpdG1hcHx8dC5kYXRhLmJ1ZmZlcl06bnVsbDtyZXR1cm4gdGhpcy5wYXJzaW5nVHlwZTNGb250fHxhP3RoaXMuaGFuZGxlci5zZW5kKCJjb21tb25vYmoiLFtlLCJJbWFnZSIsdF0scik6dGhpcy5oYW5kbGVyLnNlbmQoIm9iaiIsW2UsdGhpcy5wYWdlSW5kZXgsIkltYWdlIix0XSxyKX1hc3luYyBidWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6ZSxpbWFnZTp0LGlzSW5saW5lOmE9ITEsb3BlcmF0b3JMaXN0OnIsY2FjaGVLZXk6aSxsb2NhbEltYWdlQ2FjaGU6bixsb2NhbENvbG9yU3BhY2VDYWNoZTpzfSl7Y29uc3R7bWF4SW1hZ2VTaXplOm8saWdub3JlRXJyb3JzOmMsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6bH09dGhpcy5vcHRpb25zLHtkaWN0Omh9PXQsdT1oLm9iaklkLGQ9aC5nZXQoIlciLCJXaWR0aCIpLGY9aC5nZXQoIkgiLCJIZWlnaHQiKTtpZighZHx8Im51bWJlciIhPXR5cGVvZiBkfHwhZnx8Im51bWJlciIhPXR5cGVvZiBmKXt3YXJuKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKTtyZXR1cm59aWYoLTEhPT1vJiZkKmY+byl7Y29uc3QgZT0iSW1hZ2UgZXhjZWVkZWQgbWF4aW11bSBhbGxvd2VkIHNpemUgYW5kIHdhcyByZW1vdmVkLiI7aWYoIWMpdGhyb3cgbmV3IEVycm9yKGUpO3dhcm4oZSk7cmV0dXJufWxldCBnO2guaGFzKCJPQyIpJiYoZz1hd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGguZ2V0KCJPQyIpLGUpKTtsZXQgcCxtLGI7aWYoaC5nZXQoIklNIiwiSW1hZ2VNYXNrIil8fCExKXtwPWF3YWl0IFBERkltYWdlLmNyZWF0ZU1hc2soe2ltYWdlOnQsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6bCYmIXRoaXMucGFyc2luZ1R5cGUzRm9udH0pO2lmKHAuaXNTaW5nbGVPcGFxdWVQaXhlbCl7bT1YdDtiPVtdO3IuYWRkSW1hZ2VPcHMobSxiLGcpO2lmKGkpe2NvbnN0IGU9e2ZuOm0sYXJnczpiLG9wdGlvbmFsQ29udGVudDpnfTtuLnNldChpLHUsZSk7dSYmdGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLHUsZSl9cmV0dXJufWlmKHRoaXMucGFyc2luZ1R5cGUzRm9udCl7Yj1mdW5jdGlvbiBjb21waWxlVHlwZTNHbHlwaCh7ZGF0YTplLHdpZHRoOnQsaGVpZ2h0OmF9KXtpZih0PjFlM3x8YT4xZTMpcmV0dXJuIG51bGw7Y29uc3Qgcj1uZXcgVWludDhBcnJheShbMCwyLDQsMCwxLDAsNSw0LDgsMTAsMCw4LDAsMiwxLDBdKSxpPXQrMSxuPW5ldyBVaW50OEFycmF5KGkqKGErMSkpO2xldCBzLG8sYztjb25zdCBsPXQrNyYtOCxoPW5ldyBVaW50OEFycmF5KGwqYSk7bGV0IHU9MDtmb3IoY29uc3QgdCBvZiBlKXtsZXQgZT0xMjg7Zm9yKDtlPjA7KXtoW3UrK109dCZlPzA6MjU1O2U+Pj0xfX1sZXQgZD0wO3U9MDtpZigwIT09aFt1XSl7blswXT0xOysrZH1mb3Iobz0xO288dDtvKyspe2lmKGhbdV0hPT1oW3UrMV0pe25bb109aFt1XT8yOjE7KytkfXUrK31pZigwIT09aFt1XSl7bltvXT0yOysrZH1mb3Iocz0xO3M8YTtzKyspe3U9cypsO2M9cyppO2lmKGhbdS1sXSE9PWhbdV0pe25bY109aFt1XT8xOjg7KytkfWxldCBlPShoW3VdPzQ6MCkrKGhbdS1sXT84OjApO2ZvcihvPTE7bzx0O28rKyl7ZT0oZT4+MikrKGhbdSsxXT80OjApKyhoW3UtbCsxXT84OjApO2lmKHJbZV0pe25bYytvXT1yW2VdOysrZH11Kyt9aWYoaFt1LWxdIT09aFt1XSl7bltjK29dPWhbdV0/Mjo0OysrZH1pZihkPjFlMylyZXR1cm4gbnVsbH11PWwqKGEtMSk7Yz1zKmk7aWYoMCE9PWhbdV0pe25bY109ODsrK2R9Zm9yKG89MTtvPHQ7bysrKXtpZihoW3VdIT09aFt1KzFdKXtuW2Mrb109aFt1XT80Ojg7KytkfXUrK31pZigwIT09aFt1XSl7bltjK29dPTQ7KytkfWlmKGQ+MWUzKXJldHVybiBudWxsO2NvbnN0IGY9bmV3IEludDMyQXJyYXkoWzAsaSwtMSwwLC1pLDAsMCwwLDFdKSxnPVtdLHthOnAsYjptLGM6YixkOnksZTp3LGY6eH09KG5ldyBET01NYXRyaXgpLnNjYWxlU2VsZigxL3QsLTEvYSkudHJhbnNsYXRlU2VsZigwLC1hKTtmb3Iocz0wO2QmJnM8PWE7cysrKXtsZXQgZT1zKmk7Y29uc3QgYT1lK3Q7Zm9yKDtlPGEmJiFuW2VdOyllKys7aWYoZT09PWEpY29udGludWU7bGV0IHI9ZSVpLG89cztnLnB1c2goenQscCpyK2Iqbyt3LG0qcit5Km8reCk7Y29uc3QgYz1lO2xldCBsPW5bZV07ZG97Y29uc3QgdD1mW2xdO2Rve2UrPXR9d2hpbGUoIW5bZV0pO2NvbnN0IGE9bltlXTtpZig1IT09YSYmMTAhPT1hKXtsPWE7bltlXT0wfWVsc2V7bD1hJjUxKmw+PjQ7bltlXSY9bD4+MnxsPDwyfXI9ZSVpO289ZS9pfDA7Zy5wdXNoKCR0LHAqcitiKm8rdyxtKnIreSpvK3gpO25bZV18fC0tZH13aGlsZShjIT09ZSk7LS1zfXJldHVybltHdCxbbmV3IEZsb2F0MzJBcnJheShnKV0sbmV3IEZsb2F0MzJBcnJheShbMCwwLHQsYV0pXX0ocCk7aWYoYil7ci5hZGRJbWFnZU9wcyhxdCxiLGcpO3JldHVybn13YXJuKCJDYW5ub3QgY29tcGlsZSBUeXBlMyBnbHlwaC4iKTtyLmFkZEltYWdlT3BzKE50LFtwXSxnKTtyZXR1cm59Y29uc3QgZT1gbWFza18ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YDtyLmFkZERlcGVuZGVuY3koZSk7cC5kYXRhTGVuPXAuYml0bWFwP3Aud2lkdGgqcC5oZWlnaHQqNDpwLmRhdGEubGVuZ3RoO3RoaXMuX3NlbmRJbWdEYXRhKGUscCk7bT1OdDtiPVt7ZGF0YTplLHdpZHRoOnAud2lkdGgsaGVpZ2h0OnAuaGVpZ2h0LGludGVycG9sYXRlOnAuaW50ZXJwb2xhdGUsY291bnQ6MX1dO3IuYWRkSW1hZ2VPcHMobSxiLGcpO2lmKGkpe2NvbnN0IHQ9e29iaklkOmUsZm46bSxhcmdzOmIsb3B0aW9uYWxDb250ZW50Omd9O24uc2V0KGksdSx0KTt1JiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsdSx0KX1yZXR1cm59Y29uc3QgeT1oLmhhcygiU01hc2siKXx8aC5oYXMoIk1hc2siKTtpZihhJiZkK2Y8MjAwJiYheSl7dHJ5e2NvbnN0IGk9bmV3IFBERkltYWdlKHt4cmVmOnRoaXMueHJlZixyZXM6ZSxpbWFnZTp0LGlzSW5saW5lOmEscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxnbG9iYWxDb2xvclNwYWNlQ2FjaGU6dGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUsbG9jYWxDb2xvclNwYWNlQ2FjaGU6c30pO3A9YXdhaXQgaS5jcmVhdGVJbWFnZURhdGEoITAsITEpO3IuYWRkSW1hZ2VPcHMoTHQsW3BdLGcpfWNhdGNoKGUpe2NvbnN0IHQ9YFVuYWJsZSB0byBkZWNvZGUgaW5saW5lIGltYWdlOiAiJHtlfSIuYDtpZighYyl0aHJvdyBuZXcgRXJyb3IodCk7d2Fybih0KX1yZXR1cm59bGV0IHc9YGltZ18ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YCx4PSExLFM9bnVsbDtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpdz1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM18ke3d9YDtlbHNlIGlmKGkmJnUpe3g9dGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNob3VsZENhY2hlKHUsdGhpcy5wYWdlSW5kZXgpO2lmKHgpe2Fzc2VydCghYSwiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKTt3PWAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7d31gfX1yLmFkZERlcGVuZGVuY3kodyk7bT1QdDtiPVt3LGQsZl07ci5hZGRJbWFnZU9wcyhtLGIsZyx5KTtpZih4KXtTPXtvYmpJZDp3LGZuOm0sYXJnczpiLG9wdGlvbmFsQ29udGVudDpnLGhhc01hc2s6eSxieXRlU2l6ZTowfTtpZih0aGlzLmdsb2JhbEltYWdlQ2FjaGUuaGFzRGVjb2RlRmFpbGVkKHUpKXt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSh1LFMpO3RoaXMuX3NlbmRJbWdEYXRhKHcsbnVsbCx4KTtyZXR1cm59aWYoZCpmPjI1ZTR8fHkpe2NvbnN0IGU9YXdhaXQgdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiY29tbW9ub2JqIixbdywiQ29weUxvY2FsSW1hZ2UiLHtpbWFnZVJlZjp1fV0pO2lmKGUpe3RoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKHUsUyk7dGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKHUsZSk7cmV0dXJufX19UERGSW1hZ2UuYnVpbGRJbWFnZSh7eHJlZjp0aGlzLnhyZWYscmVzOmUsaW1hZ2U6dCxpc0lubGluZTphLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOnRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnN9KS50aGVuKGFzeW5jIGU9PntwPWF3YWl0IGUuY3JlYXRlSW1hZ2VEYXRhKCExLGwpO3AuZGF0YUxlbj1wLmJpdG1hcD9wLndpZHRoKnAuaGVpZ2h0KjQ6cC5kYXRhLmxlbmd0aDtwLnJlZj11O3gmJnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5hZGRCeXRlU2l6ZSh1LHAuZGF0YUxlbik7cmV0dXJuIHRoaXMuX3NlbmRJbWdEYXRhKHcscCx4KX0pLmNhdGNoKGU9Pnt3YXJuKGBVbmFibGUgdG8gZGVjb2RlIGltYWdlICIke3d9IjogIiR7ZX0iLmApO3UmJnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5hZGREZWNvZGVGYWlsZWQodSk7cmV0dXJuIHRoaXMuX3NlbmRJbWdEYXRhKHcsbnVsbCx4KX0pO2lmKGkpe2NvbnN0IGU9e29iaklkOncsZm46bSxhcmdzOmIsb3B0aW9uYWxDb250ZW50OmcsaGFzTWFzazp5fTtuLnNldChpLHUsZSk7aWYodSl7dGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLHUsZSk7aWYoeCl7YXNzZXJ0KFMsIlRoZSBnbG9iYWwgY2FjaGUtZGF0YSBtdXN0IGJlIGF2YWlsYWJsZS4iKTt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSh1LFMpfX19fWhhbmRsZVNNYXNrKGUsdCxhLHIsaSxuLHMpe2NvbnN0IG89ZS5nZXQoIkciKSxjPXtzdWJ0eXBlOmUuZ2V0KCJTIikubmFtZSxiYWNrZHJvcDplLmdldCgiQkMiKX0sbD1lLmdldCgiVFIiKTtpZihpc1BERkZ1bmN0aW9uKGwpKXtjb25zdCBlPXRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUobCksdD1uZXcgVWludDhBcnJheSgyNTYpLGE9bmV3IEZsb2F0MzJBcnJheSgxKTtmb3IobGV0IHI9MDtyPDI1NjtyKyspe2FbMF09ci8yNTU7ZShhLDAsYSwwKTt0W3JdPTI1NSphWzBdfDB9Yy50cmFuc2Zlck1hcD10fXJldHVybiB0aGlzLmJ1aWxkRm9ybVhPYmplY3QodCxvLGMsYSxyLGkuc3RhdGUuY2xvbmUoe25ld1BhdGg6ITB9KSxuLHMpfWhhbmRsZVRyYW5zZmVyRnVuY3Rpb24oZSl7bGV0IHQ7aWYoQXJyYXkuaXNBcnJheShlKSl0PWU7ZWxzZXtpZighaXNQREZGdW5jdGlvbihlKSlyZXR1cm4gbnVsbDt0PVtlXX1jb25zdCBhPVtdO2xldCByPTAsaT0wO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7cisrO2lmKGlzTmFtZSh0LCJJZGVudGl0eSIpKXthLnB1c2gobnVsbCk7Y29udGludWV9aWYoIWlzUERGRnVuY3Rpb24odCkpcmV0dXJuIG51bGw7Y29uc3Qgbj10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHQpLHM9bmV3IFVpbnQ4QXJyYXkoMjU2KSxvPW5ldyBGbG9hdDMyQXJyYXkoMSk7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXtvWzBdPWUvMjU1O24obywwLG8sMCk7c1tlXT0yNTUqb1swXXwwfWEucHVzaChzKTtpKyt9cmV0dXJuIDEhPT1yJiY0IT09cnx8MD09PWk/bnVsbDphfWhhbmRsZVRpbGluZ1R5cGUoZSx0LGEscixpLG4scyxvKXtjb25zdCBjPW5ldyBPcGVyYXRvckxpc3QsbD1EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6W2kuZ2V0KCJSZXNvdXJjZXMiKSxhXX0pO3JldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnIsdGFzazpzLHJlc291cmNlczpsLG9wZXJhdG9yTGlzdDpjfSkudGhlbihmdW5jdGlvbigpe2NvbnN0IGE9Yy5nZXRJUigpLHI9Z2V0VGlsaW5nUGF0dGVybklSKGEsaSx0KTtuLmFkZERlcGVuZGVuY2llcyhjLmRlcGVuZGVuY2llcyk7bi5hZGRPcChlLHIpO2kub2JqSWQmJm8uc2V0KG51bGwsaS5vYmpJZCx7b3BlcmF0b3JMaXN0SVI6YSxkaWN0Oml9KX0pLmNhdGNoKGU9PntpZighKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46ICIke2V9Ii5gKX19KX1hc3luYyBoYW5kbGVTZXRGb250KGUsdCxhLHIsaSxuLHM9bnVsbCxvPW51bGwpe2NvbnN0IGM9dD8uWzBdaW5zdGFuY2VvZiBOYW1lP3RbMF0ubmFtZTpudWxsLGw9YXdhaXQgdGhpcy5sb2FkRm9udChjLGEsZSxpLHMsbyk7bC5mb250LmlzVHlwZTNGb250JiZyLmFkZERlcGVuZGVuY2llcyhsLnR5cGUzRGVwZW5kZW5jaWVzKTtuLmZvbnQ9bC5mb250O2wuc2VuZCh0aGlzLmhhbmRsZXIpO3JldHVybiBsLmxvYWRlZE5hbWV9aGFuZGxlVGV4dChlLHQpe2NvbnN0IGE9dC5mb250LHI9YS5jaGFyc1RvR2x5cGhzKGUpO2lmKGEuZGF0YSl7KCEhKHQudGV4dFJlbmRlcmluZ01vZGUmdil8fCJQYXR0ZXJuIj09PXQuZmlsbENvbG9yU3BhY2UubmFtZXx8YS5kaXNhYmxlRm9udEZhY2UpJiZQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKGEscix0aGlzLmhhbmRsZXIsdGhpcy5vcHRpb25zKX1yZXR1cm4gcn1lbnN1cmVTdGF0ZUZvbnQoZSl7aWYoZS5mb250KXJldHVybjtjb25zdCB0PW5ldyBGb3JtYXRFcnJvcigiTWlzc2luZyBzZXRGb250IChUZikgb3BlcmF0b3IgYmVmb3JlIHRleHQgcmVuZGVyaW5nIG9wZXJhdG9yLiIpO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IHQ7d2FybihgZW5zdXJlU3RhdGVGb250OiAiJHt0fSIuYCl9YXN5bmMgc2V0R1N0YXRlKHtyZXNvdXJjZXM6ZSxnU3RhdGU6dCxvcGVyYXRvckxpc3Q6YSxjYWNoZUtleTpyLHRhc2s6aSxzdGF0ZU1hbmFnZXI6bixsb2NhbEdTdGF0ZUNhY2hlOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6byxzZWVuUmVmczpjfSl7Y29uc3QgbD10Lm9iaklkO2xldCBoPSEwO2NvbnN0IHU9W107bGV0IGQ9UHJvbWlzZS5yZXNvbHZlKCk7Zm9yKGNvbnN0W3Isc11vZiB0KXN3aXRjaChyKXtjYXNlIlR5cGUiOmJyZWFrO2Nhc2UiTFciOmlmKCJudW1iZXIiIT10eXBlb2Ygcyl7d2FybihgSW52YWxpZCBMVyAobGluZSB3aWR0aCk6ICR7c31gKTticmVha311LnB1c2goW3IsTWF0aC5hYnMocyldKTticmVhaztjYXNlIkxDIjpjYXNlIkxKIjpjYXNlIk1MIjpjYXNlIkQiOmNhc2UiUkkiOmNhc2UiRkwiOmNhc2UiQ0EiOmNhc2UiY2EiOnUucHVzaChbcixzXSk7YnJlYWs7Y2FzZSJGb250IjpoPSExO2Q9ZC50aGVuKCgpPT50aGlzLmhhbmRsZVNldEZvbnQoZSxudWxsLHNbMF0sYSxpLG4uc3RhdGUpLnRoZW4oZnVuY3Rpb24oZSl7YS5hZGREZXBlbmRlbmN5KGUpO3UucHVzaChbcixbZSxzWzFdXV0pfSkpO2JyZWFrO2Nhc2UiQk0iOnUucHVzaChbcixub3JtYWxpemVCbGVuZE1vZGUocyldKTticmVhaztjYXNlIlNNYXNrIjppZihpc05hbWUocywiTm9uZSIpKXt1LnB1c2goW3IsITFdKTticmVha31pZihzIGluc3RhbmNlb2YgRGljdCl7aD0hMTtkPWQudGhlbigoKT0+dGhpcy5oYW5kbGVTTWFzayhzLGUsYSxpLG4sbyxjKSk7dS5wdXNoKFtyLCEwXSl9ZWxzZSB3YXJuKCJVbnN1cHBvcnRlZCBTTWFzayB0eXBlIik7YnJlYWs7Y2FzZSJUUiI6Y29uc3QgdD10aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24ocyk7dS5wdXNoKFtyLHRdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6aW5mbygiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK3IpO2JyZWFrO2RlZmF1bHQ6aW5mbygiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrcil9YXdhaXQgZDt1Lmxlbmd0aD4wJiZhLmFkZE9wKGJlLFt1XSk7aCYmcy5zZXQocixsLHUpfWxvYWRGb250KGUsdCxhLHIsaT1udWxsLG49bnVsbCl7Y29uc3QgZXJyb3JGb250PWFzeW5jKCk9Pm5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBFcnJvckZvbnQoYEZvbnQgIiR7ZX0iIGlzIG5vdCBhdmFpbGFibGUuYCksZGljdDp0fSk7bGV0IHM7aWYodCl0IGluc3RhbmNlb2YgUmVmJiYocz10KTtlbHNle2NvbnN0IHQ9YS5nZXQoIkZvbnQiKTt0JiYocz10LmdldFJhdyhlKSl9aWYocyl7aWYodGhpcy50eXBlM0ZvbnRSZWZzPy5oYXMocykpcmV0dXJuIGVycm9yRm9udCgpO2lmKHRoaXMuZm9udENhY2hlLmhhcyhzKSlyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KHMpO3RyeXt0PXRoaXMueHJlZi5mZXRjaElmUmVmKHMpfWNhdGNoKGUpe3dhcm4oYGxvYWRGb250IC0gbG9va3VwIGZhaWxlZDogIiR7ZX0iLmApfX1pZighKHQgaW5zdGFuY2VvZiBEaWN0KSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMmJiF0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpe3dhcm4oYEZvbnQgIiR7ZX0iIGlzIG5vdCBhdmFpbGFibGUuYCk7cmV0dXJuIGVycm9yRm9udCgpfXdhcm4oYEZvbnQgIiR7ZX0iIGlzIG5vdCBhdmFpbGFibGUgLS0gYXR0ZW1wdGluZyB0byBmYWxsYmFjayB0byBhIGRlZmF1bHQgZm9udC5gKTt0PWl8fFBhcnRpYWxFdmFsdWF0b3IuZmFsbGJhY2tGb250RGljdH1pZih0LmNhY2hlS2V5JiZ0aGlzLmZvbnRDYWNoZS5oYXModC5jYWNoZUtleSkpcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldCh0LmNhY2hlS2V5KTtjb25zdHtwcm9taXNlOm8scmVzb2x2ZTpjfT1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTtsZXQgbDt0cnl7bD10aGlzLnByZUV2YWx1YXRlRm9udCh0KTtsLmNzc0ZvbnRJbmZvPW59Y2F0Y2goZSl7d2FybihgbG9hZEZvbnQgLSBwcmVFdmFsdWF0ZUZvbnQgZmFpbGVkOiAiJHtlfSIuYCk7cmV0dXJuIGVycm9yRm9udCgpfWNvbnN0e2Rlc2NyaXB0b3I6aCxoYXNoOnV9PWwsZD1zIGluc3RhbmNlb2YgUmVmO2xldCBmO2lmKHUmJmggaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBlPWguZm9udEFsaWFzZXN8fD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGVbdV0pe2NvbnN0IHQ9ZVt1XS5hbGlhc1JlZjtpZihkJiZ0JiZ0aGlzLmZvbnRDYWNoZS5oYXModCkpe3RoaXMuZm9udENhY2hlLnB1dEFsaWFzKHMsdCk7cmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChzKX19ZWxzZSBlW3VdPXtmb250SUQ6dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCl9O2QmJihlW3VdLmFsaWFzUmVmPXMpO2Y9ZVt1XS5mb250SUR9ZWxzZSBmPXRoaXMuaWRGYWN0b3J5LmNyZWF0ZUZvbnRJZCgpO2Fzc2VydChmPy5zdGFydHNXaXRoKCJmIiksJ1RoZSAiZm9udElEIiBtdXN0IGJlIChjb3JyZWN0bHkpIGRlZmluZWQuJyk7aWYoZCl0aGlzLmZvbnRDYWNoZS5wdXQocyxvKTtlbHNle3QuY2FjaGVLZXk9YGNhY2hlS2V5XyR7Zn1gO3RoaXMuZm9udENhY2hlLnB1dCh0LmNhY2hlS2V5LG8pfXQubG9hZGVkTmFtZT1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV8ke2Z9YDt0aGlzLnRyYW5zbGF0ZUZvbnQobCkudGhlbihhc3luYyBlPT57Y29uc3QgaT1uZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6dC5sb2FkZWROYW1lLGZvbnQ6ZSxkaWN0OnR9KTtpZihlLmlzVHlwZTNGb250KXRyeXthd2FpdCBpLmxvYWRUeXBlM0RhdGEodGhpcyxhLHIpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihgVHlwZTMgZm9udCBsb2FkIGVycm9yOiAke2V9YCl9YyhpKX0pLmNhdGNoKGU9Pnt3YXJuKGBsb2FkRm9udCAtIHRyYW5zbGF0ZUZvbnQgZmFpbGVkOiAiJHtlfSIuYCk7YyhuZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6dC5sb2FkZWROYW1lLGZvbnQ6bmV3IEVycm9yRm9udChlPy5tZXNzYWdlKSxkaWN0OnR9KSl9KTtyZXR1cm4gb31idWlsZFBhdGgoZSx0LGEpe2NvbnN0e3BhdGhNaW5NYXg6cixwYXRoQnVmZmVyOml9PWE7c3dpdGNoKDB8ZSl7Y2FzZSBJZTp7Y29uc3QgZT1hLmN1cnJlbnRQb2ludFg9dFswXSxuPWEuY3VycmVudFBvaW50WT10WzFdLHM9dFsyXSxvPXRbM10sYz1lK3MsbD1uK287MD09PXN8fDA9PT1vP2kucHVzaCh6dCxlLG4sJHQsYyxsLEp0KTppLnB1c2goenQsZSxuLCR0LGMsbiwkdCxjLGwsJHQsZSxsLEp0KTtVdGlsLnJlY3RCb3VuZGluZ0JveChlLG4sYyxsLHIpO2JyZWFrfWNhc2UgU2U6e2NvbnN0IGU9YS5jdXJyZW50UG9pbnRYPXRbMF0sbj1hLmN1cnJlbnRQb2ludFk9dFsxXTtpLnB1c2goenQsZSxuKTtVdGlsLnBvaW50Qm91bmRpbmdCb3goZSxuLHIpO2JyZWFrfWNhc2UgQWU6e2NvbnN0IGU9YS5jdXJyZW50UG9pbnRYPXRbMF0sbj1hLmN1cnJlbnRQb2ludFk9dFsxXTtpLnB1c2goJHQsZSxuKTtVdGlsLnBvaW50Qm91bmRpbmdCb3goZSxuLHIpO2JyZWFrfWNhc2Uga2U6e2NvbnN0IGU9YS5jdXJyZW50UG9pbnRYLG49YS5jdXJyZW50UG9pbnRZLFtzLG8sYyxsLGgsdV09dDthLmN1cnJlbnRQb2ludFg9aDthLmN1cnJlbnRQb2ludFk9dTtpLnB1c2goVnQscyxvLGMsbCxoLHUpO1V0aWwuYmV6aWVyQm91bmRpbmdCb3goZSxuLHMsbyxjLGwsaCx1LHIpO2JyZWFrfWNhc2UgQ2U6e2NvbnN0IGU9YS5jdXJyZW50UG9pbnRYLG49YS5jdXJyZW50UG9pbnRZLFtzLG8sYyxsXT10O2EuY3VycmVudFBvaW50WD1jO2EuY3VycmVudFBvaW50WT1sO2kucHVzaChWdCxlLG4scyxvLGMsbCk7VXRpbC5iZXppZXJCb3VuZGluZ0JveChlLG4sZSxuLHMsbyxjLGwscik7YnJlYWt9Y2FzZSB2ZTp7Y29uc3QgZT1hLmN1cnJlbnRQb2ludFgsbj1hLmN1cnJlbnRQb2ludFksW3MsbyxjLGxdPXQ7YS5jdXJyZW50UG9pbnRYPWM7YS5jdXJyZW50UG9pbnRZPWw7aS5wdXNoKFZ0LHMsbyxjLGwsYyxsKTtVdGlsLmJlemllckJvdW5kaW5nQm94KGUsbixzLG8sYyxsLGMsbCxyKTticmVha31jYXNlIEZlOmkucHVzaChKdCl9fV9nZXRDb2xvclNwYWNlKGUsdCxhKXtyZXR1cm4gQ29sb3JTcGFjZVV0aWxzLnBhcnNlKHtjczplLHhyZWY6dGhpcy54cmVmLHJlc291cmNlczp0LHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOnRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmEsYXN5bmNJZk5vdENhY2hlZDohMH0pfWFzeW5jIF9oYW5kbGVDb2xvclNwYWNlKGUpe3RyeXtyZXR1cm4gYXdhaXQgZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl7d2FybihgX2hhbmRsZUNvbG9yU3BhY2UgLSBpZ25vcmluZyBDb2xvclNwYWNlOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9dGhyb3cgZX19cGFyc2VTaGFkaW5nKHtzaGFkaW5nOmUscmVzb3VyY2VzOnQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6YSxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6cn0pe2xldCBpLG49ci5nZXQoZSk7aWYobilyZXR1cm4gbjt0cnl7aT1QYXR0ZXJuLnBhcnNlU2hhZGluZyhlLHRoaXMueHJlZix0LHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSx0aGlzLmdsb2JhbENvbG9yU3BhY2VDYWNoZSxhKS5nZXRJUigpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbilyZXR1cm4gbnVsbDtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXt3YXJuKGBwYXJzZVNoYWRpbmcgLSBpZ25vcmluZyBzaGFkaW5nOiAiJHt0fSIuYCk7ci5zZXQoZSxudWxsKTtyZXR1cm4gbnVsbH10aHJvdyB0fW49YHBhdHRlcm5fJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7dGhpcy5wYXJzaW5nVHlwZTNGb250JiYobj1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM18ke259YCk7ci5zZXQoZSxuKTtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpe2NvbnN0IGU9W10sdD1QYXR0ZXJuSW5mby53cml0ZShpKTtlLnB1c2godCk7dGhpcy5oYW5kbGVyLnNlbmQoImNvbW1vbm9iaiIsW24sIlBhdHRlcm4iLHRdLGUpfWVsc2UgdGhpcy5oYW5kbGVyLnNlbmQoIm9iaiIsW24sdGhpcy5wYWdlSW5kZXgsIlBhdHRlcm4iLGldKTtyZXR1cm4gbn1oYW5kbGVDb2xvck4oZSx0LGEscixpLG4scyxvLGMsbCl7Y29uc3QgaD1hLnBvcCgpO2lmKGggaW5zdGFuY2VvZiBOYW1lKXtjb25zdCB1PWkuZ2V0UmF3KGgubmFtZSksZD11IGluc3RhbmNlb2YgUmVmJiZjLmdldEJ5UmVmKHUpO2lmKGQpdHJ5e2NvbnN0IGk9ci5iYXNlP3IuYmFzZS5nZXRSZ2JIZXgoYSwwKTpudWxsLG49Z2V0VGlsaW5nUGF0dGVybklSKGQub3BlcmF0b3JMaXN0SVIsZC5kaWN0LGkpO2UuYWRkT3AodCxuKTtyZXR1cm59Y2F0Y2h7fWNvbnN0IGY9dGhpcy54cmVmLmZldGNoSWZSZWYodSk7aWYoZil7Y29uc3QgaT1mIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9mLmRpY3Q6ZixoPWkuZ2V0KCJQYXR0ZXJuVHlwZSIpO2lmKGg9PT14bil7Y29uc3Qgbz1yLmJhc2U/ci5iYXNlLmdldFJnYkhleChhLDApOm51bGw7cmV0dXJuIHRoaXMuaGFuZGxlVGlsaW5nVHlwZSh0LG8sbixmLGksZSxzLGMpfWlmKGg9PT1Tbil7Y29uc3QgYT1pLmdldCgiU2hhZGluZyIpLHI9dGhpcy5wYXJzZVNoYWRpbmcoe3NoYWRpbmc6YSxyZXNvdXJjZXM6bixsb2NhbENvbG9yU3BhY2VDYWNoZTpvLGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpsfSk7aWYocil7Y29uc3QgYT1sb29rdXBNYXRyaXgoaS5nZXRBcnJheSgiTWF0cml4IiksbnVsbCk7ZS5hZGRPcCh0LFsiU2hhZGluZyIscixhXSl9cmV0dXJufXRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuVHlwZTogJHtofWApfX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVybk5hbWU6ICR7aH1gKX1fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihlLHQsYSl7aWYoKyt0PjEwKXt3YXJuKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTtyZXR1cm59Y29uc3Qgcj1lLmxlbmd0aCxpPXRoaXMueHJlZi5mZXRjaElmUmVmKGVbMF0pO2lmKCEocjwyKSYmaSBpbnN0YW5jZW9mIE5hbWUpe3N3aXRjaChpLm5hbWUpe2Nhc2UiQW5kIjpjYXNlIk9yIjpjYXNlIk5vdCI6YS5wdXNoKGkubmFtZSk7YnJlYWs7ZGVmYXVsdDp3YXJuKGBJbnZhbGlkIG9wZXJhdG9yICR7aS5uYW1lfSBpbiB2aXNpYmlsaXR5IGV4cHJlc3Npb25gKTtyZXR1cm59Zm9yKGxldCBpPTE7aTxyO2krKyl7Y29uc3Qgcj1lW2ldLG49dGhpcy54cmVmLmZldGNoSWZSZWYocik7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3QgZT1bXTthLnB1c2goZSk7dGhpcy5fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihuLHQsZSl9ZWxzZSByIGluc3RhbmNlb2YgUmVmJiZhLnB1c2goci50b1N0cmluZygpKX19ZWxzZSB3YXJuKCJJbnZhbGlkIHZpc2liaWxpdHkgZXhwcmVzc2lvbiIpfWFzeW5jIHBhcnNlTWFya2VkQ29udGVudFByb3BzKGUsdCl7bGV0IGE7aWYoZSBpbnN0YW5jZW9mIE5hbWUpe2E9dC5nZXQoIlByb3BlcnRpZXMiKS5nZXQoZS5uYW1lKX1lbHNle2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiT3B0aW9uYWwgY29udGVudCBwcm9wZXJ0aWVzIG1hbGZvcm1lZC4iKTthPWV9Y29uc3Qgcj1hLmdldCgiVHlwZSIpPy5uYW1lO2lmKCJPQ0ciPT09cilyZXR1cm57dHlwZTpyLGlkOmEub2JqSWR9O2lmKCJPQ01EIj09PXIpe2NvbnN0IGU9YS5nZXQoIlZFIik7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgdD1bXTt0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGUsMCx0KTtpZih0Lmxlbmd0aD4wKXJldHVybnt0eXBlOiJPQ01EIixleHByZXNzaW9uOnR9fWNvbnN0IHQ9YS5nZXQoIk9DR3MiKTtpZihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihjb25zdCBhIG9mIHQpZS5wdXNoKGEudG9TdHJpbmcoKSk7ZWxzZSBlLnB1c2godC5vYmpJZCk7cmV0dXJue3R5cGU6cixpZHM6ZSxwb2xpY3k6YS5nZXQoIlAiKWluc3RhbmNlb2YgTmFtZT9hLmdldCgiUCIpLm5hbWU6bnVsbCxleHByZXNzaW9uOm51bGx9fWlmKHQgaW5zdGFuY2VvZiBSZWYpcmV0dXJue3R5cGU6cixpZDp0LnRvU3RyaW5nKCl9fXJldHVybiBudWxsfWdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmUsdGFzazp0LHJlc291cmNlczphLG9wZXJhdG9yTGlzdDpyLGluaXRpYWxTdGF0ZTppPW51bGwsZmFsbGJhY2tGb250RGljdDpuPW51bGwscHJldlJlZnM6cz1udWxsfSl7Y29uc3Qgbz1lLmRpY3Q/Lm9iaklkLGM9bmV3IFJlZlNldChzKTtpZihvKXtpZihzPy5oYXMobykpdGhyb3cgbmV3IEVycm9yKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBjaXJjdWxhciByZWZlcmVuY2U6ICR7b31gKTtjLnB1dChvKX1hfHw9RGljdC5lbXB0eTtpfHw9bmV3IEV2YWxTdGF0ZTtpZighcil0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyAib3BlcmF0b3JMaXN0IiBwYXJhbWV0ZXInKTtjb25zdCBsPXRoaXMsaD10aGlzLnhyZWYsdT1uZXcgTG9jYWxJbWFnZUNhY2hlLGQ9bmV3IExvY2FsQ29sb3JTcGFjZUNhY2hlLGY9bmV3IExvY2FsR1N0YXRlQ2FjaGUsZz1uZXcgTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUscD1uZXcgTWFwLG09YS5nZXQoIlhPYmplY3QiKXx8RGljdC5lbXB0eSxiPWEuZ2V0KCJQYXR0ZXJuIil8fERpY3QuZW1wdHkseT1uZXcgU3RhdGVNYW5hZ2VyKGkpLHc9bmV3IEV2YWx1YXRvclByZXByb2Nlc3NvcihlLGgseSkseD1uZXcgVGltZVNsb3RNYW5hZ2VyO2Z1bmN0aW9uIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoZSl7Zm9yKGxldCBlPTAsdD13LnNhdmVkU3RhdGVzRGVwdGg7ZTx0O2UrKylyLmFkZE9wKHdlLFtdKX1yZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUJvZHkoZSxpKXtjb25zdCBuZXh0PWZ1bmN0aW9uKHQpe1Byb21pc2UuYWxsKFt0LHIucmVhZHldKS50aGVuKGZ1bmN0aW9uKCl7dHJ5e3Byb21pc2VCb2R5KGUsaSl9Y2F0Y2goZSl7aShlKX19LGkpfTt0LmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTt4LnJlc2V0KCk7Y29uc3Qgcz17fTtsZXQgbyxTLGssQyx2LEY7Zm9yKDshKG89eC5jaGVjaygpKTspe3MuYXJncz1udWxsO2lmKCF3LnJlYWQocykpYnJlYWs7bGV0IGU9cy5hcmdzLGk9cy5mbjtzd2l0Y2goMHxpKXtjYXNlIHh0OkY9ZVswXWluc3RhbmNlb2YgTmFtZTt2PWVbMF0ubmFtZTtpZihGKXtjb25zdCB0PXUuZ2V0QnlOYW1lKHYpO2lmKHQpe2FkZENhY2hlZEltYWdlT3BzKHIsdCk7ZT1udWxsO2NvbnRpbnVlfX1uZXh0KG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsaSl7aWYoIUYpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTtsZXQgbj1tLmdldFJhdyh2KTtpZihuIGluc3RhbmNlb2YgUmVmKXtjb25zdCB0PXUuZ2V0QnlSZWYobil8fGwuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5nZXRCeVJlZihuKXx8bC5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEobixsLnBhZ2VJbmRleCk7aWYodCl7YWRkQ2FjaGVkSW1hZ2VPcHMocix0KTtlKCk7cmV0dXJufW49aC5mZXRjaChuKX1pZighKG4gaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7Y29uc3Qgcz1uLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoIShzIGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09cy5uYW1lKWlmKCJJbWFnZSIhPT1zLm5hbWUpe2lmKCJQUyIhPT1zLm5hbWUpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICR7cy5uYW1lfWApO2luZm8oIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIik7ZSgpfWVsc2UgbC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6YSxpbWFnZTpuLG9wZXJhdG9yTGlzdDpyLGNhY2hlS2V5OnYsbG9jYWxJbWFnZUNhY2hlOnUsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZH0pLnRoZW4oZSxpKTtlbHNle3kuc2F2ZSgpO2wuYnVpbGRGb3JtWE9iamVjdChhLG4sbnVsbCxyLHQseS5zdGF0ZS5jbG9uZSh7bmV3UGF0aDohMH0pLGQsYykudGhlbihmdW5jdGlvbigpe3kucmVzdG9yZSgpO2UoKX0saSl9fSkuY2F0Y2goZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pKXtpZighbC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO3dhcm4oYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIFhPYmplY3Q6ICIke2V9Ii5gKX19KSk7cmV0dXJuO2Nhc2UgR2U6Y29uc3Qgcz1lWzFdO25leHQobC5oYW5kbGVTZXRGb250KGEsZSxudWxsLHIsdCx5LnN0YXRlLG4pLnRoZW4oZnVuY3Rpb24oZSl7ci5hZGREZXBlbmRlbmN5KGUpO3IuYWRkT3AoR2UsW2Usc10pfSkpO3JldHVybjtjYXNlIHd0OmNvbnN0IG89ZVswXS5jYWNoZUtleTtpZihvKXtjb25zdCB0PXUuZ2V0QnlOYW1lKG8pO2lmKHQpe2FkZENhY2hlZEltYWdlT3BzKHIsdCk7ZT1udWxsO2NvbnRpbnVlfX1uZXh0KGwuYnVpbGRQYWludEltYWdlWE9iamVjdCh7cmVzb3VyY2VzOmEsaW1hZ2U6ZVswXSxpc0lubGluZTohMCxvcGVyYXRvckxpc3Q6cixjYWNoZUtleTpvLGxvY2FsSW1hZ2VDYWNoZTp1LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmR9KSk7cmV0dXJuO2Nhc2UgWmU6aWYoIXkuc3RhdGUuZm9udCl7bC5lbnN1cmVTdGF0ZUZvbnQoeS5zdGF0ZSk7Y29udGludWV9ZVswXT1sLmhhbmRsZVRleHQoZVswXSx5LnN0YXRlKTticmVhaztjYXNlIFFlOmlmKCF5LnN0YXRlLmZvbnQpe2wuZW5zdXJlU3RhdGVGb250KHkuc3RhdGUpO2NvbnRpbnVlfWNvbnN0IHc9W10seD15LnN0YXRlO2Zvcihjb25zdCB0IG9mIGVbMF0pInN0cmluZyI9PXR5cGVvZiB0P3cucHVzaCguLi5sLmhhbmRsZVRleHQodCx4KSk6Im51bWJlciI9PXR5cGVvZiB0JiZ3LnB1c2godCk7ZVswXT13O2k9WmU7YnJlYWs7Y2FzZSBldDppZigheS5zdGF0ZS5mb250KXtsLmVuc3VyZVN0YXRlRm9udCh5LnN0YXRlKTtjb250aW51ZX1yLmFkZE9wKFllKTtlWzBdPWwuaGFuZGxlVGV4dChlWzBdLHkuc3RhdGUpO2k9WmU7YnJlYWs7Y2FzZSB0dDppZigheS5zdGF0ZS5mb250KXtsLmVuc3VyZVN0YXRlRm9udCh5LnN0YXRlKTtjb250aW51ZX1yLmFkZE9wKFllKTtyLmFkZE9wKHFlLFtlLnNoaWZ0KCldKTtyLmFkZE9wKFhlLFtlLnNoaWZ0KCldKTtlWzBdPWwuaGFuZGxlVGV4dChlWzBdLHkuc3RhdGUpO2k9WmU7YnJlYWs7Y2FzZSB6ZTp5LnN0YXRlLnRleHRSZW5kZXJpbmdNb2RlPWVbMF07YnJlYWs7Y2FzZSBudDp7Y29uc3QgdD1sLl9nZXRDb2xvclNwYWNlKGVbMF0sYSxkKTtpZih0IGluc3RhbmNlb2YgQ29sb3JTcGFjZSl7eS5zdGF0ZS5maWxsQ29sb3JTcGFjZT10O2NvbnRpbnVlfW5leHQobC5faGFuZGxlQ29sb3JTcGFjZSh0KS50aGVuKGU9Pnt5LnN0YXRlLmZpbGxDb2xvclNwYWNlPWV8fENvbG9yU3BhY2VVdGlscy5ncmF5fSkpO3JldHVybn1jYXNlIGl0Ontjb25zdCB0PWwuX2dldENvbG9yU3BhY2UoZVswXSxhLGQpO2lmKHQgaW5zdGFuY2VvZiBDb2xvclNwYWNlKXt5LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dDtjb250aW51ZX1uZXh0KGwuX2hhbmRsZUNvbG9yU3BhY2UodCkudGhlbihlPT57eS5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPWV8fENvbG9yU3BhY2VVdGlscy5ncmF5fSkpO3JldHVybn1jYXNlIGN0OkM9eS5zdGF0ZS5maWxsQ29sb3JTcGFjZTtlPVtDLmdldFJnYkhleChlLDApXTtpPWZ0O2JyZWFrO2Nhc2Ugc3Q6Qz15LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7ZT1bQy5nZXRSZ2JIZXgoZSwwKV07aT1kdDticmVhaztjYXNlIHV0Onkuc3RhdGUuZmlsbENvbG9yU3BhY2U9Q29sb3JTcGFjZVV0aWxzLmdyYXk7ZT1bQ29sb3JTcGFjZVV0aWxzLmdyYXkuZ2V0UmdiSGV4KGUsMCldO2k9ZnQ7YnJlYWs7Y2FzZSBodDp5LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Q29sb3JTcGFjZVV0aWxzLmdyYXk7ZT1bQ29sb3JTcGFjZVV0aWxzLmdyYXkuZ2V0UmdiSGV4KGUsMCldO2k9ZHQ7YnJlYWs7Y2FzZSBwdDp5LnN0YXRlLmZpbGxDb2xvclNwYWNlPUNvbG9yU3BhY2VVdGlscy5jbXlrO2U9W0NvbG9yU3BhY2VVdGlscy5jbXlrLmdldFJnYkhleChlLDApXTtpPWZ0O2JyZWFrO2Nhc2UgZ3Q6eS5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPUNvbG9yU3BhY2VVdGlscy5jbXlrO2U9W0NvbG9yU3BhY2VVdGlscy5jbXlrLmdldFJnYkhleChlLDApXTtpPWR0O2JyZWFrO2Nhc2UgZnQ6eS5zdGF0ZS5maWxsQ29sb3JTcGFjZT1Db2xvclNwYWNlVXRpbHMucmdiO2U9W0NvbG9yU3BhY2VVdGlscy5yZ2IuZ2V0UmdiSGV4KGUsMCldO2JyZWFrO2Nhc2UgZHQ6eS5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPUNvbG9yU3BhY2VVdGlscy5yZ2I7ZT1bQ29sb3JTcGFjZVV0aWxzLnJnYi5nZXRSZ2JIZXgoZSwwKV07YnJlYWs7Y2FzZSBsdDpDPXkuc3RhdGUucGF0dGVybkZpbGxDb2xvclNwYWNlO2lmKCFDKXtpZihpc051bWJlckFycmF5KGUsbnVsbCkpe2U9W0NvbG9yU3BhY2VVdGlscy5ncmF5LmdldFJnYkhleChlLDApXTtpPWZ0O2JyZWFrfWU9W107aT1XdDticmVha31pZigiUGF0dGVybiI9PT1DLm5hbWUpe25leHQobC5oYW5kbGVDb2xvck4ocixsdCxlLEMsYixhLHQsZCxnLHApKTtyZXR1cm59ZT1bQy5nZXRSZ2JIZXgoZSwwKV07aT1mdDticmVhaztjYXNlIG90OkM9eS5zdGF0ZS5wYXR0ZXJuU3Ryb2tlQ29sb3JTcGFjZTtpZighQyl7aWYoaXNOdW1iZXJBcnJheShlLG51bGwpKXtlPVtDb2xvclNwYWNlVXRpbHMuZ3JheS5nZXRSZ2JIZXgoZSwwKV07aT1kdDticmVha31lPVtdO2k9SHQ7YnJlYWt9aWYoIlBhdHRlcm4iPT09Qy5uYW1lKXtuZXh0KGwuaGFuZGxlQ29sb3JOKHIsb3QsZSxDLGIsYSx0LGQsZyxwKSk7cmV0dXJufWU9W0MuZ2V0UmdiSGV4KGUsMCldO2k9ZHQ7YnJlYWs7Y2FzZSBtdDpsZXQgVDt0cnl7Y29uc3QgdD1hLmdldCgiU2hhZGluZyIpO2lmKCF0KXRocm93IG5ldyBGb3JtYXRFcnJvcigiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCIpO1Q9dC5nZXQoZVswXS5uYW1lKTtpZighVCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgb2JqZWN0IGZvdW5kIil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKWNvbnRpbnVlO2lmKGwub3B0aW9ucy5pZ25vcmVFcnJvcnMpe3dhcm4oYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIFNoYWRpbmc6ICIke2V9Ii5gKTtjb250aW51ZX10aHJvdyBlfWNvbnN0IE89bC5wYXJzZVNoYWRpbmcoe3NoYWRpbmc6VCxyZXNvdXJjZXM6YSxsb2NhbENvbG9yU3BhY2VDYWNoZTpkLGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpwfSk7aWYoIU8pY29udGludWU7ZT1bT107aT1tdDticmVhaztjYXNlIGJlOkY9ZVswXWluc3RhbmNlb2YgTmFtZTt2PWVbMF0ubmFtZTtpZihGKXtjb25zdCB0PWYuZ2V0QnlOYW1lKHYpO2lmKHQpe3QubGVuZ3RoPjAmJnIuYWRkT3AoYmUsW3RdKTtlPW51bGw7Y29udGludWV9fW5leHQobmV3IFByb21pc2UoZnVuY3Rpb24oZSxpKXtpZighRil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3Qgbj1hLmdldCgiRXh0R1N0YXRlIik7aWYoIShuIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJFeHRHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjb25zdCBzPW4uZ2V0KHYpO2lmKCEocyBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiR1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7bC5zZXRHU3RhdGUoe3Jlc291cmNlczphLGdTdGF0ZTpzLG9wZXJhdG9yTGlzdDpyLGNhY2hlS2V5OnYsdGFzazp0LHN0YXRlTWFuYWdlcjp5LGxvY2FsR1N0YXRlQ2FjaGU6Zixsb2NhbENvbG9yU3BhY2VDYWNoZTpkLHNlZW5SZWZzOmN9KS50aGVuKGUsaSl9KS5jYXRjaChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikpe2lmKCFsLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJHtlfSIuYCl9fSkpO3JldHVybjtjYXNlIGhlOntjb25zdFt0XT1lO2lmKCJudW1iZXIiIT10eXBlb2YgdCl7d2FybihgSW52YWxpZCBzZXRMaW5lV2lkdGg6ICR7dH1gKTtjb250aW51ZX1lWzBdPU1hdGguYWJzKHQpO2JyZWFrfWNhc2UgZ2U6e2NvbnN0IHQ9ZVsxXTtpZigibnVtYmVyIiE9dHlwZW9mIHQpe3dhcm4oYEludmFsaWQgc2V0RGFzaDogJHt0fWApO2NvbnRpbnVlfWNvbnN0IGE9ZVswXTtpZighQXJyYXkuaXNBcnJheShhKSl7d2FybihgSW52YWxpZCBzZXREYXNoOiAke2F9YCk7Y29udGludWV9YS5zb21lKGU9PiJudW1iZXIiIT10eXBlb2YgZSkmJihlWzBdPWEuZmlsdGVyKGU9PiJudW1iZXIiPT10eXBlb2YgZSkpO2JyZWFrfWNhc2UgU2U6Y2FzZSBBZTpjYXNlIGtlOmNhc2UgQ2U6Y2FzZSB2ZTpjYXNlIEZlOmNhc2UgSWU6bC5idWlsZFBhdGgoaSxlLHkuc3RhdGUpO2NvbnRpbnVlO2Nhc2UgVGU6Y2FzZSBPZTpjYXNlIE1lOmNhc2UgRGU6Y2FzZSBCZTpjYXNlIFJlOmNhc2UgTmU6Y2FzZSBFZTpjYXNlIFBlOntjb25zdHtzdGF0ZTp7cGF0aEJ1ZmZlcjplLHBhdGhNaW5NYXg6dH19PXk7aSE9PU9lJiZpIT09TmUmJmkhPT1FZXx8ZS5wdXNoKEp0KTtpZigwPT09ZS5sZW5ndGgpci5hZGRPcChxdCxbaSxbbnVsbF0sbnVsbF0pO2Vsc2V7ci5hZGRPcChxdCxbaSxbbmV3IEZsb2F0MzJBcnJheShlKV0sdC5zbGljZSgpXSk7ZS5sZW5ndGg9MDt0LnNldChbMS8wLDEvMCwtMS8wLC0xLzBdLDApfWNvbnRpbnVlfWNhc2UgSmU6ci5hZGRPcChpLFtuZXcgRmxvYXQzMkFycmF5KGUpXSk7Y29udGludWU7Y2FzZSBTdDpjYXNlIEF0OmNhc2UgRnQ6Y2FzZSBJdDpjb250aW51ZTtjYXNlIEN0OmlmKCEoZVswXWluc3RhbmNlb2YgTmFtZSkpe3dhcm4oYEV4cGVjdGVkIG5hbWUgZm9yIGJlZ2luTWFya2VkQ29udGVudFByb3BzIGFyZzA9JHtlWzBdfWApO3IuYWRkT3AoQ3QsWyJPQyIsbnVsbF0pO2NvbnRpbnVlfWlmKCJPQyI9PT1lWzBdLm5hbWUpe25leHQobC5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhlWzFdLGEpLnRoZW4oZT0+e3IuYWRkT3AoQ3QsWyJPQyIsZV0pfSkuY2F0Y2goZT0+e2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIWwub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogIiR7ZX0iLmApO3IuYWRkT3AoQ3QsWyJPQyIsbnVsbF0pfX0pKTtyZXR1cm59ZT1bZVswXS5uYW1lLGVbMV1pbnN0YW5jZW9mIERpY3Q/ZVsxXS5nZXQoIk1DSUQiKTpudWxsXTticmVhaztkZWZhdWx0OmlmKG51bGwhPT1lKXtmb3IoUz0wLGs9ZS5sZW5ndGg7UzxrJiYhKGVbU11pbnN0YW5jZW9mIERpY3QpO1MrKyk7aWYoUzxrKXt3YXJuKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogIitpKTtjb250aW51ZX19fXIuYWRkT3AoaSxlKX1pZihvKW5leHQoQW4pO2Vsc2V7Y2xvc2VQZW5kaW5nUmVzdG9yZU9QUygpO2UoKX19KS5jYXRjaChlPT57aWYoIShlIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO3dhcm4oYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIiR7dC5uYW1lfSIgdGFzazogIiR7ZX0iLmApO2Nsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKX19KX1nZXRUZXh0Q29udGVudCh7c3RyZWFtOmUsdGFzazphLHJlc291cmNlczpyLHN0YXRlTWFuYWdlcjppPW51bGwsaW5jbHVkZU1hcmtlZENvbnRlbnQ6bj0hMSxzaW5rOnMsc2VlblN0eWxlczpvPW5ldyBTZXQsdmlld0JveDpjLGxhbmc6bD1udWxsLG1hcmtlZENvbnRlbnREYXRhOmg9bnVsbCxkaXNhYmxlTm9ybWFsaXphdGlvbjp1PSExLGtlZXBXaGl0ZVNwYWNlOmQ9ITEscHJldlJlZnM6Zj1udWxsLGludGVyc2VjdG9yOmc9bnVsbH0pe2NvbnN0IHA9ZS5kaWN0Py5vYmpJZCxtPW5ldyBSZWZTZXQoZik7aWYocCl7aWYoZj8uaGFzKHApKXRocm93IG5ldyBFcnJvcihgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBjaXJjdWxhciByZWZlcmVuY2U6ICR7cH1gKTttLnB1dChwKX1yfHw9RGljdC5lbXB0eTtpfHw9bmV3IFN0YXRlTWFuYWdlcihuZXcgVGV4dFN0YXRlKTtuJiYoaHx8PXtsZXZlbDowfSk7Y29uc3QgYj17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCksbGFuZzpsfSx5PXtpbml0aWFsaXplZDohMSxzdHI6W10sdG90YWxXaWR0aDowLHRvdGFsSGVpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MCx2ZXJ0aWNhbDohMSxwcmV2VHJhbnNmb3JtOm51bGwsdGV4dEFkdmFuY2VTY2FsZTowLHNwYWNlSW5GbG93TWluOjAsc3BhY2VJbkZsb3dNYXg6MCx0cmFja2luZ1NwYWNlTWluOjEvMCxuZWdhdGl2ZVNwYWNlTWF4Oi0xLzAsbm90QVNwYWNlOi0xLzAsdHJhbnNmb3JtOm51bGwsZm9udE5hbWU6bnVsbCxoYXNFT0w6ITF9LHc9WyIgIiwiICJdO2xldCB4PTA7ZnVuY3Rpb24gc2F2ZUxhc3RDaGFyKGUpe2NvbnN0IHQ9KHgrMSklMixhPSIgIiE9PXdbeF0mJiIgIj09PXdbdF07d1t4XT1lO3g9dDtyZXR1cm4hZCYmYX1mdW5jdGlvbiBzaG91bGRBZGRXaGl0ZXBzYWNlKCl7cmV0dXJuIWQmJiIgIiE9PXdbeF0mJiIgIj09PXdbKHgrMSklMl19ZnVuY3Rpb24gcmVzZXRMYXN0Q2hhcnMoKXt3WzBdPXdbMV09IiAiO3g9MH1jb25zdCBTPXRoaXMsaz10aGlzLnhyZWYsQz1bXTtsZXQgdj1udWxsO2NvbnN0IEY9bmV3IExvY2FsSW1hZ2VDYWNoZSxUPW5ldyBMb2NhbEdTdGF0ZUNhY2hlLE89bmV3IEV2YWx1YXRvclByZXByb2Nlc3NvcihlLGssaSk7bGV0IE07ZnVuY3Rpb24gcHVzaFdoaXRlc3BhY2Uoe3dpZHRoOmU9MCxoZWlnaHQ6dD0wLHRyYW5zZm9ybTphPXkucHJldlRyYW5zZm9ybSxmb250TmFtZTpyPXkuZm9udE5hbWV9KXtnPy5hZGRFeHRyYUNoYXIoIiAiKTtiLml0ZW1zLnB1c2goe3N0cjoiICIsZGlyOiJsdHIiLHdpZHRoOmUsaGVpZ2h0OnQsdHJhbnNmb3JtOmEsZm9udE5hbWU6cixoYXNFT0w6ITF9KX1mdW5jdGlvbiBnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpe2NvbnN0IGU9TS5mb250LGE9W00uZm9udFNpemUqTS50ZXh0SFNjYWxlLDAsMCxNLmZvbnRTaXplLDAsTS50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKE0uZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiFpc0FycmF5RXF1YWwoTS5mb250TWF0cml4LHQpKXtjb25zdCB0PWUuYmJveFszXS1lLmJib3hbMV07dD4wJiYoYVszXSo9dCpNLmZvbnRNYXRyaXhbM10pfXJldHVybiBVdGlsLnRyYW5zZm9ybShNLmN0bSxVdGlsLnRyYW5zZm9ybShNLnRleHRNYXRyaXgsYSkpfWZ1bmN0aW9uIGVuc3VyZVRleHRDb250ZW50SXRlbSgpe2lmKHkuaW5pdGlhbGl6ZWQpcmV0dXJuIHk7Y29uc3R7Zm9udDplLGxvYWRlZE5hbWU6dH09TTtpZighby5oYXModCkpe28uYWRkKHQpO2Iuc3R5bGVzW3RdPXtmb250RmFtaWx5OmUuZmFsbGJhY2tOYW1lLGFzY2VudDplLmFzY2VudCxkZXNjZW50OmUuZGVzY2VudCx2ZXJ0aWNhbDplLnZlcnRpY2FsfTtpZihTLm9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllcyYmZS5zeXN0ZW1Gb250SW5mbyl7Y29uc3QgYT1iLnN0eWxlc1t0XTthLmZvbnRTdWJzdGl0dXRpb249ZS5zeXN0ZW1Gb250SW5mby5jc3M7YS5mb250U3Vic3RpdHV0aW9uTG9hZGVkTmFtZT1lLnN5c3RlbUZvbnRJbmZvLmxvYWRlZE5hbWV9fXkuZm9udE5hbWU9dDtjb25zdCBhPXkudHJhbnNmb3JtPWdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7aWYoZS52ZXJ0aWNhbCl7eS53aWR0aD15LnRvdGFsV2lkdGg9TWF0aC5oeXBvdChhWzBdLGFbMV0pO3kuaGVpZ2h0PXkudG90YWxIZWlnaHQ9MDt5LnZlcnRpY2FsPSEwfWVsc2V7eS53aWR0aD15LnRvdGFsV2lkdGg9MDt5LmhlaWdodD15LnRvdGFsSGVpZ2h0PU1hdGguaHlwb3QoYVsyXSxhWzNdKTt5LnZlcnRpY2FsPSExfWNvbnN0IHI9TWF0aC5oeXBvdChNLnRleHRMaW5lTWF0cml4WzBdLE0udGV4dExpbmVNYXRyaXhbMV0pLGk9TWF0aC5oeXBvdChNLmN0bVswXSxNLmN0bVsxXSk7eS50ZXh0QWR2YW5jZVNjYWxlPWkqcjtjb25zdHtmb250U2l6ZTpufT1NO3kudHJhY2tpbmdTcGFjZU1pbj0uMTAyKm47eS5ub3RBU3BhY2U9LjAzKm47eS5uZWdhdGl2ZVNwYWNlTWF4PS0uMipuO3kuc3BhY2VJbkZsb3dNaW49LjEwMipuO3kuc3BhY2VJbkZsb3dNYXg9LjYqbjt5Lmhhc0VPTD0hMTt5LmluaXRpYWxpemVkPSEwO3JldHVybiB5fWZ1bmN0aW9uIHVwZGF0ZUFkdmFuY2VTY2FsZSgpe2lmKCF5LmluaXRpYWxpemVkKXJldHVybjtjb25zdCBlPU1hdGguaHlwb3QoTS50ZXh0TGluZU1hdHJpeFswXSxNLnRleHRMaW5lTWF0cml4WzFdKSx0PU1hdGguaHlwb3QoTS5jdG1bMF0sTS5jdG1bMV0pKmU7aWYodCE9PXkudGV4dEFkdmFuY2VTY2FsZSl7aWYoeS52ZXJ0aWNhbCl7eS50b3RhbEhlaWdodCs9eS5oZWlnaHQqeS50ZXh0QWR2YW5jZVNjYWxlO3kuaGVpZ2h0PTB9ZWxzZXt5LnRvdGFsV2lkdGgrPXkud2lkdGgqeS50ZXh0QWR2YW5jZVNjYWxlO3kud2lkdGg9MH15LnRleHRBZHZhbmNlU2NhbGU9dH19ZnVuY3Rpb24gcnVuQmlkaVRyYW5zZm9ybShlKXtsZXQgdD1lLnN0ci5qb2luKCIiKTt1fHwodD1mdW5jdGlvbiBub3JtYWxpemVVbmljb2RlKGUpe2lmKCFyYSl7cmE9LyhbXHUwMGEwXHUwMGI1XHUwMzdlXHUwZWIzXHUyMDAwLVx1MjAwYVx1MjAyZlx1MjEyNlx1ZmIwMC1cdWZiMDRcdWZiMDZcdWZiMjAtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0MC1cdWZiNDFcdWZiNDMtXHVmYjQ0XHVmYjQ2LVx1ZmJhMVx1ZmJhNC1cdWZiYTlcdWZiYWUtXHVmYmIxXHVmYmQzLVx1ZmJkY1x1ZmJkZS1cdWZiZTdcdWZiZWEtXHVmYmY4XHVmYmZjLVx1ZmJmZFx1ZmMwMC1cdWZjNWRcdWZjNjQtXHVmY2YxXHVmY2Y1LVx1ZmQzZFx1ZmQ4OFx1ZmRmNFx1ZmRmYS1cdWZkZmJcdWZlNzFcdWZlNzdcdWZlNzlcdWZlN2JcdWZlN2RdKyl8KFx1ZmIwNSspL2d1O2lhPW5ldyBNYXAoW1si76yFIiwixb90Il1dKX1yZXR1cm4gZS5yZXBsYWNlQWxsKHJhLChlLHQsYSk9PnQ/dC5ub3JtYWxpemUoIk5GS0MiKTppYS5nZXQoYSkpfSh0KSk7Y29uc3QgYT1iaWRpKHQsLTEsZS52ZXJ0aWNhbCk7cmV0dXJue3N0cjphLnN0cixkaXI6YS5kaXIsd2lkdGg6TWF0aC5hYnMoZS50b3RhbFdpZHRoKSxoZWlnaHQ6TWF0aC5hYnMoZS50b3RhbEhlaWdodCksdHJhbnNmb3JtOmUudHJhbnNmb3JtLGZvbnROYW1lOmUuZm9udE5hbWUsaGFzRU9MOmUuaGFzRU9MfX1hc3luYyBmdW5jdGlvbiBoYW5kbGVTZXRGb250KGUsaSl7Y29uc3Qgbj1hd2FpdCBTLmxvYWRGb250KGUsaSxyLGEpO00ubG9hZGVkTmFtZT1uLmxvYWRlZE5hbWU7TS5mb250PW4uZm9udDtNLmZvbnRNYXRyaXg9bi5mb250LmZvbnRNYXRyaXh8fHR9ZnVuY3Rpb24gYXBwbHlJbnZlcnNlUm90YXRpb24oZSx0LGEpe2NvbnN0IHI9TWF0aC5oeXBvdChhWzBdLGFbMV0pO3JldHVyblsoYVswXSplK2FbMV0qdCkvciwoYVsyXSplK2FbM10qdCkvcl19ZnVuY3Rpb24gY29tcGFyZVdpdGhMYXN0UG9zaXRpb24oZSl7Y29uc3QgdD1nZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpO2xldCBhPXRbNF0scj10WzVdO2lmKE0uZm9udD8udmVydGljYWwpe2lmKGE8Y1swXXx8YT5jWzJdfHxyK2U8Y1sxXXx8cj5jWzNdKXJldHVybiExfWVsc2UgaWYoYStlPGNbMF18fGE+Y1syXXx8cjxjWzFdfHxyPmNbM10pcmV0dXJuITE7aWYoIU0uZm9udHx8IXkucHJldlRyYW5zZm9ybSlyZXR1cm4hMDtsZXQgaT15LnByZXZUcmFuc2Zvcm1bNF0sbj15LnByZXZUcmFuc2Zvcm1bNV07aWYoaT09PWEmJm49PT1yKXJldHVybiEwO2xldCBzPS0xO3RbMF0mJjA9PT10WzFdJiYwPT09dFsyXT9zPXRbMF0+MD8wOjE4MDp0WzFdJiYwPT09dFswXSYmMD09PXRbM10mJihzPXRbMV0+MD85MDoyNzApO3N3aXRjaChzKXtjYXNlIDA6YnJlYWs7Y2FzZSA5MDpbYSxyXT1bcixhXTtbaSxuXT1bbixpXTticmVhaztjYXNlIDE4MDpbYSxyLGksbl09Wy1hLC1yLC1pLC1uXTticmVhaztjYXNlIDI3MDpbYSxyXT1bLXIsLWFdO1tpLG5dPVstbiwtaV07YnJlYWs7ZGVmYXVsdDpbYSxyXT1hcHBseUludmVyc2VSb3RhdGlvbihhLHIsdCk7W2ksbl09YXBwbHlJbnZlcnNlUm90YXRpb24oaSxuLHkucHJldlRyYW5zZm9ybSl9aWYoTS5mb250LnZlcnRpY2FsKXtjb25zdCBlPShuLXIpL3kudGV4dEFkdmFuY2VTY2FsZSx0PWEtaSxzPU1hdGguc2lnbih5LmhlaWdodCk7aWYoZTxzKnkubmVnYXRpdmVTcGFjZU1heCl7aWYoTWF0aC5hYnModCk+LjUqeS53aWR0aCl7YXBwZW5kRU9MKCk7cmV0dXJuITB9cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3JldHVybiEwfWlmKE1hdGguYWJzKHQpPnkud2lkdGgpe2FwcGVuZEVPTCgpO3JldHVybiEwfWU8PXMqeS5ub3RBU3BhY2UmJnJlc2V0TGFzdENoYXJzKCk7aWYoZTw9cyp5LnRyYWNraW5nU3BhY2VNaW4paWYoc2hvdWxkQWRkV2hpdGVwc2FjZSgpKXtyZXNldExhc3RDaGFycygpO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cHVzaFdoaXRlc3BhY2Uoe2hlaWdodDpNYXRoLmFicyhlKX0pfWVsc2UgeS5oZWlnaHQrPWU7ZWxzZSBpZighYWRkRmFrZVNwYWNlcyhlLHkucHJldlRyYW5zZm9ybSxzKSlpZigwPT09eS5zdHIubGVuZ3RoKXtyZXNldExhc3RDaGFycygpO3B1c2hXaGl0ZXNwYWNlKHtoZWlnaHQ6TWF0aC5hYnMoZSl9KX1lbHNlIHkuaGVpZ2h0Kz1lO01hdGguYWJzKHQpPi4yNSp5LndpZHRoJiZmbHVzaFRleHRDb250ZW50SXRlbSgpO3JldHVybiEwfWNvbnN0IG89KGEtaSkveS50ZXh0QWR2YW5jZVNjYWxlLGw9ci1uLGg9TWF0aC5zaWduKHkud2lkdGgpO2lmKG88aCp5Lm5lZ2F0aXZlU3BhY2VNYXgpe2lmKE1hdGguYWJzKGwpPi41KnkuaGVpZ2h0KXthcHBlbmRFT0woKTtyZXR1cm4hMH1yZXNldExhc3RDaGFycygpO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmV0dXJuITB9aWYoTWF0aC5hYnMobCk+eS5oZWlnaHQpe2FwcGVuZEVPTCgpO3JldHVybiEwfW88PWgqeS5ub3RBU3BhY2UmJnJlc2V0TGFzdENoYXJzKCk7aWYobzw9aCp5LnRyYWNraW5nU3BhY2VNaW4paWYoc2hvdWxkQWRkV2hpdGVwc2FjZSgpKXtyZXNldExhc3RDaGFycygpO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cHVzaFdoaXRlc3BhY2Uoe3dpZHRoOk1hdGguYWJzKG8pfSl9ZWxzZSB5LndpZHRoKz1vO2Vsc2UgaWYoIWFkZEZha2VTcGFjZXMobyx5LnByZXZUcmFuc2Zvcm0saCkpaWYoMD09PXkuc3RyLmxlbmd0aCl7cmVzZXRMYXN0Q2hhcnMoKTtwdXNoV2hpdGVzcGFjZSh7d2lkdGg6TWF0aC5hYnMobyl9KX1lbHNlIHkud2lkdGgrPW87TWF0aC5hYnMobCk+LjI1KnkuaGVpZ2h0JiZmbHVzaFRleHRDb250ZW50SXRlbSgpO3JldHVybiEwfWZ1bmN0aW9uIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczplLGV4dHJhU3BhY2luZzp0fSl7Y29uc3QgYT1NLmZvbnQ7aWYoIWUpe2NvbnN0IGU9TS5jaGFyU3BhY2luZyt0O2UmJihhLnZlcnRpY2FsP00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1lKTpNLnRyYW5zbGF0ZVRleHRNYXRyaXgoZSpNLnRleHRIU2NhbGUsMCkpO2QmJmNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKDApO3JldHVybn1jb25zdCByPWEuY2hhcnNUb0dseXBocyhlKSxpPU0uZm9udE1hdHJpeFswXSpNLmZvbnRTaXplO2ZvcihsZXQgZT0wLG49ci5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgcz1yW2VdLHtjYXRlZ29yeTpvLG9yaWdpbmFsQ2hhckNvZGU6Y309cztpZihvLmlzSW52aXNpYmxlRm9ybWF0TWFyayljb250aW51ZTtsZXQgbD1NLmNoYXJTcGFjaW5nKyhlKzE9PT1uP3Q6MCksaD1zLndpZHRoO2EudmVydGljYWwmJihoPXMudm1ldHJpYz9zLnZtZXRyaWNbMF06LWgpO2xldCB1PWgqaTszMj09PWMmJihsKz1NLndvcmRTcGFjaW5nKTtpZighZCYmby5pc1doaXRlc3BhY2Upe2lmKGEudmVydGljYWwpe2wrPS11O00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1sKX1lbHNle2wrPXU7TS50cmFuc2xhdGVUZXh0TWF0cml4KGwqTS50ZXh0SFNjYWxlLDApfXNhdmVMYXN0Q2hhcigiICIpO2NvbnRpbnVlfWlmKCFvLmlzWmVyb1dpZHRoRGlhY3JpdGljJiYhY29tcGFyZVdpdGhMYXN0UG9zaXRpb24odSkpe2EudmVydGljYWw/TS50cmFuc2xhdGVUZXh0TWF0cml4KDAsdSk6TS50cmFuc2xhdGVUZXh0TWF0cml4KHUqTS50ZXh0SFNjYWxlLDApO2NvbnRpbnVlfWNvbnN0IGY9ZW5zdXJlVGV4dENvbnRlbnRJdGVtKCk7by5pc1plcm9XaWR0aERpYWNyaXRpYyYmKHU9MCk7aWYoYS52ZXJ0aWNhbCl7Zz8uYWRkR2x5cGgoZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSwwLHUscy51bmljb2RlKTtNLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCx1KTt1PU1hdGguYWJzKHUpO2YuaGVpZ2h0Kz11fWVsc2V7dSo9TS50ZXh0SFNjYWxlO2c/LmFkZEdseXBoKGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCksdSwwLHMudW5pY29kZSk7TS50cmFuc2xhdGVUZXh0TWF0cml4KHUsMCk7Zi53aWR0aCs9dX11JiYoZi5wcmV2VHJhbnNmb3JtPWdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCkpO2NvbnN0IHA9cy51bmljb2RlO2lmKHNhdmVMYXN0Q2hhcihwKSl7Zi5zdHIucHVzaCgiICIpO2c/LmFkZEV4dHJhQ2hhcigiICIpfWd8fGYuc3RyLnB1c2gocCk7bCYmKGEudmVydGljYWw/TS50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWwpOk0udHJhbnNsYXRlVGV4dE1hdHJpeChsKk0udGV4dEhTY2FsZSwwKSl9fWZ1bmN0aW9uIGFwcGVuZEVPTCgpe2c/LmFkZEV4dHJhQ2hhcigiXG4iKTtyZXNldExhc3RDaGFycygpO2lmKHkuaW5pdGlhbGl6ZWQpe3kuaGFzRU9MPSEwO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCl9ZWxzZSBiLml0ZW1zLnB1c2goe3N0cjoiIixkaXI6Imx0ciIsd2lkdGg6MCxoZWlnaHQ6MCx0cmFuc2Zvcm06Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxmb250TmFtZTpNLmxvYWRlZE5hbWUsaGFzRU9MOiEwfSl9ZnVuY3Rpb24gYWRkRmFrZVNwYWNlcyhlLHQsYSl7aWYoYSp5LnNwYWNlSW5GbG93TWluPD1lJiZlPD1hKnkuc3BhY2VJbkZsb3dNYXgpe2lmKHkuaW5pdGlhbGl6ZWQpe3Jlc2V0TGFzdENoYXJzKCk7eS5zdHIucHVzaCgiICIpO2c/LmFkZEV4dHJhQ2hhcigiICIpfXJldHVybiExfWNvbnN0IHI9eS5mb250TmFtZTtsZXQgaT0wO2lmKHkudmVydGljYWwpe2k9ZTtlPTB9Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXNldExhc3RDaGFycygpO3B1c2hXaGl0ZXNwYWNlKHt3aWR0aDpNYXRoLmFicyhlKSxoZWlnaHQ6TWF0aC5hYnMoaSksdHJhbnNmb3JtOnR8fGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCksZm9udE5hbWU6cn0pO3JldHVybiEwfWZ1bmN0aW9uIGZsdXNoVGV4dENvbnRlbnRJdGVtKCl7aWYoeS5pbml0aWFsaXplZCYmeS5zdHIpe3kudmVydGljYWw/eS50b3RhbEhlaWdodCs9eS5oZWlnaHQqeS50ZXh0QWR2YW5jZVNjYWxlOnkudG90YWxXaWR0aCs9eS53aWR0aCp5LnRleHRBZHZhbmNlU2NhbGU7Yi5pdGVtcy5wdXNoKHJ1bkJpZGlUcmFuc2Zvcm0oeSkpO3kuaW5pdGlhbGl6ZWQ9ITE7eS5zdHIubGVuZ3RoPTB9fWZ1bmN0aW9uIGVucXVldWVDaHVuayhlPSExKXtjb25zdCB0PWIuaXRlbXMubGVuZ3RoO2lmKDAhPT10JiYhKGUmJnQ8MTApKXtzPy5lbnF1ZXVlKGIsdCk7Yi5pdGVtcz1bXTtiLnN0eWxlcz1PYmplY3QuY3JlYXRlKG51bGwpfX1jb25zdCBEPW5ldyBUaW1lU2xvdE1hbmFnZXI7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VCb2R5KGUsdCl7Y29uc3QgbmV4dD1mdW5jdGlvbihhKXtlbnF1ZXVlQ2h1bmsoITApO1Byb21pc2UuYWxsKFthLHM/LnJlYWR5XSkudGhlbihmdW5jdGlvbigpe3RyeXtwcm9taXNlQm9keShlLHQpfWNhdGNoKGUpe3QoZSl9fSx0KX07YS5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7RC5yZXNldCgpO2NvbnN0IGY9e307bGV0IGcscCx5LHc9W107Zm9yKDshKGc9RC5jaGVjaygpKTspe3cubGVuZ3RoPTA7Zi5hcmdzPXc7aWYoIU8ucmVhZChmKSlicmVhaztjb25zdCBlPU07TT1pLnN0YXRlO2NvbnN0IHQ9Zi5mbjt3PWYuYXJncztzd2l0Y2goMHx0KXtjYXNlIEdlOmNvbnN0IHQ9d1swXS5uYW1lLGY9d1sxXTtpZihNLmZvbnQmJnQ9PT1NLmZvbnROYW1lJiZmPT09TS5mb250U2l6ZSlicmVhaztmbHVzaFRleHRDb250ZW50SXRlbSgpO00uZm9udE5hbWU9dDtNLmZvbnRTaXplPWY7bmV4dChoYW5kbGVTZXRGb250KHQsbnVsbCkpO3JldHVybjtjYXNlICRlOk0udGV4dFJpc2U9d1swXTticmVhaztjYXNlIEhlOk0udGV4dEhTY2FsZT13WzBdLzEwMDticmVhaztjYXNlIFdlOk0ubGVhZGluZz13WzBdO2JyZWFrO2Nhc2UgVmU6TS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCh3WzBdLHdbMV0pO00udGV4dE1hdHJpeD1NLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBLZTpNLmxlYWRpbmc9LXdbMV07TS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCh3WzBdLHdbMV0pO00udGV4dE1hdHJpeD1NLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBZZTpNLmNhcnJpYWdlUmV0dXJuKCk7YnJlYWs7Y2FzZSBKZTpNLnNldFRleHRNYXRyaXgod1swXSx3WzFdLHdbMl0sd1szXSx3WzRdLHdbNV0pO00uc2V0VGV4dExpbmVNYXRyaXgod1swXSx3WzFdLHdbMl0sd1szXSx3WzRdLHdbNV0pO3VwZGF0ZUFkdmFuY2VTY2FsZSgpO2JyZWFrO2Nhc2UgWGU6TS5jaGFyU3BhY2luZz13WzBdO2JyZWFrO2Nhc2UgcWU6TS53b3JkU3BhY2luZz13WzBdO2JyZWFrO2Nhc2UgVWU6TS50ZXh0TWF0cml4PWZhLnNsaWNlKCk7TS50ZXh0TGluZU1hdHJpeD1mYS5zbGljZSgpO2JyZWFrO2Nhc2UgUWU6aWYoIWkuc3RhdGUuZm9udCl7Uy5lbnN1cmVTdGF0ZUZvbnQoaS5zdGF0ZSk7Y29udGludWV9Y29uc3QgZz0oTS5mb250LnZlcnRpY2FsPzE6LTEpKk0uZm9udFNpemUvMWUzLHg9d1swXTtmb3IobGV0IGU9MCx0PXgubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9eFtlXTtpZigic3RyaW5nIj09dHlwZW9mIHQpQy5wdXNoKHQpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB0JiYwIT09dCl7Y29uc3QgZT1DLmpvaW4oIiIpO0MubGVuZ3RoPTA7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOmUsZXh0cmFTcGFjaW5nOnQqZ30pfX1pZihDLmxlbmd0aD4wKXtjb25zdCBlPUMuam9pbigiIik7Qy5sZW5ndGg9MDtidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6ZSxleHRyYVNwYWNpbmc6MH0pfWJyZWFrO2Nhc2UgWmU6aWYoIWkuc3RhdGUuZm9udCl7Uy5lbnN1cmVTdGF0ZUZvbnQoaS5zdGF0ZSk7Y29udGludWV9YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOndbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGV0OmlmKCFpLnN0YXRlLmZvbnQpe1MuZW5zdXJlU3RhdGVGb250KGkuc3RhdGUpO2NvbnRpbnVlfU0uY2FycmlhZ2VSZXR1cm4oKTtidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6d1swXSxleHRyYVNwYWNpbmc6MH0pO2JyZWFrO2Nhc2UgdHQ6aWYoIWkuc3RhdGUuZm9udCl7Uy5lbnN1cmVTdGF0ZUZvbnQoaS5zdGF0ZSk7Y29udGludWV9TS53b3JkU3BhY2luZz13WzBdO00uY2hhclNwYWNpbmc9d1sxXTtNLmNhcnJpYWdlUmV0dXJuKCk7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOndbMl0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIHh0OmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7dj8/PXIuZ2V0KCJYT2JqZWN0Iil8fERpY3QuZW1wdHk7eT13WzBdaW5zdGFuY2VvZiBOYW1lO3A9d1swXS5uYW1lO2lmKHkmJkYuZ2V0QnlOYW1lKHApKWJyZWFrO25leHQobmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtpZigheSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2xldCBmPXYuZ2V0UmF3KHApO2lmKGYgaW5zdGFuY2VvZiBSZWYpe2lmKEYuZ2V0QnlSZWYoZikpe2UoKTtyZXR1cm59aWYoUy5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEoZixTLnBhZ2VJbmRleCkpe2UoKTtyZXR1cm59Zj1rLmZldGNoKGYpfWlmKCEoZiBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTtjb25zdHtkaWN0Omd9PWYsYj1nLmdldCgiU3VidHlwZSIpO2lmKCEoYiBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpO2lmKCJGb3JtIiE9PWIubmFtZSl7Ri5zZXQocCxnLm9iaklkLCEwKTtlKCk7cmV0dXJufWNvbnN0IHc9aS5zdGF0ZS5jbG9uZSgpLHg9bmV3IFN0YXRlTWFuYWdlcih3KSxDPWxvb2t1cE1hdHJpeChnLmdldEFycmF5KCJNYXRyaXgiKSxudWxsKTtDJiZ4LnRyYW5zZm9ybShDKTtjb25zdCBUPWcuZ2V0KCJSZXNvdXJjZXMiKTtlbnF1ZXVlQ2h1bmsoKTtjb25zdCBPPXtlbnF1ZXVlSW52b2tlZDohMSxlbnF1ZXVlKGUsdCl7dGhpcy5lbnF1ZXVlSW52b2tlZD0hMDtzLmVucXVldWUoZSx0KX0sZ2V0IGRlc2lyZWRTaXplKCl7cmV0dXJuIHMuZGVzaXJlZFNpemU/PzB9LGdldCByZWFkeSgpe3JldHVybiBzLnJlYWR5fX07Uy5nZXRUZXh0Q29udGVudCh7c3RyZWFtOmYsdGFzazphLHJlc291cmNlczpUIGluc3RhbmNlb2YgRGljdD9UOnIsc3RhdGVNYW5hZ2VyOngsaW5jbHVkZU1hcmtlZENvbnRlbnQ6bixzaW5rOnMmJk8sc2VlblN0eWxlczpvLHZpZXdCb3g6YyxsYW5nOmwsbWFya2VkQ29udGVudERhdGE6aCxkaXNhYmxlTm9ybWFsaXphdGlvbjp1LGtlZXBXaGl0ZVNwYWNlOmQscHJldlJlZnM6bX0pLnRoZW4oZnVuY3Rpb24oKXtPLmVucXVldWVJbnZva2VkfHxGLnNldChwLGcub2JqSWQsITApO2UoKX0sdCl9KS5jYXRjaChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikpe2lmKCFTLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHtlfSIuYCl9fSkpO3JldHVybjtjYXNlIGJlOnk9d1swXWluc3RhbmNlb2YgTmFtZTtwPXdbMF0ubmFtZTtpZih5JiZULmdldEJ5TmFtZShwKSlicmVhaztuZXh0KG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsdCl7aWYoIXkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJHU3RhdGUgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2NvbnN0IGE9ci5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEoYSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3QgaT1hLmdldChwKTtpZighKGkgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2NvbnN0IG49aS5nZXQoIkZvbnQiKTtpZihuKXtmbHVzaFRleHRDb250ZW50SXRlbSgpO00uZm9udE5hbWU9bnVsbDtNLmZvbnRTaXplPW5bMV07aGFuZGxlU2V0Rm9udChudWxsLG5bMF0pLnRoZW4oZSx0KX1lbHNle1Quc2V0KHAsaS5vYmpJZCwhMCk7ZSgpfX0pLmNhdGNoKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIVMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7ZX0iLmApfX0pKTtyZXR1cm47Y2FzZSBrdDpmbHVzaFRleHRDb250ZW50SXRlbSgpO2lmKG4pe2gubGV2ZWwrKztiLml0ZW1zLnB1c2goe3R5cGU6ImJlZ2luTWFya2VkQ29udGVudCIsdGFnOndbMF1pbnN0YW5jZW9mIE5hbWU/d1swXS5uYW1lOm51bGx9KX1icmVhaztjYXNlIEN0OmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7aWYobil7aC5sZXZlbCsrO2xldCBlPW51bGw7d1sxXWluc3RhbmNlb2YgRGljdCYmKGU9d1sxXS5nZXQoIk1DSUQiKSk7Yi5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsaWQ6TnVtYmVyLmlzSW50ZWdlcihlKT9gJHtTLmlkRmFjdG9yeS5nZXRQYWdlT2JqSWQoKX1fbWMke2V9YDpudWxsLHRhZzp3WzBdaW5zdGFuY2VvZiBOYW1lP3dbMF0ubmFtZTpudWxsfSl9YnJlYWs7Y2FzZSB2dDpmbHVzaFRleHRDb250ZW50SXRlbSgpO2lmKG4pe2lmKDA9PT1oLmxldmVsKWJyZWFrO2gubGV2ZWwtLTtiLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9YnJlYWs7Y2FzZSB3ZTohZXx8ZS5mb250PT09TS5mb250JiZlLmZvbnRTaXplPT09TS5mb250U2l6ZSYmZS5mb250TmFtZT09PU0uZm9udE5hbWV8fGZsdXNoVGV4dENvbnRlbnRJdGVtKCl9aWYoYi5pdGVtcy5sZW5ndGg+PShzPy5kZXNpcmVkU2l6ZT8/MSkpe2c9ITA7YnJlYWt9fWlmKGcpbmV4dChBbik7ZWxzZXtmbHVzaFRleHRDb250ZW50SXRlbSgpO2VucXVldWVDaHVuaygpO2UoKX19KS5jYXRjaChlPT57aWYoIShlIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO3dhcm4oYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJHthLm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtlbnF1ZXVlQ2h1bmsoKX19KX1hc3luYyBleHRyYWN0RGF0YVN0cnVjdHVyZXMoZSx0KXtjb25zdCBhPXRoaXMueHJlZjtsZXQgcjtjb25zdCBpPXRoaXMucmVhZFRvVW5pY29kZSh0LnRvVW5pY29kZSk7aWYodC5jb21wb3NpdGUpe2NvbnN0IGE9ZS5nZXQoIkNJRFN5c3RlbUluZm8iKTthIGluc3RhbmNlb2YgRGljdCYmKHQuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6c3RyaW5nVG9QREZTdHJpbmcoYS5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOnN0cmluZ1RvUERGU3RyaW5nKGEuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OmEuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7Y29uc3QgdD1lLmdldCgiQ0lEVG9HSURNYXAiKTt0IGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmKHI9dC5nZXRCeXRlcygpKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO3dhcm4oYGV4dHJhY3REYXRhU3RydWN0dXJlcyAtIGlnbm9yaW5nIENJRFRvR0lETWFwIGRhdGE6ICIke2V9Ii5gKX19Y29uc3Qgbj1bXTtsZXQgcyxvPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe3M9ZS5nZXQoIkVuY29kaW5nIik7aWYocyBpbnN0YW5jZW9mIERpY3Qpe289cy5nZXQoIkJhc2VFbmNvZGluZyIpO289byBpbnN0YW5jZW9mIE5hbWU/by5uYW1lOm51bGw7aWYocy5oYXMoIkRpZmZlcmVuY2VzIikpe2NvbnN0IGU9cy5nZXQoIkRpZmZlcmVuY2VzIik7bGV0IHQ9MDtmb3IoY29uc3QgciBvZiBlKXtjb25zdCBlPWEuZmV0Y2hJZlJlZihyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpdD1lO2Vsc2V7aWYoIShlIGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICR7ZX1gKTtuW3QrK109ZS5uYW1lfX19fWVsc2UgaWYocyBpbnN0YW5jZW9mIE5hbWUpbz1zLm5hbWU7ZWxzZXtjb25zdCBlPSJFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3QiO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IG5ldyBGb3JtYXRFcnJvcihlKTt3YXJuKGUpfSJNYWNSb21hbkVuY29kaW5nIiE9PW8mJiJNYWNFeHBlcnRFbmNvZGluZyIhPT1vJiYiV2luQW5zaUVuY29kaW5nIiE9PW8mJihvPW51bGwpfWNvbnN0IGM9IXQuZmlsZXx8dC5pc0ludGVybmFsRm9udCxsPVhyKClbdC5uYW1lXTtvJiZjJiZsJiYobz1udWxsKTtpZihvKXQuZGVmYXVsdEVuY29kaW5nPWdldEVuY29kaW5nKG8pO2Vsc2V7bGV0IGU9ISEodC5mbGFncyZBcik7Y29uc3QgYT0hISh0LmZsYWdzJmtyKTtpZigiVHJ1ZVR5cGUiPT09dC50eXBlJiZlJiZhJiYwIT09bi5sZW5ndGgpe3QuZmxhZ3MmPX5BcjtlPSExfXM9bHI7IlRydWVUeXBlIiE9PXQudHlwZXx8YXx8KHM9aHIpO2lmKGV8fGwpe3M9Y3I7YyYmKC9TeW1ib2wvaS50ZXN0KHQubmFtZSk/cz11cjovRGluZ2JhdHMvaS50ZXN0KHQubmFtZSk/cz1kcjovV2luZ2RpbmdzL2kudGVzdCh0Lm5hbWUpJiYocz1ocikpfXQuZGVmYXVsdEVuY29kaW5nPXN9dC5kaWZmZXJlbmNlcz1uO3QuYmFzZUVuY29kaW5nTmFtZT1vO3QuaGFzRW5jb2Rpbmc9ISFvfHxuLmxlbmd0aD4wO3QuZGljdD1lO3QudG9Vbmljb2RlPWF3YWl0IGk7Y29uc3QgaD1hd2FpdCB0aGlzLmJ1aWxkVG9Vbmljb2RlKHQpO3QudG9Vbmljb2RlPWg7ciYmKHQuY2lkVG9HaWRNYXA9dGhpcy5yZWFkQ2lkVG9HaWRNYXAocixoKSk7cmV0dXJuIHR9X3NpbXBsZUZvbnRUb1VuaWNvZGUoZSx0PSExKXthc3NlcnQoIWUuY29tcG9zaXRlLCJNdXN0IGJlIGEgc2ltcGxlIGZvbnQuIik7Y29uc3QgYT1bXSxyPWUuZGVmYXVsdEVuY29kaW5nLnNsaWNlKCksaT1lLmJhc2VFbmNvZGluZ05hbWUsbj1lLmRpZmZlcmVuY2VzO2Zvcihjb25zdCBlIGluIG4pe2NvbnN0IHQ9bltlXTsiLm5vdGRlZiIhPT10JiYocltlXT10KX1jb25zdCBzPWZyKCk7Zm9yKGNvbnN0IG4gaW4gcil7bGV0IG89cltuXTtpZigiIj09PW8pY29udGludWU7bGV0IGM9c1tvXTtpZih2b2lkIDAhPT1jKXthW25dPVN0cmluZy5mcm9tQ2hhckNvZGUoYyk7Y29udGludWV9bGV0IGw9MDtzd2l0Y2gob1swXSl7Y2FzZSJHIjozPT09by5sZW5ndGgmJihsPXBhcnNlSW50KG8uc3Vic3RyaW5nKDEpLDE2KSk7YnJlYWs7Y2FzZSJnIjo1PT09by5sZW5ndGgmJihsPXBhcnNlSW50KG8uc3Vic3RyaW5nKDEpLDE2KSk7YnJlYWs7Y2FzZSJDIjpjYXNlImMiOmlmKG8ubGVuZ3RoPj0zJiZvLmxlbmd0aDw9NCl7Y29uc3QgYT1vLnN1YnN0cmluZygxKTtpZih0KXtsPXBhcnNlSW50KGEsMTYpO2JyZWFrfWw9K2E7aWYoTnVtYmVyLmlzTmFOKGwpJiZOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlSW50KGEsMTYpKSlyZXR1cm4gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlLCEwKX1icmVhaztjYXNlInUiOmM9Z2V0VW5pY29kZUZvckdseXBoKG8scyk7LTEhPT1jJiYobD1jKTticmVhaztkZWZhdWx0OnN3aXRjaChvKXtjYXNlImZfaCI6Y2FzZSJmX3QiOmNhc2UiVF9oIjphW25dPW8ucmVwbGFjZUFsbCgiXyIsIiIpO2NvbnRpbnVlfX1pZihsPjAmJmw8PTExMTQxMTEmJk51bWJlci5pc0ludGVnZXIobCkpe2lmKGkmJmw9PT0rbil7Y29uc3QgZT1nZXRFbmNvZGluZyhpKTtpZihlJiYobz1lW25dKSl7YVtuXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNbb10pO2NvbnRpbnVlfX1hW25dPVN0cmluZy5mcm9tQ29kZVBvaW50KGwpfX1yZXR1cm4gYX1hc3luYyBidWlsZFRvVW5pY29kZShlKXtlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwPWUudG9Vbmljb2RlPy5sZW5ndGg+MDtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXshZS5jb21wb3NpdGUmJmUuaGFzRW5jb2RpbmcmJihlLmZhbGxiYWNrVG9Vbmljb2RlPXRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSkpO3JldHVybiBlLnRvVW5pY29kZX1pZighZS5jb21wb3NpdGUpcmV0dXJuIG5ldyBUb1VuaWNvZGVNYXAodGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlKSk7aWYoZS5jb21wb3NpdGUmJihlLmNNYXAuYnVpbHRJbkNNYXAmJiEoZS5jTWFwIGluc3RhbmNlb2YgSWRlbnRpdHlDTWFwKXx8IkFkb2JlIj09PWUuY2lkU3lzdGVtSW5mbz8ucmVnaXN0cnkmJigiR0IxIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IkNOUzEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiSmFwYW4xIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IktvcmVhMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcpKSl7Y29uc3R7cmVnaXN0cnk6dCxvcmRlcmluZzphfT1lLmNpZFN5c3RlbUluZm8scj1OYW1lLmdldChgJHt0fS0ke2F9LVVDUzJgKSxpPWF3YWl0IENNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6cixmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KSxuPVtdLHM9W107ZS5jTWFwLmZvckVhY2goZnVuY3Rpb24oZSx0KXtpZih0PjY1NTM1KXRocm93IG5ldyBGb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpO2NvbnN0IGE9aS5sb29rdXAodCk7aWYoYSl7cy5sZW5ndGg9MDtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKz0yKXMucHVzaCgoYS5jaGFyQ29kZUF0KGUpPDw4KSthLmNoYXJDb2RlQXQoZSsxKSk7bltlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLnMpfX0pO3JldHVybiBuZXcgVG9Vbmljb2RlTWFwKG4pfXJldHVybiBuZXcgSWRlbnRpdHlUb1VuaWNvZGVNYXAoZS5maXJzdENoYXIsZS5sYXN0Q2hhcil9YXN5bmMgcmVhZFRvVW5pY29kZShlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlIGluc3RhbmNlb2YgTmFtZSl7Y29uc3QgdD1hd2FpdCBDTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7cmV0dXJuIHQgaW5zdGFuY2VvZiBJZGVudGl0eUNNYXA/bmV3IElkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBUb1VuaWNvZGVNYXAodC5nZXRNYXAoKSl9aWYoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pdHJ5e2NvbnN0IHQ9YXdhaXQgQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pO2lmKHQgaW5zdGFuY2VvZiBJZGVudGl0eUNNYXApcmV0dXJuIG5ldyBJZGVudGl0eVRvVW5pY29kZU1hcCgwLDY1NTM1KTtjb25zdCBhPW5ldyBBcnJheSh0Lmxlbmd0aCk7dC5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXthW2VdPVN0cmluZy5mcm9tQ29kZVBvaW50KHQpO3JldHVybn10Lmxlbmd0aCUyIT0wJiYodD0iXDAiK3QpO2NvbnN0IHI9W107Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXtjb25zdCBhPXQuY2hhckNvZGVBdChlKTw8OHx0LmNoYXJDb2RlQXQoZSsxKTtpZig1NTI5NiE9KDYzNDg4JmEpKXtyLnB1c2goYSk7Y29udGludWV9ZSs9Mjtjb25zdCBpPXQuY2hhckNvZGVBdChlKTw8OHx0LmNoYXJDb2RlQXQoZSsxKTtyLnB1c2goKCgxMDIzJmEpPDwxMCkrKDEwMjMmaSkrNjU1MzYpfWFbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4ucil9KTtyZXR1cm4gbmV3IFRvVW5pY29kZU1hcChhKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl7d2FybihgcmVhZFRvVW5pY29kZSAtIGlnbm9yaW5nIFRvVW5pY29kZSBkYXRhOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9dGhyb3cgZX1yZXR1cm4gbnVsbH1yZWFkQ2lkVG9HaWRNYXAoZSx0KXtjb25zdCBhPVtdO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3QgaT1lW3IrK108PDh8ZVtyXSxuPXI+PjE7KDAhPT1pfHx0LmhhcyhuKSkmJihhW25dPWkpfXJldHVybiBhfWV4dHJhY3RXaWR0aHMoZSx0LGEpe2NvbnN0IHI9dGhpcy54cmVmO2xldCBpPVtdLG49MDtjb25zdCBzPVtdO2xldCBvO2lmKGEuY29tcG9zaXRlKXtjb25zdCB0PWUuZ2V0KCJEVyIpO249Im51bWJlciI9PXR5cGVvZiB0P01hdGguY2VpbCh0KToxZTM7Y29uc3QgYz1lLmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGxldCBlPTAsdD1jLmxlbmd0aDtlPHQ7ZSsrKXtsZXQgdD1yLmZldGNoSWZSZWYoY1tlKytdKTtpZighTnVtYmVyLmlzSW50ZWdlcih0KSlicmVhaztjb25zdCBhPXIuZmV0Y2hJZlJlZihjW2VdKTtpZihBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBlIG9mIGEpe2NvbnN0IGE9ci5mZXRjaElmUmVmKGUpOyJudW1iZXIiPT10eXBlb2YgYSYmKGlbdF09YSk7dCsrfWVsc2V7aWYoIU51bWJlci5pc0ludGVnZXIoYSkpYnJlYWs7e2NvbnN0IG49ci5mZXRjaElmUmVmKGNbKytlXSk7aWYoIm51bWJlciIhPXR5cGVvZiBuKWNvbnRpbnVlO2ZvcihsZXQgZT10O2U8PWE7ZSsrKWlbZV09bn19fWlmKGEudmVydGljYWwpe2NvbnN0IHQ9ZS5nZXRBcnJheSgiRFcyIik7bGV0IGE9aXNOdW1iZXJBcnJheSh0LDIpP3Q6Wzg4MCwtMWUzXTtvPVthWzFdLC41Km4sYVswXV07YT1lLmdldCgiVzIiKTtpZihBcnJheS5pc0FycmF5KGEpKWZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0O2UrKyl7bGV0IHQ9ci5mZXRjaElmUmVmKGFbZSsrXSk7aWYoIU51bWJlci5pc0ludGVnZXIodCkpYnJlYWs7Y29uc3QgaT1yLmZldGNoSWZSZWYoYVtlXSk7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGU9MCxhPWkubGVuZ3RoO2U8YTtlKyspe2NvbnN0IGE9W3IuZmV0Y2hJZlJlZihpW2UrK10pLHIuZmV0Y2hJZlJlZihpW2UrK10pLHIuZmV0Y2hJZlJlZihpW2VdKV07aXNOdW1iZXJBcnJheShhLG51bGwpJiYoc1t0XT1hKTt0Kyt9ZWxzZXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSlicmVhazt7Y29uc3Qgbj1bci5mZXRjaElmUmVmKGFbKytlXSksci5mZXRjaElmUmVmKGFbKytlXSksci5mZXRjaElmUmVmKGFbKytlXSldO2lmKCFpc051bWJlckFycmF5KG4sbnVsbCkpY29udGludWU7Zm9yKGxldCBlPXQ7ZTw9aTtlKyspc1tlXT1ufX19fX1lbHNle2NvbnN0IHM9ZS5nZXQoIldpZHRocyIpO2lmKEFycmF5LmlzQXJyYXkocykpe2xldCBlPWEuZmlyc3RDaGFyO2Zvcihjb25zdCB0IG9mIHMpe2NvbnN0IGE9ci5mZXRjaElmUmVmKHQpOyJudW1iZXIiPT10eXBlb2YgYSYmKGlbZV09YSk7ZSsrfWNvbnN0IG89dC5nZXQoIk1pc3NpbmdXaWR0aCIpO249Im51bWJlciI9PXR5cGVvZiBvP286MH1lbHNle2NvbnN0IHQ9ZS5nZXQoIkJhc2VGb250Iik7aWYodCBpbnN0YW5jZW9mIE5hbWUpe2NvbnN0IGU9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3ModC5uYW1lKTtpPXRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgoZS53aWR0aHMsYSk7bj1lLmRlZmF1bHRXaWR0aH19fWxldCBjPSEwLGw9bjtmb3IoY29uc3QgZSBpbiBpKXtjb25zdCB0PWlbZV07aWYodClpZihsKXtpZihsIT09dCl7Yz0hMTticmVha319ZWxzZSBsPXR9Yz9hLmZsYWdzfD14cjphLmZsYWdzJj1+eHI7YS5kZWZhdWx0V2lkdGg9bjthLndpZHRocz1pO2EuZGVmYXVsdFZNZXRyaWNzPW87YS52bWV0cmljcz1zfWlzU2VyaWZGb250KGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLSIsMSlbMF07cmV0dXJuIHQgaW4ganIoKXx8L3NlcmlmL2dpLnRlc3QodCl9Z2V0QmFzZUZvbnRNZXRyaWNzKGUpe2xldCB0PTAsYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9ITE7bGV0IGk9THIoKVtlXXx8ZTtjb25zdCBuPUdyKCk7aSBpbiBufHwoaT10aGlzLmlzU2VyaWZGb250KGUpPyJUaW1lcy1Sb21hbiI6IkhlbHZldGljYSIpO2NvbnN0IHM9bltpXTtpZigibnVtYmVyIj09dHlwZW9mIHMpe3Q9cztyPSEwfWVsc2UgYT1zKCk7cmV0dXJue2RlZmF1bHRXaWR0aDp0LG1vbm9zcGFjZTpyLHdpZHRoczphfX1idWlsZENoYXJDb2RlVG9XaWR0aChlLHQpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXQuZGlmZmVyZW5jZXMsaT10LmRlZmF1bHRFbmNvZGluZztmb3IobGV0IHQ9MDt0PDI1Njt0KyspdCBpbiByJiZlW3JbdF1dP2FbdF09ZVtyW3RdXTp0IGluIGkmJmVbaVt0XV0mJihhW3RdPWVbaVt0XV0pO3JldHVybiBhfXByZUV2YWx1YXRlRm9udChlKXtjb25zdCB0PWU7bGV0IGE9ZS5nZXQoIlN1YnR5cGUiKTtpZighKGEgaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7bGV0IHIsaT0hMTtpZigiVHlwZTAiPT09YS5uYW1lKXtjb25zdCB0PWUuZ2V0KCJEZXNjZW5kYW50Rm9udHMiKTtpZighdCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkRlc2NlbmRhbnQgZm9udHMgYXJlIG5vdCBzcGVjaWZpZWQiKTtpZighKChlPUFycmF5LmlzQXJyYXkodCk/dGhpcy54cmVmLmZldGNoSWZSZWYodFswXSk6dClpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiRGVzY2VuZGFudCBmb250IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7YT1lLmdldCgiU3VidHlwZSIpO2lmKCEoYSBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTtpPSEwfWxldCBuPWUuZ2V0KCJGaXJzdENoYXIiKTtOdW1iZXIuaXNJbnRlZ2VyKG4pfHwobj0wKTtsZXQgcz1lLmdldCgiTGFzdENoYXIiKTtOdW1iZXIuaXNJbnRlZ2VyKHMpfHwocz1pPzY1NTM1OjI1NSk7Y29uc3Qgbz1lLmdldCgiRm9udERlc2NyaXB0b3IiKSxjPWUuZ2V0KCJUb1VuaWNvZGUiKXx8dC5nZXQoIlRvVW5pY29kZSIpO2lmKG8pe3I9bmV3IE11cm11ckhhc2gzXzY0O2NvbnN0IGE9dC5nZXRSYXcoIkVuY29kaW5nIik7aWYoYSBpbnN0YW5jZW9mIE5hbWUpci51cGRhdGUoYS5uYW1lKTtlbHNlIGlmKGEgaW5zdGFuY2VvZiBSZWYpci51cGRhdGUoYS50b1N0cmluZygpKTtlbHNlIGlmKGEgaW5zdGFuY2VvZiBEaWN0KWZvcihjb25zdCBlIG9mIGEuZ2V0UmF3VmFsdWVzKCkpaWYoZSBpbnN0YW5jZW9mIE5hbWUpci51cGRhdGUoZS5uYW1lKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBSZWYpci51cGRhdGUoZS50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHQ9ZS5sZW5ndGgsYT1uZXcgQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyl7Y29uc3QgdD1lW3JdO3QgaW5zdGFuY2VvZiBOYW1lP2Fbcl09dC5uYW1lOigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBSZWYpJiYoYVtyXT10LnRvU3RyaW5nKCkpfXIudXBkYXRlKGEuam9pbigpKX1yLnVwZGF0ZShgJHtufS0ke3N9YCk7aWYoYyBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pe2NvbnN0IGU9Yy5zdHJlYW18fGMsdD1lLmJ1ZmZlcj9uZXcgVWludDhBcnJheShlLmJ1ZmZlci5idWZmZXIsMCxlLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoZS5ieXRlcy5idWZmZXIsZS5zdGFydCxlLmVuZC1lLnN0YXJ0KTtyLnVwZGF0ZSh0KX1lbHNlIGMgaW5zdGFuY2VvZiBOYW1lJiZyLnVwZGF0ZShjLm5hbWUpO2NvbnN0IG89ZS5nZXQoIldpZHRocyIpfHx0LmdldCgiV2lkdGhzIik7aWYoQXJyYXkuaXNBcnJheShvKSl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiBvKSgibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBSZWYpJiZlLnB1c2godC50b1N0cmluZygpKTtyLnVwZGF0ZShlLmpvaW4oKSl9aWYoaSl7ci51cGRhdGUoImNvbXBvc2l0ZUZvbnQiKTtjb25zdCBhPWUuZ2V0KCJXIil8fHQuZ2V0KCJXIik7aWYoQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiBhKWlmKCJudW1iZXIiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIFJlZillLnB1c2godC50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGE9W107Zm9yKGNvbnN0IGUgb2YgdCkoIm51bWJlciI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgUmVmKSYmYS5wdXNoKGUudG9TdHJpbmcoKSk7ZS5wdXNoKGBbJHthLmpvaW4oKX1dYCl9ci51cGRhdGUoZS5qb2luKCkpfWNvbnN0IGk9ZS5nZXRSYXcoIkNJRFRvR0lETWFwIil8fHQuZ2V0UmF3KCJDSURUb0dJRE1hcCIpO2kgaW5zdGFuY2VvZiBOYW1lP3IudXBkYXRlKGkubmFtZSk6aSBpbnN0YW5jZW9mIFJlZj9yLnVwZGF0ZShpLnRvU3RyaW5nKCkpOmkgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiZyLnVwZGF0ZShpLnBlZWtCeXRlcygpKX19cmV0dXJue2Rlc2NyaXB0b3I6byxkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6aSx0eXBlOmEubmFtZSxmaXJzdENoYXI6bixsYXN0Q2hhcjpzLHRvVW5pY29kZTpjLGhhc2g6cj9yLmhleGRpZ2VzdCgpOiIifX1hc3luYyB0cmFuc2xhdGVGb250KHtkZXNjcmlwdG9yOmUsZGljdDphLGJhc2VEaWN0OnIsY29tcG9zaXRlOmksdHlwZTpuLGZpcnN0Q2hhcjpzLGxhc3RDaGFyOm8sdG9Vbmljb2RlOmMsY3NzRm9udEluZm86bH0pe2NvbnN0IGg9IlR5cGUzIj09PW47aWYoIWUpe2lmKCFoKXtsZXQgZT1hLmdldCgiQmFzZUZvbnQiKTtpZighKGUgaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhc2UgZm9udCBpcyBub3Qgc3BlY2lmaWVkIik7ZT1lLm5hbWUucmVwbGFjZUFsbCgvWyxfXS9nLCItIik7Y29uc3QgdD10aGlzLmdldEJhc2VGb250TWV0cmljcyhlKSxpPWUuc3BsaXQoIi0iLDEpWzBdLGw9KHRoaXMuaXNTZXJpZkZvbnQoaSk/U3I6MCl8KHQubW9ub3NwYWNlP3hyOjApfChYcigpW2ldP0FyOmtyKSx1PXt0eXBlOm4sbmFtZTplLGxvYWRlZE5hbWU6ci5sb2FkZWROYW1lLHN5c3RlbUZvbnRJbmZvOm51bGwsd2lkdGhzOnQud2lkdGhzLGRlZmF1bHRXaWR0aDp0LmRlZmF1bHRXaWR0aCxpc1NpbXVsYXRlZEZsYWdzOiEwLGZsYWdzOmwsZmlyc3RDaGFyOnMsbGFzdENoYXI6byx0b1VuaWNvZGU6Yyx4SGVpZ2h0OjAsY2FwSGVpZ2h0OjAsaXRhbGljQW5nbGU6MCxpc1R5cGUzRm9udDpofSxkPWEuZ2V0KCJXaWR0aHMiKSxmPWdldFN0YW5kYXJkRm9udE5hbWUoZSk7bGV0IGc9bnVsbDtpZihmKXtnPWF3YWl0IHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGYpO3UuaXNJbnRlcm5hbEZvbnQ9ISFnfSF1LmlzSW50ZXJuYWxGb250JiZ0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMmJih1LnN5c3RlbUZvbnRJbmZvPWdldEZvbnRTdWJzdGl0dXRpb24odGhpcy5zeXN0ZW1Gb250Q2FjaGUsdGhpcy5pZEZhY3RvcnksdGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwsZSxmLG4pKTtjb25zdCBwPWF3YWl0IHRoaXMuZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGEsdSk7aWYoQXJyYXkuaXNBcnJheShkKSl7Y29uc3QgZT1bXTtsZXQgdD1zO2Zvcihjb25zdCBhIG9mIGQpe2NvbnN0IHI9dGhpcy54cmVmLmZldGNoSWZSZWYoYSk7Im51bWJlciI9PXR5cGVvZiByJiYoZVt0XT1yKTt0Kyt9cC53aWR0aHM9ZX1lbHNlIHAud2lkdGhzPXRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgodC53aWR0aHMscCk7cmV0dXJuIG5ldyBGb250KGUsZyxwLHRoaXMub3B0aW9ucyl9ZT1EaWN0LmVtcHR5fWxldCB1PWUuZ2V0KCJGb250TmFtZSIpLGQ9YS5nZXQoIkJhc2VGb250Iik7InN0cmluZyI9PXR5cGVvZiB1JiYodT1OYW1lLmdldCh1KSk7InN0cmluZyI9PXR5cGVvZiBkJiYoZD1OYW1lLmdldChkKSk7Y29uc3QgZj11Py5uYW1lLGc9ZD8ubmFtZTtpZihoKWZ8fCh1PU5hbWUuZ2V0KG4pKTtlbHNlIGlmKGYhPT1nKXtpbmZvKGBUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyAiJHtmfSIgYnV0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgRm9udCdzIEJhc2VGb250ICIke2d9Ii5gKTtmJiZnJiYoZy5zdGFydHNXaXRoKGYpfHwhaXNLbm93bkZvbnROYW1lKGYpJiZpc0tub3duRm9udE5hbWUoZykpJiYodT1udWxsKTt1fHw9ZH1pZighKHUgaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7bGV0IHAsbSxiLHksdzt0cnl7cD1lLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKTtpZihwKXtpZighKHAgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkZvbnRGaWxlIHNob3VsZCBiZSBhIHN0cmVhbSIpO2lmKHAuaXNFbXB0eSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkZvbnRGaWxlIGlzIGVtcHR5Iil9fWNhdGNoKGUpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgdHJhbnNsYXRlRm9udCAtIGZldGNoaW5nICIke3UubmFtZX0iIGZvbnQgZmlsZTogIiR7ZX0iLmApO3A9bnVsbH1sZXQgeD0hMSxTPW51bGwsaz1udWxsO2lmKHApe2lmKHAuZGljdCl7Y29uc3QgZT1wLmRpY3QuZ2V0KCJTdWJ0eXBlIik7ZSBpbnN0YW5jZW9mIE5hbWUmJihtPWUubmFtZSk7Yj1wLmRpY3QuZ2V0KCJMZW5ndGgxIik7eT1wLmRpY3QuZ2V0KCJMZW5ndGgyIik7dz1wLmRpY3QuZ2V0KCJMZW5ndGgzIil9fWVsc2UgaWYobCl7Y29uc3QgZT1nZXRYZmFGb250TmFtZSh1Lm5hbWUpO2lmKGUpe2wuZm9udEZhbWlseT1gJHtsLmZvbnRGYW1pbHl9LVBkZkpTLVhGQWA7bC5tZXRyaWNzPWUubWV0cmljc3x8bnVsbDtTPWUuZmFjdG9yc3x8bnVsbDtwPWF3YWl0IHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUubmFtZSk7eD0hIXA7cj1hPWdldFhmYUZvbnREaWN0KHUubmFtZSk7aT0hMH19ZWxzZSBpZighaCl7Y29uc3QgZT1nZXRTdGFuZGFyZEZvbnROYW1lKHUubmFtZSk7aWYoZSl7cD1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShlKTt4PSEhcH0heCYmdGhpcy5vcHRpb25zLnVzZVN5c3RlbUZvbnRzJiYoaz1nZXRGb250U3Vic3RpdHV0aW9uKHRoaXMuc3lzdGVtRm9udENhY2hlLHRoaXMuaWRGYWN0b3J5LHRoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsLHUubmFtZSxlLG4pKX1jb25zdCBDPWxvb2t1cE1hdHJpeChhLmdldEFycmF5KCJGb250TWF0cml4IiksdCksdj1sb29rdXBOb3JtYWxSZWN0KGUuZ2V0QXJyYXkoIkZvbnRCQm94Iil8fGEuZ2V0QXJyYXkoIkZvbnRCQm94IiksaD9bMCwwLDAsMF06dm9pZCAwKTtsZXQgRj1lLmdldCgiQXNjZW50Iik7Im51bWJlciIhPXR5cGVvZiBGJiYoRj12b2lkIDApO2xldCBUPWUuZ2V0KCJEZXNjZW50Iik7Im51bWJlciIhPXR5cGVvZiBUJiYoVD12b2lkIDApO2xldCBPPWUuZ2V0KCJYSGVpZ2h0Iik7Im51bWJlciIhPXR5cGVvZiBPJiYoTz0wKTtsZXQgTT1lLmdldCgiQ2FwSGVpZ2h0Iik7Im51bWJlciIhPXR5cGVvZiBNJiYoTT0wKTtsZXQgRD1lLmdldCgiRmxhZ3MiKTtOdW1iZXIuaXNJbnRlZ2VyKEQpfHwoRD0wKTtsZXQgUj1lLmdldCgiSXRhbGljQW5nbGUiKTsibnVtYmVyIiE9dHlwZW9mIFImJihSPTApO2NvbnN0IE49e3R5cGU6bixuYW1lOnUubmFtZSxzdWJ0eXBlOm0sZmlsZTpwLGxlbmd0aDE6YixsZW5ndGgyOnksbGVuZ3RoMzp3LGlzSW50ZXJuYWxGb250OngsbG9hZGVkTmFtZTpyLmxvYWRlZE5hbWUsY29tcG9zaXRlOmksZml4ZWRQaXRjaDohMSxmb250TWF0cml4OkMsZmlyc3RDaGFyOnMsbGFzdENoYXI6byx0b1VuaWNvZGU6YyxiYm94OnYsYXNjZW50OkYsZGVzY2VudDpULHhIZWlnaHQ6TyxjYXBIZWlnaHQ6TSxmbGFnczpELGl0YWxpY0FuZ2xlOlIsaXNUeXBlM0ZvbnQ6aCxjc3NGb250SW5mbzpsLHNjYWxlRmFjdG9yczpTLHN5c3RlbUZvbnRJbmZvOmt9O2lmKGkpe2NvbnN0IGU9ci5nZXQoIkVuY29kaW5nIik7ZSBpbnN0YW5jZW9mIE5hbWUmJihOLmNpZEVuY29kaW5nPWUubmFtZSk7Y29uc3QgdD1hd2FpdCBDTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7Ti5jTWFwPXQ7Ti52ZXJ0aWNhbD1OLmNNYXAudmVydGljYWx9Y29uc3QgRT1hd2FpdCB0aGlzLmV4dHJhY3REYXRhU3RydWN0dXJlcyhhLE4pO3RoaXMuZXh0cmFjdFdpZHRocyhhLGUsRSk7cmV0dXJuIG5ldyBGb250KHUubmFtZSxwLEUsdGhpcy5vcHRpb25zKX1zdGF0aWMgYnVpbGRGb250UGF0aHMoZSx0LGEscil7ZnVuY3Rpb24gYnVpbGRQYXRoKHQpe2NvbnN0IGk9YCR7ZS5sb2FkZWROYW1lfV9wYXRoXyR7dH1gO3RyeXtpZihlLnJlbmRlcmVyLmhhc0J1aWx0UGF0aCh0KSlyZXR1cm47YS5zZW5kKCJjb21tb25vYmoiLFtpLCJGb250UGF0aCIsZS5yZW5kZXJlci5nZXRQYXRoSnModCldKX1jYXRjaChlKXtpZihyLmlnbm9yZUVycm9ycyl7d2FybihgYnVpbGRGb250UGF0aHMgLSBpZ25vcmluZyAke2l9IGdseXBoOiAiJHtlfSIuYCk7cmV0dXJufXRocm93IGV9fWZvcihjb25zdCBlIG9mIHQpe2J1aWxkUGF0aChlLmZvbnRDaGFyKTtjb25zdCB0PWUuYWNjZW50O3Q/LmZvbnRDaGFyJiZidWlsZFBhdGgodC5mb250Q2hhcil9fXN0YXRpYyBnZXQgZmFsbGJhY2tGb250RGljdCgpe2NvbnN0IGU9bmV3IERpY3Q7ZS5zZXQoIkJhc2VGb250IixOYW1lLmdldCgiSGVsdmV0aWNhIikpO2Uuc2V0KCJUeXBlIixOYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJFbmNvZGluZyIsTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKTtyZXR1cm4gc2hhZG93KHRoaXMsImZhbGxiYWNrRm9udERpY3QiLGUpfX1jbGFzcyBUcmFuc2xhdGVkRm9udHsjdWU9ITE7I2RlPW51bGw7Y29uc3RydWN0b3Ioe2xvYWRlZE5hbWU6ZSxmb250OnQsZGljdDphfSl7dGhpcy5sb2FkZWROYW1lPWU7dGhpcy5mb250PXQ7dGhpcy5kaWN0PWE7dGhpcy50eXBlM0RlcGVuZGVuY2llcz10LmlzVHlwZTNGb250P25ldyBTZXQ6bnVsbH1zZW5kKGUpe2lmKHRoaXMuI3VlKXJldHVybjt0aGlzLiN1ZT0hMDtjb25zdCB0PXRoaXMuZm9udC5leHBvcnREYXRhKCksYT1bXTtpZih0LmRhdGEpe3QuZGF0YS5jaGFyUHJvY09wZXJhdG9yTGlzdCYmKHQuY2hhclByb2NPcGVyYXRvckxpc3Q9dC5kYXRhLmNoYXJQcm9jT3BlcmF0b3JMaXN0KTt0LmRhdGE9Rm9udEluZm8ud3JpdGUodC5kYXRhKTthLnB1c2godC5kYXRhKX1lLnNlbmQoImNvbW1vbm9iaiIsW3RoaXMubG9hZGVkTmFtZSwiRm9udCIsdF0sYSl9ZmFsbGJhY2soZSx0KXtpZih0aGlzLmZvbnQuZGF0YSl7dGhpcy5mb250LmRpc2FibGVGb250RmFjZT0hMDtQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCx0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcyxlLHQpfX1sb2FkVHlwZTNEYXRhKGUsdCxhKXtpZih0aGlzLiNkZSlyZXR1cm4gdGhpcy4jZGU7Y29uc3R7Zm9udDpyLHR5cGUzRGVwZW5kZW5jaWVzOml9PXRoaXM7YXNzZXJ0KHIuaXNUeXBlM0ZvbnQsIk11c3QgYmUgYSBUeXBlMyBmb250LiIpO2NvbnN0IG49ZS5jbG9uZSh7aWdub3JlRXJyb3JzOiExfSkscz1uZXcgUmVmU2V0KGUudHlwZTNGb250UmVmcyk7dGhpcy5kaWN0Lm9iaklkJiYhcy5oYXModGhpcy5kaWN0Lm9iaklkKSYmcy5wdXQodGhpcy5kaWN0Lm9iaklkKTtuLnR5cGUzRm9udFJlZnM9cztsZXQgbz1Qcm9taXNlLnJlc29sdmUoKTtjb25zdCBjPXRoaXMuZGljdC5nZXQoIkNoYXJQcm9jcyIpLGw9dGhpcy5kaWN0LmdldCgiUmVzb3VyY2VzIil8fHQsaD1PYmplY3QuY3JlYXRlKG51bGwpLFt1LGQsZixnXT1yLmJib3gscD1mLXUsbT1nLWQsYj1NYXRoLmh5cG90KHAsbSk7Zm9yKGNvbnN0IGUgb2YgYy5nZXRLZXlzKCkpbz1vLnRoZW4oKCk9Pntjb25zdCB0PWMuZ2V0KGUpLHI9bmV3IE9wZXJhdG9yTGlzdDtyZXR1cm4gbi5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp0LHRhc2s6YSxyZXNvdXJjZXM6bCxvcGVyYXRvckxpc3Q6cn0pLnRoZW4oKCk9Pntzd2l0Y2goci5mbkFycmF5WzBdKXtjYXNlIHJ0OnRoaXMuI2ZlKHIsYik7YnJlYWs7Y2FzZSBhdDpifHx0aGlzLiNnZShyKX1oW2VdPXIuZ2V0SVIoKTtmb3IoY29uc3QgZSBvZiByLmRlcGVuZGVuY2llcylpLmFkZChlKX0pLmNhdGNoKGZ1bmN0aW9uKHQpe3dhcm4oYFR5cGUzIGZvbnQgcmVzb3VyY2UgIiR7ZX0iIGlzIG5vdCBhdmFpbGFibGUuYCk7Y29uc3QgYT1uZXcgT3BlcmF0b3JMaXN0O2hbZV09YS5nZXRJUigpfSl9KTt0aGlzLiNkZT1vLnRoZW4oKCk9PntyLmNoYXJQcm9jT3BlcmF0b3JMaXN0PWg7aWYodGhpcy5fYmJveCl7ci5pc0NoYXJCQm94PSEwO3IuYmJveD10aGlzLl9iYm94fX0pO3JldHVybiB0aGlzLiNkZX0jZmUoZSx0PU5hTil7Y29uc3QgYT1VdGlsLm5vcm1hbGl6ZVJlY3QoZS5hcmdzQXJyYXlbMF0uc2xpY2UoMikpLHI9YVsyXS1hWzBdLGk9YVszXS1hWzFdLG49TWF0aC5oeXBvdChyLGkpO2lmKDA9PT1yfHwwPT09aSl7ZS5mbkFycmF5LnNwbGljZSgwLDEpO2UuYXJnc0FycmF5LnNwbGljZSgwLDEpfWVsc2UgaWYoMD09PXR8fE1hdGgucm91bmQobi90KT49MTApe3RoaXMuX2Jib3g/Pz1bMS8wLDEvMCwtMS8wLC0xLzBdO1V0aWwucmVjdEJvdW5kaW5nQm94KC4uLmEsdGhpcy5fYmJveCl9bGV0IHM9MCxvPWUubGVuZ3RoO2Zvcig7czxvOyl7c3dpdGNoKGUuZm5BcnJheVtzXSl7Y2FzZSBydDpicmVhaztjYXNlIGl0OmNhc2UgbnQ6Y2FzZSBzdDpjYXNlIG90OmNhc2UgY3Q6Y2FzZSBsdDpjYXNlIGh0OmNhc2UgdXQ6Y2FzZSBkdDpjYXNlIGZ0OmNhc2UgZ3Q6Y2FzZSBwdDpjYXNlIG10OmNhc2UgcGU6ZS5mbkFycmF5LnNwbGljZShzLDEpO2UuYXJnc0FycmF5LnNwbGljZShzLDEpO28tLTtjb250aW51ZTtjYXNlIGJlOmNvbnN0W3RdPWUuYXJnc0FycmF5W3NdO2xldCBhPTAscj10Lmxlbmd0aDtmb3IoO2E8cjspe2NvbnN0W2VdPXRbYV07c3dpdGNoKGUpe2Nhc2UiVFIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIkJHIjpjYXNlIkJHMiI6Y2FzZSJVQ1IiOmNhc2UiVUNSMiI6dC5zcGxpY2UoYSwxKTtyLS07Y29udGludWV9YSsrfX1zKyt9fSNnZShlKXtsZXQgdD0xO2NvbnN0IGE9ZS5sZW5ndGg7Zm9yKDt0PGE7KXtpZihlLmZuQXJyYXlbdF09PT1xdCl7Y29uc3QgYT1lLmFyZ3NBcnJheVt0XVsyXTt0aGlzLl9iYm94Pz89WzEvMCwxLzAsLTEvMCwtMS8wXTtVdGlsLnJlY3RCb3VuZGluZ0JveCguLi5hLHRoaXMuX2Jib3gpfXQrK319fWNsYXNzIFN0YXRlTWFuYWdlcntjb25zdHJ1Y3RvcihlPW5ldyBFdmFsU3RhdGUpe3RoaXMuc3RhdGU9ZTt0aGlzLnN0YXRlU3RhY2s9W119c2F2ZSgpe2NvbnN0IGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKTt0aGlzLnN0YXRlPWUuY2xvbmUoKX1yZXN0b3JlKCl7Y29uc3QgZT10aGlzLnN0YXRlU3RhY2sucG9wKCk7ZSYmKHRoaXMuc3RhdGU9ZSl9dHJhbnNmb3JtKGUpe3RoaXMuc3RhdGUuY3RtPVV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLGUpfX1jbGFzcyBUZXh0U3RhdGV7Y29uc3RydWN0b3IoKXt0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KGZhKTt0aGlzLmZvbnROYW1lPW51bGw7dGhpcy5mb250U2l6ZT0wO3RoaXMubG9hZGVkTmFtZT1udWxsO3RoaXMuZm9udD1udWxsO3RoaXMuZm9udE1hdHJpeD10O3RoaXMudGV4dE1hdHJpeD1mYS5zbGljZSgpO3RoaXMudGV4dExpbmVNYXRyaXg9ZmEuc2xpY2UoKTt0aGlzLmNoYXJTcGFjaW5nPTA7dGhpcy53b3JkU3BhY2luZz0wO3RoaXMubGVhZGluZz0wO3RoaXMudGV4dEhTY2FsZT0xO3RoaXMudGV4dFJpc2U9MH1zZXRUZXh0TWF0cml4KGUsdCxhLHIsaSxuKXtjb25zdCBzPXRoaXMudGV4dE1hdHJpeDtzWzBdPWU7c1sxXT10O3NbMl09YTtzWzNdPXI7c1s0XT1pO3NbNV09bn1zZXRUZXh0TGluZU1hdHJpeChlLHQsYSxyLGksbil7Y29uc3Qgcz10aGlzLnRleHRMaW5lTWF0cml4O3NbMF09ZTtzWzFdPXQ7c1syXT1hO3NbM109cjtzWzRdPWk7c1s1XT1ufXRyYW5zbGF0ZVRleHRNYXRyaXgoZSx0KXtjb25zdCBhPXRoaXMudGV4dE1hdHJpeDthWzRdPWFbMF0qZSthWzJdKnQrYVs0XTthWzVdPWFbMV0qZSthWzNdKnQrYVs1XX10cmFuc2xhdGVUZXh0TGluZU1hdHJpeChlLHQpe2NvbnN0IGE9dGhpcy50ZXh0TGluZU1hdHJpeDthWzRdPWFbMF0qZSthWzJdKnQrYVs0XTthWzVdPWFbMV0qZSthWzNdKnQrYVs1XX1jYXJyaWFnZVJldHVybigpe3RoaXMudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoMCwtdGhpcy5sZWFkaW5nKTt0aGlzLnRleHRNYXRyaXg9dGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpfWNsb25lKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKHRoaXMpO2UudGV4dE1hdHJpeD10aGlzLnRleHRNYXRyaXguc2xpY2UoKTtlLnRleHRMaW5lTWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKTtlLmZvbnRNYXRyaXg9dGhpcy5mb250TWF0cml4LnNsaWNlKCk7cmV0dXJuIGV9fWNsYXNzIEV2YWxTdGF0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoZmEpO3RoaXMuZm9udD1udWxsO3RoaXMudGV4dFJlbmRlcmluZ01vZGU9Qzt0aGlzLl9maWxsQ29sb3JTcGFjZT10aGlzLl9zdHJva2VDb2xvclNwYWNlPUNvbG9yU3BhY2VVdGlscy5ncmF5O3RoaXMucGF0dGVybkZpbGxDb2xvclNwYWNlPW51bGw7dGhpcy5wYXR0ZXJuU3Ryb2tlQ29sb3JTcGFjZT1udWxsO3RoaXMuY3VycmVudFBvaW50WD10aGlzLmN1cnJlbnRQb2ludFk9MDt0aGlzLnBhdGhNaW5NYXg9bmV3IEZsb2F0MzJBcnJheShbMS8wLDEvMCwtMS8wLC0xLzBdKTt0aGlzLnBhdGhCdWZmZXI9W119Z2V0IGZpbGxDb2xvclNwYWNlKCl7cmV0dXJuIHRoaXMuX2ZpbGxDb2xvclNwYWNlfXNldCBmaWxsQ29sb3JTcGFjZShlKXt0aGlzLl9maWxsQ29sb3JTcGFjZT10aGlzLnBhdHRlcm5GaWxsQ29sb3JTcGFjZT1lfWdldCBzdHJva2VDb2xvclNwYWNlKCl7cmV0dXJuIHRoaXMuX3N0cm9rZUNvbG9yU3BhY2V9c2V0IHN0cm9rZUNvbG9yU3BhY2UoZSl7dGhpcy5fc3Ryb2tlQ29sb3JTcGFjZT10aGlzLnBhdHRlcm5TdHJva2VDb2xvclNwYWNlPWV9Y2xvbmUoe25ld1BhdGg6ZT0hMX09e30pe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZSh0aGlzKTtpZihlKXt0LnBhdGhCdWZmZXI9W107dC5wYXRoTWluTWF4PW5ldyBGbG9hdDMyQXJyYXkoWzEvMCwxLzAsLTEvMCwtMS8wXSl9cmV0dXJuIHR9fWNsYXNzIEV2YWx1YXRvclByZXByb2Nlc3NvcntzdGF0aWMgZ2V0IG9wTWFwKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJvcE1hcCIsT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHt3OntpZDpoZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxKOntpZDp1ZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxqOntpZDpkZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxNOntpZDpmZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxkOntpZDpnZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxyaTp7aWQ6cGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0saTp7aWQ6bWUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZ3M6e2lkOmJlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LHE6e2lkOnllLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LFE6e2lkOndlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGNtOntpZDp4ZSxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxtOntpZDpTZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxsOntpZDpBZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxjOntpZDprZSxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSx2OntpZDpDZSxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSx5OntpZDp2ZSxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxoOntpZDpGZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxyZTp7aWQ6SWUsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sUzp7aWQ6VGUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sczp7aWQ6T2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZjp7aWQ6TWUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sRjp7aWQ6TWUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sImYqIjp7aWQ6RGUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sQjp7aWQ6QmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sIkIqIjp7aWQ6UmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sYjp7aWQ6TmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sImIqIjp7aWQ6RWUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sbjp7aWQ6UGUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sVzp7aWQ6TGUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sIlcqIjp7aWQ6X2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sQlQ6e2lkOlVlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEVUOntpZDpqZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxUYzp7aWQ6WGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVHc6e2lkOnFlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFR6OntpZDpIZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUTDp7aWQ6V2UsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVGY6e2lkOkdlLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LFRyOntpZDp6ZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUczp7aWQ6JGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVGQ6e2lkOlZlLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LFREOntpZDpLZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxUbTp7aWQ6SmUsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sIlQqIjp7aWQ6WWUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sVGo6e2lkOlplLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFRKOntpZDpRZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSwiJyI6e2lkOmV0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LCciJzp7aWQ6dHQsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX0sZDA6e2lkOmF0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGQxOntpZDpydCxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxDUzp7aWQ6aXQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sY3M6e2lkOm50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFNDOntpZDpzdCxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfSxTQ046e2lkOm90LG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxzYzp7aWQ6Y3QsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sc2NuOntpZDpsdCxudW1BcmdzOjMzLHZhcmlhYmxlQXJnczohMH0sRzp7aWQ6aHQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZzp7aWQ6dXQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sUkc6e2lkOmR0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LHJnOntpZDpmdCxudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxLOntpZDpndCxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxrOntpZDpwdCxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxzaDp7aWQ6bXQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sQkk6e2lkOmJ0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LElEOntpZDp5dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxFSTp7aWQ6d3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sRG86e2lkOnh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LE1QOntpZDpTdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxEUDp7aWQ6QXQsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sQk1DOntpZDprdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxCREM6e2lkOkN0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LEVNQzp7aWQ6dnQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sQlg6e2lkOkZ0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEVYOntpZDpJdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxCTTpudWxsLEJEOm51bGwsdHJ1ZTpudWxsLGZhOm51bGwsZmFsOm51bGwsZmFsczpudWxsLGZhbHNlOm51bGwsbnU6bnVsbCxudWw6bnVsbCxudWxsOm51bGx9KSl9c3RhdGljIE1BWF9JTlZBTElEX1BBVEhfT1BTPTEwO2NvbnN0cnVjdG9yKGUsdCxhPW5ldyBTdGF0ZU1hbmFnZXIpe3RoaXMucGFyc2VyPW5ldyBQYXJzZXIoe2xleGVyOm5ldyBMZXhlcihlLEV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcCkseHJlZjp0fSk7dGhpcy5zdGF0ZU1hbmFnZXI9YTt0aGlzLm5vblByb2Nlc3NlZEFyZ3M9W107dGhpcy5faXNQYXRoT3A9ITE7dGhpcy5fbnVtSW52YWxpZFBhdGhPUFM9MH1nZXQgc2F2ZWRTdGF0ZXNEZXB0aCgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aH1yZWFkKGUpe2xldCB0PWUuYXJncztmb3IoOzspe2NvbnN0IGE9dGhpcy5wYXJzZXIuZ2V0T2JqKCk7aWYoYSBpbnN0YW5jZW9mIENtZCl7Y29uc3Qgcj1hLmNtZCxpPUV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcFtyXTtpZighaSl7d2FybihgVW5rbm93biBjb21tYW5kICIke3J9Ii5gKTtjb250aW51ZX1jb25zdCBuPWkuaWQscz1pLm51bUFyZ3M7bGV0IG89bnVsbCE9PXQ/dC5sZW5ndGg6MDt0aGlzLl9pc1BhdGhPcHx8KHRoaXMuX251bUludmFsaWRQYXRoT1BTPTApO3RoaXMuX2lzUGF0aE9wPW4+PVNlJiZuPD1QZTtpZihpLnZhcmlhYmxlQXJncylvPnMmJmluZm8oYENvbW1hbmQgJHtyfTogZXhwZWN0ZWQgWzAsICR7c31dIGFyZ3MsIGJ1dCByZWNlaXZlZCAke299IGFyZ3MuYCk7ZWxzZXtpZihvIT09cyl7Y29uc3QgZT10aGlzLm5vblByb2Nlc3NlZEFyZ3M7Zm9yKDtvPnM7KXtlLnB1c2godC5zaGlmdCgpKTtvLS19Zm9yKDtvPHMmJjAhPT1lLmxlbmd0aDspe251bGw9PT10JiYodD1bXSk7dC51bnNoaWZ0KGUucG9wKCkpO28rK319aWYobzxzKXtjb25zdCBlPWBjb21tYW5kICR7cn06IGV4cGVjdGVkICR7c30gYXJncywgYnV0IHJlY2VpdmVkICR7b30gYXJncy5gO2lmKHRoaXMuX2lzUGF0aE9wJiYrK3RoaXMuX251bUludmFsaWRQYXRoT1BTPkV2YWx1YXRvclByZXByb2Nlc3Nvci5NQVhfSU5WQUxJRF9QQVRIX09QUyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgJHtlfWApO3dhcm4oYFNraXBwaW5nICR7ZX1gKTtudWxsIT09dCYmKHQubGVuZ3RoPTApO2NvbnRpbnVlfX10aGlzLnByZXByb2Nlc3NDb21tYW5kKG4sdCk7ZS5mbj1uO2UuYXJncz10O3JldHVybiEwfWlmKGE9PT1zYSlyZXR1cm4hMTtpZihudWxsIT09YSl7bnVsbD09PXQmJih0PVtdKTt0LnB1c2goYSk7aWYodC5sZW5ndGg+MzMpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJUb28gbWFueSBhcmd1bWVudHMiKX19fXByZXByb2Nlc3NDb21tYW5kKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSB5ZTp0aGlzLnN0YXRlTWFuYWdlci5zYXZlKCk7YnJlYWs7Y2FzZSB3ZTp0aGlzLnN0YXRlTWFuYWdlci5yZXN0b3JlKCk7YnJlYWs7Y2FzZSB4ZTp0aGlzLnN0YXRlTWFuYWdlci50cmFuc2Zvcm0odCl9fX1jbGFzcyBEZWZhdWx0QXBwZWFyYW5jZUV2YWx1YXRvciBleHRlbmRzIEV2YWx1YXRvclByZXByb2Nlc3Nvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihuZXcgU3RyaW5nU3RyZWFtKGUpKX1wYXJzZSgpe2NvbnN0IGU9e2ZuOjAsYXJnczpbXX0sdD17Zm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpfTt0cnl7Zm9yKDs7KXtlLmFyZ3MubGVuZ3RoPTA7aWYoIXRoaXMucmVhZChlKSlicmVhaztpZigwIT09dGhpcy5zYXZlZFN0YXRlc0RlcHRoKWNvbnRpbnVlO2NvbnN0e2ZuOmEsYXJnczpyfT1lO3N3aXRjaCgwfGEpe2Nhc2UgR2U6Y29uc3RbZSxhXT1yO2UgaW5zdGFuY2VvZiBOYW1lJiYodC5mb250TmFtZT1lLm5hbWUpOyJudW1iZXIiPT10eXBlb2YgYSYmYT4wJiYodC5mb250U2l6ZT1hKTticmVhaztjYXNlIGZ0OkNvbG9yU3BhY2VVdGlscy5yZ2IuZ2V0UmdiSXRlbShyLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSB1dDpDb2xvclNwYWNlVXRpbHMuZ3JheS5nZXRSZ2JJdGVtKHIsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIHB0OkNvbG9yU3BhY2VVdGlscy5jbXlrLmdldFJnYkl0ZW0ociwwLHQuZm9udENvbG9yLDApfX19Y2F0Y2goZSl7d2FybihgcGFyc2VEZWZhdWx0QXBwZWFyYW5jZSAtIGlnbm9yaW5nIGVycm9yczogIiR7ZX0iLmApfXJldHVybiB0fX1mdW5jdGlvbiBwYXJzZURlZmF1bHRBcHBlYXJhbmNlKGUpe3JldHVybiBuZXcgRGVmYXVsdEFwcGVhcmFuY2VFdmFsdWF0b3IoZSkucGFyc2UoKX1jbGFzcyBBcHBlYXJhbmNlU3RyZWFtRXZhbHVhdG9yIGV4dGVuZHMgRXZhbHVhdG9yUHJlcHJvY2Vzc29ye2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKGUpO3RoaXMuc3RyZWFtPWU7dGhpcy5ldmFsdWF0b3JPcHRpb25zPXQ7dGhpcy54cmVmPWE7dGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGU9cjt0aGlzLnJlc291cmNlcz1lLmRpY3Q/LmdldCgiUmVzb3VyY2VzIil9cGFyc2UoKXtjb25zdCBlPXtmbjowLGFyZ3M6W119O2xldCB0PXtzY2FsZUZhY3RvcjoxLGZvbnRTaXplOjAsZm9udE5hbWU6IiIsZm9udENvbG9yOm5ldyBVaW50OENsYW1wZWRBcnJheSgzKSxmaWxsQ29sb3JTcGFjZTpDb2xvclNwYWNlVXRpbHMuZ3JheX0sYT0hMTtjb25zdCByPVtdO3RyeXtmb3IoOzspe2UuYXJncy5sZW5ndGg9MDtpZihhfHwhdGhpcy5yZWFkKGUpKWJyZWFrO2NvbnN0e2ZuOmksYXJnczpufT1lO3N3aXRjaCgwfGkpe2Nhc2UgeWU6ci5wdXNoKHtzY2FsZUZhY3Rvcjp0LnNjYWxlRmFjdG9yLGZvbnRTaXplOnQuZm9udFNpemUsZm9udE5hbWU6dC5mb250TmFtZSxmb250Q29sb3I6dC5mb250Q29sb3Iuc2xpY2UoKSxmaWxsQ29sb3JTcGFjZTp0LmZpbGxDb2xvclNwYWNlfSk7YnJlYWs7Y2FzZSB3ZTp0PXIucG9wKCl8fHQ7YnJlYWs7Y2FzZSBKZTp0LnNjYWxlRmFjdG9yKj1NYXRoLmh5cG90KG5bMF0sblsxXSk7YnJlYWs7Y2FzZSBHZTpjb25zdFtlLGldPW47ZSBpbnN0YW5jZW9mIE5hbWUmJih0LmZvbnROYW1lPWUubmFtZSk7Im51bWJlciI9PXR5cGVvZiBpJiZpPjAmJih0LmZvbnRTaXplPWkqdC5zY2FsZUZhY3Rvcik7YnJlYWs7Y2FzZSBudDp0LmZpbGxDb2xvclNwYWNlPUNvbG9yU3BhY2VVdGlscy5wYXJzZSh7Y3M6blswXSx4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxnbG9iYWxDb2xvclNwYWNlQ2FjaGU6dGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dGhpcy5fbG9jYWxDb2xvclNwYWNlQ2FjaGV9KTticmVhaztjYXNlIGN0OnQuZmlsbENvbG9yU3BhY2UuZ2V0UmdiSXRlbShuLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBmdDpDb2xvclNwYWNlVXRpbHMucmdiLmdldFJnYkl0ZW0obiwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgdXQ6Q29sb3JTcGFjZVV0aWxzLmdyYXkuZ2V0UmdiSXRlbShuLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBwdDpDb2xvclNwYWNlVXRpbHMuY215ay5nZXRSZ2JJdGVtKG4sMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIFplOmNhc2UgUWU6Y2FzZSBldDpjYXNlIHR0OmE9ITB9fX1jYXRjaChlKXt3YXJuKGBwYXJzZUFwcGVhcmFuY2VTdHJlYW0gLSBpZ25vcmluZyBlcnJvcnM6ICIke2V9Ii5gKX10aGlzLnN0cmVhbS5yZXNldCgpO2RlbGV0ZSB0LnNjYWxlRmFjdG9yO2RlbGV0ZSB0LmZpbGxDb2xvclNwYWNlO3JldHVybiB0fWdldCBfbG9jYWxDb2xvclNwYWNlQ2FjaGUoKXtyZXR1cm4gc2hhZG93KHRoaXMsIl9sb2NhbENvbG9yU3BhY2VDYWNoZSIsbmV3IExvY2FsQ29sb3JTcGFjZUNhY2hlKX1nZXQgX3BkZkZ1bmN0aW9uRmFjdG9yeSgpe3JldHVybiBzaGFkb3codGhpcywiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsbmV3IFBERkZ1bmN0aW9uRmFjdG9yeSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMuZXZhbHVhdG9yT3B0aW9ucy5pc0V2YWxTdXBwb3J0ZWR9KSl9fWZ1bmN0aW9uIGdldFBkZkNvbG9yKGUsdCl7aWYoZVswXT09PWVbMV0mJmVbMV09PT1lWzJdKXtyZXR1cm5gJHtudW1iZXJUb1N0cmluZyhlWzBdLzI1NSl9ICR7dD8iZyI6IkcifWB9cmV0dXJuIEFycmF5LmZyb20oZSxlPT5udW1iZXJUb1N0cmluZyhlLzI1NSkpLmpvaW4oIiAiKSsiICIrKHQ/InJnIjoiUkciKX1jbGFzcyBGYWtlVW5pY29kZUZvbnR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnhyZWY9ZTt0aGlzLndpZHRocz1udWxsO3RoaXMuZmlyc3RDaGFyPTEvMDt0aGlzLmxhc3RDaGFyPS0xLzA7dGhpcy5mb250RmFtaWx5PXQ7Y29uc3QgYT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSk7dGhpcy5jdHhNZWFzdXJlPWEuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KTtGYWtlVW5pY29kZUZvbnQuX2ZvbnROYW1lSWR8fChGYWtlVW5pY29kZUZvbnQuX2ZvbnROYW1lSWQ9MSk7dGhpcy5mb250TmFtZT1OYW1lLmdldChgSW52YWxpZFBERmpzRm9udF8ke3R9XyR7RmFrZVVuaWNvZGVGb250Ll9mb250TmFtZUlkKyt9YCl9Z2V0IGZvbnREZXNjcmlwdG9yUmVmKCl7aWYoIUZha2VVbmljb2RlRm9udC5fZm9udERlc2NyaXB0b3JSZWYpe2NvbnN0IGU9bmV3IERpY3QodGhpcy54cmVmKTtlLnNldElmTmFtZSgiVHlwZSIsIkZvbnREZXNjcmlwdG9yIik7ZS5zZXQoIkZvbnROYW1lIix0aGlzLmZvbnROYW1lKTtlLnNldCgiRm9udEZhbWlseSIsIk15cmlhZFBybyBSZWd1bGFyIik7ZS5zZXQoIkZvbnRCQm94IixbMCwwLDAsMF0pO2Uuc2V0SWZOYW1lKCJGb250U3RyZXRjaCIsIk5vcm1hbCIpO2Uuc2V0KCJGb250V2VpZ2h0Iiw0MDApO2Uuc2V0KCJJdGFsaWNBbmdsZSIsMCk7RmFrZVVuaWNvZGVGb250Ll9mb250RGVzY3JpcHRvclJlZj10aGlzLnhyZWYuZ2V0TmV3UGVyc2lzdGVudFJlZihlKX1yZXR1cm4gRmFrZVVuaWNvZGVGb250Ll9mb250RGVzY3JpcHRvclJlZn1nZXQgZGVzY2VuZGFudEZvbnRSZWYoKXtjb25zdCBlPW5ldyBEaWN0KHRoaXMueHJlZik7ZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKTtlLnNldElmTmFtZSgiVHlwZSIsIkZvbnQiKTtlLnNldElmTmFtZSgiU3VidHlwZSIsIkNJREZvbnRUeXBlMCIpO2Uuc2V0SWZOYW1lKCJDSURUb0dJRE1hcCIsIklkZW50aXR5Iik7ZS5zZXQoIkZpcnN0Q2hhciIsdGhpcy5maXJzdENoYXIpO2Uuc2V0KCJMYXN0Q2hhciIsdGhpcy5sYXN0Q2hhcik7ZS5zZXQoIkZvbnREZXNjcmlwdG9yIix0aGlzLmZvbnREZXNjcmlwdG9yUmVmKTtlLnNldCgiRFciLDFlMyk7Y29uc3QgdD1bXSxhPVsuLi50aGlzLndpZHRocy5lbnRyaWVzKCldLnNvcnQoKTtsZXQgcj1udWxsLGk9bnVsbDtmb3IoY29uc3RbZSxuXW9mIGEpaWYocilpZihlPT09citpLmxlbmd0aClpLnB1c2gobik7ZWxzZXt0LnB1c2gocixpKTtyPWU7aT1bbl19ZWxzZXtyPWU7aT1bbl19ciYmdC5wdXNoKHIsaSk7ZS5zZXQoIlciLHQpO2NvbnN0IG49bmV3IERpY3QodGhpcy54cmVmKTtuLnNldCgiT3JkZXJpbmciLCJJZGVudGl0eSIpO24uc2V0KCJSZWdpc3RyeSIsIkFkb2JlIik7bi5zZXQoIlN1cHBsZW1lbnQiLDApO2Uuc2V0KCJDSURTeXN0ZW1JbmZvIixuKTtyZXR1cm4gdGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoZSl9Z2V0IGJhc2VGb250UmVmKCl7Y29uc3QgZT1uZXcgRGljdCh0aGlzLnhyZWYpO2Uuc2V0KCJCYXNlRm9udCIsdGhpcy5mb250TmFtZSk7ZS5zZXRJZk5hbWUoIlR5cGUiLCJGb250Iik7ZS5zZXRJZk5hbWUoIlN1YnR5cGUiLCJUeXBlMCIpO2Uuc2V0SWZOYW1lKCJFbmNvZGluZyIsIklkZW50aXR5LUgiKTtlLnNldCgiRGVzY2VuZGFudEZvbnRzIixbdGhpcy5kZXNjZW5kYW50Rm9udFJlZl0pO2Uuc2V0SWZOYW1lKCJUb1VuaWNvZGUiLCJJZGVudGl0eS1IIik7cmV0dXJuIHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfWdldCByZXNvdXJjZXMoKXtjb25zdCBlPW5ldyBEaWN0KHRoaXMueHJlZiksdD1uZXcgRGljdCh0aGlzLnhyZWYpO3Quc2V0KHRoaXMuZm9udE5hbWUubmFtZSx0aGlzLmJhc2VGb250UmVmKTtlLnNldCgiRm9udCIsdCk7cmV0dXJuIGV9X2NyZWF0ZUNvbnRleHQoKXt0aGlzLndpZHRocz1uZXcgTWFwO3RoaXMuY3R4TWVhc3VyZS5mb250PWAxMDAwcHggJHt0aGlzLmZvbnRGYW1pbHl9YDtyZXR1cm4gdGhpcy5jdHhNZWFzdXJlfWNyZWF0ZUZvbnRSZXNvdXJjZXMoZSl7Y29uc3QgdD10aGlzLl9jcmVhdGVDb250ZXh0KCk7Zm9yKGNvbnN0IGEgb2YgZS5zcGxpdCgvXHJcbj98XG4vKSlmb3IoY29uc3QgZSBvZiBhLnNwbGl0KCIiKSl7Y29uc3QgYT1lLmNoYXJDb2RlQXQoMCk7aWYodGhpcy53aWR0aHMuaGFzKGEpKWNvbnRpbnVlO2NvbnN0IHI9dC5tZWFzdXJlVGV4dChlKSxpPU1hdGguY2VpbChyLndpZHRoKTt0aGlzLndpZHRocy5zZXQoYSxpKTt0aGlzLmZpcnN0Q2hhcj1NYXRoLm1pbihhLHRoaXMuZmlyc3RDaGFyKTt0aGlzLmxhc3RDaGFyPU1hdGgubWF4KGEsdGhpcy5sYXN0Q2hhcil9cmV0dXJuIHRoaXMucmVzb3VyY2VzfXN0YXRpYyBnZXRGaXJzdFBvc2l0aW9uSW5mbyhlLHQsaSl7Y29uc3RbbixzLG8sY109ZTtsZXQgbD1vLW4saD1jLXM7dCUxODAhPTAmJihbbCxoXT1baCxsXSk7Y29uc3QgdT1hKmk7cmV0dXJue2Nvb3JkczpbMCxoK3IqaS11XSxiYm94OlswLDAsbCxoXSxtYXRyaXg6MCE9PXQ/Z2V0Um90YXRpb25NYXRyaXgodCxoLHUpOnZvaWQgMH19Y3JlYXRlQXBwZWFyYW5jZShlLHQsaSxuLHMsbyl7Y29uc3QgYz10aGlzLl9jcmVhdGVDb250ZXh0KCksbD1bXTtsZXQgaD0tMS8wO2Zvcihjb25zdCB0IG9mIGUuc3BsaXQoL1xyXG4/fFxuLykpe2wucHVzaCh0KTtjb25zdCBlPWMubWVhc3VyZVRleHQodCkud2lkdGg7aD1NYXRoLm1heChoLGUpO2Zvcihjb25zdCBlIG9mIGNvZGVQb2ludEl0ZXIodCkpe2NvbnN0IHQ9U3RyaW5nLmZyb21Db2RlUG9pbnQoZSk7bGV0IGE9dGhpcy53aWR0aHMuZ2V0KGUpO2lmKHZvaWQgMD09PWEpe2NvbnN0IHI9Yy5tZWFzdXJlVGV4dCh0KTthPU1hdGguY2VpbChyLndpZHRoKTt0aGlzLndpZHRocy5zZXQoZSxhKTt0aGlzLmZpcnN0Q2hhcj1NYXRoLm1pbihlLHRoaXMuZmlyc3RDaGFyKTt0aGlzLmxhc3RDaGFyPU1hdGgubWF4KGUsdGhpcy5sYXN0Q2hhcil9fX1oKj1uLzFlMztjb25zdFt1LGQsZixnXT10O2xldCBwPWYtdSxtPWctZDtpJTE4MCE9MCYmKFtwLG1dPVttLHBdKTtsZXQgYj0xO2g+cCYmKGI9cC9oKTtsZXQgeT0xO2NvbnN0IHc9YSpuLHg9cipuLFM9dypsLmxlbmd0aDtTPm0mJih5PW0vUyk7Y29uc3Qgaz1uKk1hdGgubWluKGIseSksQz1bInEiLGAwIDAgJHtudW1iZXJUb1N0cmluZyhwKX0gJHtudW1iZXJUb1N0cmluZyhtKX0gcmUgVyBuYCwiQlQiLGAxIDAgMCAxIDAgJHtudW1iZXJUb1N0cmluZyhtK3gpfSBUbSAwIFRjICR7Z2V0UGRmQ29sb3IocywhMCl9YCxgLyR7dGhpcy5mb250TmFtZS5uYW1lfSAke251bWJlclRvU3RyaW5nKGspfSBUZmBdLHtyZXNvdXJjZXM6dn09dGhpcztpZigxIT09KG89Im51bWJlciI9PXR5cGVvZiBvJiZvPj0wJiZvPD0xP286MSkpe0MucHVzaCgiL1IwIGdzIik7Y29uc3QgZT1uZXcgRGljdCh0aGlzLnhyZWYpLHQ9bmV3IERpY3QodGhpcy54cmVmKTt0LnNldCgiY2EiLG8pO3Quc2V0KCJDQSIsbyk7dC5zZXRJZk5hbWUoIlR5cGUiLCJFeHRHU3RhdGUiKTtlLnNldCgiUjAiLHQpO3Yuc2V0KCJFeHRHU3RhdGUiLGUpfWNvbnN0IEY9bnVtYmVyVG9TdHJpbmcodyk7Zm9yKGNvbnN0IGUgb2YgbClDLnB1c2goYDAgLSR7Rn0gVGQgPCR7c3RyaW5nVG9VVEYxNkhleFN0cmluZyhlKX0+IFRqYCk7Qy5wdXNoKCJFVCIsIlEiKTtjb25zdCBUPUMuam9pbigiXG4iKSxPPW5ldyBEaWN0KHRoaXMueHJlZik7Ty5zZXRJZk5hbWUoIlN1YnR5cGUiLCJGb3JtIik7Ty5zZXRJZk5hbWUoIlR5cGUiLCJYT2JqZWN0Iik7Ty5zZXQoIkJCb3giLFswLDAscCxtXSk7Ty5zZXQoIkxlbmd0aCIsVC5sZW5ndGgpO08uc2V0KCJSZXNvdXJjZXMiLHYpO2lmKGkpe2NvbnN0IGU9Z2V0Um90YXRpb25NYXRyaXgoaSxwLG0pO08uc2V0KCJNYXRyaXgiLGUpfWNvbnN0IE09bmV3IFN0cmluZ1N0cmVhbShUKTtNLmRpY3Q9TztyZXR1cm4gTX19Y29uc3Qga249WyJtL2QiLCJtL2QveXkiLCJtbS9kZC95eSIsIm1tL3l5IiwiZC1tbW0iLCJkLW1tbS15eSIsImRkLW1tbS15eSIsInl5LW1tLWRkIiwibW1tLXl5IiwibW1tbS15eSIsIm1tbSBkLCB5eXl5IiwibW1tbSBkLCB5eXl5IiwibS9kL3l5IGg6TU0gdHQiLCJtL2QveXkgSEg6TU0iXSxDbj1bIkhIOk1NIiwiaDpNTSB0dCIsIkhIOk1NOnNzIiwiaDpNTTpzcyB0dCJdO2NsYXNzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMucm9vdD1lO3RoaXMueHJlZj10O3RoaXMuX3R5cGU9YX1nZXRBbGwoKXtjb25zdCBlPW5ldyBNYXA7aWYoIXRoaXMucm9vdClyZXR1cm4gZTtjb25zdCB0PXRoaXMueHJlZixhPW5ldyBSZWZTZXQ7YS5wdXQodGhpcy5yb290KTtjb25zdCByPVt0aGlzLnJvb3RdO2Zvcig7ci5sZW5ndGg+MDspe2NvbnN0IGk9dC5mZXRjaElmUmVmKHIuc2hpZnQoKSk7aWYoIShpIGluc3RhbmNlb2YgRGljdCkpY29udGludWU7aWYoaS5oYXMoIktpZHMiKSl7Y29uc3QgZT1pLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGUpKWNvbnRpbnVlO2Zvcihjb25zdCB0IG9mIGUpe2lmKGEuaGFzKHQpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgRHVwbGljYXRlIGVudHJ5IGluICIke3RoaXMuX3R5cGV9IiB0cmVlLmApO3IucHVzaCh0KTthLnB1dCh0KX1jb250aW51ZX1jb25zdCBuPWkuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBhPTAscj1uLmxlbmd0aDthPHI7YSs9MillLnNldCh0LmZldGNoSWZSZWYoblthXSksdC5mZXRjaElmUmVmKG5bYSsxXSkpfXJldHVybiBlfWdldFJhdyhlKXtpZighdGhpcy5yb290KXJldHVybiBudWxsO2NvbnN0IHQ9dGhpcy54cmVmO2xldCBhPXQuZmV0Y2hJZlJlZih0aGlzLnJvb3QpLHI9MDtmb3IoO2EuaGFzKCJLaWRzIik7KXtpZigrK3I+MTApe3dhcm4oYFNlYXJjaCBkZXB0aCBsaW1pdCByZWFjaGVkIGZvciAiJHt0aGlzLl90eXBlfSIgdHJlZS5gKTtyZXR1cm4gbnVsbH1jb25zdCBpPWEuZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIG51bGw7bGV0IG49MCxzPWkubGVuZ3RoLTE7Zm9yKDtuPD1zOyl7Y29uc3Qgcj1uK3M+PjEsbz10LmZldGNoSWZSZWYoaVtyXSksYz1vLmdldCgiTGltaXRzIik7aWYoZTx0LmZldGNoSWZSZWYoY1swXSkpcz1yLTE7ZWxzZXtpZighKGU+dC5mZXRjaElmUmVmKGNbMV0pKSl7YT1vO2JyZWFrfW49cisxfX1pZihuPnMpcmV0dXJuIG51bGx9Y29uc3QgaT1hLmdldCh0aGlzLl90eXBlKTtpZihBcnJheS5pc0FycmF5KGkpKXtsZXQgYT0wLHI9aS5sZW5ndGgtMjtmb3IoO2E8PXI7KXtjb25zdCBuPWErcj4+MSxzPW4rKDEmbiksbz10LmZldGNoSWZSZWYoaVtzXSk7aWYoZTxvKXI9cy0yO2Vsc2V7aWYoIShlPm8pKXJldHVybiBpW3MrMV07YT1zKzJ9fX1yZXR1cm4gbnVsbH1nZXQoZSl7cmV0dXJuIHRoaXMueHJlZi5mZXRjaElmUmVmKHRoaXMuZ2V0UmF3KGUpKX19Y2xhc3MgTmFtZVRyZWUgZXh0ZW5kcyBOYW1lT3JOdW1iZXJUcmVle2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0LCJOYW1lcyIpfX1jbGFzcyBOdW1iZXJUcmVlIGV4dGVuZHMgTmFtZU9yTnVtYmVyVHJlZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwiTnVtcyIpfX1mdW5jdGlvbiBjbGVhckdsb2JhbENhY2hlcygpeyFmdW5jdGlvbiBjbGVhclBhdHRlcm5DYWNoZXMoKXtnaT1PYmplY3QuY3JlYXRlKG51bGwpfSgpOyFmdW5jdGlvbiBjbGVhclByaW1pdGl2ZUNhY2hlcygpe29hPU9iamVjdC5jcmVhdGUobnVsbCk7Y2E9T2JqZWN0LmNyZWF0ZShudWxsKTtsYT1PYmplY3QuY3JlYXRlKG51bGwpfSgpOyFmdW5jdGlvbiBjbGVhclVuaWNvZGVDYWNoZXMoKXt5ci5jbGVhcigpfSgpO0pweEltYWdlLmNsZWFudXAoKX1mdW5jdGlvbiBwaWNrUGxhdGZvcm1JdGVtKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRGljdD9lLmhhcygiVUYiKT9lLmdldCgiVUYiKTplLmhhcygiRiIpP2UuZ2V0KCJGIik6ZS5oYXMoIlVuaXgiKT9lLmdldCgiVW5peCIpOmUuaGFzKCJNYWMiKT9lLmdldCgiTWFjIik6ZS5oYXMoIkRPUyIpP2UuZ2V0KCJET1MiKTpudWxsOm51bGx9Y2xhc3MgRmlsZVNwZWN7I3BlPSExO2NvbnN0cnVjdG9yKGUsdCxhPSExKXtpZihlIGluc3RhbmNlb2YgRGljdCl7dGhpcy54cmVmPXQ7dGhpcy5yb290PWU7ZS5oYXMoIkZTIikmJih0aGlzLmZzPWUuZ2V0KCJGUyIpKTtlLmhhcygiUkYiKSYmd2FybigiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIik7YXx8KGUuaGFzKCJFRiIpP3RoaXMuI3BlPSEwOndhcm4oIk5vbi1lbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIikpfX1nZXQgZmlsZW5hbWUoKXtsZXQgZT0iIjtjb25zdCB0PXBpY2tQbGF0Zm9ybUl0ZW0odGhpcy5yb290KTt0JiYic3RyaW5nIj09dHlwZW9mIHQmJihlPXN0cmluZ1RvUERGU3RyaW5nKHQsITApLnJlcGxhY2VBbGwoIlxcXFwiLCJcXCIpLnJlcGxhY2VBbGwoIlxcLyIsIi8iKS5yZXBsYWNlQWxsKCJcXCIsIi8iKSk7cmV0dXJuIHNoYWRvdyh0aGlzLCJmaWxlbmFtZSIsZXx8InVubmFtZWQiKX1nZXQgY29udGVudCgpe2lmKCF0aGlzLiNwZSlyZXR1cm4gbnVsbDt0aGlzLl9jb250ZW50UmVmfHw9cGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3Q/LmdldCgiRUYiKSk7bGV0IGU9bnVsbDtpZih0aGlzLl9jb250ZW50UmVmKXtjb25zdCB0PXRoaXMueHJlZi5mZXRjaElmUmVmKHRoaXMuX2NvbnRlbnRSZWYpO3QgaW5zdGFuY2VvZiBCYXNlU3RyZWFtP2U9dC5nZXRCeXRlcygpOndhcm4oIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpfWVsc2Ugd2FybigiRW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYW55IGNvbnRlbnQiKTtyZXR1cm4gZX1nZXQgZGVzY3JpcHRpb24oKXtsZXQgZT0iIjtjb25zdCB0PXRoaXMucm9vdD8uZ2V0KCJEZXNjIik7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYoZT1zdHJpbmdUb1BERlN0cmluZyh0KSk7cmV0dXJuIHNoYWRvdyh0aGlzLCJkZXNjcmlwdGlvbiIsZSl9Z2V0IHNlcmlhbGl6YWJsZSgpe3JldHVybntyYXdGaWxlbmFtZTp0aGlzLmZpbGVuYW1lLGZpbGVuYW1lOihlPXRoaXMuZmlsZW5hbWUsZS5zdWJzdHJpbmcoZS5sYXN0SW5kZXhPZigiLyIpKzEpKSxjb250ZW50OnRoaXMuY29udGVudCxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9ufTt2YXIgZX19Y29uc3Qgdm49MCxGbj0tMixJbj0tMyxUbj0tNCxPbj0tNSxNbj0tNixEbj0tOTtmdW5jdGlvbiBpc1doaXRlc3BhY2UoZSx0KXtjb25zdCBhPWVbdF07cmV0dXJuIiAiPT09YXx8IlxuIj09PWF8fCJcciI9PT1hfHwiXHQiPT09YX1jbGFzcyBYTUxQYXJzZXJCYXNle19yZXNvbHZlRW50aXRpZXMoZSl7cmV0dXJuIGUucmVwbGFjZUFsbCgvJihbXjtdKyk7L2csKGUsdCk9PntpZigiI3giPT09dC5zdWJzdHJpbmcoMCwyKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQodC5zdWJzdHJpbmcoMiksMTYpKTtpZigiIyI9PT10LnN1YnN0cmluZygwLDEpKXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnN1YnN0cmluZygxKSwxMCkpO3N3aXRjaCh0KXtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJndCI6cmV0dXJuIj4iO2Nhc2UiYW1wIjpyZXR1cm4iJiI7Y2FzZSJxdW90IjpyZXR1cm4nIic7Y2FzZSJhcG9zIjpyZXR1cm4iJyJ9cmV0dXJuIHRoaXMub25SZXNvbHZlRW50aXR5KHQpfSl9X3BhcnNlQ29udGVudChlLHQpe2NvbnN0IGE9W107bGV0IHI9dDtmdW5jdGlvbiBza2lwV3MoKXtmb3IoO3I8ZS5sZW5ndGgmJmlzV2hpdGVzcGFjZShlLHIpOykrK3J9Zm9yKDtyPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUscikmJiI+IiE9PWVbcl0mJiIvIiE9PWVbcl07KSsrcjtjb25zdCBpPWUuc3Vic3RyaW5nKHQscik7c2tpcFdzKCk7Zm9yKDtyPGUubGVuZ3RoJiYiPiIhPT1lW3JdJiYiLyIhPT1lW3JdJiYiPyIhPT1lW3JdOyl7c2tpcFdzKCk7bGV0IHQ9IiIsaT0iIjtmb3IoO3I8ZS5sZW5ndGgmJiFpc1doaXRlc3BhY2UoZSxyKSYmIj0iIT09ZVtyXTspe3QrPWVbcl07KytyfXNraXBXcygpO2lmKCI9IiE9PWVbcl0pcmV0dXJuIG51bGw7KytyO3NraXBXcygpO2NvbnN0IG49ZVtyXTtpZignIichPT1uJiYiJyIhPT1uKXJldHVybiBudWxsO2NvbnN0IHM9ZS5pbmRleE9mKG4sKytyKTtpZihzPDApcmV0dXJuIG51bGw7aT1lLnN1YnN0cmluZyhyLHMpO2EucHVzaCh7bmFtZTp0LHZhbHVlOnRoaXMuX3Jlc29sdmVFbnRpdGllcyhpKX0pO3I9cysxO3NraXBXcygpfXJldHVybntuYW1lOmksYXR0cmlidXRlczphLHBhcnNlZDpyLXR9fV9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHQpe2xldCBhPXQ7Zm9yKDthPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUsYSkmJiI+IiE9PWVbYV0mJiI/IiE9PWVbYV0mJiIvIiE9PWVbYV07KSsrYTtjb25zdCByPWUuc3Vic3RyaW5nKHQsYSk7IWZ1bmN0aW9uIHNraXBXcygpe2Zvcig7YTxlLmxlbmd0aCYmaXNXaGl0ZXNwYWNlKGUsYSk7KSsrYX0oKTtjb25zdCBpPWE7Zm9yKDthPGUubGVuZ3RoJiYoIj8iIT09ZVthXXx8Ij4iIT09ZVthKzFdKTspKythO3JldHVybntuYW1lOnIsdmFsdWU6ZS5zdWJzdHJpbmcoaSxhKSxwYXJzZWQ6YS10fX1wYXJzZVhtbChlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aDspe2xldCBhPXQ7aWYoIjwiPT09ZVt0XSl7KythO2xldCB0O3N3aXRjaChlW2FdKXtjYXNlIi8iOisrYTt0PWUuaW5kZXhPZigiPiIsYSk7aWYodDwwKXt0aGlzLm9uRXJyb3IoRG4pO3JldHVybn10aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhhLHQpKTthPXQrMTticmVhaztjYXNlIj8iOisrYTtjb25zdCByPXRoaXMuX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUsYSk7aWYoIj8+IiE9PWUuc3Vic3RyaW5nKGErci5wYXJzZWQsYStyLnBhcnNlZCsyKSl7dGhpcy5vbkVycm9yKEluKTtyZXR1cm59dGhpcy5vblBpKHIubmFtZSxyLnZhbHVlKTthKz1yLnBhcnNlZCsyO2JyZWFrO2Nhc2UiISI6aWYoIi0tIj09PWUuc3Vic3RyaW5nKGErMSxhKzMpKXt0PWUuaW5kZXhPZigiLS1ceDNlIixhKzMpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKE9uKTtyZXR1cm59dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcoYSszLHQpKTthPXQrM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKGErMSxhKzgpKXt0PWUuaW5kZXhPZigiXV0+IixhKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKEZuKTtyZXR1cm59dGhpcy5vbkNkYXRhKGUuc3Vic3RyaW5nKGErOCx0KSk7YT10KzN9ZWxzZXtpZigiRE9DVFlQRSIhPT1lLnN1YnN0cmluZyhhKzEsYSs4KSl7dGhpcy5vbkVycm9yKE1uKTtyZXR1cm59e2NvbnN0IHI9ZS5pbmRleE9mKCJbIixhKzgpO2xldCBpPSExO3Q9ZS5pbmRleE9mKCI+IixhKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKFRuKTtyZXR1cm59aWYocj4wJiZ0PnIpe3Q9ZS5pbmRleE9mKCJdPiIsYSs4KTtpZih0PDApe3RoaXMub25FcnJvcihUbik7cmV0dXJufWk9ITB9Y29uc3Qgbj1lLnN1YnN0cmluZyhhKzgsdCsoaT8xOjApKTt0aGlzLm9uRG9jdHlwZShuKTthPXQrKGk/MjoxKX19YnJlYWs7ZGVmYXVsdDpjb25zdCBpPXRoaXMuX3BhcnNlQ29udGVudChlLGEpO2lmKG51bGw9PT1pKXt0aGlzLm9uRXJyb3IoTW4pO3JldHVybn1sZXQgbj0hMTtpZigiLz4iPT09ZS5zdWJzdHJpbmcoYStpLnBhcnNlZCxhK2kucGFyc2VkKzIpKW49ITA7ZWxzZSBpZigiPiIhPT1lLnN1YnN0cmluZyhhK2kucGFyc2VkLGEraS5wYXJzZWQrMSkpe3RoaXMub25FcnJvcihEbik7cmV0dXJufXRoaXMub25CZWdpbkVsZW1lbnQoaS5uYW1lLGkuYXR0cmlidXRlcyxuKTthKz1pLnBhcnNlZCsobj8yOjEpfX1lbHNle2Zvcig7YTxlLmxlbmd0aCYmIjwiIT09ZVthXTspYSsrO2NvbnN0IHI9ZS5zdWJzdHJpbmcodCxhKTt0aGlzLm9uVGV4dCh0aGlzLl9yZXNvbHZlRW50aXRpZXMocikpfXQ9YX19b25SZXNvbHZlRW50aXR5KGUpe3JldHVybmAmJHtlfTtgfW9uUGkoZSx0KXt9b25Db21tZW50KGUpe31vbkNkYXRhKGUpe31vbkRvY3R5cGUoZSl7fW9uVGV4dChlKXt9b25CZWdpbkVsZW1lbnQoZSx0LGEpe31vbkVuZEVsZW1lbnQoZSl7fW9uRXJyb3IoZSl7fX1jbGFzcyBTaW1wbGVET01Ob2Rle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5ub2RlTmFtZT1lO3RoaXMubm9kZVZhbHVlPXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInBhcmVudE5vZGUiLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzPy5bMF19Z2V0IG5leHRTaWJsaW5nKCl7Y29uc3QgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZighZSlyZXR1cm47Y29uc3QgdD1lLmluZGV4T2YodGhpcyk7cmV0dXJuLTEhPT10P2VbdCsxXTp2b2lkIDB9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcz90aGlzLmNoaWxkTm9kZXMubWFwKGU9PmUudGV4dENvbnRlbnQpLmpvaW4oIiIpOnRoaXMubm9kZVZhbHVlfHwiIn1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfHxbXX1oYXNDaGlsZE5vZGVzKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcz8ubGVuZ3RoPjB9c2VhcmNoTm9kZShlLHQpe2lmKHQ+PWUubGVuZ3RoKXJldHVybiB0aGlzO2NvbnN0IGE9ZVt0XTtpZihhLm5hbWUuc3RhcnRzV2l0aCgiIyIpJiZ0PGUubGVuZ3RoLTEpcmV0dXJuIHRoaXMuc2VhcmNoTm9kZShlLHQrMSk7Y29uc3Qgcj1bXTtsZXQgaT10aGlzO2Zvcig7Oyl7aWYoYS5uYW1lPT09aS5ub2RlTmFtZSl7aWYoMCE9PWEucG9zKXtpZigwPT09ci5sZW5ndGgpcmV0dXJuIG51bGw7e2NvbnN0W25dPXIucG9wKCk7bGV0IHM9MDtmb3IoY29uc3QgciBvZiBuLmNoaWxkTm9kZXMpaWYoYS5uYW1lPT09ci5ub2RlTmFtZSl7aWYocz09PWEucG9zKXJldHVybiByLnNlYXJjaE5vZGUoZSx0KzEpO3MrK31yZXR1cm4gaS5zZWFyY2hOb2RlKGUsdCsxKX19e2NvbnN0IGE9aS5zZWFyY2hOb2RlKGUsdCsxKTtpZihudWxsIT09YSlyZXR1cm4gYX19aWYoaS5jaGlsZE5vZGVzPy5sZW5ndGg+MCl7ci5wdXNoKFtpLDBdKTtpPWkuY2hpbGROb2Rlc1swXX1lbHNle2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IoOzAhPT1yLmxlbmd0aDspe2NvbnN0W2UsdF09ci5wb3AoKSxhPXQrMTtpZihhPGUuY2hpbGROb2Rlcy5sZW5ndGgpe3IucHVzaChbZSxhXSk7aT1lLmNoaWxkTm9kZXNbYV07YnJlYWt9fWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbH19fWR1bXAoZSl7aWYoIiN0ZXh0IiE9PXRoaXMubm9kZU5hbWUpe2UucHVzaChgPCR7dGhpcy5ub2RlTmFtZX1gKTtpZih0aGlzLmF0dHJpYnV0ZXMpZm9yKGNvbnN0IHQgb2YgdGhpcy5hdHRyaWJ1dGVzKWUucHVzaChgICR7dC5uYW1lfT0iJHtlbmNvZGVUb1htbFN0cmluZyh0LnZhbHVlKX0iYCk7aWYodGhpcy5oYXNDaGlsZE5vZGVzKCkpe2UucHVzaCgiPiIpO2Zvcihjb25zdCB0IG9mIHRoaXMuY2hpbGROb2Rlcyl0LmR1bXAoZSk7ZS5wdXNoKGA8LyR7dGhpcy5ub2RlTmFtZX0+YCl9ZWxzZSB0aGlzLm5vZGVWYWx1ZT9lLnB1c2goYD4ke2VuY29kZVRvWG1sU3RyaW5nKHRoaXMubm9kZVZhbHVlKX08LyR7dGhpcy5ub2RlTmFtZX0+YCk6ZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKGVuY29kZVRvWG1sU3RyaW5nKHRoaXMubm9kZVZhbHVlKSl9fWNsYXNzIFNpbXBsZVhNTFBhcnNlciBleHRlbmRzIFhNTFBhcnNlckJhc2V7Y29uc3RydWN0b3Ioe2hhc0F0dHJpYnV0ZXM6ZT0hMSxsb3dlckNhc2VOYW1lOnQ9ITF9KXtzdXBlcigpO3RoaXMuX2N1cnJlbnRGcmFnbWVudD1udWxsO3RoaXMuX3N0YWNrPW51bGw7dGhpcy5fZXJyb3JDb2RlPXZuO3RoaXMuX2hhc0F0dHJpYnV0ZXM9ZTt0aGlzLl9sb3dlckNhc2VOYW1lPXR9cGFyc2VGcm9tU3RyaW5nKGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD1bXTt0aGlzLl9zdGFjaz1bXTt0aGlzLl9lcnJvckNvZGU9dm47dGhpcy5wYXJzZVhtbChlKTtpZih0aGlzLl9lcnJvckNvZGUhPT12bilyZXR1cm47Y29uc3RbdF09dGhpcy5fY3VycmVudEZyYWdtZW50O3JldHVybiB0P3tkb2N1bWVudEVsZW1lbnQ6dH06dm9pZCAwfW9uVGV4dChlKXtpZihmdW5jdGlvbiBpc1doaXRlc3BhY2VTdHJpbmcoZSl7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCsrKWlmKCFpc1doaXRlc3BhY2UoZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0oZSkpcmV0dXJuO2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkNkYXRhKGUpe2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkJlZ2luRWxlbWVudChlLHQsYSl7dGhpcy5fbG93ZXJDYXNlTmFtZSYmKGU9ZS50b0xvd2VyQ2FzZSgpKTtjb25zdCByPW5ldyBTaW1wbGVET01Ob2RlKGUpO3IuY2hpbGROb2Rlcz1bXTt0aGlzLl9oYXNBdHRyaWJ1dGVzJiYoci5hdHRyaWJ1dGVzPXQpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHIpO2lmKCFhKXt0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCk7dGhpcy5fY3VycmVudEZyYWdtZW50PXIuY2hpbGROb2Rlc319b25FbmRFbGVtZW50KGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107Y29uc3QgdD10aGlzLl9jdXJyZW50RnJhZ21lbnQuYXQoLTEpO2lmKCF0KXJldHVybiBudWxsO2Zvcihjb25zdCBlIG9mIHQuY2hpbGROb2RlcyllLnBhcmVudE5vZGU9dDtyZXR1cm4gdH1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX1jbGFzcyBNZXRhZGF0YVBhcnNlcntjb25zdHJ1Y3RvcihlKXtlPXRoaXMuX3JlcGFpcihlKTtjb25zdCB0PW5ldyBTaW1wbGVYTUxQYXJzZXIoe2xvd2VyQ2FzZU5hbWU6ITB9KS5wYXJzZUZyb21TdHJpbmcoZSk7dGhpcy5fbWV0YWRhdGFNYXA9bmV3IE1hcDt0aGlzLl9kYXRhPWU7dCYmdGhpcy5fcGFyc2UodCl9X3JlcGFpcihlKXtyZXR1cm4gZS5yZXBsYWNlKC9eW148XSsvLCIiKS5yZXBsYWNlQWxsKC8+XFwzNzZcXDM3NyhbXjxdKykvZyxmdW5jdGlvbihlLHQpe2NvbnN0IGE9dC5yZXBsYWNlQWxsKC9cXChbMC0zXSkoWzAtN10pKFswLTddKS9nLGZ1bmN0aW9uKGUsdCxhLHIpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY0KnQrOCphKzEqcil9KS5yZXBsYWNlQWxsKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiYW1wIjpyZXR1cm4iJiI7Y2FzZSJhcG9zIjpyZXR1cm4iJyI7Y2FzZSJndCI6cmV0dXJuIj4iO2Nhc2UibHQiOnJldHVybiI8IjtjYXNlInF1b3QiOnJldHVybiciJ310aHJvdyBuZXcgRXJyb3IoYF9yZXBhaXI6ICR7dH0gaXNuJ3QgZGVmaW5lZC5gKX0pLHI9WyI+Il07Zm9yKGxldCBlPTAsdD1hLmxlbmd0aDtlPHQ7ZSs9Mil7Y29uc3QgdD0yNTYqYS5jaGFyQ29kZUF0KGUpK2EuY2hhckNvZGVBdChlKzEpO3Q+PTMyJiZ0PDEyNyYmNjAhPT10JiY2MiE9PXQmJjM4IT09dD9yLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk6ci5wdXNoKCImI3giKyg2NTUzNit0KS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpKyI7Iil9cmV0dXJuIHIuam9pbigiIil9KX1fZ2V0U2VxdWVuY2UoZSl7Y29uc3QgdD1lLm5vZGVOYW1lO3JldHVybiJyZGY6YmFnIiE9PXQmJiJyZGY6c2VxIiE9PXQmJiJyZGY6YWx0IiE9PXQ/bnVsbDplLmNoaWxkTm9kZXMuZmlsdGVyKGU9PiJyZGY6bGkiPT09ZS5ub2RlTmFtZSl9X3BhcnNlQXJyYXkoZSl7aWYoIWUuaGFzQ2hpbGROb2RlcygpKXJldHVybjtjb25zdFt0XT1lLmNoaWxkTm9kZXMsYT10aGlzLl9nZXRTZXF1ZW5jZSh0KXx8W107dGhpcy5fbWV0YWRhdGFNYXAuc2V0KGUubm9kZU5hbWUsYS5tYXAoZT0+ZS50ZXh0Q29udGVudC50cmltKCkpKX1fcGFyc2UoZSl7bGV0IHQ9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoInJkZjpyZGYiIT09dC5ub2RlTmFtZSl7dD10LmZpcnN0Q2hpbGQ7Zm9yKDt0JiYicmRmOnJkZiIhPT10Lm5vZGVOYW1lOyl0PXQubmV4dFNpYmxpbmd9aWYodCYmInJkZjpyZGYiPT09dC5ub2RlTmFtZSYmdC5oYXNDaGlsZE5vZGVzKCkpZm9yKGNvbnN0IGUgb2YgdC5jaGlsZE5vZGVzKWlmKCJyZGY6ZGVzY3JpcHRpb24iPT09ZS5ub2RlTmFtZSlmb3IoY29uc3QgdCBvZiBlLmNoaWxkTm9kZXMpe2NvbnN0IGU9dC5ub2RlTmFtZTtzd2l0Y2goZSl7Y2FzZSIjdGV4dCI6Y29udGludWU7Y2FzZSJkYzpjcmVhdG9yIjpjYXNlImRjOnN1YmplY3QiOnRoaXMuX3BhcnNlQXJyYXkodCk7Y29udGludWV9dGhpcy5fbWV0YWRhdGFNYXAuc2V0KGUsdC50ZXh0Q29udGVudC50cmltKCkpfX1nZXQgc2VyaWFsaXphYmxlKCl7cmV0dXJue3BhcnNlZERhdGE6dGhpcy5fbWV0YWRhdGFNYXAscmF3RGF0YTp0aGlzLl9kYXRhfX19Y29uc3QgQm49MSxSbj0yLE5uPTMsRW49NCxQbj01O2NsYXNzIFN0cnVjdFRyZWVSb290e2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLnhyZWY9ZTt0aGlzLmRpY3Q9dDt0aGlzLnJlZj1hIGluc3RhbmNlb2YgUmVmP2E6bnVsbDt0aGlzLnJvbGVNYXA9bmV3IE1hcDt0aGlzLnN0cnVjdFBhcmVudElkcz1udWxsO3RoaXMua2lkUmVmVG9Qb3NpdGlvbj12b2lkIDB9Z2V0S2lkUG9zaXRpb24oZSl7aWYodm9pZCAwPT09dGhpcy5raWRSZWZUb1Bvc2l0aW9uKXtjb25zdCBlPXRoaXMuZGljdC5nZXQoIksiKTtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCB0PXRoaXMua2lkUmVmVG9Qb3NpdGlvbj1uZXcgTWFwO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1lW2FdO3ImJnQuc2V0KHIudG9TdHJpbmcoKSxhKX19ZWxzZSB0aGlzLmtpZFJlZlRvUG9zaXRpb249ZSBpbnN0YW5jZW9mIERpY3Q/bmV3IE1hcChbW2Uub2JqSWQsMF1dKTplP251bGw6bmV3IE1hcH1yZXR1cm4gdGhpcy5raWRSZWZUb1Bvc2l0aW9uP3RoaXMua2lkUmVmVG9Qb3NpdGlvbi5nZXQoZSk/P05hTjotMX1pbml0KCl7dGhpcy5yZWFkUm9sZU1hcCgpfSNtZShlLHQsYSl7aWYoIShlIGluc3RhbmNlb2YgUmVmKXx8dDwwKXJldHVybjt0aGlzLnN0cnVjdFBhcmVudElkc3x8PW5ldyBSZWZTZXRDYWNoZTtsZXQgcj10aGlzLnN0cnVjdFBhcmVudElkcy5nZXQoZSk7aWYoIXIpe3I9W107dGhpcy5zdHJ1Y3RQYXJlbnRJZHMucHV0KGUscil9ci5wdXNoKFt0LGFdKX1hZGRBbm5vdGF0aW9uSWRUb1BhZ2UoZSx0KXt0aGlzLiNtZShlLHQsRW4pfXJlYWRSb2xlTWFwKCl7Y29uc3QgZT10aGlzLmRpY3QuZ2V0KCJSb2xlTWFwIik7aWYoZSBpbnN0YW5jZW9mIERpY3QpZm9yKGNvbnN0W3QsYV1vZiBlKWEgaW5zdGFuY2VvZiBOYW1lJiZ0aGlzLnJvbGVNYXAuc2V0KHQsYS5uYW1lKX1zdGF0aWMgYXN5bmMgY2FuQ3JlYXRlU3RydWN0dXJlVHJlZSh7Y2F0YWxvZ1JlZjplLHBkZk1hbmFnZXI6dCxuZXdBbm5vdGF0aW9uc0J5UGFnZTphfSl7aWYoIShlIGluc3RhbmNlb2YgUmVmKSl7d2FybigiQ2Fubm90IHNhdmUgdGhlIHN0cnVjdCB0cmVlOiBubyBjYXRhbG9nIHJlZmVyZW5jZS4iKTtyZXR1cm4hMX1sZXQgcj0wLGk9ITA7Zm9yKGNvbnN0W2Usbl1vZiBhKXtjb25zdHtyZWY6YX09YXdhaXQgdC5nZXRQYWdlKGUpO2lmKCEoYSBpbnN0YW5jZW9mIFJlZikpe3dhcm4oYENhbm5vdCBzYXZlIHRoZSBzdHJ1Y3QgdHJlZTogcGFnZSAke2V9IGhhcyBubyByZWYuYCk7aT0hMDticmVha31mb3IoY29uc3QgZSBvZiBuKWlmKGUuYWNjZXNzaWJpbGl0eURhdGE/LnR5cGUpe2UucGFyZW50VHJlZUlkPXIrKztpPSExfX1pZihpKXtmb3IoY29uc3QgZSBvZiBhLnZhbHVlcygpKWZvcihjb25zdCB0IG9mIGUpZGVsZXRlIHQucGFyZW50VHJlZUlkO3JldHVybiExfXJldHVybiEwfXN0YXRpYyBhc3luYyBjcmVhdGVTdHJ1Y3R1cmVUcmVlKHtuZXdBbm5vdGF0aW9uc0J5UGFnZTplLHhyZWY6dCxjYXRhbG9nUmVmOmEscGRmTWFuYWdlcjpyLGNoYW5nZXM6aX0pe2NvbnN0IG49YXdhaXQgci5lbnN1cmVDYXRhbG9nKCJjbG9uZURpY3QiKSxzPW5ldyBSZWZTZXRDYWNoZTtzLnB1dChhLG4pO2NvbnN0IG89dC5nZXROZXdUZW1wb3JhcnlSZWYoKTtuLnNldCgiU3RydWN0VHJlZVJvb3QiLG8pO2NvbnN0IGM9bmV3IERpY3QodCk7Yy5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJTdHJ1Y3RUcmVlUm9vdCIpKTtjb25zdCBsPXQuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7Yy5zZXQoIlBhcmVudFRyZWUiLGwpO2NvbnN0IGg9W107Yy5zZXQoIksiLGgpO3MucHV0KG8sYyk7Y29uc3QgdT1uZXcgRGljdCh0KSxkPVtdO3Uuc2V0KCJOdW1zIixkKTtjb25zdCBmPWF3YWl0IHRoaXMuI2JlKHtuZXdBbm5vdGF0aW9uc0J5UGFnZTplLHN0cnVjdFRyZWVSb290UmVmOm8sc3RydWN0VHJlZVJvb3Q6bnVsbCxraWRzOmgsbnVtczpkLHhyZWY6dCxwZGZNYW5hZ2VyOnIsY2hhbmdlczppLGNhY2hlOnN9KTtjLnNldCgiUGFyZW50VHJlZU5leHRLZXkiLGYpO3MucHV0KGwsdSk7Zm9yKGNvbnN0W2UsdF1vZiBzLml0ZW1zKCkpaS5wdXQoZSx7ZGF0YTp0fSl9YXN5bmMgY2FuVXBkYXRlU3RydWN0VHJlZSh7cGRmTWFuYWdlcjplLG5ld0Fubm90YXRpb25zQnlQYWdlOnR9KXtpZighdGhpcy5yZWYpe3dhcm4oIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBubyByb290IHJlZmVyZW5jZS4iKTtyZXR1cm4hMX1sZXQgYT10aGlzLmRpY3QuZ2V0KCJQYXJlbnRUcmVlTmV4dEtleSIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpfHxhPDApe3dhcm4oIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBpbnZhbGlkIG5leHQga2V5LiIpO3JldHVybiExfWNvbnN0IHI9dGhpcy5kaWN0LmdldCgiUGFyZW50VHJlZSIpO2lmKCEociBpbnN0YW5jZW9mIERpY3QpKXt3YXJuKCJDYW5ub3QgdXBkYXRlIHRoZSBzdHJ1Y3QgdHJlZTogUGFyZW50VHJlZSBpc24ndCBhIGRpY3QuIik7cmV0dXJuITF9Y29uc3QgaT1yLmdldCgiTnVtcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXt3YXJuKCJDYW5ub3QgdXBkYXRlIHRoZSBzdHJ1Y3QgdHJlZTogbnVtcyBpc24ndCBhbiBhcnJheS4iKTtyZXR1cm4hMX1jb25zdCBuPW5ldyBOdW1iZXJUcmVlKHIsdGhpcy54cmVmKTtmb3IoY29uc3QgYSBvZiB0LmtleXMoKSl7Y29uc3R7cGFnZURpY3Q6dH09YXdhaXQgZS5nZXRQYWdlKGEpO2lmKCF0LmhhcygiU3RydWN0UGFyZW50cyIpKWNvbnRpbnVlO2NvbnN0IHI9dC5nZXQoIlN0cnVjdFBhcmVudHMiKTtpZighTnVtYmVyLmlzSW50ZWdlcihyKXx8IUFycmF5LmlzQXJyYXkobi5nZXQocikpKXt3YXJuKGBDYW5ub3Qgc2F2ZSB0aGUgc3RydWN0IHRyZWU6IHBhZ2UgJHthfSBoYXMgYSB3cm9uZyBpZC5gKTtyZXR1cm4hMX19bGV0IHM9ITA7Zm9yKGNvbnN0W3IsaV1vZiB0KXtjb25zdHtwYWdlRGljdDp0fT1hd2FpdCBlLmdldFBhZ2Uocik7U3RydWN0VHJlZVJvb3QuI3llKHtlbGVtZW50czppLHhyZWY6dGhpcy54cmVmLHBhZ2VEaWN0OnQsbnVtYmVyVHJlZTpufSk7Zm9yKGNvbnN0IGUgb2YgaSlpZihlLmFjY2Vzc2liaWxpdHlEYXRhPy50eXBlKXtlLmFjY2Vzc2liaWxpdHlEYXRhLnN0cnVjdFBhcmVudD49MHx8KGUucGFyZW50VHJlZUlkPWErKyk7cz0hMX19aWYocyl7Zm9yKGNvbnN0IGUgb2YgdC52YWx1ZXMoKSlmb3IoY29uc3QgdCBvZiBlKXtkZWxldGUgdC5wYXJlbnRUcmVlSWQ7ZGVsZXRlIHQuc3RydWN0VHJlZVBhcmVudH1yZXR1cm4hMX1yZXR1cm4hMH1hc3luYyB1cGRhdGVTdHJ1Y3R1cmVUcmVlKHtuZXdBbm5vdGF0aW9uc0J5UGFnZTplLHBkZk1hbmFnZXI6dCxjaGFuZ2VzOmF9KXtjb25zdHtyZWY6cix4cmVmOml9PXRoaXMsbj10aGlzLmRpY3QuY2xvbmUoKSxzPW5ldyBSZWZTZXRDYWNoZTtzLnB1dChyLG4pO2xldCBvLGM9bi5nZXRSYXcoIlBhcmVudFRyZWUiKTtpZihjIGluc3RhbmNlb2YgUmVmKW89aS5mZXRjaChjKTtlbHNle289YztjPWkuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7bi5zZXQoIlBhcmVudFRyZWUiLGMpfW89by5jbG9uZSgpO3MucHV0KGMsbyk7bGV0IGw9by5nZXRSYXcoIk51bXMiKSxoPW51bGw7aWYobCBpbnN0YW5jZW9mIFJlZil7aD1sO2w9aS5mZXRjaChoKX1sPWwuc2xpY2UoKTtofHxvLnNldCgiTnVtcyIsbCk7Y29uc3QgdT1hd2FpdCBTdHJ1Y3RUcmVlUm9vdC4jYmUoe25ld0Fubm90YXRpb25zQnlQYWdlOmUsc3RydWN0VHJlZVJvb3RSZWY6cixzdHJ1Y3RUcmVlUm9vdDp0aGlzLGtpZHM6bnVsbCxudW1zOmwseHJlZjppLHBkZk1hbmFnZXI6dCxjaGFuZ2VzOmEsY2FjaGU6c30pO2lmKC0xIT09dSl7bi5zZXQoIlBhcmVudFRyZWVOZXh0S2V5Iix1KTtoJiZzLnB1dChoLGwpO2Zvcihjb25zdFtlLHRdb2Ygcy5pdGVtcygpKWEucHV0KGUse2RhdGE6dH0pfX1zdGF0aWMgYXN5bmMjYmUoe25ld0Fubm90YXRpb25zQnlQYWdlOmUsc3RydWN0VHJlZVJvb3RSZWY6dCxzdHJ1Y3RUcmVlUm9vdDphLGtpZHM6cixudW1zOmkseHJlZjpuLHBkZk1hbmFnZXI6cyxjaGFuZ2VzOm8sY2FjaGU6Y30pe2NvbnN0IGw9TmFtZS5nZXQoIk9CSlIiKTtsZXQgaCx1PS0xO2Zvcihjb25zdFtkLGZdb2YgZSl7Y29uc3QgZT1hd2FpdCBzLmdldFBhZ2UoZCkse3JlZjpnfT1lLHA9ZyBpbnN0YW5jZW9mIFJlZjtmb3IoY29uc3R7YWNjZXNzaWJpbGl0eURhdGE6cyxyZWY6bSxwYXJlbnRUcmVlSWQ6YixzdHJ1Y3RUcmVlUGFyZW50Onl9b2YgZil7aWYoIXM/LnR5cGUpY29udGludWU7Y29uc3R7c3RydWN0UGFyZW50OmZ9PXM7aWYoYSYmTnVtYmVyLmlzSW50ZWdlcihmKSYmZj49MCl7bGV0IHQ9KGh8fD1uZXcgTWFwKS5nZXQoZCk7aWYodm9pZCAwPT09dCl7dD1uZXcgU3RydWN0VHJlZVBhZ2UoYSxlLnBhZ2VEaWN0KS5jb2xsZWN0T2JqZWN0cyhnKTtoLnNldChkLHQpfWNvbnN0IHI9dD8uZ2V0KGYpO2lmKHIpe2NvbnN0IGU9bi5mZXRjaChyKS5jbG9uZSgpO1N0cnVjdFRyZWVSb290LiN3ZShlLHMpO28ucHV0KHIse2RhdGE6ZX0pO2NvbnRpbnVlfX11PU1hdGgubWF4KHUsYik7Y29uc3Qgdz1uLmdldE5ld1RlbXBvcmFyeVJlZigpLHg9bmV3IERpY3Qobik7U3RydWN0VHJlZVJvb3QuI3dlKHgscyk7YXdhaXQgdGhpcy4jeGUoe3N0cnVjdFRyZWVQYXJlbnQ6eSx0YWdEaWN0OngsbmV3VGFnUmVmOncsc3RydWN0VHJlZVJvb3RSZWY6dCxmYWxsYmFja0tpZHM6cix4cmVmOm4sY2FjaGU6Y30pO2NvbnN0IFM9bmV3IERpY3Qobik7eC5zZXQoIksiLFMpO1Muc2V0KCJUeXBlIixsKTtwJiZTLnNldCgiUGciLGcpO1Muc2V0KCJPYmoiLG0pO2MucHV0KHcseCk7aS5wdXNoKGIsdyl9fXJldHVybiB1KzF9c3RhdGljI3dlKGUse3R5cGU6dCx0aXRsZTphLGxhbmc6cixhbHQ6aSxleHBhbmRlZDpuLGFjdHVhbFRleHQ6c30pe2Uuc2V0KCJTIixOYW1lLmdldCh0KSk7YSYmZS5zZXQoIlQiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUoYSkpO3ImJmUuc2V0KCJMYW5nIixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKHIpKTtpJiZlLnNldCgiQWx0IixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKGkpKTtuJiZlLnNldCgiRSIsc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShuKSk7cyYmZS5zZXQoIkFjdHVhbFRleHQiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUocykpfXN0YXRpYyN5ZSh7ZWxlbWVudHM6ZSx4cmVmOnQscGFnZURpY3Q6YSxudW1iZXJUcmVlOnJ9KXtjb25zdCBpPW5ldyBNYXA7Zm9yKGNvbnN0IHQgb2YgZSlpZih0LnN0cnVjdFRyZWVQYXJlbnRJZCl7Y29uc3QgZT1wYXJzZUludCh0LnN0cnVjdFRyZWVQYXJlbnRJZC5zcGxpdCgiX21jIilbMV0sMTApO2xldCBhPWkuZ2V0KGUpO2lmKCFhKXthPVtdO2kuc2V0KGUsYSl9YS5wdXNoKHQpfWNvbnN0IG49YS5nZXQoIlN0cnVjdFBhcmVudHMiKTtpZighTnVtYmVyLmlzSW50ZWdlcihuKSlyZXR1cm47Y29uc3Qgcz1yLmdldChuKSx1cGRhdGVFbGVtZW50PShlLGEscik9Pntjb25zdCBuPWkuZ2V0KGUpO2lmKG4pe2NvbnN0IGU9YS5nZXRSYXcoIlAiKSxpPXQuZmV0Y2hJZlJlZihlKTtpZihlIGluc3RhbmNlb2YgUmVmJiZpIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT17cmVmOnIsZGljdDphfTtmb3IoY29uc3QgdCBvZiBuKXQuc3RydWN0VHJlZVBhcmVudD1lfXJldHVybiEwfXJldHVybiExfTtmb3IoY29uc3QgZSBvZiBzKXtpZighKGUgaW5zdGFuY2VvZiBSZWYpKWNvbnRpbnVlO2NvbnN0IGE9dC5mZXRjaChlKSxyPWEuZ2V0KCJLIik7aWYoTnVtYmVyLmlzSW50ZWdlcihyKSl1cGRhdGVFbGVtZW50KHIsYSxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBpIG9mIHIpe2k9dC5mZXRjaElmUmVmKGkpO2lmKE51bWJlci5pc0ludGVnZXIoaSkmJnVwZGF0ZUVsZW1lbnQoaSxhLGUpKWJyZWFrO2lmKCEoaSBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2lmKCFpc05hbWUoaS5nZXQoIlR5cGUiKSwiTUNSIikpYnJlYWs7Y29uc3Qgcj1pLmdldCgiTUNJRCIpO2lmKE51bWJlci5pc0ludGVnZXIocikmJnVwZGF0ZUVsZW1lbnQocixhLGUpKWJyZWFrfX19c3RhdGljIGFzeW5jI3hlKHtzdHJ1Y3RUcmVlUGFyZW50OmUsdGFnRGljdDp0LG5ld1RhZ1JlZjphLHN0cnVjdFRyZWVSb290UmVmOnIsZmFsbGJhY2tLaWRzOmkseHJlZjpuLGNhY2hlOnN9KXtsZXQgbyxjPW51bGw7aWYoZSl7KHtyZWY6Y309ZSk7bz1lLmRpY3QuZ2V0UmF3KCJQIil8fHJ9ZWxzZSBvPXI7dC5zZXQoIlAiLG8pO2NvbnN0IGw9bi5mZXRjaElmUmVmKG8pO2lmKCFsKXtpLnB1c2goYSk7cmV0dXJufWxldCBoPXMuZ2V0KG8pO2lmKCFoKXtoPWwuY2xvbmUoKTtzLnB1dChvLGgpfWNvbnN0IHU9aC5nZXRSYXcoIksiKTtsZXQgZD11IGluc3RhbmNlb2YgUmVmP3MuZ2V0KHUpOm51bGw7aWYoIWQpe2Q9bi5mZXRjaElmUmVmKHUpO2Q9QXJyYXkuaXNBcnJheShkKT9kLnNsaWNlKCk6W3VdO2NvbnN0IGU9bi5nZXROZXdUZW1wb3JhcnlSZWYoKTtoLnNldCgiSyIsZSk7cy5wdXQoZSxkKX1jb25zdCBmPWQuaW5kZXhPZihjKTtkLnNwbGljZShmPj0wP2YrMTpkLmxlbmd0aCwwLGEpfX1jbGFzcyBTdHJ1Y3RFbGVtZW50Tm9kZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMudHJlZT1lO3RoaXMueHJlZj1lLnhyZWY7dGhpcy5kaWN0PXQ7dGhpcy5raWRzPVtdO3RoaXMucGFyc2VLaWRzKCl9Z2V0IHJvbGUoKXtjb25zdCBlPXRoaXMuZGljdC5nZXQoIlMiKSx0PWUgaW5zdGFuY2VvZiBOYW1lP2UubmFtZToiIix7cm9vdDphfT10aGlzLnRyZWU7cmV0dXJuIGEucm9sZU1hcC5nZXQodCk/P3R9Z2V0IG1hdGhNTCgpe2xldCBlPXRoaXMuZGljdC5nZXQoIkFGIil8fFtdO0FycmF5LmlzQXJyYXkoZSl8fChlPVtlXSk7Zm9yKGxldCB0IG9mIGUpe3Q9dGhpcy54cmVmLmZldGNoSWZSZWYodCk7aWYoISh0IGluc3RhbmNlb2YgRGljdCkpY29udGludWU7aWYoIWlzTmFtZSh0LmdldCgiVHlwZSIpLCJGaWxlc3BlYyIpKWNvbnRpbnVlO2lmKCFpc05hbWUodC5nZXQoIkFGUmVsYXRpb25zaGlwIiksIlN1cHBsZW1lbnQiKSljb250aW51ZTtjb25zdCBlPXQuZ2V0KCJFRiIpO2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2NvbnN0IGE9ZS5nZXQoIlVGIil8fGUuZ2V0KCJGIik7aWYoYSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJihpc05hbWUoYS5kaWN0LmdldCgiVHlwZSIpLCJFbWJlZGRlZEZpbGUiKSYmaXNOYW1lKGEuZGljdC5nZXQoIlN1YnR5cGUiKSwiYXBwbGljYXRpb24vbWF0aG1sK3htbCIpKSlyZXR1cm4gc3RyaW5nVG9VVEY4U3RyaW5nKGEuZ2V0U3RyaW5nKCkpfWNvbnN0IHQ9dGhpcy5kaWN0LmdldCgiQSIpO2lmKHQgaW5zdGFuY2VvZiBEaWN0KXtpZihpc05hbWUodC5nZXQoIk8iKSwiTVNGVF9PZmZpY2UiKSl7Y29uc3QgZT10LmdldCgiTVNGVF9NYXRoTUwiKTtyZXR1cm4gZT9zdHJpbmdUb1BERlN0cmluZyhlKTpudWxsfX1yZXR1cm4gbnVsbH1wYXJzZUtpZHMoKXtsZXQgZT1udWxsO2NvbnN0IHQ9dGhpcy5kaWN0LmdldFJhdygiUGciKTt0IGluc3RhbmNlb2YgUmVmJiYoZT10LnRvU3RyaW5nKCkpO2NvbnN0IGE9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGNvbnN0IHQgb2YgYSl7Y29uc3QgYT10aGlzLnBhcnNlS2lkKGUsdGhpcy54cmVmLmZldGNoSWZSZWYodCkpO2EmJnRoaXMua2lkcy5wdXNoKGEpfWVsc2V7Y29uc3QgdD10aGlzLnBhcnNlS2lkKGUsYSk7dCYmdGhpcy5raWRzLnB1c2godCl9fXBhcnNlS2lkKGUsdCl7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSlyZXR1cm4gdGhpcy50cmVlLnBhZ2VEaWN0Lm9iaklkIT09ZT9udWxsOm5ldyBTdHJ1Y3RFbGVtZW50KHt0eXBlOkJuLG1jaWQ6dCxwYWdlT2JqSWQ6ZX0pO2lmKCEodCBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBudWxsO2NvbnN0IGE9dC5nZXRSYXcoIlBnIik7YSBpbnN0YW5jZW9mIFJlZiYmKGU9YS50b1N0cmluZygpKTtjb25zdCByPXQuZ2V0KCJUeXBlIilpbnN0YW5jZW9mIE5hbWU/dC5nZXQoIlR5cGUiKS5uYW1lOm51bGw7aWYoIk1DUiI9PT1yKXtpZih0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lKXJldHVybiBudWxsO2NvbnN0IGE9dC5nZXRSYXcoIlN0bSIpO3JldHVybiBuZXcgU3RydWN0RWxlbWVudCh7dHlwZTpSbixyZWZPYmpJZDphIGluc3RhbmNlb2YgUmVmP2EudG9TdHJpbmcoKTpudWxsLHBhZ2VPYmpJZDplLG1jaWQ6dC5nZXQoIk1DSUQiKX0pfWlmKCJPQkpSIj09PXIpe2lmKHRoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWUpcmV0dXJuIG51bGw7Y29uc3QgYT10LmdldFJhdygiT2JqIik7cmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHt0eXBlOk5uLHJlZk9iaklkOmEgaW5zdGFuY2VvZiBSZWY/YS50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmV9KX1yZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6UG4sZGljdDp0fSl9fWNsYXNzIFN0cnVjdEVsZW1lbnR7Y29uc3RydWN0b3Ioe3R5cGU6ZSxkaWN0OnQ9bnVsbCxtY2lkOmE9bnVsbCxwYWdlT2JqSWQ6cj1udWxsLHJlZk9iaklkOmk9bnVsbH0pe3RoaXMudHlwZT1lO3RoaXMuZGljdD10O3RoaXMubWNpZD1hO3RoaXMucGFnZU9iaklkPXI7dGhpcy5yZWZPYmpJZD1pO3RoaXMucGFyZW50Tm9kZT1udWxsfX1jbGFzcyBTdHJ1Y3RUcmVlUGFnZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMucm9vdD1lO3RoaXMueHJlZj1lPy54cmVmPz9udWxsO3RoaXMucm9vdERpY3Q9ZT8uZGljdD8/bnVsbDt0aGlzLnBhZ2VEaWN0PXQ7dGhpcy5ub2Rlcz1bXX1jb2xsZWN0T2JqZWN0cyhlKXtpZighKHRoaXMucm9vdCYmdGhpcy5yb290RGljdCYmZSBpbnN0YW5jZW9mIFJlZikpcmV0dXJuIG51bGw7Y29uc3QgdD10aGlzLnJvb3REaWN0LmdldCgiUGFyZW50VHJlZSIpO2lmKCF0KXJldHVybiBudWxsO2NvbnN0IGE9dGhpcy5yb290LnN0cnVjdFBhcmVudElkcz8uZ2V0KGUpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IHI9bmV3IE1hcCxpPW5ldyBOdW1iZXJUcmVlKHQsdGhpcy54cmVmKTtmb3IoY29uc3RbZV1vZiBhKXtjb25zdCB0PWkuZ2V0UmF3KGUpO3QgaW5zdGFuY2VvZiBSZWYmJnIuc2V0KGUsdCl9cmV0dXJuIHJ9cGFyc2UoZSl7aWYoISh0aGlzLnJvb3QmJnRoaXMucm9vdERpY3QmJmUgaW5zdGFuY2VvZiBSZWYpKXJldHVybjtjb25zdCB0PXRoaXMucm9vdERpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIXQpcmV0dXJuO2NvbnN0IGE9dGhpcy5wYWdlRGljdC5nZXQoIlN0cnVjdFBhcmVudHMiKSxyPXRoaXMucm9vdC5zdHJ1Y3RQYXJlbnRJZHM/LmdldChlKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKSYmIXIpcmV0dXJuO2NvbnN0IGk9bmV3IE1hcCxuPW5ldyBOdW1iZXJUcmVlKHQsdGhpcy54cmVmKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGEpKXtjb25zdCBlPW4uZ2V0KGEpO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IHQgb2YgZSl0IGluc3RhbmNlb2YgUmVmJiZ0aGlzLmFkZE5vZGUodGhpcy54cmVmLmZldGNoKHQpLGkpfWlmKHIpZm9yKGNvbnN0W2UsdF1vZiByKXtjb25zdCBhPW4uZ2V0KGUpO2lmKGEpe2NvbnN0IGU9dGhpcy5hZGROb2RlKHRoaXMueHJlZi5mZXRjaElmUmVmKGEpLGkpOzE9PT1lPy5raWRzPy5sZW5ndGgmJmUua2lkc1swXS50eXBlPT09Tm4mJihlLmtpZHNbMF0udHlwZT10KX19fWFkZE5vZGUoZSx0LGE9MCl7aWYoYT40MCl7d2FybigiU3RydWN0VHJlZSBNQVhfREVQVEggcmVhY2hlZC4iKTtyZXR1cm4gbnVsbH1pZighKGUgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gbnVsbDtpZih0LmhhcyhlKSlyZXR1cm4gdC5nZXQoZSk7Y29uc3Qgcj1uZXcgU3RydWN0RWxlbWVudE5vZGUodGhpcyxlKTt0LnNldChlLHIpO3N3aXRjaChyLnJvbGUpe2Nhc2UiTCI6Y2FzZSJMQm9keSI6Y2FzZSJMSSI6Y2FzZSJUYWJsZSI6Y2FzZSJUSGVhZCI6Y2FzZSJUQm9keSI6Y2FzZSJURm9vdCI6Y2FzZSJUUiI6Zm9yKGNvbnN0IGUgb2Ygci5raWRzKWUudHlwZT09PVBuJiZ0aGlzLmFkZE5vZGUoZS5kaWN0LHQsYS0xKX1jb25zdCBpPWUuZ2V0KCJQIik7aWYoIShpIGluc3RhbmNlb2YgRGljdCl8fGlzTmFtZShpLmdldCgiVHlwZSIpLCJTdHJ1Y3RUcmVlUm9vdCIpKXt0aGlzLmFkZFRvcExldmVsTm9kZShlLHIpfHx0LmRlbGV0ZShlKTtyZXR1cm4gcn1jb25zdCBuPXRoaXMuYWRkTm9kZShpLHQsYSsxKTtpZighbilyZXR1cm4gcjtsZXQgcz0hMTtmb3IoY29uc3QgdCBvZiBuLmtpZHMpaWYodC50eXBlPT09UG4mJnQuZGljdD09PWUpe3QucGFyZW50Tm9kZT1yO3M9ITB9c3x8dC5kZWxldGUoZSk7cmV0dXJuIHJ9YWRkVG9wTGV2ZWxOb2RlKGUsdCl7Y29uc3QgYT10aGlzLnJvb3QuZ2V0S2lkUG9zaXRpb24oZS5vYmpJZCk7aWYoaXNOYU4oYSkpcmV0dXJuITE7LTEhPT1hJiYodGhpcy5ub2Rlc1thXT10KTtyZXR1cm4hMH1nZXQgc2VyaWFsaXphYmxlKCl7ZnVuY3Rpb24gbm9kZVRvU2VyaWFsaXphYmxlKGUsdCxhPTApe2lmKGE+NDApe3dhcm4oIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTtyZXR1cm59Y29uc3Qgcj1PYmplY3QuY3JlYXRlKG51bGwpO3Iucm9sZT1lLnJvbGU7ci5jaGlsZHJlbj1bXTt0LmNoaWxkcmVuLnB1c2gocik7bGV0IGk9ZS5kaWN0LmdldCgiQWx0Iik7InN0cmluZyIhPXR5cGVvZiBpJiYoaT1lLmRpY3QuZ2V0KCJBY3R1YWxUZXh0IikpOyJzdHJpbmciPT10eXBlb2YgaSYmKHIuYWx0PXN0cmluZ1RvUERGU3RyaW5nKGkpKTtpZigiRm9ybXVsYSI9PT1yLnJvbGUpe2NvbnN0e21hdGhNTDp0fT1lO3QmJihyLm1hdGhNTD10KX1jb25zdCBuPWUuZGljdC5nZXQoIkEiKTtpZihuIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1sb29rdXBOb3JtYWxSZWN0KG4uZ2V0QXJyYXkoIkJCb3giKSxudWxsKTtpZihlKXIuYmJveD1lO2Vsc2V7Y29uc3QgZT1uLmdldCgiV2lkdGgiKSx0PW4uZ2V0KCJIZWlnaHQiKTsibnVtYmVyIj09dHlwZW9mIGUmJmU+MCYmIm51bWJlciI9PXR5cGVvZiB0JiZ0PjAmJihyLmJib3g9WzAsMCxlLHRdKX19Y29uc3Qgcz1lLmRpY3QuZ2V0KCJMYW5nIik7InN0cmluZyI9PXR5cGVvZiBzJiYoci5sYW5nPXN0cmluZ1RvUERGU3RyaW5nKHMpKTtmb3IoY29uc3QgdCBvZiBlLmtpZHMpe2NvbnN0IGU9dC50eXBlPT09UG4/dC5wYXJlbnROb2RlOm51bGw7ZT9ub2RlVG9TZXJpYWxpemFibGUoZSxyLGErMSk6dC50eXBlPT09Qm58fHQudHlwZT09PVJuP3IuY2hpbGRyZW4ucHVzaCh7dHlwZToiY29udGVudCIsaWQ6YHAke3QucGFnZU9iaklkfV9tYyR7dC5tY2lkfWB9KTp0LnR5cGU9PT1Obj9yLmNoaWxkcmVuLnB1c2goe3R5cGU6Im9iamVjdCIsaWQ6dC5yZWZPYmpJZH0pOnQudHlwZT09PUVuJiZyLmNoaWxkcmVuLnB1c2goe3R5cGU6ImFubm90YXRpb24iLGlkOmBwZGZqc19pbnRlcm5hbF9pZF8ke3QucmVmT2JqSWR9YH0pfX1jb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7ZS5jaGlsZHJlbj1bXTtlLnJvbGU9IlJvb3QiO2Zvcihjb25zdCB0IG9mIHRoaXMubm9kZXMpdCYmbm9kZVRvU2VyaWFsaXphYmxlKHQsZSk7cmV0dXJuIGV9fWNvbnN0IExuPWZ1bmN0aW9uIF9pc1ZhbGlkRXhwbGljaXREZXN0KGUsdCxhKXtpZighQXJyYXkuaXNBcnJheShhKXx8YS5sZW5ndGg8MilyZXR1cm4hMTtjb25zdFtyLGksLi4ubl09YTtpZighZShyKSYmIU51bWJlci5pc0ludGVnZXIocikpcmV0dXJuITE7aWYoIXQoaSkpcmV0dXJuITE7Y29uc3Qgcz1uLmxlbmd0aDtsZXQgbz0hMDtzd2l0Y2goaS5uYW1lKXtjYXNlIlhZWiI6aWYoczwyfHxzPjMpcmV0dXJuITE7YnJlYWs7Y2FzZSJGaXQiOmNhc2UiRml0QiI6cmV0dXJuIDA9PT1zO2Nhc2UiRml0SCI6Y2FzZSJGaXRCSCI6Y2FzZSJGaXRWIjpjYXNlIkZpdEJWIjppZihzPjEpcmV0dXJuITE7YnJlYWs7Y2FzZSJGaXRSIjppZig0IT09cylyZXR1cm4hMTtvPSExO2JyZWFrO2RlZmF1bHQ6cmV0dXJuITF9Zm9yKGNvbnN0IGUgb2YgbilpZighKCJudW1iZXIiPT10eXBlb2YgZXx8byYmbnVsbD09PWUpKXJldHVybiExO3JldHVybiEwfS5iaW5kKG51bGwsZT0+ZSBpbnN0YW5jZW9mIFJlZixpc05hbWUpO2Z1bmN0aW9uIGZldGNoRGVzdChlKXtlIGluc3RhbmNlb2YgRGljdCYmKGU9ZS5nZXQoIkQiKSk7cmV0dXJuIExuKGUpP2U6bnVsbH1mdW5jdGlvbiBmZXRjaFJlbW90ZURlc3QoZSl7bGV0IHQ9ZS5nZXQoIkQiKTtpZih0KXt0IGluc3RhbmNlb2YgTmFtZSYmKHQ9dC5uYW1lKTtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHN0cmluZ1RvUERGU3RyaW5nKHQsITApO2lmKExuKHQpKXJldHVybiBKU09OLnN0cmluZ2lmeSh0KX1yZXR1cm4gbnVsbH1jbGFzcyBDYXRhbG9neyNTZT1udWxsOyNBZT1udWxsO2J1aWx0SW5DTWFwQ2FjaGU9bmV3IE1hcDtmb250Q2FjaGU9bmV3IFJlZlNldENhY2hlO2dsb2JhbENvbG9yU3BhY2VDYWNoZT1uZXcgR2xvYmFsQ29sb3JTcGFjZUNhY2hlO2dsb2JhbEltYWdlQ2FjaGU9bmV3IEdsb2JhbEltYWdlQ2FjaGU7bm9uQmxlbmRNb2Rlc1NldD1uZXcgUmVmU2V0O3BhZ2VEaWN0Q2FjaGU9bmV3IFJlZlNldENhY2hlO3BhZ2VJbmRleENhY2hlPW5ldyBSZWZTZXRDYWNoZTtwYWdlS2lkc0NvdW50Q2FjaGU9bmV3IFJlZlNldENhY2hlO3N0YW5kYXJkRm9udERhdGFDYWNoZT1uZXcgTWFwO3N5c3RlbUZvbnRDYWNoZT1uZXcgTWFwO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wZGZNYW5hZ2VyPWU7dGhpcy54cmVmPXQ7dGhpcy4jQWU9dC5nZXRDYXRhbG9nT2JqKCk7aWYoISh0aGlzLiNBZSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiQ2F0YWxvZyBvYmplY3QgaXMgbm90IGEgZGljdGlvbmFyeS4iKTt0aGlzLnRvcGxldmVsUGFnZXNEaWN0fWNsb25lRGljdCgpe3JldHVybiB0aGlzLiNBZS5jbG9uZSgpfWdldCB2ZXJzaW9uKCl7Y29uc3QgZT10aGlzLiNBZS5nZXQoIlZlcnNpb24iKTtpZihlIGluc3RhbmNlb2YgTmFtZSl7aWYodWEudGVzdChlLm5hbWUpKXJldHVybiBzaGFkb3codGhpcywidmVyc2lvbiIsZS5uYW1lKTt3YXJuKGBJbnZhbGlkIFBERiBjYXRhbG9nIHZlcnNpb246ICR7ZS5uYW1lfWApfXJldHVybiBzaGFkb3codGhpcywidmVyc2lvbiIsbnVsbCl9Z2V0IGxhbmcoKXtjb25zdCBlPXRoaXMuI0FlLmdldCgiTGFuZyIpO3JldHVybiBzaGFkb3codGhpcywibGFuZyIsZSYmInN0cmluZyI9PXR5cGVvZiBlP3N0cmluZ1RvUERGU3RyaW5nKGUpOm51bGwpfWdldCBuZWVkc1JlbmRlcmluZygpe2NvbnN0IGU9dGhpcy4jQWUuZ2V0KCJOZWVkc1JlbmRlcmluZyIpO3JldHVybiBzaGFkb3codGhpcywibmVlZHNSZW5kZXJpbmciLCJib29sZWFuIj09dHlwZW9mIGUmJmUpfWdldCBjb2xsZWN0aW9uKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLiNBZS5nZXQoIkNvbGxlY3Rpb24iKTt0IGluc3RhbmNlb2YgRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO2luZm8oIkNhbm5vdCBmZXRjaCBDb2xsZWN0aW9uIGVudHJ5OyBhc3N1bWluZyBubyBjb2xsZWN0aW9uIGlzIHByZXNlbnQuIil9cmV0dXJuIHNoYWRvdyh0aGlzLCJjb2xsZWN0aW9uIixlKX1nZXQgYWNyb0Zvcm0oKXtsZXQgZT1udWxsO3RyeXtjb25zdCB0PXRoaXMuI0FlLmdldCgiQWNyb0Zvcm0iKTt0IGluc3RhbmNlb2YgRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO2luZm8oIkNhbm5vdCBmZXRjaCBBY3JvRm9ybSBlbnRyeTsgYXNzdW1pbmcgbm8gZm9ybXMgYXJlIHByZXNlbnQuIil9cmV0dXJuIHNoYWRvdyh0aGlzLCJhY3JvRm9ybSIsZSl9Z2V0IGFjcm9Gb3JtUmVmKCl7Y29uc3QgZT10aGlzLiNBZS5nZXRSYXcoIkFjcm9Gb3JtIik7cmV0dXJuIHNoYWRvdyh0aGlzLCJhY3JvRm9ybVJlZiIsZSBpbnN0YW5jZW9mIFJlZj9lOm51bGwpfWdldCBtZXRhZGF0YSgpe2NvbnN0IGU9dGhpcy4jQWUuZ2V0UmF3KCJNZXRhZGF0YSIpO2lmKCEoZSBpbnN0YW5jZW9mIFJlZikpcmV0dXJuIHNoYWRvdyh0aGlzLCJtZXRhZGF0YSIsbnVsbCk7bGV0IHQ9bnVsbDt0cnl7Y29uc3QgYT10aGlzLnhyZWYuZmV0Y2goZSwhdGhpcy54cmVmLmVuY3J5cHQ/LmVuY3J5cHRNZXRhZGF0YSk7aWYoYSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJmEuZGljdCBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9YS5kaWN0LmdldCgiVHlwZSIpLHI9YS5kaWN0LmdldCgiU3VidHlwZSIpO2lmKGlzTmFtZShlLCJNZXRhZGF0YSIpJiZpc05hbWUociwiWE1MIikpe2NvbnN0IGU9c3RyaW5nVG9VVEY4U3RyaW5nKGEuZ2V0U3RyaW5nKCkpO2UmJih0PW5ldyBNZXRhZGF0YVBhcnNlcihlKS5zZXJpYWxpemFibGUpfX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7aW5mbyhgU2tpcHBpbmcgaW52YWxpZCBNZXRhZGF0YTogIiR7ZX0iLmApfXJldHVybiBzaGFkb3codGhpcywibWV0YWRhdGEiLHQpfWdldCBtYXJrSW5mbygpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy4ja2UoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKCJVbmFibGUgdG8gcmVhZCBtYXJrIGluZm8uIil9cmV0dXJuIHNoYWRvdyh0aGlzLCJtYXJrSW5mbyIsZSl9I2tlKCl7Y29uc3QgZT10aGlzLiNBZS5nZXQoIk1hcmtJbmZvIik7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgdD17TWFya2VkOiExLFVzZXJQcm9wZXJ0aWVzOiExLFN1c3BlY3RzOiExfTtmb3IoY29uc3QgYSBpbiB0KXtjb25zdCByPWUuZ2V0KGEpOyJib29sZWFuIj09dHlwZW9mIHImJih0W2FdPXIpfXJldHVybiB0fWdldCBzdHJ1Y3RUcmVlUm9vdCgpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy4jQ2UoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybiBzaGFkb3codGhpcywic3RydWN0VHJlZVJvb3QiLGUpfSNDZSgpe2NvbnN0IGU9dGhpcy4jQWUuZ2V0UmF3KCJTdHJ1Y3RUcmVlUm9vdCIpLHQ9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7aWYoISh0IGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgU3RydWN0VHJlZVJvb3QodGhpcy54cmVmLHQsZSk7YS5pbml0KCk7cmV0dXJuIGF9Z2V0IHRvcGxldmVsUGFnZXNEaWN0KCl7Y29uc3QgZT10aGlzLiNBZS5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHRvcC1sZXZlbCBwYWdlcyBkaWN0aW9uYXJ5LiIpO3JldHVybiBzaGFkb3codGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfWdldCBkb2N1bWVudE91dGxpbmUoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuI3ZlKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybigiVW5hYmxlIHRvIHJlYWQgZG9jdW1lbnQgb3V0bGluZS4iKX1yZXR1cm4gc2hhZG93KHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9I3ZlKCl7bGV0IGU9dGhpcy4jQWUuZ2V0KCJPdXRsaW5lcyIpO2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBudWxsO2U9ZS5nZXRSYXcoIkZpcnN0Iik7aWYoIShlIGluc3RhbmNlb2YgUmVmKSlyZXR1cm4gbnVsbDtjb25zdCB0PXtpdGVtczpbXX0sYT1be29iajplLHBhcmVudDp0fV0scj1uZXcgUmVmU2V0O3IucHV0KGUpO2NvbnN0IGk9dGhpcy54cmVmLG49bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO2Zvcig7YS5sZW5ndGg+MDspe2NvbnN0IHQ9YS5zaGlmdCgpLHM9aS5mZXRjaElmUmVmKHQub2JqKTtpZihudWxsPT09cyljb250aW51ZTtzLmhhcygiVGl0bGUiKXx8d2FybigiSW52YWxpZCBvdXRsaW5lIGl0ZW0gZW5jb3VudGVyZWQuIik7Y29uc3Qgbz17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OnMscmVzdWx0T2JqOm8sZG9jQmFzZVVybDp0aGlzLmJhc2VVcmwsZG9jQXR0YWNobWVudHM6dGhpcy5hdHRhY2htZW50c30pO2NvbnN0IGM9cy5nZXQoIlRpdGxlIiksbD1zLmdldCgiRiIpfHwwLGg9cy5nZXRBcnJheSgiQyIpLHU9cy5nZXQoIkNvdW50Iik7bGV0IGQ9bjshaXNOdW1iZXJBcnJheShoLDMpfHwwPT09aFswXSYmMD09PWhbMV0mJjA9PT1oWzJdfHwoZD1Db2xvclNwYWNlVXRpbHMucmdiLmdldFJnYihoLDApKTtjb25zdCBmPXthY3Rpb246by5hY3Rpb24sYXR0YWNobWVudDpvLmF0dGFjaG1lbnQsZGVzdDpvLmRlc3QsdXJsOm8udXJsLHVuc2FmZVVybDpvLnVuc2FmZVVybCxuZXdXaW5kb3c6by5uZXdXaW5kb3csc2V0T0NHU3RhdGU6by5zZXRPQ0dTdGF0ZSx0aXRsZToic3RyaW5nIj09dHlwZW9mIGM/c3RyaW5nVG9QREZTdHJpbmcoYyk6IiIsY29sb3I6ZCxjb3VudDpOdW1iZXIuaXNJbnRlZ2VyKHUpP3U6dm9pZCAwLGJvbGQ6ISEoMiZsKSxpdGFsaWM6ISEoMSZsKSxpdGVtczpbXX07dC5wYXJlbnQuaXRlbXMucHVzaChmKTtlPXMuZ2V0UmF3KCJGaXJzdCIpO2lmKGUgaW5zdGFuY2VvZiBSZWYmJiFyLmhhcyhlKSl7YS5wdXNoKHtvYmo6ZSxwYXJlbnQ6Zn0pO3IucHV0KGUpfWU9cy5nZXRSYXcoIk5leHQiKTtpZihlIGluc3RhbmNlb2YgUmVmJiYhci5oYXMoZSkpe2EucHVzaCh7b2JqOmUscGFyZW50OnQucGFyZW50fSk7ci5wdXQoZSl9fXJldHVybiB0Lml0ZW1zLmxlbmd0aD4wP3QuaXRlbXM6bnVsbH1nZXQgcGVybWlzc2lvbnMoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuI0ZlKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybigiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuIHNoYWRvdyh0aGlzLCJwZXJtaXNzaW9ucyIsZSl9I0ZlKCl7Y29uc3QgZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkVuY3J5cHQiKTtpZighKGUgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gbnVsbDtsZXQgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz0yKiozMjtjb25zdCBhPVtdO2Zvcihjb25zdCBlIGluIHcpe2NvbnN0IHI9d1tlXTt0JnImJmEucHVzaChyKX1yZXR1cm4gYX1nZXQgb3B0aW9uYWxDb250ZW50Q29uZmlnKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLiNBZS5nZXQoIk9DUHJvcGVydGllcyIpO2lmKCF0KXJldHVybiBzaGFkb3codGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTtjb25zdCBhPXQuZ2V0KCJEIik7aWYoIWEpcmV0dXJuIHNoYWRvdyh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO2NvbnN0IHI9dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gc2hhZG93KHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7Y29uc3QgaT1uZXcgUmVmU2V0Q2FjaGU7Zm9yKGNvbnN0IGUgb2YgcillIGluc3RhbmNlb2YgUmVmJiYhaS5oYXMoZSkmJmkucHV0KGUsdGhpcy4jSWUoZSkpO2U9dGhpcy4jVGUoYSxpKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKGBVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogJHtlfWApfXJldHVybiBzaGFkb3codGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixlKX0jSWUoZSl7Y29uc3QgdD10aGlzLnhyZWYuZmV0Y2goZSksYT17aWQ6ZS50b1N0cmluZygpLG5hbWU6bnVsbCxpbnRlbnQ6bnVsbCx1c2FnZTp7cHJpbnQ6bnVsbCx2aWV3Om51bGx9LHJiR3JvdXBzOltdfSxyPXQuZ2V0KCJOYW1lIik7InN0cmluZyI9PXR5cGVvZiByJiYoYS5uYW1lPXN0cmluZ1RvUERGU3RyaW5nKHIpKTtsZXQgaT10LmdldEFycmF5KCJJbnRlbnQiKTtBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pO2kuZXZlcnkoZT0+ZSBpbnN0YW5jZW9mIE5hbWUpJiYoYS5pbnRlbnQ9aS5tYXAoZT0+ZS5uYW1lKSk7Y29uc3Qgbj10LmdldCgiVXNhZ2UiKTtpZighKG4gaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gYTtjb25zdCBzPWEudXNhZ2Usbz1uLmdldCgiUHJpbnQiKTtpZihvIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1vLmdldCgiUHJpbnRTdGF0ZSIpO2lmKGUgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiT04iOmNhc2UiT0ZGIjpzLnByaW50PXtwcmludFN0YXRlOmUubmFtZX19fWNvbnN0IGM9bi5nZXQoIlZpZXciKTtpZihjIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1jLmdldCgiVmlld1N0YXRlIik7aWYoZSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJPTiI6Y2FzZSJPRkYiOnMudmlldz17dmlld1N0YXRlOmUubmFtZX19fXJldHVybiBhfSNUZShlLHQpe2Z1bmN0aW9uIHBhcnNlT25PZmYoZSl7Y29uc3QgYT1bXTtpZihBcnJheS5pc0FycmF5KGUpKWZvcihjb25zdCByIG9mIGUpciBpbnN0YW5jZW9mIFJlZiYmdC5oYXMocikmJmEucHVzaChyLnRvU3RyaW5nKCkpO3JldHVybiBhfWZ1bmN0aW9uIHBhcnNlT3JkZXIoZSxhPTApe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO2NvbnN0IGk9W107Zm9yKGNvbnN0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIFJlZiYmdC5oYXMobikpe3IucHV0KG4pO2kucHVzaChuLnRvU3RyaW5nKCkpO2NvbnRpbnVlfWNvbnN0IGU9cGFyc2VOZXN0ZWRPcmRlcihuLGEpO2UmJmkucHVzaChlKX1pZihhPjApcmV0dXJuIGk7Y29uc3Qgbj1bXTtmb3IoY29uc3RbZV1vZiB0Lml0ZW1zKCkpci5oYXMoZSl8fG4ucHVzaChlLnRvU3RyaW5nKCkpO24ubGVuZ3RoJiZpLnB1c2goe25hbWU6bnVsbCxvcmRlcjpufSk7cmV0dXJuIGl9ZnVuY3Rpb24gcGFyc2VOZXN0ZWRPcmRlcihlLHQpe2lmKCsrdD5pKXt3YXJuKCJwYXJzZU5lc3RlZE9yZGVyIC0gcmVhY2hlZCBNQVhfTkVTVEVEX0xFVkVMUy4iKTtyZXR1cm4gbnVsbH1jb25zdCByPWEuZmV0Y2hJZlJlZihlKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gbnVsbDtjb25zdCBuPWEuZmV0Y2hJZlJlZihyWzBdKTtpZigic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIG51bGw7Y29uc3Qgcz1wYXJzZU9yZGVyKHIuc2xpY2UoMSksdCk7cmV0dXJuIHM/Lmxlbmd0aD97bmFtZTpzdHJpbmdUb1BERlN0cmluZyhuKSxvcmRlcjpzfTpudWxsfWNvbnN0IGE9dGhpcy54cmVmLHI9bmV3IFJlZlNldCxpPTEwOyFmdW5jdGlvbiBwYXJzZVJCR3JvdXBzKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IHIgb2YgZSl7Y29uc3QgZT1hLmZldGNoSWZSZWYocik7aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFlLmxlbmd0aCljb250aW51ZTtjb25zdCBpPW5ldyBTZXQ7Zm9yKGNvbnN0IGEgb2YgZSlpZihhIGluc3RhbmNlb2YgUmVmJiZ0LmhhcyhhKSYmIWkuaGFzKGEudG9TdHJpbmcoKSkpe2kuYWRkKGEudG9TdHJpbmcoKSk7dC5nZXQoYSkucmJHcm91cHMucHVzaChpKX19fShlLmdldCgiUkJHcm91cHMiKSk7cmV0dXJue25hbWU6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiTmFtZSIpP3N0cmluZ1RvUERGU3RyaW5nKGUuZ2V0KCJOYW1lIikpOm51bGwsY3JlYXRvcjoic3RyaW5nIj09dHlwZW9mIGUuZ2V0KCJDcmVhdG9yIik/c3RyaW5nVG9QREZTdHJpbmcoZS5nZXQoIkNyZWF0b3IiKSk6bnVsbCxiYXNlU3RhdGU6ZS5nZXQoIkJhc2VTdGF0ZSIpaW5zdGFuY2VvZiBOYW1lP2UuZ2V0KCJCYXNlU3RhdGUiKS5uYW1lOm51bGwsb246cGFyc2VPbk9mZihlLmdldCgiT04iKSksb2ZmOnBhcnNlT25PZmYoZS5nZXQoIk9GRiIpKSxvcmRlcjpwYXJzZU9yZGVyKGUuZ2V0KCJPcmRlciIpKSxncm91cHM6Wy4uLnRdfX1zZXRBY3R1YWxOdW1QYWdlcyhlPW51bGwpe3RoaXMuI1NlPWV9Z2V0IGhhc0FjdHVhbE51bVBhZ2VzKCl7cmV0dXJuIG51bGwhPT10aGlzLiNTZX1nZXQgX3BhZ2VzQ291bnQoKXtjb25zdCBlPXRoaXMudG9wbGV2ZWxQYWdlc0RpY3QuZ2V0KCJDb3VudCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpbiB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeSBpcyBub3QgYW4gaW50ZWdlci4iKTtyZXR1cm4gc2hhZG93KHRoaXMsIl9wYWdlc0NvdW50IixlKX1nZXQgbnVtUGFnZXMoKXtyZXR1cm4gdGhpcy4jU2U/P3RoaXMuX3BhZ2VzQ291bnR9Z2V0IGRlc3RpbmF0aW9ucygpe2NvbnN0IGU9dGhpcy4jT2UoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IGEgb2YgZSlpZihhIGluc3RhbmNlb2YgTmFtZVRyZWUpZm9yKGNvbnN0W2Uscl1vZiBhLmdldEFsbCgpKXtjb25zdCBhPWZldGNoRGVzdChyKTthJiYodFtzdHJpbmdUb1BERlN0cmluZyhlLCEwKV09YSl9ZWxzZSBpZihhIGluc3RhbmNlb2YgRGljdClmb3IoY29uc3RbZSxyXW9mIGEpe2NvbnN0IGE9ZmV0Y2hEZXN0KHIpO2EmJih0W3N0cmluZ1RvUERGU3RyaW5nKGUsITApXXx8PWEpfXJldHVybiBzaGFkb3codGhpcywiZGVzdGluYXRpb25zIix0KX1nZXREZXN0aW5hdGlvbihlKXtpZih0aGlzLmhhc093blByb3BlcnR5KCJkZXN0aW5hdGlvbnMiKSlyZXR1cm4gdGhpcy5kZXN0aW5hdGlvbnNbZV0/P251bGw7Y29uc3QgdD10aGlzLiNPZSgpO2Zvcihjb25zdCBhIG9mIHQpaWYoYSBpbnN0YW5jZW9mIE5hbWVUcmVlfHxhIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgdD1mZXRjaERlc3QoYS5nZXQoZSkpO2lmKHQpcmV0dXJuIHR9aWYodC5sZW5ndGgpe2NvbnN0IHQ9dGhpcy5kZXN0aW5hdGlvbnNbZV07aWYodClyZXR1cm4gdH1yZXR1cm4gbnVsbH0jT2UoKXtjb25zdCBlPXRoaXMuI0FlLmdldCgiTmFtZXMiKSx0PVtdO2U/LmhhcygiRGVzdHMiKSYmdC5wdXNoKG5ldyBOYW1lVHJlZShlLmdldFJhdygiRGVzdHMiKSx0aGlzLnhyZWYpKTt0aGlzLiNBZS5oYXMoIkRlc3RzIikmJnQucHVzaCh0aGlzLiNBZS5nZXQoIkRlc3RzIikpO3JldHVybiB0fWdldCBwYWdlTGFiZWxzKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLiNNZSgpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3dhcm4oIlVuYWJsZSB0byByZWFkIHBhZ2UgbGFiZWxzLiIpfXJldHVybiBzaGFkb3codGhpcywicGFnZUxhYmVscyIsZSl9I01lKCl7Y29uc3QgZT10aGlzLiNBZS5nZXRSYXcoIlBhZ2VMYWJlbHMiKTtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKTtsZXQgYT1udWxsLHI9IiI7Y29uc3QgaT1uZXcgTnVtYmVyVHJlZShlLHRoaXMueHJlZikuZ2V0QWxsKCk7bGV0IG49IiIscz0xO2ZvcihsZXQgZT0wLG89dGhpcy5udW1QYWdlcztlPG87ZSsrKXtjb25zdCBvPWkuZ2V0KGUpO2lmKHZvaWQgMCE9PW8pe2lmKCEobyBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYoby5oYXMoIlR5cGUiKSYmIWlzTmFtZShvLmdldCgiVHlwZSIpLCJQYWdlTGFiZWwiKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgdHlwZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtpZihvLmhhcygiUyIpKXtjb25zdCBlPW8uZ2V0KCJTIik7aWYoIShlIGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2E9ZS5uYW1lfWVsc2UgYT1udWxsO2lmKG8uaGFzKCJQIikpe2NvbnN0IGU9by5nZXQoIlAiKTtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHByZWZpeCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtyPXN0cmluZ1RvUERGU3RyaW5nKGUpfWVsc2Ugcj0iIjtpZihvLmhhcygiU3QiKSl7Y29uc3QgZT1vLmdldCgiU3QiKTtpZighKE51bWJlci5pc0ludGVnZXIoZSkmJmU+PTEpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtzPWV9ZWxzZSBzPTF9c3dpdGNoKGEpe2Nhc2UiRCI6bj1zO2JyZWFrO2Nhc2UiUiI6Y2FzZSJyIjpuPXRvUm9tYW5OdW1lcmFscyhzLCJyIj09PWEpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjb25zdCBlPTI2LHQ9ImEiPT09YT85Nzo2NSxyPXMtMTtuPVN0cmluZy5mcm9tQ2hhckNvZGUodCtyJWUpLnJlcGVhdChNYXRoLmZsb29yKHIvZSkrMSk7YnJlYWs7ZGVmYXVsdDppZihhKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBzdHlsZSAiJHthfSIgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuYCk7bj0iIn10W2VdPXIrbjtzKyt9cmV0dXJuIHR9Z2V0IHBhZ2VMYXlvdXQoKXtjb25zdCBlPXRoaXMuI0FlLmdldCgiUGFnZUxheW91dCIpO2xldCB0PSIiO2lmKGUgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiU2luZ2xlUGFnZSI6Y2FzZSJPbmVDb2x1bW4iOmNhc2UiVHdvQ29sdW1uTGVmdCI6Y2FzZSJUd29Db2x1bW5SaWdodCI6Y2FzZSJUd29QYWdlTGVmdCI6Y2FzZSJUd29QYWdlUmlnaHQiOnQ9ZS5uYW1lfXJldHVybiBzaGFkb3codGhpcywicGFnZUxheW91dCIsdCl9Z2V0IHBhZ2VNb2RlKCl7Y29uc3QgZT10aGlzLiNBZS5nZXQoIlBhZ2VNb2RlIik7bGV0IHQ9IlVzZU5vbmUiO2lmKGUgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiVXNlTm9uZSI6Y2FzZSJVc2VPdXRsaW5lcyI6Y2FzZSJVc2VUaHVtYnMiOmNhc2UiRnVsbFNjcmVlbiI6Y2FzZSJVc2VPQyI6Y2FzZSJVc2VBdHRhY2htZW50cyI6dD1lLm5hbWV9cmV0dXJuIHNoYWRvdyh0aGlzLCJwYWdlTW9kZSIsdCl9Z2V0IHZpZXdlclByZWZlcmVuY2VzKCl7Y29uc3QgZT10aGlzLiNBZS5nZXQoIlZpZXdlclByZWZlcmVuY2VzIik7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIHNoYWRvdyh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsbnVsbCk7bGV0IHQ9bnVsbDtmb3IoY29uc3RbYSxyXW9mIGUpe2xldCBlO3N3aXRjaChhKXtjYXNlIkhpZGVUb29sYmFyIjpjYXNlIkhpZGVNZW51YmFyIjpjYXNlIkhpZGVXaW5kb3dVSSI6Y2FzZSJGaXRXaW5kb3ciOmNhc2UiQ2VudGVyV2luZG93IjpjYXNlIkRpc3BsYXlEb2NUaXRsZSI6Y2FzZSJQaWNrVHJheUJ5UERGU2l6ZSI6ImJvb2xlYW4iPT10eXBlb2YgciYmKGU9cik7YnJlYWs7Y2FzZSJOb25GdWxsU2NyZWVuUGFnZU1vZGUiOmlmKHIgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiVXNlTm9uZSI6Y2FzZSJVc2VPdXRsaW5lcyI6Y2FzZSJVc2VUaHVtYnMiOmNhc2UiVXNlT0MiOmU9ci5uYW1lO2JyZWFrO2RlZmF1bHQ6ZT0iVXNlTm9uZSJ9YnJlYWs7Y2FzZSJEaXJlY3Rpb24iOmlmKHIgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiTDJSIjpjYXNlIlIyTCI6ZT1yLm5hbWU7YnJlYWs7ZGVmYXVsdDplPSJMMlIifWJyZWFrO2Nhc2UiVmlld0FyZWEiOmNhc2UiVmlld0NsaXAiOmNhc2UiUHJpbnRBcmVhIjpjYXNlIlByaW50Q2xpcCI6aWYociBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJNZWRpYUJveCI6Y2FzZSJDcm9wQm94IjpjYXNlIkJsZWVkQm94IjpjYXNlIlRyaW1Cb3giOmNhc2UiQXJ0Qm94IjplPXIubmFtZTticmVhaztkZWZhdWx0OmU9IkNyb3BCb3gifWJyZWFrO2Nhc2UiUHJpbnRTY2FsaW5nIjppZihyIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIk5vbmUiOmNhc2UiQXBwRGVmYXVsdCI6ZT1yLm5hbWU7YnJlYWs7ZGVmYXVsdDplPSJBcHBEZWZhdWx0In1icmVhaztjYXNlIkR1cGxleCI6aWYociBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJTaW1wbGV4IjpjYXNlIkR1cGxleEZsaXBTaG9ydEVkZ2UiOmNhc2UiRHVwbGV4RmxpcExvbmdFZGdlIjplPXIubmFtZTticmVhaztkZWZhdWx0OmU9Ik5vbmUifWJyZWFrO2Nhc2UiUHJpbnRQYWdlUmFuZ2UiOmlmKEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoJTI9PTApe3IuZXZlcnkoKGUsdCxhKT0+TnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wJiYoMD09PXR8fGU+PWFbdC0xXSkmJmU8PXRoaXMubnVtUGFnZXMpJiYoZT1yKX1icmVhaztjYXNlIk51bUNvcGllcyI6TnVtYmVyLmlzSW50ZWdlcihyKSYmcj4wJiYoZT1yKTticmVhaztkZWZhdWx0Ondhcm4oYElnbm9yaW5nIG5vbi1zdGFuZGFyZCBrZXkgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICR7YX0uYCk7Y29udGludWV9aWYodm9pZCAwIT09ZSl7dD8/PU9iamVjdC5jcmVhdGUobnVsbCk7dFthXT1lfWVsc2Ugd2FybihgQmFkIHZhbHVlLCBmb3Iga2V5ICIke2F9IiwgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICR7cn0uYCl9cmV0dXJuIHNoYWRvdyh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsdCl9Z2V0IG9wZW5BY3Rpb24oKXtjb25zdCBlPXRoaXMuI0FlLmdldCgiT3BlbkFjdGlvbiIpLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgYT1uZXcgRGljdCh0aGlzLnhyZWYpO2Euc2V0KCJBIixlKTtjb25zdCByPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6YSxyZXN1bHRPYmo6cn0pO0FycmF5LmlzQXJyYXkoci5kZXN0KT90LmRlc3Q9ci5kZXN0OnIuYWN0aW9uJiYodC5hY3Rpb249ci5hY3Rpb24pfWVsc2UgTG4oZSkmJih0LmRlc3Q9ZSk7cmV0dXJuIHNoYWRvdyh0aGlzLCJvcGVuQWN0aW9uIixvYmplY3RTaXplKHQpPjA/dDpudWxsKX1nZXQgYXR0YWNobWVudHMoKXtjb25zdCBlPXRoaXMuI0FlLmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBEaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXtjb25zdCBhPW5ldyBOYW1lVHJlZShlLmdldFJhdygiRW1iZWRkZWRGaWxlcyIpLHRoaXMueHJlZik7Zm9yKGNvbnN0W2Uscl1vZiBhLmdldEFsbCgpKXtjb25zdCBhPW5ldyBGaWxlU3BlYyhyLHRoaXMueHJlZik7dD8/PU9iamVjdC5jcmVhdGUobnVsbCk7dFtzdHJpbmdUb1BERlN0cmluZyhlLCEwKV09YS5zZXJpYWxpemFibGV9fXJldHVybiBzaGFkb3codGhpcywiYXR0YWNobWVudHMiLHQpfWdldCB4ZmFJbWFnZXMoKXtjb25zdCBlPXRoaXMuI0FlLmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBEaWN0JiZlLmhhcygiWEZBSW1hZ2VzIikpe2NvbnN0IGE9bmV3IE5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLHJdb2YgYS5nZXRBbGwoKSlpZihyIGluc3RhbmNlb2YgQmFzZVN0cmVhbSl7dD8/PW5ldyBNYXA7dC5zZXQoc3RyaW5nVG9QREZTdHJpbmcoZSwhMCksci5nZXRCeXRlcygpKX19cmV0dXJuIHNoYWRvdyh0aGlzLCJ4ZmFJbWFnZXMiLHQpfSNEZSgpe2NvbnN0IGU9dGhpcy4jQWUuZ2V0KCJOYW1lcyIpO2xldCB0PW51bGw7ZnVuY3Rpb24gYXBwZW5kSWZKYXZhU2NyaXB0RGljdChlLGEpe2lmKCEoYSBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtpZighaXNOYW1lKGEuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSlyZXR1cm47bGV0IHI9YS5nZXQoIkpTIik7aWYociBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pcj1yLmdldFN0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiByKXJldHVybjtyPXN0cmluZ1RvUERGU3RyaW5nKHIsITApLnJlcGxhY2VBbGwoIlwwIiwiIik7ciYmKHR8fD1uZXcgTWFwKS5zZXQoZSxyKX1pZihlIGluc3RhbmNlb2YgRGljdCYmZS5oYXMoIkphdmFTY3JpcHQiKSl7Y29uc3QgdD1uZXcgTmFtZVRyZWUoZS5nZXRSYXcoIkphdmFTY3JpcHQiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLGFdb2YgdC5nZXRBbGwoKSlhcHBlbmRJZkphdmFTY3JpcHREaWN0KHN0cmluZ1RvUERGU3RyaW5nKGUsITApLGEpfWNvbnN0IGE9dGhpcy4jQWUuZ2V0KCJPcGVuQWN0aW9uIik7YSYmYXBwZW5kSWZKYXZhU2NyaXB0RGljdCgiT3BlbkFjdGlvbiIsYSk7cmV0dXJuIHR9Z2V0IGpzQWN0aW9ucygpe2NvbnN0IGU9dGhpcy4jRGUoKTtsZXQgdD1jb2xsZWN0QWN0aW9ucyh0aGlzLnhyZWYsdGhpcy4jQWUsbmUpO2lmKGUpe3R8fD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFthLHJdb2YgZSlhIGluIHQ/dFthXS5wdXNoKHIpOnRbYV09W3JdfXJldHVybiBzaGFkb3codGhpcywianNBY3Rpb25zIix0KX1hc3luYyBjbGVhbnVwKGU9ITEpe2NsZWFyR2xvYmFsQ2FjaGVzKCk7dGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUuY2xlYXIoKTt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIoZSk7dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKTt0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCk7dGhpcy5wYWdlRGljdENhY2hlLmNsZWFyKCk7dGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCk7Zm9yKGNvbnN0e2RpY3Q6ZX1vZiBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmZvbnRDYWNoZSkpZGVsZXRlIGUuY2FjaGVLZXk7dGhpcy5mb250Q2FjaGUuY2xlYXIoKTt0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuY2xlYXIoKTt0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpO3RoaXMuc3lzdGVtRm9udENhY2hlLmNsZWFyKCl9YXN5bmMgZ2V0UGFnZURpY3QoZSl7Y29uc3QgdD1bdGhpcy50b3BsZXZlbFBhZ2VzRGljdF0sYT1uZXcgUmVmU2V0LHI9dGhpcy4jQWUuZ2V0UmF3KCJQYWdlcyIpO3IgaW5zdGFuY2VvZiBSZWYmJmEucHV0KHIpO2NvbnN0IGk9dGhpcy54cmVmLG49dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUscz10aGlzLnBhZ2VJbmRleENhY2hlLG89dGhpcy5wYWdlRGljdENhY2hlO2xldCBjPTA7Zm9yKDt0Lmxlbmd0aDspe2NvbnN0IHI9dC5wb3AoKTtpZihyIGluc3RhbmNlb2YgUmVmKXtjb25zdCBsPW4uZ2V0KHIpO2lmKGw+PTAmJmMrbDw9ZSl7Yys9bDtjb250aW51ZX1pZihhLmhhcyhyKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlBhZ2VzIHRyZWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlLiIpO2EucHV0KHIpO2NvbnN0IGg9YXdhaXQoby5nZXQocil8fGkuZmV0Y2hBc3luYyhyKSk7aWYoaCBpbnN0YW5jZW9mIERpY3Qpe2xldCB0PWguZ2V0UmF3KCJUeXBlIik7dCBpbnN0YW5jZW9mIFJlZiYmKHQ9YXdhaXQgaS5mZXRjaEFzeW5jKHQpKTtpZihpc05hbWUodCwiUGFnZSIpfHwhaC5oYXMoIktpZHMiKSl7bi5oYXMocil8fG4ucHV0KHIsMSk7cy5oYXMocil8fHMucHV0KHIsYyk7aWYoYz09PWUpcmV0dXJuW2gscl07YysrO2NvbnRpbnVlfX10LnB1c2goaCk7Y29udGludWV9aWYoIShyIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkIHJlZmVyZW5jZSBwb2ludHMgdG8gd3JvbmcgdHlwZSBvZiBvYmplY3QuIik7Y29uc3R7b2JqSWQ6bH09cjtsZXQgaD1yLmdldFJhdygiQ291bnQiKTtoIGluc3RhbmNlb2YgUmVmJiYoaD1hd2FpdCBpLmZldGNoQXN5bmMoaCkpO2lmKE51bWJlci5pc0ludGVnZXIoaCkmJmg+PTApe2wmJiFuLmhhcyhsKSYmbi5wdXQobCxoKTtpZihjK2g8PWUpe2MrPWg7Y29udGludWV9fWxldCB1PXIuZ2V0UmF3KCJLaWRzIik7dSBpbnN0YW5jZW9mIFJlZiYmKHU9YXdhaXQgaS5mZXRjaEFzeW5jKHUpKTtpZighQXJyYXkuaXNBcnJheSh1KSl7bGV0IHQ9ci5nZXRSYXcoIlR5cGUiKTt0IGluc3RhbmNlb2YgUmVmJiYodD1hd2FpdCBpLmZldGNoQXN5bmModCkpO2lmKGlzTmFtZSh0LCJQYWdlIil8fCFyLmhhcygiS2lkcyIpKXtpZihjPT09ZSlyZXR1cm5bcixudWxsXTtjKys7Y29udGludWV9dGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkcyBvYmplY3QgaXMgbm90IGFuIGFycmF5LiIpfWZvcihsZXQgZT11Lmxlbmd0aC0xO2U+PTA7ZS0tKXtjb25zdCBhPXVbZV07dC5wdXNoKGEpO3I9PT10aGlzLnRvcGxldmVsUGFnZXNEaWN0JiZhIGluc3RhbmNlb2YgUmVmJiYhby5oYXMoYSkmJm8ucHV0KGEsaS5mZXRjaEFzeW5jKGEpKX19dGhyb3cgbmV3IEVycm9yKGBQYWdlIGluZGV4ICR7ZX0gbm90IGZvdW5kLmApfWFzeW5jIGdldEFsbFBhZ2VEaWN0cyhlPSExKXtjb25zdHtpZ25vcmVFcnJvcnM6dH09dGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMsYT1be2N1cnJlbnROb2RlOnRoaXMudG9wbGV2ZWxQYWdlc0RpY3QscG9zSW5LaWRzOjB9XSxyPW5ldyBSZWZTZXQsaT10aGlzLiNBZS5nZXRSYXcoIlBhZ2VzIik7aSBpbnN0YW5jZW9mIFJlZiYmci5wdXQoaSk7Y29uc3Qgbj1uZXcgTWFwLHM9dGhpcy54cmVmLG89dGhpcy5wYWdlSW5kZXhDYWNoZTtsZXQgYz0wO2Z1bmN0aW9uIGFkZFBhZ2VEaWN0KGUsdCl7dCYmIW8uaGFzKHQpJiZvLnB1dCh0LGMpO24uc2V0KGMrKyxbZSx0XSl9ZnVuY3Rpb24gYWRkUGFnZUVycm9yKGEpe2lmKGEgaW5zdGFuY2VvZiBYUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IGE7aWYoZSYmdCYmMD09PWMpe3dhcm4oYGdldEFsbFBhZ2VEaWN0cyAtIFNraXBwaW5nIGludmFsaWQgZmlyc3QgcGFnZTogIiR7YX0iLmApO2E9RGljdC5lbXB0eX1uLnNldChjKyssW2EsbnVsbF0pfWZvcig7YS5sZW5ndGg+MDspe2NvbnN0IGU9YS5hdCgtMSkse2N1cnJlbnROb2RlOnQscG9zSW5LaWRzOml9PWU7bGV0IG49dC5nZXRSYXcoIktpZHMiKTtpZihuIGluc3RhbmNlb2YgUmVmKXRyeXtuPWF3YWl0IHMuZmV0Y2hBc3luYyhuKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9aWYoIUFycmF5LmlzQXJyYXkobikpe2FkZFBhZ2VFcnJvcihuZXcgRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIikpO2JyZWFrfWlmKGk+PW4ubGVuZ3RoKXthLnBvcCgpO2NvbnRpbnVlfWNvbnN0IG89bltpXTtsZXQgYztpZihvIGluc3RhbmNlb2YgUmVmKXtpZihyLmhhcyhvKSl7YWRkUGFnZUVycm9yKG5ldyBGb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIikpO2JyZWFrfXIucHV0KG8pO3RyeXtjPWF3YWl0IHMuZmV0Y2hBc3luYyhvKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9fWVsc2UgYz1vO2lmKCEoYyBpbnN0YW5jZW9mIERpY3QpKXthZGRQYWdlRXJyb3IobmV3IEZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkIHJlZmVyZW5jZSBwb2ludHMgdG8gd3JvbmcgdHlwZSBvZiBvYmplY3QuIikpO2JyZWFrfWxldCBsPWMuZ2V0UmF3KCJUeXBlIik7aWYobCBpbnN0YW5jZW9mIFJlZil0cnl7bD1hd2FpdCBzLmZldGNoQXN5bmMobCl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfWlzTmFtZShsLCJQYWdlIil8fCFjLmhhcygiS2lkcyIpP2FkZFBhZ2VEaWN0KGMsbyBpbnN0YW5jZW9mIFJlZj9vOm51bGwpOmEucHVzaCh7Y3VycmVudE5vZGU6Yyxwb3NJbktpZHM6MH0pO2UucG9zSW5LaWRzKyt9cmV0dXJuIG59Z2V0UGFnZUluZGV4KGUpe2NvbnN0IHQ9dGhpcy5wYWdlSW5kZXhDYWNoZS5nZXQoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO2NvbnN0IGE9dGhpcy54cmVmO2xldCByPTA7Y29uc3QgbmV4dD10PT5mdW5jdGlvbiBwYWdlc0JlZm9yZVJlZih0KXtsZXQgcixpPTA7cmV0dXJuIGEuZmV0Y2hBc3luYyh0KS50aGVuKGZ1bmN0aW9uKGEpe2lmKGlzUmVmc0VxdWFsKHQsZSkmJiFpc0RpY3QoYSwiUGFnZSIpJiYhKGEgaW5zdGFuY2VvZiBEaWN0JiYhYS5oYXMoIlR5cGUiKSYmYS5oYXMoIkNvbnRlbnRzIikpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiVGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBwb2ludCB0byBhIC9QYWdlIGRpY3Rpb25hcnkuIik7aWYoIWEpcmV0dXJuIG51bGw7aWYoIShhIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3I9YS5nZXRSYXcoIlBhcmVudCIpO3JldHVybiBhLmdldEFzeW5jKCJQYXJlbnQiKX0pLnRoZW4oZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIGUuZ2V0QXN5bmMoIktpZHMiKX0pLnRoZW4oZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3Qgbj1bXTtsZXQgcz0hMTtmb3IoY29uc3QgciBvZiBlKXtpZighKHIgaW5zdGFuY2VvZiBSZWYpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiS2lkIG11c3QgYmUgYSByZWZlcmVuY2UuIik7aWYoaXNSZWZzRXF1YWwocix0KSl7cz0hMDticmVha31uLnB1c2goYS5mZXRjaEFzeW5jKHIpLnRoZW4oZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtlLmhhcygiQ291bnQiKT9pKz1lLmdldCgiQ291bnQiKTppKyt9KSl9aWYoIXMpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJLaWQgcmVmZXJlbmNlIG5vdCBmb3VuZCBpbiBwYXJlbnQncyBraWRzLiIpO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKCgpPT5baSxyXSl9KX0odCkudGhlbih0PT57aWYoIXQpe3RoaXMucGFnZUluZGV4Q2FjaGUucHV0KGUscik7cmV0dXJuIHJ9Y29uc3RbYSxpXT10O3IrPWE7cmV0dXJuIG5leHQoaSl9KTtyZXR1cm4gbmV4dChlKX1nZXQgYmFzZVVybCgpe2NvbnN0IGU9dGhpcy4jQWUuZ2V0KCJVUkkiKTtpZihlIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3QgZT1jcmVhdGVWYWxpZEFic29sdXRlVXJsKHQsbnVsbCx7dHJ5Q29udmVydEVuY29kaW5nOiEwfSk7aWYoZSlyZXR1cm4gc2hhZG93KHRoaXMsImJhc2VVcmwiLGUuaHJlZil9fXJldHVybiBzaGFkb3codGhpcywiYmFzZVVybCIsdGhpcy5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwpfXN0YXRpYyBwYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLHJlc3VsdE9iajp0LGRvY0Jhc2VVcmw6YT1udWxsLGRvY0F0dGFjaG1lbnRzOnI9bnVsbH0pe2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXt3YXJuKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgZGVzdERpY3RgIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybn1sZXQgaSxuLHM9ZS5nZXQoIkEiKTtpZighKHMgaW5zdGFuY2VvZiBEaWN0KSlpZihlLmhhcygiRGVzdCIpKXM9ZS5nZXQoIkRlc3QiKTtlbHNle3M9ZS5nZXQoIkFBIik7cyBpbnN0YW5jZW9mIERpY3QmJihzLmhhcygiRCIpP3M9cy5nZXQoIkQiKTpzLmhhcygiVSIpJiYocz1zLmdldCgiVSIpKSl9aWYocyBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9cy5nZXQoIlMiKTtpZighKGUgaW5zdGFuY2VvZiBOYW1lKSl7d2FybigicGFyc2VEZXN0RGljdGlvbmFyeTogSW52YWxpZCB0eXBlIGluIEFjdGlvbiBkaWN0aW9uYXJ5LiIpO3JldHVybn1jb25zdCBhPWUubmFtZTtzd2l0Y2goYSl7Y2FzZSJSZXNldEZvcm0iOmNvbnN0IGU9cy5nZXQoIkZsYWdzIiksbz0hKDEmKCJudW1iZXIiPT10eXBlb2YgZT9lOjApKSxjPVtdLGw9W107Zm9yKGNvbnN0IGUgb2Ygcy5nZXQoIkZpZWxkcyIpfHxbXSllIGluc3RhbmNlb2YgUmVmP2wucHVzaChlLnRvU3RyaW5nKCkpOiJzdHJpbmciPT10eXBlb2YgZSYmYy5wdXNoKHN0cmluZ1RvUERGU3RyaW5nKGUpKTt0LnJlc2V0Rm9ybT17ZmllbGRzOmMscmVmczpsLGluY2x1ZGU6b307YnJlYWs7Y2FzZSJVUkkiOmk9cy5nZXQoIlVSSSIpO2kgaW5zdGFuY2VvZiBOYW1lJiYoaT0iLyIraS5uYW1lKTticmVhaztjYXNlIkdvVG8iOm49cy5nZXQoIkQiKTticmVhaztjYXNlIkxhdW5jaCI6Y2FzZSJHb1RvUiI6Y29uc3QgaD1zLmdldCgiRiIpO2lmKGggaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBlPW5ldyBGaWxlU3BlYyhoLG51bGwsITApLHtyYXdGaWxlbmFtZTp0fT1lLnNlcmlhbGl6YWJsZTtpPXR9ZWxzZSJzdHJpbmciPT10eXBlb2YgaCYmKGk9aCk7Y29uc3QgdT1mZXRjaFJlbW90ZURlc3Qocyk7dSYmInN0cmluZyI9PXR5cGVvZiBpJiYoaT1pLnNwbGl0KCIjIiwxKVswXSsiIyIrdSk7Y29uc3QgZD1zLmdldCgiTmV3V2luZG93Iik7ImJvb2xlYW4iPT10eXBlb2YgZCYmKHQubmV3V2luZG93PWQpO2JyZWFrO2Nhc2UiR29Ub0UiOmNvbnN0IGY9cy5nZXQoIlQiKTtsZXQgZztpZihyJiZmIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1mLmdldCgiUiIpLHQ9Zi5nZXQoIk4iKTtpc05hbWUoZSwiQyIpJiYic3RyaW5nIj09dHlwZW9mIHQmJihnPXJbc3RyaW5nVG9QREZTdHJpbmcodCwhMCldKX1pZihnKXt0LmF0dGFjaG1lbnQ9Zztjb25zdCBlPWZldGNoUmVtb3RlRGVzdChzKTtlJiYodC5hdHRhY2htZW50RGVzdD1lKX1lbHNlIHdhcm4oJ3BhcnNlRGVzdERpY3Rpb25hcnkgLSB1bmltcGxlbWVudGVkICJHb1RvRSIgYWN0aW9uLicpO2JyZWFrO2Nhc2UiTmFtZWQiOmNvbnN0IHA9cy5nZXQoIk4iKTtwIGluc3RhbmNlb2YgTmFtZSYmKHQuYWN0aW9uPXAubmFtZSk7YnJlYWs7Y2FzZSJTZXRPQ0dTdGF0ZSI6Y29uc3QgbT1zLmdldCgiU3RhdGUiKSxiPXMuZ2V0KCJQcmVzZXJ2ZVJCIik7aWYoIUFycmF5LmlzQXJyYXkobSl8fDA9PT1tLmxlbmd0aClicmVhaztjb25zdCB5PVtdO2Zvcihjb25zdCBlIG9mIG0paWYoZSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJPTiI6Y2FzZSJPRkYiOmNhc2UiVG9nZ2xlIjp5LnB1c2goZS5uYW1lKX1lbHNlIGUgaW5zdGFuY2VvZiBSZWYmJnkucHVzaChlLnRvU3RyaW5nKCkpO2lmKHkubGVuZ3RoIT09bS5sZW5ndGgpYnJlYWs7dC5zZXRPQ0dTdGF0ZT17c3RhdGU6eSxwcmVzZXJ2ZVJCOiJib29sZWFuIiE9dHlwZW9mIGJ8fGJ9O2JyZWFrO2Nhc2UiSmF2YVNjcmlwdCI6Y29uc3Qgdz1zLmdldCgiSlMiKTtsZXQgeDt3IGluc3RhbmNlb2YgQmFzZVN0cmVhbT94PXcuZ2V0U3RyaW5nKCk6InN0cmluZyI9PXR5cGVvZiB3JiYoeD13KTtjb25zdCBTPXgmJnJlY292ZXJKc1VSTChzdHJpbmdUb1BERlN0cmluZyh4LCEwKSk7aWYoUyl7aT1TLnVybDt0Lm5ld1dpbmRvdz1TLm5ld1dpbmRvdzticmVha31kZWZhdWx0OmlmKCJKYXZhU2NyaXB0Ij09PWF8fCJTdWJtaXRGb3JtIj09PWEpYnJlYWs7d2FybihgcGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuc3VwcG9ydGVkIGFjdGlvbjogIiR7YX0iLmApfX1lbHNlIGUuaGFzKCJEZXN0IikmJihuPWUuZ2V0KCJEZXN0IikpO2lmKCJzdHJpbmciPT10eXBlb2YgaSl7Y29uc3QgZT1jcmVhdGVWYWxpZEFic29sdXRlVXJsKGksYSx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO2UmJih0LnVybD1lLmhyZWYpO3QudW5zYWZlVXJsPWl9aWYobil7biBpbnN0YW5jZW9mIE5hbWUmJihuPW4ubmFtZSk7InN0cmluZyI9PXR5cGVvZiBuP3QuZGVzdD1zdHJpbmdUb1BERlN0cmluZyhuLCEwKTpMbihuKSYmKHQuZGVzdD1uKX19fWZ1bmN0aW9uIG1heUhhdmVDaGlsZHJlbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlZnx8ZSBpbnN0YW5jZW9mIERpY3R8fGUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGFkZENoaWxkcmVuKGUsdCl7aWYoZSBpbnN0YW5jZW9mIERpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pZT1lLmRpY3QuZ2V0UmF3VmFsdWVzKCk7ZWxzZSBpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm47Zm9yKGNvbnN0IGEgb2YgZSltYXlIYXZlQ2hpbGRyZW4oYSkmJnQucHVzaChhKX1jbGFzcyBPYmplY3RMb2FkZXJ7cmVmU2V0PW5ldyBSZWZTZXQ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuZGljdD1lO3RoaXMua2V5cz10O3RoaXMueHJlZj1hfWFzeW5jIGxvYWQoKXtjb25zdHtrZXlzOmUsZGljdDp0fT10aGlzLGE9W107Zm9yKGNvbnN0IHIgb2YgZSl7Y29uc3QgZT10LmdldFJhdyhyKTt2b2lkIDAhPT1lJiZhLnB1c2goZSl9YXdhaXQgdGhpcy4jQmUoYSk7dGhpcy5yZWZTZXQ9bnVsbH1hc3luYyNCZShlKXtjb25zdCB0PVtdLGE9W107Zm9yKDtlLmxlbmd0aDspe2xldCByPWUucG9wKCk7aWYociBpbnN0YW5jZW9mIFJlZil7aWYodGhpcy5yZWZTZXQuaGFzKHIpKWNvbnRpbnVlO3RyeXt0aGlzLnJlZlNldC5wdXQocik7cj10aGlzLnhyZWYuZmV0Y2gocil9Y2F0Y2goZSl7aWYoIShlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pKXt3YXJuKGBPYmplY3RMb2FkZXIuI3dhbGsgLSByZXF1ZXN0aW5nIGFsbCBkYXRhOiAiJHtlfSIuYCk7YXdhaXQgdGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLnJlcXVlc3RBbGxDaHVua3MoKTtyZXR1cm59dC5wdXNoKHIpO2EucHVzaCh7YmVnaW46ZS5iZWdpbixlbmQ6ZS5lbmR9KX19aWYociBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pe2NvbnN0IGU9ci5nZXRCYXNlU3RyZWFtcygpO2lmKGUpe2xldCBpPSExO2Zvcihjb25zdCB0IG9mIGUpaWYoIXQuaXNEYXRhTG9hZGVkKXtpPSEwO2EucHVzaCh7YmVnaW46dC5zdGFydCxlbmQ6dC5lbmR9KX1pJiZ0LnB1c2gocil9fWFkZENoaWxkcmVuKHIsZSl9aWYoYS5sZW5ndGgpe2F3YWl0IHRoaXMueHJlZi5zdHJlYW0ubWFuYWdlci5yZXF1ZXN0UmFuZ2VzKGEpO2Zvcihjb25zdCBlIG9mIHQpZSBpbnN0YW5jZW9mIFJlZiYmdGhpcy5yZWZTZXQucmVtb3ZlKGUpO2F3YWl0IHRoaXMuI0JlKHQpfX1zdGF0aWMgYXN5bmMgbG9hZChlLHQsYSl7aWYoYS5zdHJlYW0uaXNEYXRhTG9hZGVkKXJldHVybjtjb25zdCByPW5ldyBPYmplY3RMb2FkZXIoZSx0LGEpO2F3YWl0IHIubG9hZCgpfX1jb25zdCBfbj1TeW1ib2woKSxVbj1TeW1ib2woKSxqbj1TeW1ib2woKSxYbj1TeW1ib2woKSxxbj1TeW1ib2woKSxIbj1TeW1ib2woKSxXbj1TeW1ib2woKSxHbj1TeW1ib2woKSx6bj1TeW1ib2woKSwkbj1TeW1ib2woImNvbnRlbnQiKSxWbj1TeW1ib2woImRhdGEiKSxLbj1TeW1ib2woKSxKbj1TeW1ib2woImV4dHJhIiksWW49U3ltYm9sKCksWm49U3ltYm9sKCksUW49U3ltYm9sKCksZXM9U3ltYm9sKCksdHM9U3ltYm9sKCksYXM9U3ltYm9sKCkscnM9U3ltYm9sKCksaXM9U3ltYm9sKCksbnM9U3ltYm9sKCksc3M9U3ltYm9sKCksb3M9U3ltYm9sKCksY3M9U3ltYm9sKCksbHM9U3ltYm9sKCksaHM9U3ltYm9sKCksdXM9U3ltYm9sKCksZHM9U3ltYm9sKCksZnM9U3ltYm9sKCksZ3M9U3ltYm9sKCkscHM9U3ltYm9sKCksbXM9U3ltYm9sKCksYnM9U3ltYm9sKCkseXM9U3ltYm9sKCksd3M9U3ltYm9sKCkseHM9U3ltYm9sKCksU3M9U3ltYm9sKCksQXM9U3ltYm9sKCksa3M9U3ltYm9sKCksQ3M9U3ltYm9sKCksdnM9U3ltYm9sKCksRnM9U3ltYm9sKCksSXM9U3ltYm9sKCksVHM9U3ltYm9sKCksT3M9U3ltYm9sKCJuYW1lc3BhY2VJZCIpLE1zPVN5bWJvbCgibm9kZU5hbWUiKSxEcz1TeW1ib2woKSxCcz1TeW1ib2woKSxScz1TeW1ib2woKSxOcz1TeW1ib2woKSxFcz1TeW1ib2woKSxMcz1TeW1ib2woKSxfcz1TeW1ib2woKSxVcz1TeW1ib2woKSxqcz1TeW1ib2woInJvb3QiKSxYcz1TeW1ib2woKSxxcz1TeW1ib2woKSxIcz1TeW1ib2woKSxXcz1TeW1ib2woKSxHcz1TeW1ib2woKSx6cz1TeW1ib2woKSwkcz1TeW1ib2woKSxWcz1TeW1ib2woKSxLcz1TeW1ib2woKSxKcz1TeW1ib2woKSxZcz1TeW1ib2woKSxacz1TeW1ib2woInVpZCIpLFFzPVN5bWJvbCgpLGVvPXtjb25maWc6e2lkOjAsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hjaS8iKX0sY29ubmVjdGlvblNldDp7aWQ6MSxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWNvbm5lY3Rpb24tc2V0LyIpfSxkYXRhc2V0czp7aWQ6MixjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvIil9LGZvcm06e2lkOjMsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1mb3JtLyIpfSxsb2NhbGVTZXQ6e2lkOjQsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1sb2NhbGUtc2V0LyIpfSxwZGY6e2lkOjUsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi8iPT09ZX0sc2lnbmF0dXJlOntpZDo2LGNoZWNrOmU9PiJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj09PWV9LHNvdXJjZVNldDp7aWQ6NyxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXNvdXJjZS1zZXQvIil9LHN0eWxlc2hlZXQ6e2lkOjgsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI9PT1lfSx0ZW1wbGF0ZTp7aWQ6OSxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXRlbXBsYXRlLyIpfSx4ZGM6e2lkOjEwLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZGMvIil9LHhkcDp7aWQ6MTEsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyI9PT1lfSx4ZmRmOntpZDoxMixjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZmRmLyI9PT1lfSx4aHRtbDp7aWQ6MTMsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09ZX0seG1wbWV0YTp7aWQ6MTQsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS8iPT09ZX19LHRvPXtwdDplPT5lLGNtOmU9PmUvMi41NCo3MixtbTplPT5lLzI1LjQqNzIsaW46ZT0+NzIqZSxweDplPT5lfSxhbz0vKFsrLV0/XGQrXC4/XGQqKSguKikvO2Z1bmN0aW9uIHN0cmlwUXVvdGVzKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJyk/ZS5zbGljZSgxLC0xKTplfWZ1bmN0aW9uIGdldEludGVnZXIoe2RhdGE6ZSxkZWZhdWx0VmFsdWU6dCx2YWxpZGF0ZTphfSl7aWYoIWUpcmV0dXJuIHQ7ZT1lLnRyaW0oKTtjb25zdCByPXBhcnNlSW50KGUsMTApO3JldHVybiFpc05hTihyKSYmYShyKT9yOnR9ZnVuY3Rpb24gZ2V0RmxvYXQoe2RhdGE6ZSxkZWZhdWx0VmFsdWU6dCx2YWxpZGF0ZTphfSl7aWYoIWUpcmV0dXJuIHQ7ZT1lLnRyaW0oKTtjb25zdCByPXBhcnNlRmxvYXQoZSk7cmV0dXJuIWlzTmFOKHIpJiZhKHIpP3I6dH1mdW5jdGlvbiBnZXRLZXl3b3JkKHtkYXRhOmUsZGVmYXVsdFZhbHVlOnQsdmFsaWRhdGU6YX0pe3JldHVybiBlJiZhKGU9ZS50cmltKCkpP2U6dH1mdW5jdGlvbiBnZXRTdHJpbmdPcHRpb24oZSx0KXtyZXR1cm4gZ2V0S2V5d29yZCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0WzBdLHZhbGlkYXRlOmU9PnQuaW5jbHVkZXMoZSl9KX1mdW5jdGlvbiBnZXRNZWFzdXJlbWVudChlLHQ9IjAiKXt0fHw9IjAiO2lmKCFlKXJldHVybiBnZXRNZWFzdXJlbWVudCh0KTtjb25zdCBhPWUudHJpbSgpLm1hdGNoKGFvKTtpZighYSlyZXR1cm4gZ2V0TWVhc3VyZW1lbnQodCk7Y29uc3RbLHIsaV09YSxuPXBhcnNlRmxvYXQocik7aWYoaXNOYU4obikpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2lmKDA9PT1uKXJldHVybiAwO2NvbnN0IHM9dG9baV07cmV0dXJuIHM/cyhuKTpufWZ1bmN0aW9uIGdldFJhdGlvKGUpe2lmKCFlKXJldHVybntudW06MSxkZW46MX07Y29uc3QgdD1lLnNwbGl0KCI6IiwyKS5tYXAoZT0+cGFyc2VGbG9hdChlLnRyaW0oKSkpLmZpbHRlcihlPT4haXNOYU4oZSkpOzE9PT10Lmxlbmd0aCYmdC5wdXNoKDEpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm57bnVtOjEsZGVuOjF9O2NvbnN0W2Escl09dDtyZXR1cm57bnVtOmEsZGVuOnJ9fWZ1bmN0aW9uIGdldFJlbGV2YW50KGUpe3JldHVybiBlP2UudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoZT0+KHtleGNsdWRlZDoiLSI9PT1lWzBdLHZpZXduYW1lOmUuc3Vic3RyaW5nKDEpfSkpOltdfWNsYXNzIEhUTUxSZXN1bHR7c3RhdGljIGdldCBGQUlMVVJFKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJGQUlMVVJFIixuZXcgSFRNTFJlc3VsdCghMSxudWxsLG51bGwsbnVsbCkpfXN0YXRpYyBnZXQgRU1QVFkoKXtyZXR1cm4gc2hhZG93KHRoaXMsIkVNUFRZIixuZXcgSFRNTFJlc3VsdCghMCxudWxsLG51bGwsbnVsbCkpfWNvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMuc3VjY2Vzcz1lO3RoaXMuaHRtbD10O3RoaXMuYmJveD1hO3RoaXMuYnJlYWtOb2RlPXJ9aXNCcmVhaygpe3JldHVybiEhdGhpcy5icmVha05vZGV9c3RhdGljIGJyZWFrTm9kZShlKXtyZXR1cm4gbmV3IEhUTUxSZXN1bHQoITEsbnVsbCxudWxsLGUpfXN0YXRpYyBzdWNjZXNzKGUsdD1udWxsKXtyZXR1cm4gbmV3IEhUTUxSZXN1bHQoITAsZSx0LG51bGwpfX1jbGFzcyBGb250RmluZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuZm9udHM9bmV3IE1hcDt0aGlzLmNhY2hlPW5ldyBNYXA7dGhpcy53YXJuZWQ9bmV3IFNldDt0aGlzLmRlZmF1bHRGb250PW51bGw7dGhpcy5hZGQoZSl9YWRkKGUsdD1udWxsKXtmb3IoY29uc3QgdCBvZiBlKXRoaXMuYWRkUGRmRm9udCh0KTtmb3IoY29uc3QgZSBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKWUucmVndWxhcnx8KGUucmVndWxhcj1lLml0YWxpY3x8ZS5ib2xkfHxlLmJvbGRpdGFsaWMpO2lmKCF0fHwwPT09dC5zaXplKXJldHVybjtjb25zdCBhPXRoaXMuZm9udHMuZ2V0KCJQZGZKUy1GYWxsYmFjay1QZGZKUy1YRkEiKTtmb3IoY29uc3QgZSBvZiB0KXRoaXMuZm9udHMuc2V0KGUsYSl9YWRkUGRmRm9udChlKXtjb25zdCB0PWUuY3NzRm9udEluZm8sYT10LmZvbnRGYW1pbHk7bGV0IHI9dGhpcy5mb250cy5nZXQoYSk7aWYoIXIpe3I9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZvbnRzLnNldChhLHIpO3RoaXMuZGVmYXVsdEZvbnR8fCh0aGlzLmRlZmF1bHRGb250PXIpfWxldCBpPSIiO2NvbnN0IG49cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP2k9bj49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjpuPj03MDAmJihpPSJib2xkIik7aWYoIWkpeyhlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWU/LmluY2x1ZGVzKCJCb2xkIikpJiYoaT0iYm9sZCIpOyhlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lPy5pbmNsdWRlcygiSXRhbGljIil8fGUucHNOYW1lPy5lbmRzV2l0aCgiSXQiKSkmJihpKz0iaXRhbGljIil9aXx8KGk9InJlZ3VsYXIiKTtyW2ldPWV9Z2V0RGVmYXVsdCgpe3JldHVybiB0aGlzLmRlZmF1bHRGb250fWZpbmQoZSx0PSEwKXtsZXQgYT10aGlzLmZvbnRzLmdldChlKXx8dGhpcy5jYWNoZS5nZXQoZSk7aWYoYSlyZXR1cm4gYTtjb25zdCByPS8sfC18X3wgfGJvbGRpdGFsaWN8Ym9sZHxpdGFsaWN8cmVndWxhcnxpdC9naTtsZXQgaT1lLnJlcGxhY2VBbGwociwiIik7YT10aGlzLmZvbnRzLmdldChpKTtpZihhKXt0aGlzLmNhY2hlLnNldChlLGEpO3JldHVybiBhfWk9aS50b0xvd2VyQ2FzZSgpO2NvbnN0IG49W107Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlcGxhY2VBbGwociwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGkpJiZuLnB1c2godCk7aWYoMD09PW4ubGVuZ3RoKWZvcihjb25zdFssZV1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlZ3VsYXIubmFtZT8ucmVwbGFjZUFsbChyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaSkmJm4ucHVzaChlKTtpZigwPT09bi5sZW5ndGgpe2k9aS5yZXBsYWNlQWxsKC9wc210fG10L2dpLCIiKTtmb3IoY29uc3RbZSx0XW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVwbGFjZUFsbChyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaSkmJm4ucHVzaCh0KX1pZigwPT09bi5sZW5ndGgpZm9yKGNvbnN0IGUgb2YgdGhpcy5mb250cy52YWx1ZXMoKSllLnJlZ3VsYXIubmFtZT8ucmVwbGFjZUFsbChyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaSkmJm4ucHVzaChlKTtpZihuLmxlbmd0aD49MSl7MSE9PW4ubGVuZ3RoJiZ0JiZ3YXJuKGBYRkEgLSBUb28gbWFueSBjaG9pY2VzIHRvIGd1ZXNzIHRoZSBjb3JyZWN0IGZvbnQ6ICR7ZX1gKTt0aGlzLmNhY2hlLnNldChlLG5bMF0pO3JldHVybiBuWzBdfWlmKHQmJiF0aGlzLndhcm5lZC5oYXMoZSkpe3RoaXMud2FybmVkLmFkZChlKTt3YXJuKGBYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogJHtlfWApfXJldHVybiBudWxsfX1mdW5jdGlvbiBzZWxlY3RGb250KGUsdCl7cmV0dXJuIml0YWxpYyI9PT1lLnBvc3R1cmU/ImJvbGQiPT09ZS53ZWlnaHQ/dC5ib2xkaXRhbGljOnQuaXRhbGljOiJib2xkIj09PWUud2VpZ2h0P3QuYm9sZDp0LnJlZ3VsYXJ9Y2xhc3MgdGV4dF9Gb250SW5mb3tjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLmxpbmVIZWlnaHQ9YTt0aGlzLnBhcmFNYXJnaW49dHx8e3RvcDowLGJvdHRvbTowLGxlZnQ6MCxyaWdodDowfTtpZighZSl7W3RoaXMucGRmRm9udCx0aGlzLnhmYUZvbnRdPXRoaXMuZGVmYXVsdEZvbnQocik7cmV0dXJufXRoaXMueGZhRm9udD17dHlwZWZhY2U6ZS50eXBlZmFjZSxwb3N0dXJlOmUucG9zdHVyZSx3ZWlnaHQ6ZS53ZWlnaHQsc2l6ZTplLnNpemUsbGV0dGVyU3BhY2luZzplLmxldHRlclNwYWNpbmd9O2NvbnN0IGk9ci5maW5kKGUudHlwZWZhY2UpO2lmKGkpe3RoaXMucGRmRm9udD1zZWxlY3RGb250KGUsaSk7dGhpcy5wZGZGb250fHwoW3RoaXMucGRmRm9udCx0aGlzLnhmYUZvbnRdPXRoaXMuZGVmYXVsdEZvbnQocikpfWVsc2VbdGhpcy5wZGZGb250LHRoaXMueGZhRm9udF09dGhpcy5kZWZhdWx0Rm9udChyKX1kZWZhdWx0Rm9udChlKXtjb25zdCB0PWUuZmluZCgiSGVsdmV0aWNhIiwhMSl8fGUuZmluZCgiTXlyaWFkIFBybyIsITEpfHxlLmZpbmQoIkFyaWFsIiwhMSl8fGUuZ2V0RGVmYXVsdCgpO2lmKHQ/LnJlZ3VsYXIpe2NvbnN0IGU9dC5yZWd1bGFyO3JldHVybltlLHt0eXBlZmFjZTplLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHkscG9zdHVyZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc2l6ZToxMCxsZXR0ZXJTcGFjaW5nOjB9XX1yZXR1cm5bbnVsbCx7dHlwZWZhY2U6IkNvdXJpZXIiLHBvc3R1cmU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHNpemU6MTAsbGV0dGVyU3BhY2luZzowfV19fWNsYXNzIEZvbnRTZWxlY3Rvcntjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLmZvbnRGaW5kZXI9cjt0aGlzLnN0YWNrPVtuZXcgdGV4dF9Gb250SW5mbyhlLHQsYSxyKV19cHVzaERhdGEoZSx0LGEpe2NvbnN0IHI9dGhpcy5zdGFjay5hdCgtMSk7Zm9yKGNvbnN0IHQgb2ZbInR5cGVmYWNlIiwicG9zdHVyZSIsIndlaWdodCIsInNpemUiLCJsZXR0ZXJTcGFjaW5nIl0pZVt0XXx8KGVbdF09ci54ZmFGb250W3RdKTtmb3IoY29uc3QgZSBvZlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0paXNOYU4odFtlXSkmJih0W2VdPXIucGFyYU1hcmdpbltlXSk7Y29uc3QgaT1uZXcgdGV4dF9Gb250SW5mbyhlLHQsYXx8ci5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7aS5wZGZGb250fHwoaS5wZGZGb250PXIucGRmRm9udCk7dGhpcy5zdGFjay5wdXNoKGkpfXBvcEZvbnQoKXt0aGlzLnN0YWNrLnBvcCgpfXRvcEZvbnQoKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fWNsYXNzIFRleHRNZWFzdXJle2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMuZ2x5cGhzPVtdO3RoaXMuZm9udFNlbGVjdG9yPW5ldyBGb250U2VsZWN0b3IoZSx0LGEscik7dGhpcy5leHRyYUhlaWdodD0wfXB1c2hEYXRhKGUsdCxhKXt0aGlzLmZvbnRTZWxlY3Rvci5wdXNoRGF0YShlLHQsYSl9cG9wRm9udChlKXtyZXR1cm4gdGhpcy5mb250U2VsZWN0b3IucG9wRm9udCgpfWFkZFBhcmEoKXtjb25zdCBlPXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTt0aGlzLmV4dHJhSGVpZ2h0Kz1lLnBhcmFNYXJnaW4udG9wK2UucGFyYU1hcmdpbi5ib3R0b219YWRkU3RyaW5nKGUpe2lmKCFlKXJldHVybjtjb25zdCB0PXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKSxhPXQueGZhRm9udC5zaXplO2lmKHQucGRmRm9udCl7Y29uc3Qgcj10LnhmYUZvbnQubGV0dGVyU3BhY2luZyxpPXQucGRmRm9udCxuPWkubGluZUhlaWdodHx8MS4yLHM9dC5saW5lSGVpZ2h0fHxNYXRoLm1heCgxLjIsbikqYSxvPW4tKHZvaWQgMD09PWkubGluZUdhcD8uMjppLmxpbmVHYXApLGM9TWF0aC5tYXgoMSxvKSphLGw9YS8xZTMsaD1pLmRlZmF1bHRXaWR0aHx8aS5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGg7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvW1x1MjAyOVxuXS8pKXtjb25zdCBlPWkuZW5jb2RlU3RyaW5nKHQpLmpvaW4oIiIpLGE9aS5jaGFyc1RvR2x5cGhzKGUpO2Zvcihjb25zdCBlIG9mIGEpe2NvbnN0IHQ9ZS53aWR0aHx8aDt0aGlzLmdseXBocy5wdXNoKFt0KmwrcixzLGMsZS51bmljb2RlLCExXSl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfXRoaXMuZ2x5cGhzLnBvcCgpO3JldHVybn1mb3IoY29uc3QgdCBvZiBlLnNwbGl0KC9bXHUyMDI5XG5dLykpe2Zvcihjb25zdCBlIG9mIHQuc3BsaXQoIiIpKXRoaXMuZ2x5cGhzLnB1c2goW2EsMS4yKmEsYSxlLCExXSk7dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfXRoaXMuZ2x5cGhzLnBvcCgpfWNvbXB1dGUoZSl7bGV0IHQ9LTEsYT0wLHI9MCxpPTAsbj0wLHM9MCxvPSExLGM9ITA7Zm9yKGxldCBsPTAsaD10aGlzLmdseXBocy5sZW5ndGg7bDxoO2wrKyl7Y29uc3RbaCx1LGQsZixnXT10aGlzLmdseXBoc1tsXSxwPSIgIj09PWYsbT1jP2Q6dTtpZihnKXtyPU1hdGgubWF4KHIsbik7bj0wO2krPXM7cz1tO3Q9LTE7YT0wO2M9ITF9ZWxzZSBpZihwKWlmKG4raD5lKXtyPU1hdGgubWF4KHIsbik7bj0wO2krPXM7cz1tO3Q9LTE7YT0wO289ITA7Yz0hMX1lbHNle3M9TWF0aC5tYXgobSxzKTthPW47bis9aDt0PWx9ZWxzZSBpZihuK2g+ZSl7aSs9cztzPW07aWYoLTEhPT10KXtsPXQ7cj1NYXRoLm1heChyLGEpO249MDt0PS0xO2E9MH1lbHNle3I9TWF0aC5tYXgocixuKTtuPWh9bz0hMDtjPSExfWVsc2V7bis9aDtzPU1hdGgubWF4KG0scyl9fXI9TWF0aC5tYXgocixuKTtpKz1zK3RoaXMuZXh0cmFIZWlnaHQ7cmV0dXJue3dpZHRoOjEuMDIqcixoZWlnaHQ6aSxpc0Jyb2tlbjpvfX19Y29uc3Qgcm89L15bXi5bXSsvLGlvPS9eW15cXV0rLyxubz0wLHNvPTEsb289Mixjbz0zLGxvPTQsaG89bmV3IE1hcChbWyIkZGF0YSIsKGUsdCk9PmUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmVdLFsiJHJlY29yZCIsKGUsdCk9PihlLmRhdGFzZXRzP2UuZGF0YXNldHMuZGF0YTplKVtjc10oKVswXV0sWyIkdGVtcGxhdGUiLChlLHQpPT5lLnRlbXBsYXRlXSxbIiRjb25uZWN0aW9uU2V0IiwoZSx0KT0+ZS5jb25uZWN0aW9uU2V0XSxbIiRmb3JtIiwoZSx0KT0+ZS5mb3JtXSxbIiRsYXlvdXQiLChlLHQpPT5lLmxheW91dF0sWyIkaG9zdCIsKGUsdCk9PmUuaG9zdF0sWyIkZGF0YVdpbmRvdyIsKGUsdCk9PmUuZGF0YVdpbmRvd10sWyIkZXZlbnQiLChlLHQpPT5lLmV2ZW50XSxbIiEiLChlLHQpPT5lLmRhdGFzZXRzXSxbIiR4ZmEiLChlLHQpPT5lXSxbInhmYSIsKGUsdCk9PmVdLFsiJCIsKGUsdCk9PnRdXSksdW89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcGFyc2VJbmRleChlKXtyZXR1cm4iKiI9PT0oZT1lLnRyaW0oKSk/MS8wOnBhcnNlSW50KGUsMTApfHwwfWZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbihlLHQsYT0hMCl7bGV0IHI9ZS5tYXRjaChybyk7aWYoIXIpcmV0dXJuIG51bGw7bGV0W2ldPXI7Y29uc3Qgbj1be25hbWU6aSxjYWNoZU5hbWU6Ii4iK2ksaW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGwsb3BlcmF0b3I6bm99XTtsZXQgcz1pLmxlbmd0aDtmb3IoO3M8ZS5sZW5ndGg7KXtjb25zdCBvPXM7aWYoIlsiPT09ZS5jaGFyQXQocysrKSl7cj1lLnNsaWNlKHMpLm1hdGNoKGlvKTtpZighcil7d2FybigiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpO3JldHVybiBudWxsfW4uYXQoLTEpLmluZGV4PXBhcnNlSW5kZXgoclswXSk7cys9clswXS5sZW5ndGgrMTtjb250aW51ZX1sZXQgYztzd2l0Y2goZS5jaGFyQXQocykpe2Nhc2UiLiI6aWYoIXQpcmV0dXJuIG51bGw7cysrO2M9c287YnJlYWs7Y2FzZSIjIjpzKys7Yz1vbzticmVhaztjYXNlIlsiOmlmKGEpe3dhcm4oIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuIik7cmV0dXJuIG51bGx9Yz1jbzticmVhaztjYXNlIigiOmlmKGEpe3dhcm4oIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgSmF2YVNjcmlwdCBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1jPWxvO2JyZWFrO2RlZmF1bHQ6Yz1ub31yPWUuc2xpY2UocykubWF0Y2gocm8pO2lmKCFyKWJyZWFrO1tpXT1yO3MrPWkubGVuZ3RoO24ucHVzaCh7bmFtZTppLGNhY2hlTmFtZTplLnNsaWNlKG8scyksb3BlcmF0b3I6YyxpbmRleDowLGpzOm51bGwsZm9ybUNhbGM6bnVsbH0pfXJldHVybiBufWZ1bmN0aW9uIHNlYXJjaE5vZGUoZSx0LGEscj0hMCxpPSEwKXtjb25zdCBuPXBhcnNlRXhwcmVzc2lvbihhLHIpO2lmKCFuKXJldHVybiBudWxsO2NvbnN0IHM9aG8uZ2V0KG5bMF0ubmFtZSk7bGV0IG8sYz0wO2lmKHMpe289ITA7ZT1bcyhlLHQpXTtjPTF9ZWxzZXtvPW51bGw9PT10O2U9W3R8fGVdfWZvcihsZXQgYT1uLmxlbmd0aDtjPGE7YysrKXtjb25zdHtuYW1lOmEsY2FjaGVOYW1lOnIsb3BlcmF0b3I6cyxpbmRleDpsfT1uW2NdLGg9W107Zm9yKGNvbnN0IHQgb2YgZSl7aWYoIXQuaXNYRkFPYmplY3QpY29udGludWU7bGV0IGUsbjtpZihpKXtuPXVvLmdldCh0KTtpZighbil7bj1uZXcgTWFwO3VvLnNldCh0LG4pfWU9bi5nZXQocil9aWYoIWUpe3N3aXRjaChzKXtjYXNlIG5vOmU9dFtyc10oYSwhMSk7YnJlYWs7Y2FzZSBzbzplPXRbcnNdKGEsITApO2JyZWFrO2Nhc2Ugb286ZT10W2FzXShhKTtlPWUuaXNYRkFPYmplY3RBcnJheT9lLmNoaWxkcmVuOltlXX1pJiZuLnNldChyLGUpfWUubGVuZ3RoPjAmJmgucHVzaChlKX1pZigwPT09aC5sZW5ndGgmJiFvJiYwPT09Yyl7Y29uc3QgYT10W2RzXSgpO2lmKCEodD1hKSlyZXR1cm4gbnVsbDtjPS0xO2U9W3RdO2NvbnRpbnVlfWU9aXNGaW5pdGUobCk/aC5maWx0ZXIoZT0+bDxlLmxlbmd0aCkubWFwKGU9PmVbbF0pOmguZmxhdCgpfXJldHVybiAwPT09ZS5sZW5ndGg/bnVsbDplfWZ1bmN0aW9uIGNyZWF0ZURhdGFOb2RlKGUsdCxhKXtjb25zdCByPXBhcnNlRXhwcmVzc2lvbihhKTtpZighcilyZXR1cm4gbnVsbDtpZihyLnNvbWUoZT0+ZS5vcGVyYXRvcj09PXNvKSlyZXR1cm4gbnVsbDtjb25zdCBpPWhvLmdldChyWzBdLm5hbWUpO2xldCBuPTA7aWYoaSl7ZT1pKGUsdCk7bj0xfWVsc2UgZT10fHxlO2ZvcihsZXQgdD1yLmxlbmd0aDtuPHQ7bisrKXtjb25zdHtuYW1lOnQsb3BlcmF0b3I6YSxpbmRleDppfT1yW25dO2lmKCFpc0Zpbml0ZShpKSl7cltuXS5pbmRleD0wO3JldHVybiBlLmNyZWF0ZU5vZGVzKHIuc2xpY2UobikpfWxldCBzO3N3aXRjaChhKXtjYXNlIG5vOnM9ZVtyc10odCwhMSk7YnJlYWs7Y2FzZSBzbzpzPWVbcnNdKHQsITApO2JyZWFrO2Nhc2Ugb286cz1lW2FzXSh0KTtzPXMuaXNYRkFPYmplY3RBcnJheT9zLmNoaWxkcmVuOltzXX1pZigwPT09cy5sZW5ndGgpcmV0dXJuIGUuY3JlYXRlTm9kZXMoci5zbGljZShuKSk7aWYoIShpPHMubGVuZ3RoKSl7cltuXS5pbmRleD1pLXMubGVuZ3RoO3JldHVybiBlLmNyZWF0ZU5vZGVzKHIuc2xpY2UobikpfXtjb25zdCB0PXNbaV07aWYoIXQuaXNYRkFPYmplY3Qpe3dhcm4oIlhGQSAtIENhbm5vdCBjcmVhdGUgYSBub2RlLiIpO3JldHVybiBudWxsfWU9dH19cmV0dXJuIG51bGx9Y29uc3QgZm89U3ltYm9sKCksZ289U3ltYm9sKCkscG89U3ltYm9sKCksbW89U3ltYm9sKCJfY2hpbGRyZW4iKSxibz1TeW1ib2woKSx5bz1TeW1ib2woKSx3bz1TeW1ib2woKSx4bz1TeW1ib2woKSxTbz1TeW1ib2woKSxBbz1TeW1ib2woKSxrbz1TeW1ib2woKSxDbz1TeW1ib2woKSx2bz1TeW1ib2woKSxGbz1TeW1ib2woInBhcmVudCIpLElvPVN5bWJvbCgpLE9vPVN5bWJvbCgpLE1vPVN5bWJvbCgpO2xldCBEbz0wO2NvbnN0IEJvPWVvLmRhdGFzZXRzLmlkO2NsYXNzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQsYT0hMSl7dGhpc1tPc109ZTt0aGlzW01zXT10O3RoaXNba29dPWE7dGhpc1tGb109bnVsbDt0aGlzW21vXT1bXTt0aGlzW1pzXT1gJHt0fSR7RG8rK31gO3RoaXNbZ3NdPW51bGx9Z2V0IGlzWEZBT2JqZWN0KCl7cmV0dXJuITB9Z2V0IGlzWEZBT2JqZWN0QXJyYXkoKXtyZXR1cm4hMX1jcmVhdGVOb2RlcyhlKXtsZXQgdD10aGlzLGE9bnVsbDtmb3IoY29uc3R7bmFtZTpyLGluZGV4Oml9b2YgZSl7Zm9yKGxldCBlPTAsbj1pc0Zpbml0ZShpKT9pOjA7ZTw9bjtlKyspe2NvbnN0IGU9dFtPc109PT1Cbz8tMTp0W09zXTthPW5ldyBYbWxPYmplY3QoZSxyKTt0W2puXShhKX10PWF9cmV0dXJuIGF9W0JzXShlKXtpZighdGhpc1trb118fCF0aGlzW1JzXShlKSlyZXR1cm4hMTtjb25zdCB0PWVbTXNdLGE9dGhpc1t0XTtpZighKGEgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkpe251bGwhPT1hJiZ0aGlzW1VzXShhKTt0aGlzW3RdPWU7dGhpc1tqbl0oZSk7cmV0dXJuITB9aWYoYS5wdXNoKGUpKXt0aGlzW2puXShlKTtyZXR1cm4hMH1sZXQgcj0iIjt0aGlzLmlkP3I9YCAoaWQ6ICR7dGhpcy5pZH0pYDp0aGlzLm5hbWUmJihyPWAgKG5hbWU6ICR7dGhpcy5uYW1lfSAke3RoaXMuaC52YWx1ZX0pYCk7d2FybihgWEZBIC0gbm9kZSAiJHt0aGlzW01zXX0iJHtyfSBoYXMgYWxyZWFkeSBlbm91Z2ggIiR7dH0iIWApO3JldHVybiExfVtSc10oZSl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoZVtNc10pJiZlW09zXT09PXRoaXNbT3NdfVtrc10oKXtyZXR1cm4hMX1bX25dKCl7cmV0dXJuITF9W3dzXSgpe3JldHVybiExfVt4c10oKXtyZXR1cm4hMX1bTHNdKCl7dGhpcy5wYXJhJiZ0aGlzW2ZzXSgpW0puXS5wYXJhU3RhY2sucG9wKCl9W19zXSgpe3RoaXNbZnNdKClbSm5dLnBhcmFTdGFjay5wdXNoKHRoaXMucGFyYSl9W0hzXShlKXt0aGlzLmlkJiZ0aGlzW09zXT09PWVvLnRlbXBsYXRlLmlkJiZlLnNldCh0aGlzLmlkLHRoaXMpfVtmc10oKXtyZXR1cm4gdGhpc1tnc10udGVtcGxhdGV9W0NzXSgpe3JldHVybiExfVt2c10oKXtyZXR1cm4hMX1bam5dKGUpe2VbRm9dPXRoaXM7dGhpc1ttb10ucHVzaChlKTshZVtnc10mJnRoaXNbZ3NdJiYoZVtnc109dGhpc1tnc10pfVtVc10oZSl7Y29uc3QgdD10aGlzW21vXS5pbmRleE9mKGUpO3RoaXNbbW9dLnNwbGljZSh0LDEpfVtwc10oKXtyZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKX1bR3NdKGUpe31bTnNdKGUpe31bWW5dKCl7fVtxbl0oZSl7ZGVsZXRlIHRoaXNba29dO2lmKHRoaXNbV25dKXtlLmNsZWFuKHRoaXNbV25dKTtkZWxldGUgdGhpc1tXbl19fVtic10oZSl7cmV0dXJuIHRoaXNbbW9dLmluZGV4T2YoZSl9W3lzXShlLHQpe3RbRm9dPXRoaXM7dGhpc1ttb10uc3BsaWNlKGUsMCx0KTshdFtnc10mJnRoaXNbZ3NdJiYodFtnc109dGhpc1tnc10pfVtGc10oKXtyZXR1cm4hdGhpcy5uYW1lfVtUc10oKXtyZXR1cm4iIn1bJHNdKCl7cmV0dXJuIDA9PT10aGlzW21vXS5sZW5ndGg/dGhpc1skbl06dGhpc1ttb10ubWFwKGU9PmVbJHNdKCkpLmpvaW4oIiIpfWdldFtwb10oKXtjb25zdCBlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZighZS5fYXR0cmlidXRlcyl7Y29uc3QgdD1lLl9hdHRyaWJ1dGVzPW5ldyBTZXQ7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKG51bGw9PT10aGlzW2VdfHx0aGlzW2VdaW5zdGFuY2VvZiBYRkFPYmplY3R8fHRoaXNbZV1pbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KWJyZWFrO3QuYWRkKGUpfX1yZXR1cm4gc2hhZG93KHRoaXMscG8sZS5fYXR0cmlidXRlcyl9W0FzXShlKXtsZXQgdD10aGlzO2Zvcig7dDspe2lmKHQ9PT1lKXJldHVybiEwO3Q9dFtkc10oKX1yZXR1cm4hMX1bZHNdKCl7cmV0dXJuIHRoaXNbRm9dfVt1c10oKXtyZXR1cm4gdGhpc1tkc10oKX1bY3NdKGU9bnVsbCl7cmV0dXJuIGU/dGhpc1tlXTp0aGlzW21vXX1bS25dKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXNbJG5dJiYoZS4kY29udGVudD10aGlzWyRuXSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IGE9dGhpc1t0XTtudWxsIT09YSYmKGEgaW5zdGFuY2VvZiBYRkFPYmplY3Q/ZVt0XT1hW0tuXSgpOmEgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheT9hLmlzRW1wdHkoKXx8KGVbdF09YS5kdW1wKCkpOmVbdF09YSl9cmV0dXJuIGV9W1lzXSgpe3JldHVybiBudWxsfVtLc10oKXtyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWX0qW2xzXSgpe2Zvcihjb25zdCBlIG9mIHRoaXNbY3NdKCkpeWllbGQgZX0qW3hvXShlLHQpe2Zvcihjb25zdCBhIG9mIHRoaXNbbHNdKCkpaWYoIWV8fHQ9PT1lLmhhcyhhW01zXSkpe2NvbnN0IGU9dGhpc1t0c10oKSx0PWFbS3NdKGUpO3Quc3VjY2Vzc3x8KHRoaXNbSm5dLmZhaWxpbmdOb2RlPWEpO3lpZWxkIHR9fVtabl0oKXtyZXR1cm4gbnVsbH1bVW5dKGUsdCl7dGhpc1tKbl0uY2hpbGRyZW4ucHVzaChlKX1bdHNdKCl7fVtYbl0oe2ZpbHRlcjplPW51bGwsaW5jbHVkZTp0PSEwfSl7aWYodGhpc1tKbl0uZ2VuZXJhdG9yKXtjb25zdCBlPXRoaXNbdHNdKCksdD10aGlzW0puXS5mYWlsaW5nTm9kZVtLc10oZSk7aWYoIXQuc3VjY2VzcylyZXR1cm4gdDt0Lmh0bWwmJnRoaXNbVW5dKHQuaHRtbCx0LmJib3gpO2RlbGV0ZSB0aGlzW0puXS5mYWlsaW5nTm9kZX1lbHNlIHRoaXNbSm5dLmdlbmVyYXRvcj10aGlzW3hvXShlLHQpO2Zvcig7Oyl7Y29uc3QgZT10aGlzW0puXS5nZW5lcmF0b3IubmV4dCgpO2lmKGUuZG9uZSlicmVhaztjb25zdCB0PWUudmFsdWU7aWYoIXQuc3VjY2VzcylyZXR1cm4gdDt0Lmh0bWwmJnRoaXNbVW5dKHQuaHRtbCx0LmJib3gpfXRoaXNbSm5dLmdlbmVyYXRvcj1udWxsO3JldHVybiBIVE1MUmVzdWx0LkVNUFRZfVtXc10oZSl7dGhpc1tPb109bmV3IFNldChPYmplY3Qua2V5cyhlKSl9W0FvXShlKXtjb25zdCB0PXRoaXNbcG9dLGE9dGhpc1tPb107cmV0dXJuWy4uLmVdLmZpbHRlcihlPT50LmhhcyhlKSYmIWEuaGFzKGUpKX1bWHNdKGUsdD1uZXcgU2V0KXtmb3IoY29uc3QgYSBvZiB0aGlzW21vXSlhW0lvXShlLHQpfVtJb10oZSx0KXtjb25zdCBhPXRoaXNbU29dKGUsdCk7YT90aGlzW2ZvXShhLGUsdCk6dGhpc1tYc10oZSx0KX1bU29dKGUsdCl7Y29uc3R7dXNlOmEsdXNlaHJlZjpyfT10aGlzO2lmKCFhJiYhcilyZXR1cm4gbnVsbDtsZXQgaT1udWxsLG49bnVsbCxzPW51bGwsbz1hO2lmKHIpe289cjtyLnN0YXJ0c1dpdGgoIiNzb20oIikmJnIuZW5kc1dpdGgoIikiKT9uPXIuc2xpY2UoNSwtMSk6ci5zdGFydHNXaXRoKCIuI3NvbSgiKSYmci5lbmRzV2l0aCgiKSIpP249ci5zbGljZSg2LC0xKTpyLnN0YXJ0c1dpdGgoIiMiKT9zPXIuc2xpY2UoMSk6ci5zdGFydHNXaXRoKCIuIyIpJiYocz1yLnNsaWNlKDIpKX1lbHNlIGEuc3RhcnRzV2l0aCgiIyIpP3M9YS5zbGljZSgxKTpuPWE7dGhpcy51c2U9dGhpcy51c2VocmVmPSIiO2lmKHMpaT1lLmdldChzKTtlbHNle2k9c2VhcmNoTm9kZShlLmdldChqcyksdGhpcyxuLCEwLCExKTtpJiYoaT1pWzBdKX1pZighaSl7d2FybihgWEZBIC0gSW52YWxpZCBwcm90b3R5cGUgcmVmZXJlbmNlOiAke299LmApO3JldHVybiBudWxsfWlmKGlbTXNdIT09dGhpc1tNc10pe3dhcm4oYFhGQSAtIEluY29tcGF0aWJsZSBwcm90b3R5cGU6ICR7aVtNc119ICE9PSAke3RoaXNbTXNdfS5gKTtyZXR1cm4gbnVsbH1pZih0LmhhcyhpKSl7d2FybigiWEZBIC0gQ3ljbGUgZGV0ZWN0ZWQgaW4gcHJvdG90eXBlcyB1c2UuIik7cmV0dXJuIG51bGx9dC5hZGQoaSk7Y29uc3QgYz1pW1NvXShlLHQpO2MmJmlbZm9dKGMsZSx0KTtpW1hzXShlLHQpO3QuZGVsZXRlKGkpO3JldHVybiBpfVtmb10oZSx0LGEpe2lmKGEuaGFzKGUpKXt3YXJuKCJYRkEgLSBDeWNsZSBkZXRlY3RlZCBpbiBwcm90b3R5cGVzIHVzZS4iKTtyZXR1cm59IXRoaXNbJG5dJiZlWyRuXSYmKHRoaXNbJG5dPWVbJG5dKTtuZXcgU2V0KGEpLmFkZChlKTtmb3IoY29uc3QgdCBvZiB0aGlzW0FvXShlW09vXSkpe3RoaXNbdF09ZVt0XTt0aGlzW09vXSYmdGhpc1tPb10uYWRkKHQpfWZvcihjb25zdCByIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZih0aGlzW3BvXS5oYXMocikpY29udGludWU7Y29uc3QgaT10aGlzW3JdLG49ZVtyXTtpZihpIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpe2Zvcihjb25zdCBlIG9mIGlbbW9dKWVbSW9dKHQsYSk7Zm9yKGxldCByPWlbbW9dLmxlbmd0aCxzPW5bbW9dLmxlbmd0aDtyPHM7cisrKXtjb25zdCBuPWVbbW9dW3JdW0duXSgpO2lmKCFpLnB1c2gobikpYnJlYWs7bltGb109dGhpczt0aGlzW21vXS5wdXNoKG4pO25bSW9dKHQsYSl9fWVsc2UgaWYobnVsbD09PWkpe2lmKG51bGwhPT1uKXtjb25zdCBlPW5bR25dKCk7ZVtGb109dGhpczt0aGlzW3JdPWU7dGhpc1ttb10ucHVzaChlKTtlW0lvXSh0LGEpfX1lbHNle2lbWHNdKHQsYSk7biYmaVtmb10obix0LGEpfX19c3RhdGljW2JvXShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLm1hcChlPT5YRkFPYmplY3RbYm9dKGUpKToib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lP09iamVjdC5hc3NpZ24oe30sZSk6ZX1bR25dKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSl0cnl7ZVt0XT10aGlzW3RdfWNhdGNoe3NoYWRvdyhlLHQsdGhpc1t0XSl9ZVtac109YCR7ZVtNc119JHtEbysrfWA7ZVttb109W107Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbcG9dLmhhcyh0KSl7ZVt0XT1YRkFPYmplY3RbYm9dKHRoaXNbdF0pO2NvbnRpbnVlfWNvbnN0IGE9dGhpc1t0XTtlW3RdPWEgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheT9uZXcgWEZBT2JqZWN0QXJyYXkoYVtDb10pOm51bGx9Zm9yKGNvbnN0IHQgb2YgdGhpc1ttb10pe2NvbnN0IGE9dFtNc10scj10W0duXSgpO2VbbW9dLnB1c2gocik7cltGb109ZTtudWxsPT09ZVthXT9lW2FdPXI6ZVthXVttb10ucHVzaChyKX1yZXR1cm4gZX1bY3NdKGU9bnVsbCl7cmV0dXJuIGU/dGhpc1ttb10uZmlsdGVyKHQ9PnRbTXNdPT09ZSk6dGhpc1ttb119W2FzXShlKXtyZXR1cm4gdGhpc1tlXX1bcnNdKGUsdCxhPSEwKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzW2lzXShlLHQsYSkpfSpbaXNdKGUsdCxhPSEwKXtpZigicGFyZW50IiE9PWUpe2Zvcihjb25zdCBhIG9mIHRoaXNbbW9dKXthW01zXT09PWUmJih5aWVsZCBhKTthLm5hbWU9PT1lJiYoeWllbGQgYSk7KHR8fGFbRnNdKCkpJiYoeWllbGQqYVtpc10oZSx0LCExKSl9YSYmdGhpc1twb10uaGFzKGUpJiYoeWllbGQgbmV3IFhGQUF0dHJpYnV0ZSh0aGlzLGUsdGhpc1tlXSkpfWVsc2UgeWllbGQgdGhpc1tGb119fWNsYXNzIFhGQU9iamVjdEFycmF5e2NvbnN0cnVjdG9yKGU9MS8wKXt0aGlzW0NvXT1lO3RoaXNbbW9dPVtdfWdldCBpc1hGQU9iamVjdCgpe3JldHVybiExfWdldCBpc1hGQU9iamVjdEFycmF5KCl7cmV0dXJuITB9cHVzaChlKXtpZih0aGlzW21vXS5sZW5ndGg8PXRoaXNbQ29dKXt0aGlzW21vXS5wdXNoKGUpO3JldHVybiEwfXdhcm4oYFhGQSAtIG5vZGUgIiR7ZVtNc119IiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAke3RoaXNbQ29dfSBjaGlsZHJlbmApO3JldHVybiExfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXNbbW9dLmxlbmd0aH1kdW1wKCl7cmV0dXJuIDE9PT10aGlzW21vXS5sZW5ndGg/dGhpc1ttb11bMF1bS25dKCk6dGhpc1ttb10ubWFwKGU9PmVbS25dKCkpfVtHbl0oKXtjb25zdCBlPW5ldyBYRkFPYmplY3RBcnJheSh0aGlzW0NvXSk7ZVttb109dGhpc1ttb10ubWFwKGU9PmVbR25dKCkpO3JldHVybiBlfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzW21vXX1jbGVhcigpe3RoaXNbbW9dLmxlbmd0aD0wfX1jbGFzcyBYRkFBdHRyaWJ1dGV7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXNbRm9dPWU7dGhpc1tNc109dDt0aGlzWyRuXT1hO3RoaXNbem5dPSExO3RoaXNbWnNdPSJhdHRyaWJ1dGUiK0RvKyt9W2RzXSgpe3JldHVybiB0aGlzW0ZvXX1bU3NdKCl7cmV0dXJuITB9W25zXSgpe3JldHVybiB0aGlzWyRuXS50cmltKCl9W0dzXShlKXtlPWUudmFsdWV8fCIiO3RoaXNbJG5dPWUudG9TdHJpbmcoKX1bJHNdKCl7cmV0dXJuIHRoaXNbJG5dfVtBc10oZSl7cmV0dXJuIHRoaXNbRm9dPT09ZXx8dGhpc1tGb11bQXNdKGUpfX1jbGFzcyBYbWxPYmplY3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSx0LGE9e30pe3N1cGVyKGUsdCk7dGhpc1skbl09IiI7dGhpc1t5b109bnVsbDtpZigiI3RleHQiIT09dCl7Y29uc3QgZT1uZXcgTWFwO3RoaXNbZ29dPWU7Zm9yKGNvbnN0W3Qscl1vZiBPYmplY3QuZW50cmllcyhhKSllLnNldCh0LG5ldyBYRkFBdHRyaWJ1dGUodGhpcyx0LHIpKTtpZihhLmhhc093blByb3BlcnR5KERzKSl7Y29uc3QgZT1hW0RzXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09ZSYmKCJkYXRhR3JvdXAiPT09ZT90aGlzW3lvXT0hMToiZGF0YVZhbHVlIj09PWUmJih0aGlzW3lvXT0hMCkpfX10aGlzW3puXT0hMX1bSnNdKGUpe2NvbnN0IHQ9dGhpc1tNc107aWYoIiN0ZXh0Ij09PXQpe2UucHVzaChlbmNvZGVUb1htbFN0cmluZyh0aGlzWyRuXSkpO3JldHVybn1jb25zdCBhPXV0ZjhTdHJpbmdUb1N0cmluZyh0KSxyPXRoaXNbT3NdPT09Qm8/InhmYToiOiIiO2UucHVzaChgPCR7cn0ke2F9YCk7Zm9yKGNvbnN0W3QsYV1vZiB0aGlzW2dvXS5lbnRyaWVzKCkpe2NvbnN0IHI9dXRmOFN0cmluZ1RvU3RyaW5nKHQpO2UucHVzaChgICR7cn09IiR7ZW5jb2RlVG9YbWxTdHJpbmcoYVskbl0pfSJgKX1udWxsIT09dGhpc1t5b10mJih0aGlzW3lvXT9lLnB1c2goJyB4ZmE6ZGF0YU5vZGU9ImRhdGFWYWx1ZSInKTplLnB1c2goJyB4ZmE6ZGF0YU5vZGU9ImRhdGFHcm91cCInKSk7aWYodGhpc1skbl18fDAhPT10aGlzW21vXS5sZW5ndGgpe2UucHVzaCgiPiIpO2lmKHRoaXNbJG5dKSJzdHJpbmciPT10eXBlb2YgdGhpc1skbl0/ZS5wdXNoKGVuY29kZVRvWG1sU3RyaW5nKHRoaXNbJG5dKSk6dGhpc1skbl1bSnNdKGUpO2Vsc2UgZm9yKGNvbnN0IHQgb2YgdGhpc1ttb10pdFtKc10oZSk7ZS5wdXNoKGA8LyR7cn0ke2F9PmApfWVsc2UgZS5wdXNoKCIvPiIpfVtCc10oZSl7aWYodGhpc1skbl0pe2NvbnN0IGU9bmV3IFhtbE9iamVjdCh0aGlzW09zXSwiI3RleHQiKTt0aGlzW2puXShlKTtlWyRuXT10aGlzWyRuXTt0aGlzWyRuXT0iIn10aGlzW2puXShlKTtyZXR1cm4hMH1bTnNdKGUpe3RoaXNbJG5dKz1lfVtZbl0oKXtpZih0aGlzWyRuXSYmdGhpc1ttb10ubGVuZ3RoPjApe2NvbnN0IGU9bmV3IFhtbE9iamVjdCh0aGlzW09zXSwiI3RleHQiKTt0aGlzW2puXShlKTtlWyRuXT10aGlzWyRuXTtkZWxldGUgdGhpc1skbl19fVtLc10oKXtyZXR1cm4iI3RleHQiPT09dGhpc1tNc10/SFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1skbl19KTpIVE1MUmVzdWx0LkVNUFRZfVtjc10oZT1udWxsKXtyZXR1cm4gZT90aGlzW21vXS5maWx0ZXIodD0+dFtNc109PT1lKTp0aGlzW21vXX1bZXNdKCl7cmV0dXJuIHRoaXNbZ29dfVthc10oZSl7Y29uc3QgdD10aGlzW2dvXS5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDp0aGlzW2NzXShlKX0qW2lzXShlLHQpe2NvbnN0IGE9dGhpc1tnb10uZ2V0KGUpO2EmJih5aWVsZCBhKTtmb3IoY29uc3QgYSBvZiB0aGlzW21vXSl7YVtNc109PT1lJiYoeWllbGQgYSk7dCYmKHlpZWxkKmFbaXNdKGUsdCkpfX0qW1FuXShlLHQpe2NvbnN0IGE9dGhpc1tnb10uZ2V0KGUpOyFhfHx0JiZhW3puXXx8KHlpZWxkIGEpO2Zvcihjb25zdCBhIG9mIHRoaXNbbW9dKXlpZWxkKmFbUW5dKGUsdCl9Kltvc10oZSx0LGEpe2Zvcihjb25zdCByIG9mIHRoaXNbbW9dKXtyW01zXSE9PWV8fGEmJnJbem5dfHwoeWllbGQgcik7dCYmKHlpZWxkKnJbb3NdKGUsdCxhKSl9fVtTc10oKXtyZXR1cm4gbnVsbD09PXRoaXNbeW9dPzA9PT10aGlzW21vXS5sZW5ndGh8fHRoaXNbbW9dWzBdW09zXT09PWVvLnhodG1sLmlkOnRoaXNbeW9dfVtuc10oKXtyZXR1cm4gbnVsbD09PXRoaXNbeW9dPzA9PT10aGlzW21vXS5sZW5ndGg/dGhpc1skbl0udHJpbSgpOnRoaXNbbW9dWzBdW09zXT09PWVvLnhodG1sLmlkP3RoaXNbbW9dWzBdWyRzXSgpLnRyaW0oKTpudWxsOnRoaXNbJG5dLnRyaW0oKX1bR3NdKGUpe2U9ZS52YWx1ZXx8IiI7dGhpc1skbl09ZS50b1N0cmluZygpfVtLbl0oZT0hMSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW09zXSk7dGhpc1skbl0mJih0LiRjb250ZW50PXRoaXNbJG5dKTt0LiRuYW1lPXRoaXNbTXNdO3QuY2hpbGRyZW49W107Zm9yKGNvbnN0IGEgb2YgdGhpc1ttb10pdC5jaGlsZHJlbi5wdXNoKGFbS25dKGUpKTt0LmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbZSxhXW9mIHRoaXNbZ29dKXQuYXR0cmlidXRlc1tlXT1hWyRuXTtyZXR1cm4gdH19Y2xhc3MgQ29udGVudE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCk7dGhpc1skbl09IiJ9W05zXShlKXt0aGlzWyRuXSs9ZX1bWW5dKCl7fX1jbGFzcyBPcHRpb25PYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihlLHQpO3RoaXNbdm9dPWF9W1luXSgpe3RoaXNbJG5dPWdldEtleXdvcmQoe2RhdGE6dGhpc1skbl0sZGVmYXVsdFZhbHVlOnRoaXNbdm9dWzBdLHZhbGlkYXRlOmU9PnRoaXNbdm9dLmluY2x1ZGVzKGUpfSl9W3FuXShlKXtzdXBlcltxbl0oZSk7ZGVsZXRlIHRoaXNbdm9dfX1jbGFzcyBTdHJpbmdPYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e1tZbl0oKXt0aGlzWyRuXT10aGlzWyRuXS50cmltKCl9fWNsYXNzIEludGVnZXJPYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKGUsdCk7dGhpc1t3b109YTt0aGlzW01vXT1yfVtZbl0oKXt0aGlzWyRuXT1nZXRJbnRlZ2VyKHtkYXRhOnRoaXNbJG5dLGRlZmF1bHRWYWx1ZTp0aGlzW3dvXSx2YWxpZGF0ZTp0aGlzW01vXX0pfVtxbl0oZSl7c3VwZXJbcW5dKGUpO2RlbGV0ZSB0aGlzW3dvXTtkZWxldGUgdGhpc1tNb119fWNsYXNzIE9wdGlvbjAxIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwwLGU9PjE9PT1lKX19Y2xhc3MgT3B0aW9uMTAgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0LDEsZT0+MD09PWUpfX1mdW5jdGlvbiBtZWFzdXJlVG9TdHJpbmcoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyIwcHgiOk51bWJlci5pc0ludGVnZXIoZSk/YCR7ZX1weGA6YCR7ZS50b0ZpeGVkKDIpfXB4YH1jb25zdCBSbz17YW5jaG9yVHlwZShlLHQpe2NvbnN0IGE9ZVt1c10oKTtpZihhJiYoIWEubGF5b3V0fHwicG9zaXRpb24iPT09YS5sYXlvdXQpKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7c3dpdGNoKGUuYW5jaG9yVHlwZSl7Y2FzZSJib3R0b21DZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsIC0xMDAlKSI7YnJlYWs7Y2FzZSJib3R0b21MZWZ0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgwLC0xMDAlKSI7YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpIjticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgwLC01MCUpIjticmVhaztjYXNlIm1pZGRsZVJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwtNTAlKSI7YnJlYWs7Y2FzZSJ0b3BDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsMCkiO2JyZWFrO2Nhc2UidG9wUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLDApIn19fSxkaW1lbnNpb25zKGUsdCl7Y29uc3QgYT1lW3VzXSgpO2xldCByPWUudztjb25zdCBpPWUuaDtpZihhLmxheW91dD8uaW5jbHVkZXMoInJvdyIpKXtjb25zdCB0PWFbSm5dLGk9ZS5jb2xTcGFuO2xldCBuO2lmKC0xPT09aSl7bj1NYXRoLnN1bVByZWNpc2UodC5jb2x1bW5XaWR0aHMuc2xpY2UodC5jdXJyZW50Q29sdW1uKSk7dC5jdXJyZW50Q29sdW1uPTB9ZWxzZXtuPU1hdGguc3VtUHJlY2lzZSh0LmNvbHVtbldpZHRocy5zbGljZSh0LmN1cnJlbnRDb2x1bW4sdC5jdXJyZW50Q29sdW1uK2kpKTt0LmN1cnJlbnRDb2x1bW49KHQuY3VycmVudENvbHVtbitlLmNvbFNwYW4pJXQuY29sdW1uV2lkdGhzLmxlbmd0aH1pc05hTihuKXx8KHI9ZS53PW4pfXQud2lkdGg9IiIhPT1yP21lYXN1cmVUb1N0cmluZyhyKToiYXV0byI7dC5oZWlnaHQ9IiIhPT1pP21lYXN1cmVUb1N0cmluZyhpKToiYXV0byJ9LHBvc2l0aW9uKGUsdCl7Y29uc3QgYT1lW3VzXSgpO2lmKCFhPy5sYXlvdXR8fCJwb3NpdGlvbiI9PT1hLmxheW91dCl7dC5wb3NpdGlvbj0iYWJzb2x1dGUiO3QubGVmdD1tZWFzdXJlVG9TdHJpbmcoZS54KTt0LnRvcD1tZWFzdXJlVG9TdHJpbmcoZS55KX19LHJvdGF0ZShlLHQpe2lmKGUucm90YXRlKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7dC50cmFuc2Zvcm0rPWByb3RhdGUoLSR7ZS5yb3RhdGV9ZGVnKWA7dC50cmFuc2Zvcm1PcmlnaW49InRvcCBsZWZ0In19LHByZXNlbmNlKGUsdCl7c3dpdGNoKGUucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjp0LnZpc2liaWxpdHk9ImhpZGRlbiI7YnJlYWs7Y2FzZSJoaWRkZW4iOmNhc2UiaW5hY3RpdmUiOnQuZGlzcGxheT0ibm9uZSJ9fSxoQWxpZ24oZSx0KXtpZigicGFyYSI9PT1lW01zXSlzd2l0Y2goZS5oQWxpZ24pe2Nhc2UianVzdGlmeUFsbCI6dC50ZXh0QWxpZ249Imp1c3RpZnktYWxsIjticmVhaztjYXNlInJhZGl4Ijp0LnRleHRBbGlnbj0ibGVmdCI7YnJlYWs7ZGVmYXVsdDp0LnRleHRBbGlnbj1lLmhBbGlnbn1lbHNlIHN3aXRjaChlLmhBbGlnbil7Y2FzZSJsZWZ0Ijp0LmFsaWduU2VsZj0ic3RhcnQiO2JyZWFrO2Nhc2UiY2VudGVyIjp0LmFsaWduU2VsZj0iY2VudGVyIjticmVhaztjYXNlInJpZ2h0Ijp0LmFsaWduU2VsZj0iZW5kIn19LG1hcmdpbihlLHQpe2UubWFyZ2luJiYodC5tYXJnaW49ZS5tYXJnaW5bWXNdKCkubWFyZ2luKX19O2Z1bmN0aW9uIHNldE1pbk1heERpbWVuc2lvbnMoZSx0KXtpZigicG9zaXRpb24iPT09ZVt1c10oKS5sYXlvdXQpe2UubWluVz4wJiYodC5taW5XaWR0aD1tZWFzdXJlVG9TdHJpbmcoZS5taW5XKSk7ZS5tYXhXPjAmJih0Lm1heFdpZHRoPW1lYXN1cmVUb1N0cmluZyhlLm1heFcpKTtlLm1pbkg+MCYmKHQubWluSGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1pbkgpKTtlLm1heEg+MCYmKHQubWF4SGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1heEgpKX19ZnVuY3Rpb24gbGF5b3V0VGV4dChlLHQsYSxyLGksbil7Y29uc3Qgcz1uZXcgVGV4dE1lYXN1cmUodCxhLHIsaSk7InN0cmluZyI9PXR5cGVvZiBlP3MuYWRkU3RyaW5nKGUpOmVbRXNdKHMpO3JldHVybiBzLmNvbXB1dGUobil9ZnVuY3Rpb24gbGF5b3V0Tm9kZShlLHQpe2xldCBhPW51bGwscj1udWxsLGk9ITE7aWYoKCFlLnd8fCFlLmgpJiZlLnZhbHVlKXtsZXQgbj0wLHM9MDtpZihlLm1hcmdpbil7bj1lLm1hcmdpbi5sZWZ0SW5zZXQrZS5tYXJnaW4ucmlnaHRJbnNldDtzPWUubWFyZ2luLnRvcEluc2V0K2UubWFyZ2luLmJvdHRvbUluc2V0fWxldCBvPW51bGwsYz1udWxsO2lmKGUucGFyYSl7Yz1PYmplY3QuY3JlYXRlKG51bGwpO289IiI9PT1lLnBhcmEubGluZUhlaWdodD9udWxsOmUucGFyYS5saW5lSGVpZ2h0O2MudG9wPSIiPT09ZS5wYXJhLnNwYWNlQWJvdmU/MDplLnBhcmEuc3BhY2VBYm92ZTtjLmJvdHRvbT0iIj09PWUucGFyYS5zcGFjZUJlbG93PzA6ZS5wYXJhLnNwYWNlQmVsb3c7Yy5sZWZ0PSIiPT09ZS5wYXJhLm1hcmdpbkxlZnQ/MDplLnBhcmEubWFyZ2luTGVmdDtjLnJpZ2h0PSIiPT09ZS5wYXJhLm1hcmdpblJpZ2h0PzA6ZS5wYXJhLm1hcmdpblJpZ2h0fWxldCBsPWUuZm9udDtpZighbCl7Y29uc3QgdD1lW2ZzXSgpO2xldCBhPWVbZHNdKCk7Zm9yKDthJiZhIT09dDspe2lmKGEuZm9udCl7bD1hLmZvbnQ7YnJlYWt9YT1hW2RzXSgpfX1jb25zdCBoPShlLnd8fHQud2lkdGgpLW4sdT1lW2dzXS5mb250RmluZGVyO2lmKGUudmFsdWUuZXhEYXRhJiZlLnZhbHVlLmV4RGF0YVskbl0mJiJ0ZXh0L2h0bWwiPT09ZS52YWx1ZS5leERhdGEuY29udGVudFR5cGUpe2NvbnN0IHQ9bGF5b3V0VGV4dChlLnZhbHVlLmV4RGF0YVskbl0sbCxjLG8sdSxoKTtyPXQud2lkdGg7YT10LmhlaWdodDtpPXQuaXNCcm9rZW59ZWxzZXtjb25zdCB0PWUudmFsdWVbJHNdKCk7aWYodCl7Y29uc3QgZT1sYXlvdXRUZXh0KHQsbCxjLG8sdSxoKTtyPWUud2lkdGg7YT1lLmhlaWdodDtpPWUuaXNCcm9rZW59fW51bGw9PT1yfHxlLnd8fChyKz1uKTtudWxsPT09YXx8ZS5ofHwoYSs9cyl9cmV0dXJue3c6cixoOmEsaXNCcm9rZW46aX19ZnVuY3Rpb24gY29tcHV0ZUJib3goZSx0LGEpe2xldCByO2lmKCIiIT09ZS53JiYiIiE9PWUuaClyPVtlLngsZS55LGUudyxlLmhdO2Vsc2V7aWYoIWEpcmV0dXJuIG51bGw7bGV0IGk9ZS53O2lmKCIiPT09aSl7aWYoMD09PWUubWF4Vyl7Y29uc3QgdD1lW3VzXSgpO2k9InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQudz8wOmUubWluV31lbHNlIGk9TWF0aC5taW4oZS5tYXhXLGEud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD1tZWFzdXJlVG9TdHJpbmcoaSl9bGV0IG49ZS5oO2lmKCIiPT09bil7aWYoMD09PWUubWF4SCl7Y29uc3QgdD1lW3VzXSgpO249InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQuaD8wOmUubWluSH1lbHNlIG49TWF0aC5taW4oZS5tYXhILGEuaGVpZ2h0KTt0LmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhuKX1yPVtlLngsZS55LGksbl19cmV0dXJuIHJ9ZnVuY3Rpb24gZml4RGltZW5zaW9ucyhlKXtjb25zdCB0PWVbdXNdKCk7aWYodC5sYXlvdXQ/LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgYT10W0puXSxyPWUuY29sU3BhbjtsZXQgaTtpPS0xPT09cj9NYXRoLnN1bVByZWNpc2UoYS5jb2x1bW5XaWR0aHMuc2xpY2UoYS5jdXJyZW50Q29sdW1uKSk6TWF0aC5zdW1QcmVjaXNlKGEuY29sdW1uV2lkdGhzLnNsaWNlKGEuY3VycmVudENvbHVtbixhLmN1cnJlbnRDb2x1bW4rcikpO2lzTmFOKGkpfHwoZS53PWkpfXQubGF5b3V0JiYicG9zaXRpb24iIT09dC5sYXlvdXQmJihlLng9ZS55PTApOyJ0YWJsZSI9PT1lLmxheW91dCYmIiI9PT1lLncmJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5XaWR0aHMpJiYoZS53PU1hdGguc3VtUHJlY2lzZShlLmNvbHVtbldpZHRocykpfWZ1bmN0aW9uIGxheW91dENsYXNzKGUpe3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6ZGVmYXVsdDpyZXR1cm4ieGZhUG9zaXRpb24iO2Nhc2UibHItdGIiOnJldHVybiJ4ZmFMclRiIjtjYXNlInJsLXJvdyI6cmV0dXJuInhmYVJsUm93IjtjYXNlInJsLXRiIjpyZXR1cm4ieGZhUmxUYiI7Y2FzZSJyb3ciOnJldHVybiJ4ZmFSb3ciO2Nhc2UidGFibGUiOnJldHVybiJ4ZmFUYWJsZSI7Y2FzZSJ0YiI6cmV0dXJuInhmYVRiIn19ZnVuY3Rpb24gdG9TdHlsZShlLC4uLnQpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3QgciBvZiB0KXtjb25zdCB0PWVbcl07aWYobnVsbCE9PXQpaWYoUm8uaGFzT3duUHJvcGVydHkocikpUm9bcl0oZSxhKTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBYRkFPYmplY3Qpe2NvbnN0IGU9dFtZc10oKTtlP09iamVjdC5hc3NpZ24oYSxlKTp3YXJuKGAoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICR7cn0gbm90IGltcGxlbWVudGVkIHlldGApfX1yZXR1cm4gYX1mdW5jdGlvbiBjcmVhdGVXcmFwcGVyKGUsdCl7Y29uc3R7YXR0cmlidXRlczphfT10LHtzdHlsZTpyfT1hLGk9e25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFXcmFwcGVyIl0sc3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sY2hpbGRyZW46W119O2EuY2xhc3MucHVzaCgieGZhV3JhcHBlZCIpO2lmKGUuYm9yZGVyKXtjb25zdHt3aWR0aHM6YSxpbnNldHM6bn09ZS5ib3JkZXJbSm5dO2xldCBzLG8sYz1uWzBdLGw9blszXTtjb25zdCBoPW5bMF0rblsyXSx1PW5bMV0rblszXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpjLT1hWzBdLzI7bC09YVszXS8yO3M9YGNhbGMoMTAwJSArICR7KGFbMV0rYVszXSkvMi11fXB4KWA7bz1gY2FsYygxMDAlICsgJHsoYVswXSthWzJdKS8yLWh9cHgpYDticmVhaztjYXNlImxlZnQiOmMtPWFbMF07bC09YVszXTtzPWBjYWxjKDEwMCUgKyAke2FbMV0rYVszXS11fXB4KWA7bz1gY2FsYygxMDAlICsgJHthWzBdK2FbMl0taH1weClgO2JyZWFrO2Nhc2UicmlnaHQiOnM9dT9gY2FsYygxMDAlIC0gJHt1fXB4KWA6IjEwMCUiO289aD9gY2FsYygxMDAlIC0gJHtofXB4KWA6IjEwMCUifWNvbnN0IGQ9WyJ4ZmFCb3JkZXIiXTtpc1ByaW50T25seShlLmJvcmRlcikmJmQucHVzaCgieGZhUHJpbnRPbmx5Iik7Y29uc3QgZj17bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpkLHN0eWxlOnt0b3A6YCR7Y31weGAsbGVmdDpgJHtsfXB4YCx3aWR0aDpzLGhlaWdodDpvfX0sY2hpbGRyZW46W119O2Zvcihjb25zdCBlIG9mWyJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyU3R5bGUiXSlpZih2b2lkIDAhPT1yW2VdKXtmLmF0dHJpYnV0ZXMuc3R5bGVbZV09cltlXTtkZWxldGUgcltlXX1pLmNoaWxkcmVuLnB1c2goZix0KX1lbHNlIGkuY2hpbGRyZW4ucHVzaCh0KTtmb3IoY29uc3QgZSBvZlsiYmFja2dyb3VuZCIsImJhY2tncm91bmRDbGlwIiwidG9wIiwibGVmdCIsIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybU9yaWdpbiIsInZpc2liaWxpdHkiXSlpZih2b2lkIDAhPT1yW2VdKXtpLmF0dHJpYnV0ZXMuc3R5bGVbZV09cltlXTtkZWxldGUgcltlXX1pLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIj09PXIucG9zaXRpb24/ImFic29sdXRlIjoicmVsYXRpdmUiO2RlbGV0ZSByLnBvc2l0aW9uO2lmKHIuYWxpZ25TZWxmKXtpLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPXIuYWxpZ25TZWxmO2RlbGV0ZSByLmFsaWduU2VsZn1yZXR1cm4gaX1mdW5jdGlvbiBmaXhUZXh0SW5kZW50KGUpe2NvbnN0IHQ9Z2V0TWVhc3VyZW1lbnQoZS50ZXh0SW5kZW50LCIwcHgiKTtpZih0Pj0wKXJldHVybjtjb25zdCBhPSJwYWRkaW5nIisoImxlZnQiPT09KCJyaWdodCI9PT1lLnRleHRBbGlnbj8icmlnaHQiOiJsZWZ0Iik/IkxlZnQiOiJSaWdodCIpLHI9Z2V0TWVhc3VyZW1lbnQoZVthXSwiMHB4Iik7ZVthXT1yLXQrInB4In1mdW5jdGlvbiBzZXRBY2Nlc3MoZSx0KXtzd2l0Y2goZS5hY2Nlc3Mpe2Nhc2Uibm9uSW50ZXJhY3RpdmUiOnQucHVzaCgieGZhTm9uSW50ZXJhY3RpdmUiKTticmVhaztjYXNlInJlYWRPbmx5Ijp0LnB1c2goInhmYVJlYWRPbmx5Iik7YnJlYWs7Y2FzZSJwcm90ZWN0ZWQiOnQucHVzaCgieGZhRGlzYWJsZWQiKX19ZnVuY3Rpb24gaXNQcmludE9ubHkoZSl7cmV0dXJuIGUucmVsZXZhbnQubGVuZ3RoPjAmJiFlLnJlbGV2YW50WzBdLmV4Y2x1ZGVkJiYicHJpbnQiPT09ZS5yZWxldmFudFswXS52aWV3bmFtZX1mdW5jdGlvbiBnZXRDdXJyZW50UGFyYShlKXtjb25zdCB0PWVbZnNdKClbSm5dLnBhcmFTdGFjaztyZXR1cm4gdC5sZW5ndGg/dC5hdCgtMSk6bnVsbH1mdW5jdGlvbiBzZXRQYXJhKGUsdCxhKXtpZihhLmF0dHJpYnV0ZXMuY2xhc3M/LmluY2x1ZGVzKCJ4ZmFSaWNoIikpe2lmKHQpeyIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKTsiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKX1jb25zdCByPWdldEN1cnJlbnRQYXJhKGUpO2lmKHIpe2NvbnN0IGU9YS5hdHRyaWJ1dGVzLnN0eWxlO2UuZGlzcGxheT0iZmxleCI7ZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iO3N3aXRjaChyLnZBbGlnbil7Y2FzZSJ0b3AiOmUuanVzdGlmeUNvbnRlbnQ9InN0YXJ0IjticmVhaztjYXNlImJvdHRvbSI6ZS5qdXN0aWZ5Q29udGVudD0iZW5kIjticmVhaztjYXNlIm1pZGRsZSI6ZS5qdXN0aWZ5Q29udGVudD0iY2VudGVyIn1jb25zdCB0PXJbWXNdKCk7Zm9yKGNvbnN0W2Escl1vZiBPYmplY3QuZW50cmllcyh0KSlhIGluIGV8fChlW2FdPXIpfX19ZnVuY3Rpb24gc2V0Rm9udEZhbWlseShlLHQsYSxyKXtpZighYSl7ZGVsZXRlIHIuZm9udEZhbWlseTtyZXR1cm59Y29uc3QgaT1zdHJpcFF1b3RlcyhlLnR5cGVmYWNlKTtyLmZvbnRGYW1pbHk9YCIke2l9ImA7Y29uc3Qgbj1hLmZpbmQoaSk7aWYobil7Y29uc3R7Zm9udEZhbWlseTphfT1uLnJlZ3VsYXIuY3NzRm9udEluZm87YSE9PWkmJihyLmZvbnRGYW1pbHk9YCIke2F9ImApO2NvbnN0IHM9Z2V0Q3VycmVudFBhcmEodCk7aWYocyYmIiIhPT1zLmxpbmVIZWlnaHQpcmV0dXJuO2lmKHIubGluZUhlaWdodClyZXR1cm47Y29uc3Qgbz1zZWxlY3RGb250KGUsbik7byYmKHIubGluZUhlaWdodD1NYXRoLm1heCgxLjIsby5saW5lSGVpZ2h0KSl9fWZ1bmN0aW9uIGZpeFVSTChlKXtjb25zdCB0PWNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwoZSxudWxsLHthZGREZWZhdWx0UHJvdG9jb2w6ITAsdHJ5Q29udmVydEVuY29kaW5nOiEwfSk7cmV0dXJuIHQ/dC5ocmVmOm51bGx9ZnVuY3Rpb24gY3JlYXRlTGluZShlLHQpe3JldHVybntuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsibHItdGIiPT09ZS5sYXlvdXQ/InhmYUxyIjoieGZhUmwiXX0sY2hpbGRyZW46dH19ZnVuY3Rpb24gZmx1c2hIVE1MKGUpe2lmKCFlW0puXSlyZXR1cm4gbnVsbDtjb25zdCB0PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZVtKbl0uYXR0cmlidXRlcyxjaGlsZHJlbjplW0puXS5jaGlsZHJlbn07aWYoZVtKbl0uZmFpbGluZ05vZGUpe2NvbnN0IGE9ZVtKbl0uZmFpbGluZ05vZGVbWm5dKCk7YSYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goY3JlYXRlTGluZShlLFthXSkpOnQuY2hpbGRyZW4ucHVzaChhKSl9cmV0dXJuIDA9PT10LmNoaWxkcmVuLmxlbmd0aD9udWxsOnR9ZnVuY3Rpb24gYWRkSFRNTChlLHQsYSl7Y29uc3Qgcj1lW0puXSxpPXIuYXZhaWxhYmxlU3BhY2UsW24scyxvLGNdPWE7c3dpdGNoKGUubGF5b3V0KXtjYXNlInBvc2l0aW9uIjpyLndpZHRoPU1hdGgubWF4KHIud2lkdGgsbitvKTtyLmhlaWdodD1NYXRoLm1heChyLmhlaWdodCxzK2MpO3IuY2hpbGRyZW4ucHVzaCh0KTticmVhaztjYXNlImxyLXRiIjpjYXNlInJsLXRiIjppZighci5saW5lfHwxPT09ci5hdHRlbXB0KXtyLmxpbmU9Y3JlYXRlTGluZShlLFtdKTtyLmNoaWxkcmVuLnB1c2goci5saW5lKTtyLm51bWJlckluTGluZT0wfXIubnVtYmVySW5MaW5lKz0xO3IubGluZS5jaGlsZHJlbi5wdXNoKHQpO2lmKDA9PT1yLmF0dGVtcHQpe3IuY3VycmVudFdpZHRoKz1vO3IuaGVpZ2h0PU1hdGgubWF4KHIuaGVpZ2h0LHIucHJldkhlaWdodCtjKX1lbHNle3IuY3VycmVudFdpZHRoPW87ci5wcmV2SGVpZ2h0PXIuaGVpZ2h0O3IuaGVpZ2h0Kz1jO3IuYXR0ZW1wdD0wfXIud2lkdGg9TWF0aC5tYXgoci53aWR0aCxyLmN1cnJlbnRXaWR0aCk7YnJlYWs7Y2FzZSJybC1yb3ciOmNhc2Uicm93Ijp7ci5jaGlsZHJlbi5wdXNoKHQpO3Iud2lkdGgrPW87ci5oZWlnaHQ9TWF0aC5tYXgoci5oZWlnaHQsYyk7Y29uc3QgZT1tZWFzdXJlVG9TdHJpbmcoci5oZWlnaHQpO2Zvcihjb25zdCB0IG9mIHIuY2hpbGRyZW4pdC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD1lO2JyZWFrfWNhc2UidGFibGUiOmNhc2UidGIiOnIud2lkdGg9TWF0aENsYW1wKG8sci53aWR0aCxpLndpZHRoKTtyLmhlaWdodCs9YztyLmNoaWxkcmVuLnB1c2godCl9fWZ1bmN0aW9uIGdldEF2YWlsYWJsZVNwYWNlKGUpe2NvbnN0IHQ9ZVtKbl0uYXZhaWxhYmxlU3BhY2UsYT1lLm1hcmdpbj9lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldDowLHI9ZS5tYXJnaW4/ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ6MDtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09ZVtKbl0uYXR0ZW1wdD97d2lkdGg6dC53aWR0aC1yLWVbSm5dLmN1cnJlbnRXaWR0aCxoZWlnaHQ6dC5oZWlnaHQtYS1lW0puXS5wcmV2SGVpZ2h0fTp7d2lkdGg6dC53aWR0aC1yLGhlaWdodDp0LmhlaWdodC1hLWVbSm5dLmhlaWdodH07Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm57d2lkdGg6TWF0aC5zdW1QcmVjaXNlKGVbSm5dLmNvbHVtbldpZHRocy5zbGljZShlW0puXS5jdXJyZW50Q29sdW1uKSksaGVpZ2h0OnQuaGVpZ2h0LXJ9O2Nhc2UidGFibGUiOmNhc2UidGIiOnJldHVybnt3aWR0aDp0LndpZHRoLXIsaGVpZ2h0OnQuaGVpZ2h0LWEtZVtKbl0uaGVpZ2h0fTtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBjaGVja0RpbWVuc2lvbnMoZSx0KXtpZihudWxsPT09ZVtmc10oKVtKbl0uZmlyc3RVbnNwbGl0dGFibGUpcmV0dXJuITA7aWYoMD09PWUud3x8MD09PWUuaClyZXR1cm4hMDtjb25zdCBhPWVbdXNdKCkscj1hW0puXT8uYXR0ZW1wdHx8MCxbLGksbixzXT1mdW5jdGlvbiBnZXRUcmFuc2Zvcm1lZEJCb3goZSl7bGV0IHQsYSxyPSIiPT09ZS53P05hTjplLncsaT0iIj09PWUuaD9OYU46ZS5oLFtuLHNdPVswLDBdO3N3aXRjaChlLmFuY2hvclR5cGV8fCIiKXtjYXNlImJvdHRvbUNlbnRlciI6W24sc109W3IvMixpXTticmVhaztjYXNlImJvdHRvbUxlZnQiOltuLHNdPVswLGldO2JyZWFrO2Nhc2UiYm90dG9tUmlnaHQiOltuLHNdPVtyLGldO2JyZWFrO2Nhc2UibWlkZGxlQ2VudGVyIjpbbixzXT1bci8yLGkvMl07YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0IjpbbixzXT1bMCxpLzJdO2JyZWFrO2Nhc2UibWlkZGxlUmlnaHQiOltuLHNdPVtyLGkvMl07YnJlYWs7Y2FzZSJ0b3BDZW50ZXIiOltuLHNdPVtyLzIsMF07YnJlYWs7Y2FzZSJ0b3BSaWdodCI6W24sc109W3IsMF19c3dpdGNoKGUucm90YXRlfHwwKXtjYXNlIDA6W3QsYV09Wy1uLC1zXTticmVhaztjYXNlIDkwOlt0LGFdPVstcyxuXTtbcixpXT1baSwtcl07YnJlYWs7Y2FzZSAxODA6W3QsYV09W24sc107W3IsaV09Wy1yLC1pXTticmVhaztjYXNlIDI3MDpbdCxhXT1bcywtbl07W3IsaV09Wy1pLHJdfXJldHVybltlLngrdCtNYXRoLm1pbigwLHIpLGUueSthK01hdGgubWluKDAsaSksTWF0aC5hYnMociksTWF0aC5hYnMoaSldfShlKTtzd2l0Y2goYS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09cj9lW2ZzXSgpW0puXS5ub0xheW91dEZhaWx1cmU/IiIhPT1lLnc/TWF0aC5yb3VuZChuLXQud2lkdGgpPD0yOnQud2lkdGg+MjohKCIiIT09ZS5oJiZNYXRoLnJvdW5kKHMtdC5oZWlnaHQpPjIpJiYoIiIhPT1lLnc/TWF0aC5yb3VuZChuLXQud2lkdGgpPD0yfHwwPT09YVtKbl0ubnVtYmVySW5MaW5lJiZ0LmhlaWdodD4yOnQud2lkdGg+Mik6ISFlW2ZzXSgpW0puXS5ub0xheW91dEZhaWx1cmV8fCEoIiIhPT1lLmgmJk1hdGgucm91bmQocy10LmhlaWdodCk+MikmJigoIiI9PT1lLnd8fE1hdGgucm91bmQobi10LndpZHRoKTw9Mnx8IWFbdnNdKCkpJiZ0LmhlaWdodD4yKTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm4hIWVbZnNdKClbSm5dLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxlW0NzXSgpPygiIj09PWUud3x8TWF0aC5yb3VuZChuLXQud2lkdGgpPD0yfHwhYVt2c10oKSkmJnQuaGVpZ2h0PjI6TWF0aC5yb3VuZChzLXQuaGVpZ2h0KTw9Mik7Y2FzZSJwb3NpdGlvbiI6aWYoZVtmc10oKVtKbl0ubm9MYXlvdXRGYWlsdXJlKXJldHVybiEwO2lmKCIiPT09ZS5ofHxNYXRoLnJvdW5kKHMraS10LmhlaWdodCk8PTIpcmV0dXJuITA7cmV0dXJuIHMraT5lW2ZzXSgpW0puXS5jdXJyZW50Q29udGVudEFyZWEuaDtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybiEhZVtmc10oKVtKbl0ubm9MYXlvdXRGYWlsdXJlfHwoIiI9PT1lLmh8fE1hdGgucm91bmQocy10LmhlaWdodCk8PTIpO2RlZmF1bHQ6cmV0dXJuITB9fWNvbnN0IE5vPWVvLnRlbXBsYXRlLmlkLEVvPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsUG89L15IKFxkKykkLyxMbz1uZXcgU2V0KFsiaW1hZ2UvZ2lmIiwiaW1hZ2UvanBlZyIsImltYWdlL2pwZyIsImltYWdlL3BqcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvYXBuZyIsImltYWdlL3gtcG5nIiwiaW1hZ2UvYm1wIiwiaW1hZ2UveC1tcy1ibXAiLCJpbWFnZS90aWZmIiwiaW1hZ2UvdGlmIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pLF9vPVtbWzY2LDc3XSwiaW1hZ2UvYm1wIl0sW1syNTUsMjE2LDI1NV0sImltYWdlL2pwZWciXSxbWzczLDczLDQyLDBdLCJpbWFnZS90aWZmIl0sW1s3Nyw3NywwLDQyXSwiaW1hZ2UvdGlmZiJdLFtbNzEsNzMsNzAsNTYsNTcsOTddLCJpbWFnZS9naWYiXSxbWzEzNyw4MCw3OCw3MSwxMywxMCwyNiwxMF0sImltYWdlL3BuZyJdXTtmdW5jdGlvbiBnZXRCb3JkZXJEaW1zKGUpe2lmKCFlfHwhZS5ib3JkZXIpcmV0dXJue3c6MCxoOjB9O2NvbnN0IHQ9ZS5ib3JkZXJbc3NdKCk7cmV0dXJuIHQ/e3c6dC53aWR0aHNbMF0rdC53aWR0aHNbMl0rdC5pbnNldHNbMF0rdC5pbnNldHNbMl0saDp0LndpZHRoc1sxXSt0LndpZHRoc1szXSt0Lmluc2V0c1sxXSt0Lmluc2V0c1szXX06e3c6MCxoOjB9fWZ1bmN0aW9uIGhhc01hcmdpbihlKXtyZXR1cm4gZS5tYXJnaW4mJihlLm1hcmdpbi50b3BJbnNldHx8ZS5tYXJnaW4ucmlnaHRJbnNldHx8ZS5tYXJnaW4uYm90dG9tSW5zZXR8fGUubWFyZ2luLmxlZnRJbnNldCl9ZnVuY3Rpb24gX3NldFZhbHVlKGUsdCl7aWYoIWUudmFsdWUpe2NvbnN0IHQ9bmV3IFZhbHVlKHt9KTtlW2puXSh0KTtlLnZhbHVlPXR9ZS52YWx1ZVtHc10odCl9ZnVuY3Rpb24qZ2V0Q29udGFpbmVkQ2hpbGRyZW4oZSl7Zm9yKGNvbnN0IHQgb2YgZVtjc10oKSl0IGluc3RhbmNlb2YgU3ViZm9ybVNldD95aWVsZCp0W2xzXSgpOnlpZWxkIHR9ZnVuY3Rpb24gaXNSZXF1aXJlZChlKXtyZXR1cm4iZXJyb3IiPT09ZS52YWxpZGF0ZT8ubnVsbFRlc3R9ZnVuY3Rpb24gc2V0VGFiSW5kZXgoZSl7Zm9yKDtlOyl7aWYoIWUudHJhdmVyc2FsKXtlW3pzXT1lW2RzXSgpW3pzXTtyZXR1cm59aWYoZVt6c10pcmV0dXJuO2xldCB0PW51bGw7Zm9yKGNvbnN0IGEgb2YgZS50cmF2ZXJzYWxbY3NdKCkpaWYoIm5leHQiPT09YS5vcGVyYXRpb24pe3Q9YTticmVha31pZighdHx8IXQucmVmKXtlW3pzXT1lW2RzXSgpW3pzXTtyZXR1cm59Y29uc3QgYT1lW2ZzXSgpO2VbenNdPSsrYVt6c107Y29uc3Qgcj1hW3FzXSh0LnJlZixlKTtpZighcilyZXR1cm47ZT1yWzBdfX1mdW5jdGlvbiBhcHBseUFzc2lzdChlLHQpe2NvbnN0IGE9ZS5hc3Npc3Q7aWYoYSl7Y29uc3QgZT1hW0tzXSgpO2UmJih0LnRpdGxlPWUpO2NvbnN0IHI9YS5yb2xlLm1hdGNoKFBvKTtpZihyKXtjb25zdCBlPSJoZWFkaW5nIixhPXJbMV07dC5yb2xlPWU7dFsiYXJpYS1sZXZlbCJdPWF9fWlmKCJ0YWJsZSI9PT1lLmxheW91dCl0LnJvbGU9InRhYmxlIjtlbHNlIGlmKCJyb3ciPT09ZS5sYXlvdXQpdC5yb2xlPSJyb3ciO2Vsc2V7Y29uc3QgYT1lW2RzXSgpOyJyb3ciPT09YS5sYXlvdXQmJih0LnJvbGU9IlRIIj09PWEuYXNzaXN0Py5yb2xlPyJjb2x1bW5oZWFkZXIiOiJjZWxsIil9fWZ1bmN0aW9uIGFyaWFMYWJlbChlKXtpZighZS5hc3Npc3QpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrWyRuXT90LnNwZWFrWyRuXTp0LnRvb2xUaXA/dC50b29sVGlwWyRuXTpudWxsfWZ1bmN0aW9uIHZhbHVlVG9IdG1sKGUpe3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sY2hpbGRyZW46W3tuYW1lOiJzcGFuIixhdHRyaWJ1dGVzOntzdHlsZTpPYmplY3QuY3JlYXRlKG51bGwpfSx2YWx1ZTplfV19KX1mdW5jdGlvbiBzZXRGaXJzdFVuc3BsaXR0YWJsZShlKXtjb25zdCB0PWVbZnNdKCk7aWYobnVsbD09PXRbSm5dLmZpcnN0VW5zcGxpdHRhYmxlKXt0W0puXS5maXJzdFVuc3BsaXR0YWJsZT1lO3RbSm5dLm5vTGF5b3V0RmFpbHVyZT0hMH19ZnVuY3Rpb24gdW5zZXRGaXJzdFVuc3BsaXR0YWJsZShlKXtjb25zdCB0PWVbZnNdKCk7dFtKbl0uZmlyc3RVbnNwbGl0dGFibGU9PT1lJiYodFtKbl0ubm9MYXlvdXRGYWlsdXJlPSExKX1mdW5jdGlvbiBoYW5kbGVCcmVhayhlKXtpZihlW0puXSlyZXR1cm4hMTtlW0puXT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCJhdXRvIj09PWUudGFyZ2V0VHlwZSlyZXR1cm4hMTtjb25zdCB0PWVbZnNdKCk7bGV0IGE9bnVsbDtpZihlLnRhcmdldCl7YT10W3FzXShlLnRhcmdldCxlW2RzXSgpKTtpZighYSlyZXR1cm4hMTthPWFbMF19Y29uc3R7Y3VycmVudFBhZ2VBcmVhOnIsY3VycmVudENvbnRlbnRBcmVhOml9PXRbSm5dO2lmKCJwYWdlQXJlYSI9PT1lLnRhcmdldFR5cGUpe2EgaW5zdGFuY2VvZiBQYWdlQXJlYXx8KGE9bnVsbCk7aWYoZS5zdGFydE5ldyl7ZVtKbl0udGFyZ2V0PWF8fHI7cmV0dXJuITB9aWYoYSYmYSE9PXIpe2VbSm5dLnRhcmdldD1hO3JldHVybiEwfXJldHVybiExfWEgaW5zdGFuY2VvZiBDb250ZW50QXJlYXx8KGE9bnVsbCk7Y29uc3Qgbj1hJiZhW2RzXSgpO2xldCBzLG89bjtpZihlLnN0YXJ0TmV3KWlmKGEpe2NvbnN0IGU9bi5jb250ZW50QXJlYS5jaGlsZHJlbix0PWUuaW5kZXhPZihpKSxyPWUuaW5kZXhPZihhKTstMSE9PXQmJnQ8ciYmKG89bnVsbCk7cz1yLTF9ZWxzZSBzPXIuY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKTtlbHNle2lmKCFhfHxhPT09aSlyZXR1cm4hMTtzPW4uY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihhKS0xO289bj09PXI/bnVsbDpufWVbSm5dLnRhcmdldD1vO2VbSm5dLmluZGV4PXM7cmV0dXJuITB9ZnVuY3Rpb24gaGFuZGxlT3ZlcmZsb3coZSx0LGEpe2NvbnN0IHI9ZVtmc10oKSxpPXJbSm5dLm5vTGF5b3V0RmFpbHVyZSxuPXRbdXNdO3RbdXNdPSgpPT5lO3JbSm5dLm5vTGF5b3V0RmFpbHVyZT0hMDtjb25zdCBzPXRbS3NdKGEpO2VbVW5dKHMuaHRtbCxzLmJib3gpO3JbSm5dLm5vTGF5b3V0RmFpbHVyZT1pO3RbdXNdPW59Y2xhc3MgQXBwZWFyYW5jZUZpbHRlciBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiYXBwZWFyYW5jZUZpbHRlciIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQXJjIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJhcmMiLCEwKTt0aGlzLmNpcmN1bGFyPWdldEludGVnZXIoe2RhdGE6ZS5jaXJjdWxhcixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaGFuZD1nZXRTdHJpbmdPcHRpb24oZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuc3RhcnRBbmdsZT1nZXRGbG9hdCh7ZGF0YTplLnN0YXJ0QW5nbGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnN3ZWVwQW5nbGU9Z2V0RmxvYXQoe2RhdGE6ZS5zd2VlcEFuZ2xlLGRlZmF1bHRWYWx1ZTozNjAsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lZGdlPW51bGw7dGhpcy5maWxsPW51bGx9W0tzXSgpe2NvbnN0IGU9dGhpcy5lZGdlfHxuZXcgRWRnZSh7fSksdD1lW1lzXSgpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTsidmlzaWJsZSI9PT10aGlzLmZpbGw/LnByZXNlbmNlP09iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbWXNdKCkpOmEuZmlsbD0idHJhbnNwYXJlbnQiO2Euc3Ryb2tlV2lkdGg9bWVhc3VyZVRvU3RyaW5nKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCk7YS5zdHJva2U9dC5jb2xvcjtsZXQgcjtjb25zdCBpPXt4bWxuczpFbyxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6InZpc2libGUifX07aWYoMzYwPT09dGhpcy5zd2VlcEFuZ2xlKXI9e25hbWU6ImVsbGlwc2UiLGF0dHJpYnV0ZXM6e3htbG5zOkVvLGN4OiI1MCUiLGN5OiI1MCUiLHJ4OiI1MCUiLHJ5OiI1MCUiLHN0eWxlOmF9fTtlbHNle2NvbnN0IGU9dGhpcy5zdGFydEFuZ2xlKk1hdGguUEkvMTgwLHQ9dGhpcy5zd2VlcEFuZ2xlKk1hdGguUEkvMTgwLG49dGhpcy5zd2VlcEFuZ2xlPjE4MD8xOjAsW3MsbyxjLGxdPVs1MCooMStNYXRoLmNvcyhlKSksNTAqKDEtTWF0aC5zaW4oZSkpLDUwKigxK01hdGguY29zKGUrdCkpLDUwKigxLU1hdGguc2luKGUrdCkpXTtyPXtuYW1lOiJwYXRoIixhdHRyaWJ1dGVzOnt4bWxuczpFbyxkOmBNICR7c30gJHtvfSBBIDUwIDUwIDAgJHtufSAwICR7Y30gJHtsfWAsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOmF9fTtPYmplY3QuYXNzaWduKGkse3ZpZXdCb3g6IjAgMCAxMDAgMTAwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfWNvbnN0IG49e25hbWU6InN2ZyIsY2hpbGRyZW46W3JdLGF0dHJpYnV0ZXM6aX07aWYoaGFzTWFyZ2luKHRoaXNbZHNdKClbZHNdKCkpKXJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbbl19KTtuLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKG4pfX1jbGFzcyBBcmVhIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJhcmVhIiwhMCk7dGhpcy5jb2xTcGFuPWdldEludGVnZXIoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yZWxldmFudD1nZXRSZWxldmFudChlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmFyZWE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leGNsR3JvdXA9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtU2V0PW5ldyBYRkFPYmplY3RBcnJheX0qW2xzXSgpe3lpZWxkKmdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpfVtGc10oKXtyZXR1cm4hMH1beHNdKCl7cmV0dXJuITB9W1VuXShlLHQpe2NvbnN0W2EscixpLG5dPXQ7dGhpc1tKbl0ud2lkdGg9TWF0aC5tYXgodGhpc1tKbl0ud2lkdGgsYStpKTt0aGlzW0puXS5oZWlnaHQ9TWF0aC5tYXgodGhpc1tKbl0uaGVpZ2h0LHIrbik7dGhpc1tKbl0uY2hpbGRyZW4ucHVzaChlKX1bdHNdKCl7cmV0dXJuIHRoaXNbSm5dLmF2YWlsYWJsZVNwYWNlfVtLc10oZSl7Y29uc3QgdD10b1N0eWxlKHRoaXMsInBvc2l0aW9uIiksYT17c3R5bGU6dCxpZDp0aGlzW1pzXSxjbGFzczpbInhmYUFyZWEiXX07aXNQcmludE9ubHkodGhpcykmJmEuY2xhc3MucHVzaCgieGZhUHJpbnRPbmx5Iik7dGhpcy5uYW1lJiYoYS54ZmFOYW1lPXRoaXMubmFtZSk7Y29uc3Qgcj1bXTt0aGlzW0puXT17Y2hpbGRyZW46cix3aWR0aDowLGhlaWdodDowLGF2YWlsYWJsZVNwYWNlOmV9O2NvbnN0IGk9dGhpc1tYbl0oe2ZpbHRlcjpuZXcgU2V0KFsiYXJlYSIsImRyYXciLCJmaWVsZCIsImV4Y2xHcm91cCIsInN1YmZvcm0iLCJzdWJmb3JtU2V0Il0pLGluY2x1ZGU6ITB9KTtpZighaS5zdWNjZXNzKXtpZihpLmlzQnJlYWsoKSlyZXR1cm4gaTtkZWxldGUgdGhpc1tKbl07cmV0dXJuIEhUTUxSZXN1bHQuRkFJTFVSRX10LndpZHRoPW1lYXN1cmVUb1N0cmluZyh0aGlzW0puXS53aWR0aCk7dC5oZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKHRoaXNbSm5dLmhlaWdodCk7Y29uc3Qgbj17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmEsY2hpbGRyZW46cn0scz1bdGhpcy54LHRoaXMueSx0aGlzW0puXS53aWR0aCx0aGlzW0puXS5oZWlnaHRdO2RlbGV0ZSB0aGlzW0puXTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKG4scyl9fWNsYXNzIEFzc2lzdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiYXNzaXN0IiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJvbGU9ZS5yb2xlfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zcGVhaz1udWxsO3RoaXMudG9vbFRpcD1udWxsfVtLc10oKXtyZXR1cm4gdGhpcy50b29sVGlwPy5bJG5dfHxudWxsfX1jbGFzcyBCYXJjb2RlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJiYXJjb2RlIiwhMCk7dGhpcy5jaGFyRW5jb2Rpbmc9Z2V0S2V5d29yZCh7ZGF0YTplLmNoYXJFbmNvZGluZz9lLmNoYXJFbmNvZGluZy50b0xvd2VyQ2FzZSgpOiIiLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTplPT5bInV0Zi04IiwiYmlnLWZpdmUiLCJmb250c3BlY2lmaWMiLCJnYmsiLCJnYi0xODAzMCIsImdiLTIzMTIiLCJrc2MtNTYwMSIsIm5vbmUiLCJzaGlmdC1qaXMiLCJ1Y3MtMiIsInV0Zi0xNiJdLmluY2x1ZGVzKGUpfHxlLm1hdGNoKC9pc28tODg1OS1cZHsyfS8pfSk7dGhpcy5jaGVja3N1bT1nZXRTdHJpbmdPcHRpb24oZS5jaGVja3N1bSxbIm5vbmUiLCIxbW9kMTAiLCIxbW9kMTBfMW1vZDExIiwiMm1vZDEwIiwiYXV0byJdKTt0aGlzLmRhdGFDb2x1bW5Db3VudD1nZXRJbnRlZ2VyKHtkYXRhOmUuZGF0YUNvbHVtbkNvdW50LGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5kYXRhTGVuZ3RoPWdldEludGVnZXIoe2RhdGE6ZS5kYXRhTGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5kYXRhUHJlcD1nZXRTdHJpbmdPcHRpb24oZS5kYXRhUHJlcCxbIm5vbmUiLCJmbGF0ZUNvbXByZXNzIl0pO3RoaXMuZGF0YVJvd0NvdW50PWdldEludGVnZXIoe2RhdGE6ZS5kYXRhUm93Q291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmVuZENoYXI9ZS5lbmRDaGFyfHwiIjt0aGlzLmVycm9yQ29ycmVjdGlvbkxldmVsPWdldEludGVnZXIoe2RhdGE6ZS5lcnJvckNvcnJlY3Rpb25MZXZlbCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MCYmZTw9OH0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tb2R1bGVIZWlnaHQ9Z2V0TWVhc3VyZW1lbnQoZS5tb2R1bGVIZWlnaHQsIjVtbSIpO3RoaXMubW9kdWxlV2lkdGg9Z2V0TWVhc3VyZW1lbnQoZS5tb2R1bGVXaWR0aCwiMC4yNW1tIik7dGhpcy5wcmludENoZWNrRGlnaXQ9Z2V0SW50ZWdlcih7ZGF0YTplLnByaW50Q2hlY2tEaWdpdCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMucm93Q29sdW1uUmF0aW89Z2V0UmF0aW8oZS5yb3dDb2x1bW5SYXRpbyk7dGhpcy5zdGFydENoYXI9ZS5zdGFydENoYXJ8fCIiO3RoaXMudGV4dExvY2F0aW9uPWdldFN0cmluZ09wdGlvbihlLnRleHRMb2NhdGlvbixbImJlbG93IiwiYWJvdmUiLCJhYm92ZUVtYmVkZGVkIiwiYmVsb3dFbWJlZGRlZCIsIm5vbmUiXSk7dGhpcy50cnVuY2F0ZT1nZXRJbnRlZ2VyKHtkYXRhOmUudHJ1bmNhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZT9lLnR5cGUudG9Mb3dlckNhc2UoKToiIixbImF6dGVjIiwiY29kYWJhciIsImNvZGUyb2Y1aW5kdXN0cmlhbCIsImNvZGUyb2Y1aW50ZXJsZWF2ZWQiLCJjb2RlMm9mNW1hdHJpeCIsImNvZGUyb2Y1c3RhbmRhcmQiLCJjb2RlM29mOSIsImNvZGUzb2Y5ZXh0ZW5kZWQiLCJjb2RlMTEiLCJjb2RlNDkiLCJjb2RlOTMiLCJjb2RlMTI4IiwiY29kZTEyOGEiLCJjb2RlMTI4YiIsImNvZGUxMjhjIiwiY29kZTEyOHNzY2MiLCJkYXRhbWF0cml4IiwiZWFuOCIsImVhbjhhZGQyIiwiZWFuOGFkZDUiLCJlYW4xMyIsImVhbjEzYWRkMiIsImVhbjEzYWRkNSIsImVhbjEzcHdjZCIsImZpbSIsImxvZ21hcnMiLCJtYXhpY29kZSIsIm1zaSIsInBkZjQxNyIsInBkZjQxN21hY3JvIiwicGxlc3NleSIsInBvc3RhdXNjdXN0MiIsInBvc3RhdXNjdXN0MyIsInBvc3RhdXNyZXBseXBhaWQiLCJwb3N0YXVzc3RhbmRhcmQiLCJwb3N0dWtybTRzY2MiLCJwb3N0dXNkcGJjIiwicG9zdHVzaW1iIiwicG9zdHVzc3RhbmRhcmQiLCJwb3N0dXM1emlwIiwicXJjb2RlIiwicmZpZCIsInJzczE0IiwicnNzMTRleHBhbmRlZCIsInJzczE0bGltaXRlZCIsInJzczE0c3RhY2tlZCIsInJzczE0c3RhY2tlZG9tbmkiLCJyc3MxNHRydW5jYXRlZCIsInRlbGVwZW4iLCJ1Y2MxMjgiLCJ1Y2MxMjhyYW5kb20iLCJ1Y2MxMjhzc2NjIiwidXBjYSIsInVwY2FhZGQyIiwidXBjYWFkZDUiLCJ1cGNhcHdjZCIsInVwY2UiLCJ1cGNlYWRkMiIsInVwY2VhZGQ1IiwidXBjZWFuMiIsInVwY2VhbjUiLCJ1cHNtYXhpY29kZSJdKTt0aGlzLnVwc01vZGU9Z2V0U3RyaW5nT3B0aW9uKGUudXBzTW9kZSxbInVzQ2FycmllciIsImludGVybmF0aW9uYWxDYXJyaWVyIiwic2VjdXJlU3ltYm9sIiwic3RhbmRhcmRTeW1ib2wiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMud2lkZU5hcnJvd1JhdGlvPWdldFJhdGlvKGUud2lkZU5hcnJvd1JhdGlvKTt0aGlzLmVuY3J5cHQ9bnVsbDt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBCaW5kIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJiaW5kIiwhMCk7dGhpcy5tYXRjaD1nZXRTdHJpbmdPcHRpb24oZS5tYXRjaCxbIm9uY2UiLCJkYXRhUmVmIiwiZ2xvYmFsIiwibm9uZSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIEJpbmRJdGVtcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiYmluZEl0ZW1zIik7dGhpcy5jb25uZWN0aW9uPWUuY29ubmVjdGlvbnx8IiI7dGhpcy5sYWJlbFJlZj1lLmxhYmVsUmVmfHwiIjt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy52YWx1ZVJlZj1lLnZhbHVlUmVmfHwiIn19Y2xhc3MgQm9va2VuZCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiYm9va2VuZCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQm9vbGVhbkVsZW1lbnQgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiYm9vbGVhbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtLc10oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKDE9PT10aGlzWyRuXT8iMSI6IjAiKX19Y2xhc3MgQm9yZGVyIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJib3JkZXIiLCEwKTt0aGlzLmJyZWFrPWdldFN0cmluZ09wdGlvbihlLmJyZWFrLFsiY2xvc2UiLCJvcGVuIl0pO3RoaXMuaGFuZD1nZXRTdHJpbmdPcHRpb24oZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWxldmFudD1nZXRSZWxldmFudChlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb3JuZXI9bmV3IFhGQU9iamVjdEFycmF5KDQpO3RoaXMuZWRnZT1uZXcgWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZpbGw9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtzc10oKXtpZighdGhpc1tKbl0pe2NvbnN0IGU9dGhpcy5lZGdlLmNoaWxkcmVuLnNsaWNlKCk7aWYoZS5sZW5ndGg8NCl7Y29uc3QgdD1lLmF0KC0xKXx8bmV3IEVkZ2Uoe30pO2ZvcihsZXQgYT1lLmxlbmd0aDthPDQ7YSsrKWUucHVzaCh0KX1jb25zdCB0PWUubWFwKGU9PmUudGhpY2tuZXNzKSxhPVswLDAsMCwwXTtpZih0aGlzLm1hcmdpbil7YVswXT10aGlzLm1hcmdpbi50b3BJbnNldDthWzFdPXRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7YVsyXT10aGlzLm1hcmdpbi5ib3R0b21JbnNldDthWzNdPXRoaXMubWFyZ2luLmxlZnRJbnNldH10aGlzW0puXT17d2lkdGhzOnQsaW5zZXRzOmEsZWRnZXM6ZX19cmV0dXJuIHRoaXNbSm5dfVtZc10oKXtjb25zdHtlZGdlczplfT10aGlzW3NzXSgpLHQ9ZS5tYXAoZT0+e2NvbnN0IHQ9ZVtZc10oKTt0LmNvbG9yfHw9IiMwMDAwMDAiO3JldHVybiB0fSksYT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMubWFyZ2luJiZPYmplY3QuYXNzaWduKGEsdGhpcy5tYXJnaW5bWXNdKCkpOyJ2aXNpYmxlIj09PXRoaXMuZmlsbD8ucHJlc2VuY2UmJk9iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbWXNdKCkpO2lmKHRoaXMuY29ybmVyLmNoaWxkcmVuLnNvbWUoZT0+MCE9PWUucmFkaXVzKSl7Y29uc3QgZT10aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAoZT0+ZVtZc10oKSk7aWYoMj09PWUubGVuZ3RofHwzPT09ZS5sZW5ndGgpe2NvbnN0IHQ9ZS5hdCgtMSk7Zm9yKGxldCBhPWUubGVuZ3RoO2E8NDthKyspZS5wdXNoKHQpfWEuYm9yZGVyUmFkaXVzPWUubWFwKGU9PmUucmFkaXVzKS5qb2luKCIgIil9c3dpdGNoKHRoaXMucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjpjYXNlImhpZGRlbiI6YS5ib3JkZXJTdHlsZT0iIjticmVhaztjYXNlImluYWN0aXZlIjphLmJvcmRlclN0eWxlPSJub25lIjticmVhaztkZWZhdWx0OmEuYm9yZGVyU3R5bGU9dC5tYXAoZT0+ZS5zdHlsZSkuam9pbigiICIpfWEuYm9yZGVyV2lkdGg9dC5tYXAoZT0+ZS53aWR0aCkuam9pbigiICIpO2EuYm9yZGVyQ29sb3I9dC5tYXAoZT0+ZS5jb2xvcikuam9pbigiICIpO3JldHVybiBhfX1jbGFzcyBCcmVhayBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiYnJlYWsiLCEwKTt0aGlzLmFmdGVyPWdldFN0cmluZ09wdGlvbihlLmFmdGVyLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiLCJwYWdlRXZlbiIsInBhZ2VPZGQiXSk7dGhpcy5hZnRlclRhcmdldD1lLmFmdGVyVGFyZ2V0fHwiIjt0aGlzLmJlZm9yZT1nZXRTdHJpbmdPcHRpb24oZS5iZWZvcmUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKTt0aGlzLmJlZm9yZVRhcmdldD1lLmJlZm9yZVRhcmdldHx8IiI7dGhpcy5ib29rZW5kTGVhZGVyPWUuYm9va2VuZExlYWRlcnx8IiI7dGhpcy5ib29rZW5kVHJhaWxlcj1lLmJvb2tlbmRUcmFpbGVyfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3ZlcmZsb3dMZWFkZXI9ZS5vdmVyZmxvd0xlYWRlcnx8IiI7dGhpcy5vdmVyZmxvd1RhcmdldD1lLm92ZXJmbG93VGFyZ2V0fHwiIjt0aGlzLm92ZXJmbG93VHJhaWxlcj1lLm92ZXJmbG93VHJhaWxlcnx8IiI7dGhpcy5zdGFydE5ldz1nZXRJbnRlZ2VyKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgQnJlYWtBZnRlciBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiYnJlYWtBZnRlciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMuc3RhcnROZXc9Z2V0SW50ZWdlcih7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudGFyZ2V0VHlwZT1nZXRTdHJpbmdPcHRpb24oZS50YXJnZXRUeXBlLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXSk7dGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc2NyaXB0PW51bGx9fWNsYXNzIEJyZWFrQmVmb3JlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJicmVha0JlZm9yZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMuc3RhcnROZXc9Z2V0SW50ZWdlcih7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudGFyZ2V0VHlwZT1nZXRTdHJpbmdPcHRpb24oZS50YXJnZXRUeXBlLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXSk7dGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc2NyaXB0PW51bGx9W0tzXShlKXt0aGlzW0puXT17fTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfX1jbGFzcyBCdXR0b24gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImJ1dHRvbiIsITApO3RoaXMuaGlnaGxpZ2h0PWdldFN0cmluZ09wdGlvbihlLmhpZ2hsaWdodCxbImludmVydGVkIiwibm9uZSIsIm91dGxpbmUiLCJwdXNoIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W0tzXShlKXtjb25zdCB0PXRoaXNbZHNdKClbZHNdKCksYT17bmFtZToiYnV0dG9uIixhdHRyaWJ1dGVzOntpZDp0aGlzW1pzXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGUgb2YgdC5ldmVudC5jaGlsZHJlbil7aWYoImNsaWNrIiE9PWUuYWN0aXZpdHl8fCFlLnNjcmlwdCljb250aW51ZTtjb25zdCB0PXJlY292ZXJKc1VSTChlLnNjcmlwdFskbl0pO2lmKCF0KWNvbnRpbnVlO2NvbnN0IHI9Zml4VVJMKHQudXJsKTtyJiZhLmNoaWxkcmVuLnB1c2goe25hbWU6ImEiLGF0dHJpYnV0ZXM6e2lkOiJsaW5rIit0aGlzW1pzXSxocmVmOnIsbmV3V2luZG93OnQubmV3V2luZG93LGNsYXNzOlsieGZhTGluayJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0pfXJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoYSl9fWNsYXNzIENhbGN1bGF0ZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiY2FsY3VsYXRlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm92ZXJyaWRlPWdldFN0cmluZ09wdGlvbihlLm92ZXJyaWRlLFsiZGlzYWJsZWQiLCJlcnJvciIsImlnbm9yZSIsIndhcm5pbmciXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZXNzYWdlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgQ2FwdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiY2FwdGlvbiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wbGFjZW1lbnQ9Z2V0U3RyaW5nT3B0aW9uKGUucGxhY2VtZW50LFsibGVmdCIsImJvdHRvbSIsImlubGluZSIsInJpZ2h0IiwidG9wIl0pO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZXNlcnZlPU1hdGguY2VpbChnZXRNZWFzdXJlbWVudChlLnJlc2VydmUpKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudmFsdWU9bnVsbH1bR3NdKGUpe19zZXRWYWx1ZSh0aGlzLGUpfVtzc10oZSl7aWYoIXRoaXNbSm5dKXtsZXR7d2lkdGg6dCxoZWlnaHQ6YX09ZTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnQ9dGhpcy5yZXNlcnZlPD0wP3Q6dGhpcy5yZXNlcnZlO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6YT10aGlzLnJlc2VydmU8PTA/YTp0aGlzLnJlc2VydmV9dGhpc1tKbl09bGF5b3V0Tm9kZSh0aGlzLHt3aWR0aDp0LGhlaWdodDphfSl9cmV0dXJuIHRoaXNbSm5dfVtLc10oZSl7aWYoIXRoaXMudmFsdWUpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7dGhpc1tfc10oKTtjb25zdCB0PXRoaXMudmFsdWVbS3NdKGUpLmh0bWw7aWYoIXQpe3RoaXNbTHNdKCk7cmV0dXJuIEhUTUxSZXN1bHQuRU1QVFl9Y29uc3QgYT10aGlzLnJlc2VydmU7aWYodGhpcy5yZXNlcnZlPD0wKXtjb25zdHt3OnQsaDphfT10aGlzW3NzXShlKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnRoaXMucmVzZXJ2ZT10O2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPWF9fWNvbnN0IHI9W107InN0cmluZyI9PXR5cGVvZiB0P3IucHVzaCh7bmFtZToiI3RleHQiLHZhbHVlOnR9KTpyLnB1c2godCk7Y29uc3QgaT10b1N0eWxlKHRoaXMsImZvbnQiLCJtYXJnaW4iLCJ2aXNpYmlsaXR5Iik7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOnRoaXMucmVzZXJ2ZT4wJiYoaS53aWR0aD1tZWFzdXJlVG9TdHJpbmcodGhpcy5yZXNlcnZlKSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjp0aGlzLnJlc2VydmU+MCYmKGkuaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyh0aGlzLnJlc2VydmUpKX1zZXRQYXJhKHRoaXMsbnVsbCx0KTt0aGlzW0xzXSgpO3RoaXMucmVzZXJ2ZT1hO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6aSxjbGFzczpbInhmYUNhcHRpb24iXX0sY2hpbGRyZW46cn0pfX1jbGFzcyBDZXJ0aWZpY2F0ZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiY2VydGlmaWNhdGUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQ2VydGlmaWNhdGVzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJjZXJ0aWZpY2F0ZXMiLCEwKTt0aGlzLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9Z2V0U3RyaW5nT3B0aW9uKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVybD1lLnVybHx8IiI7dGhpcy51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmVuY3J5cHRpb249bnVsbDt0aGlzLmlzc3VlcnM9bnVsbDt0aGlzLmtleVVzYWdlPW51bGw7dGhpcy5vaWRzPW51bGw7dGhpcy5zaWduaW5nPW51bGw7dGhpcy5zdWJqZWN0RE5zPW51bGx9fWNsYXNzIENoZWNrQnV0dG9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJjaGVja0J1dHRvbiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tYXJrPWdldFN0cmluZ09wdGlvbihlLm1hcmssWyJkZWZhdWx0IiwiY2hlY2siLCJjaXJjbGUiLCJjcm9zcyIsImRpYW1vbmQiLCJzcXVhcmUiLCJzdGFyIl0pO3RoaXMuc2hhcGU9Z2V0U3RyaW5nT3B0aW9uKGUuc2hhcGUsWyJzcXVhcmUiLCJyb3VuZCJdKTt0aGlzLnNpemU9Z2V0TWVhc3VyZW1lbnQoZS5zaXplLCIxMHB0Iik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtLc10oZSl7Y29uc3QgdD10b1N0eWxlKHRoaXMsIm1hcmdpbiIpLGE9bWVhc3VyZVRvU3RyaW5nKHRoaXMuc2l6ZSk7dC53aWR0aD10LmhlaWdodD1hO2xldCByLGksbjtjb25zdCBzPXRoaXNbZHNdKClbZHNdKCksbz1zLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCYmcy5pdGVtcy5jaGlsZHJlblswXVtLc10oKS5odG1sfHxbXSxjPXtvbjoodm9pZCAwIT09b1swXT9vWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1vWzFdP29bMV06Im9mZiIpLnRvU3RyaW5nKCl9LGw9KHMudmFsdWU/Llskc10oKXx8Im9mZiIpPT09Yy5vbnx8dm9pZCAwLGg9c1t1c10oKSx1PXNbWnNdO2xldCBkO2lmKGggaW5zdGFuY2VvZiBFeGNsR3JvdXApe249aFtac107cj0icmFkaW8iO2k9InhmYVJhZGlvIjtkPWhbVm5dPy5bWnNdfHxoW1pzXX1lbHNle3I9ImNoZWNrYm94IjtpPSJ4ZmFDaGVja2JveCI7ZD1zW1ZuXT8uW1pzXXx8c1tac119Y29uc3QgZj17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltpXSxzdHlsZTp0LGZpZWxkSWQ6dSxkYXRhSWQ6ZCx0eXBlOnIsY2hlY2tlZDpsLHhmYU9uOmMub24seGZhT2ZmOmMub2ZmLCJhcmlhLWxhYmVsIjphcmlhTGFiZWwocyksImFyaWEtcmVxdWlyZWQiOiExfX07biYmKGYuYXR0cmlidXRlcy5uYW1lPW4pO2lmKGlzUmVxdWlyZWQocykpe2YuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO2YuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbZl19KX19Y2xhc3MgQ2hvaWNlTGlzdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiY2hvaWNlTGlzdCIsITApO3RoaXMuY29tbWl0T249Z2V0U3RyaW5nT3B0aW9uKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVuPWdldFN0cmluZ09wdGlvbihlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKTt0aGlzLnRleHRFbnRyeT1nZXRJbnRlZ2VyKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtLc10oZSl7Y29uc3QgdD10b1N0eWxlKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLGE9dGhpc1tkc10oKVtkc10oKSxyPXtmb250U2l6ZTpgY2FsYygke2EuZm9udD8uc2l6ZXx8MTB9cHggKiB2YXIoLS10b3RhbC1zY2FsZS1mYWN0b3IpKWB9LGk9W107aWYoYS5pdGVtcy5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgZT1hLml0ZW1zO2xldCB0PTAsbj0wO2lmKDI9PT1lLmNoaWxkcmVuLmxlbmd0aCl7dD1lLmNoaWxkcmVuWzBdLnNhdmU7bj0xLXR9Y29uc3Qgcz1lLmNoaWxkcmVuW3RdW0tzXSgpLmh0bWwsbz1lLmNoaWxkcmVuW25dW0tzXSgpLmh0bWw7bGV0IGM9ITE7Y29uc3QgbD1hLnZhbHVlPy5bJHNdKCl8fCIiO2ZvcihsZXQgZT0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD17bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOnt2YWx1ZTpvW2VdfHxzW2VdLHN0eWxlOnJ9LHZhbHVlOnNbZV19O29bZV09PT1sJiYodC5hdHRyaWJ1dGVzLnNlbGVjdGVkPWM9ITApO2kucHVzaCh0KX1jfHxpLnNwbGljZSgwLDAse25hbWU6Im9wdGlvbiIsYXR0cmlidXRlczp7aGlkZGVuOiEwLHNlbGVjdGVkOiEwfSx2YWx1ZToiICJ9KX1jb25zdCBuPXtjbGFzczpbInhmYVNlbGVjdCJdLGZpZWxkSWQ6YVtac10sZGF0YUlkOmFbVm5dPy5bWnNdfHxhW1pzXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoYSksImFyaWEtcmVxdWlyZWQiOiExfTtpZihpc1JlcXVpcmVkKGEpKXtuWyJhcmlhLXJlcXVpcmVkIl09ITA7bi5yZXF1aXJlZD0hMH0ibXVsdGlTZWxlY3QiPT09dGhpcy5vcGVuJiYobi5tdWx0aXBsZT0hMCk7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W3tuYW1lOiJzZWxlY3QiLGNoaWxkcmVuOmksYXR0cmlidXRlczpufV19KX19Y2xhc3MgQ29sb3IgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImNvbG9yIiwhMCk7dGhpcy5jU3BhY2U9Z2V0U3RyaW5nT3B0aW9uKGUuY1NwYWNlLFsiU1JHQiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZhbHVlPWUudmFsdWU/ZnVuY3Rpb24gZ2V0Q29sb3IoZSx0PVswLDAsMF0pe2xldFthLHIsaV09dDtpZighZSlyZXR1cm57cjphLGc6cixiOml9O2NvbnN0IG49ZS5zcGxpdCgiLCIsMykubWFwKGU9Pk1hdGhDbGFtcChwYXJzZUludChlLnRyaW0oKSwxMCksMCwyNTUpKS5tYXAoZT0+aXNOYU4oZSk/MDplKTtpZihuLmxlbmd0aDwzKXJldHVybntyOmEsZzpyLGI6aX07W2EscixpXT1uO3JldHVybntyOmEsZzpyLGI6aX19KGUudmFsdWUpOiIiO3RoaXMuZXh0cmFzPW51bGx9W3BzXSgpe3JldHVybiExfVtZc10oKXtyZXR1cm4gdGhpcy52YWx1ZT9VdGlsLm1ha2VIZXhDb2xvcih0aGlzLnZhbHVlLnIsdGhpcy52YWx1ZS5nLHRoaXMudmFsdWUuYik6bnVsbH19Y2xhc3MgQ29tYiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiY29tYiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5udW1iZXJPZkNlbGxzPWdldEludGVnZXIoe2RhdGE6ZS5udW1iZXJPZkNlbGxzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIENvbm5lY3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImNvbm5lY3QiLCEwKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzYWdlPWdldFN0cmluZ09wdGlvbihlLnVzYWdlLFsiZXhwb3J0QW5kSW1wb3J0IiwiZXhwb3J0T25seSIsImltcG9ydE9ubHkiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBDb250ZW50QXJlYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiY29udGVudEFyZWEiLCEwKTt0aGlzLmg9Z2V0TWVhc3VyZW1lbnQoZS5oKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1nZXRNZWFzdXJlbWVudChlLncpO3RoaXMueD1nZXRNZWFzdXJlbWVudChlLngsIjBwdCIpO3RoaXMueT1nZXRNZWFzdXJlbWVudChlLnksIjBwdCIpO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGx9W0tzXShlKXtjb25zdCB0PXtsZWZ0Om1lYXN1cmVUb1N0cmluZyh0aGlzLngpLHRvcDptZWFzdXJlVG9TdHJpbmcodGhpcy55KSx3aWR0aDptZWFzdXJlVG9TdHJpbmcodGhpcy53KSxoZWlnaHQ6bWVhc3VyZVRvU3RyaW5nKHRoaXMuaCl9LGE9WyJ4ZmFDb250ZW50YXJlYSJdO2lzUHJpbnRPbmx5KHRoaXMpJiZhLnB1c2goInhmYVByaW50T25seSIpO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7c3R5bGU6dCxjbGFzczphLGlkOnRoaXNbWnNdfX0pfX1jbGFzcyBDb3JuZXIgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImNvcm5lciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbnZlcnRlZD1nZXRJbnRlZ2VyKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmpvaW49Z2V0U3RyaW5nT3B0aW9uKGUuam9pbixbInNxdWFyZSIsInJvdW5kIl0pO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yYWRpdXM9Z2V0TWVhc3VyZW1lbnQoZS5yYWRpdXMpO3RoaXMuc3Ryb2tlPWdldFN0cmluZ09wdGlvbihlLnN0cm9rZSxbInNvbGlkIiwiZGFzaERvdCIsImRhc2hEb3REb3QiLCJkYXNoZWQiLCJkb3R0ZWQiLCJlbWJvc3NlZCIsImV0Y2hlZCIsImxvd2VyZWQiLCJyYWlzZWQiXSk7dGhpcy50aGlja25lc3M9Z2V0TWVhc3VyZW1lbnQoZS50aGlja25lc3MsIjAuNXB0Iik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtZc10oKXtjb25zdCBlPXRvU3R5bGUodGhpcywidmlzaWJpbGl0eSIpO2UucmFkaXVzPW1lYXN1cmVUb1N0cmluZygic3F1YXJlIj09PXRoaXMuam9pbj8wOnRoaXMucmFkaXVzKTtyZXR1cm4gZX19Y2xhc3MgRGF0ZUVsZW1lbnQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJkYXRlIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W1luXSgpe2NvbnN0IGU9dGhpc1skbl0udHJpbSgpO3RoaXNbJG5dPWU/bmV3IERhdGUoZSk6bnVsbH1bS3NdKGUpe3JldHVybiB2YWx1ZVRvSHRtbCh0aGlzWyRuXT90aGlzWyRuXS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJkYXRlVGltZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtZbl0oKXtjb25zdCBlPXRoaXNbJG5dLnRyaW0oKTt0aGlzWyRuXT1lP25ldyBEYXRlKGUpOm51bGx9W0tzXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwodGhpc1skbl0/dGhpc1skbl0udG9TdHJpbmcoKToiIil9fWNsYXNzIERhdGVUaW1lRWRpdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZGF0ZVRpbWVFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PWdldFN0cmluZ09wdGlvbihlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBpY2tlcj1nZXRTdHJpbmdPcHRpb24oZS5waWNrZXIsWyJob3N0Iiwibm9uZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNvbWI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W0tzXShlKXtjb25zdCB0PXRvU3R5bGUodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGE9dGhpc1tkc10oKVtkc10oKSxyPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZmllbGRJZDphW1pzXSxkYXRhSWQ6YVtWbl0/Lltac118fGFbWnNdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGEpLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQoYSkpe3IuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO3IuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbcl19KX19Y2xhc3MgRGVjaW1hbCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImRlY2ltYWwiKTt0aGlzLmZyYWNEaWdpdHM9Z2V0SW50ZWdlcih7ZGF0YTplLmZyYWNEaWdpdHMsZGVmYXVsdFZhbHVlOjIsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZERpZ2l0cz1nZXRJbnRlZ2VyKHtkYXRhOmUubGVhZERpZ2l0cyxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W1luXSgpe2NvbnN0IGU9cGFyc2VGbG9hdCh0aGlzWyRuXS50cmltKCkpO3RoaXNbJG5dPWlzTmFOKGUpP251bGw6ZX1bS3NdKGUpe3JldHVybiB2YWx1ZVRvSHRtbChudWxsIT09dGhpc1skbl0/dGhpc1skbl0udG9TdHJpbmcoKToiIil9fWNsYXNzIERlZmF1bHRVaSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZGVmYXVsdFVpIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgRGVzYyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZGVzYyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRGlnZXN0TWV0aG9kIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJkaWdlc3RNZXRob2QiLFsiIiwiU0hBMSIsIlNIQTI1NiIsIlNIQTUxMiIsIlJJUEVNRDE2MCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRGlnZXN0TWV0aG9kcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZGlnZXN0TWV0aG9kcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmRpZ2VzdE1ldGhvZD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIERyYXcgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImRyYXciLCEwKTt0aGlzLmFuY2hvclR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49Z2V0SW50ZWdlcih7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5oPWUuaD9nZXRNZWFzdXJlbWVudChlLmgpOiIiO3RoaXMuaEFsaWduPWdldFN0cmluZ09wdGlvbihlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiI7dGhpcy5tYXhIPWdldE1lYXN1cmVtZW50KGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPWdldE1lYXN1cmVtZW50KGUubWF4VywiMHB0Iik7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMucm90YXRlPWdldEludGVnZXIoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZSU5MD09MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FwdGlvbj1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnRyYXZlcnNhbD1udWxsO3RoaXMudWk9bnVsbDt0aGlzLnZhbHVlPW51bGw7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgWEZBT2JqZWN0QXJyYXl9W0dzXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bS3NdKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2UpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7Zml4RGltZW5zaW9ucyh0aGlzKTt0aGlzW19zXSgpO2NvbnN0IHQ9dGhpcy53LGE9dGhpcy5oLHt3OnIsaDppLGlzQnJva2VuOm59PWxheW91dE5vZGUodGhpcyxlKTtpZihyJiYiIj09PXRoaXMudyl7aWYobiYmdGhpc1t1c10oKVt2c10oKSl7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXRoaXMudz1yfWkmJiIiPT09dGhpcy5oJiYodGhpcy5oPWkpO3NldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCFjaGVja0RpbWVuc2lvbnModGhpcyxlKSl7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7Y29uc3Qgcz10b1N0eWxlKHRoaXMsImZvbnQiLCJoQWxpZ24iLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJwcmVzZW5jZSIsInJvdGF0ZSIsImFuY2hvclR5cGUiLCJib3JkZXIiLCJtYXJnaW4iKTtzZXRNaW5NYXhEaW1lbnNpb25zKHRoaXMscyk7aWYocy5tYXJnaW4pe3MucGFkZGluZz1zLm1hcmdpbjtkZWxldGUgcy5tYXJnaW59Y29uc3Qgbz1bInhmYURyYXciXTt0aGlzLmZvbnQmJm8ucHVzaCgieGZhRm9udCIpO2lzUHJpbnRPbmx5KHRoaXMpJiZvLnB1c2goInhmYVByaW50T25seSIpO2NvbnN0IGM9e3N0eWxlOnMsaWQ6dGhpc1tac10sY2xhc3M6b307dGhpcy5uYW1lJiYoYy54ZmFOYW1lPXRoaXMubmFtZSk7Y29uc3QgbD17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmMsY2hpbGRyZW46W119O2FwcGx5QXNzaXN0KHRoaXMsYyk7Y29uc3QgaD1jb21wdXRlQmJveCh0aGlzLGwsZSksdT10aGlzLnZhbHVlP3RoaXMudmFsdWVbS3NdKGUpLmh0bWw6bnVsbDtpZihudWxsPT09dSl7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxsKSxoKX1sLmNoaWxkcmVuLnB1c2godSk7c2V0UGFyYSh0aGlzLHMsdSk7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxsKSxoKX19Y2xhc3MgRWRnZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZWRnZSIsITApO3RoaXMuY2FwPWdldFN0cmluZ09wdGlvbihlLmNhcCxbInNxdWFyZSIsImJ1dHQiLCJyb3VuZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5zdHJva2U9Z2V0U3RyaW5nT3B0aW9uKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKTt0aGlzLnRoaWNrbmVzcz1nZXRNZWFzdXJlbWVudChlLnRoaWNrbmVzcywiMC41cHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W1lzXSgpe2NvbnN0IGU9dG9TdHlsZSh0aGlzLCJ2aXNpYmlsaXR5Iik7T2JqZWN0LmFzc2lnbihlLHtsaW5lY2FwOnRoaXMuY2FwLHdpZHRoOm1lYXN1cmVUb1N0cmluZyh0aGlzLnRoaWNrbmVzcyksY29sb3I6dGhpcy5jb2xvcj90aGlzLmNvbG9yW1lzXSgpOiIjMDAwMDAwIixzdHlsZToiIn0pO2lmKCJ2aXNpYmxlIiE9PXRoaXMucHJlc2VuY2UpZS5zdHlsZT0ibm9uZSI7ZWxzZSBzd2l0Y2godGhpcy5zdHJva2Upe2Nhc2Uic29saWQiOmUuc3R5bGU9InNvbGlkIjticmVhaztjYXNlImRhc2hEb3QiOmNhc2UiZGFzaERvdERvdCI6Y2FzZSJkYXNoZWQiOmUuc3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmUuc3R5bGU9ImRvdHRlZCI7YnJlYWs7Y2FzZSJlbWJvc3NlZCI6ZS5zdHlsZT0icmlkZ2UiO2JyZWFrO2Nhc2UiZXRjaGVkIjplLnN0eWxlPSJncm9vdmUiO2JyZWFrO2Nhc2UibG93ZXJlZCI6ZS5zdHlsZT0iaW5zZXQiO2JyZWFrO2Nhc2UicmFpc2VkIjplLnN0eWxlPSJvdXRzZXQifXJldHVybiBlfX1jbGFzcyBFbmNvZGluZyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZW5jb2RpbmciLFsiYWRiZS54NTA5LnJzYV9zaGExIiwiYWRiZS5wa2NzNy5kZXRhY2hlZCIsImFkYmUucGtjczcuc2hhMSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRW5jb2RpbmdzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJlbmNvZGluZ3MiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNvZGluZz1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImVuY3J5cHQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW51bGx9fWNsYXNzIEVuY3J5cHREYXRhIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJlbmNyeXB0RGF0YSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUub3BlcmF0aW9uLFsiZW5jcnlwdCIsImRlY3J5cHQiXSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbH19Y2xhc3MgRW5jcnlwdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZW5jcnlwdGlvbiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRW5jcnlwdGlvbk1ldGhvZCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZW5jcnlwdGlvbk1ldGhvZCIsWyIiLCJBRVMyNTYtQ0JDIiwiVFJJUExFREVTLUNCQyIsIkFFUzEyOC1DQkMiLCJBRVMxOTItQ0JDIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFbmNyeXB0aW9uTWV0aG9kcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZW5jcnlwdGlvbk1ldGhvZHMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNyeXB0aW9uTWV0aG9kPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRXZlbnQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImV2ZW50IiwhMCk7dGhpcy5hY3Rpdml0eT1nZXRTdHJpbmdPcHRpb24oZS5hY3Rpdml0eSxbImNsaWNrIiwiY2hhbmdlIiwiZG9jQ2xvc2UiLCJkb2NSZWFkeSIsImVudGVyIiwiZXhpdCIsImZ1bGwiLCJpbmRleENoYW5nZSIsImluaXRpYWxpemUiLCJtb3VzZURvd24iLCJtb3VzZUVudGVyIiwibW91c2VFeGl0IiwibW91c2VVcCIsInBvc3RFeGVjdXRlIiwicG9zdE9wZW4iLCJwb3N0UHJpbnQiLCJwb3N0U2F2ZSIsInBvc3RTaWduIiwicG9zdFN1Ym1pdCIsInByZUV4ZWN1dGUiLCJwcmVPcGVuIiwicHJlUHJpbnQiLCJwcmVTYXZlIiwicHJlU2lnbiIsInByZVN1Ym1pdCIsInJlYWR5IiwidmFsaWRhdGlvblN0YXRlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5saXN0ZW49Z2V0U3RyaW5nT3B0aW9uKGUubGlzdGVuLFsicmVmT25seSIsInJlZkFuZERlc2NlbmRlbnRzIl0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmVuY3J5cHREYXRhPW51bGw7dGhpcy5leGVjdXRlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbDt0aGlzLnNpZ25EYXRhPW51bGw7dGhpcy5zdWJtaXQ9bnVsbH19Y2xhc3MgRXhEYXRhIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZXhEYXRhIik7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmhyZWY9ZS5ocmVmfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWF4TGVuZ3RoPWdldEludGVnZXIoe2RhdGE6ZS5tYXhMZW5ndGgsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PS0xfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudHJhbnNmZXJFbmNvZGluZz1nZXRTdHJpbmdPcHRpb24oZS50cmFuc2ZlckVuY29kaW5nLFsibm9uZSIsImJhc2U2NCIsInBhY2thZ2UiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVt3c10oKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGV9W0JzXShlKXtpZigidGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJmVbT3NdPT09ZW8ueGh0bWwuaWQpe3RoaXNbJG5dPWU7cmV0dXJuITB9aWYoInRleHQveG1sIj09PXRoaXMuY29udGVudFR5cGUpe3RoaXNbJG5dPWU7cmV0dXJuITB9cmV0dXJuITF9W0tzXShlKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJnRoaXNbJG5dP3RoaXNbJG5dW0tzXShlKTpIVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBFeE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZXhPYmplY3QiLCEwKTt0aGlzLmFyY2hpdmU9ZS5hcmNoaXZlfHwiIjt0aGlzLmNsYXNzSWQ9ZS5jbGFzc0lkfHwiIjt0aGlzLmNvZGVCYXNlPWUuY29kZUJhc2V8fCIiO3RoaXMuY29kZVR5cGU9ZS5jb2RlVHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmJvb2xlYW49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEV4Y2xHcm91cCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZXhjbEdyb3VwIiwhMCk7dGhpcy5hY2Nlc3M9Z2V0U3RyaW5nT3B0aW9uKGUuYWNjZXNzLFsib3BlbiIsIm5vbkludGVyYWN0aXZlIiwicHJvdGVjdGVkIiwicmVhZE9ubHkiXSk7dGhpcy5hY2Nlc3NLZXk9ZS5hY2Nlc3NLZXl8fCIiO3RoaXMuYW5jaG9yVHlwZT1nZXRTdHJpbmdPcHRpb24oZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj1nZXRJbnRlZ2VyKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmg9ZS5oP2dldE1lYXN1cmVtZW50KGUuaCk6IiI7dGhpcy5oQWxpZ249Z2V0U3RyaW5nT3B0aW9uKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGF5b3V0PWdldFN0cmluZ09wdGlvbihlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSk7dGhpcy5tYXhIPWdldE1lYXN1cmVtZW50KGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPWdldE1lYXN1cmVtZW50KGUubWF4VywiMHB0Iik7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FsY3VsYXRlPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMuY29ubmVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgWEZBT2JqZWN0QXJyYXl9W3hzXSgpe3JldHVybiEwfVtwc10oKXtyZXR1cm4hMH1bR3NdKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMuZmllbGQuY2hpbGRyZW4pe2lmKCF0LnZhbHVlKXtjb25zdCBlPW5ldyBWYWx1ZSh7fSk7dFtqbl0oZSk7dC52YWx1ZT1lfXQudmFsdWVbR3NdKGUpfX1bdnNdKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbSm5dLmF0dGVtcHQmJnRoaXNbSm5dLm51bWJlckluTGluZT4wfHx0aGlzW2RzXSgpW3ZzXSgpfVtDc10oKXtjb25zdCBlPXRoaXNbdXNdKCk7aWYoIWVbQ3NdKCkpcmV0dXJuITE7aWYodm9pZCAwIT09dGhpc1tKbl0uX2lzU3BsaXR0YWJsZSlyZXR1cm4gdGhpc1tKbl0uX2lzU3BsaXR0YWJsZTtpZigicG9zaXRpb24iPT09dGhpcy5sYXlvdXR8fHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7dGhpc1tKbl0uX2lzU3BsaXR0YWJsZT0hMTtyZXR1cm4hMX1pZihlLmxheW91dD8uZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtKbl0ubnVtYmVySW5MaW5lKXJldHVybiExO3RoaXNbSm5dLl9pc1NwbGl0dGFibGU9ITA7cmV0dXJuITB9W1puXSgpe3JldHVybiBmbHVzaEhUTUwodGhpcyl9W1VuXShlLHQpe2FkZEhUTUwodGhpcyxlLHQpfVt0c10oKXtyZXR1cm4gZ2V0QXZhaWxhYmxlU3BhY2UodGhpcyl9W0tzXShlKXtzZXRUYWJJbmRleCh0aGlzKTtpZigiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2ZpeERpbWVuc2lvbnModGhpcyk7Y29uc3QgdD1bXSxhPXtpZDp0aGlzW1pzXSxjbGFzczpbXX07c2V0QWNjZXNzKHRoaXMsYS5jbGFzcyk7dGhpc1tKbl18fD1PYmplY3QuY3JlYXRlKG51bGwpO09iamVjdC5hc3NpZ24odGhpc1tKbl0se2NoaWxkcmVuOnQsYXR0cmlidXRlczphLGF0dGVtcHQ6MCxsaW5lOm51bGwsbnVtYmVySW5MaW5lOjAsYXZhaWxhYmxlU3BhY2U6e3dpZHRoOk1hdGgubWluKHRoaXMud3x8MS8wLGUud2lkdGgpLGhlaWdodDpNYXRoLm1pbih0aGlzLmh8fDEvMCxlLmhlaWdodCl9LHdpZHRoOjAsaGVpZ2h0OjAscHJldkhlaWdodDowLGN1cnJlbnRXaWR0aDowfSk7Y29uc3Qgcj10aGlzW0NzXSgpO3J8fHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCFjaGVja0RpbWVuc2lvbnModGhpcyxlKSlyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFO2NvbnN0IGk9bmV3IFNldChbImZpZWxkIl0pO2lmKHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgZT10aGlzW3VzXSgpLmNvbHVtbldpZHRocztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wKXt0aGlzW0puXS5jb2x1bW5XaWR0aHM9ZTt0aGlzW0puXS5jdXJyZW50Q29sdW1uPTB9fWNvbnN0IG49dG9TdHlsZSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxzPVsieGZhRXhjbGdyb3VwIl0sbz1sYXlvdXRDbGFzcyh0aGlzKTtvJiZzLnB1c2gobyk7aXNQcmludE9ubHkodGhpcykmJnMucHVzaCgieGZhUHJpbnRPbmx5Iik7YS5zdHlsZT1uO2EuY2xhc3M9czt0aGlzLm5hbWUmJihhLnhmYU5hbWU9dGhpcy5uYW1lKTt0aGlzW19zXSgpO2NvbnN0IGM9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsbD1jPzI6MTtmb3IoO3RoaXNbSm5dLmF0dGVtcHQ8bDt0aGlzW0puXS5hdHRlbXB0Kyspe2MmJjE9PT10aGlzW0puXS5hdHRlbXB0JiYodGhpc1tKbl0ubnVtYmVySW5MaW5lPTApO2NvbnN0IGU9dGhpc1tYbl0oe2ZpbHRlcjppLGluY2x1ZGU6ITB9KTtpZihlLnN1Y2Nlc3MpYnJlYWs7aWYoZS5pc0JyZWFrKCkpe3RoaXNbTHNdKCk7cmV0dXJuIGV9aWYoYyYmMD09PXRoaXNbSm5dLmF0dGVtcHQmJjA9PT10aGlzW0puXS5udW1iZXJJbkxpbmUmJiF0aGlzW2ZzXSgpW0puXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbSm5dLmF0dGVtcHQ9bDticmVha319dGhpc1tMc10oKTtyfHx1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKHRoaXNbSm5dLmF0dGVtcHQ9PT1sKXtyfHxkZWxldGUgdGhpc1tKbl07cmV0dXJuIEhUTUxSZXN1bHQuRkFJTFVSRX1sZXQgaD0wLHU9MDtpZih0aGlzLm1hcmdpbil7aD10aGlzLm1hcmdpbi5sZWZ0SW5zZXQrdGhpcy5tYXJnaW4ucmlnaHRJbnNldDt1PXRoaXMubWFyZ2luLnRvcEluc2V0K3RoaXMubWFyZ2luLmJvdHRvbUluc2V0fWNvbnN0IGQ9TWF0aC5tYXgodGhpc1tKbl0ud2lkdGgraCx0aGlzLnd8fDApLGY9TWF0aC5tYXgodGhpc1tKbl0uaGVpZ2h0K3UsdGhpcy5ofHwwKSxnPVt0aGlzLngsdGhpcy55LGQsZl07IiI9PT10aGlzLncmJihuLndpZHRoPW1lYXN1cmVUb1N0cmluZyhkKSk7IiI9PT10aGlzLmgmJihuLmhlaWdodD1tZWFzdXJlVG9TdHJpbmcoZikpO2NvbnN0IHA9e25hbWU6ImRpdiIsYXR0cmlidXRlczphLGNoaWxkcmVuOnR9O2FwcGx5QXNzaXN0KHRoaXMsYSk7ZGVsZXRlIHRoaXNbSm5dO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoY3JlYXRlV3JhcHBlcih0aGlzLHApLGcpfX1jbGFzcyBFeGVjdXRlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJleGVjdXRlIik7dGhpcy5jb25uZWN0aW9uPWUuY29ubmVjdGlvbnx8IiI7dGhpcy5leGVjdXRlVHlwZT1nZXRTdHJpbmdPcHRpb24oZS5leGVjdXRlVHlwZSxbImltcG9ydCIsInJlbWVyZ2UiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJ1bkF0PWdldFN0cmluZ09wdGlvbihlLnJ1bkF0LFsiY2xpZW50IiwiYm90aCIsInNlcnZlciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEV4dHJhcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZXh0cmFzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29sZWFuPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXh0cmFzPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRmllbGQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImZpZWxkIiwhMCk7dGhpcy5hY2Nlc3M9Z2V0U3RyaW5nT3B0aW9uKGUuYWNjZXNzLFsib3BlbiIsIm5vbkludGVyYWN0aXZlIiwicHJvdGVjdGVkIiwicmVhZE9ubHkiXSk7dGhpcy5hY2Nlc3NLZXk9ZS5hY2Nlc3NLZXl8fCIiO3RoaXMuYW5jaG9yVHlwZT1nZXRTdHJpbmdPcHRpb24oZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj1nZXRJbnRlZ2VyKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmg9ZS5oP2dldE1lYXN1cmVtZW50KGUuaCk6IiI7dGhpcy5oQWxpZ249Z2V0U3RyaW5nT3B0aW9uKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9Z2V0TWVhc3VyZW1lbnQoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9Z2V0TWVhc3VyZW1lbnQoZS5tYXhXLCIwcHQiKTt0aGlzLm1pbkg9Z2V0TWVhc3VyZW1lbnQoZS5taW5ILCIwcHQiKTt0aGlzLm1pblc9Z2V0TWVhc3VyZW1lbnQoZS5taW5XLCIwcHQiKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPWdldFN0cmluZ09wdGlvbihlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy5yb3RhdGU9Z2V0SW50ZWdlcih7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lJTkwPT0wfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1lLnc/Z2V0TWVhc3VyZW1lbnQoZS53KToiIjt0aGlzLng9Z2V0TWVhc3VyZW1lbnQoZS54LCIwcHQiKTt0aGlzLnk9Z2V0TWVhc3VyZW1lbnQoZS55LCIwcHQiKTt0aGlzLmFzc2lzdD1udWxsO3RoaXMuYmluZD1udWxsO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jYWxjdWxhdGU9bnVsbDt0aGlzLmNhcHRpb249bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZm9udD1udWxsO3RoaXMuZm9ybWF0PW51bGw7dGhpcy5pdGVtcz1uZXcgWEZBT2JqZWN0QXJyYXkoMik7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnRyYXZlcnNhbD1udWxsO3RoaXMudWk9bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy52YWx1ZT1udWxsO3RoaXMuYmluZEl0ZW1zPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc2V0UHJvcGVydHk9bmV3IFhGQU9iamVjdEFycmF5fVt4c10oKXtyZXR1cm4hMH1bR3NdKGUpe19zZXRWYWx1ZSh0aGlzLGUpfVtLc10oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoIXRoaXMudWkpe3RoaXMudWk9bmV3IFVpKHt9KTt0aGlzLnVpW2dzXT10aGlzW2dzXTt0aGlzW2puXSh0aGlzLnVpKTtsZXQgZTtzd2l0Y2godGhpcy5pdGVtcy5jaGlsZHJlbi5sZW5ndGgpe2Nhc2UgMDplPW5ldyBUZXh0RWRpdCh7fSk7dGhpcy51aS50ZXh0RWRpdD1lO2JyZWFrO2Nhc2UgMTplPW5ldyBDaGVja0J1dHRvbih7fSk7dGhpcy51aS5jaGVja0J1dHRvbj1lO2JyZWFrO2Nhc2UgMjplPW5ldyBDaG9pY2VMaXN0KHt9KTt0aGlzLnVpLmNob2ljZUxpc3Q9ZX10aGlzLnVpW2puXShlKX1pZighdGhpcy51aXx8ImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZXx8MD09PXRoaXMuaHx8MD09PXRoaXMudylyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTt0aGlzLmNhcHRpb24mJmRlbGV0ZSB0aGlzLmNhcHRpb25bSm5dO3RoaXNbX3NdKCk7Y29uc3QgdD10aGlzLmNhcHRpb24/dGhpcy5jYXB0aW9uW0tzXShlKS5odG1sOm51bGwsYT10aGlzLncscj10aGlzLmg7bGV0IGk9MCxuPTA7aWYodGhpcy5tYXJnaW4pe2k9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7bj10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldH1sZXQgcz1udWxsO2lmKCIiPT09dGhpcy53fHwiIj09PXRoaXMuaCl7bGV0IHQ9bnVsbCxhPW51bGwscj0wLG89MDtpZih0aGlzLnVpLmNoZWNrQnV0dG9uKXI9bz10aGlzLnVpLmNoZWNrQnV0dG9uLnNpemU7ZWxzZXtjb25zdHt3OnQsaDphfT1sYXlvdXROb2RlKHRoaXMsZSk7aWYobnVsbCE9PXQpe3I9dDtvPWF9ZWxzZSBvPWZ1bmN0aW9uIGZvbnRzX2dldE1ldHJpY3MoZSx0PSExKXtsZXQgYT1udWxsO2lmKGUpe2NvbnN0IHQ9c3RyaXBRdW90ZXMoZS50eXBlZmFjZSkscj1lW2dzXS5mb250RmluZGVyLmZpbmQodCk7YT1zZWxlY3RGb250KGUscil9aWYoIWEpcmV0dXJue2xpbmVIZWlnaHQ6MTIsbGluZUdhcDoyLGxpbmVOb0dhcDoxMH07Y29uc3Qgcj1lLnNpemV8fDEwLGk9YS5saW5lSGVpZ2h0P01hdGgubWF4KHQ/MDoxLjIsYS5saW5lSGVpZ2h0KToxLjIsbj12b2lkIDA9PT1hLmxpbmVHYXA/LjI6YS5saW5lR2FwO3JldHVybntsaW5lSGVpZ2h0OmkqcixsaW5lR2FwOm4qcixsaW5lTm9HYXA6TWF0aC5tYXgoMSxpLW4pKnJ9fSh0aGlzLmZvbnQsITApLmxpbmVOb0dhcH1zPWdldEJvcmRlckRpbXModGhpcy51aVtzc10oKSk7cis9cy53O28rPXMuaDtpZih0aGlzLmNhcHRpb24pe2NvbnN0e3c6aSxoOm4saXNCcm9rZW46c309dGhpcy5jYXB0aW9uW3NzXShlKTtpZihzJiZ0aGlzW3VzXSgpW3ZzXSgpKXt0aGlzW0xzXSgpO3JldHVybiBIVE1MUmVzdWx0LkZBSUxVUkV9dD1pO2E9bjtzd2l0Y2godGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6dCs9cjticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmErPW99fWVsc2V7dD1yO2E9b31pZih0JiYiIj09PXRoaXMudyl7dCs9aTt0aGlzLnc9TWF0aC5taW4odGhpcy5tYXhXPD0wPzEvMDp0aGlzLm1heFcsdGhpcy5taW5XKzE8dD90OnRoaXMubWluVyl9aWYoYSYmIiI9PT10aGlzLmgpe2ErPW47dGhpcy5oPU1hdGgubWluKHRoaXMubWF4SDw9MD8xLzA6dGhpcy5tYXhILHRoaXMubWluSCsxPGE/YTp0aGlzLm1pbkgpfX10aGlzW0xzXSgpO2ZpeERpbWVuc2lvbnModGhpcyk7c2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7aWYoIWNoZWNrRGltZW5zaW9ucyh0aGlzLGUpKXt0aGlzLnc9YTt0aGlzLmg9cjt0aGlzW0xzXSgpO3JldHVybiBIVE1MUmVzdWx0LkZBSUxVUkV9dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtjb25zdCBvPXRvU3R5bGUodGhpcywiZm9udCIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInJvdGF0ZSIsImFuY2hvclR5cGUiLCJwcmVzZW5jZSIsIm1hcmdpbiIsImhBbGlnbiIpO3NldE1pbk1heERpbWVuc2lvbnModGhpcyxvKTtjb25zdCBjPVsieGZhRmllbGQiXTt0aGlzLmZvbnQmJmMucHVzaCgieGZhRm9udCIpO2lzUHJpbnRPbmx5KHRoaXMpJiZjLnB1c2goInhmYVByaW50T25seSIpO2NvbnN0IGw9e3N0eWxlOm8saWQ6dGhpc1tac10sY2xhc3M6Y307aWYoby5tYXJnaW4pe28ucGFkZGluZz1vLm1hcmdpbjtkZWxldGUgby5tYXJnaW59c2V0QWNjZXNzKHRoaXMsYyk7dGhpcy5uYW1lJiYobC54ZmFOYW1lPXRoaXMubmFtZSk7Y29uc3QgaD1bXSx1PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6bCxjaGlsZHJlbjpofTthcHBseUFzc2lzdCh0aGlzLGwpO2NvbnN0IGQ9dGhpcy5ib3JkZXI/dGhpcy5ib3JkZXJbWXNdKCk6bnVsbCxmPWNvbXB1dGVCYm94KHRoaXMsdSxlKSxnPXRoaXMudWlbS3NdKCkuaHRtbDtpZighZyl7T2JqZWN0LmFzc2lnbihvLGQpO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoY3JlYXRlV3JhcHBlcih0aGlzLHUpLGYpfXRoaXNbenNdJiYoZy5jaGlsZHJlbj8uWzBdP2cuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy50YWJpbmRleD10aGlzW3pzXTpnLmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1t6c10pO2cuYXR0cmlidXRlcy5zdHlsZXx8PU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHA9bnVsbDtpZih0aGlzLnVpLmJ1dHRvbil7MT09PWcuY2hpbGRyZW4ubGVuZ3RoJiYoW3BdPWcuY2hpbGRyZW4uc3BsaWNlKDAsMSkpO09iamVjdC5hc3NpZ24oZy5hdHRyaWJ1dGVzLnN0eWxlLGQpfWVsc2UgT2JqZWN0LmFzc2lnbihvLGQpO2gucHVzaChnKTtpZih0aGlzLnZhbHVlKWlmKHRoaXMudWkuaW1hZ2VFZGl0KWcuY2hpbGRyZW4ucHVzaCh0aGlzLnZhbHVlW0tzXSgpLmh0bWwpO2Vsc2UgaWYoIXRoaXMudWkuYnV0dG9uKXtsZXQgZT0iIjtpZih0aGlzLnZhbHVlLmV4RGF0YSllPXRoaXMudmFsdWUuZXhEYXRhWyRzXSgpO2Vsc2UgaWYodGhpcy52YWx1ZS50ZXh0KWU9dGhpcy52YWx1ZS50ZXh0W3NzXSgpO2Vsc2V7Y29uc3QgdD10aGlzLnZhbHVlW0tzXSgpLmh0bWw7bnVsbCE9PXQmJihlPXQuY2hpbGRyZW5bMF0udmFsdWUpfXRoaXMudWkudGV4dEVkaXQmJnRoaXMudmFsdWUudGV4dD8ubWF4Q2hhcnMmJihnLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMubWF4TGVuZ3RoPXRoaXMudmFsdWUudGV4dC5tYXhDaGFycyk7aWYoZSl7aWYodGhpcy51aS5udW1lcmljRWRpdCl7ZT1wYXJzZUZsb2F0KGUpO2U9aXNOYU4oZSk/IiI6ZS50b1N0cmluZygpfSJ0ZXh0YXJlYSI9PT1nLmNoaWxkcmVuWzBdLm5hbWU/Zy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRleHRDb250ZW50PWU6Zy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnZhbHVlPWV9fWlmKCF0aGlzLnVpLmltYWdlRWRpdCYmZy5jaGlsZHJlbj8uWzBdJiZ0aGlzLmgpe3M9c3x8Z2V0Qm9yZGVyRGltcyh0aGlzLnVpW3NzXSgpKTtsZXQgdD0wO2lmKHRoaXMuY2FwdGlvbiYmWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSl7dD10aGlzLmNhcHRpb24ucmVzZXJ2ZTt0PD0wJiYodD10aGlzLmNhcHRpb25bc3NdKGUpLmgpO2NvbnN0IGE9dGhpcy5oLXQtbi1zLmg7Zy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD1tZWFzdXJlVG9TdHJpbmcoYSl9ZWxzZSBnLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PSIxMDAlIn1wJiZnLmNoaWxkcmVuLnB1c2gocCk7aWYoIXQpe2cuYXR0cmlidXRlcy5jbGFzcyYmZy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTt0aGlzLnc9YTt0aGlzLmg9cjtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyx1KSxmKX1pZih0aGlzLnVpLmJ1dHRvbil7by5wYWRkaW5nJiZkZWxldGUgby5wYWRkaW5nOyJkaXYiPT09dC5uYW1lJiYodC5uYW1lPSJzcGFuIik7Zy5jaGlsZHJlbi5wdXNoKHQpO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3ModSxmKX10aGlzLnVpLmNoZWNrQnV0dG9uJiYodC5hdHRyaWJ1dGVzLmNsYXNzWzBdPSJ4ZmFDYXB0aW9uRm9yQ2hlY2tCdXR0b24iKTtnLmF0dHJpYnV0ZXMuY2xhc3N8fD1bXTtnLmNoaWxkcmVuLnNwbGljZSgwLDAsdCk7c3dpdGNoKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJpbmxpbmUiOmcuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0Iik7YnJlYWs7Y2FzZSJyaWdodCI6Zy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVJpZ2h0Iik7YnJlYWs7Y2FzZSJ0b3AiOmcuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFUb3AiKTticmVhaztjYXNlImJvdHRvbSI6Zy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUJvdHRvbSIpfXRoaXMudz1hO3RoaXMuaD1yO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoY3JlYXRlV3JhcHBlcih0aGlzLHUpLGYpfX1jbGFzcyBGaWxsIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJmaWxsIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByZXNlbmNlPWdldFN0cmluZ09wdGlvbihlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmxpbmVhcj1udWxsO3RoaXMucGF0dGVybj1udWxsO3RoaXMucmFkaWFsPW51bGw7dGhpcy5zb2xpZD1udWxsO3RoaXMuc3RpcHBsZT1udWxsfVtZc10oKXtjb25zdCBlPXRoaXNbZHNdKCksdD1lW2RzXSgpW2RzXSgpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgcj0iY29sb3IiLGk9cjtpZihlIGluc3RhbmNlb2YgQm9yZGVyKXtyPSJiYWNrZ3JvdW5kLWNvbG9yIjtpPSJiYWNrZ3JvdW5kIjt0IGluc3RhbmNlb2YgVWkmJihhLmJhY2tncm91bmRDb2xvcj0id2hpdGUiKX1pZihlIGluc3RhbmNlb2YgUmVjdGFuZ2xlfHxlIGluc3RhbmNlb2YgQXJjKXtyPWk9ImZpbGwiO2EuZmlsbD0id2hpdGUifWZvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZigiZXh0cmFzIj09PWV8fCJjb2xvciI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZighKHQgaW5zdGFuY2VvZiBYRkFPYmplY3QpKWNvbnRpbnVlO2NvbnN0IG49dFtZc10odGhpcy5jb2xvcik7biYmKGFbbi5zdGFydHNXaXRoKCIjIik/cjppXT1uKTtyZXR1cm4gYX1pZih0aGlzLmNvbG9yPy52YWx1ZSl7Y29uc3QgZT10aGlzLmNvbG9yW1lzXSgpO2FbZS5zdGFydHNXaXRoKCIjIik/cjppXT1lfXJldHVybiBhfX1jbGFzcyBGaWx0ZXIgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImZpbHRlciIsITApO3RoaXMuYWRkUmV2b2NhdGlvbkluZm89Z2V0U3RyaW5nT3B0aW9uKGUuYWRkUmV2b2NhdGlvbkluZm8sWyIiLCJyZXF1aXJlZCIsIm9wdGlvbmFsIiwibm9uZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZlcnNpb249Z2V0SW50ZWdlcih7ZGF0YTp0aGlzLnZlcnNpb24sZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZT0+ZT49MSYmZTw9NX0pO3RoaXMuYXBwZWFyYW5jZUZpbHRlcj1udWxsO3RoaXMuY2VydGlmaWNhdGVzPW51bGw7dGhpcy5kaWdlc3RNZXRob2RzPW51bGw7dGhpcy5lbmNvZGluZ3M9bnVsbDt0aGlzLmVuY3J5cHRpb25NZXRob2RzPW51bGw7dGhpcy5oYW5kbGVyPW51bGw7dGhpcy5sb2NrRG9jdW1lbnQ9bnVsbDt0aGlzLm1kcD1udWxsO3RoaXMucmVhc29ucz1udWxsO3RoaXMudGltZVN0YW1wPW51bGx9fWNsYXNzIEZsb2F0IGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZmxvYXQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bWW5dKCl7Y29uc3QgZT1wYXJzZUZsb2F0KHRoaXNbJG5dLnRyaW0oKSk7dGhpc1skbl09aXNOYU4oZSk/bnVsbDplfVtLc10oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKG51bGwhPT10aGlzWyRuXT90aGlzWyRuXS50b1N0cmluZygpOiIiKX19Y2xhc3MgdGVtcGxhdGVfRm9udCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiZm9udCIsITApO3RoaXMuYmFzZWxpbmVTaGlmdD1nZXRNZWFzdXJlbWVudChlLmJhc2VsaW5lU2hpZnQpO3RoaXMuZm9udEhvcml6b250YWxTY2FsZT1nZXRGbG9hdCh7ZGF0YTplLmZvbnRIb3Jpem9udGFsU2NhbGUsZGVmYXVsdFZhbHVlOjEwMCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5mb250VmVydGljYWxTY2FsZT1nZXRGbG9hdCh7ZGF0YTplLmZvbnRWZXJ0aWNhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5rZXJuaW5nTW9kZT1nZXRTdHJpbmdPcHRpb24oZS5rZXJuaW5nTW9kZSxbIm5vbmUiLCJwYWlyIl0pO3RoaXMubGV0dGVyU3BhY2luZz1nZXRNZWFzdXJlbWVudChlLmxldHRlclNwYWNpbmcsIjAiKTt0aGlzLmxpbmVUaHJvdWdoPWdldEludGVnZXIoe2RhdGE6ZS5saW5lVGhyb3VnaCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZXx8Mj09PWV9KTt0aGlzLmxpbmVUaHJvdWdoUGVyaW9kPWdldFN0cmluZ09wdGlvbihlLmxpbmVUaHJvdWdoUGVyaW9kLFsiYWxsIiwid29yZCJdKTt0aGlzLm92ZXJsaW5lPWdldEludGVnZXIoe2RhdGE6ZS5vdmVybGluZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZXx8Mj09PWV9KTt0aGlzLm92ZXJsaW5lUGVyaW9kPWdldFN0cmluZ09wdGlvbihlLm92ZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKTt0aGlzLnBvc3R1cmU9Z2V0U3RyaW5nT3B0aW9uKGUucG9zdHVyZSxbIm5vcm1hbCIsIml0YWxpYyJdKTt0aGlzLnNpemU9Z2V0TWVhc3VyZW1lbnQoZS5zaXplLCIxMHB0Iik7dGhpcy50eXBlZmFjZT1lLnR5cGVmYWNlfHwiQ291cmllciI7dGhpcy51bmRlcmxpbmU9Z2V0SW50ZWdlcih7ZGF0YTplLnVuZGVybGluZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZXx8Mj09PWV9KTt0aGlzLnVuZGVybGluZVBlcmlvZD1nZXRTdHJpbmdPcHRpb24oZS51bmRlcmxpbmVQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLndlaWdodD1nZXRTdHJpbmdPcHRpb24oZS53ZWlnaHQsWyJub3JtYWwiLCJib2xkIl0pO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5maWxsPW51bGx9W3FuXShlKXtzdXBlcltxbl0oZSk7dGhpc1tnc10udXNlZFR5cGVmYWNlcy5hZGQodGhpcy50eXBlZmFjZSl9W1lzXSgpe2NvbnN0IGU9dG9TdHlsZSh0aGlzLCJmaWxsIiksdD1lLmNvbG9yO2lmKHQpaWYoIiMwMDAwMDAiPT09dClkZWxldGUgZS5jb2xvcjtlbHNlIGlmKCF0LnN0YXJ0c1dpdGgoIiMiKSl7ZS5iYWNrZ3JvdW5kPXQ7ZS5iYWNrZ3JvdW5kQ2xpcD0idGV4dCI7ZS5jb2xvcj0idHJhbnNwYXJlbnQifXRoaXMuYmFzZWxpbmVTaGlmdCYmKGUudmVydGljYWxBbGlnbj1tZWFzdXJlVG9TdHJpbmcodGhpcy5iYXNlbGluZVNoaWZ0KSk7ZS5mb250S2VybmluZz0ibm9uZSI9PT10aGlzLmtlcm5pbmdNb2RlPyJub25lIjoibm9ybWFsIjtlLmxldHRlclNwYWNpbmc9bWVhc3VyZVRvU3RyaW5nKHRoaXMubGV0dGVyU3BhY2luZyk7aWYoMCE9PXRoaXMubGluZVRocm91Z2gpe2UudGV4dERlY29yYXRpb249ImxpbmUtdGhyb3VnaCI7Mj09PXRoaXMubGluZVRocm91Z2gmJihlLnRleHREZWNvcmF0aW9uU3R5bGU9ImRvdWJsZSIpfWlmKDAhPT10aGlzLm92ZXJsaW5lKXtlLnRleHREZWNvcmF0aW9uPSJvdmVybGluZSI7Mj09PXRoaXMub3ZlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uU3R5bGU9ImRvdWJsZSIpfWUuZm9udFN0eWxlPXRoaXMucG9zdHVyZTtlLmZvbnRTaXplPW1lYXN1cmVUb1N0cmluZyguOTkqdGhpcy5zaXplKTtzZXRGb250RmFtaWx5KHRoaXMsdGhpcyx0aGlzW2dzXS5mb250RmluZGVyLGUpO2lmKDAhPT10aGlzLnVuZGVybGluZSl7ZS50ZXh0RGVjb3JhdGlvbj0idW5kZXJsaW5lIjsyPT09dGhpcy51bmRlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uU3R5bGU9ImRvdWJsZSIpfWUuZm9udFdlaWdodD10aGlzLndlaWdodDtyZXR1cm4gZX19Y2xhc3MgRm9ybWF0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJmb3JtYXQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBIYW5kbGVyIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJoYW5kbGVyIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBIeXBoZW5hdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiaHlwaGVuYXRpb24iKTt0aGlzLmV4Y2x1ZGVBbGxDYXBzPWdldEludGVnZXIoe2RhdGE6ZS5leGNsdWRlQWxsQ2FwcyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuZXhjbHVkZUluaXRpYWxDYXA9Z2V0SW50ZWdlcih7ZGF0YTplLmV4Y2x1ZGVJbml0aWFsQ2FwLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5oeXBoZW5hdGU9Z2V0SW50ZWdlcih7ZGF0YTplLmh5cGhlbmF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wdXNoQ2hhcmFjdGVyQ291bnQ9Z2V0SW50ZWdlcih7ZGF0YTplLnB1c2hDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5yZW1haW5DaGFyYWN0ZXJDb3VudD1nZXRJbnRlZ2VyKHtkYXRhOmUucmVtYWluQ2hhcmFjdGVyQ291bnQsZGVmYXVsdFZhbHVlOjMsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLndvcmRDaGFyYWN0ZXJDb3VudD1nZXRJbnRlZ2VyKHtkYXRhOmUud29yZENoYXJhY3RlckNvdW50LGRlZmF1bHRWYWx1ZTo3LHZhbGlkYXRlOmU9PmU+PTB9KX19Y2xhc3MgSW1hZ2UgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImltYWdlIik7dGhpcy5hc3BlY3Q9Z2V0U3RyaW5nT3B0aW9uKGUuYXNwZWN0LFsiZml0IiwiYWN0dWFsIiwiaGVpZ2h0Iiwibm9uZSIsIndpZHRoIl0pO3RoaXMuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiI7dGhpcy5ocmVmPWUuaHJlZnx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnRyYW5zZmVyRW5jb2Rpbmc9Z2V0U3RyaW5nT3B0aW9uKGUudHJhbnNmZXJFbmNvZGluZyxbImJhc2U2NCIsIm5vbmUiLCJwYWNrYWdlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bS3NdKCl7aWYodGhpcy5jb250ZW50VHlwZSYmIUxvLmhhcyh0aGlzLmNvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCkpKXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2xldCBlPXRoaXNbZ3NdLmltYWdlcz8uZ2V0KHRoaXMuaHJlZik7aWYoIWUmJih0aGlzLmhyZWZ8fCF0aGlzWyRuXSkpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7ZXx8ImJhc2U2NCIhPT10aGlzLnRyYW5zZmVyRW5jb2Rpbmd8fChlPWZ1bmN0aW9uIGZyb21CYXNlNjRVdGlsKGUpe3JldHVybiBVaW50OEFycmF5LmZyb21CYXNlNjQ/VWludDhBcnJheS5mcm9tQmFzZTY0KGUpOnN0cmluZ1RvQnl0ZXMoYXRvYihlKSl9KHRoaXNbJG5dKSk7aWYoIWUpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7aWYoIXRoaXMuY29udGVudFR5cGUpe2Zvcihjb25zdFt0LGFdb2YgX28paWYoZS5sZW5ndGg+dC5sZW5ndGgmJnQuZXZlcnkoKHQsYSk9PnQ9PT1lW2FdKSl7dGhpcy5jb250ZW50VHlwZT1hO2JyZWFrfWlmKCF0aGlzLmNvbnRlbnRUeXBlKXJldHVybiBIVE1MUmVzdWx0LkVNUFRZfWNvbnN0IHQ9bmV3IEJsb2IoW2VdLHt0eXBlOnRoaXMuY29udGVudFR5cGV9KTtsZXQgYTtzd2l0Y2godGhpcy5hc3BlY3Qpe2Nhc2UiZml0IjpjYXNlImFjdHVhbCI6YnJlYWs7Y2FzZSJoZWlnaHQiOmE9e2hlaWdodDoiMTAwJSIsb2JqZWN0Rml0OiJmaWxsIn07YnJlYWs7Y2FzZSJub25lIjphPXt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifTticmVhaztjYXNlIndpZHRoIjphPXt3aWR0aDoiMTAwJSIsb2JqZWN0Rml0OiJmaWxsIn19Y29uc3Qgcj10aGlzW2RzXSgpO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImltZyIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFJbWFnZSJdLHN0eWxlOmEsc3JjOlVSTC5jcmVhdGVPYmplY3RVUkwodCksYWx0OnI/YXJpYUxhYmVsKHJbZHNdKCkpOm51bGx9fSl9fWNsYXNzIEltYWdlRWRpdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywiaW1hZ2VFZGl0IiwhMCk7dGhpcy5kYXRhPWdldFN0cmluZ09wdGlvbihlLmRhdGEsWyJsaW5rIiwiZW1iZWQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W0tzXShlKXtyZXR1cm4iZW1iZWQiPT09dGhpcy5kYXRhP0hUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6SFRNTFJlc3VsdC5FTVBUWX19Y2xhc3MgSW50ZWdlciBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImludGVnZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bWW5dKCl7Y29uc3QgZT1wYXJzZUludCh0aGlzWyRuXS50cmltKCksMTApO3RoaXNbJG5dPWlzTmFOKGUpP251bGw6ZX1bS3NdKGUpe3JldHVybiB2YWx1ZVRvSHRtbChudWxsIT09dGhpc1skbl0/dGhpc1skbl0udG9TdHJpbmcoKToiIil9fWNsYXNzIElzc3VlcnMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImlzc3VlcnMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jZXJ0aWZpY2F0ZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEl0ZW1zIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJpdGVtcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy5zYXZlPWdldEludGVnZXIoe2RhdGE6ZS5zYXZlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBYRkFPYmplY3RBcnJheX1bS3NdKCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiB0aGlzW2NzXSgpKWUucHVzaCh0WyRzXSgpKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGUpfX1jbGFzcyBLZWVwIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJrZWVwIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjtjb25zdCB0PVsibm9uZSIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXTt0aGlzLmludGFjdD1nZXRTdHJpbmdPcHRpb24oZS5pbnRhY3QsdCk7dGhpcy5uZXh0PWdldFN0cmluZ09wdGlvbihlLm5leHQsdCk7dGhpcy5wcmV2aW91cz1nZXRTdHJpbmdPcHRpb24oZS5wcmV2aW91cyx0KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgS2V5VXNhZ2UgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImtleVVzYWdlIik7Y29uc3QgdD1bIiIsInllcyIsIm5vIl07dGhpcy5jcmxTaWduPWdldFN0cmluZ09wdGlvbihlLmNybFNpZ24sdCk7dGhpcy5kYXRhRW5jaXBoZXJtZW50PWdldFN0cmluZ09wdGlvbihlLmRhdGFFbmNpcGhlcm1lbnQsdCk7dGhpcy5kZWNpcGhlck9ubHk9Z2V0U3RyaW5nT3B0aW9uKGUuZGVjaXBoZXJPbmx5LHQpO3RoaXMuZGlnaXRhbFNpZ25hdHVyZT1nZXRTdHJpbmdPcHRpb24oZS5kaWdpdGFsU2lnbmF0dXJlLHQpO3RoaXMuZW5jaXBoZXJPbmx5PWdldFN0cmluZ09wdGlvbihlLmVuY2lwaGVyT25seSx0KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMua2V5QWdyZWVtZW50PWdldFN0cmluZ09wdGlvbihlLmtleUFncmVlbWVudCx0KTt0aGlzLmtleUNlcnRTaWduPWdldFN0cmluZ09wdGlvbihlLmtleUNlcnRTaWduLHQpO3RoaXMua2V5RW5jaXBoZXJtZW50PWdldFN0cmluZ09wdGlvbihlLmtleUVuY2lwaGVybWVudCx0KTt0aGlzLm5vblJlcHVkaWF0aW9uPWdldFN0cmluZ09wdGlvbihlLm5vblJlcHVkaWF0aW9uLHQpO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIExpbmUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sImxpbmUiLCEwKTt0aGlzLmhhbmQ9Z2V0U3RyaW5nT3B0aW9uKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnNsb3BlPWdldFN0cmluZ09wdGlvbihlLnNsb3BlLFsiXFwiLCIvIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmVkZ2U9bnVsbH1bS3NdKCl7Y29uc3QgZT10aGlzW2RzXSgpW2RzXSgpLHQ9dGhpcy5lZGdlfHxuZXcgRWRnZSh7fSksYT10W1lzXSgpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxpPSJ2aXNpYmxlIj09PXQucHJlc2VuY2U/dC50aGlja25lc3M6MDtyLnN0cm9rZVdpZHRoPW1lYXN1cmVUb1N0cmluZyhpKTtyLnN0cm9rZT1hLmNvbG9yO2xldCBuLHMsbyxjLGw9IjEwMCUiLGg9IjEwMCUiO2lmKGUudzw9aSl7W24scyxvLGNdPVsiNTAlIiwwLCI1MCUiLCIxMDAlIl07bD1yLnN0cm9rZVdpZHRofWVsc2UgaWYoZS5oPD1pKXtbbixzLG8sY109WzAsIjUwJSIsIjEwMCUiLCI1MCUiXTtoPXIuc3Ryb2tlV2lkdGh9ZWxzZSJcXCI9PT10aGlzLnNsb3BlP1tuLHMsbyxjXT1bMCwwLCIxMDAlIiwiMTAwJSJdOltuLHMsbyxjXT1bMCwiMTAwJSIsIjEwMCUiLDBdO2NvbnN0IHU9e25hbWU6InN2ZyIsY2hpbGRyZW46W3tuYW1lOiJsaW5lIixhdHRyaWJ1dGVzOnt4bWxuczpFbyx4MTpuLHkxOnMseDI6byx5MjpjLHN0eWxlOnJ9fV0sYXR0cmlidXRlczp7eG1sbnM6RW8sd2lkdGg6bCxoZWlnaHQ6aCxzdHlsZTp7b3ZlcmZsb3c6InZpc2libGUifX19O2lmKGhhc01hcmdpbihlKSlyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W3VdfSk7dS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh1KX19Y2xhc3MgTGluZWFyIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJsaW5lYXIiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsidG9SaWdodCIsInRvQm90dG9tIiwidG9MZWZ0IiwidG9Ub3AiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtZc10oZSl7ZT1lP2VbWXNdKCk6IiNGRkZGRkYiO3JldHVybmBsaW5lYXItZ3JhZGllbnQoJHt0aGlzLnR5cGUucmVwbGFjZSgvKFtSQkxUXSkvLCIgJDEiKS50b0xvd2VyQ2FzZSgpfSwgJHtlfSwgJHt0aGlzLmNvbG9yP3RoaXMuY29sb3JbWXNdKCk6IiMwMDAwMDAifSlgfX1jbGFzcyBMb2NrRG9jdW1lbnQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJsb2NrRG9jdW1lbnQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W1luXSgpe3RoaXNbJG5dPWdldFN0cmluZ09wdGlvbih0aGlzWyRuXSxbImF1dG8iLCIwIiwiMSJdKX19Y2xhc3MgTWFuaWZlc3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sIm1hbmlmZXN0IiwhMCk7dGhpcy5hY3Rpb249Z2V0U3RyaW5nT3B0aW9uKGUuYWN0aW9uLFsiaW5jbHVkZSIsImFsbCIsImV4Y2x1ZGUiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLnJlZj1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE1hcmdpbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywibWFyZ2luIiwhMCk7dGhpcy5ib3R0b21JbnNldD1nZXRNZWFzdXJlbWVudChlLmJvdHRvbUluc2V0LCIwIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlZnRJbnNldD1nZXRNZWFzdXJlbWVudChlLmxlZnRJbnNldCwiMCIpO3RoaXMucmlnaHRJbnNldD1nZXRNZWFzdXJlbWVudChlLnJpZ2h0SW5zZXQsIjAiKTt0aGlzLnRvcEluc2V0PWdldE1lYXN1cmVtZW50KGUudG9wSW5zZXQsIjAiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bWXNdKCl7cmV0dXJue21hcmdpbjptZWFzdXJlVG9TdHJpbmcodGhpcy50b3BJbnNldCkrIiAiK21lYXN1cmVUb1N0cmluZyh0aGlzLnJpZ2h0SW5zZXQpKyIgIittZWFzdXJlVG9TdHJpbmcodGhpcy5ib3R0b21JbnNldCkrIiAiK21lYXN1cmVUb1N0cmluZyh0aGlzLmxlZnRJbnNldCl9fX1jbGFzcyBNZHAgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sIm1kcCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wZXJtaXNzaW9ucz1nZXRJbnRlZ2VyKHtkYXRhOmUucGVybWlzc2lvbnMsZGVmYXVsdFZhbHVlOjIsdmFsaWRhdGU6ZT0+MT09PWV8fDM9PT1lfSk7dGhpcy5zaWduYXR1cmVUeXBlPWdldFN0cmluZ09wdGlvbihlLnNpZ25hdHVyZVR5cGUsWyJmaWxsZXIiLCJhdXRob3IiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBNZWRpdW0gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sIm1lZGl1bSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbWFnaW5nQkJveD1mdW5jdGlvbiBnZXRCQm94KGUpe2NvbnN0IHQ9LTE7aWYoIWUpcmV0dXJue3g6dCx5OnQsd2lkdGg6dCxoZWlnaHQ6dH07Y29uc3QgYT1lLnNwbGl0KCIsIiw0KS5tYXAoZT0+Z2V0TWVhc3VyZW1lbnQoZS50cmltKCksIi0xIikpO2lmKGEubGVuZ3RoPDR8fGFbMl08MHx8YVszXTwwKXJldHVybnt4OnQseTp0LHdpZHRoOnQsaGVpZ2h0OnR9O2NvbnN0W3IsaSxuLHNdPWE7cmV0dXJue3g6cix5Omksd2lkdGg6bixoZWlnaHQ6c319KGUuaW1hZ2luZ0JCb3gpO3RoaXMubG9uZz1nZXRNZWFzdXJlbWVudChlLmxvbmcpO3RoaXMub3JpZW50YXRpb249Z2V0U3RyaW5nT3B0aW9uKGUub3JpZW50YXRpb24sWyJwb3J0cmFpdCIsImxhbmRzY2FwZSJdKTt0aGlzLnNob3J0PWdldE1lYXN1cmVtZW50KGUuc2hvcnQpO3RoaXMuc3RvY2s9ZS5zdG9ja3x8IiI7dGhpcy50cmF5SW49Z2V0U3RyaW5nT3B0aW9uKGUudHJheUluLFsiYXV0byIsImRlbGVnYXRlIiwicGFnZUZyb250Il0pO3RoaXMudHJheU91dD1nZXRTdHJpbmdPcHRpb24oZS50cmF5T3V0LFsiYXV0byIsImRlbGVnYXRlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgTWVzc2FnZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywibWVzc2FnZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudGV4dD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE51bWVyaWNFZGl0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJudW1lcmljRWRpdCIsITApO3RoaXMuaFNjcm9sbFBvbGljeT1nZXRTdHJpbmdPcHRpb24oZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jb21iPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtLc10oZSl7Y29uc3QgdD10b1N0eWxlKHRoaXMsImJvcmRlciIsImZvbnQiLCJtYXJnaW4iKSxhPXRoaXNbZHNdKClbZHNdKCkscj17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGZpZWxkSWQ6YVtac10sZGF0YUlkOmFbVm5dPy5bWnNdfHxhW1pzXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTtpZihpc1JlcXVpcmVkKGEpKXtyLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMDtyLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITB9cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W3JdfSl9fWNsYXNzIE9jY3VyIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJvY2N1ciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbml0aWFsPSIiIT09ZS5pbml0aWFsP2dldEludGVnZXIoe2RhdGE6ZS5pbml0aWFsLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTplPT4hMH0pOiIiO3RoaXMubWF4PSIiIT09ZS5tYXg/Z2V0SW50ZWdlcih7ZGF0YTplLm1heCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4hMH0pOiIiO3RoaXMubWluPSIiIT09ZS5taW4/Z2V0SW50ZWdlcih7ZGF0YTplLm1pbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4hMH0pOiIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfVtxbl0oKXtjb25zdCBlPXRoaXNbZHNdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHxlIGluc3RhbmNlb2YgUGFnZVNldD8wOjEpOyIiPT09dGhpcy5tYXgmJih0aGlzLm1heD0iIj09PXQ/ZSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHxlIGluc3RhbmNlb2YgUGFnZVNldD8tMToxOnRoaXMubWluKTstMSE9PXRoaXMubWF4JiZ0aGlzLm1heDx0aGlzLm1pbiYmKHRoaXMubWF4PXRoaXMubWluKTsiIj09PXRoaXMuaW5pdGlhbCYmKHRoaXMuaW5pdGlhbD1lIGluc3RhbmNlb2YgVGVtcGxhdGU/MTp0aGlzLm1pbil9fWNsYXNzIE9pZCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywib2lkIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE9pZHMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sIm9pZHMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5vaWQ9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBPdmVyZmxvdyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywib3ZlcmZsb3ciKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZGVyPWUubGVhZGVyfHwiIjt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtzc10oKXtpZighdGhpc1tKbl0pe2NvbnN0IGU9dGhpc1tkc10oKSx0PXRoaXNbZnNdKCksYT10W3FzXSh0aGlzLnRhcmdldCxlKSxyPXRbcXNdKHRoaXMubGVhZGVyLGUpLGk9dFtxc10odGhpcy50cmFpbGVyLGUpO3RoaXNbSm5dPXt0YXJnZXQ6YT8uWzBdfHxudWxsLGxlYWRlcjpyPy5bMF18fG51bGwsdHJhaWxlcjppPy5bMF18fG51bGwsYWRkTGVhZGVyOiExLGFkZFRyYWlsZXI6ITF9fXJldHVybiB0aGlzW0puXX19Y2xhc3MgUGFnZUFyZWEgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInBhZ2VBcmVhIiwhMCk7dGhpcy5ibGFua09yTm90Qmxhbms9Z2V0U3RyaW5nT3B0aW9uKGUuYmxhbmtPck5vdEJsYW5rLFsiYW55IiwiYmxhbmsiLCJub3RCbGFuayJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW5pdGlhbE51bWJlcj1nZXRJbnRlZ2VyKHtkYXRhOmUuaW5pdGlhbE51bWJlcixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4hMH0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMubnVtYmVyZWQ9Z2V0SW50ZWdlcih7ZGF0YTplLm51bWJlcmVkLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5vZGRPckV2ZW49Z2V0U3RyaW5nT3B0aW9uKGUub2RkT3JFdmVuLFsiYW55IiwiZXZlbiIsIm9kZCJdKTt0aGlzLnBhZ2VQb3NpdGlvbj1nZXRTdHJpbmdPcHRpb24oZS5wYWdlUG9zaXRpb24sWyJhbnkiLCJmaXJzdCIsImxhc3QiLCJvbmx5IiwicmVzdCJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWVkaXVtPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMuYXJlYT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jb250ZW50QXJlYT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyBYRkFPYmplY3RBcnJheX1bSXNdKCl7aWYoIXRoaXNbSm5dKXt0aGlzW0puXT17bnVtYmVyT2ZVc2U6MH07cmV0dXJuITB9cmV0dXJuIXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbSm5dLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4fVtIbl0oKXtkZWxldGUgdGhpc1tKbl19W2hzXSgpe3RoaXNbSm5dfHw9e251bWJlck9mVXNlOjB9O2NvbnN0IGU9dGhpc1tkc10oKTtpZigib3JkZXJlZE9jY3VycmVuY2UiPT09ZS5yZWxhdGlvbiYmdGhpc1tJc10oKSl7dGhpc1tKbl0ubnVtYmVyT2ZVc2UrPTE7cmV0dXJuIHRoaXN9cmV0dXJuIGVbaHNdKCl9W3RzXSgpe3JldHVybiB0aGlzW0puXS5zcGFjZXx8e3dpZHRoOjAsaGVpZ2h0OjB9fVtLc10oKXt0aGlzW0puXXx8PXtudW1iZXJPZlVzZToxfTtjb25zdCBlPVtdO3RoaXNbSm5dLmNoaWxkcmVuPWU7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRoaXMubWVkaXVtJiZ0aGlzLm1lZGl1bS5zaG9ydCYmdGhpcy5tZWRpdW0ubG9uZyl7dC53aWR0aD1tZWFzdXJlVG9TdHJpbmcodGhpcy5tZWRpdW0uc2hvcnQpO3QuaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyh0aGlzLm1lZGl1bS5sb25nKTt0aGlzW0puXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0uc2hvcnQsaGVpZ2h0OnRoaXMubWVkaXVtLmxvbmd9O2lmKCJsYW5kc2NhcGUiPT09dGhpcy5tZWRpdW0ub3JpZW50YXRpb24pe2NvbnN0IGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0O3QuaGVpZ2h0PWU7dGhpc1tKbl0uc3BhY2U9e3dpZHRoOnRoaXMubWVkaXVtLmxvbmcsaGVpZ2h0OnRoaXMubWVkaXVtLnNob3J0fX19ZWxzZSB3YXJuKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTt0aGlzW1huXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwic3ViZm9ybSJdKSxpbmNsdWRlOiEwfSk7dGhpc1tYbl0oe2ZpbHRlcjpuZXcgU2V0KFsiY29udGVudEFyZWEiXSksaW5jbHVkZTohMH0pO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46ZSxhdHRyaWJ1dGVzOntjbGFzczpbInhmYVBhZ2UiXSxpZDp0aGlzW1pzXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1jbGFzcyBQYWdlU2V0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJwYWdlU2V0IiwhMCk7dGhpcy5kdXBsZXhJbXBvc2l0aW9uPWdldFN0cmluZ09wdGlvbihlLmR1cGxleEltcG9zaXRpb24sWyJsb25nRWRnZSIsInNob3J0RWRnZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUucmVsYXRpb24sWyJvcmRlcmVkT2NjdXJyZW5jZSIsImR1cGxleFBhZ2luYXRlZCIsInNpbXBsZXhQYWdpbmF0ZWQiXSk7dGhpcy5yZWxldmFudD1nZXRSZWxldmFudChlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5wYWdlQXJlYT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wYWdlU2V0PW5ldyBYRkFPYmplY3RBcnJheX1bSG5dKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5wYWdlQXJlYS5jaGlsZHJlbillW0huXSgpO2Zvcihjb25zdCBlIG9mIHRoaXMucGFnZVNldC5jaGlsZHJlbillW0huXSgpfVtJc10oKXtyZXR1cm4hdGhpcy5vY2N1cnx8LTE9PT10aGlzLm9jY3VyLm1heHx8dGhpc1tKbl0ubnVtYmVyT2ZVc2U8dGhpcy5vY2N1ci5tYXh9W2hzXSgpe3RoaXNbSm5dfHw9e251bWJlck9mVXNlOjEscGFnZUluZGV4Oi0xLHBhZ2VTZXRJbmRleDotMX07aWYoIm9yZGVyZWRPY2N1cnJlbmNlIj09PXRoaXMucmVsYXRpb24pe2lmKHRoaXNbSm5dLnBhZ2VJbmRleCsxPHRoaXMucGFnZUFyZWEuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzW0puXS5wYWdlSW5kZXgrPTE7cmV0dXJuIHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bdGhpc1tKbl0ucGFnZUluZGV4XVtoc10oKX1pZih0aGlzW0puXS5wYWdlU2V0SW5kZXgrMTx0aGlzLnBhZ2VTZXQuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzW0puXS5wYWdlU2V0SW5kZXgrPTE7cmV0dXJuIHRoaXMucGFnZVNldC5jaGlsZHJlblt0aGlzW0puXS5wYWdlU2V0SW5kZXhdW2hzXSgpfWlmKHRoaXNbSXNdKCkpe3RoaXNbSm5dLm51bWJlck9mVXNlKz0xO3RoaXNbSm5dLnBhZ2VJbmRleD0tMTt0aGlzW0puXS5wYWdlU2V0SW5kZXg9LTE7cmV0dXJuIHRoaXNbaHNdKCl9Y29uc3QgZT10aGlzW2RzXSgpO2lmKGUgaW5zdGFuY2VvZiBQYWdlU2V0KXJldHVybiBlW2hzXSgpO3RoaXNbSG5dKCk7cmV0dXJuIHRoaXNbaHNdKCl9Y29uc3QgZT10aGlzW2ZzXSgpW0puXS5wYWdlTnVtYmVyLHQ9ZSUyPT0wPyJldmVuIjoib2RkIixhPTA9PT1lPyJmaXJzdCI6InJlc3QiO2xldCByPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZChlPT5lLm9kZE9yRXZlbj09PXQmJmUucGFnZVBvc2l0aW9uPT09YSk7aWYocilyZXR1cm4gcjtyPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZChlPT4iYW55Ij09PWUub2RkT3JFdmVuJiZlLnBhZ2VQb3NpdGlvbj09PWEpO2lmKHIpcmV0dXJuIHI7cj10aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQoZT0+ImFueSI9PT1lLm9kZE9yRXZlbiYmImFueSI9PT1lLnBhZ2VQb3NpdGlvbik7cmV0dXJuIHJ8fHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bMF19fWNsYXNzIFBhcmEgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInBhcmEiLCEwKTt0aGlzLmhBbGlnbj1nZXRTdHJpbmdPcHRpb24oZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5saW5lSGVpZ2h0PWUubGluZUhlaWdodD9nZXRNZWFzdXJlbWVudChlLmxpbmVIZWlnaHQsIjBwdCIpOiIiO3RoaXMubWFyZ2luTGVmdD1lLm1hcmdpbkxlZnQ/Z2V0TWVhc3VyZW1lbnQoZS5tYXJnaW5MZWZ0LCIwcHQiKToiIjt0aGlzLm1hcmdpblJpZ2h0PWUubWFyZ2luUmlnaHQ/Z2V0TWVhc3VyZW1lbnQoZS5tYXJnaW5SaWdodCwiMHB0Iik6IiI7dGhpcy5vcnBoYW5zPWdldEludGVnZXIoe2RhdGE6ZS5vcnBoYW5zLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnByZXNlcnZlPWUucHJlc2VydmV8fCIiO3RoaXMucmFkaXhPZmZzZXQ9ZS5yYWRpeE9mZnNldD9nZXRNZWFzdXJlbWVudChlLnJhZGl4T2Zmc2V0LCIwcHQiKToiIjt0aGlzLnNwYWNlQWJvdmU9ZS5zcGFjZUFib3ZlP2dldE1lYXN1cmVtZW50KGUuc3BhY2VBYm92ZSwiMHB0Iik6IiI7dGhpcy5zcGFjZUJlbG93PWUuc3BhY2VCZWxvdz9nZXRNZWFzdXJlbWVudChlLnNwYWNlQmVsb3csIjBwdCIpOiIiO3RoaXMudGFiRGVmYXVsdD1lLnRhYkRlZmF1bHQ/Z2V0TWVhc3VyZW1lbnQodGhpcy50YWJEZWZhdWx0KToiIjt0aGlzLnRhYlN0b3BzPShlLnRhYlN0b3BzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGUsdCk9PnQlMj09MT9nZXRNZWFzdXJlbWVudChlKTplKTt0aGlzLnRleHRJbmRlbnQ9ZS50ZXh0SW5kZW50P2dldE1lYXN1cmVtZW50KGUudGV4dEluZGVudCwiMHB0Iik6IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudkFsaWduPWdldFN0cmluZ09wdGlvbihlLnZBbGlnbixbInRvcCIsImJvdHRvbSIsIm1pZGRsZSJdKTt0aGlzLndpZG93cz1nZXRJbnRlZ2VyKHtkYXRhOmUud2lkb3dzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmh5cGhlbmF0aW9uPW51bGx9W1lzXSgpe2NvbnN0IGU9dG9TdHlsZSh0aGlzLCJoQWxpZ24iKTsiIiE9PXRoaXMubWFyZ2luTGVmdCYmKGUucGFkZGluZ0xlZnQ9bWVhc3VyZVRvU3RyaW5nKHRoaXMubWFyZ2luTGVmdCkpOyIiIT09dGhpcy5tYXJnaW5SaWdodCYmKGUucGFkZGluZ1JpZ2h0PW1lYXN1cmVUb1N0cmluZyh0aGlzLm1hcmdpblJpZ2h0KSk7IiIhPT10aGlzLnNwYWNlQWJvdmUmJihlLnBhZGRpbmdUb3A9bWVhc3VyZVRvU3RyaW5nKHRoaXMuc3BhY2VBYm92ZSkpOyIiIT09dGhpcy5zcGFjZUJlbG93JiYoZS5wYWRkaW5nQm90dG9tPW1lYXN1cmVUb1N0cmluZyh0aGlzLnNwYWNlQmVsb3cpKTtpZigiIiE9PXRoaXMudGV4dEluZGVudCl7ZS50ZXh0SW5kZW50PW1lYXN1cmVUb1N0cmluZyh0aGlzLnRleHRJbmRlbnQpO2ZpeFRleHRJbmRlbnQoZSl9dGhpcy5saW5lSGVpZ2h0PjAmJihlLmxpbmVIZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKHRoaXMubGluZUhlaWdodCkpOyIiIT09dGhpcy50YWJEZWZhdWx0JiYoZS50YWJTaXplPW1lYXN1cmVUb1N0cmluZyh0aGlzLnRhYkRlZmF1bHQpKTt0aGlzLnRhYlN0b3BzLmxlbmd0aDt0aGlzLmh5cGhlbmF0YXRpb24mJk9iamVjdC5hc3NpZ24oZSx0aGlzLmh5cGhlbmF0YXRpb25bWXNdKCkpO3JldHVybiBlfX1jbGFzcyBQYXNzd29yZEVkaXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInBhc3N3b3JkRWRpdCIsITApO3RoaXMuaFNjcm9sbFBvbGljeT1nZXRTdHJpbmdPcHRpb24oZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wYXNzd29yZENoYXI9ZS5wYXNzd29yZENoYXJ8fCIqIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9fWNsYXNzIHRlbXBsYXRlX1BhdHRlcm4gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInBhdHRlcm4iLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsiY3Jvc3NIYXRjaCIsImNyb3NzRGlhZ29uYWwiLCJkaWFnb25hbExlZnQiLCJkaWFnb25hbFJpZ2h0IiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bWXNdKGUpe2U9ZT9lW1lzXSgpOiIjRkZGRkZGIjtjb25zdCB0PXRoaXMuY29sb3I/dGhpcy5jb2xvcltZc10oKToiIzAwMDAwMCIsYT0icmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCIscj1gJHtlfSwke2V9IDVweCwke3R9IDVweCwke3R9IDEwcHhgO3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UiY3Jvc3NIYXRjaCI6cmV0dXJuYCR7YX0odG8gdG9wLCR7cn0pICR7YX0odG8gcmlnaHQsJHtyfSlgO2Nhc2UiY3Jvc3NEaWFnb25hbCI6cmV0dXJuYCR7YX0oNDVkZWcsJHtyfSkgJHthfSgtNDVkZWcsJHtyfSlgO2Nhc2UiZGlhZ29uYWxMZWZ0IjpyZXR1cm5gJHthfSg0NWRlZywke3J9KWA7Y2FzZSJkaWFnb25hbFJpZ2h0IjpyZXR1cm5gJHthfSgtNDVkZWcsJHtyfSlgO2Nhc2UiaG9yaXpvbnRhbCI6cmV0dXJuYCR7YX0odG8gdG9wLCR7cn0pYDtjYXNlInZlcnRpY2FsIjpyZXR1cm5gJHthfSh0byByaWdodCwke3J9KWB9cmV0dXJuIiJ9fWNsYXNzIFBpY3R1cmUgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInBpY3R1cmUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUHJvdG8gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInByb3RvIiwhMCk7dGhpcy5hcHBlYXJhbmNlRmlsdGVyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmFyYz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5hcmVhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmFzc2lzdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5iYXJjb2RlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJpbmRJdGVtcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5ib29rZW5kPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJvb2xlYW49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYm9yZGVyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQWZ0ZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtCZWZvcmU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYnV0dG9uPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNhbGN1bGF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jYXB0aW9uPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNlcnRpZmljYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNlcnRpZmljYXRlcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jaGVja0J1dHRvbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jaG9pY2VMaXN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNvbG9yPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNvbWI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY29ubmVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jb250ZW50QXJlYT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jb3JuZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZUVkaXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWZhdWx0VWk9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGVzYz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kaWdlc3RNZXRob2Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGlnZXN0TWV0aG9kcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmVkZ2U9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZW5jb2Rpbmc9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZW5jb2RpbmdzPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdERhdGE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdGlvbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0aW9uTWV0aG9kPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHRpb25NZXRob2RzPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV2ZW50PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leGNsR3JvdXA9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhlY3V0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leHRyYXM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZmlsbD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5maWx0ZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZm9udD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mb3JtYXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaGFuZGxlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5oeXBoZW5hdGlvbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZUVkaXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pc3N1ZXJzPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLml0ZW1zPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmtlZXA9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMua2V5VXNhZ2U9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubGluZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5saW5lYXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubG9ja0RvY3VtZW50PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm1hbmlmZXN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm1hcmdpbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5tZHA9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubWVkaXVtPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm1lc3NhZ2U9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubnVtZXJpY0VkaXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMub2NjdXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMub2lkPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm9pZHM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMub3ZlcmZsb3c9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucGFnZUFyZWE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucGFnZVNldD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXJhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnBhc3N3b3JkRWRpdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXR0ZXJuPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnBpY3R1cmU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucmFkaWFsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnJlYXNvbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWFzb25zPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnJlY3RhbmdsZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWY9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc2NyaXB0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNpZ25EYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNpZ25hdHVyZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zaWduaW5nPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNvbGlkPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNwZWFrPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN0aXBwbGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtU2V0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmplY3RETj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJqZWN0RE5zPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1Ym1pdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRleHRFZGl0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGltZVN0YW1wPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRvb2xUaXA9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudHJhdmVyc2FsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRyYXZlcnNlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnVpPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnZhbGlkYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnZhbHVlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnZhcmlhYmxlcz1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFJhZGlhbCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywicmFkaWFsIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbInRvRWRnZSIsInRvQ2VudGVyIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bWXNdKGUpe2U9ZT9lW1lzXSgpOiIjRkZGRkZGIjtjb25zdCB0PXRoaXMuY29sb3I/dGhpcy5jb2xvcltZc10oKToiIzAwMDAwMCI7cmV0dXJuYHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgY2VudGVyLCAkeyJ0b0VkZ2UiPT09dGhpcy50eXBlP2Ake2V9LCR7dH1gOmAke3R9LCR7ZX1gfSlgfX1jbGFzcyBSZWFzb24gZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInJlYXNvbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBSZWFzb25zIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJyZWFzb25zIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMucmVhc29uPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgUmVjdGFuZ2xlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJyZWN0YW5nbGUiLCEwKTt0aGlzLmhhbmQ9Z2V0U3RyaW5nT3B0aW9uKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb3JuZXI9bmV3IFhGQU9iamVjdEFycmF5KDQpO3RoaXMuZWRnZT1uZXcgWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5maWxsPW51bGx9W0tzXSgpe2NvbnN0IGU9dGhpcy5lZGdlLmNoaWxkcmVuLmxlbmd0aD90aGlzLmVkZ2UuY2hpbGRyZW5bMF06bmV3IEVkZ2Uoe30pLHQ9ZVtZc10oKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7InZpc2libGUiPT09dGhpcy5maWxsPy5wcmVzZW5jZT9PYmplY3QuYXNzaWduKGEsdGhpcy5maWxsW1lzXSgpKTphLmZpbGw9InRyYW5zcGFyZW50IjthLnN0cm9rZVdpZHRoPW1lYXN1cmVUb1N0cmluZygidmlzaWJsZSI9PT1lLnByZXNlbmNlP2UudGhpY2tuZXNzOjApO2Euc3Ryb2tlPXQuY29sb3I7Y29uc3Qgcj0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyBDb3JuZXIoe30pKVtZc10oKSxpPXtuYW1lOiJzdmciLGNoaWxkcmVuOlt7bmFtZToicmVjdCIsYXR0cmlidXRlczp7eG1sbnM6RW8sd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIseDowLHk6MCxyeDpyLnJhZGl1cyxyeTpyLnJhZGl1cyxzdHlsZTphfX1dLGF0dHJpYnV0ZXM6e3htbG5zOkVvLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9LHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX07aWYoaGFzTWFyZ2luKHRoaXNbZHNdKClbZHNdKCkpKXJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbaV19KTtpLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGkpfX1jbGFzcyBSZWZFbGVtZW50IGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJyZWYiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgU2NyaXB0IGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJzY3JpcHQiKTt0aGlzLmJpbmRpbmc9ZS5iaW5kaW5nfHwiIjt0aGlzLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5ydW5BdD1nZXRTdHJpbmdPcHRpb24oZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTZXRQcm9wZXJ0eSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywic2V0UHJvcGVydHkiKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIifX1jbGFzcyBTaWduRGF0YSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywic2lnbkRhdGEiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3BlcmF0aW9uPWdldFN0cmluZ09wdGlvbihlLm9wZXJhdGlvbixbInNpZ24iLCJjbGVhciIsInZlcmlmeSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbH19Y2xhc3MgU2lnbmF0dXJlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJzaWduYXR1cmUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsiUERGMS4zIiwiUERGMS42Il0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLm1hbmlmZXN0PW51bGw7dGhpcy5tYXJnaW49bnVsbH19Y2xhc3MgU2lnbmluZyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywic2lnbmluZyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgU29saWQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInNvbGlkIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bWXNdKGUpe3JldHVybiBlP2VbWXNdKCk6IiNGRkZGRkYifX1jbGFzcyBTcGVhayBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywic3BlYWsiKTt0aGlzLmRpc2FibGU9Z2V0SW50ZWdlcih7ZGF0YTplLmRpc2FibGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJpb3JpdHk9Z2V0U3RyaW5nT3B0aW9uKGUucHJpb3JpdHksWyJjdXN0b20iLCJjYXB0aW9uIiwibmFtZSIsInRvb2xUaXAiXSk7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgU3RpcHBsZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywic3RpcHBsZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yYXRlPWdldEludGVnZXIoe2RhdGE6ZS5yYXRlLGRlZmF1bHRWYWx1ZTo1MCx2YWxpZGF0ZTplPT5lPj0wJiZlPD0xMDB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W1lzXShlKXtjb25zdCB0PXRoaXMucmF0ZS8xMDA7cmV0dXJuIFV0aWwubWFrZUhleENvbG9yKE1hdGgucm91bmQoZS52YWx1ZS5yKigxLXQpK3RoaXMudmFsdWUucip0KSxNYXRoLnJvdW5kKGUudmFsdWUuZyooMS10KSt0aGlzLnZhbHVlLmcqdCksTWF0aC5yb3VuZChlLnZhbHVlLmIqKDEtdCkrdGhpcy52YWx1ZS5iKnQpKX19Y2xhc3MgU3ViZm9ybSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywic3ViZm9ybSIsITApO3RoaXMuYWNjZXNzPWdldFN0cmluZ09wdGlvbihlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pO3RoaXMuYWxsb3dNYWNybz1nZXRJbnRlZ2VyKHtkYXRhOmUuYWxsb3dNYWNybyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuYW5jaG9yVHlwZT1nZXRTdHJpbmdPcHRpb24oZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj1nZXRJbnRlZ2VyKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmNvbHVtbldpZHRocz0oZS5jb2x1bW5XaWR0aHN8fCIiKS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcChlPT4iLTEiPT09ZT8tMTpnZXRNZWFzdXJlbWVudChlKSk7dGhpcy5oPWUuaD9nZXRNZWFzdXJlbWVudChlLmgpOiIiO3RoaXMuaEFsaWduPWdldFN0cmluZ09wdGlvbihlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxheW91dD1nZXRTdHJpbmdPcHRpb24oZS5sYXlvdXQsWyJwb3NpdGlvbiIsImxyLXRiIiwicmwtcm93IiwicmwtdGIiLCJyb3ciLCJ0YWJsZSIsInRiIl0pO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9Z2V0TWVhc3VyZW1lbnQoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9Z2V0TWVhc3VyZW1lbnQoZS5tYXhXLCIwcHQiKTt0aGlzLm1lcmdlTW9kZT1nZXRTdHJpbmdPcHRpb24oZS5tZXJnZU1vZGUsWyJjb25zdW1lRGF0YSIsIm1hdGNoVGVtcGxhdGUiXSk7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMucmVzdG9yZVN0YXRlPWdldFN0cmluZ09wdGlvbihlLnJlc3RvcmVTdGF0ZSxbIm1hbnVhbCIsImF1dG8iXSk7dGhpcy5zY29wZT1nZXRTdHJpbmdPcHRpb24oZS5zY29wZSxbIm5hbWUiLCJub25lIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvb2tlbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuYnJlYWs9bnVsbDt0aGlzLmNhbGN1bGF0ZT1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5vdmVyZmxvdz1udWxsO3RoaXMucGFnZVNldD1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFyaWFibGVzPW51bGw7dGhpcy5hcmVhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQWZ0ZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtCZWZvcmU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY29ubmVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV2ZW50PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wcm90bz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IFhGQU9iamVjdEFycmF5fVt1c10oKXtjb25zdCBlPXRoaXNbZHNdKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBTdWJmb3JtU2V0P2VbdXNdKCk6ZX1beHNdKCl7cmV0dXJuITB9W3ZzXSgpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW0puXS5hdHRlbXB0JiZ0aGlzW0puXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tkc10oKVt2c10oKX0qW2xzXSgpe3lpZWxkKmdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpfVtabl0oKXtyZXR1cm4gZmx1c2hIVE1MKHRoaXMpfVtVbl0oZSx0KXthZGRIVE1MKHRoaXMsZSx0KX1bdHNdKCl7cmV0dXJuIGdldEF2YWlsYWJsZVNwYWNlKHRoaXMpfVtDc10oKXtjb25zdCBlPXRoaXNbdXNdKCk7aWYoIWVbQ3NdKCkpcmV0dXJuITE7aWYodm9pZCAwIT09dGhpc1tKbl0uX2lzU3BsaXR0YWJsZSlyZXR1cm4gdGhpc1tKbl0uX2lzU3BsaXR0YWJsZTtpZigicG9zaXRpb24iPT09dGhpcy5sYXlvdXR8fHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7dGhpc1tKbl0uX2lzU3BsaXR0YWJsZT0hMTtyZXR1cm4hMX1pZih0aGlzLmtlZXAmJiJub25lIiE9PXRoaXMua2VlcC5pbnRhY3Qpe3RoaXNbSm5dLl9pc1NwbGl0dGFibGU9ITE7cmV0dXJuITF9aWYoZS5sYXlvdXQ/LmVuZHNXaXRoKCItdGIiKSYmMCE9PWVbSm5dLm51bWJlckluTGluZSlyZXR1cm4hMTt0aGlzW0puXS5faXNTcGxpdHRhYmxlPSEwO3JldHVybiEwfVtLc10oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYodGhpcy5icmVhayl7aWYoImF1dG8iIT09dGhpcy5icmVhay5hZnRlcnx8IiIhPT10aGlzLmJyZWFrLmFmdGVyVGFyZ2V0KXtjb25zdCBlPW5ldyBCcmVha0FmdGVyKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYWZ0ZXIsdGFyZ2V0OnRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQsc3RhcnROZXc6dGhpcy5icmVhay5zdGFydE5ldy50b1N0cmluZygpfSk7ZVtnc109dGhpc1tnc107dGhpc1tqbl0oZSk7dGhpcy5icmVha0FmdGVyLnB1c2goZSl9aWYoImF1dG8iIT09dGhpcy5icmVhay5iZWZvcmV8fCIiIT09dGhpcy5icmVhay5iZWZvcmVUYXJnZXQpe2NvbnN0IGU9bmV3IEJyZWFrQmVmb3JlKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtlW2dzXT10aGlzW2dzXTt0aGlzW2puXShlKTt0aGlzLmJyZWFrQmVmb3JlLnB1c2goZSl9aWYoIiIhPT10aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0KXtjb25zdCBlPW5ldyBPdmVyZmxvdyh7dGFyZ2V0OnRoaXMuYnJlYWsub3ZlcmZsb3dUYXJnZXQsbGVhZGVyOnRoaXMuYnJlYWsub3ZlcmZsb3dMZWFkZXIsdHJhaWxlcjp0aGlzLmJyZWFrLm92ZXJmbG93VHJhaWxlcn0pO2VbZ3NdPXRoaXNbZ3NdO3RoaXNbam5dKGUpO3RoaXMub3ZlcmZsb3cucHVzaChlKX10aGlzW1VzXSh0aGlzLmJyZWFrKTt0aGlzLmJyZWFrPW51bGx9aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTsodGhpcy5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+MXx8dGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aD4xKSYmd2FybigiWEZBIC0gU2V2ZXJhbCBicmVha0JlZm9yZSBvciBicmVha0FmdGVyIGluIHN1YmZvcm1zOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtpZih0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD49MSl7Y29uc3QgZT10aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO2lmKGhhbmRsZUJyZWFrKGUpKXJldHVybiBIVE1MUmVzdWx0LmJyZWFrTm9kZShlKX1pZih0aGlzW0puXT8uYWZ0ZXJCcmVha0FmdGVyKXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2ZpeERpbWVuc2lvbnModGhpcyk7Y29uc3QgdD1bXSxhPXtpZDp0aGlzW1pzXSxjbGFzczpbXX07c2V0QWNjZXNzKHRoaXMsYS5jbGFzcyk7dGhpc1tKbl18fD1PYmplY3QuY3JlYXRlKG51bGwpO09iamVjdC5hc3NpZ24odGhpc1tKbl0se2NoaWxkcmVuOnQsbGluZTpudWxsLGF0dHJpYnV0ZXM6YSxhdHRlbXB0OjAsbnVtYmVySW5MaW5lOjAsYXZhaWxhYmxlU3BhY2U6e3dpZHRoOk1hdGgubWluKHRoaXMud3x8MS8wLGUud2lkdGgpLGhlaWdodDpNYXRoLm1pbih0aGlzLmh8fDEvMCxlLmhlaWdodCl9LHdpZHRoOjAsaGVpZ2h0OjAscHJldkhlaWdodDowLGN1cnJlbnRXaWR0aDowfSk7Y29uc3Qgcj10aGlzW2ZzXSgpLGk9cltKbl0ubm9MYXlvdXRGYWlsdXJlLG49dGhpc1tDc10oKTtufHxzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZighY2hlY2tEaW1lbnNpb25zKHRoaXMsZSkpcmV0dXJuIEhUTUxSZXN1bHQuRkFJTFVSRTtjb25zdCBzPW5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImV4Y2xHcm91cCIsImZpZWxkIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXtjb25zdCBlPXRoaXNbdXNdKCkuY29sdW1uV2lkdGhzO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe3RoaXNbSm5dLmNvbHVtbldpZHRocz1lO3RoaXNbSm5dLmN1cnJlbnRDb2x1bW49MH19Y29uc3Qgbz10b1N0eWxlKHRoaXMsImFuY2hvclR5cGUiLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJwcmVzZW5jZSIsImJvcmRlciIsIm1hcmdpbiIsImhBbGlnbiIpLGM9WyJ4ZmFTdWJmb3JtIl0sbD1sYXlvdXRDbGFzcyh0aGlzKTtsJiZjLnB1c2gobCk7YS5zdHlsZT1vO2EuY2xhc3M9Yzt0aGlzLm5hbWUmJihhLnhmYU5hbWU9dGhpcy5uYW1lKTtpZih0aGlzLm92ZXJmbG93KXtjb25zdCB0PXRoaXMub3ZlcmZsb3dbc3NdKCk7aWYodC5hZGRMZWFkZXIpe3QuYWRkTGVhZGVyPSExO2hhbmRsZU92ZXJmbG93KHRoaXMsdC5sZWFkZXIsZSl9fXRoaXNbX3NdKCk7Y29uc3QgaD0ibHItdGIiPT09dGhpcy5sYXlvdXR8fCJybC10YiI9PT10aGlzLmxheW91dCx1PWg/MjoxO2Zvcig7dGhpc1tKbl0uYXR0ZW1wdDx1O3RoaXNbSm5dLmF0dGVtcHQrKyl7aCYmMT09PXRoaXNbSm5dLmF0dGVtcHQmJih0aGlzW0puXS5udW1iZXJJbkxpbmU9MCk7Y29uc3QgZT10aGlzW1huXSh7ZmlsdGVyOnMsaW5jbHVkZTohMH0pO2lmKGUuc3VjY2VzcylicmVhaztpZihlLmlzQnJlYWsoKSl7dGhpc1tMc10oKTtyZXR1cm4gZX1pZihoJiYwPT09dGhpc1tKbl0uYXR0ZW1wdCYmMD09PXRoaXNbSm5dLm51bWJlckluTGluZSYmIXJbSm5dLm5vTGF5b3V0RmFpbHVyZSl7dGhpc1tKbl0uYXR0ZW1wdD11O2JyZWFrfX10aGlzW0xzXSgpO258fHVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7cltKbl0ubm9MYXlvdXRGYWlsdXJlPWk7aWYodGhpc1tKbl0uYXR0ZW1wdD09PXUpe3RoaXMub3ZlcmZsb3cmJih0aGlzW2ZzXSgpW0puXS5vdmVyZmxvd05vZGU9dGhpcy5vdmVyZmxvdyk7bnx8ZGVsZXRlIHRoaXNbSm5dO3JldHVybiBIVE1MUmVzdWx0LkZBSUxVUkV9aWYodGhpcy5vdmVyZmxvdyl7Y29uc3QgdD10aGlzLm92ZXJmbG93W3NzXSgpO2lmKHQuYWRkVHJhaWxlcil7dC5hZGRUcmFpbGVyPSExO2hhbmRsZU92ZXJmbG93KHRoaXMsdC50cmFpbGVyLGUpfX1sZXQgZD0wLGY9MDtpZih0aGlzLm1hcmdpbil7ZD10aGlzLm1hcmdpbi5sZWZ0SW5zZXQrdGhpcy5tYXJnaW4ucmlnaHRJbnNldDtmPXRoaXMubWFyZ2luLnRvcEluc2V0K3RoaXMubWFyZ2luLmJvdHRvbUluc2V0fWNvbnN0IGc9TWF0aC5tYXgodGhpc1tKbl0ud2lkdGgrZCx0aGlzLnd8fDApLHA9TWF0aC5tYXgodGhpc1tKbl0uaGVpZ2h0K2YsdGhpcy5ofHwwKSxtPVt0aGlzLngsdGhpcy55LGcscF07IiI9PT10aGlzLncmJihvLndpZHRoPW1lYXN1cmVUb1N0cmluZyhnKSk7IiI9PT10aGlzLmgmJihvLmhlaWdodD1tZWFzdXJlVG9TdHJpbmcocCkpO2lmKCgiMHB4Ij09PW8ud2lkdGh8fCIwcHgiPT09by5oZWlnaHQpJiYwPT09dC5sZW5ndGgpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7Y29uc3QgYj17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmEsY2hpbGRyZW46dH07YXBwbHlBc3Npc3QodGhpcyxhKTtjb25zdCB5PUhUTUxSZXN1bHQuc3VjY2VzcyhjcmVhdGVXcmFwcGVyKHRoaXMsYiksbSk7aWYodGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aD49MSl7Y29uc3QgZT10aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW5bMF07aWYoaGFuZGxlQnJlYWsoZSkpe3RoaXNbSm5dLmFmdGVyQnJlYWtBZnRlcj15O3JldHVybiBIVE1MUmVzdWx0LmJyZWFrTm9kZShlKX19ZGVsZXRlIHRoaXNbSm5dO3JldHVybiB5fX1jbGFzcyBTdWJmb3JtU2V0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJzdWJmb3JtU2V0IiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGF0aW9uPWdldFN0cmluZ09wdGlvbihlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2tlbmQ9bnVsbDt0aGlzLmJyZWFrPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5vdmVyZmxvdz1udWxsO3RoaXMuYnJlYWtBZnRlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0JlZm9yZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IFhGQU9iamVjdEFycmF5fSpbbHNdKCl7eWllbGQqZ2V0Q29udGFpbmVkQ2hpbGRyZW4odGhpcyl9W3VzXSgpe2xldCBlPXRoaXNbZHNdKCk7Zm9yKDshKGUgaW5zdGFuY2VvZiBTdWJmb3JtKTspZT1lW2RzXSgpO3JldHVybiBlfVt4c10oKXtyZXR1cm4hMH19Y2xhc3MgU3ViamVjdEROIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywic3ViamVjdEROIik7dGhpcy5kZWxpbWl0ZXI9ZS5kZWxpbWl0ZXJ8fCIsIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bWW5dKCl7dGhpc1skbl09bmV3IE1hcCh0aGlzWyRuXS5zcGxpdCh0aGlzLmRlbGltaXRlcikubWFwKGU9PnsoZT1lLnNwbGl0KCI9IiwyKSlbMF09ZVswXS50cmltKCk7cmV0dXJuIGV9KSl9fWNsYXNzIFN1YmplY3RETnMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInN1YmplY3RETnMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zdWJqZWN0RE49bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBTdWJtaXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInN1Ym1pdCIsITApO3RoaXMuZW1iZWRQREY9Z2V0SW50ZWdlcih7ZGF0YTplLmVtYmVkUERGLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5mb3JtYXQ9Z2V0U3RyaW5nT3B0aW9uKGUuZm9ybWF0LFsieGRwIiwiZm9ybWRhdGEiLCJwZGYiLCJ1cmxlbmNvZGVkIiwieGZkIiwieG1sIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudGV4dEVuY29kaW5nPWdldEtleXdvcmQoe2RhdGE6ZS50ZXh0RW5jb2Rpbmc/ZS50ZXh0RW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+WyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnhkcENvbnRlbnQ9ZS54ZHBDb250ZW50fHwiIjt0aGlzLmVuY3J5cHQ9bnVsbDt0aGlzLmVuY3J5cHREYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNpZ25EYXRhPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInRlbXBsYXRlIiwhMCk7dGhpcy5iYXNlUHJvZmlsZT1nZXRTdHJpbmdPcHRpb24oZS5iYXNlUHJvZmlsZSxbImZ1bGwiLCJpbnRlcmFjdGl2ZUZvcm1zIl0pO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zdWJmb3JtPW5ldyBYRkFPYmplY3RBcnJheX1bWW5dKCl7MD09PXRoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGgmJndhcm4oIlhGQSAtIE5vIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGUuIik7dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MiYmd2FybigiWEZBIC0gU2V2ZXJhbCBzdWJmb3JtcyBpbiB0ZW1wbGF0ZSBub2RlOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTt0aGlzW3pzXT01ZTN9W0NzXSgpe3JldHVybiEwfVtxc10oZSx0KXtyZXR1cm4gZS5zdGFydHNXaXRoKCIjIik/W3RoaXNbbXNdLmdldChlLnNsaWNlKDEpKV06c2VhcmNoTm9kZSh0aGlzLHQsZSwhMCwhMCl9KltWc10oKXtpZighdGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfSk7dGhpc1tKbl09e292ZXJmbG93Tm9kZTpudWxsLGZpcnN0VW5zcGxpdHRhYmxlOm51bGwsY3VycmVudENvbnRlbnRBcmVhOm51bGwsY3VycmVudFBhZ2VBcmVhOm51bGwsbm9MYXlvdXRGYWlsdXJlOiExLHBhZ2VOdW1iZXI6MSxwYWdlUG9zaXRpb246ImZpcnN0IixvZGRPckV2ZW46Im9kZCIsYmxhbmtPck5vdEJsYW5rOiJub25CbGFuayIscGFyYVN0YWNrOltdfTtjb25zdCBlPXRoaXMuc3ViZm9ybS5jaGlsZHJlblswXTtlLnBhZ2VTZXRbSG5dKCk7Y29uc3QgdD1lLnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW4sYT17bmFtZToiZGl2IixjaGlsZHJlbjpbXX07bGV0IHI9bnVsbCxpPW51bGwsbj1udWxsO2lmKGUuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXtpPWUuYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07bj1pLnRhcmdldH1lbHNlIGlmKGUuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJmUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2k9ZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO249aS50YXJnZXR9ZWxzZSBpZihlLmJyZWFrPy5iZWZvcmVUYXJnZXQpe2k9ZS5icmVhaztuPWkuYmVmb3JlVGFyZ2V0fWVsc2UgaWYoZS5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MSYmZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrPy5iZWZvcmVUYXJnZXQpe2k9ZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrO249aS5iZWZvcmVUYXJnZXR9aWYoaSl7Y29uc3QgZT10aGlzW3FzXShuLGlbZHNdKCkpO2lmKGUgaW5zdGFuY2VvZiBQYWdlQXJlYSl7cj1lO2lbSm5dPXt9fX1yfHw9dFswXTtyW0puXT17bnVtYmVyT2ZVc2U6MX07Y29uc3Qgcz1yW2RzXSgpO3NbSm5dPXtudW1iZXJPZlVzZToxLHBhZ2VJbmRleDpzLnBhZ2VBcmVhLmNoaWxkcmVuLmluZGV4T2YocikscGFnZVNldEluZGV4OjB9O2xldCBvLGM9bnVsbCxsPW51bGwsaD0hMCx1PTAsZD0wO2Zvcig7Oyl7aWYoaCl1PTA7ZWxzZXthLmNoaWxkcmVuLnBvcCgpO2lmKDM9PT0rK3Upe3dhcm4oIlhGQSAtIFNvbWV0aGluZyBnb2VzIHdyb25nOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtyZXR1cm4gYX19bz1udWxsO3RoaXNbSm5dLmN1cnJlbnRQYWdlQXJlYT1yO2NvbnN0IHQ9cltLc10oKS5odG1sO2EuY2hpbGRyZW4ucHVzaCh0KTtpZihjKXt0aGlzW0puXS5ub0xheW91dEZhaWx1cmU9ITA7dC5jaGlsZHJlbi5wdXNoKGNbS3NdKHJbSm5dLnNwYWNlKS5odG1sKTtjPW51bGx9aWYobCl7dGhpc1tKbl0ubm9MYXlvdXRGYWlsdXJlPSEwO3QuY2hpbGRyZW4ucHVzaChsW0tzXShyW0puXS5zcGFjZSkuaHRtbCk7bD1udWxsfWNvbnN0IGk9ci5jb250ZW50QXJlYS5jaGlsZHJlbixuPXQuY2hpbGRyZW4uZmlsdGVyKGU9PmUuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhQ29udGVudGFyZWEiKSk7aD0hMTt0aGlzW0puXS5maXJzdFVuc3BsaXR0YWJsZT1udWxsO3RoaXNbSm5dLm5vTGF5b3V0RmFpbHVyZT0hMTtjb25zdCBmbHVzaD10PT57Y29uc3QgYT1lW1puXSgpO2lmKGEpe2h8fD1hLmNoaWxkcmVuPy5sZW5ndGg+MDtuW3RdLmNoaWxkcmVuLnB1c2goYSl9fTtmb3IobGV0IHQ9ZCxyPWkubGVuZ3RoO3Q8cjt0Kyspe2NvbnN0IHI9dGhpc1tKbl0uY3VycmVudENvbnRlbnRBcmVhPWlbdF0scz17d2lkdGg6ci53LGhlaWdodDpyLmh9O2Q9MDtpZihjKXtuW3RdLmNoaWxkcmVuLnB1c2goY1tLc10ocykuaHRtbCk7Yz1udWxsfWlmKGwpe25bdF0uY2hpbGRyZW4ucHVzaChsW0tzXShzKS5odG1sKTtsPW51bGx9Y29uc3QgdT1lW0tzXShzKTtpZih1LnN1Y2Nlc3Mpe2lmKHUuaHRtbCl7aHx8PXUuaHRtbC5jaGlsZHJlbj8ubGVuZ3RoPjA7blt0XS5jaGlsZHJlbi5wdXNoKHUuaHRtbCl9ZWxzZSFoJiZhLmNoaWxkcmVuLmxlbmd0aD4xJiZhLmNoaWxkcmVuLnBvcCgpO3JldHVybiBhfWlmKHUuaXNCcmVhaygpKXtjb25zdCBlPXUuYnJlYWtOb2RlO2ZsdXNoKHQpO2lmKCJhdXRvIj09PWUudGFyZ2V0VHlwZSljb250aW51ZTtpZihlLmxlYWRlcil7Yz10aGlzW3FzXShlLmxlYWRlcixlW2RzXSgpKTtjPWM/Y1swXTpudWxsfWlmKGUudHJhaWxlcil7bD10aGlzW3FzXShlLnRyYWlsZXIsZVtkc10oKSk7bD1sP2xbMF06bnVsbH1pZigicGFnZUFyZWEiPT09ZS50YXJnZXRUeXBlKXtvPWVbSm5dLnRhcmdldDt0PTEvMH1lbHNlIGlmKGVbSm5dLnRhcmdldCl7bz1lW0puXS50YXJnZXQ7ZD1lW0puXS5pbmRleCsxO3Q9MS8wfWVsc2UgdD1lW0puXS5pbmRleDtjb250aW51ZX1pZih0aGlzW0puXS5vdmVyZmxvd05vZGUpe2NvbnN0IGU9dGhpc1tKbl0ub3ZlcmZsb3dOb2RlO3RoaXNbSm5dLm92ZXJmbG93Tm9kZT1udWxsO2NvbnN0IGE9ZVtzc10oKSxyPWEudGFyZ2V0O2EuYWRkTGVhZGVyPW51bGwhPT1hLmxlYWRlcjthLmFkZFRyYWlsZXI9bnVsbCE9PWEudHJhaWxlcjtmbHVzaCh0KTtjb25zdCBuPXQ7dD0xLzA7aWYociBpbnN0YW5jZW9mIFBhZ2VBcmVhKW89cjtlbHNlIGlmKHIgaW5zdGFuY2VvZiBDb250ZW50QXJlYSl7Y29uc3QgZT1pLmluZGV4T2Yocik7aWYoLTEhPT1lKWU+bj90PWUtMTpkPWU7ZWxzZXtvPXJbZHNdKCk7ZD1vLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yocil9fWNvbnRpbnVlfWZsdXNoKHQpfXRoaXNbSm5dLnBhZ2VOdW1iZXIrPTE7byYmKG9bSXNdKCk/b1tKbl0ubnVtYmVyT2ZVc2UrPTE6bz1udWxsKTtyPW98fHJbaHNdKCk7eWllbGQgbnVsbH19fWNsYXNzIFRleHQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJ0ZXh0Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1heENoYXJzPWdldEludGVnZXIoe2RhdGE6ZS5tYXhDaGFycyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bX25dKCl7cmV0dXJuITB9W0JzXShlKXtpZihlW09zXT09PWVvLnhodG1sLmlkKXt0aGlzWyRuXT1lO3JldHVybiEwfXdhcm4oYFhGQSAtIEludmFsaWQgY29udGVudCBpbiBUZXh0OiAke2VbTXNdfS5gKTtyZXR1cm4hMX1bTnNdKGUpe3RoaXNbJG5daW5zdGFuY2VvZiBYRkFPYmplY3R8fHN1cGVyW05zXShlKX1bWW5dKCl7InN0cmluZyI9PXR5cGVvZiB0aGlzWyRuXSYmKHRoaXNbJG5dPXRoaXNbJG5dLnJlcGxhY2VBbGwoIlxyXG4iLCJcbiIpKX1bc3NdKCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0aGlzWyRuXT90aGlzWyRuXS5zcGxpdCgvW1x1MjAyOVx1MjAyOFxuXS8pLmZpbHRlcihlPT4hIWUpLmpvaW4oIlxuIik6dGhpc1skbl1bJHNdKCl9W0tzXShlKXtpZigic3RyaW5nIj09dHlwZW9mIHRoaXNbJG5dKXtjb25zdCBlPXZhbHVlVG9IdG1sKHRoaXNbJG5dKS5odG1sO2lmKHRoaXNbJG5dLmluY2x1ZGVzKCJcdTIwMjkiKSl7ZS5uYW1lPSJkaXYiO2UuY2hpbGRyZW49W107dGhpc1skbl0uc3BsaXQoIlx1MjAyOSIpLm1hcChlPT5lLnNwbGl0KC9bXHUyMDI4XG5dLykuZmxhdE1hcChlPT5be25hbWU6InNwYW4iLHZhbHVlOmV9LHtuYW1lOiJiciJ9XSkpLmZvckVhY2godD0+e2UuY2hpbGRyZW4ucHVzaCh7bmFtZToicCIsY2hpbGRyZW46dH0pfSl9ZWxzZSBpZigvW1x1MjAyOFxuXS8udGVzdCh0aGlzWyRuXSkpe2UubmFtZT0iZGl2IjtlLmNoaWxkcmVuPVtdO3RoaXNbJG5dLnNwbGl0KC9bXHUyMDI4XG5dLykuZm9yRWFjaCh0PT57ZS5jaGlsZHJlbi5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSl9KX1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGUpfXJldHVybiB0aGlzWyRuXVtLc10oZSl9fWNsYXNzIFRleHRFZGl0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJ0ZXh0RWRpdCIsITApO3RoaXMuYWxsb3dSaWNoVGV4dD1nZXRJbnRlZ2VyKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaFNjcm9sbFBvbGljeT1nZXRTdHJpbmdPcHRpb24oZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tdWx0aUxpbmU9Z2V0SW50ZWdlcih7ZGF0YTplLm11bHRpTGluZSxkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+MD09PWV8fDE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudlNjcm9sbFBvbGljeT1nZXRTdHJpbmdPcHRpb24oZS52U2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jb21iPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtLc10oZSl7Y29uc3QgdD10b1N0eWxlKHRoaXMsImJvcmRlciIsImZvbnQiLCJtYXJnaW4iKTtsZXQgYTtjb25zdCByPXRoaXNbZHNdKClbZHNdKCk7IiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPXIgaW5zdGFuY2VvZiBEcmF3PzE6MCk7YT0xPT09dGhpcy5tdWx0aUxpbmU/e25hbWU6InRleHRhcmVhIixhdHRyaWJ1dGVzOntkYXRhSWQ6cltWbl0/Lltac118fHJbWnNdLGZpZWxkSWQ6cltac10sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwociksImFyaWEtcmVxdWlyZWQiOiExfX06e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixkYXRhSWQ6cltWbl0/Lltac118fHJbWnNdLGZpZWxkSWQ6cltac10sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwociksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChyKSl7YS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7YS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlthXX0pfX1jbGFzcyBUaW1lIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJ0aW1lIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W1luXSgpe2NvbnN0IGU9dGhpc1skbl0udHJpbSgpO3RoaXNbJG5dPWU/bmV3IERhdGUoZSk6bnVsbH1bS3NdKGUpe3JldHVybiB2YWx1ZVRvSHRtbCh0aGlzWyRuXT90aGlzWyRuXS50b1N0cmluZygpOiIiKX19Y2xhc3MgVGltZVN0YW1wIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJ0aW1lU3RhbXAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuc2VydmVyPWUuc2VydmVyfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBUb29sVGlwIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJ0b29sVGlwIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJpZD1lLnJpZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBUcmF2ZXJzYWwgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInRyYXZlcnNhbCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy50cmF2ZXJzZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFRyYXZlcnNlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJ0cmF2ZXJzZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLm9wZXJhdGlvbn1bRnNdKCl7cmV0dXJuITF9fWNsYXNzIFVpIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJ1aSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5iYXJjb2RlPW51bGw7dGhpcy5idXR0b249bnVsbDt0aGlzLmNoZWNrQnV0dG9uPW51bGw7dGhpcy5jaG9pY2VMaXN0PW51bGw7dGhpcy5kYXRlVGltZUVkaXQ9bnVsbDt0aGlzLmRlZmF1bHRVaT1udWxsO3RoaXMuaW1hZ2VFZGl0PW51bGw7dGhpcy5udW1lcmljRWRpdD1udWxsO3RoaXMucGFzc3dvcmRFZGl0PW51bGw7dGhpcy5zaWduYXR1cmU9bnVsbDt0aGlzLnRleHRFZGl0PW51bGx9W3NzXSgpe2lmKHZvaWQgMD09PXRoaXNbSm5dKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYoImV4dHJhcyI9PT1lfHwicGljdHVyZSI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2YgWEZBT2JqZWN0KXt0aGlzW0puXT10O3JldHVybiB0fX10aGlzW0puXT1udWxsfXJldHVybiB0aGlzW0puXX1bS3NdKGUpe2NvbnN0IHQ9dGhpc1tzc10oKTtyZXR1cm4gdD90W0tzXShlKTpIVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBWYWxpZGF0ZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihObywidmFsaWRhdGUiLCEwKTt0aGlzLmZvcm1hdFRlc3Q9Z2V0U3RyaW5nT3B0aW9uKGUuZm9ybWF0VGVzdCxbIndhcm5pbmciLCJkaXNhYmxlZCIsImVycm9yIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5udWxsVGVzdD1nZXRTdHJpbmdPcHRpb24oZS5udWxsVGVzdCxbImRpc2FibGVkIiwiZXJyb3IiLCJ3YXJuaW5nIl0pO3RoaXMuc2NyaXB0VGVzdD1nZXRTdHJpbmdPcHRpb24oZS5zY3JpcHRUZXN0LFsiZXJyb3IiLCJkaXNhYmxlZCIsIndhcm5pbmciXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZXNzYWdlPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgVmFsdWUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTm8sInZhbHVlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm92ZXJyaWRlPWdldEludGVnZXIoe2RhdGE6ZS5vdmVycmlkZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYXJjPW51bGw7dGhpcy5ib29sZWFuPW51bGw7dGhpcy5kYXRlPW51bGw7dGhpcy5kYXRlVGltZT1udWxsO3RoaXMuZGVjaW1hbD1udWxsO3RoaXMuZXhEYXRhPW51bGw7dGhpcy5mbG9hdD1udWxsO3RoaXMuaW1hZ2U9bnVsbDt0aGlzLmludGVnZXI9bnVsbDt0aGlzLmxpbmU9bnVsbDt0aGlzLnJlY3RhbmdsZT1udWxsO3RoaXMudGV4dD1udWxsO3RoaXMudGltZT1udWxsfVtHc10oZSl7Y29uc3QgdD10aGlzW2RzXSgpO2lmKHQgaW5zdGFuY2VvZiBGaWVsZCYmdC51aT8uaW1hZ2VFZGl0KXtpZighdGhpcy5pbWFnZSl7dGhpcy5pbWFnZT1uZXcgSW1hZ2Uoe30pO3RoaXNbam5dKHRoaXMuaW1hZ2UpfXRoaXMuaW1hZ2VbJG5dPWVbJG5dO3JldHVybn1jb25zdCBhPWVbTXNdO2lmKG51bGw9PT10aGlzW2FdKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7Y29uc3QgdD10aGlzW2VdO2lmKHQgaW5zdGFuY2VvZiBYRkFPYmplY3Qpe3RoaXNbZV09bnVsbDt0aGlzW1VzXSh0KX19dGhpc1tlW01zXV09ZTt0aGlzW2puXShlKX1lbHNlIHRoaXNbYV1bJG5dPWVbJG5dfVskc10oKXtpZih0aGlzLmV4RGF0YSlyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHRoaXMuZXhEYXRhWyRuXT90aGlzLmV4RGF0YVskbl0udHJpbSgpOnRoaXMuZXhEYXRhWyRuXVskc10oKS50cmltKCk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJpbWFnZSI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2YgWEZBT2JqZWN0KXJldHVybih0WyRuXXx8IiIpLnRvU3RyaW5nKCkudHJpbSgpfXJldHVybiBudWxsfVtLc10oZSl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IGE9dGhpc1t0XTtpZihhIGluc3RhbmNlb2YgWEZBT2JqZWN0KXJldHVybiBhW0tzXShlKX1yZXR1cm4gSFRNTFJlc3VsdC5FTVBUWX19Y2xhc3MgVmFyaWFibGVzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE5vLCJ2YXJpYWJsZXMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm1hbmlmZXN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNjcmlwdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IFhGQU9iamVjdEFycmF5fVtGc10oKXtyZXR1cm4hMH19Y2xhc3MgVGVtcGxhdGVOYW1lc3BhY2V7c3RhdGljW1FzXShlLHQpe2lmKFRlbXBsYXRlTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXtjb25zdCBhPVRlbXBsYXRlTmFtZXNwYWNlW2VdKHQpO2FbV3NdKHQpO3JldHVybiBhfX1zdGF0aWMgYXBwZWFyYW5jZUZpbHRlcihlKXtyZXR1cm4gbmV3IEFwcGVhcmFuY2VGaWx0ZXIoZSl9c3RhdGljIGFyYyhlKXtyZXR1cm4gbmV3IEFyYyhlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IEFyZWEoZSl9c3RhdGljIGFzc2lzdChlKXtyZXR1cm4gbmV3IEFzc2lzdChlKX1zdGF0aWMgYmFyY29kZShlKXtyZXR1cm4gbmV3IEJhcmNvZGUoZSl9c3RhdGljIGJpbmQoZSl7cmV0dXJuIG5ldyBCaW5kKGUpfXN0YXRpYyBiaW5kSXRlbXMoZSl7cmV0dXJuIG5ldyBCaW5kSXRlbXMoZSl9c3RhdGljIGJvb2tlbmQoZSl7cmV0dXJuIG5ldyBCb29rZW5kKGUpfXN0YXRpYyBib29sZWFuKGUpe3JldHVybiBuZXcgQm9vbGVhbkVsZW1lbnQoZSl9c3RhdGljIGJvcmRlcihlKXtyZXR1cm4gbmV3IEJvcmRlcihlKX1zdGF0aWMgYnJlYWsoZSl7cmV0dXJuIG5ldyBCcmVhayhlKX1zdGF0aWMgYnJlYWtBZnRlcihlKXtyZXR1cm4gbmV3IEJyZWFrQWZ0ZXIoZSl9c3RhdGljIGJyZWFrQmVmb3JlKGUpe3JldHVybiBuZXcgQnJlYWtCZWZvcmUoZSl9c3RhdGljIGJ1dHRvbihlKXtyZXR1cm4gbmV3IEJ1dHRvbihlKX1zdGF0aWMgY2FsY3VsYXRlKGUpe3JldHVybiBuZXcgQ2FsY3VsYXRlKGUpfXN0YXRpYyBjYXB0aW9uKGUpe3JldHVybiBuZXcgQ2FwdGlvbihlKX1zdGF0aWMgY2VydGlmaWNhdGUoZSl7cmV0dXJuIG5ldyBDZXJ0aWZpY2F0ZShlKX1zdGF0aWMgY2VydGlmaWNhdGVzKGUpe3JldHVybiBuZXcgQ2VydGlmaWNhdGVzKGUpfXN0YXRpYyBjaGVja0J1dHRvbihlKXtyZXR1cm4gbmV3IENoZWNrQnV0dG9uKGUpfXN0YXRpYyBjaG9pY2VMaXN0KGUpe3JldHVybiBuZXcgQ2hvaWNlTGlzdChlKX1zdGF0aWMgY29sb3IoZSl7cmV0dXJuIG5ldyBDb2xvcihlKX1zdGF0aWMgY29tYihlKXtyZXR1cm4gbmV3IENvbWIoZSl9c3RhdGljIGNvbm5lY3QoZSl7cmV0dXJuIG5ldyBDb25uZWN0KGUpfXN0YXRpYyBjb250ZW50QXJlYShlKXtyZXR1cm4gbmV3IENvbnRlbnRBcmVhKGUpfXN0YXRpYyBjb3JuZXIoZSl7cmV0dXJuIG5ldyBDb3JuZXIoZSl9c3RhdGljIGRhdGUoZSl7cmV0dXJuIG5ldyBEYXRlRWxlbWVudChlKX1zdGF0aWMgZGF0ZVRpbWUoZSl7cmV0dXJuIG5ldyBEYXRlVGltZShlKX1zdGF0aWMgZGF0ZVRpbWVFZGl0KGUpe3JldHVybiBuZXcgRGF0ZVRpbWVFZGl0KGUpfXN0YXRpYyBkZWNpbWFsKGUpe3JldHVybiBuZXcgRGVjaW1hbChlKX1zdGF0aWMgZGVmYXVsdFVpKGUpe3JldHVybiBuZXcgRGVmYXVsdFVpKGUpfXN0YXRpYyBkZXNjKGUpe3JldHVybiBuZXcgRGVzYyhlKX1zdGF0aWMgZGlnZXN0TWV0aG9kKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kKGUpfXN0YXRpYyBkaWdlc3RNZXRob2RzKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kcyhlKX1zdGF0aWMgZHJhdyhlKXtyZXR1cm4gbmV3IERyYXcoZSl9c3RhdGljIGVkZ2UoZSl7cmV0dXJuIG5ldyBFZGdlKGUpfXN0YXRpYyBlbmNvZGluZyhlKXtyZXR1cm4gbmV3IEVuY29kaW5nKGUpfXN0YXRpYyBlbmNvZGluZ3MoZSl7cmV0dXJuIG5ldyBFbmNvZGluZ3MoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBFbmNyeXB0KGUpfXN0YXRpYyBlbmNyeXB0RGF0YShlKXtyZXR1cm4gbmV3IEVuY3J5cHREYXRhKGUpfXN0YXRpYyBlbmNyeXB0aW9uKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbihlKX1zdGF0aWMgZW5jcnlwdGlvbk1ldGhvZChlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb25NZXRob2QoZSl9c3RhdGljIGVuY3J5cHRpb25NZXRob2RzKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbk1ldGhvZHMoZSl9c3RhdGljIGV2ZW50KGUpe3JldHVybiBuZXcgRXZlbnQoZSl9c3RhdGljIGV4RGF0YShlKXtyZXR1cm4gbmV3IEV4RGF0YShlKX1zdGF0aWMgZXhPYmplY3QoZSl7cmV0dXJuIG5ldyBFeE9iamVjdChlKX1zdGF0aWMgZXhjbEdyb3VwKGUpe3JldHVybiBuZXcgRXhjbEdyb3VwKGUpfXN0YXRpYyBleGVjdXRlKGUpe3JldHVybiBuZXcgRXhlY3V0ZShlKX1zdGF0aWMgZXh0cmFzKGUpe3JldHVybiBuZXcgRXh0cmFzKGUpfXN0YXRpYyBmaWVsZChlKXtyZXR1cm4gbmV3IEZpZWxkKGUpfXN0YXRpYyBmaWxsKGUpe3JldHVybiBuZXcgRmlsbChlKX1zdGF0aWMgZmlsdGVyKGUpe3JldHVybiBuZXcgRmlsdGVyKGUpfXN0YXRpYyBmbG9hdChlKXtyZXR1cm4gbmV3IEZsb2F0KGUpfXN0YXRpYyBmb250KGUpe3JldHVybiBuZXcgdGVtcGxhdGVfRm9udChlKX1zdGF0aWMgZm9ybWF0KGUpe3JldHVybiBuZXcgRm9ybWF0KGUpfXN0YXRpYyBoYW5kbGVyKGUpe3JldHVybiBuZXcgSGFuZGxlcihlKX1zdGF0aWMgaHlwaGVuYXRpb24oZSl7cmV0dXJuIG5ldyBIeXBoZW5hdGlvbihlKX1zdGF0aWMgaW1hZ2UoZSl7cmV0dXJuIG5ldyBJbWFnZShlKX1zdGF0aWMgaW1hZ2VFZGl0KGUpe3JldHVybiBuZXcgSW1hZ2VFZGl0KGUpfXN0YXRpYyBpbnRlZ2VyKGUpe3JldHVybiBuZXcgSW50ZWdlcihlKX1zdGF0aWMgaXNzdWVycyhlKXtyZXR1cm4gbmV3IElzc3VlcnMoZSl9c3RhdGljIGl0ZW1zKGUpe3JldHVybiBuZXcgSXRlbXMoZSl9c3RhdGljIGtlZXAoZSl7cmV0dXJuIG5ldyBLZWVwKGUpfXN0YXRpYyBrZXlVc2FnZShlKXtyZXR1cm4gbmV3IEtleVVzYWdlKGUpfXN0YXRpYyBsaW5lKGUpe3JldHVybiBuZXcgTGluZShlKX1zdGF0aWMgbGluZWFyKGUpe3JldHVybiBuZXcgTGluZWFyKGUpfXN0YXRpYyBsb2NrRG9jdW1lbnQoZSl7cmV0dXJuIG5ldyBMb2NrRG9jdW1lbnQoZSl9c3RhdGljIG1hbmlmZXN0KGUpe3JldHVybiBuZXcgTWFuaWZlc3QoZSl9c3RhdGljIG1hcmdpbihlKXtyZXR1cm4gbmV3IE1hcmdpbihlKX1zdGF0aWMgbWRwKGUpe3JldHVybiBuZXcgTWRwKGUpfXN0YXRpYyBtZWRpdW0oZSl7cmV0dXJuIG5ldyBNZWRpdW0oZSl9c3RhdGljIG1lc3NhZ2UoZSl7cmV0dXJuIG5ldyBNZXNzYWdlKGUpfXN0YXRpYyBudW1lcmljRWRpdChlKXtyZXR1cm4gbmV3IE51bWVyaWNFZGl0KGUpfXN0YXRpYyBvY2N1cihlKXtyZXR1cm4gbmV3IE9jY3VyKGUpfXN0YXRpYyBvaWQoZSl7cmV0dXJuIG5ldyBPaWQoZSl9c3RhdGljIG9pZHMoZSl7cmV0dXJuIG5ldyBPaWRzKGUpfXN0YXRpYyBvdmVyZmxvdyhlKXtyZXR1cm4gbmV3IE92ZXJmbG93KGUpfXN0YXRpYyBwYWdlQXJlYShlKXtyZXR1cm4gbmV3IFBhZ2VBcmVhKGUpfXN0YXRpYyBwYWdlU2V0KGUpe3JldHVybiBuZXcgUGFnZVNldChlKX1zdGF0aWMgcGFyYShlKXtyZXR1cm4gbmV3IFBhcmEoZSl9c3RhdGljIHBhc3N3b3JkRWRpdChlKXtyZXR1cm4gbmV3IFBhc3N3b3JkRWRpdChlKX1zdGF0aWMgcGF0dGVybihlKXtyZXR1cm4gbmV3IHRlbXBsYXRlX1BhdHRlcm4oZSl9c3RhdGljIHBpY3R1cmUoZSl7cmV0dXJuIG5ldyBQaWN0dXJlKGUpfXN0YXRpYyBwcm90byhlKXtyZXR1cm4gbmV3IFByb3RvKGUpfXN0YXRpYyByYWRpYWwoZSl7cmV0dXJuIG5ldyBSYWRpYWwoZSl9c3RhdGljIHJlYXNvbihlKXtyZXR1cm4gbmV3IFJlYXNvbihlKX1zdGF0aWMgcmVhc29ucyhlKXtyZXR1cm4gbmV3IFJlYXNvbnMoZSl9c3RhdGljIHJlY3RhbmdsZShlKXtyZXR1cm4gbmV3IFJlY3RhbmdsZShlKX1zdGF0aWMgcmVmKGUpe3JldHVybiBuZXcgUmVmRWxlbWVudChlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgU2NyaXB0KGUpfXN0YXRpYyBzZXRQcm9wZXJ0eShlKXtyZXR1cm4gbmV3IFNldFByb3BlcnR5KGUpfXN0YXRpYyBzaWduRGF0YShlKXtyZXR1cm4gbmV3IFNpZ25EYXRhKGUpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBTaWduYXR1cmUoZSl9c3RhdGljIHNpZ25pbmcoZSl7cmV0dXJuIG5ldyBTaWduaW5nKGUpfXN0YXRpYyBzb2xpZChlKXtyZXR1cm4gbmV3IFNvbGlkKGUpfXN0YXRpYyBzcGVhayhlKXtyZXR1cm4gbmV3IFNwZWFrKGUpfXN0YXRpYyBzdGlwcGxlKGUpe3JldHVybiBuZXcgU3RpcHBsZShlKX1zdGF0aWMgc3ViZm9ybShlKXtyZXR1cm4gbmV3IFN1YmZvcm0oZSl9c3RhdGljIHN1YmZvcm1TZXQoZSl7cmV0dXJuIG5ldyBTdWJmb3JtU2V0KGUpfXN0YXRpYyBzdWJqZWN0RE4oZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE4oZSl9c3RhdGljIHN1YmplY3RETnMoZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE5zKGUpfXN0YXRpYyBzdWJtaXQoZSl7cmV0dXJuIG5ldyBTdWJtaXQoZSl9c3RhdGljIHRlbXBsYXRlKGUpe3JldHVybiBuZXcgVGVtcGxhdGUoZSl9c3RhdGljIHRleHQoZSl7cmV0dXJuIG5ldyBUZXh0KGUpfXN0YXRpYyB0ZXh0RWRpdChlKXtyZXR1cm4gbmV3IFRleHRFZGl0KGUpfXN0YXRpYyB0aW1lKGUpe3JldHVybiBuZXcgVGltZShlKX1zdGF0aWMgdGltZVN0YW1wKGUpe3JldHVybiBuZXcgVGltZVN0YW1wKGUpfXN0YXRpYyB0b29sVGlwKGUpe3JldHVybiBuZXcgVG9vbFRpcChlKX1zdGF0aWMgdHJhdmVyc2FsKGUpe3JldHVybiBuZXcgVHJhdmVyc2FsKGUpfXN0YXRpYyB0cmF2ZXJzZShlKXtyZXR1cm4gbmV3IFRyYXZlcnNlKGUpfXN0YXRpYyB1aShlKXtyZXR1cm4gbmV3IFVpKGUpfXN0YXRpYyB2YWxpZGF0ZShlKXtyZXR1cm4gbmV3IFZhbGlkYXRlKGUpfXN0YXRpYyB2YWx1ZShlKXtyZXR1cm4gbmV3IFZhbHVlKGUpfXN0YXRpYyB2YXJpYWJsZXMoZSl7cmV0dXJuIG5ldyBWYXJpYWJsZXMoZSl9fWNvbnN0IFVvPWVvLmRhdGFzZXRzLmlkO2Z1bmN0aW9uIGNyZWF0ZVRleHQoZSl7Y29uc3QgdD1uZXcgVGV4dCh7fSk7dFskbl09ZTtyZXR1cm4gdH1jbGFzcyBCaW5kZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5yb290PWU7dGhpcy5kYXRhc2V0cz1lLmRhdGFzZXRzO3RoaXMuZGF0YT1lLmRhdGFzZXRzPy5kYXRhfHxuZXcgWG1sT2JqZWN0KGVvLmRhdGFzZXRzLmlkLCJkYXRhIik7dGhpcy5lbXB0eU1lcmdlPTA9PT10aGlzLmRhdGFbY3NdKCkubGVuZ3RoO3RoaXMucm9vdC5mb3JtPXRoaXMuZm9ybT1lLnRlbXBsYXRlW0duXSgpfV9pc0NvbnN1bWVEYXRhKCl7cmV0dXJuIXRoaXMuZW1wdHlNZXJnZSYmdGhpcy5fbWVyZ2VNb2RlfV9pc01hdGNoVGVtcGxhdGUoKXtyZXR1cm4hdGhpcy5faXNDb25zdW1lRGF0YSgpfWJpbmQoKXt0aGlzLl9iaW5kRWxlbWVudCh0aGlzLmZvcm0sdGhpcy5kYXRhKTtyZXR1cm4gdGhpcy5mb3JtfWdldERhdGEoKXtyZXR1cm4gdGhpcy5kYXRhfV9iaW5kVmFsdWUoZSx0LGEpe2VbVm5dPXQ7aWYoZVtwc10oKSlpZih0W1NzXSgpKXtjb25zdCBhPXRbbnNdKCk7ZVtHc10oY3JlYXRlVGV4dChhKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgRmllbGQmJiJtdWx0aVNlbGVjdCI9PT1lLnVpPy5jaG9pY2VMaXN0Py5vcGVuKXtjb25zdCBhPXRbY3NdKCkubWFwKGU9PmVbJG5dLnRyaW0oKSkuam9pbigiXG4iKTtlW0dzXShjcmVhdGVUZXh0KGEpKX1lbHNlIHRoaXMuX2lzQ29uc3VtZURhdGEoKSYmd2FybigiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpO2Vsc2UhdFtTc10oKXx8dGhpcy5faXNNYXRjaFRlbXBsYXRlKCk/dGhpcy5fYmluZEVsZW1lbnQoZSx0KTp3YXJuKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIil9X2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKGUsdCxhLHIpe2lmKCFlKXJldHVybiBudWxsO2xldCBpLG47Zm9yKGxldCByPTA7cjwzO3IrKyl7aT1hW29zXShlLCExLCEwKTtmb3IoOzspe249aS5uZXh0KCkudmFsdWU7aWYoIW4pYnJlYWs7aWYodD09PW5bU3NdKCkpcmV0dXJuIG59aWYoYVtPc109PT1lby5kYXRhc2V0cy5pZCYmImRhdGEiPT09YVtNc10pYnJlYWs7YT1hW2RzXSgpfWlmKCFyKXJldHVybiBudWxsO2k9dGhpcy5kYXRhW29zXShlLCEwLCExKTtuPWkubmV4dCgpLnZhbHVlO2lmKG4pcmV0dXJuIG47aT10aGlzLmRhdGFbUW5dKGUsITApO249aS5uZXh0KCkudmFsdWU7cmV0dXJuIG4/LltTc10oKT9uOm51bGx9X3NldFByb3BlcnRpZXMoZSx0KXtpZihlLmhhc093blByb3BlcnR5KCJzZXRQcm9wZXJ0eSIpKWZvcihjb25zdHtyZWY6YSx0YXJnZXQ6cixjb25uZWN0aW9uOml9b2YgZS5zZXRQcm9wZXJ0eS5jaGlsZHJlbil7aWYoaSljb250aW51ZTtpZighYSljb250aW51ZTtjb25zdCBuPXNlYXJjaE5vZGUodGhpcy5yb290LHQsYSwhMSwhMSk7aWYoIW4pe3dhcm4oYFhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAke2F9LmApO2NvbnRpbnVlfWNvbnN0W3NdPW47aWYoIXNbQXNdKHRoaXMuZGF0YSkpe3dhcm4oIlhGQSAtIEludmFsaWQgbm9kZTogbXVzdCBiZSBhIGRhdGEgbm9kZS4iKTtjb250aW51ZX1jb25zdCBvPXNlYXJjaE5vZGUodGhpcy5yb290LGUsciwhMSwhMSk7aWYoIW8pe3dhcm4oYFhGQSAtIEludmFsaWQgdGFyZ2V0OiAke3J9LmApO2NvbnRpbnVlfWNvbnN0W2NdPW87aWYoIWNbQXNdKGUpKXt3YXJuKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpO2NvbnRpbnVlfWNvbnN0IGw9Y1tkc10oKTtpZihjIGluc3RhbmNlb2YgU2V0UHJvcGVydHl8fGwgaW5zdGFuY2VvZiBTZXRQcm9wZXJ0eSl7d2FybigiWEZBIC0gSW52YWxpZCB0YXJnZXQ6IGNhbm5vdCBiZSBhIHNldFByb3BlcnR5IG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtjb250aW51ZX1pZihjIGluc3RhbmNlb2YgQmluZEl0ZW1zfHxsIGluc3RhbmNlb2YgQmluZEl0ZW1zKXt3YXJuKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtjb250aW51ZX1jb25zdCBoPXNbJHNdKCksdT1jW01zXTtpZihjIGluc3RhbmNlb2YgWEZBQXR0cmlidXRlKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7ZVt1XT1oO2NvbnN0IHQ9UmVmbGVjdC5jb25zdHJ1Y3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKGwpLmNvbnN0cnVjdG9yLFtlXSk7bFt1XT10W3VdO2NvbnRpbnVlfWlmKGMuaGFzT3duUHJvcGVydHkoJG4pKXtjW1ZuXT1zO2NbJG5dPWg7Y1tZbl0oKX1lbHNlIHdhcm4oIlhGQSAtIEludmFsaWQgbm9kZSB0byB1c2UgaW4gc2V0UHJvcGVydHkiKX19X2JpbmRJdGVtcyhlLHQpe2lmKCFlLmhhc093blByb3BlcnR5KCJpdGVtcyIpfHwhZS5oYXNPd25Qcm9wZXJ0eSgiYmluZEl0ZW1zIil8fGUuYmluZEl0ZW1zLmlzRW1wdHkoKSlyZXR1cm47Zm9yKGNvbnN0IHQgb2YgZS5pdGVtcy5jaGlsZHJlbillW1VzXSh0KTtlLml0ZW1zLmNsZWFyKCk7Y29uc3QgYT1uZXcgSXRlbXMoe30pLHI9bmV3IEl0ZW1zKHt9KTtlW2puXShhKTtlLml0ZW1zLnB1c2goYSk7ZVtqbl0ocik7ZS5pdGVtcy5wdXNoKHIpO2Zvcihjb25zdHtyZWY6aSxsYWJlbFJlZjpuLHZhbHVlUmVmOnMsY29ubmVjdGlvbjpvfW9mIGUuYmluZEl0ZW1zLmNoaWxkcmVuKXtpZihvKWNvbnRpbnVlO2lmKCFpKWNvbnRpbnVlO2NvbnN0IGU9c2VhcmNoTm9kZSh0aGlzLnJvb3QsdCxpLCExLCExKTtpZihlKWZvcihjb25zdCB0IG9mIGUpe2lmKCF0W0FzXSh0aGlzLmRhdGFzZXRzKSl7d2FybihgWEZBIC0gSW52YWxpZCByZWYgKCR7aX0pOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuYCk7Y29udGludWV9Y29uc3QgZT1zZWFyY2hOb2RlKHRoaXMucm9vdCx0LG4sITAsITEpO2lmKCFlKXt3YXJuKGBYRkEgLSBJbnZhbGlkIGxhYmVsOiAke259LmApO2NvbnRpbnVlfWNvbnN0W29dPWU7aWYoIW9bQXNdKHRoaXMuZGF0YXNldHMpKXt3YXJuKCJYRkEgLSBJbnZhbGlkIGxhYmVsOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuIik7Y29udGludWV9Y29uc3QgYz1zZWFyY2hOb2RlKHRoaXMucm9vdCx0LHMsITAsITEpO2lmKCFjKXt3YXJuKGBYRkEgLSBJbnZhbGlkIHZhbHVlOiAke3N9LmApO2NvbnRpbnVlfWNvbnN0W2xdPWM7aWYoIWxbQXNdKHRoaXMuZGF0YXNldHMpKXt3YXJuKCJYRkEgLSBJbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuIik7Y29udGludWV9Y29uc3QgaD1jcmVhdGVUZXh0KG9bJHNdKCkpLHU9Y3JlYXRlVGV4dChsWyRzXSgpKTthW2puXShoKTthLnRleHQucHVzaChoKTtyW2puXSh1KTtyLnRleHQucHVzaCh1KX1lbHNlIHdhcm4oYFhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAke2l9LmApfX1fYmluZE9jY3VycmVuY2VzKGUsdCxhKXtsZXQgcjtpZih0Lmxlbmd0aD4xKXtyPWVbR25dKCk7cltVc10oci5vY2N1cik7ci5vY2N1cj1udWxsfXRoaXMuX2JpbmRWYWx1ZShlLHRbMF0sYSk7dGhpcy5fc2V0UHJvcGVydGllcyhlLHRbMF0pO3RoaXMuX2JpbmRJdGVtcyhlLHRbMF0pO2lmKDE9PT10Lmxlbmd0aClyZXR1cm47Y29uc3QgaT1lW2RzXSgpLG49ZVtNc10scz1pW2JzXShlKTtmb3IobGV0IGU9MSxvPXQubGVuZ3RoO2U8bztlKyspe2NvbnN0IG89dFtlXSxjPXJbR25dKCk7aVtuXS5wdXNoKGMpO2lbeXNdKHMrZSxjKTt0aGlzLl9iaW5kVmFsdWUoYyxvLGEpO3RoaXMuX3NldFByb3BlcnRpZXMoYyxvKTt0aGlzLl9iaW5kSXRlbXMoYyxvKX19X2NyZWF0ZU9jY3VycmVuY2VzKGUpe2lmKCF0aGlzLmVtcHR5TWVyZ2UpcmV0dXJuO2NvbnN0e29jY3VyOnR9PWU7aWYoIXR8fHQuaW5pdGlhbDw9MSlyZXR1cm47Y29uc3QgYT1lW2RzXSgpLHI9ZVtNc107aWYoIShhW3JdaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkpcmV0dXJuO2xldCBpO2k9ZS5uYW1lP2Fbcl0uY2hpbGRyZW4uZmlsdGVyKHQ9PnQubmFtZT09PWUubmFtZSkubGVuZ3RoOmFbcl0uY2hpbGRyZW4ubGVuZ3RoO2NvbnN0IG49YVtic10oZSkrMSxzPXQuaW5pdGlhbC1pO2lmKHMpe2NvbnN0IHQ9ZVtHbl0oKTt0W1VzXSh0Lm9jY3VyKTt0Lm9jY3VyPW51bGw7YVtyXS5wdXNoKHQpO2FbeXNdKG4sdCk7Zm9yKGxldCBlPTE7ZTxzO2UrKyl7Y29uc3QgaT10W0duXSgpO2Fbcl0ucHVzaChpKTthW3lzXShuK2UsaSl9fX1fZ2V0T2NjdXJJbmZvKGUpe2NvbnN0e25hbWU6dCxvY2N1cjphfT1lO2lmKCFhfHwhdClyZXR1cm5bMSwxXTtjb25zdCByPS0xPT09YS5tYXg/MS8wOmEubWF4O3JldHVyblthLm1pbixyXX1fc2V0QW5kQmluZChlLHQpe3RoaXMuX3NldFByb3BlcnRpZXMoZSx0KTt0aGlzLl9iaW5kSXRlbXMoZSx0KTt0aGlzLl9iaW5kRWxlbWVudChlLHQpfV9iaW5kRWxlbWVudChlLHQpe2NvbnN0IGE9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7Zm9yKGNvbnN0IHIgb2YgZVtjc10oKSl7aWYocltWbl0pY29udGludWU7aWYodm9pZCAwPT09dGhpcy5fbWVyZ2VNb2RlJiYic3ViZm9ybSI9PT1yW01zXSl7dGhpcy5fbWVyZ2VNb2RlPSJjb25zdW1lRGF0YSI9PT1yLm1lcmdlTW9kZTtjb25zdCBlPXRbY3NdKCk7aWYoZS5sZW5ndGg+MCl0aGlzLl9iaW5kT2NjdXJyZW5jZXMocixbZVswXV0sbnVsbCk7ZWxzZSBpZih0aGlzLmVtcHR5TWVyZ2Upe2NvbnN0IGU9dFtPc109PT1Vbz8tMTp0W09zXSxhPXJbVm5dPW5ldyBYbWxPYmplY3QoZSxyLm5hbWV8fCJyb290Iik7dFtqbl0oYSk7dGhpcy5fYmluZEVsZW1lbnQocixhKX1jb250aW51ZX1pZighclt4c10oKSljb250aW51ZTtsZXQgZT0hMSxpPW51bGwsbj1udWxsLHM9bnVsbDtpZihyLmJpbmQpe3N3aXRjaChyLmJpbmQubWF0Y2gpe2Nhc2Uibm9uZSI6dGhpcy5fc2V0QW5kQmluZChyLHQpO2NvbnRpbnVlO2Nhc2UiZ2xvYmFsIjplPSEwO2JyZWFrO2Nhc2UiZGF0YVJlZiI6aWYoIXIuYmluZC5yZWYpe3dhcm4oYFhGQSAtIHJlZiBpcyBlbXB0eSBpbiBub2RlICR7cltNc119LmApO3RoaXMuX3NldEFuZEJpbmQocix0KTtjb250aW51ZX1uPXIuYmluZC5yZWZ9ci5iaW5kLnBpY3R1cmUmJihpPXIuYmluZC5waWN0dXJlWyRuXSl9Y29uc3RbbyxjXT10aGlzLl9nZXRPY2N1ckluZm8ocik7aWYobil7cz1zZWFyY2hOb2RlKHRoaXMucm9vdCx0LG4sITAsITEpO2lmKG51bGw9PT1zKXtzPWNyZWF0ZURhdGFOb2RlKHRoaXMuZGF0YSx0LG4pO2lmKCFzKWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKHNbem5dPSEwKTt0aGlzLl9zZXRBbmRCaW5kKHIscyk7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYocz1zLmZpbHRlcihlPT4hZVt6bl0pKTtzLmxlbmd0aD5jP3M9cy5zbGljZSgwLGMpOjA9PT1zLmxlbmd0aCYmKHM9bnVsbCk7cyYmdGhpcy5faXNDb25zdW1lRGF0YSgpJiZzLmZvckVhY2goZT0+e2Vbem5dPSEwfSl9ZWxzZXtpZighci5uYW1lKXt0aGlzLl9zZXRBbmRCaW5kKHIsdCk7Y29udGludWV9aWYodGhpcy5faXNDb25zdW1lRGF0YSgpKXtjb25zdCBhPVtdO2Zvcig7YS5sZW5ndGg8Yzspe2NvbnN0IGk9dGhpcy5fZmluZERhdGFCeU5hbWVUb0NvbnN1bWUoci5uYW1lLHJbcHNdKCksdCxlKTtpZighaSlicmVhaztpW3puXT0hMDthLnB1c2goaSl9cz1hLmxlbmd0aD4wP2E6bnVsbH1lbHNle3M9dFtvc10oci5uYW1lLCExLHRoaXMuZW1wdHlNZXJnZSkubmV4dCgpLnZhbHVlO2lmKCFzKXtpZigwPT09byl7YS5wdXNoKHIpO2NvbnRpbnVlfWNvbnN0IGU9dFtPc109PT1Vbz8tMTp0W09zXTtzPXJbVm5dPW5ldyBYbWxPYmplY3QoZSxyLm5hbWUpO3RoaXMuZW1wdHlNZXJnZSYmKHNbem5dPSEwKTt0W2puXShzKTt0aGlzLl9zZXRBbmRCaW5kKHIscyk7Y29udGludWV9dGhpcy5lbXB0eU1lcmdlJiYoc1t6bl09ITApO3M9W3NdfX1zP3RoaXMuX2JpbmRPY2N1cnJlbmNlcyhyLHMsaSk6bz4wP3RoaXMuX3NldEFuZEJpbmQocix0KTphLnB1c2gocil9YS5mb3JFYWNoKGU9PmVbZHNdKClbVXNdKGUpKX19Y2xhc3MgRGF0YUhhbmRsZXJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRhdGE9dDt0aGlzLmRhdGFzZXQ9ZS5kYXRhc2V0c3x8bnVsbH1zZXJpYWxpemUoZSl7Y29uc3QgdD1bWy0xLHRoaXMuZGF0YVtjc10oKV1dO2Zvcig7dC5sZW5ndGg+MDspe2NvbnN0IGE9dC5hdCgtMSksW3IsaV09YTtpZihyKzE9PT1pLmxlbmd0aCl7dC5wb3AoKTtjb250aW51ZX1jb25zdCBuPWlbKythWzBdXSxzPWUuZ2V0KG5bWnNdKTtpZihzKW5bR3NdKHMpO2Vsc2V7Y29uc3QgdD1uW2VzXSgpO2Zvcihjb25zdCBhIG9mIHQudmFsdWVzKCkpe2NvbnN0IHQ9ZS5nZXQoYVtac10pO2lmKHQpe2FbR3NdKHQpO2JyZWFrfX19Y29uc3Qgbz1uW2NzXSgpO28ubGVuZ3RoPjAmJnQucHVzaChbLTEsb10pfWNvbnN0IGE9Wyc8eGZhOmRhdGFzZXRzIHhtbG5zOnhmYT0iaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8xLjAvIj4nXTtpZih0aGlzLmRhdGFzZXQpZm9yKGNvbnN0IGUgb2YgdGhpcy5kYXRhc2V0W2NzXSgpKSJkYXRhIiE9PWVbTXNdJiZlW0pzXShhKTt0aGlzLmRhdGFbSnNdKGEpO2EucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iik7cmV0dXJuIGEuam9pbigiIil9fWNvbnN0IGpvPWVvLmNvbmZpZy5pZDtjbGFzcyBBY3JvYmF0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJhY3JvYmF0IiwhMCk7dGhpcy5hY3JvYmF0Nz1udWxsO3RoaXMuYXV0b1NhdmU9bnVsbDt0aGlzLmNvbW1vbj1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLnZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzPW51bGw7dGhpcy5zdWJtaXRVcmw9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBBY3JvYmF0NyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiYWNyb2JhdDciLCEwKTt0aGlzLmR5bmFtaWNSZW5kZXI9bnVsbH19Y2xhc3MgQURCRV9KU0NvbnNvbGUgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sIkFEQkVfSlNDb25zb2xlIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX19Y2xhc3MgQURCRV9KU0RlYnVnZ2VyIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJBREJFX0pTRGVidWdnZXIiLFsiZGVsZWdhdGUiLCJFbmFibGUiLCJEaXNhYmxlIl0pfX1jbGFzcyBBZGRTaWxlbnRQcmludCBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJhZGRTaWxlbnRQcmludCIpfX1jbGFzcyBBZGRWaWV3ZXJQcmVmZXJlbmNlcyBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfX1jbGFzcyBBZGp1c3REYXRhIGV4dGVuZHMgT3B0aW9uMTB7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImFkanVzdERhdGEiKX19Y2xhc3MgQWRvYmVFeHRlbnNpb25MZXZlbCBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLDAsZT0+ZT49MSYmZTw9OCl9fWNsYXNzIEFnZW50IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJhZ2VudCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmNvbW1vbj1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEFsd2F5c0VtYmVkIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiYWx3YXlzRW1iZWQiKX19Y2xhc3MgQW1kIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJhbWQiKX19Y2xhc3MgY29uZmlnX0FyZWEgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImFyZWEiKTt0aGlzLmxldmVsPWdldEludGVnZXIoe2RhdGE6ZS5sZXZlbCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0xJiZlPD0zfSk7dGhpcy5uYW1lPWdldFN0cmluZ09wdGlvbihlLm5hbWUsWyIiLCJiYXJjb2RlIiwiY29yZWluaXQiLCJkZXZpY2VEcml2ZXIiLCJmb250IiwiZ2VuZXJhbCIsImxheW91dCIsIm1lcmdlIiwic2NyaXB0Iiwic2lnbmF0dXJlIiwic291cmNlU2V0IiwidGVtcGxhdGVDYWNoZSJdKX19Y2xhc3MgQXR0cmlidXRlcyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiYXR0cmlidXRlcyIsWyJwcmVzZXJ2ZSIsImRlbGVnYXRlIiwiaWdub3JlIl0pfX1jbGFzcyBBdXRvU2F2ZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiYXV0b1NhdmUiLFsiZGlzYWJsZWQiLCJlbmFibGVkIl0pfX1jbGFzcyBCYXNlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJiYXNlIil9fWNsYXNzIEJhdGNoT3V0cHV0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJiYXRjaE91dHB1dCIpO3RoaXMuZm9ybWF0PWdldFN0cmluZ09wdGlvbihlLmZvcm1hdCxbIm5vbmUiLCJjb25jYXQiLCJ6aXAiLCJ6aXBDb21wcmVzcyJdKX19Y2xhc3MgQmVoYXZpb3JPdmVycmlkZSBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImJlaGF2aW9yT3ZlcnJpZGUiKX1bWW5dKCl7dGhpc1skbl09bmV3IE1hcCh0aGlzWyRuXS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcihlPT5lLmluY2x1ZGVzKCI6IikpLm1hcChlPT5lLnNwbGl0KCI6IiwyKSkpfX1jbGFzcyBDYWNoZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiY2FjaGUiLCEwKTt0aGlzLnRlbXBsYXRlQ2FjaGU9bnVsbH19Y2xhc3MgQ2hhbmdlIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImNoYW5nZSIpfX1jbGFzcyBDb21tb24gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImNvbW1vbiIsITApO3RoaXMuZGF0YT1udWxsO3RoaXMubG9jYWxlPW51bGw7dGhpcy5sb2NhbGVTZXQ9bnVsbDt0aGlzLm1lc3NhZ2luZz1udWxsO3RoaXMuc3VwcHJlc3NCYW5uZXI9bnVsbDt0aGlzLnRlbXBsYXRlPW51bGw7dGhpcy52YWxpZGF0aW9uTWVzc2FnaW5nPW51bGw7dGhpcy52ZXJzaW9uQ29udHJvbD1udWxsO3RoaXMubG9nPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgQ29tcHJlc3MgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImNvbXByZXNzIik7dGhpcy5zY29wZT1nZXRTdHJpbmdPcHRpb24oZS5zY29wZSxbImltYWdlT25seSIsImRvY3VtZW50Il0pfX1jbGFzcyBDb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlIil9fWNsYXNzIENvbXByZXNzT2JqZWN0U3RyZWFtIGV4dGVuZHMgT3B0aW9uMTB7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImNvbXByZXNzT2JqZWN0U3RyZWFtIil9fWNsYXNzIENvbXByZXNzaW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJjb21wcmVzc2lvbiIsITApO3RoaXMuY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlPW51bGw7dGhpcy5jb21wcmVzc09iamVjdFN0cmVhbT1udWxsO3RoaXMubGV2ZWw9bnVsbDt0aGlzLnR5cGU9bnVsbH19Y2xhc3MgQ29uZmlnIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJjb25maWciLCEwKTt0aGlzLmFjcm9iYXQ9bnVsbDt0aGlzLnByZXNlbnQ9bnVsbDt0aGlzLnRyYWNlPW51bGw7dGhpcy5hZ2VudD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIENvbmZvcm1hbmNlIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJjb25mb3JtYW5jZSIsWyJBIiwiQiJdKX19Y2xhc3MgQ29udGVudENvcHkgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiY29udGVudENvcHkiKX19Y2xhc3MgQ29waWVzIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiY29waWVzIiwxLGU9PmU+PTEpfX1jbGFzcyBDcmVhdG9yIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJjcmVhdG9yIil9fWNsYXNzIEN1cnJlbnRQYWdlIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiY3VycmVudFBhZ2UiLDAsZT0+ZT49MCl9fWNsYXNzIERhdGEgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImRhdGEiLCEwKTt0aGlzLmFkanVzdERhdGE9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9bnVsbDt0aGlzLmluY3JlbWVudGFsTG9hZD1udWxsO3RoaXMub3V0cHV0WFNMPW51bGw7dGhpcy5yYW5nZT1udWxsO3RoaXMucmVjb3JkPW51bGw7dGhpcy5zdGFydE5vZGU9bnVsbDt0aGlzLnVyaT1udWxsO3RoaXMud2luZG93PW51bGw7dGhpcy54c2w9bnVsbDt0aGlzLmV4Y2x1ZGVOUz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50cmFuc2Zvcm09bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBEZWJ1ZyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiZGVidWciLCEwKTt0aGlzLnVyaT1udWxsfX1jbGFzcyBEZWZhdWx0VHlwZWZhY2UgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJkZWZhdWx0VHlwZWZhY2UiKTt0aGlzLndyaXRpbmdTY3JpcHQ9Z2V0U3RyaW5nT3B0aW9uKGUud3JpdGluZ1NjcmlwdCxbIioiLCJBcmFiaWMiLCJDeXJpbGxpYyIsIkVhc3RFdXJvcGVhblJvbWFuIiwiR3JlZWsiLCJIZWJyZXciLCJKYXBhbmVzZSIsIktvcmVhbiIsIlJvbWFuIiwiU2ltcGxpZmllZENoaW5lc2UiLCJUaGFpIiwiVHJhZGl0aW9uYWxDaGluZXNlIiwiVmlldG5hbWVzZSJdKX19Y2xhc3MgRGVzdGluYXRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImRlc3RpbmF0aW9uIixbInBkZiIsInBjbCIsInBzIiwid2ViQ2xpZW50IiwienBsIl0pfX1jbGFzcyBEb2N1bWVudEFzc2VtYmx5IGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImRvY3VtZW50QXNzZW1ibHkiKX19Y2xhc3MgRHJpdmVyIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJkcml2ZXIiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiI7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIER1cGxleE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiZHVwbGV4T3B0aW9uIixbInNpbXBsZXgiLCJkdXBsZXhGbGlwTG9uZ0VkZ2UiLCJkdXBsZXhGbGlwU2hvcnRFZGdlIl0pfX1jbGFzcyBEeW5hbWljUmVuZGVyIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJkeW5hbWljUmVuZGVyIixbImZvcmJpZGRlbiIsInJlcXVpcmVkIl0pfX1jbGFzcyBFbWJlZCBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJlbWJlZCIpfX1jbGFzcyBjb25maWdfRW5jcnlwdCBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJlbmNyeXB0Iil9fWNsYXNzIGNvbmZpZ19FbmNyeXB0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJlbmNyeXB0aW9uIiwhMCk7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5lbmNyeXB0aW9uTGV2ZWw9bnVsbDt0aGlzLnBlcm1pc3Npb25zPW51bGx9fWNsYXNzIEVuY3J5cHRpb25MZXZlbCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiZW5jcnlwdGlvbkxldmVsIixbIjQwYml0IiwiMTI4Yml0Il0pfX1jbGFzcyBFbmZvcmNlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJlbmZvcmNlIil9fWNsYXNzIEVxdWF0ZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiZXF1YXRlIik7dGhpcy5mb3JjZT1nZXRJbnRlZ2VyKHtkYXRhOmUuZm9yY2UsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+MD09PWV9KTt0aGlzLmZyb209ZS5mcm9tfHwiIjt0aGlzLnRvPWUudG98fCIifX1jbGFzcyBFcXVhdGVSYW5nZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiZXF1YXRlUmFuZ2UiKTt0aGlzLmZyb209ZS5mcm9tfHwiIjt0aGlzLnRvPWUudG98fCIiO3RoaXMuX3VuaWNvZGVSYW5nZT1lLnVuaWNvZGVSYW5nZXx8IiJ9Z2V0IHVuaWNvZGVSYW5nZSgpe2NvbnN0IGU9W10sdD0vVVwrKFswLTlhLWZBLUZdKykvLGE9dGhpcy5fdW5pY29kZVJhbmdlO2ZvcihsZXQgciBvZiBhLnNwbGl0KCIsIikubWFwKGU9PmUudHJpbSgpKS5maWx0ZXIoZT0+ISFlKSl7cj1yLnNwbGl0KCItIiwyKS5tYXAoZT0+e2NvbnN0IGE9ZS5tYXRjaCh0KTtyZXR1cm4gYT9wYXJzZUludChhWzFdLDE2KTowfSk7MT09PXIubGVuZ3RoJiZyLnB1c2goclswXSk7ZS5wdXNoKHIpfXJldHVybiBzaGFkb3codGhpcywidW5pY29kZVJhbmdlIixlKX19Y2xhc3MgRXhjbHVkZSBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImV4Y2x1ZGUiKX1bWW5dKCl7dGhpc1skbl09dGhpc1skbl0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoZT0+ZSYmWyJjYWxjdWxhdGUiLCJjbG9zZSIsImVudGVyIiwiZXhpdCIsImluaXRpYWxpemUiLCJyZWFkeSIsInZhbGlkYXRlIl0uaW5jbHVkZXMoZSkpfX1jbGFzcyBFeGNsdWRlTlMgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImV4Y2x1ZGVOUyIpfX1jbGFzcyBGbGlwTGFiZWwgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImZsaXBMYWJlbCIsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pfX1jbGFzcyBjb25maWdfRm9udEluZm8gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImZvbnRJbmZvIiwhMCk7dGhpcy5lbWJlZD1udWxsO3RoaXMubWFwPW51bGw7dGhpcy5zdWJzZXRCZWxvdz1udWxsO3RoaXMuYWx3YXlzRW1iZWQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGVmYXVsdFR5cGVmYWNlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm5ldmVyRW1iZWQ9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBGb3JtRmllbGRGaWxsaW5nIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImZvcm1GaWVsZEZpbGxpbmciKX19Y2xhc3MgR3JvdXBQYXJlbnQgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImdyb3VwUGFyZW50Iil9fWNsYXNzIElmRW1wdHkgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImlmRW1wdHkiLFsiZGF0YVZhbHVlIiwiZGF0YUdyb3VwIiwiaWdub3JlIiwicmVtb3ZlIl0pfX1jbGFzcyBJbmNsdWRlWERQQ29udGVudCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiaW5jbHVkZVhEUENvbnRlbnQiKX19Y2xhc3MgSW5jcmVtZW50YWxMb2FkIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJpbmNyZW1lbnRhbExvYWQiLFsibm9uZSIsImZvcndhcmRPbmx5Il0pfX1jbGFzcyBJbmNyZW1lbnRhbE1lcmdlIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sImluY3JlbWVudGFsTWVyZ2UiKX19Y2xhc3MgSW50ZXJhY3RpdmUgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywiaW50ZXJhY3RpdmUiKX19Y2xhc3MgSm9nIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJqb2ciLFsidXNlUHJpbnRlclNldHRpbmciLCJub25lIiwicGFnZVNldCJdKX19Y2xhc3MgTGFiZWxQcmludGVyIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJsYWJlbFByaW50ZXIiLCEwKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbInpwbCIsImRwbCIsImlwbCIsInRjcGwiXSk7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZmxpcExhYmVsPW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIExheW91dCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywibGF5b3V0IixbInBhZ2luYXRlIiwicGFuZWwiXSl9fWNsYXNzIExldmVsIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywibGV2ZWwiLDAsZT0+ZT4wKX19Y2xhc3MgTGluZWFyaXplZCBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJsaW5lYXJpemVkIil9fWNsYXNzIExvY2FsZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywibG9jYWxlIil9fWNsYXNzIExvY2FsZVNldCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywibG9jYWxlU2V0Iil9fWNsYXNzIExvZyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywibG9nIiwhMCk7dGhpcy5tb2RlPW51bGw7dGhpcy50aHJlc2hvbGQ9bnVsbDt0aGlzLnRvPW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgTWFwRWxlbWVudCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywibWFwIiwhMCk7dGhpcy5lcXVhdGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXF1YXRlUmFuZ2U9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBNZWRpdW1JbmZvIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJtZWRpdW1JbmZvIiwhMCk7dGhpcy5tYXA9bnVsbH19Y2xhc3MgY29uZmlnX01lc3NhZ2UgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sIm1lc3NhZ2UiLCEwKTt0aGlzLm1zZ0lkPW51bGw7dGhpcy5zZXZlcml0eT1udWxsfX1jbGFzcyBNZXNzYWdpbmcgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sIm1lc3NhZ2luZyIsITApO3RoaXMubWVzc2FnZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE1vZGUgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sIm1vZGUiLFsiYXBwZW5kIiwib3ZlcndyaXRlIl0pfX1jbGFzcyBNb2RpZnlBbm5vdHMgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywibW9kaWZ5QW5ub3RzIil9fWNsYXNzIE1zZ0lkIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywibXNnSWQiLDEsZT0+ZT49MSl9fWNsYXNzIE5hbWVBdHRyIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJuYW1lQXR0ciIpfX1jbGFzcyBOZXZlckVtYmVkIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywibmV2ZXJFbWJlZCIpfX1jbGFzcyBOdW1iZXJPZkNvcGllcyBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sIm51bWJlck9mQ29waWVzIixudWxsLGU9PmU+PTImJmU8PTUpfX1jbGFzcyBPcGVuQWN0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJvcGVuQWN0aW9uIiwhMCk7dGhpcy5kZXN0aW5hdGlvbj1udWxsfX1jbGFzcyBPdXRwdXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sIm91dHB1dCIsITApO3RoaXMudG89bnVsbDt0aGlzLnR5cGU9bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBPdXRwdXRCaW4gZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sIm91dHB1dEJpbiIpfX1jbGFzcyBPdXRwdXRYU0wgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sIm91dHB1dFhTTCIsITApO3RoaXMudXJpPW51bGx9fWNsYXNzIE92ZXJwcmludCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywib3ZlcnByaW50IixbIm5vbmUiLCJib3RoIiwiZHJhdyIsImZpZWxkIl0pfX1jbGFzcyBQYWNrZXRzIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJwYWNrZXRzIil9W1luXSgpeyIqIiE9PXRoaXNbJG5dJiYodGhpc1skbl09dGhpc1skbl0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoZT0+WyJjb25maWciLCJkYXRhc2V0cyIsInRlbXBsYXRlIiwieGZkZiIsInhzbHQiXS5pbmNsdWRlcyhlKSkpfX1jbGFzcyBQYWdlT2Zmc2V0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJwYWdlT2Zmc2V0Iik7dGhpcy54PWdldEludGVnZXIoe2RhdGE6ZS54LGRlZmF1bHRWYWx1ZToidXNlWERDU2V0dGluZyIsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnk9Z2V0SW50ZWdlcih7ZGF0YTplLnksZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTplPT4hMH0pfX1jbGFzcyBQYWdlUmFuZ2UgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInBhZ2VSYW5nZSIpfVtZbl0oKXtjb25zdCBlPXRoaXNbJG5dLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKGU9PnBhcnNlSW50KGUsMTApKSx0PVtdO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErPTIpdC5wdXNoKGUuc2xpY2UoYSxhKzIpKTt0aGlzWyRuXT10fX1jbGFzcyBQYWdpbmF0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJwYWdpbmF0aW9uIixbInNpbXBsZXgiLCJkdXBsZXhTaG9ydEVkZ2UiLCJkdXBsZXhMb25nRWRnZSJdKX19Y2xhc3MgUGFnaW5hdGlvbk92ZXJyaWRlIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJwYWdpbmF0aW9uT3ZlcnJpZGUiLFsibm9uZSIsImZvcmNlRHVwbGV4IiwiZm9yY2VEdXBsZXhMb25nRWRnZSIsImZvcmNlRHVwbGV4U2hvcnRFZGdlIiwiZm9yY2VTaW1wbGV4Il0pfX1jbGFzcyBQYXJ0IGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywicGFydCIsMSxlPT4hMSl9fWNsYXNzIFBjbCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywicGNsIiwhMCk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLmpvZz1udWxsO3RoaXMubWVkaXVtSW5mbz1udWxsO3RoaXMub3V0cHV0QmluPW51bGw7dGhpcy5wYWdlT2Zmc2V0PW51bGw7dGhpcy5zdGFwbGU9bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBQZGYgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInBkZiIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYWRvYmVFeHRlbnNpb25MZXZlbD1udWxsO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmNvbXByZXNzaW9uPW51bGw7dGhpcy5jcmVhdG9yPW51bGw7dGhpcy5lbmNyeXB0aW9uPW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMuaW50ZXJhY3RpdmU9bnVsbDt0aGlzLmxpbmVhcml6ZWQ9bnVsbDt0aGlzLm9wZW5BY3Rpb249bnVsbDt0aGlzLnBkZmE9bnVsbDt0aGlzLnByb2R1Y2VyPW51bGw7dGhpcy5yZW5kZXJQb2xpY3k9bnVsbDt0aGlzLnNjcmlwdE1vZGVsPW51bGw7dGhpcy5zaWxlbnRQcmludD1udWxsO3RoaXMuc3VibWl0Rm9ybWF0PW51bGw7dGhpcy50YWdnZWQ9bnVsbDt0aGlzLnZlcnNpb249bnVsbDt0aGlzLnZpZXdlclByZWZlcmVuY2VzPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUGRmYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywicGRmYSIsITApO3RoaXMuYW1kPW51bGw7dGhpcy5jb25mb3JtYW5jZT1udWxsO3RoaXMuaW5jbHVkZVhEUENvbnRlbnQ9bnVsbDt0aGlzLnBhcnQ9bnVsbH19Y2xhc3MgUGVybWlzc2lvbnMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInBlcm1pc3Npb25zIiwhMCk7dGhpcy5hY2Nlc3NpYmxlQ29udGVudD1udWxsO3RoaXMuY2hhbmdlPW51bGw7dGhpcy5jb250ZW50Q29weT1udWxsO3RoaXMuZG9jdW1lbnRBc3NlbWJseT1udWxsO3RoaXMuZm9ybUZpZWxkRmlsbGluZz1udWxsO3RoaXMubW9kaWZ5QW5ub3RzPW51bGw7dGhpcy5wbGFpbnRleHRNZXRhZGF0YT1udWxsO3RoaXMucHJpbnQ9bnVsbDt0aGlzLnByaW50SGlnaFF1YWxpdHk9bnVsbH19Y2xhc3MgUGlja1RyYXlCeVBERlNpemUgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywicGlja1RyYXlCeVBERlNpemUiKX19Y2xhc3MgY29uZmlnX1BpY3R1cmUgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInBpY3R1cmUiKX19Y2xhc3MgUGxhaW50ZXh0TWV0YWRhdGEgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywicGxhaW50ZXh0TWV0YWRhdGEiKX19Y2xhc3MgUHJlc2VuY2UgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInByZXNlbmNlIixbInByZXNlcnZlIiwiZGlzc29sdmUiLCJkaXNzb2x2ZVN0cnVjdHVyZSIsImlnbm9yZSIsInJlbW92ZSJdKX19Y2xhc3MgUHJlc2VudCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywicHJlc2VudCIsITApO3RoaXMuYmVoYXZpb3JPdmVycmlkZT1udWxsO3RoaXMuY2FjaGU9bnVsbDt0aGlzLmNvbW1vbj1udWxsO3RoaXMuY29waWVzPW51bGw7dGhpcy5kZXN0aW5hdGlvbj1udWxsO3RoaXMuaW5jcmVtZW50YWxNZXJnZT1udWxsO3RoaXMubGF5b3V0PW51bGw7dGhpcy5vdXRwdXQ9bnVsbDt0aGlzLm92ZXJwcmludD1udWxsO3RoaXMucGFnaW5hdGlvbj1udWxsO3RoaXMucGFnaW5hdGlvbk92ZXJyaWRlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy54ZHA9bnVsbDt0aGlzLmRyaXZlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5sYWJlbFByaW50ZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucGNsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnBkZj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJtaXRVcmw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMud2ViQ2xpZW50PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnpwbD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFByaW50IGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInByaW50Iil9fWNsYXNzIFByaW50SGlnaFF1YWxpdHkgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywicHJpbnRIaWdoUXVhbGl0eSIpfX1jbGFzcyBQcmludFNjYWxpbmcgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInByaW50U2NhbGluZyIsWyJhcHBkZWZhdWx0Iiwibm9TY2FsaW5nIl0pfX1jbGFzcyBQcmludGVyTmFtZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywicHJpbnRlck5hbWUiKX19Y2xhc3MgUHJvZHVjZXIgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInByb2R1Y2VyIil9fWNsYXNzIFBzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJwcyIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy5qb2c9bnVsbDt0aGlzLm1lZGl1bUluZm89bnVsbDt0aGlzLm91dHB1dEJpbj1udWxsO3RoaXMuc3RhcGxlPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUmFuZ2UgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJyYW5nZSIpfVtZbl0oKXt0aGlzWyRuXT10aGlzWyRuXS5zcGxpdCgiLCIsMikubWFwKGU9PmUuc3BsaXQoIi0iKS5tYXAoZT0+cGFyc2VJbnQoZS50cmltKCksMTApKSkuZmlsdGVyKGU9PmUuZXZlcnkoZT0+IWlzTmFOKGUpKSkubWFwKGU9PnsxPT09ZS5sZW5ndGgmJmUucHVzaChlWzBdKTtyZXR1cm4gZX0pfX1jbGFzcyBSZWNvcmQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJyZWNvcmQiKX1bWW5dKCl7dGhpc1skbl09dGhpc1skbl0udHJpbSgpO2NvbnN0IGU9cGFyc2VJbnQodGhpc1skbl0sMTApOyFpc05hTihlKSYmZT49MCYmKHRoaXNbJG5dPWUpfX1jbGFzcyBSZWxldmFudCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInJlbGV2YW50Iil9W1luXSgpe3RoaXNbJG5dPXRoaXNbJG5dLnRyaW0oKS5zcGxpdCgvXHMrLyl9fWNsYXNzIFJlbmFtZSBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInJlbmFtZSIpfVtZbl0oKXt0aGlzWyRuXT10aGlzWyRuXS50cmltKCk7KHRoaXNbJG5dLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbJG5dKSkmJndhcm4oIlhGQSAtIFJlbmFtZTogaW52YWxpZCBYRkEgbmFtZSIpfX1jbGFzcyBSZW5kZXJQb2xpY3kgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInJlbmRlclBvbGljeSIsWyJzZXJ2ZXIiLCJjbGllbnQiXSl9fWNsYXNzIFJ1blNjcmlwdHMgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInJ1blNjcmlwdHMiLFsiYm90aCIsImNsaWVudCIsIm5vbmUiLCJzZXJ2ZXIiXSl9fWNsYXNzIGNvbmZpZ19TY3JpcHQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInNjcmlwdCIsITApO3RoaXMuY3VycmVudFBhZ2U9bnVsbDt0aGlzLmV4Y2x1ZGU9bnVsbDt0aGlzLnJ1blNjcmlwdHM9bnVsbH19Y2xhc3MgU2NyaXB0TW9kZWwgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInNjcmlwdE1vZGVsIixbIlhGQSIsIm5vbmUiXSl9fWNsYXNzIFNldmVyaXR5IGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJzZXZlcml0eSIsWyJpZ25vcmUiLCJlcnJvciIsImluZm9ybWF0aW9uIiwidHJhY2UiLCJ3YXJuaW5nIl0pfX1jbGFzcyBTaWxlbnRQcmludCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywic2lsZW50UHJpbnQiLCEwKTt0aGlzLmFkZFNpbGVudFByaW50PW51bGw7dGhpcy5wcmludGVyTmFtZT1udWxsfX1jbGFzcyBTdGFwbGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInN0YXBsZSIpO3RoaXMubW9kZT1nZXRTdHJpbmdPcHRpb24oZS5tb2RlLFsidXNlUHJpbnRlclNldHRpbmciLCJvbiIsIm9mZiJdKX19Y2xhc3MgU3RhcnROb2RlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJzdGFydE5vZGUiKX19Y2xhc3MgU3RhcnRQYWdlIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywic3RhcnRQYWdlIiwwLGU9PiEwKX19Y2xhc3MgU3VibWl0Rm9ybWF0IGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJzdWJtaXRGb3JtYXQiLFsiaHRtbCIsImRlbGVnYXRlIiwiZmRmIiwieG1sIiwicGRmIl0pfX1jbGFzcyBTdWJtaXRVcmwgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInN1Ym1pdFVybCIpfX1jbGFzcyBTdWJzZXRCZWxvdyBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInN1YnNldEJlbG93IiwxMDAsZT0+ZT49MCYmZTw9MTAwKX19Y2xhc3MgU3VwcHJlc3NCYW5uZXIgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywic3VwcHJlc3NCYW5uZXIiKX19Y2xhc3MgVGFnZ2VkIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInRhZ2dlZCIpfX1jbGFzcyBjb25maWdfVGVtcGxhdGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInRlbXBsYXRlIiwhMCk7dGhpcy5iYXNlPW51bGw7dGhpcy5yZWxldmFudD1udWxsO3RoaXMuc3RhcnRQYWdlPW51bGw7dGhpcy51cmk9bnVsbDt0aGlzLnhzbD1udWxsfX1jbGFzcyBUaHJlc2hvbGQgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInRocmVzaG9sZCIsWyJ0cmFjZSIsImVycm9yIiwiaW5mb3JtYXRpb24iLCJ3YXJuaW5nIl0pfX1jbGFzcyBUbyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywidG8iLFsibnVsbCIsIm1lbW9yeSIsInN0ZGVyciIsInN0ZG91dCIsInN5c3RlbSIsInVyaSJdKX19Y2xhc3MgVGVtcGxhdGVDYWNoZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywidGVtcGxhdGVDYWNoZSIpO3RoaXMubWF4RW50cmllcz1nZXRJbnRlZ2VyKHtkYXRhOmUubWF4RW50cmllcyxkZWZhdWx0VmFsdWU6NSx2YWxpZGF0ZTplPT5lPj0wfSl9fWNsYXNzIFRyYWNlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJ0cmFjZSIsITApO3RoaXMuYXJlYT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFRyYW5zZm9ybSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywidHJhbnNmb3JtIiwhMCk7dGhpcy5ncm91cFBhcmVudD1udWxsO3RoaXMuaWZFbXB0eT1udWxsO3RoaXMubmFtZUF0dHI9bnVsbDt0aGlzLnBpY3R1cmU9bnVsbDt0aGlzLnByZXNlbmNlPW51bGw7dGhpcy5yZW5hbWU9bnVsbDt0aGlzLndoaXRlc3BhY2U9bnVsbH19Y2xhc3MgVHlwZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywidHlwZSIsWyJub25lIiwiYXNjaWk4NSIsImFzY2lpSGV4IiwiY2NpdHRmYXgiLCJmbGF0ZSIsImx6dyIsInJ1bkxlbmd0aCIsIm5hdGl2ZSIsInhkcCIsIm1lcmdlZFhEUCJdKX19Y2xhc3MgVXJpIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJ1cmkiKX19Y2xhc3MgY29uZmlnX1ZhbGlkYXRlIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJ2YWxpZGF0ZSIsWyJwcmVTdWJtaXQiLCJwcmVQcmludCIsInByZUV4ZWN1dGUiLCJwcmVTYXZlIl0pfX1jbGFzcyBWYWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcyBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9W1luXSgpe3RoaXNbJG5dPXRoaXNbJG5dLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKGU9PlsiZG9jUmVhZHkiLCJwb3N0U2lnbiJdLmluY2x1ZGVzKGUpKX19Y2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2luZyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywidmFsaWRhdGlvbk1lc3NhZ2luZyIsWyJhbGxNZXNzYWdlc0luZGl2aWR1YWxseSIsImFsbE1lc3NhZ2VzVG9nZXRoZXIiLCJmaXJzdE1lc3NhZ2VPbmx5Iiwibm9NZXNzYWdlcyJdKX19Y2xhc3MgVmVyc2lvbiBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywidmVyc2lvbiIsWyIxLjciLCIxLjYiLCIxLjUiLCIxLjQiLCIxLjMiLCIxLjIiXSl9fWNsYXNzIFZlcnNpb25Db250cm9sIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJWZXJzaW9uQ29udHJvbCIpO3RoaXMub3V0cHV0QmVsb3c9Z2V0U3RyaW5nT3B0aW9uKGUub3V0cHV0QmVsb3csWyJ3YXJuIiwiZXJyb3IiLCJ1cGRhdGUiXSk7dGhpcy5zb3VyY2VBYm92ZT1nZXRTdHJpbmdPcHRpb24oZS5zb3VyY2VBYm92ZSxbIndhcm4iLCJlcnJvciJdKTt0aGlzLnNvdXJjZUJlbG93PWdldFN0cmluZ09wdGlvbihlLnNvdXJjZUJlbG93LFsidXBkYXRlIiwibWFpbnRhaW4iXSl9fWNsYXNzIFZpZXdlclByZWZlcmVuY2VzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApO3RoaXMuQURCRV9KU0NvbnNvbGU9bnVsbDt0aGlzLkFEQkVfSlNEZWJ1Z2dlcj1udWxsO3RoaXMuYWRkVmlld2VyUHJlZmVyZW5jZXM9bnVsbDt0aGlzLmR1cGxleE9wdGlvbj1udWxsO3RoaXMuZW5mb3JjZT1udWxsO3RoaXMubnVtYmVyT2ZDb3BpZXM9bnVsbDt0aGlzLnBhZ2VSYW5nZT1udWxsO3RoaXMucGlja1RyYXlCeVBERlNpemU9bnVsbDt0aGlzLnByaW50U2NhbGluZz1udWxsfX1jbGFzcyBXZWJDbGllbnQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sIndlYkNsaWVudCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgV2hpdGVzcGFjZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywid2hpdGVzcGFjZSIsWyJwcmVzZXJ2ZSIsImx0cmltIiwibm9ybWFsaXplIiwicnRyaW0iLCJ0cmltIl0pfX1jbGFzcyBXaW5kb3cgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGpvLCJ3aW5kb3ciKX1bWW5dKCl7Y29uc3QgZT10aGlzWyRuXS5zcGxpdCgiLCIsMikubWFwKGU9PnBhcnNlSW50KGUudHJpbSgpLDEwKSk7aWYoZS5zb21lKGU9PmlzTmFOKGUpKSl0aGlzWyRuXT1bMCwwXTtlbHNlezE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pO3RoaXNbJG5dPWV9fX1jbGFzcyBYZGMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoam8sInhkYyIsITApO3RoaXMudXJpPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnhzbD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFhkcCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywieGRwIiwhMCk7dGhpcy5wYWNrZXRzPW51bGx9fWNsYXNzIFhzbCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywieHNsIiwhMCk7dGhpcy5kZWJ1Zz1udWxsO3RoaXMudXJpPW51bGx9fWNsYXNzIFpwbCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihqbywienBsIiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZsaXBMYWJlbD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBDb25maWdOYW1lc3BhY2V7c3RhdGljW1FzXShlLHQpe2lmKENvbmZpZ05hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQ29uZmlnTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBhY3JvYmF0KGUpe3JldHVybiBuZXcgQWNyb2JhdChlKX1zdGF0aWMgYWNyb2JhdDcoZSl7cmV0dXJuIG5ldyBBY3JvYmF0NyhlKX1zdGF0aWMgQURCRV9KU0NvbnNvbGUoZSl7cmV0dXJuIG5ldyBBREJFX0pTQ29uc29sZShlKX1zdGF0aWMgQURCRV9KU0RlYnVnZ2VyKGUpe3JldHVybiBuZXcgQURCRV9KU0RlYnVnZ2VyKGUpfXN0YXRpYyBhZGRTaWxlbnRQcmludChlKXtyZXR1cm4gbmV3IEFkZFNpbGVudFByaW50KGUpfXN0YXRpYyBhZGRWaWV3ZXJQcmVmZXJlbmNlcyhlKXtyZXR1cm4gbmV3IEFkZFZpZXdlclByZWZlcmVuY2VzKGUpfXN0YXRpYyBhZGp1c3REYXRhKGUpe3JldHVybiBuZXcgQWRqdXN0RGF0YShlKX1zdGF0aWMgYWRvYmVFeHRlbnNpb25MZXZlbChlKXtyZXR1cm4gbmV3IEFkb2JlRXh0ZW5zaW9uTGV2ZWwoZSl9c3RhdGljIGFnZW50KGUpe3JldHVybiBuZXcgQWdlbnQoZSl9c3RhdGljIGFsd2F5c0VtYmVkKGUpe3JldHVybiBuZXcgQWx3YXlzRW1iZWQoZSl9c3RhdGljIGFtZChlKXtyZXR1cm4gbmV3IEFtZChlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IGNvbmZpZ19BcmVhKGUpfXN0YXRpYyBhdHRyaWJ1dGVzKGUpe3JldHVybiBuZXcgQXR0cmlidXRlcyhlKX1zdGF0aWMgYXV0b1NhdmUoZSl7cmV0dXJuIG5ldyBBdXRvU2F2ZShlKX1zdGF0aWMgYmFzZShlKXtyZXR1cm4gbmV3IEJhc2UoZSl9c3RhdGljIGJhdGNoT3V0cHV0KGUpe3JldHVybiBuZXcgQmF0Y2hPdXRwdXQoZSl9c3RhdGljIGJlaGF2aW9yT3ZlcnJpZGUoZSl7cmV0dXJuIG5ldyBCZWhhdmlvck92ZXJyaWRlKGUpfXN0YXRpYyBjYWNoZShlKXtyZXR1cm4gbmV3IENhY2hlKGUpfXN0YXRpYyBjaGFuZ2UoZSl7cmV0dXJuIG5ldyBDaGFuZ2UoZSl9c3RhdGljIGNvbW1vbihlKXtyZXR1cm4gbmV3IENvbW1vbihlKX1zdGF0aWMgY29tcHJlc3MoZSl7cmV0dXJuIG5ldyBDb21wcmVzcyhlKX1zdGF0aWMgY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlKGUpe3JldHVybiBuZXcgQ29tcHJlc3NMb2dpY2FsU3RydWN0dXJlKGUpfXN0YXRpYyBjb21wcmVzc09iamVjdFN0cmVhbShlKXtyZXR1cm4gbmV3IENvbXByZXNzT2JqZWN0U3RyZWFtKGUpfXN0YXRpYyBjb21wcmVzc2lvbihlKXtyZXR1cm4gbmV3IENvbXByZXNzaW9uKGUpfXN0YXRpYyBjb25maWcoZSl7cmV0dXJuIG5ldyBDb25maWcoZSl9c3RhdGljIGNvbmZvcm1hbmNlKGUpe3JldHVybiBuZXcgQ29uZm9ybWFuY2UoZSl9c3RhdGljIGNvbnRlbnRDb3B5KGUpe3JldHVybiBuZXcgQ29udGVudENvcHkoZSl9c3RhdGljIGNvcGllcyhlKXtyZXR1cm4gbmV3IENvcGllcyhlKX1zdGF0aWMgY3JlYXRvcihlKXtyZXR1cm4gbmV3IENyZWF0b3IoZSl9c3RhdGljIGN1cnJlbnRQYWdlKGUpe3JldHVybiBuZXcgQ3VycmVudFBhZ2UoZSl9c3RhdGljIGRhdGEoZSl7cmV0dXJuIG5ldyBEYXRhKGUpfXN0YXRpYyBkZWJ1ZyhlKXtyZXR1cm4gbmV3IERlYnVnKGUpfXN0YXRpYyBkZWZhdWx0VHlwZWZhY2UoZSl7cmV0dXJuIG5ldyBEZWZhdWx0VHlwZWZhY2UoZSl9c3RhdGljIGRlc3RpbmF0aW9uKGUpe3JldHVybiBuZXcgRGVzdGluYXRpb24oZSl9c3RhdGljIGRvY3VtZW50QXNzZW1ibHkoZSl7cmV0dXJuIG5ldyBEb2N1bWVudEFzc2VtYmx5KGUpfXN0YXRpYyBkcml2ZXIoZSl7cmV0dXJuIG5ldyBEcml2ZXIoZSl9c3RhdGljIGR1cGxleE9wdGlvbihlKXtyZXR1cm4gbmV3IER1cGxleE9wdGlvbihlKX1zdGF0aWMgZHluYW1pY1JlbmRlcihlKXtyZXR1cm4gbmV3IER5bmFtaWNSZW5kZXIoZSl9c3RhdGljIGVtYmVkKGUpe3JldHVybiBuZXcgRW1iZWQoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBjb25maWdfRW5jcnlwdChlKX1zdGF0aWMgZW5jcnlwdGlvbihlKXtyZXR1cm4gbmV3IGNvbmZpZ19FbmNyeXB0aW9uKGUpfXN0YXRpYyBlbmNyeXB0aW9uTGV2ZWwoZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uTGV2ZWwoZSl9c3RhdGljIGVuZm9yY2UoZSl7cmV0dXJuIG5ldyBFbmZvcmNlKGUpfXN0YXRpYyBlcXVhdGUoZSl7cmV0dXJuIG5ldyBFcXVhdGUoZSl9c3RhdGljIGVxdWF0ZVJhbmdlKGUpe3JldHVybiBuZXcgRXF1YXRlUmFuZ2UoZSl9c3RhdGljIGV4Y2x1ZGUoZSl7cmV0dXJuIG5ldyBFeGNsdWRlKGUpfXN0YXRpYyBleGNsdWRlTlMoZSl7cmV0dXJuIG5ldyBFeGNsdWRlTlMoZSl9c3RhdGljIGZsaXBMYWJlbChlKXtyZXR1cm4gbmV3IEZsaXBMYWJlbChlKX1zdGF0aWMgZm9udEluZm8oZSl7cmV0dXJuIG5ldyBjb25maWdfRm9udEluZm8oZSl9c3RhdGljIGZvcm1GaWVsZEZpbGxpbmcoZSl7cmV0dXJuIG5ldyBGb3JtRmllbGRGaWxsaW5nKGUpfXN0YXRpYyBncm91cFBhcmVudChlKXtyZXR1cm4gbmV3IEdyb3VwUGFyZW50KGUpfXN0YXRpYyBpZkVtcHR5KGUpe3JldHVybiBuZXcgSWZFbXB0eShlKX1zdGF0aWMgaW5jbHVkZVhEUENvbnRlbnQoZSl7cmV0dXJuIG5ldyBJbmNsdWRlWERQQ29udGVudChlKX1zdGF0aWMgaW5jcmVtZW50YWxMb2FkKGUpe3JldHVybiBuZXcgSW5jcmVtZW50YWxMb2FkKGUpfXN0YXRpYyBpbmNyZW1lbnRhbE1lcmdlKGUpe3JldHVybiBuZXcgSW5jcmVtZW50YWxNZXJnZShlKX1zdGF0aWMgaW50ZXJhY3RpdmUoZSl7cmV0dXJuIG5ldyBJbnRlcmFjdGl2ZShlKX1zdGF0aWMgam9nKGUpe3JldHVybiBuZXcgSm9nKGUpfXN0YXRpYyBsYWJlbFByaW50ZXIoZSl7cmV0dXJuIG5ldyBMYWJlbFByaW50ZXIoZSl9c3RhdGljIGxheW91dChlKXtyZXR1cm4gbmV3IExheW91dChlKX1zdGF0aWMgbGV2ZWwoZSl7cmV0dXJuIG5ldyBMZXZlbChlKX1zdGF0aWMgbGluZWFyaXplZChlKXtyZXR1cm4gbmV3IExpbmVhcml6ZWQoZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IExvY2FsZShlKX1zdGF0aWMgbG9jYWxlU2V0KGUpe3JldHVybiBuZXcgTG9jYWxlU2V0KGUpfXN0YXRpYyBsb2coZSl7cmV0dXJuIG5ldyBMb2coZSl9c3RhdGljIG1hcChlKXtyZXR1cm4gbmV3IE1hcEVsZW1lbnQoZSl9c3RhdGljIG1lZGl1bUluZm8oZSl7cmV0dXJuIG5ldyBNZWRpdW1JbmZvKGUpfXN0YXRpYyBtZXNzYWdlKGUpe3JldHVybiBuZXcgY29uZmlnX01lc3NhZ2UoZSl9c3RhdGljIG1lc3NhZ2luZyhlKXtyZXR1cm4gbmV3IE1lc3NhZ2luZyhlKX1zdGF0aWMgbW9kZShlKXtyZXR1cm4gbmV3IE1vZGUoZSl9c3RhdGljIG1vZGlmeUFubm90cyhlKXtyZXR1cm4gbmV3IE1vZGlmeUFubm90cyhlKX1zdGF0aWMgbXNnSWQoZSl7cmV0dXJuIG5ldyBNc2dJZChlKX1zdGF0aWMgbmFtZUF0dHIoZSl7cmV0dXJuIG5ldyBOYW1lQXR0cihlKX1zdGF0aWMgbmV2ZXJFbWJlZChlKXtyZXR1cm4gbmV3IE5ldmVyRW1iZWQoZSl9c3RhdGljIG51bWJlck9mQ29waWVzKGUpe3JldHVybiBuZXcgTnVtYmVyT2ZDb3BpZXMoZSl9c3RhdGljIG9wZW5BY3Rpb24oZSl7cmV0dXJuIG5ldyBPcGVuQWN0aW9uKGUpfXN0YXRpYyBvdXRwdXQoZSl7cmV0dXJuIG5ldyBPdXRwdXQoZSl9c3RhdGljIG91dHB1dEJpbihlKXtyZXR1cm4gbmV3IE91dHB1dEJpbihlKX1zdGF0aWMgb3V0cHV0WFNMKGUpe3JldHVybiBuZXcgT3V0cHV0WFNMKGUpfXN0YXRpYyBvdmVycHJpbnQoZSl7cmV0dXJuIG5ldyBPdmVycHJpbnQoZSl9c3RhdGljIHBhY2tldHMoZSl7cmV0dXJuIG5ldyBQYWNrZXRzKGUpfXN0YXRpYyBwYWdlT2Zmc2V0KGUpe3JldHVybiBuZXcgUGFnZU9mZnNldChlKX1zdGF0aWMgcGFnZVJhbmdlKGUpe3JldHVybiBuZXcgUGFnZVJhbmdlKGUpfXN0YXRpYyBwYWdpbmF0aW9uKGUpe3JldHVybiBuZXcgUGFnaW5hdGlvbihlKX1zdGF0aWMgcGFnaW5hdGlvbk92ZXJyaWRlKGUpe3JldHVybiBuZXcgUGFnaW5hdGlvbk92ZXJyaWRlKGUpfXN0YXRpYyBwYXJ0KGUpe3JldHVybiBuZXcgUGFydChlKX1zdGF0aWMgcGNsKGUpe3JldHVybiBuZXcgUGNsKGUpfXN0YXRpYyBwZGYoZSl7cmV0dXJuIG5ldyBQZGYoZSl9c3RhdGljIHBkZmEoZSl7cmV0dXJuIG5ldyBQZGZhKGUpfXN0YXRpYyBwZXJtaXNzaW9ucyhlKXtyZXR1cm4gbmV3IFBlcm1pc3Npb25zKGUpfXN0YXRpYyBwaWNrVHJheUJ5UERGU2l6ZShlKXtyZXR1cm4gbmV3IFBpY2tUcmF5QnlQREZTaXplKGUpfXN0YXRpYyBwaWN0dXJlKGUpe3JldHVybiBuZXcgY29uZmlnX1BpY3R1cmUoZSl9c3RhdGljIHBsYWludGV4dE1ldGFkYXRhKGUpe3JldHVybiBuZXcgUGxhaW50ZXh0TWV0YWRhdGEoZSl9c3RhdGljIHByZXNlbmNlKGUpe3JldHVybiBuZXcgUHJlc2VuY2UoZSl9c3RhdGljIHByZXNlbnQoZSl7cmV0dXJuIG5ldyBQcmVzZW50KGUpfXN0YXRpYyBwcmludChlKXtyZXR1cm4gbmV3IFByaW50KGUpfXN0YXRpYyBwcmludEhpZ2hRdWFsaXR5KGUpe3JldHVybiBuZXcgUHJpbnRIaWdoUXVhbGl0eShlKX1zdGF0aWMgcHJpbnRTY2FsaW5nKGUpe3JldHVybiBuZXcgUHJpbnRTY2FsaW5nKGUpfXN0YXRpYyBwcmludGVyTmFtZShlKXtyZXR1cm4gbmV3IFByaW50ZXJOYW1lKGUpfXN0YXRpYyBwcm9kdWNlcihlKXtyZXR1cm4gbmV3IFByb2R1Y2VyKGUpfXN0YXRpYyBwcyhlKXtyZXR1cm4gbmV3IFBzKGUpfXN0YXRpYyByYW5nZShlKXtyZXR1cm4gbmV3IFJhbmdlKGUpfXN0YXRpYyByZWNvcmQoZSl7cmV0dXJuIG5ldyBSZWNvcmQoZSl9c3RhdGljIHJlbGV2YW50KGUpe3JldHVybiBuZXcgUmVsZXZhbnQoZSl9c3RhdGljIHJlbmFtZShlKXtyZXR1cm4gbmV3IFJlbmFtZShlKX1zdGF0aWMgcmVuZGVyUG9saWN5KGUpe3JldHVybiBuZXcgUmVuZGVyUG9saWN5KGUpfXN0YXRpYyBydW5TY3JpcHRzKGUpe3JldHVybiBuZXcgUnVuU2NyaXB0cyhlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgY29uZmlnX1NjcmlwdChlKX1zdGF0aWMgc2NyaXB0TW9kZWwoZSl7cmV0dXJuIG5ldyBTY3JpcHRNb2RlbChlKX1zdGF0aWMgc2V2ZXJpdHkoZSl7cmV0dXJuIG5ldyBTZXZlcml0eShlKX1zdGF0aWMgc2lsZW50UHJpbnQoZSl7cmV0dXJuIG5ldyBTaWxlbnRQcmludChlKX1zdGF0aWMgc3RhcGxlKGUpe3JldHVybiBuZXcgU3RhcGxlKGUpfXN0YXRpYyBzdGFydE5vZGUoZSl7cmV0dXJuIG5ldyBTdGFydE5vZGUoZSl9c3RhdGljIHN0YXJ0UGFnZShlKXtyZXR1cm4gbmV3IFN0YXJ0UGFnZShlKX1zdGF0aWMgc3VibWl0Rm9ybWF0KGUpe3JldHVybiBuZXcgU3VibWl0Rm9ybWF0KGUpfXN0YXRpYyBzdWJtaXRVcmwoZSl7cmV0dXJuIG5ldyBTdWJtaXRVcmwoZSl9c3RhdGljIHN1YnNldEJlbG93KGUpe3JldHVybiBuZXcgU3Vic2V0QmVsb3coZSl9c3RhdGljIHN1cHByZXNzQmFubmVyKGUpe3JldHVybiBuZXcgU3VwcHJlc3NCYW5uZXIoZSl9c3RhdGljIHRhZ2dlZChlKXtyZXR1cm4gbmV3IFRhZ2dlZChlKX1zdGF0aWMgdGVtcGxhdGUoZSl7cmV0dXJuIG5ldyBjb25maWdfVGVtcGxhdGUoZSl9c3RhdGljIHRlbXBsYXRlQ2FjaGUoZSl7cmV0dXJuIG5ldyBUZW1wbGF0ZUNhY2hlKGUpfXN0YXRpYyB0aHJlc2hvbGQoZSl7cmV0dXJuIG5ldyBUaHJlc2hvbGQoZSl9c3RhdGljIHRvKGUpe3JldHVybiBuZXcgVG8oZSl9c3RhdGljIHRyYWNlKGUpe3JldHVybiBuZXcgVHJhY2UoZSl9c3RhdGljIHRyYW5zZm9ybShlKXtyZXR1cm4gbmV3IFRyYW5zZm9ybShlKX1zdGF0aWMgdHlwZShlKXtyZXR1cm4gbmV3IFR5cGUoZSl9c3RhdGljIHVyaShlKXtyZXR1cm4gbmV3IFVyaShlKX1zdGF0aWMgdmFsaWRhdGUoZSl7cmV0dXJuIG5ldyBjb25maWdfVmFsaWRhdGUoZSl9c3RhdGljIHZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGUpe3JldHVybiBuZXcgVmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMoZSl9c3RhdGljIHZhbGlkYXRpb25NZXNzYWdpbmcoZSl7cmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnaW5nKGUpfXN0YXRpYyB2ZXJzaW9uKGUpe3JldHVybiBuZXcgVmVyc2lvbihlKX1zdGF0aWMgdmVyc2lvbkNvbnRyb2woZSl7cmV0dXJuIG5ldyBWZXJzaW9uQ29udHJvbChlKX1zdGF0aWMgdmlld2VyUHJlZmVyZW5jZXMoZSl7cmV0dXJuIG5ldyBWaWV3ZXJQcmVmZXJlbmNlcyhlKX1zdGF0aWMgd2ViQ2xpZW50KGUpe3JldHVybiBuZXcgV2ViQ2xpZW50KGUpfXN0YXRpYyB3aGl0ZXNwYWNlKGUpe3JldHVybiBuZXcgV2hpdGVzcGFjZShlKX1zdGF0aWMgd2luZG93KGUpe3JldHVybiBuZXcgV2luZG93KGUpfXN0YXRpYyB4ZGMoZSl7cmV0dXJuIG5ldyBYZGMoZSl9c3RhdGljIHhkcChlKXtyZXR1cm4gbmV3IFhkcChlKX1zdGF0aWMgeHNsKGUpe3JldHVybiBuZXcgWHNsKGUpfXN0YXRpYyB6cGwoZSl7cmV0dXJuIG5ldyBacGwoZSl9fWNvbnN0IFhvPWVvLmNvbm5lY3Rpb25TZXQuaWQ7Y2xhc3MgQ29ubmVjdGlvblNldCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihYbywiY29ubmVjdGlvblNldCIsITApO3RoaXMud3NkbENvbm5lY3Rpb249bmV3IFhGQU9iamVjdEFycmF5O3RoaXMueG1sQ29ubmVjdGlvbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy54c2RDb25uZWN0aW9uPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRWZmZWN0aXZlSW5wdXRQb2xpY3kgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWG8sImVmZmVjdGl2ZUlucHV0UG9saWN5Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEVmZmVjdGl2ZU91dHB1dFBvbGljeSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihYbywiZWZmZWN0aXZlT3V0cHV0UG9saWN5Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE9wZXJhdGlvbiBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihYbywib3BlcmF0aW9uIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmlucHV0PWUuaW5wdXR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMub3V0cHV0PWUub3V0cHV0fHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFJvb3RFbGVtZW50IGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFhvLCJyb290RWxlbWVudCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTb2FwQWN0aW9uIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFhvLCJzb2FwQWN0aW9uIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNvYXBBZGRyZXNzIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFhvLCJzb2FwQWRkcmVzcyIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBjb25uZWN0aW9uX3NldF9VcmkgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWG8sInVyaSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBXc2RsQWRkcmVzcyBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihYbywid3NkbEFkZHJlc3MiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgV3NkbENvbm5lY3Rpb24gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWG8sIndzZGxDb25uZWN0aW9uIiwhMCk7dGhpcy5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuZWZmZWN0aXZlSW5wdXRQb2xpY3k9bnVsbDt0aGlzLmVmZmVjdGl2ZU91dHB1dFBvbGljeT1udWxsO3RoaXMub3BlcmF0aW9uPW51bGw7dGhpcy5zb2FwQWN0aW9uPW51bGw7dGhpcy5zb2FwQWRkcmVzcz1udWxsO3RoaXMud3NkbEFkZHJlc3M9bnVsbH19Y2xhc3MgWG1sQ29ubmVjdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihYbywieG1sQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVyaT1udWxsfX1jbGFzcyBYc2RDb25uZWN0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFhvLCJ4c2RDb25uZWN0aW9uIiwhMCk7dGhpcy5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucm9vdEVsZW1lbnQ9bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBDb25uZWN0aW9uU2V0TmFtZXNwYWNle3N0YXRpY1tRc10oZSx0KXtpZihDb25uZWN0aW9uU2V0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBDb25uZWN0aW9uU2V0TmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBjb25uZWN0aW9uU2V0KGUpe3JldHVybiBuZXcgQ29ubmVjdGlvblNldChlKX1zdGF0aWMgZWZmZWN0aXZlSW5wdXRQb2xpY3koZSl7cmV0dXJuIG5ldyBFZmZlY3RpdmVJbnB1dFBvbGljeShlKX1zdGF0aWMgZWZmZWN0aXZlT3V0cHV0UG9saWN5KGUpe3JldHVybiBuZXcgRWZmZWN0aXZlT3V0cHV0UG9saWN5KGUpfXN0YXRpYyBvcGVyYXRpb24oZSl7cmV0dXJuIG5ldyBPcGVyYXRpb24oZSl9c3RhdGljIHJvb3RFbGVtZW50KGUpe3JldHVybiBuZXcgUm9vdEVsZW1lbnQoZSl9c3RhdGljIHNvYXBBY3Rpb24oZSl7cmV0dXJuIG5ldyBTb2FwQWN0aW9uKGUpfXN0YXRpYyBzb2FwQWRkcmVzcyhlKXtyZXR1cm4gbmV3IFNvYXBBZGRyZXNzKGUpfXN0YXRpYyB1cmkoZSl7cmV0dXJuIG5ldyBjb25uZWN0aW9uX3NldF9VcmkoZSl9c3RhdGljIHdzZGxBZGRyZXNzKGUpe3JldHVybiBuZXcgV3NkbEFkZHJlc3MoZSl9c3RhdGljIHdzZGxDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgV3NkbENvbm5lY3Rpb24oZSl9c3RhdGljIHhtbENvbm5lY3Rpb24oZSl7cmV0dXJuIG5ldyBYbWxDb25uZWN0aW9uKGUpfXN0YXRpYyB4c2RDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgWHNkQ29ubmVjdGlvbihlKX19Y29uc3QgcW89ZW8uZGF0YXNldHMuaWQ7Y2xhc3MgZGF0YXNldHNfRGF0YSBleHRlbmRzIFhtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbywiZGF0YSIsZSl9W2tzXSgpe3JldHVybiEwfX1jbGFzcyBEYXRhc2V0cyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbywiZGF0YXNldHMiLCEwKTt0aGlzLmRhdGE9bnVsbDt0aGlzLlNpZ25hdHVyZT1udWxsfVtCc10oZSl7Y29uc3QgdD1lW01zXTsoImRhdGEiPT09dCYmZVtPc109PT1xb3x8IlNpZ25hdHVyZSI9PT10JiZlW09zXT09PWVvLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpO3RoaXNbam5dKGUpfX1jbGFzcyBEYXRhc2V0c05hbWVzcGFjZXtzdGF0aWNbUXNdKGUsdCl7aWYoRGF0YXNldHNOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIERhdGFzZXRzTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBkYXRhc2V0cyhlKXtyZXR1cm4gbmV3IERhdGFzZXRzKGUpfXN0YXRpYyBkYXRhKGUpe3JldHVybiBuZXcgZGF0YXNldHNfRGF0YShlKX19Y29uc3QgSG89ZW8ubG9jYWxlU2V0LmlkO2NsYXNzIENhbGVuZGFyU3ltYm9scyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywiY2FsZW5kYXJTeW1ib2xzIiwhMCk7dGhpcy5uYW1lPSJncmVnb3JpYW4iO3RoaXMuZGF5TmFtZXM9bmV3IFhGQU9iamVjdEFycmF5KDIpO3RoaXMuZXJhTmFtZXM9bnVsbDt0aGlzLm1lcmlkaWVtTmFtZXM9bnVsbDt0aGlzLm1vbnRoTmFtZXM9bmV3IFhGQU9iamVjdEFycmF5KDIpfX1jbGFzcyBDdXJyZW5jeVN5bWJvbCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywiY3VycmVuY3lTeW1ib2wiKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pfX1jbGFzcyBDdXJyZW5jeVN5bWJvbHMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoSG8sImN1cnJlbmN5U3ltYm9scyIsITApO3RoaXMuY3VycmVuY3lTeW1ib2w9bmV3IFhGQU9iamVjdEFycmF5KDMpfX1jbGFzcyBEYXRlUGF0dGVybiBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywiZGF0ZVBhdHRlcm4iKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIERhdGVQYXR0ZXJucyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywiZGF0ZVBhdHRlcm5zIiwhMCk7dGhpcy5kYXRlUGF0dGVybj1uZXcgWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIERhdGVUaW1lU3ltYm9scyBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoSG8sImRhdGVUaW1lU3ltYm9scyIpfX1jbGFzcyBEYXkgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoSG8sImRheSIpfX1jbGFzcyBEYXlOYW1lcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywiZGF5TmFtZXMiLCEwKTt0aGlzLmFiYnI9Z2V0SW50ZWdlcih7ZGF0YTplLmFiYnIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmRheT1uZXcgWEZBT2JqZWN0QXJyYXkoNyl9fWNsYXNzIEVyYSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywiZXJhIil9fWNsYXNzIEVyYU5hbWVzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKEhvLCJlcmFOYW1lcyIsITApO3RoaXMuZXJhPW5ldyBYRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgbG9jYWxlX3NldF9Mb2NhbGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoSG8sImxvY2FsZSIsITApO3RoaXMuZGVzYz1lLmRlc2N8fCIiO3RoaXMubmFtZT0iaXNvbmFtZSI7dGhpcy5jYWxlbmRhclN5bWJvbHM9bnVsbDt0aGlzLmN1cnJlbmN5U3ltYm9scz1udWxsO3RoaXMuZGF0ZVBhdHRlcm5zPW51bGw7dGhpcy5kYXRlVGltZVN5bWJvbHM9bnVsbDt0aGlzLm51bWJlclBhdHRlcm5zPW51bGw7dGhpcy5udW1iZXJTeW1ib2xzPW51bGw7dGhpcy50aW1lUGF0dGVybnM9bnVsbDt0aGlzLnR5cGVGYWNlcz1udWxsfX1jbGFzcyBsb2NhbGVfc2V0X0xvY2FsZVNldCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywibG9jYWxlU2V0IiwhMCk7dGhpcy5sb2NhbGU9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBNZXJpZGllbSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywibWVyaWRpZW0iKX19Y2xhc3MgTWVyaWRpZW1OYW1lcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywibWVyaWRpZW1OYW1lcyIsITApO3RoaXMubWVyaWRpZW09bmV3IFhGQU9iamVjdEFycmF5KDIpfX1jbGFzcyBNb250aCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywibW9udGgiKX19Y2xhc3MgTW9udGhOYW1lcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywibW9udGhOYW1lcyIsITApO3RoaXMuYWJicj1nZXRJbnRlZ2VyKHtkYXRhOmUuYWJicixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMubW9udGg9bmV3IFhGQU9iamVjdEFycmF5KDEyKX19Y2xhc3MgTnVtYmVyUGF0dGVybiBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihIbywibnVtYmVyUGF0dGVybiIpO3RoaXMubmFtZT1nZXRTdHJpbmdPcHRpb24oZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgTnVtYmVyUGF0dGVybnMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoSG8sIm51bWJlclBhdHRlcm5zIiwhMCk7dGhpcy5udW1iZXJQYXR0ZXJuPW5ldyBYRkFPYmplY3RBcnJheSg0KX19Y2xhc3MgTnVtYmVyU3ltYm9sIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKEhvLCJudW1iZXJTeW1ib2wiKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbImRlY2ltYWwiLCJncm91cGluZyIsInBlcmNlbnQiLCJtaW51cyIsInplcm8iXSl9fWNsYXNzIE51bWJlclN5bWJvbHMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoSG8sIm51bWJlclN5bWJvbHMiLCEwKTt0aGlzLm51bWJlclN5bWJvbD1uZXcgWEZBT2JqZWN0QXJyYXkoNSl9fWNsYXNzIFRpbWVQYXR0ZXJuIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKEhvLCJ0aW1lUGF0dGVybiIpO3RoaXMubmFtZT1nZXRTdHJpbmdPcHRpb24oZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgVGltZVBhdHRlcm5zIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKEhvLCJ0aW1lUGF0dGVybnMiLCEwKTt0aGlzLnRpbWVQYXR0ZXJuPW5ldyBYRkFPYmplY3RBcnJheSg0KX19Y2xhc3MgVHlwZUZhY2UgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoSG8sInR5cGVGYWNlIiwhMCk7dGhpcy5uYW1lPSIifGUubmFtZX19Y2xhc3MgVHlwZUZhY2VzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKEhvLCJ0eXBlRmFjZXMiLCEwKTt0aGlzLnR5cGVGYWNlPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgTG9jYWxlU2V0TmFtZXNwYWNle3N0YXRpY1tRc10oZSx0KXtpZihMb2NhbGVTZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIExvY2FsZVNldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgY2FsZW5kYXJTeW1ib2xzKGUpe3JldHVybiBuZXcgQ2FsZW5kYXJTeW1ib2xzKGUpfXN0YXRpYyBjdXJyZW5jeVN5bWJvbChlKXtyZXR1cm4gbmV3IEN1cnJlbmN5U3ltYm9sKGUpfXN0YXRpYyBjdXJyZW5jeVN5bWJvbHMoZSl7cmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbHMoZSl9c3RhdGljIGRhdGVQYXR0ZXJuKGUpe3JldHVybiBuZXcgRGF0ZVBhdHRlcm4oZSl9c3RhdGljIGRhdGVQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IERhdGVQYXR0ZXJucyhlKX1zdGF0aWMgZGF0ZVRpbWVTeW1ib2xzKGUpe3JldHVybiBuZXcgRGF0ZVRpbWVTeW1ib2xzKGUpfXN0YXRpYyBkYXkoZSl7cmV0dXJuIG5ldyBEYXkoZSl9c3RhdGljIGRheU5hbWVzKGUpe3JldHVybiBuZXcgRGF5TmFtZXMoZSl9c3RhdGljIGVyYShlKXtyZXR1cm4gbmV3IEVyYShlKX1zdGF0aWMgZXJhTmFtZXMoZSl7cmV0dXJuIG5ldyBFcmFOYW1lcyhlKX1zdGF0aWMgbG9jYWxlKGUpe3JldHVybiBuZXcgbG9jYWxlX3NldF9Mb2NhbGUoZSl9c3RhdGljIGxvY2FsZVNldChlKXtyZXR1cm4gbmV3IGxvY2FsZV9zZXRfTG9jYWxlU2V0KGUpfXN0YXRpYyBtZXJpZGllbShlKXtyZXR1cm4gbmV3IE1lcmlkaWVtKGUpfXN0YXRpYyBtZXJpZGllbU5hbWVzKGUpe3JldHVybiBuZXcgTWVyaWRpZW1OYW1lcyhlKX1zdGF0aWMgbW9udGgoZSl7cmV0dXJuIG5ldyBNb250aChlKX1zdGF0aWMgbW9udGhOYW1lcyhlKXtyZXR1cm4gbmV3IE1vbnRoTmFtZXMoZSl9c3RhdGljIG51bWJlclBhdHRlcm4oZSl7cmV0dXJuIG5ldyBOdW1iZXJQYXR0ZXJuKGUpfXN0YXRpYyBudW1iZXJQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IE51bWJlclBhdHRlcm5zKGUpfXN0YXRpYyBudW1iZXJTeW1ib2woZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2woZSl9c3RhdGljIG51bWJlclN5bWJvbHMoZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2xzKGUpfXN0YXRpYyB0aW1lUGF0dGVybihlKXtyZXR1cm4gbmV3IFRpbWVQYXR0ZXJuKGUpfXN0YXRpYyB0aW1lUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBUaW1lUGF0dGVybnMoZSl9c3RhdGljIHR5cGVGYWNlKGUpe3JldHVybiBuZXcgVHlwZUZhY2UoZSl9c3RhdGljIHR5cGVGYWNlcyhlKXtyZXR1cm4gbmV3IFR5cGVGYWNlcyhlKX19Y29uc3QgV289ZW8uc2lnbmF0dXJlLmlkO2NsYXNzIHNpZ25hdHVyZV9TaWduYXR1cmUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoV28sInNpZ25hdHVyZSIsITApfX1jbGFzcyBTaWduYXR1cmVOYW1lc3BhY2V7c3RhdGljW1FzXShlLHQpe2lmKFNpZ25hdHVyZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gU2lnbmF0dXJlTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBzaWduYXR1cmVfU2lnbmF0dXJlKGUpfX1jb25zdCBHbz1lby5zdHlsZXNoZWV0LmlkO2NsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoR28sInN0eWxlc2hlZXQiLCEwKX19Y2xhc3MgU3R5bGVzaGVldE5hbWVzcGFjZXtzdGF0aWNbUXNdKGUsdCl7aWYoU3R5bGVzaGVldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gU3R5bGVzaGVldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgc3R5bGVzaGVldChlKXtyZXR1cm4gbmV3IFN0eWxlc2hlZXQoZSl9fWNvbnN0IHpvPWVvLnhkcC5pZDtjbGFzcyB4ZHBfWGRwIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHpvLCJ4ZHAiLCEwKTt0aGlzLnV1aWQ9ZS51dWlkfHwiIjt0aGlzLnRpbWVTdGFtcD1lLnRpbWVTdGFtcHx8IiI7dGhpcy5jb25maWc9bnVsbDt0aGlzLmNvbm5lY3Rpb25TZXQ9bnVsbDt0aGlzLmRhdGFzZXRzPW51bGw7dGhpcy5sb2NhbGVTZXQ9bnVsbDt0aGlzLnN0eWxlc2hlZXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGVtcGxhdGU9bnVsbH1bUnNdKGUpe2NvbnN0IHQ9ZW9bZVtNc11dO3JldHVybiB0JiZlW09zXT09PXQuaWR9fWNsYXNzIFhkcE5hbWVzcGFjZXtzdGF0aWNbUXNdKGUsdCl7aWYoWGRwTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBYZHBOYW1lc3BhY2VbZV0odCl9c3RhdGljIHhkcChlKXtyZXR1cm4gbmV3IHhkcF9YZHAoZSl9fWNvbnN0ICRvPWVvLnhodG1sLmlkLFZvPVN5bWJvbCgpLEtvPW5ldyBTZXQoWyJjb2xvciIsImZvbnQiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXdlaWdodCIsIm1hcmdpbiIsIm1hcmdpbi1ib3R0b20iLCJtYXJnaW4tbGVmdCIsIm1hcmdpbi1yaWdodCIsIm1hcmdpbi10b3AiLCJsZXR0ZXItc3BhY2luZyIsImxpbmUtaGVpZ2h0Iiwib3JwaGFucyIsInBhZ2UtYnJlYWstYWZ0ZXIiLCJwYWdlLWJyZWFrLWJlZm9yZSIsInBhZ2UtYnJlYWstaW5zaWRlIiwidGFiLWludGVydmFsIiwidGFiLXN0b3AiLCJ0ZXh0LWFsaWduIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1pbmRlbnQiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndpZG93cyIsImtlcm5pbmctbW9kZSIsInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLCJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZSIsInhmYS1zcGFjZXJ1biIsInhmYS10YWItc3RvcHMiXSksSm89bmV3IE1hcChbWyJwYWdlLWJyZWFrLWFmdGVyIiwiYnJlYWtBZnRlciJdLFsicGFnZS1icmVhay1iZWZvcmUiLCJicmVha0JlZm9yZSJdLFsicGFnZS1icmVhay1pbnNpZGUiLCJicmVha0luc2lkZSJdLFsia2VybmluZy1tb2RlIixlPT4ibm9uZSI9PT1lPyJub25lIjoibm9ybWFsIl0sWyJ4ZmEtZm9udC1ob3Jpem9udGFsLXNjYWxlIixlPT5gc2NhbGVYKCR7TWF0aC5tYXgoMCxwYXJzZUludChlKS8xMDApLnRvRml4ZWQoMil9KWBdLFsieGZhLWZvbnQtdmVydGljYWwtc2NhbGUiLGU9PmBzY2FsZVkoJHtNYXRoLm1heCgwLHBhcnNlSW50KGUpLzEwMCkudG9GaXhlZCgyKX0pYF0sWyJ4ZmEtc3BhY2VydW4iLCIiXSxbInhmYS10YWItc3RvcHMiLCIiXSxbImZvbnQtc2l6ZSIsKGUsdCk9Pm1lYXN1cmVUb1N0cmluZyguOTkqKGU9dC5mb250U2l6ZT1NYXRoLmFicyhnZXRNZWFzdXJlbWVudChlKSkpKV0sWyJsZXR0ZXItc3BhY2luZyIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJsaW5lLWhlaWdodCIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJtYXJnaW4iLGU9Pm1lYXN1cmVUb1N0cmluZyhnZXRNZWFzdXJlbWVudChlKSldLFsibWFyZ2luLWJvdHRvbSIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJtYXJnaW4tbGVmdCIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJtYXJnaW4tcmlnaHQiLGU9Pm1lYXN1cmVUb1N0cmluZyhnZXRNZWFzdXJlbWVudChlKSldLFsibWFyZ2luLXRvcCIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJ0ZXh0LWluZGVudCIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJmb250LWZhbWlseSIsZT0+ZV0sWyJ2ZXJ0aWNhbC1hbGlnbiIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV1dKSxZbz0vXHMrL2csWm89L1tcclxuXSsvZyxRbz0vXHJcbj8vZztmdW5jdGlvbiBtYXBTdHlsZShlLHQsYSl7Y29uc3Qgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCFlKXJldHVybiByO2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbdCxhXW9mIGUuc3BsaXQoIjsiKS5tYXAoZT0+ZS5zcGxpdCgiOiIsMikpKXtjb25zdCBlPUpvLmdldCh0KTtpZigiIj09PWUpY29udGludWU7bGV0IG49YTtlJiYobj0ic3RyaW5nIj09dHlwZW9mIGU/ZTplKGEsaSkpO3QuZW5kc1dpdGgoInNjYWxlIik/ci50cmFuc2Zvcm09ci50cmFuc2Zvcm0/YCR7clt0XX0gJHtufWA6bjpyW3QucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywoZSx0KT0+dC50b1VwcGVyQ2FzZSgpKV09bn1yLmZvbnRGYW1pbHkmJnNldEZvbnRGYW1pbHkoe3R5cGVmYWNlOnIuZm9udEZhbWlseSx3ZWlnaHQ6ci5mb250V2VpZ2h0fHwibm9ybWFsIixwb3N0dXJlOnIuZm9udFN0eWxlfHwibm9ybWFsIixzaXplOmkuZm9udFNpemV8fDB9LHQsdFtnc10uZm9udEZpbmRlcixyKTtpZihhJiZyLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09ci52ZXJ0aWNhbEFsaWduJiZyLmZvbnRTaXplKXtjb25zdCBlPS41ODMsdD0uMzMzLGE9Z2V0TWVhc3VyZW1lbnQoci5mb250U2l6ZSk7ci5mb250U2l6ZT1tZWFzdXJlVG9TdHJpbmcoYSplKTtyLnZlcnRpY2FsQWxpZ249bWVhc3VyZVRvU3RyaW5nKE1hdGguc2lnbihnZXRNZWFzdXJlbWVudChyLnZlcnRpY2FsQWxpZ24pKSphKnQpfWEmJnIuZm9udFNpemUmJihyLmZvbnRTaXplPWBjYWxjKCR7ci5mb250U2l6ZX0gKiB2YXIoLS10b3RhbC1zY2FsZS1mYWN0b3IpKWApO2ZpeFRleHRJbmRlbnQocik7cmV0dXJuIHJ9Y29uc3QgZWM9bmV3IFNldChbImJvZHkiLCJodG1sIl0pO2NsYXNzIFhodG1sT2JqZWN0IGV4dGVuZHMgWG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoJG8sdCk7dGhpc1tWb109ITE7dGhpcy5zdHlsZT1lLnN0eWxlfHwiIn1bcW5dKGUpe3N1cGVyW3FuXShlKTt0aGlzLnN0eWxlPWZ1bmN0aW9uIGNoZWNrU3R5bGUoZSl7cmV0dXJuIGUuc3R5bGU/ZS5zdHlsZS5zcGxpdCgiOyIpLmZpbHRlcihlPT4hIWUudHJpbSgpKS5tYXAoZT0+ZS5zcGxpdCgiOiIsMikubWFwKGU9PmUudHJpbSgpKSkuZmlsdGVyKChbdCxhXSk9PnsiZm9udC1mYW1pbHkiPT09dCYmZVtnc10udXNlZFR5cGVmYWNlcy5hZGQoYSk7cmV0dXJuIEtvLmhhcyh0KX0pLm1hcChlPT5lLmpvaW4oIjoiKSkuam9pbigiOyIpOiIifSh0aGlzKX1bX25dKCl7cmV0dXJuIWVjLmhhcyh0aGlzW01zXSl9W05zXShlLHQ9ITEpe2lmKHQpdGhpc1tWb109ITA7ZWxzZXtlPWUucmVwbGFjZUFsbChabywiIik7dGhpcy5zdHlsZS5pbmNsdWRlcygieGZhLXNwYWNlcnVuOnllcyIpfHwoZT1lLnJlcGxhY2VBbGwoWW8sIiAiKSl9ZSYmKHRoaXNbJG5dKz1lKX1bRXNdKGUsdD0hMCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9e3RvcDpOYU4sYm90dG9tOk5hTixsZWZ0Ok5hTixyaWdodDpOYU59O2xldCBpPW51bGw7Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLnN0eWxlLnNwbGl0KCI7IikubWFwKGU9PmUuc3BsaXQoIjoiLDIpKSlzd2l0Y2goZSl7Y2FzZSJmb250LWZhbWlseSI6YS50eXBlZmFjZT1zdHJpcFF1b3Rlcyh0KTticmVhaztjYXNlImZvbnQtc2l6ZSI6YS5zaXplPWdldE1lYXN1cmVtZW50KHQpO2JyZWFrO2Nhc2UiZm9udC13ZWlnaHQiOmEud2VpZ2h0PXQ7YnJlYWs7Y2FzZSJmb250LXN0eWxlIjphLnBvc3R1cmU9dDticmVhaztjYXNlImxldHRlci1zcGFjaW5nIjphLmxldHRlclNwYWNpbmc9Z2V0TWVhc3VyZW1lbnQodCk7YnJlYWs7Y2FzZSJtYXJnaW4iOmNvbnN0IGU9dC5zcGxpdCgvIFx0LykubWFwKGU9PmdldE1lYXN1cmVtZW50KGUpKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyLnRvcD1yLmJvdHRvbT1yLmxlZnQ9ci5yaWdodD1lWzBdO2JyZWFrO2Nhc2UgMjpyLnRvcD1yLmJvdHRvbT1lWzBdO3IubGVmdD1yLnJpZ2h0PWVbMV07YnJlYWs7Y2FzZSAzOnIudG9wPWVbMF07ci5ib3R0b209ZVsyXTtyLmxlZnQ9ci5yaWdodD1lWzFdO2JyZWFrO2Nhc2UgNDpyLnRvcD1lWzBdO3IubGVmdD1lWzFdO3IuYm90dG9tPWVbMl07ci5yaWdodD1lWzNdfWJyZWFrO2Nhc2UibWFyZ2luLXRvcCI6ci50b3A9Z2V0TWVhc3VyZW1lbnQodCk7YnJlYWs7Y2FzZSJtYXJnaW4tYm90dG9tIjpyLmJvdHRvbT1nZXRNZWFzdXJlbWVudCh0KTticmVhaztjYXNlIm1hcmdpbi1sZWZ0IjpyLmxlZnQ9Z2V0TWVhc3VyZW1lbnQodCk7YnJlYWs7Y2FzZSJtYXJnaW4tcmlnaHQiOnIucmlnaHQ9Z2V0TWVhc3VyZW1lbnQodCk7YnJlYWs7Y2FzZSJsaW5lLWhlaWdodCI6aT1nZXRNZWFzdXJlbWVudCh0KX1lLnB1c2hEYXRhKGEscixpKTtpZih0aGlzWyRuXSllLmFkZFN0cmluZyh0aGlzWyRuXSk7ZWxzZSBmb3IoY29uc3QgdCBvZiB0aGlzW2NzXSgpKSIjdGV4dCIhPT10W01zXT90W0VzXShlKTplLmFkZFN0cmluZyh0WyRuXSk7dCYmZS5wb3BGb250KCl9W0tzXShlKXtjb25zdCB0PVtdO3RoaXNbSm5dPXtjaGlsZHJlbjp0fTt0aGlzW1huXSh7fSk7aWYoMD09PXQubGVuZ3RoJiYhdGhpc1skbl0pcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7bGV0IGE7YT10aGlzW1ZvXT90aGlzWyRuXT90aGlzWyRuXS5yZXBsYWNlQWxsKFFvLCJcbiIpOnZvaWQgMDp0aGlzWyRuXXx8dm9pZCAwO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6dGhpc1tNc10sYXR0cmlidXRlczp7aHJlZjp0aGlzLmhyZWYsc3R5bGU6bWFwU3R5bGUodGhpcy5zdHlsZSx0aGlzLHRoaXNbVm9dKX0sY2hpbGRyZW46dCx2YWx1ZTphfSl9fWNsYXNzIEEgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJhIik7dGhpcy5ocmVmPWZpeFVSTChlLmhyZWYpfHwiIn19Y2xhc3MgQiBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImIiKX1bRXNdKGUpe2UucHVzaEZvbnQoe3dlaWdodDoiYm9sZCJ9KTtzdXBlcltFc10oZSk7ZS5wb3BGb250KCl9fWNsYXNzIEJvZHkgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJib2R5Iil9W0tzXShlKXtjb25zdCB0PXN1cGVyW0tzXShlKSx7aHRtbDphfT10O2lmKCFhKXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2EubmFtZT0iZGl2IjthLmF0dHJpYnV0ZXMuY2xhc3M9WyJ4ZmFSaWNoIl07cmV0dXJuIHR9fWNsYXNzIEJyIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYnIiKX1bJHNdKCl7cmV0dXJuIlxuIn1bRXNdKGUpe2UuYWRkU3RyaW5nKCJcbiIpfVtLc10oZSl7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiYnIifSl9fWNsYXNzIEh0bWwgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJodG1sIil9W0tzXShlKXtjb25zdCB0PVtdO3RoaXNbSm5dPXtjaGlsZHJlbjp0fTt0aGlzW1huXSh7fSk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LHZhbHVlOnRoaXNbJG5dfHwiIn0pO2lmKDE9PT10Lmxlbmd0aCl7Y29uc3QgZT10WzBdO2lmKGUuYXR0cmlidXRlcz8uY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSlyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGUpfXJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19Y2xhc3MgSSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImkiKX1bRXNdKGUpe2UucHVzaEZvbnQoe3Bvc3R1cmU6Iml0YWxpYyJ9KTtzdXBlcltFc10oZSk7ZS5wb3BGb250KCl9fWNsYXNzIExpIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwibGkiKX19Y2xhc3MgT2wgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJvbCIpfX1jbGFzcyBQIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwicCIpfVtFc10oZSl7c3VwZXJbRXNdKGUsITEpO2UuYWRkU3RyaW5nKCJcbiIpO2UuYWRkUGFyYSgpO2UucG9wRm9udCgpfVskc10oKXtyZXR1cm4gdGhpc1tkc10oKVtjc10oKS5hdCgtMSk9PT10aGlzP3N1cGVyWyRzXSgpOnN1cGVyWyRzXSgpKyJcbiJ9fWNsYXNzIFNwYW4gZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzcGFuIil9fWNsYXNzIFN1YiBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInN1YiIpfX1jbGFzcyBTdXAgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzdXAiKX19Y2xhc3MgVWwgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJ1bCIpfX1jbGFzcyBYaHRtbE5hbWVzcGFjZXtzdGF0aWNbUXNdKGUsdCl7aWYoWGh0bWxOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFhodG1sTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBhKGUpe3JldHVybiBuZXcgQShlKX1zdGF0aWMgYihlKXtyZXR1cm4gbmV3IEIoZSl9c3RhdGljIGJvZHkoZSl7cmV0dXJuIG5ldyBCb2R5KGUpfXN0YXRpYyBicihlKXtyZXR1cm4gbmV3IEJyKGUpfXN0YXRpYyBodG1sKGUpe3JldHVybiBuZXcgSHRtbChlKX1zdGF0aWMgaShlKXtyZXR1cm4gbmV3IEkoZSl9c3RhdGljIGxpKGUpe3JldHVybiBuZXcgTGkoZSl9c3RhdGljIG9sKGUpe3JldHVybiBuZXcgT2woZSl9c3RhdGljIHAoZSl7cmV0dXJuIG5ldyBQKGUpfXN0YXRpYyBzcGFuKGUpe3JldHVybiBuZXcgU3BhbihlKX1zdGF0aWMgc3ViKGUpe3JldHVybiBuZXcgU3ViKGUpfXN0YXRpYyBzdXAoZSl7cmV0dXJuIG5ldyBTdXAoZSl9c3RhdGljIHVsKGUpe3JldHVybiBuZXcgVWwoZSl9fWNvbnN0IHRjPXtjb25maWc6Q29uZmlnTmFtZXNwYWNlLGNvbm5lY3Rpb246Q29ubmVjdGlvblNldE5hbWVzcGFjZSxkYXRhc2V0czpEYXRhc2V0c05hbWVzcGFjZSxsb2NhbGVTZXQ6TG9jYWxlU2V0TmFtZXNwYWNlLHNpZ25hdHVyZTpTaWduYXR1cmVOYW1lc3BhY2Usc3R5bGVzaGVldDpTdHlsZXNoZWV0TmFtZXNwYWNlLHRlbXBsYXRlOlRlbXBsYXRlTmFtZXNwYWNlLHhkcDpYZHBOYW1lc3BhY2UseGh0bWw6WGh0bWxOYW1lc3BhY2V9O2NsYXNzIFVua25vd25OYW1lc3BhY2V7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lc3BhY2VJZD1lfVtRc10oZSx0KXtyZXR1cm4gbmV3IFhtbE9iamVjdCh0aGlzLm5hbWVzcGFjZUlkLGUsdCl9fWNsYXNzIFJvb3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoLTEsInJvb3QiLE9iamVjdC5jcmVhdGUobnVsbCkpO3RoaXMuZWxlbWVudD1udWxsO3RoaXNbbXNdPWV9W0JzXShlKXt0aGlzLmVsZW1lbnQ9ZTtyZXR1cm4hMH1bWW5dKCl7c3VwZXJbWW5dKCk7aWYodGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2YgVGVtcGxhdGUpe3RoaXNbbXNdLnNldChqcyx0aGlzLmVsZW1lbnQpO3RoaXMuZWxlbWVudC50ZW1wbGF0ZVtYc10odGhpc1ttc10pO3RoaXMuZWxlbWVudC50ZW1wbGF0ZVttc109dGhpc1ttc119fX1jbGFzcyBFbXB0eSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC0xLCIiLE9iamVjdC5jcmVhdGUobnVsbCkpfVtCc10oZSl7cmV0dXJuITF9fWNsYXNzIEJ1aWxkZXJ7Y29uc3RydWN0b3IoZT1udWxsKXt0aGlzLl9uYW1lc3BhY2VTdGFjaz1bXTt0aGlzLl9uc0Fnbm9zdGljTGV2ZWw9MDt0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcz1uZXcgTWFwO3RoaXMuX25hbWVzcGFjZXM9bmV3IE1hcDt0aGlzLl9uZXh0TnNJZD1NYXRoLm1heCguLi5PYmplY3QudmFsdWVzKGVvKS5tYXAoKHtpZDplfSk9PmUpKTt0aGlzLl9jdXJyZW50TmFtZXNwYWNlPWV8fG5ldyBVbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfWJ1aWxkUm9vdChlKXtyZXR1cm4gbmV3IFJvb3QoZSl9YnVpbGQoe25zUHJlZml4OmUsbmFtZTp0LGF0dHJpYnV0ZXM6YSxuYW1lc3BhY2U6cixwcmVmaXhlczppfSl7Y29uc3Qgbj1udWxsIT09cjtpZihuKXt0aGlzLl9uYW1lc3BhY2VTdGFjay5wdXNoKHRoaXMuX2N1cnJlbnROYW1lc3BhY2UpO3RoaXMuX2N1cnJlbnROYW1lc3BhY2U9dGhpcy5fc2VhcmNoTmFtZXNwYWNlKHIpfWkmJnRoaXMuX2FkZE5hbWVzcGFjZVByZWZpeChpKTtpZihhLmhhc093blByb3BlcnR5KERzKSl7Y29uc3QgZT10Yy5kYXRhc2V0cyx0PWFbRHNdO2xldCByPW51bGw7Zm9yKGNvbnN0W2EsaV1vZiBPYmplY3QuZW50cmllcyh0KSl7aWYodGhpcy5fZ2V0TmFtZXNwYWNlVG9Vc2UoYSk9PT1lKXtyPXt4ZmE6aX07YnJlYWt9fXI/YVtEc109cjpkZWxldGUgYVtEc119Y29uc3Qgcz10aGlzLl9nZXROYW1lc3BhY2VUb1VzZShlKSxvPXM/LltRc10odCxhKXx8bmV3IEVtcHR5O29ba3NdKCkmJnRoaXMuX25zQWdub3N0aWNMZXZlbCsrOyhufHxpfHxvW2tzXSgpKSYmKG9bV25dPXtoYXNOYW1lc3BhY2U6bixwcmVmaXhlczppLG5zQWdub3N0aWM6b1trc10oKX0pO3JldHVybiBvfWlzTnNBZ25vc3RpYygpe3JldHVybiB0aGlzLl9uc0Fnbm9zdGljTGV2ZWw+MH1fc2VhcmNoTmFtZXNwYWNlKGUpe2xldCB0PXRoaXMuX25hbWVzcGFjZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Zm9yKGNvbnN0W2Ese2NoZWNrOnJ9XW9mIE9iamVjdC5lbnRyaWVzKGVvKSlpZihyKGUpKXt0PXRjW2FdO2lmKHQpe3RoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCk7cmV0dXJuIHR9YnJlYWt9dD1uZXcgVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTt0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpO3JldHVybiB0fV9hZGROYW1lc3BhY2VQcmVmaXgoZSl7Zm9yKGNvbnN0e3ByZWZpeDp0LHZhbHVlOmF9b2YgZSl7Y29uc3QgZT10aGlzLl9zZWFyY2hOYW1lc3BhY2UoYSk7bGV0IHI9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KHQpO2lmKCFyKXtyPVtdO3RoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldCh0LHIpfXIucHVzaChlKX19X2dldE5hbWVzcGFjZVRvVXNlKGUpe2lmKCFlKXJldHVybiB0aGlzLl9jdXJyZW50TmFtZXNwYWNlO2NvbnN0IHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO2lmKHQ/Lmxlbmd0aD4wKXJldHVybiB0LmF0KC0xKTt3YXJuKGBVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICR7ZX0uYCk7cmV0dXJuIG51bGx9Y2xlYW4oZSl7Y29uc3R7aGFzTmFtZXNwYWNlOnQscHJlZml4ZXM6YSxuc0Fnbm9zdGljOnJ9PWU7dCYmKHRoaXMuX2N1cnJlbnROYW1lc3BhY2U9dGhpcy5fbmFtZXNwYWNlU3RhY2sucG9wKCkpO2EmJmEuZm9yRWFjaCgoe3ByZWZpeDplfSk9Pnt0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQoZSkucG9wKCl9KTtyJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwtLX19Y2xhc3MgWEZBUGFyc2VyIGV4dGVuZHMgWE1MUGFyc2VyQmFzZXtjb25zdHJ1Y3RvcihlPW51bGwsdD0hMSl7c3VwZXIoKTt0aGlzLl9idWlsZGVyPW5ldyBCdWlsZGVyKGUpO3RoaXMuX3N0YWNrPVtdO3RoaXMuX2dsb2JhbERhdGE9e3VzZWRUeXBlZmFjZXM6bmV3IFNldH07dGhpcy5faWRzPW5ldyBNYXA7dGhpcy5fY3VycmVudD10aGlzLl9idWlsZGVyLmJ1aWxkUm9vdCh0aGlzLl9pZHMpO3RoaXMuX2Vycm9yQ29kZT12bjt0aGlzLl93aGl0ZVJlZ2V4PS9eXHMrJC87dGhpcy5fbmJzcHM9L1x4YTArL2c7dGhpcy5fcmljaFRleHQ9dH1wYXJzZShlKXt0aGlzLnBhcnNlWG1sKGUpO2lmKHRoaXMuX2Vycm9yQ29kZT09PXZuKXt0aGlzLl9jdXJyZW50W1luXSgpO3JldHVybiB0aGlzLl9jdXJyZW50LmVsZW1lbnR9fW9uVGV4dChlKXtlPWUucmVwbGFjZSh0aGlzLl9uYnNwcyxlPT5lLnNsaWNlKDEpKyIgIik7dGhpcy5fcmljaFRleHR8fHRoaXMuX2N1cnJlbnRbX25dKCk/dGhpcy5fY3VycmVudFtOc10oZSx0aGlzLl9yaWNoVGV4dCk6dGhpcy5fd2hpdGVSZWdleC50ZXN0KGUpfHx0aGlzLl9jdXJyZW50W05zXShlLnRyaW0oKSl9b25DZGF0YShlKXt0aGlzLl9jdXJyZW50W05zXShlKX1fbWtBdHRyaWJ1dGVzKGUsdCl7bGV0IGE9bnVsbCxyPW51bGw7Y29uc3QgaT1PYmplY3QuY3JlYXRlKHt9KTtmb3IoY29uc3R7bmFtZTpuLHZhbHVlOnN9b2YgZSlpZigieG1sbnMiPT09bilhP3dhcm4oYFhGQSAtIG11bHRpcGxlIG5hbWVzcGFjZSBkZWZpbml0aW9uIGluIDwke3R9PmApOmE9cztlbHNlIGlmKG4uc3RhcnRzV2l0aCgieG1sbnM6Iikpe2NvbnN0IGU9bi5zdWJzdHJpbmcoNik7cj8/PVtdO3IucHVzaCh7cHJlZml4OmUsdmFsdWU6c30pfWVsc2V7Y29uc3QgZT1uLmluZGV4T2YoIjoiKTtpZigtMT09PWUpaVtuXT1zO2Vsc2V7Y29uc3QgdD1pW0RzXT8/PU9iamVjdC5jcmVhdGUobnVsbCksW2Escl09W24uc2xpY2UoMCxlKSxuLnNsaWNlKGUrMSldOyh0W2FdfHw9T2JqZWN0LmNyZWF0ZShudWxsKSlbcl09c319cmV0dXJuW2EscixpXX1fZ2V0TmFtZUFuZFByZWZpeChlLHQpe2NvbnN0IGE9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1hP1tlLG51bGxdOltlLnN1YnN0cmluZyhhKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxhKV19b25CZWdpbkVsZW1lbnQoZSx0LGEpe2NvbnN0W3IsaSxuXT10aGlzLl9ta0F0dHJpYnV0ZXModCxlKSxbcyxvXT10aGlzLl9nZXROYW1lQW5kUHJlZml4KGUsdGhpcy5fYnVpbGRlci5pc05zQWdub3N0aWMoKSksYz10aGlzLl9idWlsZGVyLmJ1aWxkKHtuc1ByZWZpeDpvLG5hbWU6cyxhdHRyaWJ1dGVzOm4sbmFtZXNwYWNlOnIscHJlZml4ZXM6aX0pO2NbZ3NdPXRoaXMuX2dsb2JhbERhdGE7aWYoYSl7Y1tZbl0oKTt0aGlzLl9jdXJyZW50W0JzXShjKSYmY1tIc10odGhpcy5faWRzKTtjW3FuXSh0aGlzLl9idWlsZGVyKX1lbHNle3RoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudCk7dGhpcy5fY3VycmVudD1jfX1vbkVuZEVsZW1lbnQoZSl7Y29uc3QgdD10aGlzLl9jdXJyZW50O2lmKHRbd3NdKCkmJiJzdHJpbmciPT10eXBlb2YgdFskbl0pe2NvbnN0IGU9bmV3IFhGQVBhcnNlcjtlLl9nbG9iYWxEYXRhPXRoaXMuX2dsb2JhbERhdGE7Y29uc3QgYT1lLnBhcnNlKHRbJG5dKTt0WyRuXT1udWxsO3RbQnNdKGEpfXRbWW5dKCk7dGhpcy5fY3VycmVudD10aGlzLl9zdGFjay5wb3AoKTt0aGlzLl9jdXJyZW50W0JzXSh0KSYmdFtIc10odGhpcy5faWRzKTt0W3FuXSh0aGlzLl9idWlsZGVyKX1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX1jbGFzcyBYRkFGYWN0b3J5e2NvbnN0cnVjdG9yKGUpe3RyeXt0aGlzLnJvb3Q9KG5ldyBYRkFQYXJzZXIpLnBhcnNlKFhGQUZhY3RvcnkuX2NyZWF0ZURvY3VtZW50KGUpKTtjb25zdCB0PW5ldyBCaW5kZXIodGhpcy5yb290KTt0aGlzLmZvcm09dC5iaW5kKCk7dGhpcy5kYXRhSGFuZGxlcj1uZXcgRGF0YUhhbmRsZXIodGhpcy5yb290LHQuZ2V0RGF0YSgpKTt0aGlzLmZvcm1bZ3NdLnRlbXBsYXRlPXRoaXMuZm9ybX1jYXRjaChlKXt3YXJuKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBhbmQgYmluZGluZzogJHtlfWApfX1pc1ZhbGlkKCl7cmV0dXJuISghdGhpcy5yb290fHwhdGhpcy5mb3JtKX1fY3JlYXRlUGFnZXNIZWxwZXIoKXtjb25zdCBlPXRoaXMuZm9ybVtWc10oKTtyZXR1cm4gbmV3IFByb21pc2UoKHQsYSk9Pntjb25zdCBuZXh0SXRlcmF0aW9uPSgpPT57dHJ5e2NvbnN0IGE9ZS5uZXh0KCk7YS5kb25lP3QoYS52YWx1ZSk6c2V0VGltZW91dChuZXh0SXRlcmF0aW9uLDApfWNhdGNoKGUpe2EoZSl9fTtzZXRUaW1lb3V0KG5leHRJdGVyYXRpb24sMCl9KX1hc3luYyBfY3JlYXRlUGFnZXMoKXt0cnl7dGhpcy5wYWdlcz1hd2FpdCB0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO3RoaXMuZGltcz10aGlzLnBhZ2VzLmNoaWxkcmVuLm1hcChlPT57Y29uc3R7d2lkdGg6dCxoZWlnaHQ6YX09ZS5hdHRyaWJ1dGVzLnN0eWxlO3JldHVyblswLDAscGFyc2VJbnQodCkscGFyc2VJbnQoYSldfSl9Y2F0Y2goZSl7d2FybihgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGxheW91dDogJHtlfWApfX1nZXRCb3VuZGluZ0JveChlKXtyZXR1cm4gdGhpcy5kaW1zW2VdfWFzeW5jIGdldE51bVBhZ2VzKCl7dGhpcy5wYWdlc3x8YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtyZXR1cm4gdGhpcy5kaW1zLmxlbmd0aH1zZXRJbWFnZXMoZSl7dGhpcy5mb3JtW2dzXS5pbWFnZXM9ZX1zZXRGb250cyhlKXt0aGlzLmZvcm1bZ3NdLmZvbnRGaW5kZXI9bmV3IEZvbnRGaW5kZXIoZSk7Y29uc3QgdD1bXTtmb3IobGV0IGUgb2YgdGhpcy5mb3JtW2dzXS51c2VkVHlwZWZhY2VzKXtlPXN0cmlwUXVvdGVzKGUpO3RoaXMuZm9ybVtnc10uZm9udEZpbmRlci5maW5kKGUpfHx0LnB1c2goZSl9cmV0dXJuIHQubGVuZ3RoPjA/dDpudWxsfWFwcGVuZEZvbnRzKGUsdCl7dGhpcy5mb3JtW2dzXS5mb250RmluZGVyLmFkZChlLHQpfWFzeW5jIGdldFBhZ2VzKCl7dGhpcy5wYWdlc3x8YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtjb25zdCBlPXRoaXMucGFnZXM7dGhpcy5wYWdlcz1udWxsO3JldHVybiBlfXNlcmlhbGl6ZURhdGEoZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfXN0YXRpYyBfY3JlYXRlRG9jdW1lbnQoZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19c3RhdGljIGdldFJpY2hUZXh0QXNIdG1sKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e2xldCB0PW5ldyBYRkFQYXJzZXIoWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbTXNdKSl7Y29uc3QgZT1YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtlW2puXSh0KTt0PWV9Y29uc3QgYT10W0tzXSgpO2lmKCFhLnN1Y2Nlc3MpcmV0dXJuIG51bGw7Y29uc3R7aHRtbDpyfT1hLHthdHRyaWJ1dGVzOml9PXI7aWYoaSl7aS5jbGFzcyYmKGkuY2xhc3M9aS5jbGFzcy5maWx0ZXIoZT0+IWUuc3RhcnRzV2l0aCgieGZhIikpKTtpLmRpcj0iYXV0byJ9cmV0dXJue2h0bWw6cixzdHI6dFskc10oKX19Y2F0Y2goZSl7d2FybihgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgb2YgcmljaCB0ZXh0OiAke2V9YCl9cmV0dXJuIG51bGx9fWNsYXNzIEFubm90YXRpb25GYWN0b3J5e3N0YXRpYyBjcmVhdGVHbG9iYWxzKGUpe3JldHVybiBQcm9taXNlLmFsbChbZS5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpLGUuZW5zdXJlRG9jKCJ4ZmFEYXRhc2V0cyIpLGUuZW5zdXJlQ2F0YWxvZygic3RydWN0VHJlZVJvb3QiKSxlLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxlLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksZS5lbnN1cmVDYXRhbG9nKCJnbG9iYWxDb2xvclNwYWNlQ2FjaGUiKV0pLnRoZW4oKFt0LGEscixpLG4sc10pPT4oe3BkZk1hbmFnZXI6ZSxhY3JvRm9ybTp0IGluc3RhbmNlb2YgRGljdD90OkRpY3QuZW1wdHkseGZhRGF0YXNldHM6YSxzdHJ1Y3RUcmVlUm9vdDpyLGJhc2VVcmw6aSxhdHRhY2htZW50czpuLGdsb2JhbENvbG9yU3BhY2VDYWNoZTpzfSksZT0+e3dhcm4oYGNyZWF0ZUdsb2JhbHM6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pfXN0YXRpYyBhc3luYyBjcmVhdGUoZSx0LGEscixpLG4scyxvKXtjb25zdCBjPWk/YXdhaXQgdGhpcy5fZ2V0UGFnZUluZGV4KGUsdCxhLnBkZk1hbmFnZXIpOm51bGw7cmV0dXJuIGEucGRmTWFuYWdlci5lbnN1cmUodGhpcywiX2NyZWF0ZSIsW2UsdCxhLHIsaSxuLHMsYyxvXSl9c3RhdGljIF9jcmVhdGUoZSx0LGEscixpPSExLG49bnVsbCxzPW51bGwsbz1udWxsLGM9bnVsbCl7Y29uc3QgbD1lLmZldGNoSWZSZWYodCk7aWYoIShsIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2xldCBoPWwuZ2V0KCJTdWJ0eXBlIik7aD1oIGluc3RhbmNlb2YgTmFtZT9oLm5hbWU6bnVsbDtpZihzJiYhcy5oYXMoTVtoLnRvVXBwZXJDYXNlKCldKSlyZXR1cm4gbnVsbDtjb25zdHthY3JvRm9ybTp1LHBkZk1hbmFnZXI6ZH09YSxmPXQgaW5zdGFuY2VvZiBSZWY/dC50b1N0cmluZygpOmBhbm5vdF8ke3IuY3JlYXRlT2JqSWQoKX1gLGc9e3hyZWY6ZSxyZWY6dCxkaWN0Omwsc3VidHlwZTpoLGlkOmYsYW5ub3RhdGlvbkdsb2JhbHM6YSxjb2xsZWN0RmllbGRzOmksb3JwaGFuRmllbGRzOm4sbmVlZEFwcGVhcmFuY2VzOiFpJiYhMD09PXUuZ2V0KCJOZWVkQXBwZWFyYW5jZXMiKSxwYWdlSW5kZXg6byxldmFsdWF0b3JPcHRpb25zOmQuZXZhbHVhdG9yT3B0aW9ucyxwYWdlUmVmOmN9O3N3aXRjaChoKXtjYXNlIkxpbmsiOnJldHVybiBuZXcgTGlua0Fubm90YXRpb24oZyk7Y2FzZSJUZXh0IjpyZXR1cm4gbmV3IFRleHRBbm5vdGF0aW9uKGcpO2Nhc2UiV2lkZ2V0IjpsZXQgZT1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0Omwsa2V5OiJGVCJ9KTtlPWUgaW5zdGFuY2VvZiBOYW1lP2UubmFtZTpudWxsO3N3aXRjaChlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IFRleHRXaWRnZXRBbm5vdGF0aW9uKGcpO2Nhc2UiQnRuIjpyZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24oZyk7Y2FzZSJDaCI6cmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKGcpO2Nhc2UiU2lnIjpyZXR1cm4gbmV3IFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24oZyl9d2FybihgVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSAiJHtlfSIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGZpZWxkIHR5cGUuYCk7cmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uKGcpO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgUG9wdXBBbm5vdGF0aW9uKGcpO2Nhc2UiRnJlZVRleHQiOnJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uKGcpO2Nhc2UiTGluZSI6cmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbihnKTtjYXNlIlNxdWFyZSI6cmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uKGcpO2Nhc2UiQ2lyY2xlIjpyZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb24oZyk7Y2FzZSJQb2x5TGluZSI6cmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb24oZyk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uKGcpO2Nhc2UiQ2FyZXQiOnJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uKGcpO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IElua0Fubm90YXRpb24oZyk7Y2FzZSJIaWdobGlnaHQiOnJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbihnKTtjYXNlIlVuZGVybGluZSI6cmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uKGcpO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgU3F1aWdnbHlBbm5vdGF0aW9uKGcpO2Nhc2UiU3RyaWtlT3V0IjpyZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb24oZyk7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb24oZyk7Y2FzZSJGaWxlQXR0YWNobWVudCI6cmV0dXJuIG5ldyBGaWxlQXR0YWNobWVudEFubm90YXRpb24oZyk7ZGVmYXVsdDppfHx3YXJuKGg/YFVuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICIke2h9IiwgZmFsbGluZyBiYWNrIHRvIGJhc2UgYW5ub3RhdGlvbi5gOiJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLiIpO3JldHVybiBuZXcgQW5ub3RhdGlvbihnKX19c3RhdGljIGFzeW5jIF9nZXRQYWdlSW5kZXgoZSx0LGEpe3RyeXtjb25zdCByPWF3YWl0IGUuZmV0Y2hJZlJlZkFzeW5jKHQpO2lmKCEociBpbnN0YW5jZW9mIERpY3QpKXJldHVybi0xO2NvbnN0IGk9ci5nZXRSYXcoIlAiKTtpZihpIGluc3RhbmNlb2YgUmVmKXRyeXtyZXR1cm4gYXdhaXQgYS5lbnN1cmVDYXRhbG9nKCJnZXRQYWdlSW5kZXgiLFtpXSl9Y2F0Y2goZSl7aW5mbyhgX2dldFBhZ2VJbmRleCAtLSBub3QgYSB2YWxpZCBwYWdlIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKHIuaGFzKCJLaWRzIikpcmV0dXJuLTE7Y29uc3Qgbj1hd2FpdCBhLmVuc3VyZURvYygibnVtUGFnZXMiKTtmb3IobGV0IGU9MDtlPG47ZSsrKXtjb25zdCByPWF3YWl0IGEuZ2V0UGFnZShlKSxpPWF3YWl0IGEuZW5zdXJlKHIsImFubm90YXRpb25zIik7Zm9yKGNvbnN0IGEgb2YgaSlpZihhIGluc3RhbmNlb2YgUmVmJiZpc1JlZnNFcXVhbChhLHQpKXJldHVybiBlfX1jYXRjaChlKXt3YXJuKGBfZ2V0UGFnZUluZGV4OiAiJHtlfSIuYCl9cmV0dXJuLTF9c3RhdGljIGdlbmVyYXRlSW1hZ2VzKGUsdCxhKXtpZighYSl7d2FybigiZ2VuZXJhdGVJbWFnZXM6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBjYW5ub3Qgc2F2ZSBvciBwcmludCBzb21lIGFubm90YXRpb25zIHdpdGggaW1hZ2VzLiIpO3JldHVybiBudWxsfWxldCByO2Zvcihjb25zdHtiaXRtYXBJZDphLGJpdG1hcDppfW9mIGUpaWYoaSl7cnx8PW5ldyBNYXA7ci5zZXQoYSxTdGFtcEFubm90YXRpb24uY3JlYXRlSW1hZ2UoaSx0KSl9cmV0dXJuIHJ9c3RhdGljIGFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsYSxyLGkpe2NvbnN0IG49ZS54cmVmO2xldCBzO2NvbnN0IG89W10se2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOmN9PWUub3B0aW9ucztmb3IoY29uc3QgbCBvZiBhKWlmKCFsLmRlbGV0ZWQpc3dpdGNoKGwuYW5ub3RhdGlvblR5cGUpe2Nhc2UgZzppZighcyl7Y29uc3QgZT1uZXcgRGljdChuKTtlLnNldElmTmFtZSgiQmFzZUZvbnQiLCJIZWx2ZXRpY2EiKTtlLnNldElmTmFtZSgiVHlwZSIsIkZvbnQiKTtlLnNldElmTmFtZSgiU3VidHlwZSIsIlR5cGUxIik7ZS5zZXRJZk5hbWUoIkVuY29kaW5nIiwiV2luQW5zaUVuY29kaW5nIik7cz1uLmdldE5ld1RlbXBvcmFyeVJlZigpO2kucHV0KHMse2RhdGE6ZX0pfW8ucHVzaChGcmVlVGV4dEFubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbihuLGwsaSx7ZXZhbHVhdG9yOmUsdGFzazp0LGJhc2VGb250UmVmOnN9KSk7YnJlYWs7Y2FzZSBwOmwucXVhZFBvaW50cz9vLnB1c2goSGlnaGxpZ2h0QW5ub3RhdGlvbi5jcmVhdGVOZXdBbm5vdGF0aW9uKG4sbCxpKSk6by5wdXNoKElua0Fubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbihuLGwsaSkpO2JyZWFrO2Nhc2UgYjpvLnB1c2goSW5rQW5ub3RhdGlvbi5jcmVhdGVOZXdBbm5vdGF0aW9uKG4sbCxpKSk7YnJlYWs7Y2FzZSBtOmNvbnN0IGE9Yz9hd2FpdChyPy5nZXQobC5iaXRtYXBJZCkpOm51bGw7aWYoYT8uaW1hZ2VTdHJlYW0pe2NvbnN0e2ltYWdlU3RyZWFtOmUsc21hc2tTdHJlYW06dH09YTtpZih0KXtjb25zdCBhPW4uZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7aS5wdXQoYSx7ZGF0YTp0fSk7ZS5kaWN0LnNldCgiU01hc2siLGEpfWNvbnN0IHI9YS5pbWFnZVJlZj1uLmdldE5ld1RlbXBvcmFyeVJlZigpO2kucHV0KHIse2RhdGE6ZX0pO2EuaW1hZ2VTdHJlYW09YS5zbWFza1N0cmVhbT1udWxsfW8ucHVzaChTdGFtcEFubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbihuLGwsaSx7aW1hZ2U6YX0pKTticmVhaztjYXNlIHk6by5wdXNoKFN0YW1wQW5ub3RhdGlvbi5jcmVhdGVOZXdBbm5vdGF0aW9uKG4sbCxpLHt9KSl9cmV0dXJue2Fubm90YXRpb25zOihhd2FpdCBQcm9taXNlLmFsbChvKSkuZmxhdCgpfX1zdGF0aWMgYXN5bmMgcHJpbnROZXdBbm5vdGF0aW9ucyhlLHQsYSxyLGkpe2lmKCFyKXJldHVybiBudWxsO2NvbnN0e29wdGlvbnM6bix4cmVmOnN9PXQsbz1bXTtmb3IoY29uc3QgYyBvZiByKWlmKCFjLmRlbGV0ZWQpc3dpdGNoKGMuYW5ub3RhdGlvblR5cGUpe2Nhc2UgZzpvLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLHMsYyx7ZXZhbHVhdG9yOnQsdGFzazphLGV2YWx1YXRvck9wdGlvbnM6bn0pKTticmVhaztjYXNlIHA6Yy5xdWFkUG9pbnRzP28ucHVzaChIaWdobGlnaHRBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLHMsYyx7ZXZhbHVhdG9yT3B0aW9uczpufSkpOm8ucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLHMsYyx7ZXZhbHVhdG9yT3B0aW9uczpufSkpO2JyZWFrO2Nhc2UgYjpvLnB1c2goSW5rQW5ub3RhdGlvbi5jcmVhdGVOZXdQcmludEFubm90YXRpb24oZSxzLGMse2V2YWx1YXRvck9wdGlvbnM6bn0pKTticmVhaztjYXNlIG06Y29uc3Qgcj1uLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkP2F3YWl0KGk/LmdldChjLmJpdG1hcElkKSk6bnVsbDtpZihyPy5pbWFnZVN0cmVhbSl7Y29uc3R7aW1hZ2VTdHJlYW06ZSxzbWFza1N0cmVhbTp0fT1yO3QmJmUuZGljdC5zZXQoIlNNYXNrIix0KTtyLmltYWdlUmVmPW5ldyBKcGVnU3RyZWFtKGUsZS5sZW5ndGgpO3IuaW1hZ2VTdHJlYW09ci5zbWFza1N0cmVhbT1udWxsfW8ucHVzaChTdGFtcEFubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKGUscyxjLHtpbWFnZTpyLGV2YWx1YXRvck9wdGlvbnM6bn0pKTticmVhaztjYXNlIHk6by5wdXNoKFN0YW1wQW5ub3RhdGlvbi5jcmVhdGVOZXdQcmludEFubm90YXRpb24oZSxzLGMse2V2YWx1YXRvck9wdGlvbnM6bn0pKX1yZXR1cm4gUHJvbWlzZS5hbGwobyl9fWZ1bmN0aW9uIGdldFJnYkNvbG9yKGUsdD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMykpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O2NvbnN0IGE9dHx8bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpDb2xvclNwYWNlVXRpbHMuZ3JheS5nZXRSZ2JJdGVtKGUsMCxhLDApO3JldHVybiBhO2Nhc2UgMzpDb2xvclNwYWNlVXRpbHMucmdiLmdldFJnYkl0ZW0oZSwwLGEsMCk7cmV0dXJuIGE7Y2FzZSA0OkNvbG9yU3BhY2VVdGlscy5jbXlrLmdldFJnYkl0ZW0oZSwwLGEsMCk7cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gZ2V0UGRmQ29sb3JBcnJheShlLHQ9bnVsbCl7cmV0dXJuIGUmJkFycmF5LmZyb20oZSxlPT5lLzI1NSl8fHR9ZnVuY3Rpb24gZ2V0UXVhZFBvaW50cyhlLHQpe2NvbnN0IGE9ZS5nZXRBcnJheSgiUXVhZFBvaW50cyIpO2lmKCFpc051bWJlckFycmF5KGEsbnVsbCl8fDA9PT1hLmxlbmd0aHx8YS5sZW5ndGglOD4wKXJldHVybiBudWxsO2NvbnN0IHI9bmV3IEZsb2F0MzJBcnJheShhLmxlbmd0aCk7Zm9yKGxldCBlPTAsaT1hLmxlbmd0aDtlPGk7ZSs9OCl7Y29uc3RbaSxuLHMsbyxjLGwsaCx1XT1hLnNsaWNlKGUsZSs4KSxkPU1hdGgubWluKGkscyxjLGgpLGY9TWF0aC5tYXgoaSxzLGMsaCksZz1NYXRoLm1pbihuLG8sbCx1KSxwPU1hdGgubWF4KG4sbyxsLHUpO2lmKG51bGwhPT10JiYoZDx0WzBdfHxmPnRbMl18fGc8dFsxXXx8cD50WzNdKSlyZXR1cm4gbnVsbDtyLnNldChbZCxwLGYscCxkLGcsZixnXSxlKX1yZXR1cm4gcn1mdW5jdGlvbiBnZXRUcmFuc2Zvcm1NYXRyaXgoZSx0LGEpe2NvbnN0IHI9bmV3IEZsb2F0MzJBcnJheShbMS8wLDEvMCwtMS8wLC0xLzBdKTtVdGlsLmF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHQsYSxyKTtjb25zdFtpLG4scyxvXT1yO2lmKGk9PT1zfHxuPT09bylyZXR1cm5bMSwwLDAsMSxlWzBdLGVbMV1dO2NvbnN0IGM9KGVbMl0tZVswXSkvKHMtaSksbD0oZVszXS1lWzFdKS8oby1uKTtyZXR1cm5bYywwLDAsbCxlWzBdLWkqYyxlWzFdLW4qbF19Y2xhc3MgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtjb25zdHtkaWN0OnQseHJlZjphLGFubm90YXRpb25HbG9iYWxzOnIscmVmOmksb3JwaGFuRmllbGRzOm59PWUscz1uPy5nZXQoaSk7cyYmdC5zZXQoIlBhcmVudCIscyk7dGhpcy5zZXRUaXRsZSh0LmdldCgiVCIpKTt0aGlzLnNldENvbnRlbnRzKHQuZ2V0KCJDb250ZW50cyIpKTt0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUodC5nZXQoIk0iKSk7dGhpcy5zZXRGbGFncyh0LmdldCgiRiIpKTt0aGlzLnNldFJlY3RhbmdsZSh0LmdldEFycmF5KCJSZWN0IikpO3RoaXMuc2V0Q29sb3IodC5nZXRBcnJheSgiQyIpKTt0aGlzLnNldEJvcmRlclN0eWxlKHQpO3RoaXMuc2V0QXBwZWFyYW5jZSh0KTt0aGlzLnNldE9wdGlvbmFsQ29udGVudCh0KTtjb25zdCBvPXQuZ2V0KCJNSyIpO3RoaXMuc2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhvKTt0aGlzLnNldFJvdGF0aW9uKG8sdCk7dGhpcy5yZWY9ZS5yZWYgaW5zdGFuY2VvZiBSZWY/ZS5yZWY6bnVsbDt0aGlzLl9zdHJlYW1zPVtdO3RoaXMuYXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSk7Y29uc3QgYz0hISh0aGlzLmZsYWdzJmopLGw9ISEodGhpcy5mbGFncyZYKTt0aGlzLmRhdGE9e2Fubm90YXRpb25GbGFnczp0aGlzLmZsYWdzLGJvcmRlclN0eWxlOnRoaXMuYm9yZGVyU3R5bGUsY29sb3I6dGhpcy5jb2xvcixiYWNrZ3JvdW5kQ29sb3I6dGhpcy5iYWNrZ3JvdW5kQ29sb3IsYm9yZGVyQ29sb3I6dGhpcy5ib3JkZXJDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLGNvbnRlbnRzT2JqOnRoaXMuX2NvbnRlbnRzLGhhc0FwcGVhcmFuY2U6ISF0aGlzLmFwcGVhcmFuY2UsaWQ6ZS5pZCxtb2RpZmljYXRpb25EYXRlOnRoaXMubW9kaWZpY2F0aW9uRGF0ZSxyZWN0OnRoaXMucmVjdGFuZ2xlLHN1YnR5cGU6ZS5zdWJ0eXBlLGhhc093bkNhbnZhczohMSxub1JvdGF0ZTohISh0aGlzLmZsYWdzJl8pLG5vSFRNTDpjJiZsLGlzRWRpdGFibGU6ITEsc3RydWN0UGFyZW50Oi0xfTtpZihyLnN0cnVjdFRyZWVSb290KXtsZXQgYT10LmdldCgiU3RydWN0UGFyZW50Iik7dGhpcy5kYXRhLnN0cnVjdFBhcmVudD1hPU51bWJlci5pc0ludGVnZXIoYSkmJmE+PTA/YTotMTtyLnN0cnVjdFRyZWVSb290LmFkZEFubm90YXRpb25JZFRvUGFnZShlLnBhZ2VSZWYsYSl9aWYoZS5jb2xsZWN0RmllbGRzKXtjb25zdCByPXQuZ2V0KCJLaWRzIik7aWYoQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiByKXQgaW5zdGFuY2VvZiBSZWYmJmUucHVzaCh0LnRvU3RyaW5nKCkpOzAhPT1lLmxlbmd0aCYmKHRoaXMuZGF0YS5raWRJZHM9ZSl9dGhpcy5kYXRhLmFjdGlvbnM9Y29sbGVjdEFjdGlvbnMoYSx0LGllKTt0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZSh0KTt0aGlzLmRhdGEucGFnZUluZGV4PWUucGFnZUluZGV4fWNvbnN0IGg9dC5nZXQoIklUIik7aCBpbnN0YW5jZW9mIE5hbWUmJih0aGlzLmRhdGEuaXQ9aC5uYW1lKTt0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD1lLmV2YWx1YXRvck9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7dGhpcy5fZmFsbGJhY2tGb250RGljdD1udWxsO3RoaXMuX25lZWRBcHBlYXJhbmNlcz0hMX1faGFzRmxhZyhlLHQpe3JldHVybiEhKGUmdCl9X2J1aWxkRmxhZ3MoZSx0KXtsZXR7ZmxhZ3M6YX09dGhpcztpZih2b2lkIDA9PT1lKXtpZih2b2lkIDA9PT10KXJldHVybjtyZXR1cm4gdD9hJn5MOmEmfkV8TH1pZihlKXthfD1MO3JldHVybiB0P2EmflV8RTphJn5FfFV9YSY9fihFfFUpO3JldHVybiB0P2Emfkw6YXxMfV9pc1ZpZXdhYmxlKGUpe3JldHVybiF0aGlzLl9oYXNGbGFnKGUsTikmJiF0aGlzLl9oYXNGbGFnKGUsVSl9X2lzUHJpbnRhYmxlKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsTCkmJiF0aGlzLl9oYXNGbGFnKGUsRSkmJiF0aGlzLl9oYXNGbGFnKGUsTil9bXVzdEJlVmlld2VkKGUsdCl7Y29uc3QgYT1lPy5nZXQodGhpcy5kYXRhLmlkKT8ubm9WaWV3O3JldHVybiB2b2lkIDAhPT1hPyFhOnRoaXMudmlld2FibGUmJiF0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsRSl9bXVzdEJlUHJpbnRlZChlKXtjb25zdCB0PWU/LmdldCh0aGlzLmRhdGEuaWQpPy5ub1ByaW50O3JldHVybiB2b2lkIDAhPT10PyF0OnRoaXMucHJpbnRhYmxlfW11c3RCZVZpZXdlZFdoZW5FZGl0aW5nKGUsdD1udWxsKXtyZXR1cm4gZT8hdGhpcy5kYXRhLmlzRWRpdGFibGU6IXQ/Lmhhcyh0aGlzLmRhdGEuaWQpfWdldCB2aWV3YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJigwPT09dGhpcy5mbGFnc3x8dGhpcy5faXNWaWV3YWJsZSh0aGlzLmZsYWdzKSl9Z2V0IHByaW50YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJigwIT09dGhpcy5mbGFncyYmdGhpcy5faXNQcmludGFibGUodGhpcy5mbGFncykpfV9wYXJzZVN0cmluZ0hlbHBlcihlKXtjb25zdCB0PSJzdHJpbmciPT10eXBlb2YgZT9zdHJpbmdUb1BERlN0cmluZyhlKToiIjtyZXR1cm57c3RyOnQsZGlyOnQmJiJydGwiPT09YmlkaSh0KS5kaXI/InJ0bCI6Imx0ciJ9fXNldERlZmF1bHRBcHBlYXJhbmNlKGUpe2NvbnN0e2RpY3Q6dCxhbm5vdGF0aW9uR2xvYmFsczphfT1lLHI9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDp0LGtleToiREEifSl8fGEuYWNyb0Zvcm0uZ2V0KCJEQSIpO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSJzdHJpbmciPT10eXBlb2Ygcj9yOiIiO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9cGFyc2VEZWZhdWx0QXBwZWFyYW5jZSh0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSl9c2V0VGl0bGUoZSl7dGhpcy5fdGl0bGU9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0Q29udGVudHMoZSl7dGhpcy5fY29udGVudHM9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0TW9kaWZpY2F0aW9uRGF0ZShlKXt0aGlzLm1vZGlmaWNhdGlvbkRhdGU9InN0cmluZyI9PXR5cGVvZiBlP2U6bnVsbH1zZXRGbGFncyhlKXt0aGlzLmZsYWdzPU51bWJlci5pc0ludGVnZXIoZSkmJmU+MD9lOjA7dGhpcy5mbGFncyZOJiYiQW5ub3RhdGlvbiIhPT10aGlzLmNvbnN0cnVjdG9yLm5hbWUmJih0aGlzLmZsYWdzXj1OKX1oYXNGbGFnKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsZSl9c2V0UmVjdGFuZ2xlKGUpe3RoaXMucmVjdGFuZ2xlPWxvb2t1cE5vcm1hbFJlY3QoZSxbMCwwLDAsMF0pfXNldENvbG9yKGUpe3RoaXMuY29sb3I9Z2V0UmdiQ29sb3IoZSl9c2V0TGluZUVuZGluZ3MoZSl7dGhpcy5saW5lRW5kaW5ncz1bIk5vbmUiLCJOb25lIl07aWYoQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoKWZvcihsZXQgdD0wO3Q8Mjt0Kyspe2NvbnN0IGE9ZVt0XTtpZihhIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goYS5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPWEubmFtZTtjb250aW51ZX13YXJuKGBJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICR7YX1gKX19c2V0Um90YXRpb24oZSx0KXt0aGlzLnJvdGF0aW9uPTA7bGV0IGE9ZSBpbnN0YW5jZW9mIERpY3Q/ZS5nZXQoIlIiKXx8MDp0LmdldCgiUm90YXRlIil8fDA7aWYoTnVtYmVyLmlzSW50ZWdlcihhKSYmMCE9PWEpe2ElPTM2MDthPDAmJihhKz0zNjApO2ElOTA9PTAmJih0aGlzLnJvdGF0aW9uPWEpfX1zZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQ29sb3JzKGUpe2lmKGUgaW5zdGFuY2VvZiBEaWN0KXt0aGlzLmJvcmRlckNvbG9yPWdldFJnYkNvbG9yKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCk7dGhpcy5iYWNrZ3JvdW5kQ29sb3I9Z2V0UmdiQ29sb3IoZS5nZXRBcnJheSgiQkciKSxudWxsKX1lbHNlIHRoaXMuYm9yZGVyQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbH1zZXRCb3JkZXJTdHlsZShlKXt0aGlzLmJvcmRlclN0eWxlPW5ldyBBbm5vdGF0aW9uQm9yZGVyU3R5bGU7aWYoZSBpbnN0YW5jZW9mIERpY3QpaWYoZS5oYXMoIkJTIikpe2NvbnN0IHQ9ZS5nZXQoIkJTIik7aWYodCBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9dC5nZXQoIlR5cGUiKTtpZighZXx8aXNOYW1lKGUsIkJvcmRlciIpKXt0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHQuZ2V0KCJXIiksdGhpcy5yZWN0YW5nbGUpO3RoaXMuYm9yZGVyU3R5bGUuc2V0U3R5bGUodC5nZXQoIlMiKSk7dGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodC5nZXRBcnJheSgiRCIpKX19fWVsc2UgaWYoZS5oYXMoIkJvcmRlciIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkJvcmRlciIpO2lmKEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPj0zKXt0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXModFswXSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyh0WzFdKTt0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHRbMl0sdGhpcy5yZWN0YW5nbGUpOzQ9PT10Lmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodFszXSwhMCl9fWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX1zZXRBcHBlYXJhbmNlKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO2NvbnN0IHQ9ZS5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IGE9dC5nZXQoIk4iKTtpZihhIGluc3RhbmNlb2YgQmFzZVN0cmVhbSl7dGhpcy5hcHBlYXJhbmNlPWE7cmV0dXJufWlmKCEoYSBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtjb25zdCByPWUuZ2V0KCJBUyIpO2lmKCEociBpbnN0YW5jZW9mIE5hbWUmJmEuaGFzKHIubmFtZSkpKXJldHVybjtjb25zdCBpPWEuZ2V0KHIubmFtZSk7aSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJih0aGlzLmFwcGVhcmFuY2U9aSl9c2V0T3B0aW9uYWxDb250ZW50KGUpe3RoaXMub2M9bnVsbDtjb25zdCB0PWUuZ2V0KCJPQyIpO3QgaW5zdGFuY2VvZiBOYW1lP3dhcm4oInNldE9wdGlvbmFsQ29udGVudDogU3VwcG9ydCBmb3IgL05hbWUtZW50cnkgaXMgbm90IGltcGxlbWVudGVkLiIpOnQgaW5zdGFuY2VvZiBEaWN0JiYodGhpcy5vYz10KX1hc3luYyBsb2FkUmVzb3VyY2VzKGUsdCl7Y29uc3QgYT1hd2FpdCB0LmRpY3QuZ2V0QXN5bmMoIlJlc291cmNlcyIpO2EmJmF3YWl0IE9iamVjdExvYWRlci5sb2FkKGEsZSxhLnhyZWYpO3JldHVybiBhfWFzeW5jIGdldE9wZXJhdG9yTGlzdChlLHQsYSxyKXtjb25zdHtoYXNPd25DYW52YXM6aSxpZDpuLHJlY3Q6b309dGhpcy5kYXRhO2xldCBjPXRoaXMuYXBwZWFyYW5jZTtjb25zdCBsPSEhKGkmJmEmcyk7aWYobCYmKDA9PT10aGlzLndpZHRofHwwPT09dGhpcy5oZWlnaHQpKXt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPSExO3JldHVybntvcExpc3Q6bmV3IE9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fWlmKCFjKXtpZighbClyZXR1cm57b3BMaXN0Om5ldyBPcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfTtjPW5ldyBTdHJpbmdTdHJlYW0oIiIpO2MuZGljdD1uZXcgRGljdH1jb25zdCBoPWMuZGljdCx1PWF3YWl0IHRoaXMubG9hZFJlc291cmNlcyhnYSxjKSxkPWxvb2t1cFJlY3QoaC5nZXRBcnJheSgiQkJveCIpLFswLDAsMSwxXSksZj1sb29rdXBNYXRyaXgoaC5nZXRBcnJheSgiTWF0cml4IiksZmEpLGc9Z2V0VHJhbnNmb3JtTWF0cml4KG8sZCxmKSxwPW5ldyBPcGVyYXRvckxpc3Q7bGV0IG07dGhpcy5vYyYmKG09YXdhaXQgZS5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpKTt2b2lkIDAhPT1tJiZwLmFkZE9wKEN0LFsiT0MiLG1dKTtwLmFkZE9wKEJ0LFtuLG8sZyxmLGxdKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmMsdGFzazp0LHJlc291cmNlczp1LG9wZXJhdG9yTGlzdDpwLGZhbGxiYWNrRm9udERpY3Q6dGhpcy5fZmFsbGJhY2tGb250RGljdH0pO3AuYWRkT3AoUnQsW10pO3ZvaWQgMCE9PW0mJnAuYWRkT3AodnQsW10pO3RoaXMucmVzZXQoKTtyZXR1cm57b3BMaXN0OnAsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOmx9fWFzeW5jIHNhdmUoZSx0LGEscil7cmV0dXJuIG51bGx9Z2V0IG92ZXJsYXlzVGV4dENvbnRlbnQoKXtyZXR1cm4hMX1nZXQgaGFzVGV4dENvbnRlbnQoKXtyZXR1cm4hMX1hc3luYyBleHRyYWN0VGV4dENvbnRlbnQoZSx0LGEpe2lmKCF0aGlzLmFwcGVhcmFuY2UpcmV0dXJuO2NvbnN0IHI9YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKHBhLHRoaXMuYXBwZWFyYW5jZSksaT1bXSxuPVtdO2xldCBzPW51bGw7Y29uc3Qgbz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlKGUsdCl7Zm9yKGNvbnN0IHQgb2YgZS5pdGVtcylpZih2b2lkIDAhPT10LnN0cil7c3x8PXQudHJhbnNmb3JtLnNsaWNlKC0yKTtuLnB1c2godC5zdHIpO2lmKHQuaGFzRU9MKXtpLnB1c2gobi5qb2luKCIiKS50cmltRW5kKCkpO24ubGVuZ3RoPTB9fX19O2F3YWl0IGUuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTp0aGlzLmFwcGVhcmFuY2UsdGFzazp0LHJlc291cmNlczpyLGluY2x1ZGVNYXJrZWRDb250ZW50OiEwLGtlZXBXaGl0ZVNwYWNlOiEwLHNpbms6byx2aWV3Qm94OmF9KTt0aGlzLnJlc2V0KCk7bi5sZW5ndGgmJmkucHVzaChuLmpvaW4oIiIpLnRyaW1FbmQoKSk7aWYoaS5sZW5ndGg+MXx8aVswXSl7Y29uc3QgZT10aGlzLmFwcGVhcmFuY2UuZGljdCx0PWxvb2t1cFJlY3QoZS5nZXRBcnJheSgiQkJveCIpLG51bGwpLGE9bG9va3VwTWF0cml4KGUuZ2V0QXJyYXkoIk1hdHJpeCIpLG51bGwpO3RoaXMuZGF0YS50ZXh0UG9zaXRpb249dGhpcy5fdHJhbnNmb3JtUG9pbnQocyx0LGEpO3RoaXMuZGF0YS50ZXh0Q29udGVudD1pfX1fdHJhbnNmb3JtUG9pbnQoZSx0LGEpe2NvbnN0e3JlY3Q6cn09dGhpcy5kYXRhO3R8fD1bMCwwLDEsMV07YXx8PVsxLDAsMCwxLDAsMF07Y29uc3QgaT1nZXRUcmFuc2Zvcm1NYXRyaXgocix0LGEpO2lbNF0tPXJbMF07aVs1XS09clsxXTtjb25zdCBuPWUuc2xpY2UoKTtVdGlsLmFwcGx5VHJhbnNmb3JtKG4saSk7VXRpbC5hcHBseVRyYW5zZm9ybShuLGEpO3JldHVybiBufWdldEZpZWxkT2JqZWN0KCl7cmV0dXJuIHRoaXMuZGF0YS5raWRJZHM/e2lkOnRoaXMuZGF0YS5pZCxhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IsdHlwZToiIixraWRJZHM6dGhpcy5kYXRhLmtpZElkcyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgscm90YXRpb246dGhpcy5yb3RhdGlvbn06bnVsbH1yZXNldCgpe2Zvcihjb25zdCBlIG9mIHRoaXMuX3N0cmVhbXMpZS5yZXNldCgpfV9jb25zdHJ1Y3RGaWVsZE5hbWUoZSl7aWYoIWUuaGFzKCJUIikmJiFlLmhhcygiUGFyZW50Iikpe3dhcm4oIlVua25vd24gZmllbGQgbmFtZSwgZmFsbGluZyBiYWNrIHRvIGVtcHR5IGZpZWxkIG5hbWUuIik7cmV0dXJuIiJ9aWYoIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4gc3RyaW5nVG9QREZTdHJpbmcoZS5nZXQoIlQiKSk7Y29uc3QgdD1bXTtlLmhhcygiVCIpJiZ0LnVuc2hpZnQoc3RyaW5nVG9QREZTdHJpbmcoZS5nZXQoIlQiKSkpO2xldCBhPWU7Y29uc3Qgcj1uZXcgUmVmU2V0O2Uub2JqSWQmJnIucHV0KGUub2JqSWQpO2Zvcig7YS5oYXMoIlBhcmVudCIpOyl7YT1hLmdldCgiUGFyZW50Iik7aWYoIShhIGluc3RhbmNlb2YgRGljdCl8fGEub2JqSWQmJnIuaGFzKGEub2JqSWQpKWJyZWFrO2Eub2JqSWQmJnIucHV0KGEub2JqSWQpO2EuaGFzKCJUIikmJnQudW5zaGlmdChzdHJpbmdUb1BERlN0cmluZyhhLmdldCgiVCIpKSl9cmV0dXJuIHQuam9pbigiLiIpfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXX1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdfX1jbGFzcyBBbm5vdGF0aW9uQm9yZGVyU3R5bGV7Y29uc3RydWN0b3IoKXt0aGlzLndpZHRoPTE7dGhpcy5yYXdXaWR0aD0xO3RoaXMuc3R5bGU9UTt0aGlzLmRhc2hBcnJheT1bM107dGhpcy5ob3Jpem9udGFsQ29ybmVyUmFkaXVzPTA7dGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz0wfXNldFdpZHRoKGUsdD1bMCwwLDAsMF0pe2lmKGUgaW5zdGFuY2VvZiBOYW1lKXRoaXMud2lkdGg9MDtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoZT4wKXt0aGlzLnJhd1dpZHRoPWU7Y29uc3QgYT0odFsyXS10WzBdKS8yLHI9KHRbM10tdFsxXSkvMjtpZihhPjAmJnI+MCYmKGU+YXx8ZT5yKSl7d2FybihgQW5ub3RhdGlvbkJvcmRlclN0eWxlLnNldFdpZHRoIC0gaWdub3Jpbmcgd2lkdGg6ICR7ZX1gKTtlPTF9fXRoaXMud2lkdGg9ZX19c2V0U3R5bGUoZSl7aWYoZSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTIjp0aGlzLnN0eWxlPVE7YnJlYWs7Y2FzZSJEIjp0aGlzLnN0eWxlPWVlO2JyZWFrO2Nhc2UiQiI6dGhpcy5zdHlsZT10ZTticmVhaztjYXNlIkkiOnRoaXMuc3R5bGU9YWU7YnJlYWs7Y2FzZSJVIjp0aGlzLnN0eWxlPXJlfX1zZXREYXNoQXJyYXkoZSx0PSExKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgYT0hMCxyPSEwO2Zvcihjb25zdCB0IG9mIGUpe2lmKCEoK3Q+PTApKXthPSExO2JyZWFrfXQ+MCYmKHI9ITEpfWlmKDA9PT1lLmxlbmd0aHx8YSYmIXIpe3RoaXMuZGFzaEFycmF5PWU7dCYmdGhpcy5zZXRTdHlsZShOYW1lLmdldCgiRCIpKX1lbHNlIHRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfXNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX1zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19Y2xhc3MgTWFya3VwQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO2lmKHQuaGFzKCJJUlQiKSl7Y29uc3QgZT10LmdldFJhdygiSVJUIik7dGhpcy5kYXRhLmluUmVwbHlUbz1lIGluc3RhbmNlb2YgUmVmP2UudG9TdHJpbmcoKTpudWxsO2NvbnN0IGE9dC5nZXQoIlJUIik7dGhpcy5kYXRhLnJlcGx5VHlwZT1hIGluc3RhbmNlb2YgTmFtZT9hLm5hbWU6Un1sZXQgYT1udWxsO2lmKHRoaXMuZGF0YS5yZXBseVR5cGU9PT1EKXtjb25zdCBlPXQuZ2V0KCJJUlQiKTt0aGlzLnNldFRpdGxlKGUuZ2V0KCJUIikpO3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENvbnRlbnRzKGUuZ2V0KCJDb250ZW50cyIpKTt0aGlzLmRhdGEuY29udGVudHNPYmo9dGhpcy5fY29udGVudHM7aWYoZS5oYXMoIkNyZWF0aW9uRGF0ZSIpKXt0aGlzLnNldENyZWF0aW9uRGF0ZShlLmdldCgiQ3JlYXRpb25EYXRlIikpO3RoaXMuZGF0YS5jcmVhdGlvbkRhdGU9dGhpcy5jcmVhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEuY3JlYXRpb25EYXRlPW51bGw7aWYoZS5oYXMoIk0iKSl7dGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKGUuZ2V0KCJNIikpO3RoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPXRoaXMubW9kaWZpY2F0aW9uRGF0ZX1lbHNlIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPW51bGw7YT1lLmdldFJhdygiUG9wdXAiKTtpZihlLmhhcygiQyIpKXt0aGlzLnNldENvbG9yKGUuZ2V0QXJyYXkoIkMiKSk7dGhpcy5kYXRhLmNvbG9yPXRoaXMuY29sb3J9ZWxzZSB0aGlzLmRhdGEuY29sb3I9bnVsbH1lbHNle3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENyZWF0aW9uRGF0ZSh0LmdldCgiQ3JlYXRpb25EYXRlIikpO3RoaXMuZGF0YS5jcmVhdGlvbkRhdGU9dGhpcy5jcmVhdGlvbkRhdGU7YT10LmdldFJhdygiUG9wdXAiKTt0LmhhcygiQyIpfHwodGhpcy5kYXRhLmNvbG9yPW51bGwpfXRoaXMuZGF0YS5wb3B1cFJlZj1hIGluc3RhbmNlb2YgUmVmP2EudG9TdHJpbmcoKTpudWxsO3QuaGFzKCJSQyIpJiYodGhpcy5kYXRhLnJpY2hUZXh0PVhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwodC5nZXQoIlJDIikpKX1zZXRDcmVhdGlvbkRhdGUoZSl7dGhpcy5jcmVhdGlvbkRhdGU9InN0cmluZyI9PXR5cGVvZiBlP2U6bnVsbH1fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZSxleHRyYTp0LHN0cm9rZUNvbG9yOmEsZmlsbENvbG9yOnIsYmxlbmRNb2RlOmksc3Ryb2tlQWxwaGE6bixmaWxsQWxwaGE6cyxwb2ludHNDYWxsYmFjazpvfSl7Y29uc3QgYz10aGlzLmRhdGEucmVjdD1bMS8wLDEvMCwtMS8wLC0xLzBdLGw9WyJxIl07dCYmbC5wdXNoKHQpO2EmJmwucHVzaChgJHthWzBdfSAke2FbMV19ICR7YVsyXX0gUkdgKTtyJiZsLnB1c2goYCR7clswXX0gJHtyWzFdfSAke3JbMl19IHJnYCk7Y29uc3QgaD10aGlzLmRhdGEucXVhZFBvaW50c3x8RmxvYXQzMkFycmF5LmZyb20oW3RoaXMucmVjdGFuZ2xlWzBdLHRoaXMucmVjdGFuZ2xlWzNdLHRoaXMucmVjdGFuZ2xlWzJdLHRoaXMucmVjdGFuZ2xlWzNdLHRoaXMucmVjdGFuZ2xlWzBdLHRoaXMucmVjdGFuZ2xlWzFdLHRoaXMucmVjdGFuZ2xlWzJdLHRoaXMucmVjdGFuZ2xlWzFdXSk7Zm9yKGxldCBlPTAsdD1oLmxlbmd0aDtlPHQ7ZSs9OCl7Y29uc3QgdD1vKGwsaC5zdWJhcnJheShlLGUrOCkpO1V0aWwucmVjdEJvdW5kaW5nQm94KC4uLnQsYyl9bC5wdXNoKCJRIik7Y29uc3QgdT1uZXcgRGljdChlKSxkPW5ldyBEaWN0KGUpO2Quc2V0SWZOYW1lKCJTdWJ0eXBlIiwiRm9ybSIpO2NvbnN0IGY9bmV3IFN0cmluZ1N0cmVhbShsLmpvaW4oIiAiKSk7Zi5kaWN0PWQ7dS5zZXQoIkZtMCIsZik7Y29uc3QgZz1uZXcgRGljdChlKTtpJiZnLnNldElmTmFtZSgiQk0iLGkpO2cuc2V0SWZOdW1iZXIoIkNBIixuKTtnLnNldElmTnVtYmVyKCJjYSIscyk7Y29uc3QgcD1uZXcgRGljdChlKTtwLnNldCgiR1MwIixnKTtjb25zdCBtPW5ldyBEaWN0KGUpO20uc2V0KCJFeHRHU3RhdGUiLHApO20uc2V0KCJYT2JqZWN0Iix1KTtjb25zdCBiPW5ldyBEaWN0KGUpO2Iuc2V0KCJSZXNvdXJjZXMiLG0pO2Iuc2V0KCJCQm94IixjKTt0aGlzLmFwcGVhcmFuY2U9bmV3IFN0cmluZ1N0cmVhbSgiL0dTMCBncyAvRm0wIERvIik7dGhpcy5hcHBlYXJhbmNlLmRpY3Q9Yjt0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlLGYpfXN0YXRpYyBhc3luYyBjcmVhdGVOZXdBbm5vdGF0aW9uKGUsdCxhLHIpe2NvbnN0IGk9dC5yZWZ8fD1lLmdldE5ld1RlbXBvcmFyeVJlZigpLG49YXdhaXQgdGhpcy5jcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKHQsZSxyKTtsZXQgcztpZihuKXtjb25zdCByPWUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7cz10aGlzLmNyZWF0ZU5ld0RpY3QodCxlLHthcFJlZjpyfSk7YS5wdXQocix7ZGF0YTpufSl9ZWxzZSBzPXRoaXMuY3JlYXRlTmV3RGljdCh0LGUse30pO051bWJlci5pc0ludGVnZXIodC5wYXJlbnRUcmVlSWQpJiZzLnNldCgiU3RydWN0UGFyZW50Iix0LnBhcmVudFRyZWVJZCk7YS5wdXQoaSx7ZGF0YTpzfSk7Y29uc3Qgbz17cmVmOml9LHtwb3B1cDpjfT10O2lmKGMpe2lmKGMuZGVsZXRlZCl7cy5kZWxldGUoIlBvcHVwIik7cy5kZWxldGUoIkNvbnRlbnRzIik7cy5kZWxldGUoIlJDIik7cmV0dXJuIG99Y29uc3QgdD1jLnJlZnx8PWUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7Yy5wYXJlbnQ9aTtjb25zdCByPVBvcHVwQW5ub3RhdGlvbi5jcmVhdGVOZXdEaWN0KGMsZSk7YS5wdXQodCx7ZGF0YTpyfSk7cy5zZXRJZkRlZmluZWQoIkNvbnRlbnRzIixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKGMuY29udGVudHMpKTtzLnNldCgiUG9wdXAiLHQpO3JldHVybltvLHtyZWY6dH1dfXJldHVybiBvfXN0YXRpYyBhc3luYyBjcmVhdGVOZXdQcmludEFubm90YXRpb24oZSx0LGEscil7Y29uc3QgaT1hd2FpdCB0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oYSx0LHIpLG49dGhpcy5jcmVhdGVOZXdEaWN0KGEsdCxpP3thcDppfTp7fSkscz1uZXcgdGhpcy5wcm90b3R5cGUuY29uc3RydWN0b3Ioe2RpY3Q6bix4cmVmOnQsYW5ub3RhdGlvbkdsb2JhbHM6ZSxldmFsdWF0b3JPcHRpb25zOnIuZXZhbHVhdG9yT3B0aW9uc30pO2EucmVmJiYocy5yZWY9cy5yZWZUb1JlcGxhY2U9YS5yZWYpO3JldHVybiBzfX1jbGFzcyBXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphLGFubm90YXRpb25HbG9iYWxzOnJ9PWUsaT10aGlzLmRhdGE7dGhpcy5fbmVlZEFwcGVhcmFuY2VzPWUubmVlZEFwcGVhcmFuY2VzO2kuYW5ub3RhdGlvblR5cGU9TS5XSURHRVQ7dm9pZCAwPT09aS5maWVsZE5hbWUmJihpLmZpZWxkTmFtZT10aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUodCkpO3ZvaWQgMD09PWkuYWN0aW9ucyYmKGkuYWN0aW9ucz1jb2xsZWN0QWN0aW9ucyhhLHQsaWUpKTtsZXQgbj1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJWIixnZXRBcnJheTohMH0pO2kuZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUobik7Y29uc3Qgcz1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJEViIsZ2V0QXJyYXk6ITB9KTtpLmRlZmF1bHRGaWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShzKTtpZih2b2lkIDA9PT1uJiZyLnhmYURhdGFzZXRzKXtjb25zdCBlPXRoaXMuX3RpdGxlLnN0cjtpZihlKXt0aGlzLl9oYXNWYWx1ZUZyb21YRkE9ITA7aS5maWVsZFZhbHVlPW49ci54ZmFEYXRhc2V0cy5nZXRWYWx1ZShlKX19dm9pZCAwPT09biYmbnVsbCE9PWkuZGVmYXVsdEZpZWxkVmFsdWUmJihpLmZpZWxkVmFsdWU9aS5kZWZhdWx0RmllbGRWYWx1ZSk7aS5hbHRlcm5hdGl2ZVRleHQ9c3RyaW5nVG9QREZTdHJpbmcodC5nZXQoIlRVIil8fCIiKTt0aGlzLnNldERlZmF1bHRBcHBlYXJhbmNlKGUpO2kuaGFzQXBwZWFyYW5jZXx8PXRoaXMuX25lZWRBcHBlYXJhbmNlcyYmdm9pZCAwIT09aS5maWVsZFZhbHVlJiZudWxsIT09aS5maWVsZFZhbHVlO2NvbnN0IG89Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDp0LGtleToiRlQifSk7aS5maWVsZFR5cGU9byBpbnN0YW5jZW9mIE5hbWU/by5uYW1lOm51bGw7Y29uc3QgYz1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJEUiJ9KSxsPXIuYWNyb0Zvcm0uZ2V0KCJEUiIpLGg9dGhpcy5hcHBlYXJhbmNlPy5kaWN0LmdldCgiUmVzb3VyY2VzIik7dGhpcy5fZmllbGRSZXNvdXJjZXM9e2xvY2FsUmVzb3VyY2VzOmMsYWNyb0Zvcm1SZXNvdXJjZXM6bCxhcHBlYXJhbmNlUmVzb3VyY2VzOmgsbWVyZ2VkUmVzb3VyY2VzOkRpY3QubWVyZ2Uoe3hyZWY6YSxkaWN0QXJyYXk6W2MsaCxsXSxtZXJnZVN1YkRpY3RzOiEwfSl9O2kuZmllbGRGbGFncz1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJGZiJ9KTsoIU51bWJlci5pc0ludGVnZXIoaS5maWVsZEZsYWdzKXx8aS5maWVsZEZsYWdzPDApJiYoaS5maWVsZEZsYWdzPTApO2kucGFzc3dvcmQ9dGhpcy5oYXNGaWVsZEZsYWcoRyk7aS5yZWFkT25seT10aGlzLmhhc0ZpZWxkRmxhZyhxKTtpLnJlcXVpcmVkPXRoaXMuaGFzRmllbGRGbGFnKEgpO2kuaGlkZGVuPXRoaXMuX2hhc0ZsYWcoaS5hbm5vdGF0aW9uRmxhZ3MsRSl8fHRoaXMuX2hhc0ZsYWcoaS5hbm5vdGF0aW9uRmxhZ3MsVSl9X2RlY29kZUZvcm1WYWx1ZShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmZpbHRlcihlPT4ic3RyaW5nIj09dHlwZW9mIGUpLm1hcChlPT5zdHJpbmdUb1BERlN0cmluZyhlKSk6ZSBpbnN0YW5jZW9mIE5hbWU/c3RyaW5nVG9QREZTdHJpbmcoZS5uYW1lKToic3RyaW5nIj09dHlwZW9mIGU/c3RyaW5nVG9QREZTdHJpbmcoZSk6bnVsbH1oYXNGaWVsZEZsYWcoZSl7cmV0dXJuISEodGhpcy5kYXRhLmZpZWxkRmxhZ3MmZSl9X2lzVmlld2FibGUoZSl7cmV0dXJuITB9bXVzdEJlVmlld2VkKGUsdCl7cmV0dXJuIHQ/dGhpcy52aWV3YWJsZTpzdXBlci5tdXN0QmVWaWV3ZWQoZSx0KSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxVKX1nZXRSb3RhdGlvbk1hdHJpeChlKXtsZXQgdD1lPy5nZXQodGhpcy5kYXRhLmlkKT8ucm90YXRpb247dm9pZCAwPT09dCYmKHQ9dGhpcy5yb3RhdGlvbik7cmV0dXJuIDA9PT10P2ZhOmdldFJvdGF0aW9uTWF0cml4KHQsdGhpcy53aWR0aCx0aGlzLmhlaWdodCl9Z2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGUpe2xldCB0PWU/LmdldCh0aGlzLmRhdGEuaWQpPy5yb3RhdGlvbjt2b2lkIDA9PT10JiYodD10aGlzLnJvdGF0aW9uKTtpZighdGhpcy5iYWNrZ3JvdW5kQ29sb3ImJiF0aGlzLmJvcmRlckNvbG9yKXJldHVybiIiO2NvbnN0IGE9MD09PXR8fDE4MD09PXQ/YDAgMCAke3RoaXMud2lkdGh9ICR7dGhpcy5oZWlnaHR9IHJlYDpgMCAwICR7dGhpcy5oZWlnaHR9ICR7dGhpcy53aWR0aH0gcmVgO2xldCByPSIiO3RoaXMuYmFja2dyb3VuZENvbG9yJiYocj1gJHtnZXRQZGZDb2xvcih0aGlzLmJhY2tncm91bmRDb2xvciwhMCl9ICR7YX0gZiBgKTtpZih0aGlzLmJvcmRlckNvbG9yKXtyKz1gJHt0aGlzLmJvcmRlclN0eWxlLndpZHRofHwxfSB3ICR7Z2V0UGRmQ29sb3IodGhpcy5ib3JkZXJDb2xvciwhMSl9ICR7YX0gUyBgfXJldHVybiByfWFzeW5jIGdldE9wZXJhdG9yTGlzdChlLHQsYSxyKXtpZihhJmwmJiEodGhpcyBpbnN0YW5jZW9mIFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24pJiYhdGhpcy5kYXRhLm5vSFRNTCYmIXRoaXMuZGF0YS5oYXNPd25DYW52YXMpcmV0dXJue29wTGlzdDpuZXcgT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMCxzZXBhcmF0ZUNhbnZhczohMX07aWYoIXRoaXMuX2hhc1RleHQpcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSxyKTtjb25zdCBpPWF3YWl0IHRoaXMuX2dldEFwcGVhcmFuY2UoZSx0LGEscik7aWYodGhpcy5hcHBlYXJhbmNlJiZudWxsPT09aSlyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLHIpO2NvbnN0IG49bmV3IE9wZXJhdG9yTGlzdDtpZighdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fG51bGw9PT1pKXJldHVybntvcExpc3Q6bixzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9O2NvbnN0IG89ISEodGhpcy5kYXRhLmhhc093bkNhbnZhcyYmYSZzKSxjPVswLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF0saD1nZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5kYXRhLnJlY3QsYyxbMSwwLDAsMSwwLDBdKTtsZXQgdTt0aGlzLm9jJiYodT1hd2FpdCBlLnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCkpO3ZvaWQgMCE9PXUmJm4uYWRkT3AoQ3QsWyJPQyIsdV0pO24uYWRkT3AoQnQsW3RoaXMuZGF0YS5pZCx0aGlzLmRhdGEucmVjdCxoLHRoaXMuZ2V0Um90YXRpb25NYXRyaXgociksb10pO2NvbnN0IGQ9bmV3IFN0cmluZ1N0cmVhbShpKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmQsdGFzazp0LHJlc291cmNlczp0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsb3BlcmF0b3JMaXN0Om59KTtuLmFkZE9wKFJ0LFtdKTt2b2lkIDAhPT11JiZuLmFkZE9wKHZ0LFtdKTtyZXR1cm57b3BMaXN0Om4sc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOm99fV9nZXRNS0RpY3QoZSl7Y29uc3QgdD1uZXcgRGljdChudWxsKTtlJiZ0LnNldCgiUiIsZSk7dC5zZXRJZkFycmF5KCJCQyIsZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmJvcmRlckNvbG9yKSk7dC5zZXRJZkFycmF5KCJCRyIsZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmJhY2tncm91bmRDb2xvcikpO3JldHVybiB0LnNpemU+MD90Om51bGx9YW1lbmRTYXZlZERpY3QoZSx0KXt9c2V0VmFsdWUoZSx0LGEscil7Y29uc3R7ZGljdDppLHJlZjpufT1mdW5jdGlvbiBnZXRQYXJlbnRUb1VwZGF0ZShlLHQsYSl7Y29uc3Qgcj1uZXcgUmVmU2V0LGk9ZSxuPXtkaWN0Om51bGwscmVmOm51bGx9O2Zvcig7ZSBpbnN0YW5jZW9mIERpY3QmJiFyLmhhcyh0KTspe3IucHV0KHQpO2lmKGUuaGFzKCJUIikpYnJlYWs7aWYoISgodD1lLmdldFJhdygiUGFyZW50IikpaW5zdGFuY2VvZiBSZWYpKXJldHVybiBuO2U9YS5mZXRjaCh0KX1pZihlIGluc3RhbmNlb2YgRGljdCYmZSE9PWkpe24uZGljdD1lO24ucmVmPXR9cmV0dXJuIG59KGUsdGhpcy5yZWYsYSk7aWYoaSl7aWYoIXIuaGFzKG4pKXtjb25zdCBlPWkuY2xvbmUoKTtlLnNldCgiViIsdCk7ci5wdXQobix7ZGF0YTplfSk7cmV0dXJuIGV9fWVsc2UgZS5zZXQoIlYiLHQpO3JldHVybiBudWxsfWFzeW5jIHNhdmUoZSx0LGEscil7Y29uc3QgaT1hPy5nZXQodGhpcy5kYXRhLmlkKSxuPXRoaXMuX2J1aWxkRmxhZ3MoaT8ubm9WaWV3LGk/Lm5vUHJpbnQpO2xldCBzPWk/LnZhbHVlLG89aT8ucm90YXRpb247aWYocz09PXRoaXMuZGF0YS5maWVsZFZhbHVlfHx2b2lkIDA9PT1zKXtpZighdGhpcy5faGFzVmFsdWVGcm9tWEZBJiZ2b2lkIDA9PT1vJiZ2b2lkIDA9PT1uKXJldHVybjtzfHw9dGhpcy5kYXRhLmZpZWxkVmFsdWV9aWYodm9pZCAwPT09byYmIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQSYmQXJyYXkuaXNBcnJheShzKSYmQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkmJmlzQXJyYXlFcXVhbChzLHRoaXMuZGF0YS5maWVsZFZhbHVlKSYmdm9pZCAwPT09bilyZXR1cm47dm9pZCAwPT09byYmKG89dGhpcy5yb3RhdGlvbik7bGV0IGw9bnVsbDtpZighdGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtsPWF3YWl0IHRoaXMuX2dldEFwcGVhcmFuY2UoZSx0LGMsYSk7aWYobnVsbD09PWwmJnZvaWQgMD09PW4pcmV0dXJufWxldCBoPSExO2lmKGw/Lm5lZWRBcHBlYXJhbmNlcyl7aD0hMDtsPW51bGx9Y29uc3R7eHJlZjp1fT1lLGQ9dS5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKGQgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm47Y29uc3QgZj1uZXcgRGljdCh1KTtmb3IoY29uc3QgZSBvZiBkLmdldEtleXMoKSkiQVAiIT09ZSYmZi5zZXQoZSxkLmdldFJhdyhlKSk7aWYodm9pZCAwIT09bil7Zi5zZXQoIkYiLG4pO2lmKG51bGw9PT1sJiYhaCl7Y29uc3QgZT1kLmdldFJhdygiQVAiKTtlJiZmLnNldCgiQVAiLGUpfX1jb25zdCBnPXtwYXRoOnRoaXMuZGF0YS5maWVsZE5hbWUsdmFsdWU6c30scD10aGlzLnNldFZhbHVlKGYsQXJyYXkuaXNBcnJheShzKT9zLm1hcChzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKTpzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKHMpLHUscik7dGhpcy5hbWVuZFNhdmVkRGljdChhLHB8fGYpO2NvbnN0IG09dGhpcy5fZ2V0TUtEaWN0KG8pO20mJmYuc2V0KCJNSyIsbSk7ci5wdXQodGhpcy5yZWYse2RhdGE6Zix4ZmE6ZyxuZWVkQXBwZWFyYW5jZXM6aH0pO2lmKG51bGwhPT1sKXtjb25zdCBlPXUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCksdD1uZXcgRGljdCh1KTtmLnNldCgiQVAiLHQpO3Quc2V0KCJOIixlKTtjb25zdCBpPXRoaXMuX2dldFNhdmVGaWVsZFJlc291cmNlcyh1KSxuPW5ldyBTdHJpbmdTdHJlYW0obCkscz1uLmRpY3Q9bmV3IERpY3QodSk7cy5zZXRJZk5hbWUoIlN1YnR5cGUiLCJGb3JtIik7cy5zZXQoIlJlc291cmNlcyIsaSk7Y29uc3QgYz1vJTE4MD09MD9bMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdOlswLDAsdGhpcy5oZWlnaHQsdGhpcy53aWR0aF07cy5zZXQoIkJCb3giLGMpO2NvbnN0IGg9dGhpcy5nZXRSb3RhdGlvbk1hdHJpeChhKTtoIT09ZmEmJnMuc2V0KCJNYXRyaXgiLGgpO3IucHV0KGUse2RhdGE6bix4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KX1mLnNldCgiTSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCl9YXN5bmMgX2dldEFwcGVhcmFuY2UoZSx0LGEscil7aWYodGhpcy5kYXRhLnBhc3N3b3JkKXJldHVybiBudWxsO2NvbnN0IG49cj8uZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IHMsbztpZihuKXtzPW4uZm9ybWF0dGVkVmFsdWV8fG4udmFsdWU7bz1uLnJvdGF0aW9ufWlmKHZvaWQgMD09PW8mJnZvaWQgMD09PXMmJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXMmJighdGhpcy5faGFzVmFsdWVGcm9tWEZBfHx0aGlzLmFwcGVhcmFuY2UpKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMocik7aWYodm9pZCAwPT09cyl7cz10aGlzLmRhdGEuZmllbGRWYWx1ZTtpZighcylyZXR1cm5gL1R4IEJNQyBxICR7bH1RIEVNQ2B9QXJyYXkuaXNBcnJheShzKSYmMT09PXMubGVuZ3RoJiYocz1zWzBdKTthc3NlcnQoInN0cmluZyI9PXR5cGVvZiBzLCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpO3M9cy50cmltRW5kKCk7aWYodGhpcy5kYXRhLmNvbWJvKXtjb25zdCBlPXRoaXMuZGF0YS5vcHRpb25zLmZpbmQoKHtleHBvcnRWYWx1ZTplfSk9PnM9PT1lKTtzPWU/LmRpc3BsYXlWYWx1ZXx8c31pZigiIj09PXMpcmV0dXJuYC9UeCBCTUMgcSAke2x9USBFTUNgO3ZvaWQgMD09PW8mJihvPXRoaXMucm90YXRpb24pO2xldCBoLHU9LTE7aWYodGhpcy5kYXRhLm11bHRpTGluZSl7aD1zLnNwbGl0KC9cclxuP3xcbi8pLm1hcChlPT5lLm5vcm1hbGl6ZSgiTkZDIikpO3U9aC5sZW5ndGh9ZWxzZSBoPVtzLnJlcGxhY2UoL1xyXG4/fFxuLywiIikubm9ybWFsaXplKCJORkMiKV07bGV0e3dpZHRoOmQsaGVpZ2h0OmZ9PXRoaXM7OTAhPT1vJiYyNzAhPT1vfHwoW2QsZl09W2YsZF0pO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT1wYXJzZURlZmF1bHRBcHBlYXJhbmNlKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpO2xldCBnLHAsbSxiPWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGUsdCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7Y29uc3QgeT1bXTtsZXQgdz0hMTtmb3IoY29uc3QgZSBvZiBoKXtjb25zdCB0PWIuZW5jb2RlU3RyaW5nKGUpO3QubGVuZ3RoPjEmJih3PSEwKTt5LnB1c2godC5qb2luKCIiKSl9aWYodyYmYSZjKXJldHVybntuZWVkQXBwZWFyYW5jZXM6ITB9O2lmKHcmJnRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCBhPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixyPW5ldyBGYWtlVW5pY29kZUZvbnQoZS54cmVmLGEpLGk9ci5jcmVhdGVGb250UmVzb3VyY2VzKGguam9pbigiIikpLG49aS5nZXRSYXcoIkZvbnQiKTtpZih0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuaGFzKCJGb250Iikpe2NvbnN0IGU9dGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLmdldCgiRm9udCIpO2Zvcihjb25zdCB0IG9mIG4uZ2V0S2V5cygpKWUuc2V0KHQsbi5nZXRSYXcodCkpfWVsc2UgdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLnNldCgiRm9udCIsbik7Y29uc3Qgbz1yLmZvbnROYW1lLm5hbWU7Yj1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShlLHQse2ZvbnROYW1lOm8sZm9udFNpemU6MH0saSk7Zm9yKGxldCBlPTAsdD15Lmxlbmd0aDtlPHQ7ZSsrKXlbZV09c3RyaW5nVG9VVEYxNlN0cmluZyhoW2VdKTtjb25zdCBjPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhKTt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRTaXplPTA7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250TmFtZT1vO1tnLHAsbV09dGhpcy5fY29tcHV0ZUZvbnRTaXplKGYtMixkLTQscyxiLHUpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9Y31lbHNle3RoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfHx3YXJuKCJfZ2V0QXBwZWFyYW5jZTogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpO1tnLHAsbV09dGhpcy5fY29tcHV0ZUZvbnRTaXplKGYtMixkLTQscyxiLHUpfWxldCB4PWIuZGVzY2VudDt4PWlzTmFOKHgpP2kqbTpNYXRoLm1heChpKm0sTWF0aC5hYnMoeCkqcCk7Y29uc3QgUz1NYXRoLm1pbihNYXRoLmZsb29yKChmLXApLzIpLDEpLGs9dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ7aWYodGhpcy5kYXRhLm11bHRpTGluZSlyZXR1cm4gdGhpcy5fZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZShnLHksYixwLGQsZixrLDIsUyx4LG0scik7aWYodGhpcy5kYXRhLmNvbWIpcmV0dXJuIHRoaXMuX2dldENvbWJBcHBlYXJhbmNlKGcsYix5WzBdLHAsZCxmLDIsUyx4LG0scik7Y29uc3QgQz1TK3g7aWYoMD09PWt8fGs+MilyZXR1cm5gL1R4IEJNQyBxICR7bH1CVCBgK2crYCAxIDAgMCAxICR7bnVtYmVyVG9TdHJpbmcoMil9ICR7bnVtYmVyVG9TdHJpbmcoQyl9IFRtICgke2VzY2FwZVN0cmluZyh5WzBdKX0pIFRqIEVUIFEgRU1DYDtyZXR1cm5gL1R4IEJNQyBxICR7bH1CVCBgK2crYCAxIDAgMCAxIDAgMCBUbSAke3RoaXMuX3JlbmRlclRleHQoeVswXSxiLHAsZCxrLHtzaGlmdDowfSwyLEMpfSBFVCBRIEVNQ2B9c3RhdGljIGFzeW5jIF9nZXRGb250RGF0YShlLHQsYSxyKXtjb25zdCBpPW5ldyBPcGVyYXRvckxpc3Qsbj17Zm9udDpudWxsLGNsb25lKCl7cmV0dXJuIHRoaXN9fSx7Zm9udE5hbWU6cyxmb250U2l6ZTpvfT1hO2F3YWl0IGUuaGFuZGxlU2V0Rm9udChyLFtzJiZOYW1lLmdldChzKSxvXSxudWxsLGksdCxuLG51bGwpO3JldHVybiBuLmZvbnR9X2dldFRleHRXaWR0aChlLHQpe3JldHVybiBNYXRoLnN1bVByZWNpc2UodC5jaGFyc1RvR2x5cGhzKGUpLm1hcChlPT5lLndpZHRoKSkvMWUzfV9jb21wdXRlRm9udFNpemUoZSx0LHIsaSxuKXtsZXR7Zm9udFNpemU6c309dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSxvPShzfHwxMikqYSxjPU1hdGgucm91bmQoZS9vKTtpZighcyl7Y29uc3Qgcm91bmRXaXRoVHdvRGlnaXRzPWU9Pk1hdGguZmxvb3IoMTAwKmUpLzEwMDtpZigtMT09PW4pe2NvbnN0IG49dGhpcy5fZ2V0VGV4dFdpZHRoKHIsaSk7cz1yb3VuZFdpdGhUd29EaWdpdHMoTWF0aC5taW4oZS9hLHQvbikpO2M9MX1lbHNle2NvbnN0IGw9ci5zcGxpdCgvXHJcbj98XG4vKSxoPVtdO2Zvcihjb25zdCBlIG9mIGwpe2NvbnN0IHQ9aS5lbmNvZGVTdHJpbmcoZSkuam9pbigiIiksYT1pLmNoYXJzVG9HbHlwaHModCkscj1pLmdldENoYXJQb3NpdGlvbnModCk7aC5wdXNoKHtsaW5lOnQsZ2x5cGhzOmEscG9zaXRpb25zOnJ9KX1jb25zdCBpc1Rvb0JpZz1hPT57bGV0IHI9MDtmb3IoY29uc3QgbiBvZiBoKXtyKz10aGlzLl9zcGxpdExpbmUobnVsbCxpLGEsdCxuKS5sZW5ndGgqYTtpZihyPmUpcmV0dXJuITB9cmV0dXJuITF9O2M9TWF0aC5tYXgoYyxuKTtmb3IoOzspe289ZS9jO3M9cm91bmRXaXRoVHdvRGlnaXRzKG8vYSk7aWYoIWlzVG9vQmlnKHMpKWJyZWFrO2MrK319Y29uc3R7Zm9udE5hbWU6bCxmb250Q29sb3I6aH09dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT1mdW5jdGlvbiBjcmVhdGVEZWZhdWx0QXBwZWFyYW5jZSh7Zm9udFNpemU6ZSxmb250TmFtZTp0LGZvbnRDb2xvcjphfSl7cmV0dXJuYC8ke2VzY2FwZVBERk5hbWUodCl9ICR7ZX0gVGYgJHtnZXRQZGZDb2xvcihhLCEwKX1gfSh7Zm9udFNpemU6cyxmb250TmFtZTpsLGZvbnRDb2xvcjpofSl9cmV0dXJuW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLHMsZS9jXX1fcmVuZGVyVGV4dChlLHQsYSxyLGksbixzLG8pe2xldCBjO2lmKDE9PT1pKXtjPShyLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKmEpLzJ9ZWxzZSBpZigyPT09aSl7Yz1yLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKmEtc31lbHNlIGM9cztjb25zdCBsPW51bWJlclRvU3RyaW5nKGMtbi5zaGlmdCk7bi5zaGlmdD1jO3JldHVybmAke2x9ICR7bz1udW1iZXJUb1N0cmluZyhvKX0gVGQgKCR7ZXNjYXBlU3RyaW5nKGUpfSkgVGpgfV9nZXRTYXZlRmllbGRSZXNvdXJjZXMoZSl7Y29uc3R7bG9jYWxSZXNvdXJjZXM6dCxhcHBlYXJhbmNlUmVzb3VyY2VzOmEsYWNyb0Zvcm1SZXNvdXJjZXM6cn09dGhpcy5fZmllbGRSZXNvdXJjZXMsaT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPy5mb250TmFtZTtpZighaSlyZXR1cm4gdHx8RGljdC5lbXB0eTtmb3IoY29uc3QgZSBvZlt0LGFdKWlmKGUgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCB0PWUuZ2V0KCJGb250Iik7aWYodCBpbnN0YW5jZW9mIERpY3QmJnQuaGFzKGkpKXJldHVybiBlfWlmKHIgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBhPXIuZ2V0KCJGb250Iik7aWYoYSBpbnN0YW5jZW9mIERpY3QmJmEuaGFzKGkpKXtjb25zdCByPW5ldyBEaWN0KGUpO3Iuc2V0KGksYS5nZXRSYXcoaSkpO2NvbnN0IG49bmV3IERpY3QoZSk7bi5zZXQoIkZvbnQiLHIpO3JldHVybiBEaWN0Lm1lcmdlKHt4cmVmOmUsZGljdEFycmF5OltuLHRdLG1lcmdlU3ViRGljdHM6ITB9KX19cmV0dXJuIHR8fERpY3QuZW1wdHl9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gbnVsbH19Y2xhc3MgVGV4dFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dH09ZTtpZih0LmhhcygiUE1EIikpe3RoaXMuZmxhZ3N8PUU7dGhpcy5kYXRhLmhpZGRlbj0hMDt3YXJuKCJCYXJjb2RlcyBhcmUgbm90IHN1cHBvcnRlZCIpfXRoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLnJlYWRPbmx5JiYhdGhpcy5kYXRhLm5vSFRNTDt0aGlzLl9oYXNUZXh0PSEwOyJzdHJpbmciIT10eXBlb2YgdGhpcy5kYXRhLmZpZWxkVmFsdWUmJih0aGlzLmRhdGEuZmllbGRWYWx1ZT0iIik7bGV0IGE9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDp0LGtleToiUSJ9KTsoIU51bWJlci5pc0ludGVnZXIoYSl8fGE8MHx8YT4yKSYmKGE9bnVsbCk7dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ9YTtsZXQgcj1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJNYXhMZW4ifSk7KCFOdW1iZXIuaXNJbnRlZ2VyKHIpfHxyPDApJiYocj0wKTt0aGlzLmRhdGEubWF4TGVuPXI7dGhpcy5kYXRhLm11bHRpTGluZT10aGlzLmhhc0ZpZWxkRmxhZyhXKTt0aGlzLmRhdGEuY29tYj10aGlzLmhhc0ZpZWxkRmxhZyhaKSYmIXRoaXMuZGF0YS5tdWx0aUxpbmUmJiF0aGlzLmRhdGEucGFzc3dvcmQmJiF0aGlzLmhhc0ZpZWxkRmxhZyhLKSYmMCE9PXRoaXMuZGF0YS5tYXhMZW47dGhpcy5kYXRhLmRvTm90U2Nyb2xsPXRoaXMuaGFzRmllbGRGbGFnKFkpO2NvbnN0e2RhdGE6e2FjdGlvbnM6aX19PXRoaXM7aWYoIWkpcmV0dXJuO2NvbnN0IG49L15BRihEYXRlfFRpbWUpXyg/OktleXN0cm9rZXxGb3JtYXQpKD86RXgpP1woWyciXT8oW14nIl0rKVsnIl0/XCk7JC87bGV0IHM9ITE7KDE9PT1pLkZvcm1hdD8ubGVuZ3RoJiYxPT09aS5LZXlzdHJva2U/Lmxlbmd0aCYmbi50ZXN0KGkuRm9ybWF0WzBdKSYmbi50ZXN0KGkuS2V5c3Ryb2tlWzBdKXx8MD09PWkuRm9ybWF0Py5sZW5ndGgmJjE9PT1pLktleXN0cm9rZT8ubGVuZ3RoJiZuLnRlc3QoaS5LZXlzdHJva2VbMF0pfHwwPT09aS5LZXlzdHJva2U/Lmxlbmd0aCYmMT09PWkuRm9ybWF0Py5sZW5ndGgmJm4udGVzdChpLkZvcm1hdFswXSkpJiYocz0hMCk7Y29uc3Qgbz1bXTtpLkZvcm1hdCYmby5wdXNoKC4uLmkuRm9ybWF0KTtpLktleXN0cm9rZSYmby5wdXNoKC4uLmkuS2V5c3Ryb2tlKTtpZihzKXtkZWxldGUgaS5LZXlzdHJva2U7aS5Gb3JtYXQ9b31mb3IoY29uc3QgZSBvZiBvKXtjb25zdCB0PWUubWF0Y2gobik7aWYoIXQpY29udGludWU7Y29uc3QgYT0iRGF0ZSI9PT10WzFdO2xldCByPXRbMl07Y29uc3QgaT1wYXJzZUludChyLDEwKTtpc05hTihpKXx8TWF0aC5mbG9vcihNYXRoLmxvZzEwKGkpKSsxIT09dFsyXS5sZW5ndGh8fChyPShhP2tuOkNuKVtpXT8/cik7dGhpcy5kYXRhLmRhdGV0aW1lRm9ybWF0PXI7aWYoIXMpYnJlYWs7aWYoYSl7aWYoL0hIfE1NfHNzfGgvLnRlc3Qocikpe3RoaXMuZGF0YS5kYXRldGltZVR5cGU9ImRhdGV0aW1lLWxvY2FsIjt0aGlzLmRhdGEudGltZVN0ZXA9L3NzLy50ZXN0KHIpPzE6NjB9ZWxzZSB0aGlzLmRhdGEuZGF0ZXRpbWVUeXBlPSJkYXRlIjticmVha310aGlzLmRhdGEuZGF0ZXRpbWVUeXBlPSJ0aW1lIjt0aGlzLmRhdGEudGltZVN0ZXA9L3NzLy50ZXN0KHIpPzE6NjA7YnJlYWt9fWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiEhdGhpcy5hcHBlYXJhbmNlJiYhdGhpcy5fbmVlZEFwcGVhcmFuY2VzfV9nZXRDb21iQXBwZWFyYW5jZShlLHQsYSxyLGksbixzLG8sYyxsLGgpe2NvbnN0IHU9aS90aGlzLmRhdGEubWF4TGVuLGQ9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoaCksZj1bXSxnPXQuZ2V0Q2hhclBvc2l0aW9ucyhhKTtmb3IoY29uc3RbZSx0XW9mIGcpZi5wdXNoKGAoJHtlc2NhcGVTdHJpbmcoYS5zdWJzdHJpbmcoZSx0KSl9KSBUamApO2NvbnN0IHA9Zi5qb2luKGAgJHtudW1iZXJUb1N0cmluZyh1KX0gMCBUZCBgKTtyZXR1cm5gL1R4IEJNQyBxICR7ZH1CVCBgK2UrYCAxIDAgMCAxICR7bnVtYmVyVG9TdHJpbmcocyl9ICR7bnVtYmVyVG9TdHJpbmcobytjKX0gVG0gJHtwfSBFVCBRIEVNQ2B9X2dldE11bHRpbGluZUFwcGVhcmFuY2UoZSx0LGEscixpLG4scyxvLGMsbCxoLHUpe2NvbnN0IGQ9W10sZj1pLTIqbyxnPXtzaGlmdDowfTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXSx1PXRoaXMuX3NwbGl0TGluZShuLGEscixmKTtmb3IobGV0IHQ9MCxuPXUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49dVt0XSxmPTA9PT1lJiYwPT09dD8tYy0oaC1sKTotaDtkLnB1c2godGhpcy5fcmVuZGVyVGV4dChuLGEscixpLHMsZyxvLGYpKX19Y29uc3QgcD10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyh1KSxtPWQuam9pbigiXG4iKTtyZXR1cm5gL1R4IEJNQyBxICR7cH1CVCBgK2UrYCAxIDAgMCAxIDAgJHtudW1iZXJUb1N0cmluZyhuKX0gVG0gJHttfSBFVCBRIEVNQ2B9X3NwbGl0TGluZShlLHQsYSxyLGk9e30pe2U9aS5saW5lfHxlO2NvbnN0IG49aS5nbHlwaHN8fHQuY2hhcnNUb0dseXBocyhlKTtpZihuLmxlbmd0aDw9MSlyZXR1cm5bZV07Y29uc3Qgcz1pLnBvc2l0aW9uc3x8dC5nZXRDaGFyUG9zaXRpb25zKGUpLG89YS8xZTMsYz1bXTtsZXQgbD0tMSxoPS0xLHU9LTEsZD0wLGY9MDtmb3IobGV0IHQ9MCxhPW4ubGVuZ3RoO3Q8YTt0Kyspe2NvbnN0W2EsaV09c1t0XSxnPW5bdF0scD1nLndpZHRoKm87aWYoIiAiPT09Zy51bmljb2RlKWlmKGYrcD5yKXtjLnB1c2goZS5zdWJzdHJpbmcoZCxhKSk7ZD1hO2Y9cDtsPS0xO3U9LTF9ZWxzZXtmKz1wO2w9YTtoPWk7dT10fWVsc2UgaWYoZitwPnIpaWYoLTEhPT1sKXtjLnB1c2goZS5zdWJzdHJpbmcoZCxoKSk7ZD1oO3Q9dSsxO2w9LTE7Zj0wfWVsc2V7Yy5wdXNoKGUuc3Vic3RyaW5nKGQsYSkpO2Q9YTtmPXB9ZWxzZSBmKz1wfWQ8ZS5sZW5ndGgmJmMucHVzaChlLnN1YnN0cmluZyhkLGUubGVuZ3RoKSk7cmV0dXJuIGN9YXN5bmMgZXh0cmFjdFRleHRDb250ZW50KGUsdCxhKXthd2FpdCBzdXBlci5leHRyYWN0VGV4dENvbnRlbnQoZSx0LGEpO2NvbnN0IHI9dGhpcy5kYXRhLnRleHRDb250ZW50O2lmKCFyKXJldHVybjtjb25zdCBpPXIuam9pbigiXG4iKTtpZihpPT09dGhpcy5kYXRhLmZpZWxkVmFsdWUpcmV0dXJuO2NvbnN0IG49aS5yZXBsYWNlQWxsKC8oWy4qKz9eJHt9KCl8W1xdXFxdKXwoXHMrKS9nLChlLHQpPT50P2BcXCR7dH1gOiJcXHMrIik7bmV3IFJlZ0V4cChgXlxccyoke259XFxzKiRgKS50ZXN0KHRoaXMuZGF0YS5maWVsZFZhbHVlKSYmKHRoaXMuZGF0YS50ZXh0Q29udGVudD10aGlzLmRhdGEuZmllbGRWYWx1ZS5zcGxpdCgiXG4iKSl9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlLGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWV8fCIiLG11bHRpbGluZTp0aGlzLmRhdGEubXVsdGlMaW5lLHBhc3N3b3JkOnRoaXMuZGF0YS5wYXNzd29yZCxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sZGF0ZXRpbWVGb3JtYXQ6dGhpcy5kYXRhLmRhdGV0aW1lRm9ybWF0LGhhc0RhdGV0aW1lSFRNTDohIXRoaXMuZGF0YS5kYXRldGltZVR5cGUsdHlwZToidGV4dCJ9fX1jbGFzcyBCdXR0b25XaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW51bGw7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPW51bGw7Y29uc3QgdD10aGlzLmhhc0ZpZWxkRmxhZyh6KSxhPXRoaXMuaGFzRmllbGRGbGFnKCQpO3RoaXMuZGF0YS5jaGVja0JveD0hdCYmIWE7dGhpcy5kYXRhLnJhZGlvQnV0dG9uPXQmJiFhO3RoaXMuZGF0YS5wdXNoQnV0dG9uPWE7dGhpcy5kYXRhLmlzVG9vbHRpcE9ubHk9ITE7aWYodGhpcy5kYXRhLmNoZWNrQm94KXRoaXMuX3Byb2Nlc3NDaGVja0JveChlKTtlbHNlIGlmKHRoaXMuZGF0YS5yYWRpb0J1dHRvbil0aGlzLl9wcm9jZXNzUmFkaW9CdXR0b24oZSk7ZWxzZSBpZih0aGlzLmRhdGEucHVzaEJ1dHRvbil7dGhpcy5kYXRhLmhhc093bkNhbnZhcz0hMDt0aGlzLmRhdGEubm9IVE1MPSExO3RoaXMuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpfWVsc2Ugd2FybigiSW52YWxpZCBmaWVsZCBmbGFncyBmb3IgYnV0dG9uIHdpZGdldCBhbm5vdGF0aW9uIil9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLHIpe2lmKHRoaXMuZGF0YS5wdXNoQnV0dG9uKXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LGEsITEscik7bGV0IGk9bnVsbCxuPW51bGw7aWYocil7Y29uc3QgZT1yLmdldCh0aGlzLmRhdGEuaWQpO2k9ZT9lLnZhbHVlOm51bGw7bj1lP2Uucm90YXRpb246bnVsbH1pZihudWxsPT09aSYmdGhpcy5hcHBlYXJhbmNlKXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LGEscik7bnVsbD09aSYmKGk9dGhpcy5kYXRhLmNoZWNrQm94P3RoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlKTtjb25zdCBzPWk/dGhpcy5jaGVja2VkQXBwZWFyYW5jZTp0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U7aWYocyl7Y29uc3QgaT10aGlzLmFwcGVhcmFuY2Usbz1sb29rdXBNYXRyaXgocy5kaWN0LmdldEFycmF5KCJNYXRyaXgiKSxmYSk7biYmcy5kaWN0LnNldCgiTWF0cml4Iix0aGlzLmdldFJvdGF0aW9uTWF0cml4KHIpKTt0aGlzLmFwcGVhcmFuY2U9cztjb25zdCBjPXN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSxyKTt0aGlzLmFwcGVhcmFuY2U9aTtzLmRpY3Quc2V0KCJNYXRyaXgiLG8pO3JldHVybiBjfXJldHVybntvcExpc3Q6bmV3IE9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fWFzeW5jIHNhdmUoZSx0LGEscil7dGhpcy5kYXRhLmNoZWNrQm94P3RoaXMuX3NhdmVDaGVja2JveChlLHQsYSxyKTp0aGlzLmRhdGEucmFkaW9CdXR0b24mJnRoaXMuX3NhdmVSYWRpb0J1dHRvbihlLHQsYSxyKX1hc3luYyBfc2F2ZUNoZWNrYm94KGUsdCxhLHIpe2lmKCFhKXJldHVybjtjb25zdCBpPWEuZ2V0KHRoaXMuZGF0YS5pZCksbj10aGlzLl9idWlsZEZsYWdzKGk/Lm5vVmlldyxpPy5ub1ByaW50KTtsZXQgcz1pPy5yb3RhdGlvbixvPWk/LnZhbHVlO2lmKHZvaWQgMD09PXMmJnZvaWQgMD09PW4pe2lmKHZvaWQgMD09PW8pcmV0dXJuO2lmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlPT09bylyZXR1cm59bGV0IGM9ZS54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEoYyBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtjPWMuY2xvbmUoKTt2b2lkIDA9PT1zJiYocz10aGlzLnJvdGF0aW9uKTt2b2lkIDA9PT1vJiYobz10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZSk7Y29uc3QgbD17cGF0aDp0aGlzLmRhdGEuZmllbGROYW1lLHZhbHVlOm8/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiIifSxoPU5hbWUuZ2V0KG8/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiJPZmYiKTt0aGlzLnNldFZhbHVlKGMsaCxlLnhyZWYscik7Yy5zZXQoIkFTIixoKTtjLnNldCgiTSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7dm9pZCAwIT09biYmYy5zZXQoIkYiLG4pO2NvbnN0IHU9dGhpcy5fZ2V0TUtEaWN0KHMpO3UmJmMuc2V0KCJNSyIsdSk7ci5wdXQodGhpcy5yZWYse2RhdGE6Yyx4ZmE6bCxuZWVkQXBwZWFyYW5jZXM6ITF9KX1hc3luYyBfc2F2ZVJhZGlvQnV0dG9uKGUsdCxhLHIpe2lmKCFhKXJldHVybjtjb25zdCBpPWEuZ2V0KHRoaXMuZGF0YS5pZCksbj10aGlzLl9idWlsZEZsYWdzKGk/Lm5vVmlldyxpPy5ub1ByaW50KTtsZXQgcz1pPy5yb3RhdGlvbixvPWk/LnZhbHVlO2lmKHZvaWQgMD09PXMmJnZvaWQgMD09PW4pe2lmKHZvaWQgMD09PW8pcmV0dXJuO2lmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlPT09bylyZXR1cm59bGV0IGM9ZS54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEoYyBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtjPWMuY2xvbmUoKTt2b2lkIDA9PT1vJiYobz10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSk7dm9pZCAwPT09cyYmKHM9dGhpcy5yb3RhdGlvbik7Y29uc3QgbD17cGF0aDp0aGlzLmRhdGEuZmllbGROYW1lLHZhbHVlOm8/dGhpcy5kYXRhLmJ1dHRvblZhbHVlOiIifSxoPU5hbWUuZ2V0KG8/dGhpcy5kYXRhLmJ1dHRvblZhbHVlOiJPZmYiKTtvJiZ0aGlzLnNldFZhbHVlKGMsaCxlLnhyZWYscik7Yy5zZXQoIkFTIixoKTtjLnNldCgiTSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7dm9pZCAwIT09biYmYy5zZXQoIkYiLG4pO2NvbnN0IHU9dGhpcy5fZ2V0TUtEaWN0KHMpO3UmJmMuc2V0KCJNSyIsdSk7ci5wdXQodGhpcy5yZWYse2RhdGE6Yyx4ZmE6bCxuZWVkQXBwZWFyYW5jZXM6ITF9KX1fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsdCl7Y29uc3R7d2lkdGg6YSxoZWlnaHQ6cn09dGhpcyxpPVswLDAsYSxyXSxuPS44Kk1hdGgubWluKGEscik7bGV0IHMsbztpZigiY2hlY2siPT09dCl7cz17d2lkdGg6Ljc1NSpuLGhlaWdodDouNzA1Km59O289IjMifWVsc2UgaWYoImRpc2MiPT09dCl7cz17d2lkdGg6Ljc5MSpuLGhlaWdodDouNzA1Km59O289ImwifWVsc2UgdW5yZWFjaGFibGUoYF9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UgLSB1bnN1cHBvcnRlZCB0eXBlOiAke3R9YCk7Y29uc3QgYz1gcSBCVCAvUGRmSnNaYURiICR7bn0gVGYgMCBnICR7bnVtYmVyVG9TdHJpbmcoKGEtcy53aWR0aCkvMil9ICR7bnVtYmVyVG9TdHJpbmcoKHItcy5oZWlnaHQpLzIpfSBUZCAoJHtvfSkgVGogRVQgUWAsbD1uZXcgRGljdChlLnhyZWYpO2wuc2V0KCJGb3JtVHlwZSIsMSk7bC5zZXRJZk5hbWUoIlN1YnR5cGUiLCJGb3JtIik7bC5zZXRJZk5hbWUoIlR5cGUiLCJYT2JqZWN0Iik7bC5zZXQoIkJCb3giLGkpO2wuc2V0KCJNYXRyaXgiLFsxLDAsMCwxLDAsMF0pO2wuc2V0KCJMZW5ndGgiLGMubGVuZ3RoKTtjb25zdCBoPW5ldyBEaWN0KGUueHJlZiksdT1uZXcgRGljdChlLnhyZWYpO3Uuc2V0KCJQZGZKc1phRGIiLHRoaXMuZmFsbGJhY2tGb250RGljdCk7aC5zZXQoIkZvbnQiLHUpO2wuc2V0KCJSZXNvdXJjZXMiLGgpO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U9bmV3IFN0cmluZ1N0cmVhbShjKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3Q9bDt0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSl9X3Byb2Nlc3NDaGVja0JveChlKXtjb25zdCB0PWUuZGljdC5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IGE9dC5nZXQoIk4iKTtpZighKGEgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm47Y29uc3Qgcj10aGlzLl9kZWNvZGVGb3JtVmFsdWUoZS5kaWN0LmdldCgiQVMiKSk7InN0cmluZyI9PXR5cGVvZiByJiYodGhpcy5kYXRhLmZpZWxkVmFsdWU9cik7Y29uc3QgaT1udWxsIT09dGhpcy5kYXRhLmZpZWxkVmFsdWUmJiJPZmYiIT09dGhpcy5kYXRhLmZpZWxkVmFsdWU/dGhpcy5kYXRhLmZpZWxkVmFsdWU6IlllcyIsbj10aGlzLl9kZWNvZGVGb3JtVmFsdWUoYS5nZXRLZXlzKCkpO2lmKDA9PT1uLmxlbmd0aCluLnB1c2goIk9mZiIsaSk7ZWxzZSBpZigxPT09bi5sZW5ndGgpIk9mZiI9PT1uWzBdP24ucHVzaChpKTpuLnVuc2hpZnQoIk9mZiIpO2Vsc2UgaWYobi5pbmNsdWRlcyhpKSl7bi5sZW5ndGg9MDtuLnB1c2goIk9mZiIsaSl9ZWxzZXtjb25zdCBlPW4uZmluZChlPT4iT2ZmIiE9PWUpO24ubGVuZ3RoPTA7bi5wdXNoKCJPZmYiLGUpfW4uaW5jbHVkZXModGhpcy5kYXRhLmZpZWxkVmFsdWUpfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9Ik9mZiIpO3RoaXMuZGF0YS5leHBvcnRWYWx1ZT1uWzFdO2NvbnN0IHM9YS5nZXQodGhpcy5kYXRhLmV4cG9ydFZhbHVlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPXMgaW5zdGFuY2VvZiBCYXNlU3RyZWFtP3M6bnVsbDtjb25zdCBvPWEuZ2V0KCJPZmYiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9byBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/bzpudWxsO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJjaGVjayIpO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSk7dGhpcy5fZmFsbGJhY2tGb250RGljdD10aGlzLmZhbGxiYWNrRm9udERpY3Q7bnVsbD09PXRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSYmKHRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZT0iT2ZmIil9X3Byb2Nlc3NSYWRpb0J1dHRvbihlKXt0aGlzLmRhdGEuYnV0dG9uVmFsdWU9bnVsbDtjb25zdCB0PWUuZGljdC5nZXQoIlBhcmVudCIpO2lmKHQgaW5zdGFuY2VvZiBEaWN0KXt0aGlzLnBhcmVudD1lLmRpY3QuZ2V0UmF3KCJQYXJlbnQiKTtjb25zdCBhPXQuZ2V0KCJWIik7YSBpbnN0YW5jZW9mIE5hbWUmJih0aGlzLmRhdGEuZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUoYSkpfWNvbnN0IGE9ZS5kaWN0LmdldCgiQVAiKTtpZighKGEgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm47Y29uc3Qgcj1hLmdldCgiTiIpO2lmKCEociBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtmb3IoY29uc3QgZSBvZiByLmdldEtleXMoKSlpZigiT2ZmIiE9PWUpe3RoaXMuZGF0YS5idXR0b25WYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUoZSk7YnJlYWt9Y29uc3QgaT1yLmdldCh0aGlzLmRhdGEuYnV0dG9uVmFsdWUpO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U9aSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/aTpudWxsO2NvbnN0IG49ci5nZXQoIk9mZiIpO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1uIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9uOm51bGw7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT90aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSk6dGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsImRpc2MiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9dGhpcy5mYWxsYmFja0ZvbnREaWN0O251bGw9PT10aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUmJih0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWU9Ik9mZiIpfV9wcm9jZXNzUHVzaEJ1dHRvbihlKXtjb25zdHtkaWN0OnQsYW5ub3RhdGlvbkdsb2JhbHM6YX09ZTtpZih0LmhhcygiQSIpfHx0LmhhcygiQUEiKXx8dGhpcy5kYXRhLmFsdGVybmF0aXZlVGV4dCl7dGhpcy5kYXRhLmlzVG9vbHRpcE9ubHk9IXQuaGFzKCJBIikmJiF0LmhhcygiQUEiKTtDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OnQscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmEuYmFzZVVybCxkb2NBdHRhY2htZW50czphLmF0dGFjaG1lbnRzfSl9ZWxzZSB3YXJuKCJQdXNoIGJ1dHRvbnMgd2l0aG91dCBhY3Rpb24gZGljdGlvbmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkIil9Z2V0RmllbGRPYmplY3QoKXtsZXQgZSx0PSJidXR0b24iO2lmKHRoaXMuZGF0YS5jaGVja0JveCl7dD0iY2hlY2tib3giO2U9dGhpcy5kYXRhLmV4cG9ydFZhbHVlfWVsc2UgaWYodGhpcy5kYXRhLnJhZGlvQnV0dG9uKXt0PSJyYWRpb2J1dHRvbiI7ZT10aGlzLmRhdGEuYnV0dG9uVmFsdWV9cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZXx8Ik9mZiIsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxleHBvcnRWYWx1ZXM6ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6dH19Z2V0IGZhbGxiYWNrRm9udERpY3QoKXtjb25zdCBlPW5ldyBEaWN0O2Uuc2V0SWZOYW1lKCJCYXNlRm9udCIsIlphcGZEaW5nYmF0cyIpO2Uuc2V0SWZOYW1lKCJUeXBlIiwiRmFsbGJhY2tUeXBlIik7ZS5zZXRJZk5hbWUoIlN1YnR5cGUiLCJGYWxsYmFja1R5cGUiKTtlLnNldElmTmFtZSgiRW5jb2RpbmciLCJaYXBmRGluZ2JhdHNFbmNvZGluZyIpO3JldHVybiBzaGFkb3codGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fWNsYXNzIENob2ljZVdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5pbmRpY2VzPXQuZ2V0QXJyYXkoIkkiKTt0aGlzLmhhc0luZGljZXM9QXJyYXkuaXNBcnJheSh0aGlzLmluZGljZXMpJiZ0aGlzLmluZGljZXMubGVuZ3RoPjA7dGhpcy5kYXRhLm9wdGlvbnM9W107Y29uc3Qgcj1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJPcHQifSk7aWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9YS5mZXRjaElmUmVmKHJbZV0pLGk9QXJyYXkuaXNBcnJheSh0KTt0aGlzLmRhdGEub3B0aW9uc1tlXT17ZXhwb3J0VmFsdWU6dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGk/YS5mZXRjaElmUmVmKHRbMF0pOnQpLGRpc3BsYXlWYWx1ZTp0aGlzLl9kZWNvZGVGb3JtVmFsdWUoaT9hLmZldGNoSWZSZWYodFsxXSk6dCl9fWlmKHRoaXMuaGFzSW5kaWNlcyl7dGhpcy5kYXRhLmZpZWxkVmFsdWU9W107Y29uc3QgZT10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg7Zm9yKGNvbnN0IHQgb2YgdGhpcy5pbmRpY2VzKU51bWJlci5pc0ludGVnZXIodCkmJnQ+PTAmJnQ8ZSYmdGhpcy5kYXRhLmZpZWxkVmFsdWUucHVzaCh0aGlzLmRhdGEub3B0aW9uc1t0XS5leHBvcnRWYWx1ZSl9ZWxzZSJzdHJpbmciPT10eXBlb2YgdGhpcy5kYXRhLmZpZWxkVmFsdWU/dGhpcy5kYXRhLmZpZWxkVmFsdWU9W3RoaXMuZGF0YS5maWVsZFZhbHVlXTp0aGlzLmRhdGEuZmllbGRWYWx1ZXx8PVtdOzA9PT10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgmJnRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wJiYodGhpcy5kYXRhLm9wdGlvbnM9dGhpcy5kYXRhLmZpZWxkVmFsdWUubWFwKGU9Pih7ZXhwb3J0VmFsdWU6ZSxkaXNwbGF5VmFsdWU6ZX0pKSk7dGhpcy5kYXRhLmNvbWJvPXRoaXMuaGFzRmllbGRGbGFnKFYpO3RoaXMuZGF0YS5tdWx0aVNlbGVjdD10aGlzLmhhc0ZpZWxkRmxhZyhKKTt0aGlzLl9oYXNUZXh0PSEwfWdldEZpZWxkT2JqZWN0KCl7Y29uc3QgZT10aGlzLmRhdGEuY29tYm8/ImNvbWJvYm94IjoibGlzdGJveCIsdD10aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGg+MD90aGlzLmRhdGEuZmllbGRWYWx1ZVswXTpudWxsO3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dCxkZWZhdWx0VmFsdWU6dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsbnVtSXRlbXM6dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoLG11bHRpcGxlU2VsZWN0aW9uOnRoaXMuZGF0YS5tdWx0aVNlbGVjdCxoaWRkZW46dGhpcy5kYXRhLmhpZGRlbixhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLGl0ZW1zOnRoaXMuZGF0YS5vcHRpb25zLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbix0eXBlOmV9fWFtZW5kU2F2ZWREaWN0KGUsdCl7aWYoIXRoaXMuaGFzSW5kaWNlcylyZXR1cm47bGV0IGE9ZT8uZ2V0KHRoaXMuZGF0YS5pZCk/LnZhbHVlO0FycmF5LmlzQXJyYXkoYSl8fChhPVthXSk7Y29uc3Qgcj1bXSx7b3B0aW9uczppfT10aGlzLmRhdGE7Zm9yKGxldCBlPTAsdD0wLG49aS5sZW5ndGg7ZTxuO2UrKylpZihpW2VdLmV4cG9ydFZhbHVlPT09YVt0XSl7ci5wdXNoKGUpO3QrPTF9dC5zZXQoIkkiLHIpfWFzeW5jIF9nZXRBcHBlYXJhbmNlKGUsdCxyLGkpe2lmKHRoaXMuZGF0YS5jb21ibylyZXR1cm4gc3VwZXIuX2dldEFwcGVhcmFuY2UoZSx0LHIsaSk7bGV0IG4scztjb25zdCBvPWk/LmdldCh0aGlzLmRhdGEuaWQpO2lmKG8pe3M9by5yb3RhdGlvbjtuPW8udmFsdWV9aWYodm9pZCAwPT09cyYmdm9pZCAwPT09biYmIXRoaXMuX25lZWRBcHBlYXJhbmNlcylyZXR1cm4gbnVsbDt2b2lkIDA9PT1uP249dGhpcy5kYXRhLmZpZWxkVmFsdWU6QXJyYXkuaXNBcnJheShuKXx8KG49W25dKTtsZXR7d2lkdGg6YyxoZWlnaHQ6bH09dGhpczs5MCE9PXMmJjI3MCE9PXN8fChbYyxsXT1bbCxjXSk7Y29uc3QgaD10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsdT1bXTtmb3IobGV0IGU9MDtlPGg7ZSsrKXtjb25zdHtleHBvcnRWYWx1ZTp0fT10aGlzLmRhdGEub3B0aW9uc1tlXTtuLmluY2x1ZGVzKHQpJiZ1LnB1c2goZSl9dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPXBhcnNlRGVmYXVsdEFwcGVhcmFuY2UodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSk7Y29uc3QgZD1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShlLHQsdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpO2xldCBmLHtmb250U2l6ZTpnfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO2lmKGcpZj10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtlbHNle2NvbnN0IGU9KGwtMSkvaDtsZXQgdCxhPS0xO2Zvcihjb25zdHtkaXNwbGF5VmFsdWU6ZX1vZiB0aGlzLmRhdGEub3B0aW9ucyl7Y29uc3Qgcj10aGlzLl9nZXRUZXh0V2lkdGgoZSxkKTtpZihyPmEpe2E9cjt0PWV9fVtmLGddPXRoaXMuX2NvbXB1dGVGb250U2l6ZShlLGMtNCx0LGQsLTEpfWNvbnN0IHA9ZyphLG09KHAtZykvMixiPU1hdGguZmxvb3IobC9wKTtsZXQgeT0wO2lmKHUubGVuZ3RoPjApe2NvbnN0IGU9TWF0aC5taW4oLi4udSksdD1NYXRoLm1heCguLi51KTt5PU1hdGgubWF4KDAsdC1iKzEpO3k+ZSYmKHk9ZSl9Y29uc3Qgdz1NYXRoLm1pbih5K2IrMSxoKSx4PVsiL1R4IEJNQyBxIixgMSAxICR7Y30gJHtsfSByZSBXIG5gXTtpZih1Lmxlbmd0aCl7eC5wdXNoKCIwLjYwMDAwNiAwLjc1Njg2NiAwLjg1NDkwNCByZyIpO2Zvcihjb25zdCBlIG9mIHUpeTw9ZSYmZTx3JiZ4LnB1c2goYDEgJHtsLShlLXkrMSkqcH0gJHtjfSAke3B9IHJlIGZgKX14LnB1c2goIkJUIixmLGAxIDAgMCAxIDAgJHtsfSBUbWApO2NvbnN0IFM9e3NoaWZ0OjB9O2ZvcihsZXQgZT15O2U8dztlKyspe2NvbnN0e2Rpc3BsYXlWYWx1ZTp0fT10aGlzLmRhdGEub3B0aW9uc1tlXSxhPWU9PT15P206MDt4LnB1c2godGhpcy5fcmVuZGVyVGV4dCh0LGQsZyxjLDAsUywyLC1wK2EpKX14LnB1c2goIkVUIFEgRU1DIik7cmV0dXJuIHguam9pbigiXG4iKX19Y2xhc3MgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmZpZWxkVmFsdWU9bnVsbDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEubm9IVE1MPSF0aGlzLmRhdGEuaGFzT3duQ2FudmFzfWdldEZpZWxkT2JqZWN0KCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19Y2xhc3MgVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5ub1JvdGF0ZT0hMDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEubm9IVE1MPSExO2NvbnN0e2RpY3Q6dH09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9TS5URVhUO2lmKHRoaXMuZGF0YS5oYXNBcHBlYXJhbmNlKXRoaXMuZGF0YS5uYW1lPSJOb0ljb24iO2Vsc2V7dGhpcy5kYXRhLnJlY3RbMV09dGhpcy5kYXRhLnJlY3RbM10tMjI7dGhpcy5kYXRhLnJlY3RbMl09dGhpcy5kYXRhLnJlY3RbMF0rMjI7dGhpcy5kYXRhLm5hbWU9dC5oYXMoIk5hbWUiKT90LmdldCgiTmFtZSIpLm5hbWU6Ik5vdGUifWlmKHQuaGFzKCJTdGF0ZSIpKXt0aGlzLmRhdGEuc3RhdGU9dC5nZXQoIlN0YXRlIil8fG51bGw7dGhpcy5kYXRhLnN0YXRlTW9kZWw9dC5nZXQoIlN0YXRlTW9kZWwiKXx8bnVsbH1lbHNle3RoaXMuZGF0YS5zdGF0ZT1udWxsO3RoaXMuZGF0YS5zdGF0ZU1vZGVsPW51bGx9fX1jbGFzcyBMaW5rQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LGFubm90YXRpb25HbG9iYWxzOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPU0uTElOSzt0aGlzLmRhdGEubm9IVE1MPSExO2NvbnN0IHI9Z2V0UXVhZFBvaW50cyh0LHRoaXMucmVjdGFuZ2xlKTtyJiYodGhpcy5kYXRhLnF1YWRQb2ludHM9cik7dGhpcy5kYXRhLmJvcmRlckNvbG9yfHw9dGhpcy5kYXRhLmNvbG9yO0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6dCxyZXN1bHRPYmo6dGhpcy5kYXRhLGRvY0Jhc2VVcmw6YS5iYXNlVXJsLGRvY0F0dGFjaG1lbnRzOmEuYXR0YWNobWVudHN9KX1nZXQgb3ZlcmxheXNUZXh0Q29udGVudCgpe3JldHVybiEwfX1jbGFzcyBQb3B1cEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dH09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9TS5QT1BVUDt0aGlzLmRhdGEubm9IVE1MPSExOzAhPT10aGlzLndpZHRoJiYwIT09dGhpcy5oZWlnaHR8fCh0aGlzLmRhdGEucmVjdD1udWxsKTtsZXQgYT10LmdldCgiUGFyZW50Iik7aWYoIWEpe3dhcm4oIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpO3JldHVybn10aGlzLmRhdGEucGFyZW50UmVjdD1sb29rdXBOb3JtYWxSZWN0KGEuZ2V0QXJyYXkoIlJlY3QiKSxudWxsKTt0aGlzLmRhdGEuY3JlYXRpb25EYXRlPWEuZ2V0KCJDcmVhdGlvbkRhdGUiKXx8IiI7aXNOYW1lKGEuZ2V0KCJSVCIpLEQpJiYoYT1hLmdldCgiSVJUIikpO2lmKGEuaGFzKCJNIikpe3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShhLmdldCgiTSIpKTt0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT10aGlzLm1vZGlmaWNhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT1udWxsO2lmKGEuaGFzKCJDIikpe3RoaXMuc2V0Q29sb3IoYS5nZXRBcnJheSgiQyIpKTt0aGlzLmRhdGEuY29sb3I9dGhpcy5jb2xvcn1lbHNlIHRoaXMuZGF0YS5jb2xvcj1udWxsO2lmKCF0aGlzLnZpZXdhYmxlKXtjb25zdCBlPWEuZ2V0KCJGIik7dGhpcy5faXNWaWV3YWJsZShlKSYmdGhpcy5zZXRGbGFncyhlKX10aGlzLnNldFRpdGxlKGEuZ2V0KCJUIikpO3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENvbnRlbnRzKGEuZ2V0KCJDb250ZW50cyIpKTt0aGlzLmRhdGEuY29udGVudHNPYmo9dGhpcy5fY29udGVudHM7YS5oYXMoIlJDIikmJih0aGlzLmRhdGEucmljaFRleHQ9WEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChhLmdldCgiUkMiKSkpO3RoaXMuZGF0YS5vcGVuPSEhdC5nZXQoIk9wZW4iKX1zdGF0aWMgY3JlYXRlTmV3RGljdChlLHQsYSl7Y29uc3R7b2xkQW5ub3RhdGlvbjpyLHJlY3Q6aSxwYXJlbnQ6bn09ZSxzPXJ8fG5ldyBEaWN0KHQpO3Muc2V0SWZOb3RFeGlzdHMoIlR5cGUiLE5hbWUuZ2V0KCJBbm5vdCIpKTtzLnNldElmTm90RXhpc3RzKCJTdWJ0eXBlIixOYW1lLmdldCgiUG9wdXAiKSk7cy5zZXRJZk5vdEV4aXN0cygiT3BlbiIsITEpO3Muc2V0SWZBcnJheSgiUmVjdCIsaSk7cy5zZXQoIlBhcmVudCIsbik7cmV0dXJuIHN9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oZSx0LGEpe3JldHVybiBudWxsfX1jbGFzcyBGcmVlVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5pc0VkaXRhYmxlPSF0aGlzLmRhdGEubm9IVE1MO3RoaXMuZGF0YS5ub0hUTUw9ITE7Y29uc3R7YW5ub3RhdGlvbkdsb2JhbHM6dCxldmFsdWF0b3JPcHRpb25zOmEseHJlZjpyfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1NLkZSRUVURVhUO3RoaXMuc2V0RGVmYXVsdEFwcGVhcmFuY2UoZSk7dGhpcy5faGFzQXBwZWFyYW5jZT0hIXRoaXMuYXBwZWFyYW5jZTtpZih0aGlzLl9oYXNBcHBlYXJhbmNlKXtjb25zdHtmb250Q29sb3I6ZSxmb250U2l6ZTppfT1mdW5jdGlvbiBwYXJzZUFwcGVhcmFuY2VTdHJlYW0oZSx0LGEscil7cmV0dXJuIG5ldyBBcHBlYXJhbmNlU3RyZWFtRXZhbHVhdG9yKGUsdCxhLHIpLnBhcnNlKCl9KHRoaXMuYXBwZWFyYW5jZSxhLHIsdC5nbG9iYWxDb2xvclNwYWNlQ2FjaGUpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udENvbG9yPWU7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZT1pfHwxMH1lbHNle3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemV8fD0xMDtjb25zdHtmb250Q29sb3I6dCxmb250U2l6ZTphfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO2lmKHRoaXMuX2NvbnRlbnRzLnN0cil7dGhpcy5kYXRhLnRleHRDb250ZW50PXRoaXMuX2NvbnRlbnRzLnN0ci5zcGxpdCgvXHJcbj98XG4vKS5tYXAoZT0+ZS50cmltRW5kKCkpO2NvbnN0e2Nvb3JkczplLGJib3g6dCxtYXRyaXg6cn09RmFrZVVuaWNvZGVGb250LmdldEZpcnN0UG9zaXRpb25JbmZvKHRoaXMucmVjdGFuZ2xlLHRoaXMucm90YXRpb24sYSk7dGhpcy5kYXRhLnRleHRQb3NpdGlvbj10aGlzLl90cmFuc2Zvcm1Qb2ludChlLHQscil9aWYodGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe2NvbnN0IGk9ZS5kaWN0LmdldCgiQ0EiKSxuPW5ldyBGYWtlVW5pY29kZUZvbnQociwic2Fucy1zZXJpZiIpO3RoaXMuYXBwZWFyYW5jZT1uLmNyZWF0ZUFwcGVhcmFuY2UodGhpcy5fY29udGVudHMuc3RyLHRoaXMucmVjdGFuZ2xlLHRoaXMucm90YXRpb24sYSx0LGkpO3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UpfWVsc2Ugd2FybigiRnJlZVRleHRBbm5vdGF0aW9uOiBPZmZzY3JlZW5DYW52YXMgaXMgbm90IHN1cHBvcnRlZCwgYW5ub3RhdGlvbiBtYXkgbm90IHJlbmRlciBjb3JyZWN0bHkuIil9fWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiB0aGlzLl9oYXNBcHBlYXJhbmNlfXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6YSxhcDpyfSl7Y29uc3R7Y29sb3I6aSxkYXRlOm4sZm9udFNpemU6cyxvbGRBbm5vdGF0aW9uOm8scmVjdDpjLHJvdGF0aW9uOmwsdXNlcjpoLHZhbHVlOnV9PWUsZD1vfHxuZXcgRGljdCh0KTtkLnNldElmTm90RXhpc3RzKCJUeXBlIixOYW1lLmdldCgiQW5ub3QiKSk7ZC5zZXRJZk5vdEV4aXN0cygiU3VidHlwZSIsTmFtZS5nZXQoIkZyZWVUZXh0IikpO2Quc2V0KG8/Ik0iOiJDcmVhdGlvbkRhdGUiLGBEOiR7Z2V0TW9kaWZpY2F0aW9uRGF0ZShuKX1gKTtvJiZkLmRlbGV0ZSgiUkMiKTtkLnNldElmQXJyYXkoIlJlY3QiLGMpO2NvbnN0IGY9YC9IZWx2ICR7c30gVGYgJHtnZXRQZGZDb2xvcihpLCEwKX1gO2Quc2V0KCJEQSIsZik7ZC5zZXRJZkRlZmluZWQoIkNvbnRlbnRzIixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKHUpKTtkLnNldElmTm90RXhpc3RzKCJGIiw0KTtkLnNldElmTm90RXhpc3RzKCJCb3JkZXIiLFswLDAsMF0pO2Quc2V0SWZOdW1iZXIoIlJvdGF0ZSIsbCk7ZC5zZXRJZkRlZmluZWQoIlQiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUoaCkpO2lmKGF8fHIpe2NvbnN0IGU9bmV3IERpY3QodCk7ZC5zZXQoIkFQIixlKTtlLnNldCgiTiIsYXx8cil9cmV0dXJuIGR9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oZSx0LHIpe2NvbnN0e2Jhc2VGb250UmVmOmksZXZhbHVhdG9yOm4sdGFzazpzfT1yLHtjb2xvcjpvLGZvbnRTaXplOmMscmVjdDpsLHJvdGF0aW9uOmgsdmFsdWU6dX09ZTtpZighbylyZXR1cm4gbnVsbDtjb25zdCBkPW5ldyBEaWN0KHQpLGY9bmV3IERpY3QodCk7aWYoaSlmLnNldCgiSGVsdiIsaSk7ZWxzZXtjb25zdCBlPW5ldyBEaWN0KHQpO2Uuc2V0SWZOYW1lKCJCYXNlRm9udCIsIkhlbHZldGljYSIpO2Uuc2V0SWZOYW1lKCJUeXBlIiwiRm9udCIpO2Uuc2V0SWZOYW1lKCJTdWJ0eXBlIiwiVHlwZTEiKTtlLnNldElmTmFtZSgiRW5jb2RpbmciLCJXaW5BbnNpRW5jb2RpbmciKTtmLnNldCgiSGVsdiIsZSl9ZC5zZXQoIkZvbnQiLGYpO2NvbnN0IGc9YXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEobixzLHtmb250TmFtZToiSGVsdiIsZm9udFNpemU6Y30sZCksW3AsbSxiLHldPWw7bGV0IHc9Yi1wLHg9eS1tO2glMTgwIT0wJiYoW3cseF09W3gsd10pO2NvbnN0IFM9dS5zcGxpdCgiXG4iKSxrPWMvMWUzO2xldCBDPS0xLzA7Y29uc3Qgdj1bXTtmb3IobGV0IGUgb2YgUyl7Y29uc3QgdD1nLmVuY29kZVN0cmluZyhlKTtpZih0Lmxlbmd0aD4xKXJldHVybiBudWxsO2U9dC5qb2luKCIiKTt2LnB1c2goZSk7bGV0IGE9MDtjb25zdCByPWcuY2hhcnNUb0dseXBocyhlKTtmb3IoY29uc3QgZSBvZiByKWErPWUud2lkdGgqaztDPU1hdGgubWF4KEMsYSl9bGV0IEY9MTtDPncmJihGPXcvQyk7bGV0IFQ9MTtjb25zdCBPPWEqYyxNPTEqYyxEPU8qUy5sZW5ndGg7RD54JiYoVD14L0QpO2NvbnN0IFI9YypNYXRoLm1pbihGLFQpO2xldCBOLEUsTDtzd2l0Y2goaCl7Y2FzZSAwOkw9WzEsMCwwLDFdO0U9W2xbMF0sbFsxXSx3LHhdO049W2xbMF0sbFszXS1NXTticmVhaztjYXNlIDkwOkw9WzAsMSwtMSwwXTtFPVtsWzFdLC1sWzJdLHcseF07Tj1bbFsxXSwtbFswXS1NXTticmVhaztjYXNlIDE4MDpMPVstMSwwLDAsLTFdO0U9Wy1sWzJdLC1sWzNdLHcseF07Tj1bLWxbMl0sLWxbMV0tTV07YnJlYWs7Y2FzZSAyNzA6TD1bMCwtMSwxLDBdO0U9Wy1sWzNdLGxbMF0sdyx4XTtOPVstbFszXSxsWzJdLU1dfWNvbnN0IF89WyJxIixgJHtMLmpvaW4oIiAiKX0gMCAwIGNtYCxgJHtFLmpvaW4oIiAiKX0gcmUgVyBuYCwiQlQiLGAke2dldFBkZkNvbG9yKG8sITApfWAsYDAgVGMgL0hlbHYgJHtudW1iZXJUb1N0cmluZyhSKX0gVGZgXTtfLnB1c2goYCR7Ti5qb2luKCIgIil9IFRkICgke2VzY2FwZVN0cmluZyh2WzBdKX0pIFRqYCk7Y29uc3QgVT1udW1iZXJUb1N0cmluZyhPKTtmb3IobGV0IGU9MSx0PXYubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9dltlXTtfLnB1c2goYDAgLSR7VX0gVGQgKCR7ZXNjYXBlU3RyaW5nKHQpfSkgVGpgKX1fLnB1c2goIkVUIiwiUSIpO2NvbnN0IGo9Xy5qb2luKCJcbiIpLFg9bmV3IERpY3QodCk7WC5zZXQoIkZvcm1UeXBlIiwxKTtYLnNldElmTmFtZSgiU3VidHlwZSIsIkZvcm0iKTtYLnNldElmTmFtZSgiVHlwZSIsIlhPYmplY3QiKTtYLnNldCgiQkJveCIsbCk7WC5zZXQoIlJlc291cmNlcyIsZCk7WC5zZXQoIk1hdHJpeCIsWzEsMCwwLDEsLWxbMF0sLWxbMV1dKTtjb25zdCBxPW5ldyBTdHJpbmdTdHJlYW0oaik7cS5kaWN0PVg7cmV0dXJuIHF9fWNsYXNzIExpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1NLkxJTkU7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7dGhpcy5kYXRhLm5vSFRNTD0hMTtjb25zdCByPWxvb2t1cFJlY3QodC5nZXRBcnJheSgiTCIpLFswLDAsMCwwXSk7dGhpcy5kYXRhLmxpbmVDb29yZGluYXRlcz1VdGlsLm5vcm1hbGl6ZVJlY3Qocik7dGhpcy5zZXRMaW5lRW5kaW5ncyh0LmdldEFycmF5KCJMRSIpKTt0aGlzLmRhdGEubGluZUVuZGluZ3M9dGhpcy5saW5lRW5kaW5ncztpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPWdldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcixbMCwwLDBdKSxpPXQuZ2V0KCJDQSIpLG49Z2V0UGRmQ29sb3JBcnJheShnZXRSZ2JDb2xvcih0LmdldEFycmF5KCJJQyIpLG51bGwpKSxzPW4/aTpudWxsLG89dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MSxjPTIqbyxsPVt0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzBdLWMsdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1sxXS1jLHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMl0rYyx0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzNdK2NdO1V0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLGwpfHwodGhpcy5yZWN0YW5nbGU9bCk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6YSxleHRyYTpgJHtvfSB3YCxzdHJva2VDb2xvcjplLGZpbGxDb2xvcjpuLHN0cm9rZUFscGhhOmksZmlsbEFscGhhOnMscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goYCR7clswXX0gJHtyWzFdfSBtYCxgJHtyWzJdfSAke3JbM119IGxgLCJTIik7cmV0dXJuW3RbMF0tbyx0WzddLW8sdFsyXStvLHRbM10rb119fSl9fX1jbGFzcyBTcXVhcmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1NLlNRVUFSRTt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEubm9IVE1MPSExO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yLFswLDAsMF0pLHI9dC5nZXQoIkNBIiksaT1nZXRQZGZDb2xvckFycmF5KGdldFJnYkNvbG9yKHQuZ2V0QXJyYXkoIklDIiksbnVsbCkpLG49aT9yOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFpKXJldHVybjt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOmksc3Ryb2tlQWxwaGE6cixmaWxsQWxwaGE6bixwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGE9dFs0XSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIscj10WzVdK3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixuPXRbNl0tdFs0XS10aGlzLmJvcmRlclN0eWxlLndpZHRoLHM9dFszXS10WzddLXRoaXMuYm9yZGVyU3R5bGUud2lkdGg7ZS5wdXNoKGAke2F9ICR7cn0gJHtufSAke3N9IHJlYCk7aT9lLnB1c2goIkIiKTplLnB1c2goIlMiKTtyZXR1cm5bdFswXSx0WzddLHRbMl0sdFszXV19fSl9fX1jbGFzcyBDaXJjbGVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1NLkNJUkNMRTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPWdldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcixbMCwwLDBdKSxyPXQuZ2V0KCJDQSIpLGk9Z2V0UGRmQ29sb3JBcnJheShnZXRSZ2JDb2xvcih0LmdldEFycmF5KCJJQyIpLG51bGwpKSxuPWk/cjpudWxsO2lmKDA9PT10aGlzLmJvcmRlclN0eWxlLndpZHRoJiYhaSlyZXR1cm47Y29uc3Qgcz00LzMqTWF0aC50YW4oTWF0aC5QSS84KTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOmksc3Ryb2tlQWxwaGE6cixmaWxsQWxwaGE6bixwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGE9dFswXSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIscj10WzFdLXRoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixuPXRbNl0tdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLG89dFs3XSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsYz1hKyhuLWEpLzIsbD1yKyhvLXIpLzIsaD0obi1hKS8yKnMsdT0oby1yKS8yKnM7ZS5wdXNoKGAke2N9ICR7b30gbWAsYCR7YytofSAke299ICR7bn0gJHtsK3V9ICR7bn0gJHtsfSBjYCxgJHtufSAke2wtdX0gJHtjK2h9ICR7cn0gJHtjfSAke3J9IGNgLGAke2MtaH0gJHtyfSAke2F9ICR7bC11fSAke2F9ICR7bH0gY2AsYCR7YX0gJHtsK3V9ICR7Yy1ofSAke299ICR7Y30gJHtvfSBjYCwiaCIpO2k/ZS5wdXNoKCJCIik6ZS5wdXNoKCJTIik7cmV0dXJuW3RbMF0sdFs3XSx0WzJdLHRbM11dfX0pfX19Y2xhc3MgUG9seWxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1NLlBPTFlMSU5FO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5ub0hUTUw9ITE7dGhpcy5kYXRhLnZlcnRpY2VzPW51bGw7aWYoISh0aGlzIGluc3RhbmNlb2YgUG9seWdvbkFubm90YXRpb24pKXt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzfWNvbnN0IHI9dC5nZXRBcnJheSgiVmVydGljZXMiKTtpZighaXNOdW1iZXJBcnJheShyLG51bGwpKXJldHVybjtjb25zdCBpPXRoaXMuZGF0YS52ZXJ0aWNlcz1GbG9hdDMyQXJyYXkuZnJvbShyKTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPWdldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcixbMCwwLDBdKSxyPXQuZ2V0KCJDQSIpO2xldCBuLHM9Z2V0UmdiQ29sb3IodC5nZXRBcnJheSgiSUMiKSxudWxsKTtzJiYocz1nZXRQZGZDb2xvckFycmF5KHMpKTtuPXM/dGhpcy5jb2xvcj9zLmV2ZXJ5KCh0LGEpPT50PT09ZVthXSk/ImYiOiJCIjoiZiI6IlMiO2NvbnN0IG89dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MSxjPTIqbyxsPVsxLzAsMS8wLC0xLzAsLTEvMF07Zm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSs9MilVdGlsLnJlY3RCb3VuZGluZ0JveChpW2VdLWMsaVtlKzFdLWMsaVtlXStjLGlbZSsxXStjLGwpO1V0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLGwpfHwodGhpcy5yZWN0YW5nbGU9bCk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6YSxleHRyYTpgJHtvfSB3YCxzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOnIsZmlsbENvbG9yOnMsZmlsbEFscGhhOnM/cjpudWxsLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Zm9yKGxldCB0PTAsYT1pLmxlbmd0aDt0PGE7dCs9MillLnB1c2goYCR7aVt0XX0gJHtpW3QrMV19ICR7MD09PXQ/Im0iOiJsIn1gKTtlLnB1c2gobik7cmV0dXJuW3RbMF0sdFs3XSx0WzJdLHRbM11dfX0pfX19Y2xhc3MgUG9seWdvbkFubm90YXRpb24gZXh0ZW5kcyBQb2x5bGluZUFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPU0uUE9MWUdPTn19Y2xhc3MgQ2FyZXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9TS5DQVJFVH19Y2xhc3MgSW5rQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7dGhpcy5kYXRhLm5vSFRNTD0hMTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1NLklOSzt0aGlzLmRhdGEuaW5rTGlzdHM9W107dGhpcy5kYXRhLmlzRWRpdGFibGU9IXRoaXMuZGF0YS5ub0hUTUw7dGhpcy5kYXRhLm5vSFRNTD0hMTt0aGlzLmRhdGEub3BhY2l0eT10LmdldCgiQ0EiKXx8MTtjb25zdCByPXQuZ2V0QXJyYXkoIklua0xpc3QiKTtpZihBcnJheS5pc0FycmF5KHIpKXtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDsrK2Upe2lmKCFBcnJheS5pc0FycmF5KHJbZV0pKWNvbnRpbnVlO2NvbnN0IHQ9bmV3IEZsb2F0MzJBcnJheShyW2VdLmxlbmd0aCk7dGhpcy5kYXRhLmlua0xpc3RzLnB1c2godCk7Zm9yKGxldCBpPTAsbj1yW2VdLmxlbmd0aDtpPG47aSs9Mil7Y29uc3Qgbj1hLmZldGNoSWZSZWYocltlXVtpXSkscz1hLmZldGNoSWZSZWYocltlXVtpKzFdKTtpZigibnVtYmVyIj09dHlwZW9mIG4mJiJudW1iZXIiPT10eXBlb2Ygcyl7dFtpXT1uO3RbaSsxXT1zfX19aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT1nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IsWzAsMCwwXSkscj10LmdldCgiQ0EiKSxpPXRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEsbj0yKmkscz1bMS8wLDEvMCwtMS8wLC0xLzBdO2Zvcihjb25zdCBlIG9mIHRoaXMuZGF0YS5pbmtMaXN0cylmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0Kz0yKVV0aWwucmVjdEJvdW5kaW5nQm94KGVbdF0tbixlW3QrMV0tbixlW3RdK24sZVt0KzFdK24scyk7VXRpbC5pbnRlcnNlY3QodGhpcy5yZWN0YW5nbGUscyl8fCh0aGlzLnJlY3RhbmdsZT1zKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke2l9IHdgLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6cixwb2ludHNDYWxsYmFjazooZSx0KT0+e2Zvcihjb25zdCB0IG9mIHRoaXMuZGF0YS5pbmtMaXN0cyl7Zm9yKGxldCBhPTAscj10Lmxlbmd0aDthPHI7YSs9MillLnB1c2goYCR7dFthXX0gJHt0W2ErMV19ICR7MD09PWE/Im0iOiJsIn1gKTtlLnB1c2goIlMiKX1yZXR1cm5bdFswXSx0WzddLHRbMl0sdFszXV19fSl9fX1zdGF0aWMgY3JlYXRlTmV3RGljdChlLHQse2FwUmVmOmEsYXA6cn0pe2NvbnN0e29sZEFubm90YXRpb246aSxjb2xvcjpuLGRhdGU6cyxvcGFjaXR5Om8scGF0aHM6YyxvdXRsaW5lczpsLHJlY3Q6aCxyb3RhdGlvbjp1LHRoaWNrbmVzczpkLHVzZXI6Zn09ZSxnPWl8fG5ldyBEaWN0KHQpO2cuc2V0SWZOb3RFeGlzdHMoIlR5cGUiLE5hbWUuZ2V0KCJBbm5vdCIpKTtnLnNldElmTm90RXhpc3RzKCJTdWJ0eXBlIixOYW1lLmdldCgiSW5rIikpO2cuc2V0KGk/Ik0iOiJDcmVhdGlvbkRhdGUiLGBEOiR7Z2V0TW9kaWZpY2F0aW9uRGF0ZShzKX1gKTtnLnNldElmQXJyYXkoIlJlY3QiLGgpO2cuc2V0SWZBcnJheSgiSW5rTGlzdCIsbD8ucG9pbnRzfHxjPy5wb2ludHMpO2cuc2V0SWZOb3RFeGlzdHMoIkYiLDQpO2cuc2V0SWZOdW1iZXIoIlJvdGF0ZSIsdSk7Zy5zZXRJZkRlZmluZWQoIlQiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUoZikpO2wmJmcuc2V0SWZOYW1lKCJJVCIsIklua0hpZ2hsaWdodCIpO2lmKGQ+MCl7Y29uc3QgZT1uZXcgRGljdCh0KTtnLnNldCgiQlMiLGUpO2Uuc2V0KCJXIixkKX1nLnNldElmQXJyYXkoIkMiLGdldFBkZkNvbG9yQXJyYXkobikpO2cuc2V0SWZOdW1iZXIoIkNBIixvKTtpZihyfHxhKXtjb25zdCBlPW5ldyBEaWN0KHQpO2cuc2V0KCJBUCIsZSk7ZS5zZXQoIk4iLGF8fHIpfXJldHVybiBnfXN0YXRpYyBhc3luYyBjcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGUsdCxhKXtpZihlLm91dGxpbmVzKXJldHVybiB0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW1Gb3JIaWdobGlnaHQoZSx0LGEpO2NvbnN0e2NvbG9yOnIscmVjdDppLHBhdGhzOm4sdGhpY2tuZXNzOnMsb3BhY2l0eTpvfT1lO2lmKCFyKXJldHVybiBudWxsO2NvbnN0IGM9W2Ake3N9IHcgMSBKIDEgamAsYCR7Z2V0UGRmQ29sb3IociwhMSl9YF07MSE9PW8mJmMucHVzaCgiL1IwIGdzIik7Zm9yKGNvbnN0IGUgb2Ygbi5saW5lcyl7Yy5wdXNoKGAke251bWJlclRvU3RyaW5nKGVbNF0pfSAke251bWJlclRvU3RyaW5nKGVbNV0pfSBtYCk7Zm9yKGxldCB0PTYsYT1lLmxlbmd0aDt0PGE7dCs9NilpZihpc05hTihlW3RdKSljLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoZVt0KzRdKX0gJHtudW1iZXJUb1N0cmluZyhlW3QrNV0pfSBsYCk7ZWxzZXtjb25zdFthLHIsaSxuLHMsb109ZS5zbGljZSh0LHQrNik7Yy5wdXNoKFthLHIsaSxuLHMsb10ubWFwKG51bWJlclRvU3RyaW5nKS5qb2luKCIgIikrIiBjIil9Nj09PWUubGVuZ3RoJiZjLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoZVs0XSl9ICR7bnVtYmVyVG9TdHJpbmcoZVs1XSl9IGxgKX1jLnB1c2goIlMiKTtjb25zdCBsPWMuam9pbigiXG4iKSxoPW5ldyBEaWN0KHQpO2guc2V0KCJGb3JtVHlwZSIsMSk7aC5zZXRJZk5hbWUoIlN1YnR5cGUiLCJGb3JtIik7aC5zZXRJZk5hbWUoIlR5cGUiLCJYT2JqZWN0Iik7aC5zZXQoIkJCb3giLGkpO2guc2V0KCJMZW5ndGgiLGwubGVuZ3RoKTtpZigxIT09byl7Y29uc3QgZT1uZXcgRGljdCh0KSxhPW5ldyBEaWN0KHQpLHI9bmV3IERpY3QodCk7ci5zZXQoIkNBIixvKTtyLnNldElmTmFtZSgiVHlwZSIsIkV4dEdTdGF0ZSIpO2Euc2V0KCJSMCIscik7ZS5zZXQoIkV4dEdTdGF0ZSIsYSk7aC5zZXQoIlJlc291cmNlcyIsZSl9Y29uc3QgdT1uZXcgU3RyaW5nU3RyZWFtKGwpO3UuZGljdD1oO3JldHVybiB1fXN0YXRpYyBhc3luYyBjcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtRm9ySGlnaGxpZ2h0KGUsdCxhKXtjb25zdHtjb2xvcjpyLHJlY3Q6aSxvdXRsaW5lczp7b3V0bGluZTpufSxvcGFjaXR5OnN9PWU7aWYoIXIpcmV0dXJuIG51bGw7Y29uc3Qgbz1bYCR7Z2V0UGRmQ29sb3IociwhMCl9YCwiL1IwIGdzIl07by5wdXNoKGAke251bWJlclRvU3RyaW5nKG5bNF0pfSAke251bWJlclRvU3RyaW5nKG5bNV0pfSBtYCk7Zm9yKGxldCBlPTYsdD1uLmxlbmd0aDtlPHQ7ZSs9NilpZihpc05hTihuW2VdKSlvLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcobltlKzRdKX0gJHtudW1iZXJUb1N0cmluZyhuW2UrNV0pfSBsYCk7ZWxzZXtjb25zdFt0LGEscixpLHMsY109bi5zbGljZShlLGUrNik7by5wdXNoKFt0LGEscixpLHMsY10ubWFwKG51bWJlclRvU3RyaW5nKS5qb2luKCIgIikrIiBjIil9by5wdXNoKCJoIGYiKTtjb25zdCBjPW8uam9pbigiXG4iKSxsPW5ldyBEaWN0KHQpO2wuc2V0KCJGb3JtVHlwZSIsMSk7bC5zZXRJZk5hbWUoIlN1YnR5cGUiLCJGb3JtIik7bC5zZXRJZk5hbWUoIlR5cGUiLCJYT2JqZWN0Iik7bC5zZXQoIkJCb3giLGkpO2wuc2V0KCJMZW5ndGgiLGMubGVuZ3RoKTtjb25zdCBoPW5ldyBEaWN0KHQpLHU9bmV3IERpY3QodCk7aC5zZXQoIkV4dEdTdGF0ZSIsdSk7bC5zZXQoIlJlc291cmNlcyIsaCk7Y29uc3QgZD1uZXcgRGljdCh0KTt1LnNldCgiUjAiLGQpO2Quc2V0SWZOYW1lKCJCTSIsIk11bHRpcGx5Iik7aWYoMSE9PXMpe2Quc2V0KCJjYSIscyk7ZC5zZXRJZk5hbWUoIlR5cGUiLCJFeHRHU3RhdGUiKX1jb25zdCBmPW5ldyBTdHJpbmdTdHJlYW0oYyk7Zi5kaWN0PWw7cmV0dXJuIGZ9fWNsYXNzIEhpZ2hsaWdodEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPU0uSElHSExJR0hUO3RoaXMuZGF0YS5pc0VkaXRhYmxlPSF0aGlzLmRhdGEubm9IVE1MO3RoaXMuZGF0YS5ub0hUTUw9ITE7dGhpcy5kYXRhLm9wYWNpdHk9dC5nZXQoIkNBIil8fDE7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyh0LG51bGwpKXtjb25zdCBlPXRoaXMuYXBwZWFyYW5jZT8uZGljdC5nZXQoIlJlc291cmNlcyIpO2lmKCF0aGlzLmFwcGVhcmFuY2V8fCFlPy5oYXMoIkV4dEdTdGF0ZSIpKXt0aGlzLmFwcGVhcmFuY2UmJndhcm4oIkhpZ2hsaWdodEFubm90YXRpb24gLSBpZ25vcmluZyBidWlsdC1pbiBhcHBlYXJhbmNlIHN0cmVhbS4iKTtjb25zdCBlPWdldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcixbMSwxLDBdKSxyPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZmlsbENvbG9yOmUsYmxlbmRNb2RlOiJNdWx0aXBseSIsZmlsbEFscGhhOnIscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goYCR7dFswXX0gJHt0WzFdfSBtYCxgJHt0WzJdfSAke3RbM119IGxgLGAke3RbNl19ICR7dFs3XX0gbGAsYCR7dFs0XX0gJHt0WzVdfSBsYCwiZiIpO3JldHVyblt0WzBdLHRbN10sdFsyXSx0WzNdXX19KX19ZWxzZSB0aGlzLmRhdGEucG9wdXBSZWY9bnVsbH1nZXQgb3ZlcmxheXNUZXh0Q29udGVudCgpe3JldHVybiEwfXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6YSxhcDpyfSl7Y29uc3R7Y29sb3I6aSxkYXRlOm4sb2xkQW5ub3RhdGlvbjpzLG9wYWNpdHk6byxyZWN0OmMscm90YXRpb246bCx1c2VyOmgscXVhZFBvaW50czp1fT1lLGQ9c3x8bmV3IERpY3QodCk7ZC5zZXRJZk5vdEV4aXN0cygiVHlwZSIsTmFtZS5nZXQoIkFubm90IikpO2Quc2V0SWZOb3RFeGlzdHMoIlN1YnR5cGUiLE5hbWUuZ2V0KCJIaWdobGlnaHQiKSk7ZC5zZXQocz8iTSI6IkNyZWF0aW9uRGF0ZSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKG4pfWApO2Quc2V0SWZBcnJheSgiUmVjdCIsYyk7ZC5zZXRJZk5vdEV4aXN0cygiRiIsNCk7ZC5zZXRJZk5vdEV4aXN0cygiQm9yZGVyIixbMCwwLDBdKTtkLnNldElmTnVtYmVyKCJSb3RhdGUiLGwpO2Quc2V0SWZBcnJheSgiUXVhZFBvaW50cyIsdSk7ZC5zZXRJZkFycmF5KCJDIixnZXRQZGZDb2xvckFycmF5KGkpKTtkLnNldElmTnVtYmVyKCJDQSIsbyk7ZC5zZXRJZkRlZmluZWQoIlQiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUoaCkpO2lmKGF8fHIpe2NvbnN0IGU9bmV3IERpY3QodCk7ZC5zZXQoIkFQIixlKTtlLnNldCgiTiIsYXx8cil9cmV0dXJuIGR9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oZSx0LGEpe2NvbnN0e2NvbG9yOnIscmVjdDppLG91dGxpbmVzOm4sb3BhY2l0eTpzfT1lO2lmKCFyKXJldHVybiBudWxsO2NvbnN0IG89W2Ake2dldFBkZkNvbG9yKHIsITApfWAsIi9SMCBncyJdLGM9W107Zm9yKGNvbnN0IGUgb2Ygbil7Yy5sZW5ndGg9MDtjLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoZVswXSl9ICR7bnVtYmVyVG9TdHJpbmcoZVsxXSl9IG1gKTtmb3IobGV0IHQ9MixhPWUubGVuZ3RoO3Q8YTt0Kz0yKWMucHVzaChgJHtudW1iZXJUb1N0cmluZyhlW3RdKX0gJHtudW1iZXJUb1N0cmluZyhlW3QrMV0pfSBsYCk7Yy5wdXNoKCJoIik7by5wdXNoKGMuam9pbigiXG4iKSl9by5wdXNoKCJmKiIpO2NvbnN0IGw9by5qb2luKCJcbiIpLGg9bmV3IERpY3QodCk7aC5zZXQoIkZvcm1UeXBlIiwxKTtoLnNldElmTmFtZSgiU3VidHlwZSIsIkZvcm0iKTtoLnNldElmTmFtZSgiVHlwZSIsIlhPYmplY3QiKTtoLnNldCgiQkJveCIsaSk7aC5zZXQoIkxlbmd0aCIsbC5sZW5ndGgpO2NvbnN0IHU9bmV3IERpY3QodCksZD1uZXcgRGljdCh0KTt1LnNldCgiRXh0R1N0YXRlIixkKTtoLnNldCgiUmVzb3VyY2VzIix1KTtjb25zdCBmPW5ldyBEaWN0KHQpO2Quc2V0KCJSMCIsZik7Zi5zZXRJZk5hbWUoIkJNIiwiTXVsdGlwbHkiKTtpZigxIT09cyl7Zi5zZXQoImNhIixzKTtmLnNldElmTmFtZSgiVHlwZSIsIkV4dEdTdGF0ZSIpfWNvbnN0IGc9bmV3IFN0cmluZ1N0cmVhbShsKTtnLmRpY3Q9aDtyZXR1cm4gZ319Y2xhc3MgVW5kZXJsaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9TS5VTkRFUkxJTkU7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyh0LG51bGwpKXtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPWdldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcixbMCwwLDBdKSxyPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZXh0cmE6IltdIDAgZCAwLjU3MSB3IixzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOnIscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goYCR7dFs0XX0gJHt0WzVdKzEuM30gbWAsYCR7dFs2XX0gJHt0WzddKzEuM30gbGAsIlMiKTtyZXR1cm5bdFswXSx0WzddLHRbMl0sdFszXV19fSl9fWVsc2UgdGhpcy5kYXRhLnBvcHVwUmVmPW51bGx9Z2V0IG92ZXJsYXlzVGV4dENvbnRlbnQoKXtyZXR1cm4hMH19Y2xhc3MgU3F1aWdnbHlBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1NLlNRVUlHR0xZO2lmKHRoaXMuZGF0YS5xdWFkUG9pbnRzPWdldFF1YWRQb2ludHModCxudWxsKSl7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT1nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IsWzAsMCwwXSkscj10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOnIscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntjb25zdCBhPSh0WzFdLXRbNV0pLzY7bGV0IHI9YSxpPXRbNF07Y29uc3Qgbj10WzVdLHM9dFs2XTtlLnB1c2goYCR7aX0gJHtuK3J9IG1gKTtkb3tpKz0yO3I9MD09PXI/YTowO2UucHVzaChgJHtpfSAke24rcn0gbGApfXdoaWxlKGk8cyk7ZS5wdXNoKCJTIik7cmV0dXJuW3RbNF0sbi0yKmEscyxuKzIqYV19fSl9fWVsc2UgdGhpcy5kYXRhLnBvcHVwUmVmPW51bGx9Z2V0IG92ZXJsYXlzVGV4dENvbnRlbnQoKXtyZXR1cm4hMH19Y2xhc3MgU3RyaWtlT3V0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9TS5TVFJJS0VPVVQ7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyh0LG51bGwpKXtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPWdldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcixbMCwwLDBdKSxyPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZXh0cmE6IltdIDAgZCAxIHciLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6cixwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaCgodFswXSt0WzRdKS8yKyIgIisodFsxXSt0WzVdKS8yKyIgbSIsKHRbMl0rdFs2XSkvMisiICIrKHRbM10rdFs3XSkvMisiIGwiLCJTIik7cmV0dXJuW3RbMF0sdFs3XSx0WzJdLHRbM11dfX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfWdldCBvdmVybGF5c1RleHRDb250ZW50KCl7cmV0dXJuITB9fWNsYXNzIFN0YW1wQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257I1JlPW51bGw7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPU0uU1RBTVA7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7dGhpcy5kYXRhLmlzRWRpdGFibGU9IXRoaXMuZGF0YS5ub0hUTUw7dGhpcy5kYXRhLm5vSFRNTD0hMX1tdXN0QmVWaWV3ZWRXaGVuRWRpdGluZyhlLHQ9bnVsbCl7aWYoZSl7aWYoIXRoaXMuZGF0YS5pc0VkaXRhYmxlKXJldHVybiEwO3RoaXMuI1JlPz89dGhpcy5kYXRhLmhhc093bkNhbnZhczt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPSEwO3JldHVybiEwfWlmKG51bGwhPT10aGlzLiNSZSl7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLiNSZTt0aGlzLiNSZT1udWxsfXJldHVybiF0Py5oYXModGhpcy5kYXRhLmlkKX1zdGF0aWMgYXN5bmMgY3JlYXRlSW1hZ2UoZSx0KXtjb25zdHt3aWR0aDphLGhlaWdodDpyfT1lLGk9bmV3IE9mZnNjcmVlbkNhbnZhcyhhLHIpLG49aS5nZXRDb250ZXh0KCIyZCIse2FscGhhOiEwfSk7bi5kcmF3SW1hZ2UoZSwwLDApO2NvbnN0IHM9bi5nZXRJbWFnZURhdGEoMCwwLGEscikuZGF0YSxvPW5ldyBVaW50MzJBcnJheShzLmJ1ZmZlciksYz1vLnNvbWUoRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/ZT0+ZT4+PjI0IT0yNTU6ZT0+ISEoMjU1Jn5lKSk7aWYoYyl7bi5maWxsU3R5bGU9IndoaXRlIjtuLmZpbGxSZWN0KDAsMCxhLHIpO24uZHJhd0ltYWdlKGUsMCwwKX1jb25zdCBsPWkuY29udmVydFRvQmxvYih7dHlwZToiaW1hZ2UvanBlZyIscXVhbGl0eToxfSkudGhlbihlPT5lLmFycmF5QnVmZmVyKCkpLGg9TmFtZS5nZXQoIlhPYmplY3QiKSx1PU5hbWUuZ2V0KCJJbWFnZSIpLGQ9bmV3IERpY3QodCk7ZC5zZXQoIlR5cGUiLGgpO2Quc2V0KCJTdWJ0eXBlIix1KTtkLnNldCgiQml0c1BlckNvbXBvbmVudCIsOCk7ZC5zZXRJZk5hbWUoIkNvbG9yU3BhY2UiLCJEZXZpY2VSR0IiKTtkLnNldElmTmFtZSgiRmlsdGVyIiwiRENURGVjb2RlIik7ZC5zZXQoIkJCb3giLFswLDAsYSxyXSk7ZC5zZXQoIldpZHRoIixhKTtkLnNldCgiSGVpZ2h0IixyKTtsZXQgZj1udWxsO2lmKGMpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoby5sZW5ndGgpO2lmKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKWZvcihsZXQgdD0wLGE9by5sZW5ndGg7dDxhO3QrKyllW3RdPW9bdF0+Pj4yNDtlbHNlIGZvcihsZXQgdD0wLGE9by5sZW5ndGg7dDxhO3QrKyllW3RdPTI1NSZvW3RdO2NvbnN0IGk9bmV3IERpY3QodCk7aS5zZXQoIlR5cGUiLGgpO2kuc2V0KCJTdWJ0eXBlIix1KTtpLnNldCgiQml0c1BlckNvbXBvbmVudCIsOCk7aS5zZXRJZk5hbWUoIkNvbG9yU3BhY2UiLCJEZXZpY2VHcmF5Iik7aS5zZXQoIldpZHRoIixhKTtpLnNldCgiSGVpZ2h0IixyKTtmPW5ldyBTdHJlYW0oZSwwLDAsaSl9cmV0dXJue2ltYWdlU3RyZWFtOm5ldyBTdHJlYW0oYXdhaXQgbCwwLDAsZCksc21hc2tTdHJlYW06Zix3aWR0aDphLGhlaWdodDpyfX1zdGF0aWMgY3JlYXRlTmV3RGljdChlLHQse2FwUmVmOmEsYXA6cn0pe2NvbnN0e2RhdGU6aSxvbGRBbm5vdGF0aW9uOm4scmVjdDpzLHJvdGF0aW9uOm8sdXNlcjpjfT1lLGw9bnx8bmV3IERpY3QodCk7bC5zZXRJZk5vdEV4aXN0cygiVHlwZSIsTmFtZS5nZXQoIkFubm90IikpO2wuc2V0SWZOb3RFeGlzdHMoIlN1YnR5cGUiLE5hbWUuZ2V0KCJTdGFtcCIpKTtsLnNldChuPyJNIjoiQ3JlYXRpb25EYXRlIixgRDoke2dldE1vZGlmaWNhdGlvbkRhdGUoaSl9YCk7bC5zZXRJZkFycmF5KCJSZWN0IixzKTtsLnNldElmTm90RXhpc3RzKCJGIiw0KTtsLnNldElmTm90RXhpc3RzKCJCb3JkZXIiLFswLDAsMF0pO2wuc2V0SWZOdW1iZXIoIlJvdGF0ZSIsbyk7bC5zZXRJZkRlZmluZWQoIlQiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUoYykpO2lmKGF8fHIpe2NvbnN0IGU9bmV3IERpY3QodCk7bC5zZXQoIkFQIixlKTtlLnNldCgiTiIsYXx8cil9cmV0dXJuIGx9c3RhdGljIGFzeW5jI05lKGUsdCl7Y29uc3R7YXJlQ29udG91cnM6YSxjb2xvcjpyLHJlY3Q6aSxsaW5lczpuLHRoaWNrbmVzczpzfT1lO2lmKCFyKXJldHVybiBudWxsO2NvbnN0IG89W2Ake3N9IHcgMSBKIDEgamAsYCR7Z2V0UGRmQ29sb3IocixhKX1gXTtmb3IoY29uc3QgZSBvZiBuKXtvLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoZVs0XSl9ICR7bnVtYmVyVG9TdHJpbmcoZVs1XSl9IG1gKTtmb3IobGV0IHQ9NixhPWUubGVuZ3RoO3Q8YTt0Kz02KWlmKGlzTmFOKGVbdF0pKW8ucHVzaChgJHtudW1iZXJUb1N0cmluZyhlW3QrNF0pfSAke251bWJlclRvU3RyaW5nKGVbdCs1XSl9IGxgKTtlbHNle2NvbnN0W2EscixpLG4scyxjXT1lLnNsaWNlKHQsdCs2KTtvLnB1c2goW2EscixpLG4scyxjXS5tYXAobnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKSsiIGMiKX02PT09ZS5sZW5ndGgmJm8ucHVzaChgJHtudW1iZXJUb1N0cmluZyhlWzRdKX0gJHtudW1iZXJUb1N0cmluZyhlWzVdKX0gbGApfW8ucHVzaChhPyJGIjoiUyIpO2NvbnN0IGM9by5qb2luKCJcbiIpLGw9bmV3IERpY3QodCk7bC5zZXQoIkZvcm1UeXBlIiwxKTtsLnNldElmTmFtZSgiU3VidHlwZSIsIkZvcm0iKTtsLnNldElmTmFtZSgiVHlwZSIsIlhPYmplY3QiKTtsLnNldCgiQkJveCIsaSk7bC5zZXQoIkxlbmd0aCIsYy5sZW5ndGgpO2NvbnN0IGg9bmV3IFN0cmluZ1N0cmVhbShjKTtoLmRpY3Q9bDtyZXR1cm4gaH1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7aWYoZS5vbGRBbm5vdGF0aW9uKXJldHVybiBudWxsO2lmKGUuaXNTaWduYXR1cmUpcmV0dXJuIHRoaXMuI05lKGUsdCk7Y29uc3R7cm90YXRpb246cn09ZSx7aW1hZ2VSZWY6aSx3aWR0aDpuLGhlaWdodDpzfT1hLmltYWdlLG89bmV3IERpY3QodCksYz1uZXcgRGljdCh0KTtvLnNldCgiWE9iamVjdCIsYyk7Yy5zZXQoIkltMCIsaSk7Y29uc3QgbD1gcSAke259IDAgMCAke3N9IDAgMCBjbSAvSW0wIERvIFFgLGg9bmV3IERpY3QodCk7aC5zZXQoIkZvcm1UeXBlIiwxKTtoLnNldElmTmFtZSgiU3VidHlwZSIsIkZvcm0iKTtoLnNldElmTmFtZSgiVHlwZSIsIlhPYmplY3QiKTtoLnNldCgiQkJveCIsWzAsMCxuLHNdKTtoLnNldCgiUmVzb3VyY2VzIixvKTtpZihyKXtjb25zdCBlPWdldFJvdGF0aW9uTWF0cml4KHIsbixzKTtoLnNldCgiTWF0cml4IixlKX1jb25zdCB1PW5ldyBTdHJpbmdTdHJlYW0obCk7dS5kaWN0PWg7cmV0dXJuIHV9fWNsYXNzIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZSxyPW5ldyBGaWxlU3BlYyh0LmdldCgiRlMiKSxhKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9TS5GSUxFQVRUQUNITUVOVDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEubm9IVE1MPSExO3RoaXMuZGF0YS5maWxlPXIuc2VyaWFsaXphYmxlO2NvbnN0IGk9dC5nZXQoIk5hbWUiKTt0aGlzLmRhdGEubmFtZT1pIGluc3RhbmNlb2YgTmFtZT9zdHJpbmdUb1BERlN0cmluZyhpLm5hbWUpOiJQdXNoUGluIjtjb25zdCBuPXQuZ2V0KCJjYSIpO3RoaXMuZGF0YS5maWxsQWxwaGE9Im51bWJlciI9PXR5cGVvZiBuJiZuPj0wJiZuPD0xP246bnVsbH19Y29uc3QgYWM9e2dldCByKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJyIixuZXcgVWludDhBcnJheShbNywxMiwxNywyMiw3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw1LDksMTQsMjAsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw2LDEwLDE1LDIxLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxXSkpfSxnZXQgaygpe3JldHVybiBzaGFkb3codGhpcywiayIsbmV3IEludDMyQXJyYXkoWy02ODA4NzY5MzYsLTM4OTU2NDU4Niw2MDYxMDU4MTksLTEwNDQ1MjUzMzAsLTE3NjQxODg5NywxMjAwMDgwNDI2LC0xNDczMjMxMzQxLC00NTcwNTk4MywxNzcwMDM1NDE2LC0xOTU4NDE0NDE3LC00MjA2MywtMTk5MDQwNDE2MiwxODA0NjAzNjgyLC00MDM0MTEwMSwtMTUwMjAwMjI5MCwxMjM2NTM1MzI5LC0xNjU3OTY1MTAsLTEwNjk1MDE2MzIsNjQzNzE3NzEzLC0zNzM4OTczMDIsLTcwMTU1ODY5MSwzODAxNjA4MywtNjYwNDc4MzM1LC00MDU1Mzc4NDgsNTY4NDQ2NDM4LC0xMDE5ODAzNjkwLC0xODczNjM5NjEsMTE2MzUzMTUwMSwtMTQ0NDY4MTQ2NywtNTE0MDM3ODQsMTczNTMyODQ3MywtMTkyNjYwNzczNCwtMzc4NTU4LC0yMDIyNTc0NDYzLDE4MzkwMzA1NjIsLTM1MzA5NTU2LC0xNTMwOTkyMDYwLDEyNzI4OTMzNTMsLTE1NTQ5NzYzMiwtMTA5NDczMDY0MCw2ODEyNzkxNzQsLTM1ODUzNzIyMiwtNzIyNTIxOTc5LDc2MDI5MTg5LC02NDAzNjQ0ODcsLTQyMTgxNTgzNSw1MzA3NDI1MjAsLTk5NTMzODY1MSwtMTk4NjMwODQ0LDExMjY4OTE0MTUsLTE0MTYzNTQ5MDUsLTU3NDM0MDU1LDE3MDA0ODU1NzEsLTE4OTQ5ODY2MDYsLTEwNTE1MjMsLTIwNTQ5MjI3OTksMTg3MzMxMzM1OSwtMzA2MTE3NDQsLTE1NjAxOTgzODAsMTMwOTE1MTY0OSwtMTQ1NTIzMDcwLC0xMTIwMjEwMzc5LDcxODc4NzI1OSwtMzQzNDg1NTUxXSkpfX07ZnVuY3Rpb24gY2FsY3VsYXRlTUQ1KGUsdCxhKXtsZXQgcj0xNzMyNTg0MTkzLGk9LTI3MTczMzg3OSxuPS0xNzMyNTg0MTk0LHM9MjcxNzMzODc4O2NvbnN0IG89YSs3MiYtNjQsYz1uZXcgVWludDhBcnJheShvKTtsZXQgbCxoO2ZvcihsPTA7bDxhOysrbCljW2xdPWVbdCsrXTtjW2wrK109MTI4O2NvbnN0IHU9by04O2w8dSYmKGw9dSk7Y1tsKytdPWE8PDMmMjU1O2NbbCsrXT1hPj41JjI1NTtjW2wrK109YT4+MTMmMjU1O2NbbCsrXT1hPj4yMSYyNTU7Y1tsKytdPWE+Pj4yOSYyNTU7bCs9Mztjb25zdCBkPW5ldyBJbnQzMkFycmF5KDE2KSx7azpmLHI6Z309YWM7Zm9yKGw9MDtsPG87KXtmb3IoaD0wO2g8MTY7KytoLGwrPTQpZFtoXT1jW2xdfGNbbCsxXTw8OHxjW2wrMl08PDE2fGNbbCszXTw8MjQ7bGV0IGUsdCxhPXIsbz1pLHU9bixwPXM7Zm9yKGg9MDtoPDY0OysraCl7aWYoaDwxNil7ZT1vJnV8fm8mcDt0PWh9ZWxzZSBpZihoPDMyKXtlPXAmb3x+cCZ1O3Q9NSpoKzEmMTV9ZWxzZSBpZihoPDQ4KXtlPW9edV5wO3Q9MypoKzUmMTV9ZWxzZXtlPXVeKG98fnApO3Q9NypoJjE1fWNvbnN0IHI9cCxpPWErZStmW2hdK2RbdF18MCxuPWdbaF07cD11O3U9bztvPW8rKGk8PG58aT4+PjMyLW4pfDA7YT1yfXI9cithfDA7aT1pK298MDtuPW4rdXwwO3M9cytwfDB9cmV0dXJuIG5ldyBVaW50OEFycmF5KFsyNTUmcixyPj44JjI1NSxyPj4xNiYyNTUscj4+PjI0JjI1NSwyNTUmaSxpPj44JjI1NSxpPj4xNiYyNTUsaT4+PjI0JjI1NSwyNTUmbixuPj44JjI1NSxuPj4xNiYyNTUsbj4+PjI0JjI1NSwyNTUmcyxzPj44JjI1NSxzPj4xNiYyNTUscz4+PjI0JjI1NV0pfWZ1bmN0aW9uIGRlY29kZVN0cmluZyhlKXt0cnl7cmV0dXJuIHN0cmluZ1RvVVRGOFN0cmluZyhlKX1jYXRjaCh0KXt3YXJuKGBVVEYtOCBkZWNvZGluZyBmYWlsZWQ6ICIke3R9Ii5gKTtyZXR1cm4gZX19Y2xhc3MgRGF0YXNldFhNTFBhcnNlciBleHRlbmRzIFNpbXBsZVhNTFBhcnNlcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLm5vZGU9bnVsbH1vbkVuZEVsZW1lbnQoZSl7Y29uc3QgdD1zdXBlci5vbkVuZEVsZW1lbnQoZSk7aWYodCYmInhmYTpkYXRhc2V0cyI9PT1lKXt0aGlzLm5vZGU9dDt0aHJvdyBuZXcgRXJyb3IoIkFib3J0aW5nIERhdGFzZXRYTUxQYXJzZXIuIil9fX1jbGFzcyBEYXRhc2V0UmVhZGVye2NvbnN0cnVjdG9yKGUpe2lmKGUuZGF0YXNldHMpdGhpcy5ub2RlPW5ldyBTaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcoZS5kYXRhc2V0cykuZG9jdW1lbnRFbGVtZW50O2Vsc2V7Y29uc3QgdD1uZXcgRGF0YXNldFhNTFBhcnNlcih7aGFzQXR0cmlidXRlczohMH0pO3RyeXt0LnBhcnNlRnJvbVN0cmluZyhlWyJ4ZHA6eGRwIl0pfWNhdGNoe310aGlzLm5vZGU9dC5ub2RlfX1nZXRWYWx1ZShlKXtpZighdGhpcy5ub2RlfHwhZSlyZXR1cm4iIjtjb25zdCB0PXRoaXMubm9kZS5zZWFyY2hOb2RlKHBhcnNlWEZBUGF0aChlKSwwKTtpZighdClyZXR1cm4iIjtjb25zdCBhPXQuZmlyc3RDaGlsZDtyZXR1cm4idmFsdWUiPT09YT8ubm9kZU5hbWU/dC5jaGlsZHJlbi5tYXAoZT0+ZGVjb2RlU3RyaW5nKGUudGV4dENvbnRlbnQpKTpkZWNvZGVTdHJpbmcodC50ZXh0Q29udGVudCl9fWNsYXNzIFNpbmdsZUludGVyc2VjdG9yeyNFZTttaW5YPTEvMDttaW5ZPTEvMDttYXhYPS0xLzA7bWF4WT0tMS8wOyNQZT1udWxsOyNMZT1bXTsjX2U9W107I1VlPS0xOyNqZT0hMTtjb25zdHJ1Y3RvcihlKXt0aGlzLiNFZT1lO2NvbnN0IHQ9ZS5kYXRhLnF1YWRQb2ludHM7aWYodCl7Zm9yKGxldCBlPTAsYT10Lmxlbmd0aDtlPGE7ZSs9OCl7dGhpcy5taW5YPU1hdGgubWluKHRoaXMubWluWCx0W2VdKTt0aGlzLm1heFg9TWF0aC5tYXgodGhpcy5tYXhYLHRbZSsyXSk7dGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSx0W2UrNV0pO3RoaXMubWF4WT1NYXRoLm1heCh0aGlzLm1heFksdFtlKzFdKX10Lmxlbmd0aD44JiYodGhpcy4jUGU9dCl9ZWxzZVt0aGlzLm1pblgsdGhpcy5taW5ZLHRoaXMubWF4WCx0aGlzLm1heFldPWUuZGF0YS5yZWN0fSNYZShlLHQpe2lmKHRoaXMubWluWD49ZXx8dGhpcy5tYXhYPD1lfHx0aGlzLm1pblk+PXR8fHRoaXMubWF4WTw9dClyZXR1cm4hMTtjb25zdCBhPXRoaXMuI1BlO2lmKCFhKXJldHVybiEwO2lmKHRoaXMuI1VlPj0wKXtjb25zdCByPXRoaXMuI1VlO2lmKCEoYVtyXT49ZXx8YVtyKzJdPD1lfHxhW3IrNV0+PXR8fGFbcisxXTw9dCkpcmV0dXJuITA7dGhpcy4jVWU9LTF9Zm9yKGxldCByPTAsaT1hLmxlbmd0aDtyPGk7cis9OClpZighKGFbcl0+PWV8fGFbcisyXTw9ZXx8YVtyKzVdPj10fHxhW3IrMV08PXQpKXt0aGlzLiNVZT1yO3JldHVybiEwfXJldHVybiExfWFkZEdseXBoKGUsdCxhKXtpZighdGhpcy4jWGUoZSx0KSl7dGhpcy5kaXNhYmxlRXh0cmFDaGFycygpO3JldHVybiExfWlmKHRoaXMuI19lLmxlbmd0aD4wKXt0aGlzLiNMZS5wdXNoKHRoaXMuI19lLmpvaW4oIiIpKTt0aGlzLiNfZS5sZW5ndGg9MH10aGlzLiNMZS5wdXNoKGEpO3RoaXMuI2plPSEwO3JldHVybiEwfWFkZEV4dHJhQ2hhcihlKXt0aGlzLiNqZSYmdGhpcy4jX2UucHVzaChlKX1kaXNhYmxlRXh0cmFDaGFycygpe2lmKHRoaXMuI2plKXt0aGlzLiNqZT0hMTt0aGlzLiNfZS5sZW5ndGg9MH19c2V0VGV4dCgpe3RoaXMuI0VlLmRhdGEub3ZlcmxhaWRUZXh0PXRoaXMuI0xlLmpvaW4oIiIpfX1jb25zdCByYz02NDtjbGFzcyBJbnRlcnNlY3RvcnsjcWU9W107I0hlPVtdOyNXZTsjR2U7I3plOyMkZTsjVmU7I0tlO2NvbnN0cnVjdG9yKGUpe2xldCB0PTEvMCxhPTEvMCxyPS0xLzAsaT0tMS8wO2NvbnN0IG49dGhpcy4jcWU7Zm9yKGNvbnN0IHMgb2YgZSl7aWYoIXMuZGF0YS5xdWFkUG9pbnRzJiYhcy5kYXRhLnJlY3QpY29udGludWU7Y29uc3QgZT1uZXcgU2luZ2xlSW50ZXJzZWN0b3Iocyk7bi5wdXNoKGUpO3Q9TWF0aC5taW4odCxlLm1pblgpO2E9TWF0aC5taW4oYSxlLm1pblkpO3I9TWF0aC5tYXgocixlLm1heFgpO2k9TWF0aC5tYXgoaSxlLm1heFkpfXRoaXMuI1dlPXQ7dGhpcy4jemU9YTt0aGlzLiNHZT1yO3RoaXMuIyRlPWk7dGhpcy4jVmU9NjMvKHItdCk7dGhpcy4jS2U9NjMvKGktYSk7Zm9yKGNvbnN0IGUgb2Ygbil7Y29uc3QgdD10aGlzLiNKZShlLm1pblgsZS5taW5ZKSxhPXRoaXMuI0plKGUubWF4WCxlLm1heFkpLHI9KGEtdCklcmMsaT1NYXRoLmZsb29yKChhLXQpL3JjKTtmb3IobGV0IGE9dDthPD10K2kqcmM7YSs9cmMpZm9yKGxldCB0PTA7dDw9cjt0Kyspe2xldCByPXRoaXMuI0hlW2ErdF07cnx8KHRoaXMuI0hlW2ErdF09cj1bXSk7ci5wdXNoKGUpfX19I0plKGUsdCl7cmV0dXJuIE1hdGguZmxvb3IoKGUtdGhpcy4jV2UpKnRoaXMuI1ZlKStNYXRoLmZsb29yKCh0LXRoaXMuI3plKSp0aGlzLiNLZSkqcmN9YWRkR2x5cGgoZSx0LGEscil7Y29uc3QgaT1lWzRdK3QvMixuPWVbNV0rYS8yO2lmKGk8dGhpcy4jV2V8fG48dGhpcy4jemV8fGk+dGhpcy4jR2V8fG4+dGhpcy4jJGUpcmV0dXJuO2NvbnN0IHM9dGhpcy4jSGVbdGhpcy4jSmUoaSxuKV07aWYocylmb3IoY29uc3QgZSBvZiBzKWUuYWRkR2x5cGgoaSxuLHIpfWFkZEV4dHJhQ2hhcihlKXtmb3IoY29uc3QgdCBvZiB0aGlzLiNxZSl0LmFkZEV4dHJhQ2hhcihlKX1zZXRUZXh0KCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy4jcWUpZS5zZXRUZXh0KCl9fWNsYXNzIFdvcmQ2NHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaGlnaD0wfGU7dGhpcy5sb3c9MHx0fWFuZChlKXt0aGlzLmhpZ2gmPWUuaGlnaDt0aGlzLmxvdyY9ZS5sb3d9eG9yKGUpe3RoaXMuaGlnaF49ZS5oaWdoO3RoaXMubG93Xj1lLmxvd31zaGlmdFJpZ2h0KGUpe2lmKGU+PTMyKXt0aGlzLmxvdz10aGlzLmhpZ2g+Pj5lLTMyfDA7dGhpcy5oaWdoPTB9ZWxzZXt0aGlzLmxvdz10aGlzLmxvdz4+PmV8dGhpcy5oaWdoPDwzMi1lO3RoaXMuaGlnaD10aGlzLmhpZ2g+Pj5lfDB9fXJvdGF0ZVJpZ2h0KGUpe2xldCB0LGE7aWYoMzImZSl7YT10aGlzLmxvdzt0PXRoaXMuaGlnaH1lbHNle3Q9dGhpcy5sb3c7YT10aGlzLmhpZ2h9ZSY9MzE7dGhpcy5sb3c9dD4+PmV8YTw8MzItZTt0aGlzLmhpZ2g9YT4+PmV8dDw8MzItZX1ub3QoKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaDt0aGlzLmxvdz1+dGhpcy5sb3d9YWRkKGUpe2NvbnN0IHQ9KHRoaXMubG93Pj4+MCkrKGUubG93Pj4+MCk7bGV0IGE9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihhKz0xKTt0aGlzLmxvdz0wfHQ7dGhpcy5oaWdoPTB8YX1jb3B5VG8oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NTtlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTU7ZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTU7ZVt0KzNdPTI1NSZ0aGlzLmhpZ2g7ZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1O2VbdCs1XT10aGlzLmxvdz4+MTYmMjU1O2VbdCs2XT10aGlzLmxvdz4+OCYyNTU7ZVt0KzddPTI1NSZ0aGlzLmxvd31hc3NpZ24oZSl7dGhpcy5oaWdoPWUuaGlnaDt0aGlzLmxvdz1lLmxvd319Y29uc3QgaWM9e2dldCBrKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJrIixbbmV3IFdvcmQ2NCgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLG5ldyBXb3JkNjQoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBXb3JkNjQoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxuZXcgV29yZDY0KDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksbmV3IFdvcmQ2NCg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IFdvcmQ2NCgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLG5ldyBXb3JkNjQoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxuZXcgV29yZDY0KDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IFdvcmQ2NCgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLG5ldyBXb3JkNjQoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLG5ldyBXb3JkNjQoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBXb3JkNjQoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxuZXcgV29yZDY0KDE5MjUwNzgzODgsNDA2ODE4MjM4MyksbmV3IFdvcmQ2NCgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IFdvcmQ2NCgyNjE0ODg4MTAzLDYzMzgwMzMxNyksbmV3IFdvcmQ2NCgzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgpLG5ldyBXb3JkNjQoMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgV29yZDY0KDQwMjIyMjQ3NzQsOTQ0NzExMTM5KSxuZXcgV29yZDY0KDI2NDM0NzA3OCwyMzQxMjYyNzczKSxuZXcgV29yZDY0KDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgV29yZDY0KDc3MDI1NTk4MywxNDk1OTkwOTAxKSxuZXcgV29yZDY0KDEyNDkxNTAxMjIsMTg1NjQzMTIzNSksbmV3IFdvcmQ2NCgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBXb3JkNjQoMTk5NjA2NDk4NiwyMTk4OTUwODM3KSxuZXcgV29yZDY0KDI1NTQyMjA4ODIsMzk5OTcxOTMzOSksbmV3IFdvcmQ2NCgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IFdvcmQ2NCgyOTUyOTk2ODA4LDI1NjY1OTQ4NzkpLG5ldyBXb3JkNjQoMzIxMDMxMzY3MSwzMjAzMzM3OTU2KSxuZXcgV29yZDY0KDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IFdvcmQ2NCgzNTg0NTI4NzExLDI0NjY5NDg5MDEpLG5ldyBXb3JkNjQoMTEzOTI2OTkzLDM3NTgzMjYzODMpLG5ldyBXb3JkNjQoMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IFdvcmQ2NCg2NjYzMDcyMDUsMTE4ODE3OTk2NCksbmV3IFdvcmQ2NCg3NzM1Mjk5MTIsMTU0NjA0NTczNCksbmV3IFdvcmQ2NCgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBXb3JkNjQoMTM5NjE4MjI5MSwyNjQzODMzODIzKSxuZXcgV29yZDY0KDE2OTUxODM3MDAsMjM0MzUyNzM5MCksbmV3IFdvcmQ2NCgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBXb3JkNjQoMjE3NzAyNjM1MCwxMjA2NzU5MTQyKSxuZXcgV29yZDY0KDI0NTY5NTYwMzcsMzQ0MDc3NjI3KSxuZXcgV29yZDY0KDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IFdvcmQ2NCgyODIwMzAyNDExLDMxNTg0NTQyNzMpLG5ldyBXb3JkNjQoMzI1OTczMDgwMCwzNTA1OTUyNjU3KSxuZXcgV29yZDY0KDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgV29yZDY0KDM1MTYwNjU4MTcsMzYwNjAwODM0NCksbmV3IFdvcmQ2NCgzNjAwMzUyODA0LDE0MzI3MjU3NzYpLG5ldyBXb3JkNjQoNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgV29yZDY0KDI3NTQyMzM0NCw4NTExNjk3MjApLG5ldyBXb3JkNjQoNDMwMjI3NzM0LDMxMDA4MjM3NTIpLG5ldyBXb3JkNjQoNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBXb3JkNjQoNjU5MDYwNTU2LDM3NTA2ODU1OTMpLG5ldyBXb3JkNjQoODgzOTk3ODc3LDM3ODUwNTAyODApLG5ldyBXb3JkNjQoOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBXb3JkNjQoMTMyMjgyMjIxOCwzODEyNzIzNDAzKSxuZXcgV29yZDY0KDE1MzcwMDIwNjMsMjAwMzAzNDk5NSksbmV3IFdvcmQ2NCgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBXb3JkNjQoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxuZXcgV29yZDY0KDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksbmV3IFdvcmQ2NCgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBXb3JkNjQoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLG5ldyBXb3JkNjQoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLG5ldyBXb3JkNjQoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgV29yZDY0KDMyMDQwMzE0NzksMjk5OTM1MTU3MyksbmV3IFdvcmQ2NCgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLG5ldyBXb3JkNjQoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgV29yZDY0KDM1MTUyNjcyNzEsNTY2MjgwNzExKSxuZXcgV29yZDY0KDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksbmV3IFdvcmQ2NCg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBXb3JkNjQoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLG5ldyBXb3JkNjQoMTc0MjkyNDIxLDI3MzEwNTUyNzApLG5ldyBXb3JkNjQoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBXb3JkNjQoNDYwMzkzMjY5LDMyMDYyMDMxNSksbmV3IFdvcmQ2NCg2ODU0NzE3MzMsNTg3NDk2ODM2KSxuZXcgV29yZDY0KDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgV29yZDY0KDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxuZXcgV29yZDY0KDExMjYwMDA1ODAsMjYxODI5NzY3NiksbmV3IFdvcmQ2NCgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBXb3JkNjQoMTUwMTUwNTk0OCw0MjM0NTA5ODY2KSxuZXcgV29yZDY0KDE2MDcxNjc5MTUsOTg3MTY3NDY4KSxuZXcgV29yZDY0KDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldKX19O2Z1bmN0aW9uIGNoKGUsdCxhLHIsaSl7ZS5hc3NpZ24odCk7ZS5hbmQoYSk7aS5hc3NpZ24odCk7aS5ub3QoKTtpLmFuZChyKTtlLnhvcihpKX1mdW5jdGlvbiBtYWooZSx0LGEscixpKXtlLmFzc2lnbih0KTtlLmFuZChhKTtpLmFzc2lnbih0KTtpLmFuZChyKTtlLnhvcihpKTtpLmFzc2lnbihhKTtpLmFuZChyKTtlLnhvcihpKX1mdW5jdGlvbiBzaWdtYShlLHQsYSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgyOCk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCgzNCk7ZS54b3IoYSk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCgzOSk7ZS54b3IoYSl9ZnVuY3Rpb24gc2lnbWFQcmltZShlLHQsYSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgxNCk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCgxOCk7ZS54b3IoYSk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCg0MSk7ZS54b3IoYSl9ZnVuY3Rpb24gbGl0dGxlU2lnbWEoZSx0LGEpe2UuYXNzaWduKHQpO2Uucm90YXRlUmlnaHQoMSk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCg4KTtlLnhvcihhKTthLmFzc2lnbih0KTthLnNoaWZ0UmlnaHQoNyk7ZS54b3IoYSl9ZnVuY3Rpb24gbGl0dGxlU2lnbWFQcmltZShlLHQsYSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgxOSk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCg2MSk7ZS54b3IoYSk7YS5hc3NpZ24odCk7YS5zaGlmdFJpZ2h0KDYpO2UueG9yKGEpfWZ1bmN0aW9uIGNhbGN1bGF0ZVNIQTUxMihlLHQsYSxyPSExKXtsZXQgaSxuLHMsbyxjLGwsaCx1O2lmKHIpe2k9bmV3IFdvcmQ2NCgzNDE4MDcwMzY1LDMyMzgzNzEwMzIpO249bmV3IFdvcmQ2NCgxNjU0MjcwMjUwLDkxNDE1MDY2Myk7cz1uZXcgV29yZDY0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KTtvPW5ldyBXb3JkNjQoMzU1NDYyMzYwLDQxNDQ5MTI2OTcpO2M9bmV3IFdvcmQ2NCgxNzMxNDA1NDE1LDQyOTA3NzU4NTcpO2w9bmV3IFdvcmQ2NCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpO2g9bmV3IFdvcmQ2NCgzNjc1MDA4NTI1LDE2OTQwNzY4MzkpO3U9bmV3IFdvcmQ2NCgxMjAzMDYyODEzLDMyMDQwNzU0MjgpfWVsc2V7aT1uZXcgV29yZDY0KDE3NzkwMzM3MDMsNDA4OTIzNTcyMCk7bj1uZXcgV29yZDY0KDMxNDQxMzQyNzcsMjIyNzg3MzU5NSk7cz1uZXcgV29yZDY0KDEwMTM5MDQyNDIsNDI3MTE3NTcyMyk7bz1uZXcgV29yZDY0KDI3NzM0ODA3NjIsMTU5NTc1MDEyOSk7Yz1uZXcgV29yZDY0KDEzNTk4OTMxMTksMjkxNzU2NTEzNyk7bD1uZXcgV29yZDY0KDI2MDA4MjI5MjQsNzI1NTExMTk5KTtoPW5ldyBXb3JkNjQoNTI4NzM0NjM1LDQyMTUzODk1NDcpO3U9bmV3IFdvcmQ2NCgxNTQxNDU5MjI1LDMyNzAzMzIwOSl9Y29uc3QgZD0xMjgqTWF0aC5jZWlsKChhKzE3KS8xMjgpLGY9bmV3IFVpbnQ4QXJyYXkoZCk7bGV0IGcscDtmb3IoZz0wO2c8YTsrK2cpZltnXT1lW3QrK107ZltnKytdPTEyODtjb25zdCBtPWQtMTY7ZzxtJiYoZz1tKTtnKz0xMTtmW2crK109YT4+PjI5JjI1NTtmW2crK109YT4+MjEmMjU1O2ZbZysrXT1hPj4xMyYyNTU7ZltnKytdPWE+PjUmMjU1O2ZbZysrXT1hPDwzJjI1NTtjb25zdCBiPW5ldyBBcnJheSg4MCk7Zm9yKGc9MDtnPDgwO2crKyliW2ddPW5ldyBXb3JkNjQoMCwwKTtjb25zdHtrOnl9PWljO2xldCB3PW5ldyBXb3JkNjQoMCwwKSx4PW5ldyBXb3JkNjQoMCwwKSxTPW5ldyBXb3JkNjQoMCwwKSxrPW5ldyBXb3JkNjQoMCwwKSxDPW5ldyBXb3JkNjQoMCwwKSx2PW5ldyBXb3JkNjQoMCwwKSxGPW5ldyBXb3JkNjQoMCwwKSxUPW5ldyBXb3JkNjQoMCwwKTtjb25zdCBPPW5ldyBXb3JkNjQoMCwwKSxNPW5ldyBXb3JkNjQoMCwwKSxEPW5ldyBXb3JkNjQoMCwwKSxSPW5ldyBXb3JkNjQoMCwwKTtsZXQgTixFO2ZvcihnPTA7ZzxkOyl7Zm9yKHA9MDtwPDE2OysrcCl7YltwXS5oaWdoPWZbZ108PDI0fGZbZysxXTw8MTZ8ZltnKzJdPDw4fGZbZyszXTtiW3BdLmxvdz1mW2crNF08PDI0fGZbZys1XTw8MTZ8ZltnKzZdPDw4fGZbZys3XTtnKz04fWZvcihwPTE2O3A8ODA7KytwKXtOPWJbcF07bGl0dGxlU2lnbWFQcmltZShOLGJbcC0yXSxSKTtOLmFkZChiW3AtN10pO2xpdHRsZVNpZ21hKEQsYltwLTE1XSxSKTtOLmFkZChEKTtOLmFkZChiW3AtMTZdKX13LmFzc2lnbihpKTt4LmFzc2lnbihuKTtTLmFzc2lnbihzKTtrLmFzc2lnbihvKTtDLmFzc2lnbihjKTt2LmFzc2lnbihsKTtGLmFzc2lnbihoKTtULmFzc2lnbih1KTtmb3IocD0wO3A8ODA7KytwKXtPLmFzc2lnbihUKTtzaWdtYVByaW1lKEQsQyxSKTtPLmFkZChEKTtjaChELEMsdixGLFIpO08uYWRkKEQpO08uYWRkKHlbcF0pO08uYWRkKGJbcF0pO3NpZ21hKE0sdyxSKTttYWooRCx3LHgsUyxSKTtNLmFkZChEKTtOPVQ7VD1GO0Y9djt2PUM7ay5hZGQoTyk7Qz1rO2s9UztTPXg7eD13O04uYXNzaWduKE8pO04uYWRkKE0pO3c9Tn1pLmFkZCh3KTtuLmFkZCh4KTtzLmFkZChTKTtvLmFkZChrKTtjLmFkZChDKTtsLmFkZCh2KTtoLmFkZChGKTt1LmFkZChUKX1pZihyKXtFPW5ldyBVaW50OEFycmF5KDQ4KTtpLmNvcHlUbyhFLDApO24uY29weVRvKEUsOCk7cy5jb3B5VG8oRSwxNik7by5jb3B5VG8oRSwyNCk7Yy5jb3B5VG8oRSwzMik7bC5jb3B5VG8oRSw0MCl9ZWxzZXtFPW5ldyBVaW50OEFycmF5KDY0KTtpLmNvcHlUbyhFLDApO24uY29weVRvKEUsOCk7cy5jb3B5VG8oRSwxNik7by5jb3B5VG8oRSwyNCk7Yy5jb3B5VG8oRSwzMik7bC5jb3B5VG8oRSw0MCk7aC5jb3B5VG8oRSw0OCk7dS5jb3B5VG8oRSw1Nil9cmV0dXJuIEV9ZnVuY3Rpb24gY2FsY3VsYXRlU0hBMzg0KGUsdCxhKXtyZXR1cm4gY2FsY3VsYXRlU0hBNTEyKGUsdCxhLCEwKX1jb25zdCBuYz17Z2V0IGsoKXtyZXR1cm4gc2hhZG93KHRoaXMsImsiLFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKX19O2Z1bmN0aW9uIHJvdHIoZSx0KXtyZXR1cm4gZT4+PnR8ZTw8MzItdH1mdW5jdGlvbiBjYWxjdWxhdGVfc2hhMjU2X2NoKGUsdCxhKXtyZXR1cm4gZSZ0Xn5lJmF9ZnVuY3Rpb24gY2FsY3VsYXRlX3NoYTI1Nl9tYWooZSx0LGEpe3JldHVybiBlJnReZSZhXnQmYX1mdW5jdGlvbiBjYWxjdWxhdGVfc2hhMjU2X3NpZ21hKGUpe3JldHVybiByb3RyKGUsMilecm90cihlLDEzKV5yb3RyKGUsMjIpfWZ1bmN0aW9uIGNhbGN1bGF0ZV9zaGEyNTZfc2lnbWFQcmltZShlKXtyZXR1cm4gcm90cihlLDYpXnJvdHIoZSwxMSlecm90cihlLDI1KX1mdW5jdGlvbiBjYWxjdWxhdGVfc2hhMjU2X2xpdHRsZVNpZ21hKGUpe3JldHVybiByb3RyKGUsNylecm90cihlLDE4KV5lPj4+M31mdW5jdGlvbiBjYWxjdWxhdGVfc2hhMjU2X2xpdHRsZVNpZ21hUHJpbWUoZSl7cmV0dXJuIHJvdHIoZSwxNylecm90cihlLDE5KV5lPj4+MTB9ZnVuY3Rpb24gY2FsY3VsYXRlU0hBMjU2KGUsdCxhKXtsZXQgcj0xNzc5MDMzNzAzLGk9MzE0NDEzNDI3NyxuPTEwMTM5MDQyNDIscz0yNzczNDgwNzYyLG89MTM1OTg5MzExOSxjPTI2MDA4MjI5MjQsbD01Mjg3MzQ2MzUsaD0xNTQxNDU5MjI1O2NvbnN0IHU9NjQqTWF0aC5jZWlsKChhKzkpLzY0KSxkPW5ldyBVaW50OEFycmF5KHUpO2xldCBmLGc7Zm9yKGY9MDtmPGE7KytmKWRbZl09ZVt0KytdO2RbZisrXT0xMjg7Y29uc3QgcD11LTg7ZjxwJiYoZj1wKTtmKz0zO2RbZisrXT1hPj4+MjkmMjU1O2RbZisrXT1hPj4yMSYyNTU7ZFtmKytdPWE+PjEzJjI1NTtkW2YrK109YT4+NSYyNTU7ZFtmKytdPWE8PDMmMjU1O2NvbnN0IG09bmV3IFVpbnQzMkFycmF5KDY0KSx7azpifT1uYztmb3IoZj0wO2Y8dTspe2ZvcihnPTA7ZzwxNjsrK2cpe21bZ109ZFtmXTw8MjR8ZFtmKzFdPDwxNnxkW2YrMl08PDh8ZFtmKzNdO2YrPTR9Zm9yKGc9MTY7Zzw2NDsrK2cpbVtnXT1jYWxjdWxhdGVfc2hhMjU2X2xpdHRsZVNpZ21hUHJpbWUobVtnLTJdKSttW2ctN10rY2FsY3VsYXRlX3NoYTI1Nl9saXR0bGVTaWdtYShtW2ctMTVdKSttW2ctMTZdfDA7bGV0IGUsdCxhPXIsdT1pLHA9bix5PXMsdz1vLHg9YyxTPWwsaz1oO2ZvcihnPTA7Zzw2NDsrK2cpe2U9aytjYWxjdWxhdGVfc2hhMjU2X3NpZ21hUHJpbWUodykrY2FsY3VsYXRlX3NoYTI1Nl9jaCh3LHgsUykrYltnXSttW2ddO3Q9Y2FsY3VsYXRlX3NoYTI1Nl9zaWdtYShhKStjYWxjdWxhdGVfc2hhMjU2X21haihhLHUscCk7az1TO1M9eDt4PXc7dz15K2V8MDt5PXA7cD11O3U9YTthPWUrdHwwfXI9cithfDA7aT1pK3V8MDtuPW4rcHwwO3M9cyt5fDA7bz1vK3d8MDtjPWMreHwwO2w9bCtTfDA7aD1oK2t8MH1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW3I+PjI0JjI1NSxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsaT4+MjQmMjU1LGk+PjE2JjI1NSxpPj44JjI1NSwyNTUmaSxuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLHM+PjI0JjI1NSxzPj4xNiYyNTUscz4+OCYyNTUsMjU1JnMsbz4+MjQmMjU1LG8+PjE2JjI1NSxvPj44JjI1NSwyNTUmbyxjPj4yNCYyNTUsYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsMjU1JmwsaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaF0pfWNsYXNzIERlY3J5cHRTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmRlY3J5cHQ9YTt0aGlzLm5leHRDaHVuaz1udWxsO3RoaXMuaW5pdGlhbGl6ZWQ9ITF9cmVhZEJsb2NrKCl7bGV0IGU7aWYodGhpcy5pbml0aWFsaXplZCllPXRoaXMubmV4dENodW5rO2Vsc2V7ZT10aGlzLnN0cmVhbS5nZXRCeXRlcyg1MTIpO3RoaXMuaW5pdGlhbGl6ZWQ9ITB9aWYoIWU/Lmxlbmd0aCl7dGhpcy5lb2Y9ITA7cmV0dXJufXRoaXMubmV4dENodW5rPXRoaXMuc3RyZWFtLmdldEJ5dGVzKDUxMik7Y29uc3QgdD10aGlzLm5leHRDaHVuaz8ubGVuZ3RoPjA7ZT0oMCx0aGlzLmRlY3J5cHQpKGUsIXQpO2NvbnN0IGE9dGhpcy5idWZmZXJMZW5ndGgscj1hK2UubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKHIpLnNldChlLGEpO3RoaXMuYnVmZmVyTGVuZ3RoPXJ9fWNsYXNzIEFSQ0ZvdXJDaXBoZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5hPTA7dGhpcy5iPTA7Y29uc3QgdD1uZXcgVWludDhBcnJheSgyNTYpLGE9ZS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTwyNTY7KytlKXRbZV09ZTtmb3IobGV0IHI9MCxpPTA7cjwyNTY7KytyKXtjb25zdCBuPXRbcl07aT1pK24rZVtyJWFdJjI1NTt0W3JdPXRbaV07dFtpXT1ufXRoaXMucz10fWVuY3J5cHRCbG9jayhlKXtsZXQgdD10aGlzLmEsYT10aGlzLmI7Y29uc3Qgcj10aGlzLnMsaT1lLmxlbmd0aCxuPW5ldyBVaW50OEFycmF5KGkpO2ZvcihsZXQgcz0wO3M8aTsrK3Mpe3Q9dCsxJjI1NTtjb25zdCBpPXJbdF07YT1hK2kmMjU1O2NvbnN0IG89clthXTtyW3RdPW87clthXT1pO25bc109ZVtzXV5yW2krbyYyNTVdfXRoaXMuYT10O3RoaXMuYj1hO3JldHVybiBufWRlY3J5cHRCbG9jayhlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9ZW5jcnlwdChlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fWNsYXNzIE51bGxDaXBoZXJ7ZGVjcnlwdEJsb2NrKGUpe3JldHVybiBlfWVuY3J5cHQoZSl7cmV0dXJuIGV9fWNsYXNzIEFFU0Jhc2VDaXBoZXJ7X3M9bmV3IFVpbnQ4QXJyYXkoWzk5LDEyNCwxMTksMTIzLDI0MiwxMDcsMTExLDE5Nyw0OCwxLDEwMyw0MywyNTQsMjE1LDE3MSwxMTgsMjAyLDEzMCwyMDEsMTI1LDI1MCw4OSw3MSwyNDAsMTczLDIxMiwxNjIsMTc1LDE1NiwxNjQsMTE0LDE5MiwxODMsMjUzLDE0NywzOCw1NCw2MywyNDcsMjA0LDUyLDE2NSwyMjksMjQxLDExMywyMTYsNDksMjEsNCwxOTksMzUsMTk1LDI0LDE1MCw1LDE1NCw3LDE4LDEyOCwyMjYsMjM1LDM5LDE3OCwxMTcsOSwxMzEsNDQsMjYsMjcsMTEwLDkwLDE2MCw4Miw1OSwyMTQsMTc5LDQxLDIyNyw0NywxMzIsODMsMjA5LDAsMjM3LDMyLDI1MiwxNzcsOTEsMTA2LDIwMywxOTAsNTcsNzQsNzYsODgsMjA3LDIwOCwyMzksMTcwLDI1MSw2Nyw3Nyw1MSwxMzMsNjksMjQ5LDIsMTI3LDgwLDYwLDE1OSwxNjgsODEsMTYzLDY0LDE0MywxNDYsMTU3LDU2LDI0NSwxODgsMTgyLDIxOCwzMywxNiwyNTUsMjQzLDIxMCwyMDUsMTIsMTksMjM2LDk1LDE1MSw2OCwyMywxOTYsMTY3LDEyNiw2MSwxMDAsOTMsMjUsMTE1LDk2LDEyOSw3OSwyMjAsMzQsNDIsMTQ0LDEzNiw3MCwyMzgsMTg0LDIwLDIyMiw5NCwxMSwyMTksMjI0LDUwLDU4LDEwLDczLDYsMzYsOTIsMTk0LDIxMSwxNzIsOTgsMTQ1LDE0OSwyMjgsMTIxLDIzMSwyMDAsNTUsMTA5LDE0MSwyMTMsNzgsMTY5LDEwOCw4NiwyNDQsMjM0LDEwMSwxMjIsMTc0LDgsMTg2LDEyMCwzNyw0NiwyOCwxNjYsMTgwLDE5OCwyMzIsMjIxLDExNiwzMSw3NSwxODksMTM5LDEzOCwxMTIsNjIsMTgxLDEwMiw3MiwzLDI0NiwxNCw5Nyw1Myw4NywxODUsMTM0LDE5MywyOSwxNTgsMjI1LDI0OCwxNTIsMTcsMTA1LDIxNywxNDIsMTQ4LDE1NSwzMCwxMzUsMjMzLDIwNiw4NSw0MCwyMjMsMTQwLDE2MSwxMzcsMTMsMTkxLDIzMCw2NiwxMDQsNjUsMTUzLDQ1LDE1LDE3Niw4NCwxODcsMjJdKTtfaW52X3M9bmV3IFVpbnQ4QXJyYXkoWzgyLDksMTA2LDIxMyw0OCw1NCwxNjUsNTYsMTkxLDY0LDE2MywxNTgsMTI5LDI0MywyMTUsMjUxLDEyNCwyMjcsNTcsMTMwLDE1NSw0NywyNTUsMTM1LDUyLDE0Miw2Nyw2OCwxOTYsMjIyLDIzMywyMDMsODQsMTIzLDE0OCw1MCwxNjYsMTk0LDM1LDYxLDIzOCw3NiwxNDksMTEsNjYsMjUwLDE5NSw3OCw4LDQ2LDE2MSwxMDIsNDAsMjE3LDM2LDE3OCwxMTgsOTEsMTYyLDczLDEwOSwxMzksMjA5LDM3LDExNCwyNDgsMjQ2LDEwMCwxMzQsMTA0LDE1MiwyMiwyMTIsMTY0LDkyLDIwNCw5MywxMDEsMTgyLDE0NiwxMDgsMTEyLDcyLDgwLDI1MywyMzcsMTg1LDIxOCw5NCwyMSw3MCw4NywxNjcsMTQxLDE1NywxMzIsMTQ0LDIxNiwxNzEsMCwxNDAsMTg4LDIxMSwxMCwyNDcsMjI4LDg4LDUsMTg0LDE3OSw2OSw2LDIwOCw0NCwzMCwxNDMsMjAyLDYzLDE1LDIsMTkzLDE3NSwxODksMywxLDE5LDEzOCwxMDcsNTgsMTQ1LDE3LDY1LDc5LDEwMywyMjAsMjM0LDE1MSwyNDIsMjA3LDIwNiwyNDAsMTgwLDIzMCwxMTUsMTUwLDE3MiwxMTYsMzQsMjMxLDE3Myw1MywxMzMsMjI2LDI0OSw1NSwyMzIsMjgsMTE3LDIyMywxMTAsNzEsMjQxLDI2LDExMywyOSw0MSwxOTcsMTM3LDExMSwxODMsOTgsMTQsMTcwLDI0LDE5MCwyNywyNTIsODYsNjIsNzUsMTk4LDIxMCwxMjEsMzIsMTU0LDIxOSwxOTIsMjU0LDEyMCwyMDUsOTAsMjQ0LDMxLDIyMSwxNjgsNTEsMTM2LDcsMTk5LDQ5LDE3NywxOCwxNiw4OSwzOSwxMjgsMjM2LDk1LDk2LDgxLDEyNywxNjksMjUsMTgxLDc0LDEzLDQ1LDIyOSwxMjIsMTU5LDE0NywyMDEsMTU2LDIzOSwxNjAsMjI0LDU5LDc3LDE3NCw0MiwyNDUsMTc2LDIwMCwyMzUsMTg3LDYwLDEzMSw4MywxNTMsOTcsMjMsNDMsNCwxMjYsMTg2LDExOSwyMTQsMzgsMjI1LDEwNSwyMCw5OSw4NSwzMywxMiwxMjVdKTtfbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pO19taXhDb2w9bmV3IFVpbnQ4QXJyYXkoMjU2KS5tYXAoKGUsdCk9PnQ8MTI4P3Q8PDE6dDw8MV4yNyk7Y29uc3RydWN0b3IoKXt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJQb3NpdGlvbj0wfV9leHBhbmRLZXkoZSl7dW5yZWFjaGFibGUoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfV9kZWNyeXB0KGUsdCl7bGV0IGEscixpO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMTYpO24uc2V0KGUpO2ZvcihsZXQgZT0wLGE9dGhpcy5fa2V5U2l6ZTtlPDE2OysrZSwrK2EpbltlXV49dFthXTtmb3IobGV0IGU9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7ZT49MTstLWUpe2E9blsxM107blsxM109bls5XTtuWzldPW5bNV07bls1XT1uWzFdO25bMV09YTthPW5bMTRdO3I9blsxMF07blsxNF09bls2XTtuWzEwXT1uWzJdO25bNl09YTtuWzJdPXI7YT1uWzE1XTtyPW5bMTFdO2k9bls3XTtuWzE1XT1uWzNdO25bMTFdPWE7bls3XT1yO25bM109aTtmb3IobGV0IGU9MDtlPDE2OysrZSluW2VdPXRoaXMuX2ludl9zW25bZV1dO2ZvcihsZXQgYT0wLHI9MTYqZTthPDE2OysrYSwrK3IpblthXV49dFtyXTtmb3IobGV0IGU9MDtlPDE2O2UrPTQpe2NvbnN0IHQ9dGhpcy5fbWl4W25bZV1dLHI9dGhpcy5fbWl4W25bZSsxXV0saT10aGlzLl9taXhbbltlKzJdXSxzPXRoaXMuX21peFtuW2UrM11dO2E9dF5yPj4+OF5yPDwyNF5pPj4+MTZeaTw8MTZecz4+PjI0XnM8PDg7bltlXT1hPj4+MjQmMjU1O25bZSsxXT1hPj4xNiYyNTU7bltlKzJdPWE+PjgmMjU1O25bZSszXT0yNTUmYX19YT1uWzEzXTtuWzEzXT1uWzldO25bOV09bls1XTtuWzVdPW5bMV07blsxXT1hO2E9blsxNF07cj1uWzEwXTtuWzE0XT1uWzZdO25bMTBdPW5bMl07bls2XT1hO25bMl09cjthPW5bMTVdO3I9blsxMV07aT1uWzddO25bMTVdPW5bM107blsxMV09YTtuWzddPXI7blszXT1pO2ZvcihsZXQgZT0wO2U8MTY7KytlKXtuW2VdPXRoaXMuX2ludl9zW25bZV1dO25bZV1ePXRbZV19cmV0dXJuIG59X2VuY3J5cHQoZSx0KXtjb25zdCBhPXRoaXMuX3M7bGV0IHIsaSxuO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoMTYpO3Muc2V0KGUpO2ZvcihsZXQgZT0wO2U8MTY7KytlKXNbZV1ePXRbZV07Zm9yKGxldCBlPTE7ZTx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247ZSsrKXtmb3IobGV0IGU9MDtlPDE2OysrZSlzW2VdPWFbc1tlXV07bj1zWzFdO3NbMV09c1s1XTtzWzVdPXNbOV07c1s5XT1zWzEzXTtzWzEzXT1uO249c1syXTtpPXNbNl07c1syXT1zWzEwXTtzWzZdPXNbMTRdO3NbMTBdPW47c1sxNF09aTtuPXNbM107aT1zWzddO3I9c1sxMV07c1szXT1zWzE1XTtzWzddPW47c1sxMV09aTtzWzE1XT1yO2ZvcihsZXQgZT0wO2U8MTY7ZSs9NCl7Y29uc3QgdD1zW2VdLGE9c1tlKzFdLGk9c1tlKzJdLG49c1tlKzNdO3I9dF5hXmlebjtzW2VdXj1yXnRoaXMuX21peENvbFt0XmFdO3NbZSsxXV49cl50aGlzLl9taXhDb2xbYV5pXTtzW2UrMl1ePXJedGhpcy5fbWl4Q29sW2lebl07c1tlKzNdXj1yXnRoaXMuX21peENvbFtuXnRdfWZvcihsZXQgYT0wLHI9MTYqZTthPDE2OysrYSwrK3Ipc1thXV49dFtyXX1mb3IobGV0IGU9MDtlPDE2OysrZSlzW2VdPWFbc1tlXV07bj1zWzFdO3NbMV09c1s1XTtzWzVdPXNbOV07c1s5XT1zWzEzXTtzWzEzXT1uO249c1syXTtpPXNbNl07c1syXT1zWzEwXTtzWzZdPXNbMTRdO3NbMTBdPW47c1sxNF09aTtuPXNbM107aT1zWzddO3I9c1sxMV07c1szXT1zWzE1XTtzWzddPW47c1sxMV09aTtzWzE1XT1yO2ZvcihsZXQgZT0wLGE9dGhpcy5fa2V5U2l6ZTtlPDE2OysrZSwrK2Epc1tlXV49dFthXTtyZXR1cm4gc31fZGVjcnlwdEJsb2NrMihlLHQpe2NvbnN0IGE9ZS5sZW5ndGg7bGV0IHI9dGhpcy5idWZmZXIsaT10aGlzLmJ1ZmZlclBvc2l0aW9uO2NvbnN0IG49W107bGV0IHM9dGhpcy5pdjtmb3IobGV0IHQ9MDt0PGE7Kyt0KXtyW2ldPWVbdF07KytpO2lmKGk8MTYpY29udGludWU7Y29uc3QgYT10aGlzLl9kZWNyeXB0KHIsdGhpcy5fa2V5KTtmb3IobGV0IGU9MDtlPDE2OysrZSlhW2VdXj1zW2VdO3M9cjtuLnB1c2goYSk7cj1uZXcgVWludDhBcnJheSgxNik7aT0wfXRoaXMuYnVmZmVyPXI7dGhpcy5idWZmZXJMZW5ndGg9aTt0aGlzLml2PXM7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtsZXQgbz0xNipuLmxlbmd0aDtpZih0KXtjb25zdCBlPW4uYXQoLTEpO2xldCB0PWVbMTVdO2lmKHQ8PTE2KXtmb3IobGV0IGE9MTUscj0xNi10O2E+PXI7LS1hKWlmKGVbYV0hPT10KXt0PTA7YnJlYWt9by09dDtuW24ubGVuZ3RoLTFdPWUuc3ViYXJyYXkoMCwxNi10KX19Y29uc3QgYz1uZXcgVWludDhBcnJheShvKTtmb3IobGV0IGU9MCx0PTAsYT1uLmxlbmd0aDtlPGE7KytlLHQrPTE2KWMuc2V0KG5bZV0sdCk7cmV0dXJuIGN9ZGVjcnlwdEJsb2NrKGUsdCxhPW51bGwpe2NvbnN0IHI9ZS5sZW5ndGgsaT10aGlzLmJ1ZmZlcjtsZXQgbj10aGlzLmJ1ZmZlclBvc2l0aW9uO2lmKGEpdGhpcy5pdj1hO2Vsc2V7Zm9yKGxldCB0PTA7bjwxNiYmdDxyOysrdCwrK24paVtuXT1lW3RdO2lmKG48MTYpe3RoaXMuYnVmZmVyTGVuZ3RoPW47cmV0dXJuIG5ldyBVaW50OEFycmF5KDApfXRoaXMuaXY9aTtlPWUuc3ViYXJyYXkoMTYpfXRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KTt0aGlzLmJ1ZmZlckxlbmd0aD0wO3RoaXMuZGVjcnlwdEJsb2NrPXRoaXMuX2RlY3J5cHRCbG9jazI7cmV0dXJuIHRoaXMuZGVjcnlwdEJsb2NrKGUsdCl9ZW5jcnlwdChlLHQpe2NvbnN0IGE9ZS5sZW5ndGg7bGV0IHI9dGhpcy5idWZmZXIsaT10aGlzLmJ1ZmZlclBvc2l0aW9uO2NvbnN0IG49W107dHx8PW5ldyBVaW50OEFycmF5KDE2KTtmb3IobGV0IHM9MDtzPGE7KytzKXtyW2ldPWVbc107KytpO2lmKGk8MTYpY29udGludWU7Zm9yKGxldCBlPTA7ZTwxNjsrK2UpcltlXV49dFtlXTtjb25zdCBhPXRoaXMuX2VuY3J5cHQocix0aGlzLl9rZXkpO3Q9YTtuLnB1c2goYSk7cj1uZXcgVWludDhBcnJheSgxNik7aT0wfXRoaXMuYnVmZmVyPXI7dGhpcy5idWZmZXJMZW5ndGg9aTt0aGlzLml2PXQ7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtjb25zdCBzPTE2Km4ubGVuZ3RoLG89bmV3IFVpbnQ4QXJyYXkocyk7Zm9yKGxldCBlPTAsdD0wLGE9bi5sZW5ndGg7ZTxhOysrZSx0Kz0xNilvLnNldChuW2VdLHQpO3JldHVybiBvfX1jbGFzcyBBRVMxMjhDaXBoZXIgZXh0ZW5kcyBBRVNCYXNlQ2lwaGVye19yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSk7Y29uc3RydWN0b3IoZSl7c3VwZXIoKTt0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb249MTA7dGhpcy5fa2V5U2l6ZT0xNjA7dGhpcy5fa2V5PXRoaXMuX2V4cGFuZEtleShlKX1fZXhwYW5kS2V5KGUpe2NvbnN0IHQ9dGhpcy5fcyxhPXRoaXMuX3Jjb24scj1uZXcgVWludDhBcnJheSgxNzYpO3Iuc2V0KGUpO2ZvcihsZXQgZT0xNixpPTE7ZTwxNzY7KytpKXtsZXQgbj1yW2UtM10scz1yW2UtMl0sbz1yW2UtMV0sYz1yW2UtNF07bj10W25dO3M9dFtzXTtvPXRbb107Yz10W2NdO25ePWFbaV07Zm9yKGxldCB0PTA7dDw0OysrdCl7cltlXT1uXj1yW2UtMTZdO2UrKztyW2VdPXNePXJbZS0xNl07ZSsrO3JbZV09b149cltlLTE2XTtlKys7cltlXT1jXj1yW2UtMTZdO2UrK319cmV0dXJuIHJ9fWNsYXNzIEFFUzI1NkNpcGhlciBleHRlbmRzIEFFU0Jhc2VDaXBoZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKTt0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb249MTQ7dGhpcy5fa2V5U2l6ZT0yMjQ7dGhpcy5fa2V5PXRoaXMuX2V4cGFuZEtleShlKX1fZXhwYW5kS2V5KGUpe2NvbnN0IHQ9dGhpcy5fcyxhPW5ldyBVaW50OEFycmF5KDI0MCk7YS5zZXQoZSk7bGV0IHIsaSxuLHMsbz0xO2ZvcihsZXQgZT0zMixjPTE7ZTwyNDA7KytjKXtpZihlJTMyPT0xNil7cj10W3JdO2k9dFtpXTtuPXRbbl07cz10W3NdfWVsc2UgaWYoZSUzMj09MCl7cj1hW2UtM107aT1hW2UtMl07bj1hW2UtMV07cz1hW2UtNF07cj10W3JdO2k9dFtpXTtuPXRbbl07cz10W3NdO3JePW87KG88PD0xKT49MjU2JiYobz0yNTUmKDI3Xm8pKX1mb3IobGV0IHQ9MDt0PDQ7Kyt0KXthW2VdPXJePWFbZS0zMl07ZSsrO2FbZV09aV49YVtlLTMyXTtlKys7YVtlXT1uXj1hW2UtMzJdO2UrKzthW2VdPXNePWFbZS0zMl07ZSsrfX1yZXR1cm4gYX19Y2xhc3MgUERGQmFzZXtfaGFzaChlLHQsYSl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgX2hhc2hgIGNhbGxlZCIpfWNoZWNrT3duZXJQYXNzd29yZChlLHQsYSxyKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtpLnNldChlLDApO2kuc2V0KHQsZS5sZW5ndGgpO2kuc2V0KGEsZS5sZW5ndGgrdC5sZW5ndGgpO3JldHVybiBpc0FycmF5RXF1YWwodGhpcy5faGFzaChlLGksYSkscil9Y2hlY2tVc2VyUGFzc3dvcmQoZSx0LGEpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7ci5zZXQoZSwwKTtyLnNldCh0LGUubGVuZ3RoKTtyZXR1cm4gaXNBcnJheUVxdWFsKHRoaXMuX2hhc2goZSxyLFtdKSxhKX1nZXRPd25lcktleShlLHQsYSxyKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtpLnNldChlLDApO2kuc2V0KHQsZS5sZW5ndGgpO2kuc2V0KGEsZS5sZW5ndGgrdC5sZW5ndGgpO2NvbnN0IG49dGhpcy5faGFzaChlLGksYSk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIobikuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX1nZXRVc2VyS2V5KGUsdCxhKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO3Iuc2V0KGUsMCk7ci5zZXQodCxlLmxlbmd0aCk7Y29uc3QgaT10aGlzLl9oYXNoKGUscixbXSk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIoaSkuZGVjcnlwdEJsb2NrKGEsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19Y2xhc3MgUERGMTcgZXh0ZW5kcyBQREZCYXNle19oYXNoKGUsdCxhKXtyZXR1cm4gY2FsY3VsYXRlU0hBMjU2KHQsMCx0Lmxlbmd0aCl9fWNsYXNzIFBERjIwIGV4dGVuZHMgUERGQmFzZXtfaGFzaChlLHQsYSl7bGV0IHI9Y2FsY3VsYXRlU0hBMjU2KHQsMCx0Lmxlbmd0aCkuc3ViYXJyYXkoMCwzMiksaT1bMF0sbj0wO2Zvcig7bjw2NHx8aS5hdCgtMSk+bi0zMjspe2NvbnN0IHQ9ZS5sZW5ndGgrci5sZW5ndGgrYS5sZW5ndGgscz1uZXcgVWludDhBcnJheSh0KTtsZXQgbz0wO3Muc2V0KGUsbyk7bys9ZS5sZW5ndGg7cy5zZXQocixvKTtvKz1yLmxlbmd0aDtzLnNldChhLG8pO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkoNjQqdCk7Zm9yKGxldCBlPTAsYT0wO2U8NjQ7ZSsrLGErPXQpYy5zZXQocyxhKTtpPW5ldyBBRVMxMjhDaXBoZXIoci5zdWJhcnJheSgwLDE2KSkuZW5jcnlwdChjLHIuc3ViYXJyYXkoMTYsMzIpKTtjb25zdCBsPU1hdGguc3VtUHJlY2lzZShpLnNsaWNlKDAsMTYpKSUzOzA9PT1sP3I9Y2FsY3VsYXRlU0hBMjU2KGksMCxpLmxlbmd0aCk6MT09PWw/cj1jYWxjdWxhdGVTSEEzODQoaSwwLGkubGVuZ3RoKToyPT09bCYmKHI9Y2FsY3VsYXRlU0hBNTEyKGksMCxpLmxlbmd0aCkpO24rK31yZXR1cm4gci5zdWJhcnJheSgwLDMyKX19Y2xhc3MgQ2lwaGVyVHJhbnNmb3Jte2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3Rvcj1lO3RoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I9dH1jcmVhdGVTdHJlYW0oZSx0KXtjb25zdCBhPW5ldyB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yO3JldHVybiBuZXcgRGVjcnlwdFN0cmVhbShlLHQsZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShlLHQpe3JldHVybiBhLmRlY3J5cHRCbG9jayhlLHQpfSl9ZGVjcnlwdFN0cmluZyhlKXtjb25zdCB0PW5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yO2xldCBhPXN0cmluZ1RvQnl0ZXMoZSk7YT10LmRlY3J5cHRCbG9jayhhLCEwKTtyZXR1cm4gYnl0ZXNUb1N0cmluZyhhKX1lbmNyeXB0U3RyaW5nKGUpe2NvbnN0IHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I7aWYodCBpbnN0YW5jZW9mIEFFU0Jhc2VDaXBoZXIpe2NvbnN0IGE9MTYtZS5sZW5ndGglMTY7ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShhKS5yZXBlYXQoYSk7Y29uc3Qgcj1uZXcgVWludDhBcnJheSgxNik7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhyKTtsZXQgaT1zdHJpbmdUb0J5dGVzKGUpO2k9dC5lbmNyeXB0KGkscik7Y29uc3Qgbj1uZXcgVWludDhBcnJheSgxNitpLmxlbmd0aCk7bi5zZXQocik7bi5zZXQoaSwxNik7cmV0dXJuIGJ5dGVzVG9TdHJpbmcobil9bGV0IGE9c3RyaW5nVG9CeXRlcyhlKTthPXQuZW5jcnlwdChhKTtyZXR1cm4gYnl0ZXNUb1N0cmluZyhhKX19Y2xhc3MgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeXtzdGF0aWMgZ2V0IF9kZWZhdWx0UGFzc3dvcmRCeXRlcygpe3JldHVybiBzaGFkb3codGhpcywiX2RlZmF1bHRQYXNzd29yZEJ5dGVzIixuZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pKX0jWWUoZSx0LGEscixpLG4scyxvLGMsbCxoLHUpe2lmKHQpe2NvbnN0IGU9TWF0aC5taW4oMTI3LHQubGVuZ3RoKTt0PXQuc3ViYXJyYXkoMCxlKX1lbHNlIHQ9W107Y29uc3QgZD02PT09ZT9uZXcgUERGMjA6bmV3IFBERjE3O3JldHVybiBkLmNoZWNrVXNlclBhc3N3b3JkKHQsbyxzKT9kLmdldFVzZXJLZXkodCxjLGgpOnQubGVuZ3RoJiZkLmNoZWNrT3duZXJQYXNzd29yZCh0LHIsbixhKT9kLmdldE93bmVyS2V5KHQsaSxuLGwpOm51bGx9I1plKGUsdCxhLHIsaSxuLHMsbyl7Y29uc3QgYz00MCthLmxlbmd0aCtlLmxlbmd0aCxsPW5ldyBVaW50OEFycmF5KGMpO2xldCBoLHUsZD0wO2lmKHQpe3U9TWF0aC5taW4oMzIsdC5sZW5ndGgpO2Zvcig7ZDx1OysrZClsW2RdPXRbZF19aD0wO2Zvcig7ZDwzMjspbFtkKytdPUNpcGhlclRyYW5zZm9ybUZhY3RvcnkuX2RlZmF1bHRQYXNzd29yZEJ5dGVzW2grK107bC5zZXQoYSxkKTtkKz1hLmxlbmd0aDtsW2QrK109MjU1Jmk7bFtkKytdPWk+PjgmMjU1O2xbZCsrXT1pPj4xNiYyNTU7bFtkKytdPWk+Pj4yNCYyNTU7bC5zZXQoZSxkKTtkKz1lLmxlbmd0aDtpZihuPj00JiYhbyl7bC5maWxsKDI1NSxkLGQrNCk7ZCs9NH1sZXQgZj1jYWxjdWxhdGVNRDUobCwwLGQpO2NvbnN0IGc9cz4+MztpZihuPj0zKWZvcihoPTA7aDw1MDsrK2gpZj1jYWxjdWxhdGVNRDUoZiwwLGcpO2NvbnN0IHA9Zi5zdWJhcnJheSgwLGcpO2xldCBtLGI7aWYobj49Myl7ZD0wO2wuc2V0KENpcGhlclRyYW5zZm9ybUZhY3RvcnkuX2RlZmF1bHRQYXNzd29yZEJ5dGVzLGQpO2QrPTMyO2wuc2V0KGUsZCk7ZCs9ZS5sZW5ndGg7bT1uZXcgQVJDRm91ckNpcGhlcihwKTtiPW0uZW5jcnlwdEJsb2NrKGNhbGN1bGF0ZU1ENShsLDAsZCkpO3U9cC5sZW5ndGg7Y29uc3QgdD1uZXcgVWludDhBcnJheSh1KTtmb3IoaD0xO2g8PTE5OysraCl7Zm9yKGxldCBlPTA7ZTx1OysrZSl0W2VdPXBbZV1eaDttPW5ldyBBUkNGb3VyQ2lwaGVyKHQpO2I9bS5lbmNyeXB0QmxvY2soYil9fWVsc2V7bT1uZXcgQVJDRm91ckNpcGhlcihwKTtiPW0uZW5jcnlwdEJsb2NrKENpcGhlclRyYW5zZm9ybUZhY3RvcnkuX2RlZmF1bHRQYXNzd29yZEJ5dGVzKX1yZXR1cm4gYi5ldmVyeSgoZSx0KT0+clt0XT09PWUpP3A6bnVsbH0jUWUoZSx0LGEscil7Y29uc3QgaT1uZXcgVWludDhBcnJheSgzMik7bGV0IG49MDtjb25zdCBzPU1hdGgubWluKDMyLGUubGVuZ3RoKTtmb3IoO248czsrK24paVtuXT1lW25dO2xldCBvPTA7Zm9yKDtuPDMyOylpW24rK109Q2lwaGVyVHJhbnNmb3JtRmFjdG9yeS5fZGVmYXVsdFBhc3N3b3JkQnl0ZXNbbysrXTtsZXQgYz1jYWxjdWxhdGVNRDUoaSwwLG4pO2NvbnN0IGw9cj4+MztpZihhPj0zKWZvcihvPTA7bzw1MDsrK28pYz1jYWxjdWxhdGVNRDUoYywwLGMubGVuZ3RoKTtsZXQgaCx1O2lmKGE+PTMpe3U9dDtjb25zdCBlPW5ldyBVaW50OEFycmF5KGwpO2ZvcihvPTE5O28+PTA7by0tKXtmb3IobGV0IHQ9MDt0PGw7Kyt0KWVbdF09Y1t0XV5vO2g9bmV3IEFSQ0ZvdXJDaXBoZXIoZSk7dT1oLmVuY3J5cHRCbG9jayh1KX19ZWxzZXtoPW5ldyBBUkNGb3VyQ2lwaGVyKGMuc3ViYXJyYXkoMCxsKSk7dT1oLmVuY3J5cHRCbG9jayh0KX1yZXR1cm4gdX0jZXQoZSx0LGEscj0hMSl7Y29uc3QgaT1hLmxlbmd0aCxuPW5ldyBVaW50OEFycmF5KGkrOSk7bi5zZXQoYSk7bGV0IHM9aTtuW3MrK109MjU1JmU7bltzKytdPWU+PjgmMjU1O25bcysrXT1lPj4xNiYyNTU7bltzKytdPTI1NSZ0O25bcysrXT10Pj44JjI1NTtpZihyKXtuW3MrK109MTE1O25bcysrXT02NTtuW3MrK109MTA4O25bcysrXT04NH1yZXR1cm4gY2FsY3VsYXRlTUQ1KG4sMCxzKS5zdWJhcnJheSgwLE1hdGgubWluKGkrNSwxNikpfSN0dChlLHQsYSxyLGkpe2lmKCEodCBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBjcnlwdCBmaWx0ZXIgbmFtZS4iKTtjb25zdCBuPXRoaXMscz1lLmdldCh0Lm5hbWUpLG89cz8uZ2V0KCJDRk0iKTtpZighb3x8Ik5vbmUiPT09by5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgTnVsbENpcGhlcn07aWYoIlYyIj09PW8ubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFSQ0ZvdXJDaXBoZXIobi4jZXQoYSxyLGksITEpKX07aWYoIkFFU1YyIj09PW8ubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFFUzEyOENpcGhlcihuLiNldChhLHIsaSwhMCkpfTtpZigiQUVTVjMiPT09by5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKGkpfTt0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gY3J5cHRvIG1ldGhvZCIpfWNvbnN0cnVjdG9yKGUsdCxhKXtjb25zdCByPWUuZ2V0KCJGaWx0ZXIiKTtpZighaXNOYW1lKHIsIlN0YW5kYXJkIikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPXIubmFtZTt0aGlzLmRpY3Q9ZTtjb25zdCBpPWUuZ2V0KCJWIik7aWYoIU51bWJlci5pc0ludGVnZXIoaSl8fDEhPT1pJiYyIT09aSYmNCE9PWkmJjUhPT1pKXRocm93IG5ldyBGb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0iKTt0aGlzLmFsZ29yaXRobT1pO2xldCBuPWUuZ2V0KCJMZW5ndGgiKTtpZighbilpZihpPD0zKW49NDA7ZWxzZXtjb25zdCB0PWUuZ2V0KCJDRiIpLGE9ZS5nZXQoIlN0bUYiKTtpZih0IGluc3RhbmNlb2YgRGljdCYmYSBpbnN0YW5jZW9mIE5hbWUpe3Quc3VwcHJlc3NFbmNyeXB0aW9uPSEwO2NvbnN0IGU9dC5nZXQoYS5uYW1lKTtuPWU/LmdldCgiTGVuZ3RoIil8fDEyODtuPDQwJiYobjw8PTMpfX1pZighTnVtYmVyLmlzSW50ZWdlcihuKXx8bjw0MHx8biU4IT0wKXRocm93IG5ldyBGb3JtYXRFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoIik7Y29uc3Qgcz1zdHJpbmdUb0J5dGVzKGUuZ2V0KCJPIikpLG89c3RyaW5nVG9CeXRlcyhlLmdldCgiVSIpKSxjPXMuc3ViYXJyYXkoMCwzMiksbD1vLnN1YmFycmF5KDAsMzIpLGg9ZS5nZXQoIlAiKSx1PWUuZ2V0KCJSIiksZD0oND09PWl8fDU9PT1pKSYmITEhPT1lLmdldCgiRW5jcnlwdE1ldGFkYXRhIik7dGhpcy5lbmNyeXB0TWV0YWRhdGE9ZDtjb25zdCBmPXN0cmluZ1RvQnl0ZXModCk7bGV0IGcscDtpZihhKXtpZig2PT09dSl0cnl7YT11dGY4U3RyaW5nVG9TdHJpbmcoYSl9Y2F0Y2h7d2FybigiQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTogVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLiIpfWc9c3RyaW5nVG9CeXRlcyhhKX1pZig1IT09aSlwPXRoaXMuI1plKGYsZyxjLGwsaCx1LG4sZCk7ZWxzZXtjb25zdCB0PXMuc3ViYXJyYXkoMzIsNDApLGE9cy5zdWJhcnJheSg0MCw0OCkscj1vLnN1YmFycmF5KDAsNDgpLGk9by5zdWJhcnJheSgzMiw0MCksbj1vLnN1YmFycmF5KDQwLDQ4KSxoPXN0cmluZ1RvQnl0ZXMoZS5nZXQoIk9FIikpLGQ9c3RyaW5nVG9CeXRlcyhlLmdldCgiVUUiKSksZj1zdHJpbmdUb0J5dGVzKGUuZ2V0KCJQZXJtcyIpKTtwPXRoaXMuI1llKHUsZyxjLHQsYSxyLGwsaSxuLGgsZCxmKX1pZighcCl7aWYoIWEpdGhyb3cgbmV3IFBhc3N3b3JkRXhjZXB0aW9uKCJObyBwYXNzd29yZCBnaXZlbiIsWXQpO2NvbnN0IGU9dGhpcy4jUWUoZyxjLHUsbik7cD10aGlzLiNaZShmLGUsYyxsLGgsdSxuLGQpfWlmKCFwKXRocm93IG5ldyBQYXNzd29yZEV4Y2VwdGlvbigiSW5jb3JyZWN0IFBhc3N3b3JkIixadCk7aWYoND09PWkmJnAubGVuZ3RoPDE2KXt0aGlzLmVuY3J5cHRpb25LZXk9bmV3IFVpbnQ4QXJyYXkoMTYpO3RoaXMuZW5jcnlwdGlvbktleS5zZXQocCl9ZWxzZSB0aGlzLmVuY3J5cHRpb25LZXk9cDtpZihpPj00KXtjb25zdCB0PWUuZ2V0KCJDRiIpO3QgaW5zdGFuY2VvZiBEaWN0JiYodC5zdXBwcmVzc0VuY3J5cHRpb249ITApO3RoaXMuY2Y9dDt0aGlzLnN0bWY9ZS5nZXQoIlN0bUYiKXx8TmFtZS5nZXQoIklkZW50aXR5Iik7dGhpcy5zdHJmPWUuZ2V0KCJTdHJGIil8fE5hbWUuZ2V0KCJJZGVudGl0eSIpO3RoaXMuZWZmPWUuZ2V0KCJFRkYiKXx8dGhpcy5zdG1mfX1jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oZSx0KXtpZig0PT09dGhpcy5hbGdvcml0aG18fDU9PT10aGlzLmFsZ29yaXRobSlyZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybSh0aGlzLiN0dCh0aGlzLmNmLHRoaXMuc3RyZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSx0aGlzLiN0dCh0aGlzLmNmLHRoaXMuc3RtZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSk7Y29uc3QgYT10aGlzLiNldChlLHQsdGhpcy5lbmNyeXB0aW9uS2V5LCExKSxjaXBoZXJDb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBuZXcgQVJDRm91ckNpcGhlcihhKX07cmV0dXJuIG5ldyBDaXBoZXJUcmFuc2Zvcm0oY2lwaGVyQ29uc3RydWN0b3IsY2lwaGVyQ29uc3RydWN0b3IpfX1jbGFzcyBYUmVme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZTt0aGlzLnBkZk1hbmFnZXI9dDt0aGlzLmVudHJpZXM9W107dGhpcy5feHJlZlN0bXM9bmV3IFNldDt0aGlzLl9jYWNoZU1hcD1uZXcgTWFwO3RoaXMuX3BlbmRpbmdSZWZzPW5ldyBSZWZTZXQ7dGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT1udWxsO3RoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsO3RoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGU9bnVsbH1nZXROZXdQZXJzaXN0ZW50UmVmKGUpe251bGw9PT10aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtJiYodGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT10aGlzLmVudHJpZXMubGVuZ3RofHwxKTtjb25zdCB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKzt0aGlzLl9jYWNoZU1hcC5zZXQodCxlKTtyZXR1cm4gUmVmLmdldCh0LDApfWdldE5ld1RlbXBvcmFyeVJlZigpe2lmKG51bGw9PT10aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0pe3RoaXMuX25ld1RlbXBvcmFyeVJlZk51bT10aGlzLmVudHJpZXMubGVuZ3RofHwxO2lmKHRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0pe3RoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGU9bmV3IE1hcDtmb3IobGV0IGU9dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtO2U8dGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bTtlKyspe3RoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGUuc2V0KGUsdGhpcy5fY2FjaGVNYXAuZ2V0KGUpKTt0aGlzLl9jYWNoZU1hcC5kZWxldGUoZSl9fX1yZXR1cm4gUmVmLmdldCh0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0rKywwKX1yZXNldE5ld1RlbXBvcmFyeVJlZigpe3RoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsO2lmKHRoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGUpZm9yKGNvbnN0W2UsdF1vZiB0aGlzLl9wZXJzaXN0ZW50UmVmc0NhY2hlKXRoaXMuX2NhY2hlTWFwLnNldChlLHQpO3RoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGU9bnVsbH1zZXRTdGFydFhSZWYoZSl7dGhpcy5zdGFydFhSZWZRdWV1ZT1bZV19cGFyc2UoZT0hMSl7bGV0IHQsYSxyO2lmKGUpe3dhcm4oIkluZGV4aW5nIGFsbCBQREYgb2JqZWN0cyIpO3Q9dGhpcy5pbmRleE9iamVjdHMoKX1lbHNlIHQ9dGhpcy5yZWFkWFJlZigpO3QuYXNzaWduWHJlZih0aGlzKTt0aGlzLnRyYWlsZXI9dDt0cnl7YT10LmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3dhcm4oYFhSZWYucGFyc2UgLSBJbnZhbGlkICJFbmNyeXB0IiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZihhIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT10LmdldCgiSUQiKSxyPWU/Lmxlbmd0aD9lWzBdOiIiO2Euc3VwcHJlc3NFbmNyeXB0aW9uPSEwO3RoaXMuZW5jcnlwdD1uZXcgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeShhLHIsdGhpcy5wZGZNYW5hZ2VyLnBhc3N3b3JkKX10cnl7cj10LmdldCgiUm9vdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3dhcm4oYFhSZWYucGFyc2UgLSBJbnZhbGlkICJSb290IiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZihyIGluc3RhbmNlb2YgRGljdCl0cnl7aWYoci5nZXQoIlBhZ2VzIilpbnN0YW5jZW9mIERpY3Qpe3RoaXMucm9vdD1yO3JldHVybn19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybihgWFJlZi5wYXJzZSAtIEludmFsaWQgIlBhZ2VzIiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZighZSl0aHJvdyBuZXcgWFJlZlBhcnNlRXhjZXB0aW9uO3Rocm93IG5ldyBJbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFJvb3QgcmVmZXJlbmNlLiIpfXByb2Nlc3NYUmVmVGFibGUoZSl7InRhYmxlU3RhdGUiaW4gdGhpc3x8KHRoaXMudGFibGVTdGF0ZT17ZW50cnlOdW06MCxzdHJlYW1Qb3M6ZS5sZXhlci5zdHJlYW0ucG9zLHBhcnNlckJ1ZjE6ZS5idWYxLHBhcnNlckJ1ZjI6ZS5idWYyfSk7aWYoIWlzQ21kKHRoaXMucmVhZFhSZWZUYWJsZShlKSwidHJhaWxlciIpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgZmluZCB0cmFpbGVyIGRpY3Rpb25hcnkiKTtsZXQgdD1lLmdldE9iaigpO3QgaW5zdGFuY2VvZiBEaWN0fHwhdC5kaWN0fHwodD10LmRpY3QpO2lmKCEodCBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgcGFyc2UgdHJhaWxlciBkaWN0aW9uYXJ5Iik7ZGVsZXRlIHRoaXMudGFibGVTdGF0ZTtyZXR1cm4gdH1yZWFkWFJlZlRhYmxlKGUpe2NvbnN0IHQ9ZS5sZXhlci5zdHJlYW0sYT10aGlzLnRhYmxlU3RhdGU7dC5wb3M9YS5zdHJlYW1Qb3M7ZS5idWYxPWEucGFyc2VyQnVmMTtlLmJ1ZjI9YS5wYXJzZXJCdWYyO2xldCByO2Zvcig7Oyl7aWYoISgiZmlyc3RFbnRyeU51bSJpbiBhKXx8ISgiZW50cnlDb3VudCJpbiBhKSl7aWYoaXNDbWQocj1lLmdldE9iaigpLCJ0cmFpbGVyIikpYnJlYWs7YS5maXJzdEVudHJ5TnVtPXI7YS5lbnRyeUNvdW50PWUuZ2V0T2JqKCl9bGV0IGk9YS5maXJzdEVudHJ5TnVtO2NvbnN0IG49YS5lbnRyeUNvdW50O2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGkpfHwhTnVtYmVyLmlzSW50ZWdlcihuKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IobGV0IHI9YS5lbnRyeU51bTtyPG47cisrKXthLnN0cmVhbVBvcz10LnBvczthLmVudHJ5TnVtPXI7YS5wYXJzZXJCdWYxPWUuYnVmMTthLnBhcnNlckJ1ZjI9ZS5idWYyO2NvbnN0IHM9e307cy5vZmZzZXQ9ZS5nZXRPYmooKTtzLmdlbj1lLmdldE9iaigpO2NvbnN0IG89ZS5nZXRPYmooKTtpZihvIGluc3RhbmNlb2YgQ21kKXN3aXRjaChvLmNtZCl7Y2FzZSJmIjpzLmZyZWU9ITA7YnJlYWs7Y2FzZSJuIjpzLnVuY29tcHJlc3NlZD0hMH1pZighTnVtYmVyLmlzSW50ZWdlcihzLm9mZnNldCl8fCFOdW1iZXIuaXNJbnRlZ2VyKHMuZ2VuKXx8IXMuZnJlZSYmIXMudW5jb21wcmVzc2VkKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICR7aX0sICR7bn1gKTswPT09ciYmcy5mcmVlJiYxPT09aSYmKGk9MCk7dGhpcy5lbnRyaWVzW3IraV18fCh0aGlzLmVudHJpZXNbcitpXT1zKX1hLmVudHJ5TnVtPTA7YS5zdHJlYW1Qb3M9dC5wb3M7YS5wYXJzZXJCdWYxPWUuYnVmMTthLnBhcnNlckJ1ZjI9ZS5idWYyO2RlbGV0ZSBhLmZpcnN0RW50cnlOdW07ZGVsZXRlIGEuZW50cnlDb3VudH1pZih0aGlzLmVudHJpZXNbMF0mJiF0aGlzLmVudHJpZXNbMF0uZnJlZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3QiKTtyZXR1cm4gcn1wcm9jZXNzWFJlZlN0cmVhbShlKXtpZighKCJzdHJlYW1TdGF0ZSJpbiB0aGlzKSl7Y29uc3R7ZGljdDp0LHBvczphfT1lLHI9dC5nZXQoIlciKSxpPXQuZ2V0KCJJbmRleCIpfHxbMCx0LmdldCgiU2l6ZSIpXTt0aGlzLnN0cmVhbVN0YXRlPXtlbnRyeVJhbmdlczppLGJ5dGVXaWR0aHM6cixlbnRyeU51bTowLHN0cmVhbVBvczphfX10aGlzLnJlYWRYUmVmU3RyZWFtKGUpO2RlbGV0ZSB0aGlzLnN0cmVhbVN0YXRlO3JldHVybiBlLmRpY3R9cmVhZFhSZWZTdHJlYW0oZSl7Y29uc3QgdD10aGlzLnN0cmVhbVN0YXRlO2UucG9zPXQuc3RyZWFtUG9zO2NvbnN0W2EscixpXT10LmJ5dGVXaWR0aHMsbj10LmVudHJ5UmFuZ2VzO2Zvcig7bi5sZW5ndGg+MDspe2NvbnN0W3Msb109bjtpZighTnVtYmVyLmlzSW50ZWdlcihzKXx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgcmFuZ2UgZmllbGRzOiAke3N9LCAke299YCk7aWYoIU51bWJlci5pc0ludGVnZXIoYSl8fCFOdW1iZXIuaXNJbnRlZ2VyKHIpfHwhTnVtYmVyLmlzSW50ZWdlcihpKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiAke3N9LCAke299YCk7Zm9yKGxldCBuPXQuZW50cnlOdW07bjxvOysrbil7dC5lbnRyeU51bT1uO3Quc3RyZWFtUG9zPWUucG9zO2xldCBvPTAsYz0wLGw9MDtmb3IobGV0IHQ9MDt0PGE7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy4iKTtvPW88PDh8dH0wPT09YSYmKG89MSk7Zm9yKGxldCB0PTA7dDxyOysrdCl7Y29uc3QgdD1lLmdldEJ5dGUoKTtpZigtMT09PXQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtjPWM8PDh8dH1mb3IobGV0IHQ9MDt0PGk7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtsPWw8PDh8dH1jb25zdCBoPXt9O2gub2Zmc2V0PWM7aC5nZW49bDtzd2l0Y2gobyl7Y2FzZSAwOmguZnJlZT0hMDticmVhaztjYXNlIDE6aC51bmNvbXByZXNzZWQ9ITA7YnJlYWs7Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogJHtvfWApfXRoaXMuZW50cmllc1tzK25dfHwodGhpcy5lbnRyaWVzW3Mrbl09aCl9dC5lbnRyeU51bT0wO3Quc3RyZWFtUG9zPWUucG9zO24uc3BsaWNlKDAsMil9fWluZGV4T2JqZWN0cygpe2Z1bmN0aW9uIHJlYWRUb2tlbihlLHQpe2xldCBhPSIiLHI9ZVt0XTtmb3IoOzEwIT09ciYmMTMhPT1yJiY2MCE9PXImJiEoKyt0Pj1lLmxlbmd0aCk7KXthKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpO3I9ZVt0XX1yZXR1cm4gYX1mdW5jdGlvbiBza2lwVW50aWwoZSx0LGEpe2NvbnN0IHI9YS5sZW5ndGgsaT1lLmxlbmd0aDtsZXQgbj0wO2Zvcig7dDxpOyl7bGV0IGk9MDtmb3IoO2k8ciYmZVt0K2ldPT09YVtpXTspKytpO2lmKGk+PXIpYnJlYWs7dCsrO24rK31yZXR1cm4gbn1jb25zdCBlPS9cYihlbmRvYmp8XGQrXHMrXGQrXHMrb2JqfHhyZWZ8dHJhaWxlclxzKjw8KVxiL2csdD0vXGIoc3RhcnR4cmVmfFxkK1xzK1xkK1xzK29iailcYi9nLGE9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLHI9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSksaT1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLG49bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTA7dGhpcy5fY2FjaGVNYXAuY2xlYXIoKTtjb25zdCBzPXRoaXMuc3RyZWFtO3MucG9zPTA7Y29uc3Qgbz1zLmdldEJ5dGVzKCksYz1ieXRlc1RvU3RyaW5nKG8pLGw9by5sZW5ndGg7bGV0IGg9cy5zdGFydDtjb25zdCB1PVtdLGQ9W107Zm9yKDtoPGw7KXtsZXQgZj1vW2hdO2lmKDk9PT1mfHwxMD09PWZ8fDEzPT09Znx8MzI9PT1mKXsrK2g7Y29udGludWV9aWYoMzc9PT1mKXtkb3srK2g7aWYoaD49bClicmVhaztmPW9baF19d2hpbGUoMTAhPT1mJiYxMyE9PWYpO2NvbnRpbnVlfWNvbnN0IGc9cmVhZFRva2VuKG8saCk7bGV0IHA7aWYoZy5zdGFydHNXaXRoKCJ4cmVmIikmJig0PT09Zy5sZW5ndGh8fC9ccy8udGVzdChnWzRdKSkpe2grPXNraXBVbnRpbChvLGgscik7dS5wdXNoKGgpO2grPXNraXBVbnRpbChvLGgsaSl9ZWxzZSBpZihwPWEuZXhlYyhnKSl7Y29uc3QgdD0wfHBbMV0sYT0wfHBbMl0scj1oK2cubGVuZ3RoO2xldCBpLHU9ITE7aWYodGhpcy5lbnRyaWVzW3RdKXtpZih0aGlzLmVudHJpZXNbdF0uZ2VuPT09YSl0cnl7bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKHMubWFrZVN1YlN0cmVhbShyKSl9KS5nZXRPYmooKTt1PSEwfWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBQYXJzZXJFT0ZFeGNlcHRpb24/d2FybihgaW5kZXhPYmplY3RzIC0tIGNoZWNraW5nIG9iamVjdCAoJHtnfSk6ICIke2V9Ii5gKTp1PSEwfX1lbHNlIHU9ITA7dSYmKHRoaXMuZW50cmllc1t0XT17b2Zmc2V0Omgtcy5zdGFydCxnZW46YSx1bmNvbXByZXNzZWQ6ITB9KTtlLmxhc3RJbmRleD1yO2NvbnN0IGY9ZS5leGVjKGMpO2lmKGYpe2k9ZS5sYXN0SW5kZXgrMS1oO2lmKCJlbmRvYmoiIT09ZlsxXSl7d2FybihgaW5kZXhPYmplY3RzOiBGb3VuZCAiJHtmWzFdfSIgaW5zaWRlIG9mIGFub3RoZXIgIm9iaiIsIGNhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLmApO2ktPWZbMV0ubGVuZ3RoKzF9fWVsc2UgaT1sLWg7Y29uc3QgbT1vLnN1YmFycmF5KGgsaCtpKSxiPXNraXBVbnRpbChtLDAsbik7aWYoYjxpJiZtW2IrNV08NjQpe2QucHVzaChoLXMuc3RhcnQpO3RoaXMuX3hyZWZTdG1zLmFkZChoLXMuc3RhcnQpfWgrPWl9ZWxzZSBpZihnLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1nLmxlbmd0aHx8L1xzLy50ZXN0KGdbN10pKSl7dS5wdXNoKGgpO2NvbnN0IGU9aCtnLmxlbmd0aDtsZXQgYTt0Lmxhc3RJbmRleD1lO2NvbnN0IHI9dC5leGVjKGMpO2lmKHIpe2E9dC5sYXN0SW5kZXgrMS1oO2lmKCJzdGFydHhyZWYiIT09clsxXSl7d2FybihgaW5kZXhPYmplY3RzOiBGb3VuZCAiJHtyWzFdfSIgYWZ0ZXIgInRyYWlsZXIiLCBjYXVzZWQgYnkgbWlzc2luZyAic3RhcnR4cmVmIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci5gKTthLT1yWzFdLmxlbmd0aCsxfX1lbHNlIGE9bC1oO2grPWF9ZWxzZSBoKz1nLmxlbmd0aCsxfWZvcihjb25zdCBlIG9mIGQpe3RoaXMuc3RhcnRYUmVmUXVldWUucHVzaChlKTt0aGlzLnJlYWRYUmVmKCEwKX1jb25zdCBmPVtdO2xldCBnLHAsbT0hMTtmb3IoY29uc3QgZSBvZiB1KXtzLnBvcz1lO2NvbnN0IHQ9bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKHMpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSk7aWYoIWlzQ21kKHQuZ2V0T2JqKCksInRyYWlsZXIiKSljb250aW51ZTtjb25zdCBhPXQuZ2V0T2JqKCk7aWYoYSBpbnN0YW5jZW9mIERpY3Qpe2YucHVzaChhKTthLmhhcygiRW5jcnlwdCIpJiYobT0hMCl9fWZvcihjb25zdCBlIG9mWy4uLmYsImdlbkZhbGxiYWNrIiwuLi5mXSl7aWYoImdlbkZhbGxiYWNrIj09PWUpe2lmKCFwKWJyZWFrO3RoaXMuX2dlbmVyYXRpb25GYWxsYmFjaz0hMDtjb250aW51ZX1sZXQgdD0hMTt0cnl7Y29uc3QgYT1lLmdldCgiUm9vdCIpO2lmKCEoYSBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2NvbnN0IHI9YS5nZXQoIlBhZ2VzIik7aWYoIShyIGluc3RhbmNlb2YgRGljdCkpY29udGludWU7Y29uc3QgaT1yLmdldCgiQ291bnQiKTtOdW1iZXIuaXNJbnRlZ2VyKGkpJiYodD0hMCl9Y2F0Y2goZSl7cD1lO2NvbnRpbnVlfWlmKHQmJighbXx8ZS5oYXMoIkVuY3J5cHQiKSkmJmUuaGFzKCJJRCIpKXJldHVybiBlO2c9ZX1pZihnKXJldHVybiBnO2lmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFmLmxlbmd0aClmb3IoY29uc3QgZSBpbiB0aGlzLmVudHJpZXMpe2lmKCFPYmplY3QuaGFzT3duKHRoaXMuZW50cmllcyxlKSljb250aW51ZTtjb25zdCB0PXRoaXMuZW50cmllc1tlXSxhPVJlZi5nZXQocGFyc2VJbnQoZSksdC5nZW4pO2xldCByO3RyeXtyPXRoaXMuZmV0Y2goYSl9Y2F0Y2h7Y29udGludWV9ciBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJihyPXIuZGljdCk7aWYociBpbnN0YW5jZW9mIERpY3QmJnIuaGFzKCJSb290IikpcmV0dXJuIHJ9dGhyb3cgbmV3IEludmFsaWRQREZFeGNlcHRpb24oIkludmFsaWQgUERGIHN0cnVjdHVyZS4iKX1yZWFkWFJlZihlPSExKXtjb25zdCB0PXRoaXMuc3RyZWFtLGE9bmV3IFNldDtmb3IoO3RoaXMuc3RhcnRYUmVmUXVldWUubGVuZ3RoOyl7dHJ5e2NvbnN0IGU9dGhpcy5zdGFydFhSZWZRdWV1ZVswXTtpZihhLmhhcyhlKSl7d2FybigicmVhZFhSZWYgLSBza2lwcGluZyBYUmVmIHRhYmxlIHNpbmNlIGl0IHdhcyBhbHJlYWR5IHBhcnNlZC4iKTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCk7Y29udGludWV9YS5hZGQoZSk7dC5wb3M9ZSt0LnN0YXJ0O2NvbnN0IHI9bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKHQpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtsZXQgaSxuPXIuZ2V0T2JqKCk7aWYoaXNDbWQobiwieHJlZiIpKXtpPXRoaXMucHJvY2Vzc1hSZWZUYWJsZShyKTt0aGlzLnRvcERpY3R8fCh0aGlzLnRvcERpY3Q9aSk7bj1pLmdldCgiWFJlZlN0bSIpO2lmKE51bWJlci5pc0ludGVnZXIobikmJiF0aGlzLl94cmVmU3Rtcy5oYXMobikpe3RoaXMuX3hyZWZTdG1zLmFkZChuKTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobil9fWVsc2V7aWYoIU51bWJlci5pc0ludGVnZXIobikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihyLmdldE9iaigpKSYmaXNDbWQoci5nZXRPYmooKSwib2JqIikmJihuPXIuZ2V0T2JqKCkpaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBzdHJlYW0iKTtpPXRoaXMucHJvY2Vzc1hSZWZTdHJlYW0obik7dGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWkpO2lmKCFpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1uPWkuZ2V0KCJQcmV2Iik7TnVtYmVyLmlzSW50ZWdlcihuKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobik6biBpbnN0YW5jZW9mIFJlZiYmdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKG4ubnVtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTtpbmZvKCIod2hpbGUgcmVhZGluZyBYUmVmKTogIitlKX10aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCl9aWYodGhpcy50b3BEaWN0KXJldHVybiB0aGlzLnRvcERpY3Q7aWYoIWUpdGhyb3cgbmV3IFhSZWZQYXJzZUV4Y2VwdGlvbn1nZXRFbnRyeShlKXtjb25zdCB0PXRoaXMuZW50cmllc1tlXTtyZXR1cm4gdCYmIXQuZnJlZSYmdC5vZmZzZXQ/dDpudWxsfWZldGNoSWZSZWYoZSx0PSExKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlZj90aGlzLmZldGNoKGUsdCk6ZX1mZXRjaChlLHQ9ITEpe2lmKCEoZSBpbnN0YW5jZW9mIFJlZikpdGhyb3cgbmV3IEVycm9yKCJyZWYgb2JqZWN0IGlzIG5vdCBhIHJlZmVyZW5jZSIpO2NvbnN0IGE9ZS5udW0scj10aGlzLl9jYWNoZU1hcC5nZXQoYSk7aWYodm9pZCAwIT09cil7ciBpbnN0YW5jZW9mIERpY3QmJiFyLm9iaklkJiYoci5vYmpJZD1lLnRvU3RyaW5nKCkpO3JldHVybiByfWxldCBpPXRoaXMuZ2V0RW50cnkoYSk7aWYobnVsbD09PWkpcmV0dXJuIGk7aWYodGhpcy5fcGVuZGluZ1JlZnMuaGFzKGUpKXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7d2FybihgSWdub3JpbmcgY2lyY3VsYXIgcmVmZXJlbmNlOiAke2V9LmApO3JldHVybiBuYX10aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e2k9aS51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLGksdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxpLHQpO3RoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7dGhyb3cgdH1pIGluc3RhbmNlb2YgRGljdD9pLm9iaklkPWUudG9TdHJpbmcoKTppIGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmKGkuZGljdC5vYmpJZD1lLnRvU3RyaW5nKCkpO3JldHVybiBpfWZldGNoVW5jb21wcmVzc2VkKGUsdCxhPSExKXtjb25zdCByPWUuZ2VuO2xldCBpPWUubnVtO2lmKHQuZ2VuIT09cil7Y29uc3Qgbj1gSW5jb25zaXN0ZW50IGdlbmVyYXRpb24gaW4gWFJlZjogJHtlfWA7aWYodGhpcy5fZ2VuZXJhdGlvbkZhbGxiYWNrJiZ0LmdlbjxyKXt3YXJuKG4pO3JldHVybiB0aGlzLmZldGNoVW5jb21wcmVzc2VkKFJlZi5nZXQoaSx0LmdlbiksdCxhKX10aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKG4pfWNvbnN0IG49dGhpcy5zdHJlYW0ubWFrZVN1YlN0cmVhbSh0Lm9mZnNldCt0aGlzLnN0cmVhbS5zdGFydCkscz1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIobikseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMH0pLG89cy5nZXRPYmooKSxjPXMuZ2V0T2JqKCksbD1zLmdldE9iaigpO2lmKG8hPT1pfHxjIT09cnx8IShsIGluc3RhbmNlb2YgQ21kKSl0aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApO2lmKCJvYmoiIT09bC5jbWQpe2lmKGwuY21kLnN0YXJ0c1dpdGgoIm9iaiIpKXtpPXBhcnNlSW50KGwuY21kLnN1YnN0cmluZygzKSwxMCk7aWYoIU51bWJlci5pc05hTihpKSlyZXR1cm4gaX10aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApfSh0PXRoaXMuZW5jcnlwdCYmIWE/cy5nZXRPYmoodGhpcy5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShpLHIpKTpzLmdldE9iaigpKWluc3RhbmNlb2YgQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KGksdCk7cmV0dXJuIHR9ZmV0Y2hDb21wcmVzc2VkKGUsdCxhPSExKXtjb25zdCByPXQub2Zmc2V0LGk9dGhpcy5mZXRjaChSZWYuZ2V0KHIsMCkpO2lmKCEoaSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiYmFkIE9ialN0bSBzdHJlYW0iKTtjb25zdCBuPWkuZGljdC5nZXQoIkZpcnN0Iikscz1pLmRpY3QuZ2V0KCJOIik7aWYoIU51bWJlci5pc0ludGVnZXIobil8fCFOdW1iZXIuaXNJbnRlZ2VyKHMpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiaW52YWxpZCBmaXJzdCBhbmQgbiBwYXJhbWV0ZXJzIGZvciBPYmpTdG0gc3RyZWFtIik7bGV0IG89bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKGkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBjPW5ldyBBcnJheShzKSxsPW5ldyBBcnJheShzKTtmb3IobGV0IGU9MDtlPHM7KytlKXtjb25zdCB0PW8uZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIodCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBpbnZhbGlkIG9iamVjdCBudW1iZXIgaW4gdGhlIE9ialN0bSBzdHJlYW06ICR7dH1gKTtjb25zdCBhPW8uZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIoYSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBpbnZhbGlkIG9iamVjdCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW06ICR7YX1gKTtjW2VdPXQ7Y29uc3QgaT10aGlzLmdldEVudHJ5KHQpO2k/Lm9mZnNldD09PXImJmkuZ2VuIT09ZSYmKGkuZ2VuPWUpO2xbZV09YX1jb25zdCBoPShpLnN0YXJ0fHwwKStuLHU9bmV3IEFycmF5KHMpO2ZvcihsZXQgZT0wO2U8czsrK2Upe2NvbnN0IHQ9ZTxzLTE/bFtlKzFdLWxbZV06dm9pZCAwO2lmKHQ8MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtLiIpO289bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKGkubWFrZVN1YlN0cmVhbShoK2xbZV0sdCxpLmRpY3QpKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSk7Y29uc3QgYT1vLmdldE9iaigpO3VbZV09YTtpZihhIGluc3RhbmNlb2YgQmFzZVN0cmVhbSljb250aW51ZTtjb25zdCBuPWNbZV0sZD10aGlzLmVudHJpZXNbbl07ZCYmZC5vZmZzZXQ9PT1yJiZkLmdlbj09PWUmJnRoaXMuX2NhY2hlTWFwLnNldChuLGEpfWlmKHZvaWQgMD09PSh0PXVbdC5nZW5dKSl0aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKGNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICR7ZX1gKTtyZXR1cm4gdH1hc3luYyBmZXRjaElmUmVmQXN5bmMoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlZj90aGlzLmZldGNoQXN5bmMoZSx0KTplfWFzeW5jIGZldGNoQXN5bmMoZSx0KXt0cnl7cmV0dXJuIHRoaXMuZmV0Y2goZSx0KX1jYXRjaChhKXtpZighKGEgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbikpdGhyb3cgYTthd2FpdCB0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGEuYmVnaW4sYS5lbmQpO3JldHVybiB0aGlzLmZldGNoQXN5bmMoZSx0KX19Z2V0Q2F0YWxvZ09iaigpe3JldHVybiB0aGlzLnJvb3R9fWNvbnN0IHNjPVswLDAsNjEyLDc5Ml07Y2xhc3MgUGFnZXsjYXQ9ITE7I3J0PW51bGw7Y29uc3RydWN0b3Ioe3BkZk1hbmFnZXI6ZSx4cmVmOnQscGFnZUluZGV4OmEscGFnZURpY3Q6cixyZWY6aSxnbG9iYWxJZEZhY3Rvcnk6bixmb250Q2FjaGU6cyxidWlsdEluQ01hcENhY2hlOm8sc3RhbmRhcmRGb250RGF0YUNhY2hlOmMsZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOmwsZ2xvYmFsSW1hZ2VDYWNoZTpoLHN5c3RlbUZvbnRDYWNoZTp1LG5vbkJsZW5kTW9kZXNTZXQ6ZCx4ZmFGYWN0b3J5OmZ9KXt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnBhZ2VJbmRleD1hO3RoaXMucGFnZURpY3Q9cjt0aGlzLnhyZWY9dDt0aGlzLnJlZj1pO3RoaXMuZm9udENhY2hlPXM7dGhpcy5idWlsdEluQ01hcENhY2hlPW87dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9Yzt0aGlzLmdsb2JhbENvbG9yU3BhY2VDYWNoZT1sO3RoaXMuZ2xvYmFsSW1hZ2VDYWNoZT1oO3RoaXMuc3lzdGVtRm9udENhY2hlPXU7dGhpcy5ub25CbGVuZE1vZGVzU2V0PWQ7dGhpcy5ldmFsdWF0b3JPcHRpb25zPWUuZXZhbHVhdG9yT3B0aW9uczt0aGlzLnhmYUZhY3Rvcnk9Zjtjb25zdCBnPXtvYmo6MH07dGhpcy5fbG9jYWxJZEZhY3Rvcnk9Y2xhc3MgZXh0ZW5kcyBue3N0YXRpYyBjcmVhdGVPYmpJZCgpe3JldHVybmBwJHthfV8keysrZy5vYmp9YH1zdGF0aWMgZ2V0UGFnZU9iaklkKCl7cmV0dXJuYHAke2kudG9TdHJpbmcoKX1gfX19I2l0KGUpe3JldHVybiBuZXcgUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxDb2xvclNwYWNlQ2FjaGU6dGhpcy5nbG9iYWxDb2xvclNwYWNlQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnRoaXMuc3lzdGVtRm9udENhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSl9I250KGUsdD0hMSl7Y29uc3QgYT1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnRoaXMucGFnZURpY3Qsa2V5OmUsZ2V0QXJyYXk6dCxzdG9wV2hlbkZvdW5kOiExfSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/MSE9PWEubGVuZ3RoJiZhWzBdaW5zdGFuY2VvZiBEaWN0P0RpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTphfSk6YVswXTphfWdldCBjb250ZW50KCl7cmV0dXJuIHRoaXMucGFnZURpY3QuZ2V0QXJyYXkoIkNvbnRlbnRzIil9Z2V0IHJlc291cmNlcygpe2NvbnN0IGU9dGhpcy4jbnQoIlJlc291cmNlcyIpO3JldHVybiBzaGFkb3codGhpcywicmVzb3VyY2VzIixlIGluc3RhbmNlb2YgRGljdD9lOkRpY3QuZW1wdHkpfSNzdChlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O2NvbnN0IHQ9bG9va3VwTm9ybWFsUmVjdCh0aGlzLiNudChlLCEwKSxudWxsKTtpZih0KXtpZih0WzJdLXRbMF0+MCYmdFszXS10WzFdPjApcmV0dXJuIHQ7d2FybihgRW1wdHksIG9yIGludmFsaWQsIC8ke2V9IGVudHJ5LmApfXJldHVybiBudWxsfWdldCBtZWRpYUJveCgpe3JldHVybiBzaGFkb3codGhpcywibWVkaWFCb3giLHRoaXMuI3N0KCJNZWRpYUJveCIpfHxzYyl9Z2V0IGNyb3BCb3goKXtyZXR1cm4gc2hhZG93KHRoaXMsImNyb3BCb3giLHRoaXMuI3N0KCJDcm9wQm94Iil8fHRoaXMubWVkaWFCb3gpfWdldCB1c2VyVW5pdCgpe2NvbnN0IGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7cmV0dXJuIHNoYWRvdyh0aGlzLCJ1c2VyVW5pdCIsIm51bWJlciI9PXR5cGVvZiBlJiZlPjA/ZToxKX1nZXQgdmlldygpe2NvbnN0e2Nyb3BCb3g6ZSxtZWRpYUJveDp0fT10aGlzO2lmKGUhPT10JiYhaXNBcnJheUVxdWFsKGUsdCkpe2NvbnN0IGE9VXRpbC5pbnRlcnNlY3QoZSx0KTtpZihhJiZhWzJdLWFbMF0+MCYmYVszXS1hWzFdPjApcmV0dXJuIHNoYWRvdyh0aGlzLCJ2aWV3IixhKTt3YXJuKCJFbXB0eSAvQ3JvcEJveCBhbmQgL01lZGlhQm94IGludGVyc2VjdGlvbi4iKX1yZXR1cm4gc2hhZG93KHRoaXMsInZpZXciLHQpfWdldCByb3RhdGUoKXtsZXQgZT10aGlzLiNudCgiUm90YXRlIil8fDA7ZSU5MCE9MD9lPTA6ZT49MzYwP2UlPTM2MDplPDAmJihlPShlJTM2MCszNjApJTM2MCk7cmV0dXJuIHNoYWRvdyh0aGlzLCJyb3RhdGUiLGUpfSNvdChlLHQpe2lmKCF0aGlzLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgZ2V0Q29udGVudFN0cmVhbSAtIGlnbm9yaW5nIHN1Yi1zdHJlYW0gKCR7dH0pOiAiJHtlfSIuYCl9YXN5bmMgZ2V0Q29udGVudFN0cmVhbSgpe2NvbnN0IGU9YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJjb250ZW50Iik7cmV0dXJuIGUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtP2U6QXJyYXkuaXNBcnJheShlKT9uZXcgU3RyZWFtc1NlcXVlbmNlU3RyZWFtKGUsdGhpcy4jb3QuYmluZCh0aGlzKSk6bmV3IE51bGxTdHJlYW19Z2V0IHhmYURhdGEoKXtyZXR1cm4gc2hhZG93KHRoaXMsInhmYURhdGEiLHRoaXMueGZhRmFjdG9yeT97YmJveDp0aGlzLnhmYUZhY3RvcnkuZ2V0Qm91bmRpbmdCb3godGhpcy5wYWdlSW5kZXgpfTpudWxsKX1hc3luYyNjdChlLHQsYSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgaSBvZiBlKWlmKGkuaWQpe2NvbnN0IGU9UmVmLmZyb21TdHJpbmcoaS5pZCk7aWYoIWUpe3dhcm4oYEEgbm9uLWxpbmtlZCBhbm5vdGF0aW9uIGNhbm5vdCBiZSBtb2RpZmllZDogJHtpLmlkfWApO2NvbnRpbnVlfWlmKGkuZGVsZXRlZCl7dC5wdXQoZSxlKTtpZihpLnBvcHVwUmVmKXtjb25zdCBlPVJlZi5mcm9tU3RyaW5nKGkucG9wdXBSZWYpO2UmJnQucHV0KGUsZSl9Y29udGludWV9aWYoaS5wb3B1cD8uZGVsZXRlZCl7Y29uc3QgZT1SZWYuZnJvbVN0cmluZyhpLnBvcHVwUmVmKTtlJiZ0LnB1dChlLGUpfWE/LnB1dChlKTtpLnJlZj1lO3IucHVzaCh0aGlzLnhyZWYuZmV0Y2hBc3luYyhlKS50aGVuKGU9PntlIGluc3RhbmNlb2YgRGljdCYmKGkub2xkQW5ub3RhdGlvbj1lLmNsb25lKCkpfSwoKT0+e3dhcm4oYENhbm5vdCBmZXRjaCBcYG9sZEFubm90YXRpb25cYCBmb3I6ICR7ZX0uYCl9KSk7ZGVsZXRlIGkuaWR9YXdhaXQgUHJvbWlzZS5hbGwocil9YXN5bmMgc2F2ZU5ld0Fubm90YXRpb25zKGUsdCxhLHIsaSl7aWYodGhpcy54ZmFGYWN0b3J5KXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y29uc3Qgbj10aGlzLiNpdChlKSxzPW5ldyBSZWZTZXRDYWNoZSxvPW5ldyBSZWZTZXQ7YXdhaXQgdGhpcy4jY3QoYSxzLG8pO2NvbnN0IGM9dGhpcy5wYWdlRGljdCxsPXRoaXMuYW5ub3RhdGlvbnMuZmlsdGVyKGU9PiEoZSBpbnN0YW5jZW9mIFJlZiYmcy5oYXMoZSkpKSxoPWF3YWl0IEFubm90YXRpb25GYWN0b3J5LnNhdmVOZXdBbm5vdGF0aW9ucyhuLHQsYSxyLGkpO2Zvcihjb25zdHtyZWY6ZX1vZiBoLmFubm90YXRpb25zKWUgaW5zdGFuY2VvZiBSZWYmJiFvLmhhcyhlKSYmbC5wdXNoKGUpO2NvbnN0IHU9Yy5jbG9uZSgpO3Uuc2V0KCJBbm5vdHMiLGwpO2kucHV0KHRoaXMucmVmLHtkYXRhOnV9KTtmb3IoY29uc3QgZSBvZiBzKWkucHV0KGUse2RhdGE6bnVsbH0pfWFzeW5jIHNhdmUoZSx0LGEscil7Y29uc3QgaT10aGlzLiNpdChlKSxuPWF3YWl0IHRoaXMuX3BhcnNlZEFubm90YXRpb25zLHM9W107Zm9yKGNvbnN0IGUgb2YgbilzLnB1c2goZS5zYXZlKGksdCxhLHIpLmNhdGNoKGZ1bmN0aW9uKGUpe3dhcm4oYHNhdmUgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKTtyZXR1cm4gUHJvbWlzZS5hbGwocyl9YXN5bmMgbG9hZFJlc291cmNlcyhlKXthd2FpdCh0aGlzLiNydD8/PXRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywicmVzb3VyY2VzIikpO2F3YWl0IE9iamVjdExvYWRlci5sb2FkKHRoaXMucmVzb3VyY2VzLGUsdGhpcy54cmVmKX1hc3luYyNsdChlLHQpe2NvbnN0IGE9ZT8uZ2V0KCJSZXNvdXJjZXMiKTtpZighKGEgaW5zdGFuY2VvZiBEaWN0JiZhLnNpemUpKXJldHVybiB0aGlzLnJlc291cmNlczthd2FpdCBPYmplY3RMb2FkZXIubG9hZChhLHQsdGhpcy54cmVmKTtyZXR1cm4gRGljdC5tZXJnZSh7eHJlZjp0aGlzLnhyZWYsZGljdEFycmF5OlthLHRoaXMucmVzb3VyY2VzXSxtZXJnZVN1YkRpY3RzOiEwfSl9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOmUsc2luazp0LHRhc2s6YSxpbnRlbnQ6cixjYWNoZUtleTppLGFubm90YXRpb25TdG9yYWdlOmM9bnVsbCxtb2RpZmllZElkczpkPW51bGx9KXtjb25zdCBnPXRoaXMuZ2V0Q29udGVudFN0cmVhbSgpLHA9dGhpcy5sb2FkUmVzb3VyY2VzKGdhKSxtPXRoaXMuI2l0KGUpLGI9dGhpcy54ZmFGYWN0b3J5P251bGw6Z2V0TmV3QW5ub3RhdGlvbnNNYXAoYykseT1iPy5nZXQodGhpcy5wYWdlSW5kZXgpO2xldCB3PVByb21pc2UucmVzb2x2ZShudWxsKSx4PW51bGw7aWYoeSl7Y29uc3QgZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJhbm5vdGF0aW9uR2xvYmFscyIpO2xldCB0O2NvbnN0IHI9bmV3IFNldDtmb3IoY29uc3R7Yml0bWFwSWQ6ZSxiaXRtYXA6dH1vZiB5KSFlfHx0fHxyLmhhcyhlKXx8ci5hZGQoZSk7Y29uc3R7aXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6aX09dGhpcy5ldmFsdWF0b3JPcHRpb25zO2lmKHIuc2l6ZT4wKXtjb25zdCBlPXkuc2xpY2UoKTtmb3IoY29uc3RbdCxhXW9mIGMpdC5zdGFydHNXaXRoKGYpJiZhLmJpdG1hcCYmci5oYXMoYS5iaXRtYXBJZCkmJmUucHVzaChhKTt0PUFubm90YXRpb25GYWN0b3J5LmdlbmVyYXRlSW1hZ2VzKGUsdGhpcy54cmVmLGkpfWVsc2UgdD1Bbm5vdGF0aW9uRmFjdG9yeS5nZW5lcmF0ZUltYWdlcyh5LHRoaXMueHJlZixpKTt4PW5ldyBSZWZTZXQ7dz1Qcm9taXNlLmFsbChbZSx0aGlzLiNjdCh5LHgsbnVsbCldKS50aGVuKChbZV0pPT5lP0Fubm90YXRpb25GYWN0b3J5LnByaW50TmV3QW5ub3RhdGlvbnMoZSxtLGEseSx0KTpudWxsKX1jb25zdCBTPVByb21pc2UuYWxsKFtnLHBdKS50aGVuKGFzeW5jKFtuXSk9Pntjb25zdCBzPWF3YWl0IHRoaXMuI2x0KG4uZGljdCxnYSksbz1uZXcgT3BlcmF0b3JMaXN0KHIsdCk7ZS5zZW5kKCJTdGFydFJlbmRlclBhZ2UiLHt0cmFuc3BhcmVuY3k6bS5oYXNCbGVuZE1vZGVzKHMsdGhpcy5ub25CbGVuZE1vZGVzU2V0KSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsY2FjaGVLZXk6aX0pO2F3YWl0IG0uZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOmEscmVzb3VyY2VzOnMsb3BlcmF0b3JMaXN0Om99KTtyZXR1cm4gb30pO2xldFtrLEMsdl09YXdhaXQgUHJvbWlzZS5hbGwoW1MsdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMsd10pO2lmKHYpe0M9Qy5maWx0ZXIoZT0+IShlLnJlZiYmeC5oYXMoZS5yZWYpKSk7Zm9yKGxldCBlPTAsdD12Lmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCBhPXZbZV07aWYoYS5yZWZUb1JlcGxhY2Upe2NvbnN0IHI9Qy5maW5kSW5kZXgoZT0+ZS5yZWYmJmlzUmVmc0VxdWFsKGUucmVmLGEucmVmVG9SZXBsYWNlKSk7aWYocj49MCl7Qy5zcGxpY2UociwxLGEpO3Yuc3BsaWNlKGUtLSwxKTt0LS19fX1DPUMuY29uY2F0KHYpfWlmKDA9PT1DLmxlbmd0aHx8ciZoKXtrLmZsdXNoKCEwKTtyZXR1cm57bGVuZ3RoOmsudG90YWxMZW5ndGh9fWNvbnN0IEY9ISEociZsKSxUPSEhKHImdSksTz0hIShyJm4pLE09ISEociZzKSxEPSEhKHImbyksUj1bXTtmb3IoY29uc3QgZSBvZiBDKShPfHxNJiZlLm11c3RCZVZpZXdlZChjLEYpJiZlLm11c3RCZVZpZXdlZFdoZW5FZGl0aW5nKFQsZCl8fEQmJmUubXVzdEJlUHJpbnRlZChjKSkmJlIucHVzaChlLmdldE9wZXJhdG9yTGlzdChtLGEscixjKS5jYXRjaChmdW5jdGlvbihlKXt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIke2EubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtyZXR1cm57b3BMaXN0Om51bGwsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX0pKTtjb25zdCBOPWF3YWl0IFByb21pc2UuYWxsKFIpO2xldCBFPSExLEw9ITE7Zm9yKGNvbnN0e29wTGlzdDplLHNlcGFyYXRlRm9ybTp0LHNlcGFyYXRlQ2FudmFzOmF9b2YgTil7ay5hZGRPcExpc3QoZSk7RXx8PXQ7THx8PWF9ay5mbHVzaCghMCx7Zm9ybTpFLGNhbnZhczpMfSk7cmV0dXJue2xlbmd0aDprLnRvdGFsTGVuZ3RofX1hc3luYyBleHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6ZSx0YXNrOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6YSxkaXNhYmxlTm9ybWFsaXphdGlvbjpyLHNpbms6aSxpbnRlcnNlY3RvcjpuPW51bGx9KXtjb25zdCBzPXRoaXMuZ2V0Q29udGVudFN0cmVhbSgpLG89dGhpcy5sb2FkUmVzb3VyY2VzKHBhKSxjPXRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJsYW5nIiksW2wsLGhdPWF3YWl0IFByb21pc2UuYWxsKFtzLG8sY10pLHU9YXdhaXQgdGhpcy4jbHQobC5kaWN0LHBhKTtyZXR1cm4gdGhpcy4jaXQoZSkuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpsLHRhc2s6dCxyZXNvdXJjZXM6dSxpbmNsdWRlTWFya2VkQ29udGVudDphLGRpc2FibGVOb3JtYWxpemF0aW9uOnIsc2luazppLHZpZXdCb3g6dGhpcy52aWV3LGxhbmc6aCxpbnRlcnNlY3RvcjpufSl9YXN5bmMgZ2V0U3RydWN0VHJlZSgpe2NvbnN0IGU9YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290Iik7aWYoIWUpcmV0dXJuIG51bGw7YXdhaXQgdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnM7dHJ5e2NvbnN0IHQ9YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbZV0pO3JldHVybiBhd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHQsInNlcmlhbGl6YWJsZSIpfWNhdGNoKGUpe3dhcm4oYGdldFN0cnVjdFRyZWU6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH19X3BhcnNlU3RydWN0VHJlZShlKXtjb25zdCB0PW5ldyBTdHJ1Y3RUcmVlUGFnZShlLHRoaXMucGFnZURpY3QpO3QucGFyc2UodGhpcy5yZWYpO3JldHVybiB0fWFzeW5jIGdldEFubm90YXRpb25zRGF0YShlLHQsYSl7Y29uc3Qgcj1hd2FpdCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucztpZigwPT09ci5sZW5ndGgpcmV0dXJuIHI7Y29uc3QgaT1bXSxjPVtdO2xldCBsO2NvbnN0IGg9ISEoYSZuKSx1PSEhKGEmcyksZD0hIShhJm8pLGY9W107Zm9yKGNvbnN0IGEgb2Ygcil7Y29uc3Qgcj1ofHx1JiZhLnZpZXdhYmxlOyhyfHxkJiZhLnByaW50YWJsZSkmJmkucHVzaChhLmRhdGEpO2lmKGEuaGFzVGV4dENvbnRlbnQmJnIpe2w/Pz10aGlzLiNpdChlKTtjLnB1c2goYS5leHRyYWN0VGV4dENvbnRlbnQobCx0LFstMS8wLC0xLzAsMS8wLDEvMF0pLmNhdGNoKGZ1bmN0aW9uKGUpe3dhcm4oYGdldEFubm90YXRpb25zRGF0YSAtIGlnbm9yaW5nIHRleHRDb250ZW50IGR1cmluZyAiJHt0Lm5hbWV9IiB0YXNrOiAiJHtlfSIuYCl9KSl9ZWxzZSBhLm92ZXJsYXlzVGV4dENvbnRlbnQmJnImJmYucHVzaChhKX1pZihmLmxlbmd0aD4wKXtjb25zdCBhPW5ldyBJbnRlcnNlY3RvcihmKTtjLnB1c2godGhpcy5leHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6ZSx0YXNrOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ITEsZGlzYWJsZU5vcm1hbGl6YXRpb246ITEsc2luazpudWxsLHZpZXdCb3g6dGhpcy52aWV3LGxhbmc6bnVsbCxpbnRlcnNlY3RvcjphfSkudGhlbigoKT0+e2Euc2V0VGV4dCgpfSkpfWF3YWl0IFByb21pc2UuYWxsKGMpO3JldHVybiBpfWdldCBhbm5vdGF0aW9ucygpe2NvbnN0IGU9dGhpcy4jbnQoIkFubm90cyIpO3JldHVybiBzaGFkb3codGhpcywiYW5ub3RhdGlvbnMiLEFycmF5LmlzQXJyYXkoZSk/ZTpbXSl9Z2V0IF9wYXJzZWRBbm5vdGF0aW9ucygpe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oYXN5bmMgZT0+e2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTtjb25zdFt0LGFdPWF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJhbm5vdGF0aW9uR2xvYmFscyIpLHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpXSk7aWYoIXQpcmV0dXJuW107Y29uc3Qgcj1hPy5vcnBoYW5GaWVsZHMsaT1bXTtmb3IoY29uc3QgYSBvZiBlKWkucHVzaChBbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLGEsdCx0aGlzLl9sb2NhbElkRmFjdG9yeSwhMSxyLG51bGwsdGhpcy5yZWYpLmNhdGNoKGZ1bmN0aW9uKGUpe3dhcm4oYF9wYXJzZWRBbm5vdGF0aW9uczogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpO2NvbnN0IG49W107bGV0IHMsbztmb3IoY29uc3QgZSBvZiBhd2FpdCBQcm9taXNlLmFsbChpKSllJiYoZSBpbnN0YW5jZW9mIFdpZGdldEFubm90YXRpb24/KG98fD1bXSkucHVzaChlKTplIGluc3RhbmNlb2YgUG9wdXBBbm5vdGF0aW9uPyhzfHw9W10pLnB1c2goZSk6bi5wdXNoKGUpKTtvJiZuLnB1c2goLi4ubyk7cyYmbi5wdXNoKC4uLnMpO3JldHVybiBufSk7dGhpcy4jYXQ9ITA7cmV0dXJuIHNoYWRvdyh0aGlzLCJfcGFyc2VkQW5ub3RhdGlvbnMiLGUpfWdldCBqc0FjdGlvbnMoKXtyZXR1cm4gc2hhZG93KHRoaXMsImpzQWN0aW9ucyIsY29sbGVjdEFjdGlvbnModGhpcy54cmVmLHRoaXMucGFnZURpY3Qsc2UpKX1hc3luYyBjb2xsZWN0QW5ub3RhdGlvbnNCeVR5cGUoZSx0LGEscixpKXtjb25zdHtwYWdlSW5kZXg6bn09dGhpcztpZih0aGlzLiNhdCl7Y29uc3QgZT1hd2FpdCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucztmb3IoY29uc3R7ZGF0YTp0fW9mIGUpaWYoIWF8fGEuaGFzKHQuYW5ub3RhdGlvblR5cGUpKXt0LnBhZ2VJbmRleD1uO3IucHVzaChQcm9taXNlLnJlc29sdmUodCkpfXJldHVybn1jb25zdCBzPWF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiYW5ub3RhdGlvbnMiKTtmb3IoY29uc3QgbyBvZiBzKXIucHVzaChBbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLG8saSx0aGlzLl9sb2NhbElkRmFjdG9yeSwhMSxudWxsLGEsdGhpcy5yZWYpLnRoZW4oYXN5bmMgYT0+e2lmKCFhKXJldHVybiBudWxsO2EuZGF0YS5wYWdlSW5kZXg9bjtpZihhLmhhc1RleHRDb250ZW50JiZhLnZpZXdhYmxlKXtjb25zdCByPXRoaXMuI2l0KGUpO2F3YWl0IGEuZXh0cmFjdFRleHRDb250ZW50KHIsdCxbLTEvMCwtMS8wLDEvMCwxLzBdKX1yZXR1cm4gYS5kYXRhfSkuY2F0Y2goZnVuY3Rpb24oZSl7d2FybihgY29sbGVjdEFubm90YXRpb25zQnlUeXBlOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSl9fWNvbnN0IG9jPW5ldyBVaW50OEFycmF5KFszNyw4MCw2OCw3MCw0NV0pLGNjPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksbGM9bmV3IFVpbnQ4QXJyYXkoWzEwMSwxMTAsMTAwLDExMSw5OCwxMDZdKTtmdW5jdGlvbiBmaW5kKGUsdCxhPTEwMjQscj0hMSl7Y29uc3QgaT10Lmxlbmd0aCxuPWUucGVla0J5dGVzKGEpLHM9bi5sZW5ndGgtaTtpZihzPD0wKXJldHVybiExO2lmKHIpe2NvbnN0IGE9aS0xO2xldCByPW4ubGVuZ3RoLTE7Zm9yKDtyPj1hOyl7bGV0IHM9MDtmb3IoO3M8aSYmbltyLXNdPT09dFthLXNdOylzKys7aWYocz49aSl7ZS5wb3MrPXItYTtyZXR1cm4hMH1yLS19fWVsc2V7bGV0IGE9MDtmb3IoO2E8PXM7KXtsZXQgcj0wO2Zvcig7cjxpJiZuW2Ercl09PT10W3JdOylyKys7aWYocj49aSl7ZS5wb3MrPWE7cmV0dXJuITB9YSsrfX1yZXR1cm4hMX1jbGFzcyBQREZEb2N1bWVudHsjaHQ9bmV3IE1hcDsjdXQ9bnVsbDtjb25zdHJ1Y3RvcihlLHQpe2lmKHQubGVuZ3RoPD0wKXRocm93IG5ldyBJbnZhbGlkUERGRXhjZXB0aW9uKCJUaGUgUERGIGZpbGUgaXMgZW1wdHksIGkuZS4gaXRzIHNpemUgaXMgemVybyBieXRlcy4iKTt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnN0cmVhbT10O3RoaXMueHJlZj1uZXcgWFJlZih0LGUpO2NvbnN0IGE9e2ZvbnQ6MH07dGhpcy5fZ2xvYmFsSWRGYWN0b3J5PWNsYXNze3N0YXRpYyBnZXREb2NJZCgpe3JldHVybmBnXyR7ZS5kb2NJZH1gfXN0YXRpYyBjcmVhdGVGb250SWQoKXtyZXR1cm4iZiIrICsrYS5mb250fXN0YXRpYyBjcmVhdGVPYmpJZCgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGNyZWF0ZU9iaklkYCBjYWxsZWQuIil9c3RhdGljIGdldFBhZ2VPYmpJZCgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldFBhZ2VPYmpJZGAgY2FsbGVkLiIpfX19cGFyc2UoZSl7dGhpcy54cmVmLnBhcnNlKGUpO3RoaXMuY2F0YWxvZz1uZXcgQ2F0YWxvZyh0aGlzLnBkZk1hbmFnZXIsdGhpcy54cmVmKX1nZXQgbGluZWFyaXphdGlvbigpe2xldCBlPW51bGw7dHJ5e2U9TGluZWFyaXphdGlvbi5jcmVhdGUodGhpcy5zdHJlYW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO2luZm8oZSl9cmV0dXJuIHNoYWRvdyh0aGlzLCJsaW5lYXJpemF0aW9uIixlKX1nZXQgc3RhcnRYUmVmKCl7Y29uc3QgZT10aGlzLnN0cmVhbTtsZXQgdD0wO2lmKHRoaXMubGluZWFyaXphdGlvbil7ZS5yZXNldCgpO2lmKGZpbmQoZSxsYykpe2Uuc2tpcCg2KTtsZXQgYT1lLnBlZWtCeXRlKCk7Zm9yKDtpc1doaXRlU3BhY2UoYSk7KXtlLnBvcysrO2E9ZS5wZWVrQnl0ZSgpfXQ9ZS5wb3MtZS5zdGFydH19ZWxzZXtjb25zdCBhPTEwMjQscj1jYy5sZW5ndGg7bGV0IGk9ITEsbj1lLmVuZDtmb3IoOyFpJiZuPjA7KXtuLT1hLXI7bjwwJiYobj0wKTtlLnBvcz1uO2k9ZmluZChlLGNjLGEsITApfWlmKGkpe2Uuc2tpcCg5KTtsZXQgYTtkb3thPWUuZ2V0Qnl0ZSgpfXdoaWxlKGlzV2hpdGVTcGFjZShhKSk7bGV0IHI9IiI7Zm9yKDthPj0zMiYmYTw9NTc7KXtyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2E9ZS5nZXRCeXRlKCl9dD1wYXJzZUludChyLDEwKTtpc05hTih0KSYmKHQ9MCl9fXJldHVybiBzaGFkb3codGhpcywic3RhcnRYUmVmIix0KX1jaGVja0hlYWRlcigpe2NvbnN0IGU9dGhpcy5zdHJlYW07ZS5yZXNldCgpO2lmKCFmaW5kKGUsb2MpKXJldHVybjtlLm1vdmVTdGFydCgpO2Uuc2tpcChvYy5sZW5ndGgpO2xldCB0LGE9IiI7Zm9yKDsodD1lLmdldEJ5dGUoKSk+MzImJmEubGVuZ3RoPDc7KWErPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7dWEudGVzdChhKT90aGlzLiN1dD1hOndhcm4oYEludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAke2F9YCl9cGFyc2VTdGFydFhSZWYoKXt0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKX1nZXQgbnVtUGFnZXMoKXtsZXQgZT0wO2U9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXM7cmV0dXJuIHNoYWRvdyh0aGlzLCJudW1QYWdlcyIsZSl9I2R0KGUsdD0wKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoZT0+e2lmKCEoKGU9dGhpcy54cmVmLmZldGNoSWZSZWYoZSkpaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4hMTtpZihlLmhhcygiS2lkcyIpKXtpZigrK3Q+MTApe3dhcm4oIiNoYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzOiBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCByZWFjaGVkIik7cmV0dXJuITF9cmV0dXJuIHRoaXMuI2R0KGUuZ2V0KCJLaWRzIiksdCl9Y29uc3QgYT1pc05hbWUoZS5nZXQoIkZUIiksIlNpZyIpLHI9ZS5nZXQoIlJlY3QiKSxpPUFycmF5LmlzQXJyYXkocikmJnIuZXZlcnkoZT0+MD09PWUpO3JldHVybiBhJiZpfSl9Z2V0IF94ZmFTdHJlYW1zKCl7Y29uc3R7YWNyb0Zvcm06ZX09dGhpcy5jYXRhbG9nO2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHQ9ZS5nZXQoIlhGQSIpLGE9bmV3IE1hcChbInhkcDp4ZHAiLCJ0ZW1wbGF0ZSIsImRhdGFzZXRzIiwiY29uZmlnIiwiY29ubmVjdGlvblNldCIsImxvY2FsZVNldCIsInN0eWxlc2hlZXQiLCIveGRwOnhkcCJdLm1hcChlPT5bZSxudWxsXSkpO2lmKHQgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYhdC5pc0VtcHR5KXthLnNldCgieGRwOnhkcCIsdCk7cmV0dXJuIGF9aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IGU9MCxyPXQubGVuZ3RoO2U8cjtlKz0yKXtsZXQgaTtpPTA9PT1lPyJ4ZHA6eGRwIjplPT09ci0yPyIveGRwOnhkcCI6dFtlXTtpZighYS5oYXMoaSkpY29udGludWU7Y29uc3Qgbj10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2UrMV0pO24gaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYhbi5pc0VtcHR5JiZhLnNldChpLG4pfXJldHVybiBhfWdldCB4ZmFEYXRhc2V0cygpe2NvbnN0IGU9dGhpcy5feGZhU3RyZWFtcztpZighZSlyZXR1cm4gc2hhZG93KHRoaXMsInhmYURhdGFzZXRzIixudWxsKTtmb3IoY29uc3QgdCBvZlsiZGF0YXNldHMiLCJ4ZHA6eGRwIl0pe2NvbnN0IGE9ZS5nZXQodCk7aWYoYSl0cnl7Y29uc3QgZT1zdHJpbmdUb1VURjhTdHJpbmcoYS5nZXRTdHJpbmcoKSk7cmV0dXJuIHNoYWRvdyh0aGlzLCJ4ZmFEYXRhc2V0cyIsbmV3IERhdGFzZXRSZWFkZXIoe1t0XTplfSkpfWNhdGNoe3dhcm4oIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLiIpO2JyZWFrfX1yZXR1cm4gc2hhZG93KHRoaXMsInhmYURhdGFzZXRzIixudWxsKX1nZXQgeGZhRGF0YSgpe2NvbnN0IGU9dGhpcy5feGZhU3RyZWFtcztpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W2Escl1vZiBlKWlmKHIpdHJ5e3RbYV09c3RyaW5nVG9VVEY4U3RyaW5nKHIuZ2V0U3RyaW5nKCkpfWNhdGNoe3dhcm4oIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLiIpO3JldHVybiBudWxsfXJldHVybiB0fWdldCB4ZmFGYWN0b3J5KCl7bGV0IGU7dGhpcy5wZGZNYW5hZ2VyLmVuYWJsZVhmYSYmdGhpcy5jYXRhbG9nLm5lZWRzUmVuZGVyaW5nJiZ0aGlzLmZvcm1JbmZvLmhhc1hmYSYmIXRoaXMuZm9ybUluZm8uaGFzQWNyb0Zvcm0mJihlPXRoaXMueGZhRGF0YSk7cmV0dXJuIHNoYWRvdyh0aGlzLCJ4ZmFGYWN0b3J5IixlP25ldyBYRkFGYWN0b3J5KGUpOm51bGwpfWdldCBpc1B1cmVYZmEoKXtyZXR1cm4hIXRoaXMueGZhRmFjdG9yeSYmdGhpcy54ZmFGYWN0b3J5LmlzVmFsaWQoKX1nZXQgaHRtbEZvclhmYSgpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldFBhZ2VzKCk6bnVsbH1hc3luYyNmdCgpe2NvbnN0IGU9YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInhmYUltYWdlcyIpO2UmJnRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMoZSl9YXN5bmMjZ3QoZSx0KXtjb25zdCBhPWF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpO2lmKCFhKXJldHVybjtjb25zdCByPWF3YWl0IGEuZ2V0QXN5bmMoIkRSIik7aWYoIShyIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2F3YWl0IE9iamVjdExvYWRlci5sb2FkKHIsWyJGb250Il0sdGhpcy54cmVmKTtjb25zdCBpPXIuZ2V0KCJGb250Iik7aWYoIShpIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zLHt1c2VTeXN0ZW1Gb250czohMX0pLHtidWlsdEluQ01hcENhY2hlOnMsZm9udENhY2hlOm8sc3RhbmRhcmRGb250RGF0YUNhY2hlOmN9PXRoaXMuY2F0YWxvZyxsPW5ldyBQYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOm8sYnVpbHRJbkNNYXBDYWNoZTpzLHN0YW5kYXJkRm9udERhdGFDYWNoZTpjLG9wdGlvbnM6bn0pLGg9bmV3IE9wZXJhdG9yTGlzdCx1PVtdLGQ9e2dldCBmb250KCl7cmV0dXJuIHUuYXQoLTEpfSxzZXQgZm9udChlKXt1LnB1c2goZSl9LGNsb25lKCl7cmV0dXJuIHRoaXN9fSxwYXJzZUZvbnQ9KGUsYSxpKT0+bC5oYW5kbGVTZXRGb250KHIsW05hbWUuZ2V0KGUpLDFdLG51bGwsaCx0LGQsYSxpKS5jYXRjaChlPT57d2FybihgbG9hZFhmYUZvbnRzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSxmPVtdO2Zvcihjb25zdFtlLHRdb2YgaSl7Y29uc3QgYT10LmdldCgiRm9udERlc2NyaXB0b3IiKTtpZighKGEgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtsZXQgcj1hLmdldCgiRm9udEZhbWlseSIpO3I9ci5yZXBsYWNlQWxsKC9bIF0rKFxkKS9nLCIkMSIpO2NvbnN0IGk9e2ZvbnRGYW1pbHk6cixmb250V2VpZ2h0OmEuZ2V0KCJGb250V2VpZ2h0IiksaXRhbGljQW5nbGU6LWEuZ2V0KCJJdGFsaWNBbmdsZSIpfTt2YWxpZGF0ZUNTU0ZvbnQoaSkmJmYucHVzaChwYXJzZUZvbnQoZSxudWxsLGkpKX1hd2FpdCBQcm9taXNlLmFsbChmKTtjb25zdCBnPXRoaXMueGZhRmFjdG9yeS5zZXRGb250cyh1KTtpZighZylyZXR1cm47bi5pZ25vcmVFcnJvcnM9ITA7Zi5sZW5ndGg9MDt1Lmxlbmd0aD0wO2NvbnN0IHA9bmV3IFNldDtmb3IoY29uc3QgZSBvZiBnKWdldFhmYUZvbnROYW1lKGAke2V9LVJlZ3VsYXJgKXx8cC5hZGQoZSk7cC5zaXplJiZnLnB1c2goIlBkZkpTLUZhbGxiYWNrIik7Zm9yKGNvbnN0IGUgb2YgZylpZighcC5oYXMoZSkpZm9yKGNvbnN0IHQgb2Zbe25hbWU6IlJlZ3VsYXIiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJCb2xkIixmb250V2VpZ2h0OjcwMCxpdGFsaWNBbmdsZTowfSx7bmFtZToiSXRhbGljIixmb250V2VpZ2h0OjQwMCxpdGFsaWNBbmdsZToxMn0se25hbWU6IkJvbGRJdGFsaWMiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjEyfV0pe2NvbnN0IGE9YCR7ZX0tJHt0Lm5hbWV9YDtmLnB1c2gocGFyc2VGb250KGEsZ2V0WGZhRm9udERpY3QoYSkse2ZvbnRGYW1pbHk6ZSxmb250V2VpZ2h0OnQuZm9udFdlaWdodCxpdGFsaWNBbmdsZTp0Lml0YWxpY0FuZ2xlfSkpfWF3YWl0IFByb21pc2UuYWxsKGYpO3RoaXMueGZhRmFjdG9yeS5hcHBlbmRGb250cyh1LHApfWxvYWRYZmFSZXNvdXJjZXMoZSx0KXtyZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuI2d0KGUsdCkuY2F0Y2goKCk9Pnt9KSx0aGlzLiNmdCgpXSl9c2VyaWFsaXplWGZhRGF0YShlKXtyZXR1cm4gdGhpcy54ZmFGYWN0b3J5P3RoaXMueGZhRmFjdG9yeS5zZXJpYWxpemVEYXRhKGUpOm51bGx9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5jYXRhbG9nLnZlcnNpb258fHRoaXMuI3V0fWdldCBmb3JtSW5mbygpe2NvbnN0IGU9e2hhc0ZpZWxkczohMSxoYXNBY3JvRm9ybTohMSxoYXNYZmE6ITEsaGFzU2lnbmF0dXJlczohMX0se2Fjcm9Gb3JtOnR9PXRoaXMuY2F0YWxvZztpZighdClyZXR1cm4gc2hhZG93KHRoaXMsImZvcm1JbmZvIixlKTt0cnl7Y29uc3QgYT10LmdldCgiRmllbGRzIikscj1BcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aD4wO2UuaGFzRmllbGRzPXI7Y29uc3QgaT10LmdldCgiWEZBIik7ZS5oYXNYZmE9QXJyYXkuaXNBcnJheShpKSYmaS5sZW5ndGg+MHx8aSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJiFpLmlzRW1wdHk7Y29uc3Qgbj0hISgxJnQuZ2V0KCJTaWdGbGFncyIpKSxzPW4mJnRoaXMuI2R0KGEpO2UuaGFzQWNyb0Zvcm09ciYmIXM7ZS5oYXNTaWduYXR1cmVzPW59Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybihgQ2Fubm90IGZldGNoIGZvcm0gaW5mb3JtYXRpb246ICIke2V9Ii5gKX1yZXR1cm4gc2hhZG93KHRoaXMsImZvcm1JbmZvIixlKX1nZXQgZG9jdW1lbnRJbmZvKCl7Y29uc3R7Y2F0YWxvZzplLGZvcm1JbmZvOnQseHJlZjphfT10aGlzLHI9e1BERkZvcm1hdFZlcnNpb246dGhpcy52ZXJzaW9uLExhbmd1YWdlOmUubGFuZyxFbmNyeXB0RmlsdGVyTmFtZTphLmVuY3J5cHQ/LmZpbHRlck5hbWU/P251bGwsSXNMaW5lYXJpemVkOiEhdGhpcy5saW5lYXJpemF0aW9uLElzQWNyb0Zvcm1QcmVzZW50OnQuaGFzQWNyb0Zvcm0sSXNYRkFQcmVzZW50OnQuaGFzWGZhLElzQ29sbGVjdGlvblByZXNlbnQ6ISFlLmNvbGxlY3Rpb24sSXNTaWduYXR1cmVzUHJlc2VudDp0Lmhhc1NpZ25hdHVyZXN9O2xldCBpO3RyeXtpPWEudHJhaWxlci5nZXQoIkluZm8iKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTtpbmZvKCJUaGUgZG9jdW1lbnQgaW5mb3JtYXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfWlmKCEoaSBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBzaGFkb3codGhpcywiZG9jdW1lbnRJbmZvIixyKTtmb3IoY29uc3RbZSx0XW9mIGkpe3N3aXRjaChlKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2YgdCl7cltlXT1zdHJpbmdUb1BERlN0cmluZyh0KTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKHQgaW5zdGFuY2VvZiBOYW1lKXtyW2VdPXQ7Y29udGludWV9YnJlYWs7ZGVmYXVsdDpsZXQgYTtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uic3RyaW5nIjphPXN0cmluZ1RvUERGU3RyaW5nKHQpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOmE9dDticmVhaztkZWZhdWx0OnQgaW5zdGFuY2VvZiBOYW1lJiYoYT10KX1pZih2b2lkIDA9PT1hKXt3YXJuKGBCYWQgdmFsdWUsIGZvciBjdXN0b20ga2V5ICIke2V9IiwgaW4gSW5mbzogJHt0fS5gKTtjb250aW51ZX1yLkN1c3RvbT8/PU9iamVjdC5jcmVhdGUobnVsbCk7ci5DdXN0b21bZV09YTtjb250aW51ZX13YXJuKGBCYWQgdmFsdWUsIGZvciBrZXkgIiR7ZX0iLCBpbiBJbmZvOiAke3R9LmApfXJldHVybiBzaGFkb3codGhpcywiZG9jdW1lbnRJbmZvIixyKX1nZXQgZmluZ2VycHJpbnRzKCl7Y29uc3QgZT0iXDAiLnJlcGVhdCgxNik7ZnVuY3Rpb24gdmFsaWRhdGUodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYxNj09PXQubGVuZ3RoJiZ0IT09ZX1jb25zdCB0PXRoaXMueHJlZi50cmFpbGVyLmdldCgiSUQiKTtsZXQgYSxyO2lmKEFycmF5LmlzQXJyYXkodCkmJnZhbGlkYXRlKHRbMF0pKXthPXN0cmluZ1RvQnl0ZXModFswXSk7dFsxXSE9PXRbMF0mJnZhbGlkYXRlKHRbMV0pJiYocj1zdHJpbmdUb0J5dGVzKHRbMV0pKX1lbHNlIGE9Y2FsY3VsYXRlTUQ1KHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLDEwMjQpLDAsMTAyNCk7cmV0dXJuIHNoYWRvdyh0aGlzLCJmaW5nZXJwcmludHMiLFt0b0hleFV0aWwoYSkscj90b0hleFV0aWwocik6bnVsbF0pfWFzeW5jI3B0KGUpe2NvbnN0e2NhdGFsb2c6dCxsaW5lYXJpemF0aW9uOmEseHJlZjpyfT10aGlzLGk9UmVmLmdldChhLm9iamVjdE51bWJlckZpcnN0LDApO3RyeXtjb25zdCBlPWF3YWl0IHIuZmV0Y2hBc3luYyhpKTtpZihlIGluc3RhbmNlb2YgRGljdCl7bGV0IGE9ZS5nZXRSYXcoIlR5cGUiKTthIGluc3RhbmNlb2YgUmVmJiYoYT1hd2FpdCByLmZldGNoQXN5bmMoYSkpO2lmKGlzTmFtZShhLCJQYWdlIil8fCFlLmhhcygiVHlwZSIpJiYhZS5oYXMoIktpZHMiKSYmZS5oYXMoIkNvbnRlbnRzIikpe3QucGFnZUtpZHNDb3VudENhY2hlLmhhcyhpKXx8dC5wYWdlS2lkc0NvdW50Q2FjaGUucHV0KGksMSk7dC5wYWdlSW5kZXhDYWNoZS5oYXMoaSl8fHQucGFnZUluZGV4Q2FjaGUucHV0KGksMCk7cmV0dXJuW2UsaV19fXRocm93IG5ldyBGb3JtYXRFcnJvcigiVGhlIExpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2Vzbid0IHBvaW50IHRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LiIpfWNhdGNoKGEpe3dhcm4oYF9nZXRMaW5lYXJpemF0aW9uUGFnZTogIiR7YS5tZXNzYWdlfSIuYCk7cmV0dXJuIHQuZ2V0UGFnZURpY3QoZSl9fWdldFBhZ2UoZSl7Y29uc3QgdD10aGlzLiNodC5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdHtjYXRhbG9nOmEsbGluZWFyaXphdGlvbjpyLHhmYUZhY3Rvcnk6aX09dGhpcztsZXQgbjtuPWk/UHJvbWlzZS5yZXNvbHZlKFtEaWN0LmVtcHR5LG51bGxdKTpyPy5wYWdlRmlyc3Q9PT1lP3RoaXMuI3B0KGUpOmEuZ2V0UGFnZURpY3QoZSk7bj1uLnRoZW4oKFt0LHJdKT0+bmV3IFBhZ2Uoe3BkZk1hbmFnZXI6dGhpcy5wZGZNYW5hZ2VyLHhyZWY6dGhpcy54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OnQscmVmOnIsZ2xvYmFsSWRGYWN0b3J5OnRoaXMuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6YS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTphLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmEuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbENvbG9yU3BhY2VDYWNoZTphLmdsb2JhbENvbG9yU3BhY2VDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOmEuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6YS5zeXN0ZW1Gb250Q2FjaGUsbm9uQmxlbmRNb2Rlc1NldDphLm5vbkJsZW5kTW9kZXNTZXQseGZhRmFjdG9yeTppfSkpO3RoaXMuI2h0LnNldChlLG4pO3JldHVybiBufWFzeW5jIGNoZWNrRmlyc3RQYWdlKGU9ITEpe2lmKCFlKXRyeXthd2FpdCB0aGlzLmdldFBhZ2UoMCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIFhSZWZFbnRyeUV4Y2VwdGlvbil7dGhpcy4jaHQuZGVsZXRlKDApO2F3YWl0IHRoaXMuY2xlYW51cCgpO3Rocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb259fX1hc3luYyBjaGVja0xhc3RQYWdlKGU9ITEpe2NvbnN0e2NhdGFsb2c6dCxwZGZNYW5hZ2VyOmF9PXRoaXM7dC5zZXRBY3R1YWxOdW1QYWdlcygpO2xldCByO3RyeXthd2FpdCBQcm9taXNlLmFsbChbYS5lbnN1cmVEb2MoInhmYUZhY3RvcnkiKSxhLmVuc3VyZURvYygibGluZWFyaXphdGlvbiIpLGEuZW5zdXJlQ2F0YWxvZygibnVtUGFnZXMiKV0pO2lmKHRoaXMueGZhRmFjdG9yeSlyZXR1cm47cj10aGlzLmxpbmVhcml6YXRpb24/dGhpcy5saW5lYXJpemF0aW9uLm51bVBhZ2VzOnQubnVtUGFnZXM7aWYoIU51bWJlci5pc0ludGVnZXIocikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYWdlIGNvdW50IGlzIG5vdCBhbiBpbnRlZ2VyLiIpO2lmKHI8PTEpcmV0dXJuO2F3YWl0IHRoaXMuZ2V0UGFnZShyLTEpfWNhdGNoKGkpe3RoaXMuI2h0LmRlbGV0ZShyLTEpO2F3YWl0IHRoaXMuY2xlYW51cCgpO2lmKGkgaW5zdGFuY2VvZiBYUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb247d2FybihgY2hlY2tMYXN0UGFnZSAtIGludmFsaWQgL1BhZ2VzIHRyZWUgL0NvdW50OiAke3J9LmApO2xldCBuO3RyeXtuPWF3YWl0IHQuZ2V0QWxsUGFnZURpY3RzKGUpfWNhdGNoKGEpe2lmKGEgaW5zdGFuY2VvZiBYUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb247dC5zZXRBY3R1YWxOdW1QYWdlcygxKTtyZXR1cm59Zm9yKGNvbnN0W2UsW3IsaV1db2Ygbil7bGV0IG47aWYociBpbnN0YW5jZW9mIEVycm9yKXtuPVByb21pc2UucmVqZWN0KHIpO24uY2F0Y2goKCk9Pnt9KX1lbHNlIG49UHJvbWlzZS5yZXNvbHZlKG5ldyBQYWdlKHtwZGZNYW5hZ2VyOmEseHJlZjp0aGlzLnhyZWYscGFnZUluZGV4OmUscGFnZURpY3Q6cixyZWY6aSxnbG9iYWxJZEZhY3Rvcnk6dGhpcy5fZ2xvYmFsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsQ29sb3JTcGFjZUNhY2hlOnRoaXMuZ2xvYmFsQ29sb3JTcGFjZUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dC5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0LnN5c3RlbUZvbnRDYWNoZSxub25CbGVuZE1vZGVzU2V0OnQubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5Om51bGx9KSk7dGhpcy4jaHQuc2V0KGUsbil9dC5zZXRBY3R1YWxOdW1QYWdlcyhuLnNpemUpfX1hc3luYyBmb250RmFsbGJhY2soZSx0KXtjb25zdHtjYXRhbG9nOmEscGRmTWFuYWdlcjpyfT10aGlzO2Zvcihjb25zdCBpIG9mIGF3YWl0IFByb21pc2UuYWxsKGEuZm9udENhY2hlKSlpZihpLmxvYWRlZE5hbWU9PT1lKXtpLmZhbGxiYWNrKHQsci5ldmFsdWF0b3JPcHRpb25zKTtyZXR1cm59fWFzeW5jIGNsZWFudXAoZT0hMSl7cmV0dXJuIHRoaXMuY2F0YWxvZz90aGlzLmNhdGFsb2cuY2xlYW51cChlKTpjbGVhckdsb2JhbENhY2hlcygpfWFzeW5jI210KGUsdCxhLHIsaSxuLHMpe2NvbnN0e3hyZWY6b309dGhpcztpZighKGEgaW5zdGFuY2VvZiBSZWYpfHxuLmhhcyhhKSlyZXR1cm47bi5wdXQoYSk7Y29uc3QgYz1hd2FpdCBvLmZldGNoQXN5bmMoYSk7aWYoIShjIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2xldCBsPWF3YWl0IGMuZ2V0QXN5bmMoIlN1YnR5cGUiKTtsPWwgaW5zdGFuY2VvZiBOYW1lP2wubmFtZTpudWxsO2lmKCJMaW5rIj09PWwpcmV0dXJuO2lmKGMuaGFzKCJUIikpe2NvbnN0IHQ9c3RyaW5nVG9QREZTdHJpbmcoYXdhaXQgYy5nZXRBc3luYygiVCIpKTtlPSIiPT09ZT90OmAke2V9LiR7dH1gfWVsc2V7bGV0IGE9Yztmb3IoOzspe2E9YS5nZXRSYXcoIlBhcmVudCIpfHx0O2lmKGEgaW5zdGFuY2VvZiBSZWYpe2lmKG4uaGFzKGEpKWJyZWFrO2E9YXdhaXQgby5mZXRjaEFzeW5jKGEpfWlmKCEoYSBpbnN0YW5jZW9mIERpY3QpKWJyZWFrO2lmKGEuaGFzKCJUIikpe2NvbnN0IHQ9c3RyaW5nVG9QREZTdHJpbmcoYXdhaXQgYS5nZXRBc3luYygiVCIpKTtlPSIiPT09ZT90OmAke2V9LiR7dH1gO2JyZWFrfX19dCYmIWMuaGFzKCJQYXJlbnQiKSYmaXNOYW1lKGMuZ2V0KCJTdWJ0eXBlIiksIldpZGdldCIpJiZzLnB1dChhLHQpO3IuaGFzKGUpfHxyLnNldChlLFtdKTtyLmdldChlKS5wdXNoKEFubm90YXRpb25GYWN0b3J5LmNyZWF0ZShvLGEsaSxudWxsLCEwLHMsbnVsbCxudWxsKS50aGVuKGU9PmU/LmdldEZpZWxkT2JqZWN0KCkpLmNhdGNoKGZ1bmN0aW9uKGUpe3dhcm4oYCNjb2xsZWN0RmllbGRPYmplY3RzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSk7aWYoIWMuaGFzKCJLaWRzIikpcmV0dXJuO2NvbnN0IGg9YXdhaXQgYy5nZXRBc3luYygiS2lkcyIpO2lmKEFycmF5LmlzQXJyYXkoaCkpZm9yKGNvbnN0IHQgb2YgaClhd2FpdCB0aGlzLiNtdChlLGEsdCxyLGksbixzKX1nZXQgZmllbGRPYmplY3RzKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJmaWVsZE9iamVjdHMiLHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImZvcm1JbmZvIikudGhlbihhc3luYyBlPT57aWYoIWUuaGFzRmllbGRzKXJldHVybiBudWxsO2NvbnN0IHQ9YXdhaXQgdGhpcy5hbm5vdGF0aW9uR2xvYmFscztpZighdClyZXR1cm4gbnVsbDtjb25zdHthY3JvRm9ybTphfT10LHI9bmV3IFJlZlNldCxpPU9iamVjdC5jcmVhdGUobnVsbCksbj1uZXcgTWFwLHM9bmV3IFJlZlNldENhY2hlO2Zvcihjb25zdCBlIG9mIGEuZ2V0KCJGaWVsZHMiKSlhd2FpdCB0aGlzLiNtdCgiIixudWxsLGUsbix0LHIscyk7Y29uc3Qgbz1bXTtmb3IoY29uc3RbZSx0XW9mIG4pby5wdXNoKFByb21pc2UuYWxsKHQpLnRoZW4odD0+eyh0PXQuZmlsdGVyKGU9PiEhZSkpLmxlbmd0aD4wJiYoaVtlXT10KX0pKTthd2FpdCBQcm9taXNlLmFsbChvKTtyZXR1cm57YWxsRmllbGRzOm9iamVjdFNpemUoaSk+MD9pOm51bGwsb3JwaGFuRmllbGRzOnN9fSkpfWdldCBoYXNKU0FjdGlvbnMoKXtyZXR1cm4gc2hhZG93KHRoaXMsImhhc0pTQWN0aW9ucyIsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiX3BhcnNlSGFzSlNBY3Rpb25zIikpfWFzeW5jIF9wYXJzZUhhc0pTQWN0aW9ucygpe2NvbnN0W2UsdF09YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKSx0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKV0pO3JldHVybiEhZXx8ISF0Py5hbGxGaWVsZHMmJk9iamVjdC52YWx1ZXModC5hbGxGaWVsZHMpLnNvbWUoZT0+ZS5zb21lKGU9Pm51bGwhPT1lLmFjdGlvbnMpKX1nZXQgY2FsY3VsYXRpb25PcmRlcklkcygpe2NvbnN0IGU9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtPy5nZXQoIkNPIik7aWYoIUFycmF5LmlzQXJyYXkoZSl8fDA9PT1lLmxlbmd0aClyZXR1cm4gc2hhZG93KHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpO2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSlhIGluc3RhbmNlb2YgUmVmJiZ0LnB1c2goYS50b1N0cmluZygpKTtyZXR1cm4gc2hhZG93KHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLHQubGVuZ3RoP3Q6bnVsbCl9Z2V0IGFubm90YXRpb25HbG9iYWxzKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJhbm5vdGF0aW9uR2xvYmFscyIsQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlR2xvYmFscyh0aGlzLnBkZk1hbmFnZXIpKX19Y2xhc3MgQmFzZVBkZk1hbmFnZXJ7Y29uc3RydWN0b3Ioe2RvY0Jhc2VVcmw6ZSxkb2NJZDp0LGVuYWJsZVhmYTphLGV2YWx1YXRvck9wdGlvbnM6cixoYW5kbGVyOmkscGFzc3dvcmQ6bn0pe3RoaXMuX2RvY0Jhc2VVcmw9ZnVuY3Rpb24gcGFyc2VEb2NCYXNlVXJsKGUpe2lmKGUpe2NvbnN0IHQ9Y3JlYXRlVmFsaWRBYnNvbHV0ZVVybChlKTtpZih0KXJldHVybiB0LmhyZWY7d2FybihgSW52YWxpZCBhYnNvbHV0ZSBkb2NCYXNlVXJsOiAiJHtlfSIuYCl9cmV0dXJuIG51bGx9KGUpO3RoaXMuX2RvY0lkPXQ7dGhpcy5fcGFzc3dvcmQ9bjt0aGlzLmVuYWJsZVhmYT1hO3IuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQmJj1GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDtyLmlzSW1hZ2VEZWNvZGVyU3VwcG9ydGVkJiY9RmVhdHVyZVRlc3QuaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQ7dGhpcy5ldmFsdWF0b3JPcHRpb25zPU9iamVjdC5mcmVlemUocik7SW1hZ2VSZXNpemVyLnNldE9wdGlvbnMocik7SnBlZ1N0cmVhbS5zZXRPcHRpb25zKHIpO09wZXJhdG9yTGlzdC5zZXRPcHRpb25zKHIpO2NvbnN0IHM9ey4uLnIsaGFuZGxlcjppfTtKcHhJbWFnZS5zZXRPcHRpb25zKHMpO0ljY0NvbG9yU3BhY2Uuc2V0T3B0aW9ucyhzKTtDbXlrSUNDQmFzZWRDUy5zZXRPcHRpb25zKHMpfWdldCBkb2NJZCgpe3JldHVybiB0aGlzLl9kb2NJZH1nZXQgcGFzc3dvcmQoKXtyZXR1cm4gdGhpcy5fcGFzc3dvcmR9Z2V0IGRvY0Jhc2VVcmwoKXtyZXR1cm4gdGhpcy5fZG9jQmFzZVVybH1lbnN1cmVEb2MoZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudCxlLHQpfWVuc3VyZVhSZWYoZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC54cmVmLGUsdCl9ZW5zdXJlQ2F0YWxvZyhlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LmNhdGFsb2csZSx0KX1nZXRQYWdlKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UoZSl9Zm9udEZhbGxiYWNrKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZm9udEZhbGxiYWNrKGUsdCl9Y2xlYW51cChlPSExKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jbGVhbnVwKGUpfWFzeW5jIGVuc3VyZShlLHQsYSl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZW5zdXJlYCBjYWxsZWQiKX1yZXF1ZXN0UmFuZ2UoZSx0KXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfXJlcXVlc3RMb2FkZWRTdHJlYW0oZT0hMSl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgcmVxdWVzdExvYWRlZFN0cmVhbWAgY2FsbGVkIil9c2VuZFByb2dyZXNzaXZlRGF0YShlKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBzZW5kUHJvZ3Jlc3NpdmVEYXRhYCBjYWxsZWQiKX11cGRhdGVQYXNzd29yZChlKXt0aGlzLl9wYXNzd29yZD1lfXRlcm1pbmF0ZShlKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGB0ZXJtaW5hdGVgIGNhbGxlZCIpfX1jbGFzcyBMb2NhbFBkZk1hbmFnZXIgZXh0ZW5kcyBCYXNlUGRmTWFuYWdlcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdCB0PW5ldyBTdHJlYW0oZS5zb3VyY2UpO3RoaXMucGRmRG9jdW1lbnQ9bmV3IFBERkRvY3VtZW50KHRoaXMsdCk7dGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZT1Qcm9taXNlLnJlc29sdmUodCl9YXN5bmMgZW5zdXJlKGUsdCxhKXtjb25zdCByPWVbdF07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseShlLGEpOnJ9cmVxdWVzdFJhbmdlKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfXJlcXVlc3RMb2FkZWRTdHJlYW0oZT0hMSl7cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2V9dGVybWluYXRlKGUpe319Y2xhc3MgTmV0d29ya1BkZk1hbmFnZXIgZXh0ZW5kcyBCYXNlUGRmTWFuYWdlcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLnN0cmVhbU1hbmFnZXI9bmV3IENodW5rZWRTdHJlYW1NYW5hZ2VyKGUuc291cmNlLHttc2dIYW5kbGVyOmUuaGFuZGxlcixsZW5ndGg6ZS5sZW5ndGgsZGlzYWJsZUF1dG9GZXRjaDplLmRpc2FibGVBdXRvRmV0Y2gscmFuZ2VDaHVua1NpemU6ZS5yYW5nZUNodW5rU2l6ZX0pO3RoaXMucGRmRG9jdW1lbnQ9bmV3IFBERkRvY3VtZW50KHRoaXMsdGhpcy5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKX1hc3luYyBlbnN1cmUoZSx0LGEpe3RyeXtjb25zdCByPWVbdF07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseShlLGEpOnJ9Y2F0Y2gocil7aWYoIShyIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pKXRocm93IHI7YXdhaXQgdGhpcy5yZXF1ZXN0UmFuZ2Uoci5iZWdpbixyLmVuZCk7cmV0dXJuIHRoaXMuZW5zdXJlKGUsdCxhKX19cmVxdWVzdFJhbmdlKGUsdCl7cmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0UmFuZ2UoZSx0KX1yZXF1ZXN0TG9hZGVkU3RyZWFtKGU9ITEpe3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcyhlKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtjaHVuazplfSl9dGVybWluYXRlKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChlKX19Y29uc3QgaGM9MSx1Yz0yLGRjPTEsZmM9MixnYz0zLHBjPTQsbWM9NSxiYz02LHljPTcsd2M9ODtmdW5jdGlvbiBvbkZuKCl7fWZ1bmN0aW9uIHdyYXBSZWFzb24oZSl7aWYoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgSW52YWxpZFBERkV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIFBhc3N3b3JkRXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBVbmtub3duRXJyb3JFeGNlcHRpb24pcmV0dXJuIGU7ZSBpbnN0YW5jZW9mIEVycm9yfHwib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfHx1bnJlYWNoYWJsZSgnd3JhcFJlYXNvbjogRXhwZWN0ZWQgInJlYXNvbiIgdG8gYmUgYSAocG9zc2libHkgY2xvbmVkKSBFcnJvci4nKTtzd2l0Y2goZS5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IEFib3J0RXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJJbnZhbGlkUERGRXhjZXB0aW9uIjpyZXR1cm4gbmV3IEludmFsaWRQREZFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIlBhc3N3b3JkRXhjZXB0aW9uIjpyZXR1cm4gbmV3IFBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpO2Nhc2UiUmVzcG9uc2VFeGNlcHRpb24iOnJldHVybiBuZXcgUmVzcG9uc2VFeGNlcHRpb24oZS5tZXNzYWdlLGUuc3RhdHVzLGUubWlzc2luZyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLmRldGFpbHMpfXJldHVybiBuZXcgVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpfWNsYXNzIE1lc3NhZ2VIYW5kbGVyeyNidD1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLnNvdXJjZU5hbWU9ZTt0aGlzLnRhcmdldE5hbWU9dDt0aGlzLmNvbU9iaj1hO3RoaXMuY2FsbGJhY2tJZD0xO3RoaXMuc3RyZWFtSWQ9MTt0aGlzLnN0cmVhbVNpbmtzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5zdHJlYW1Db250cm9sbGVycz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmFjdGlvbkhhbmRsZXI9T2JqZWN0LmNyZWF0ZShudWxsKTthLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuI3l0LmJpbmQodGhpcykse3NpZ25hbDp0aGlzLiNidC5zaWduYWx9KX0jeXQoe2RhdGE6ZX0pe2lmKGUudGFyZ2V0TmFtZSE9PXRoaXMuc291cmNlTmFtZSlyZXR1cm47aWYoZS5zdHJlYW0pe3RoaXMuI3d0KGUpO3JldHVybn1pZihlLmNhbGxiYWNrKXtjb25zdCB0PWUuY2FsbGJhY2tJZCxhPXRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbdF07aWYoIWEpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAke3R9YCk7ZGVsZXRlIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbdF07aWYoZS5jYWxsYmFjaz09PWhjKWEucmVzb2x2ZShlLmRhdGEpO2Vsc2V7aWYoZS5jYWxsYmFjayE9PXVjKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBjYWxsYmFjayBjYXNlIik7YS5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpfXJldHVybn1jb25zdCB0PXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl07aWYoIXQpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHtlLmFjdGlvbn1gKTtpZihlLmNhbGxiYWNrSWQpe2NvbnN0IGE9dGhpcy5zb3VyY2VOYW1lLHI9ZS5zb3VyY2VOYW1lLGk9dGhpcy5jb21PYmo7UHJvbWlzZS50cnkodCxlLmRhdGEpLnRoZW4oZnVuY3Rpb24odCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6cixjYWxsYmFjazpoYyxjYWxsYmFja0lkOmUuY2FsbGJhY2tJZCxkYXRhOnR9KX0sZnVuY3Rpb24odCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6cixjYWxsYmFjazp1YyxjYWxsYmFja0lkOmUuY2FsbGJhY2tJZCxyZWFzb246d3JhcFJlYXNvbih0KX0pfSk7cmV0dXJufWUuc3RyZWFtSWQ/dGhpcy4jeHQoZSk6dChlLmRhdGEpfW9uKGUsdCl7Y29uc3QgYT10aGlzLmFjdGlvbkhhbmRsZXI7aWYoYVtlXSl0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIiR7ZX0iYCk7YVtlXT10fXNlbmQoZSx0LGEpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246ZSxkYXRhOnR9LGEpfXNlbmRXaXRoUHJvbWlzZShlLHQsYSl7Y29uc3Qgcj10aGlzLmNhbGxiYWNrSWQrKyxpPVByb21pc2Uud2l0aFJlc29sdmVycygpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl09aTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6cixkYXRhOnR9LGEpfWNhdGNoKGUpe2kucmVqZWN0KGUpfXJldHVybiBpLnByb21pc2V9c2VuZFdpdGhTdHJlYW0oZSx0LGEscil7Y29uc3QgaT10aGlzLnN0cmVhbUlkKyssbj10aGlzLnNvdXJjZU5hbWUscz10aGlzLnRhcmdldE5hbWUsbz10aGlzLmNvbU9iajtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydDphPT57Y29uc3QgYz1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2ldPXtjb250cm9sbGVyOmEsc3RhcnRDYWxsOmMscHVsbENhbGw6bnVsbCxjYW5jZWxDYWxsOm51bGwsaXNDbG9zZWQ6ITF9O28ucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6bix0YXJnZXROYW1lOnMsYWN0aW9uOmUsc3RyZWFtSWQ6aSxkYXRhOnQsZGVzaXJlZFNpemU6YS5kZXNpcmVkU2l6ZX0scik7cmV0dXJuIGMucHJvbWlzZX0scHVsbDplPT57Y29uc3QgdD1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2ldLnB1bGxDYWxsPXQ7by5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpuLHRhcmdldE5hbWU6cyxzdHJlYW06YmMsc3RyZWFtSWQ6aSxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSk7cmV0dXJuIHQucHJvbWlzZX0sY2FuY2VsOmU9Pnthc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCJjYW5jZWwgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIik7Y29uc3QgdD1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2ldLmNhbmNlbENhbGw9dDt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2ldLmlzQ2xvc2VkPSEwO28ucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6bix0YXJnZXROYW1lOnMsc3RyZWFtOmRjLHN0cmVhbUlkOmkscmVhc29uOndyYXBSZWFzb24oZSl9KTtyZXR1cm4gdC5wcm9taXNlfX0sYSl9I3h0KGUpe2NvbnN0IHQ9ZS5zdHJlYW1JZCxhPXRoaXMuc291cmNlTmFtZSxyPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG49dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl0sbz17ZW5xdWV1ZShlLG49MSxzKXtpZih0aGlzLmlzQ2FuY2VsbGVkKXJldHVybjtjb25zdCBvPXRoaXMuZGVzaXJlZFNpemU7dGhpcy5kZXNpcmVkU2l6ZS09bjtpZihvPjAmJnRoaXMuZGVzaXJlZFNpemU8PTApe3RoaXMuc2lua0NhcGFiaWxpdHk9UHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7dGhpcy5yZWFkeT10aGlzLnNpbmtDYXBhYmlsaXR5LnByb21pc2V9aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6cixzdHJlYW06cGMsc3RyZWFtSWQ6dCxjaHVuazplfSxzKX0sY2xvc2UoKXtpZighdGhpcy5pc0NhbmNlbGxlZCl7dGhpcy5pc0NhbmNlbGxlZD0hMDtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpyLHN0cmVhbTpnYyxzdHJlYW1JZDp0fSk7ZGVsZXRlIG4uc3RyZWFtU2lua3NbdF19fSxlcnJvcihlKXthc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb24iKTtpZighdGhpcy5pc0NhbmNlbGxlZCl7dGhpcy5pc0NhbmNlbGxlZD0hMDtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpyLHN0cmVhbTptYyxzdHJlYW1JZDp0LHJlYXNvbjp3cmFwUmVhc29uKGUpfSl9fSxzaW5rQ2FwYWJpbGl0eTpQcm9taXNlLndpdGhSZXNvbHZlcnMoKSxvblB1bGw6bnVsbCxvbkNhbmNlbDpudWxsLGlzQ2FuY2VsbGVkOiExLGRlc2lyZWRTaXplOmUuZGVzaXJlZFNpemUscmVhZHk6bnVsbH07by5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7by5yZWFkeT1vLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7dGhpcy5zdHJlYW1TaW5rc1t0XT1vO1Byb21pc2UudHJ5KHMsZS5kYXRhLG8pLnRoZW4oZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpyLHN0cmVhbTp3YyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0sZnVuY3Rpb24oZSl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6cixzdHJlYW06d2Msc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSl9I3d0KGUpe2NvbnN0IHQ9ZS5zdHJlYW1JZCxhPXRoaXMuc291cmNlTmFtZSxyPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG49dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxzPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIHdjOmUuc3VjY2Vzcz9uLnN0YXJ0Q2FsbC5yZXNvbHZlKCk6bi5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIHljOmUuc3VjY2Vzcz9uLnB1bGxDYWxsLnJlc29sdmUoKTpuLnB1bGxDYWxsLnJlamVjdCh3cmFwUmVhc29uKGUucmVhc29uKSk7YnJlYWs7Y2FzZSBiYzppZighcyl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6cixzdHJlYW06eWMsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSk7YnJlYWt9cy5kZXNpcmVkU2l6ZTw9MCYmZS5kZXNpcmVkU2l6ZT4wJiZzLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtzLmRlc2lyZWRTaXplPWUuZGVzaXJlZFNpemU7UHJvbWlzZS50cnkocy5vblB1bGx8fG9uRm4pLnRoZW4oZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpyLHN0cmVhbTp5YyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0sZnVuY3Rpb24oZSl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6cixzdHJlYW06eWMsc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSk7YnJlYWs7Y2FzZSBwYzphc3NlcnQobiwiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpO2lmKG4uaXNDbG9zZWQpYnJlYWs7bi5jb250cm9sbGVyLmVucXVldWUoZS5jaHVuayk7YnJlYWs7Y2FzZSBnYzphc3NlcnQobiwiY2xvc2Ugc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihuLmlzQ2xvc2VkKWJyZWFrO24uaXNDbG9zZWQ9ITA7bi5jb250cm9sbGVyLmNsb3NlKCk7dGhpcy4jU3Qobix0KTticmVhaztjYXNlIG1jOmFzc2VydChuLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpO24uY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGUucmVhc29uKSk7dGhpcy4jU3Qobix0KTticmVhaztjYXNlIGZjOmUuc3VjY2Vzcz9uLmNhbmNlbENhbGwucmVzb2x2ZSgpOm4uY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpO3RoaXMuI1N0KG4sdCk7YnJlYWs7Y2FzZSBkYzppZighcylicmVhaztjb25zdCBvPXdyYXBSZWFzb24oZS5yZWFzb24pO1Byb21pc2UudHJ5KHMub25DYW5jZWx8fG9uRm4sbykudGhlbihmdW5jdGlvbigpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOnIsc3RyZWFtOmZjLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSxmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpyLHN0cmVhbTpmYyxzdHJlYW1JZDp0LHJlYXNvbjp3cmFwUmVhc29uKGUpfSl9KTtzLnNpbmtDYXBhYmlsaXR5LnJlamVjdChvKTtzLmlzQ2FuY2VsbGVkPSEwO2RlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW3RdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fWFzeW5jI1N0KGUsdCl7YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtlLnN0YXJ0Q2FsbD8ucHJvbWlzZSxlLnB1bGxDYWxsPy5wcm9taXNlLGUuY2FuY2VsQ2FsbD8ucHJvbWlzZV0pO2RlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3RdfWRlc3Ryb3koKXt0aGlzLiNidD8uYWJvcnQoKTt0aGlzLiNidD1udWxsfX1hc3luYyBmdW5jdGlvbiB3cml0ZU9iamVjdChlLHQsYSx7ZW5jcnlwdDpyPW51bGx9KXtjb25zdCBpPXI/LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShlLm51bSxlLmdlbik7YS5wdXNoKGAke2UubnVtfSAke2UuZ2VufSBvYmpcbmApO3QgaW5zdGFuY2VvZiBEaWN0P2F3YWl0IHdyaXRlRGljdCh0LGEsaSk6dCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/YXdhaXQgd3JpdGVTdHJlYW0odCxhLGkpOihBcnJheS5pc0FycmF5KHQpfHxBcnJheUJ1ZmZlci5pc1ZpZXcodCkpJiZhd2FpdCB3cml0ZUFycmF5KHQsYSxpKTthLnB1c2goIlxuZW5kb2JqXG4iKX1hc3luYyBmdW5jdGlvbiB3cml0ZURpY3QoZSx0LGEpe3QucHVzaCgiPDwiKTtmb3IoY29uc3QgciBvZiBlLmdldEtleXMoKSl7dC5wdXNoKGAgLyR7ZXNjYXBlUERGTmFtZShyKX0gYCk7YXdhaXQgd3JpdGVWYWx1ZShlLmdldFJhdyhyKSx0LGEpfXQucHVzaCgiPj4iKX1hc3luYyBmdW5jdGlvbiB3cml0ZVN0cmVhbShlLHQsYSl7bGV0IHI9ZS5nZXRCeXRlcygpO2NvbnN0e2RpY3Q6aX09ZSxbbixzXT1hd2FpdCBQcm9taXNlLmFsbChbaS5nZXRBc3luYygiRmlsdGVyIiksaS5nZXRBc3luYygiRGVjb2RlUGFybXMiKV0pLG89aXNOYW1lKEFycmF5LmlzQXJyYXkobik/YXdhaXQgaS54cmVmLmZldGNoSWZSZWZBc3luYyhuWzBdKTpuLCJGbGF0ZURlY29kZSIpO2lmKHIubGVuZ3RoPj0yNTZ8fG8pdHJ5e2NvbnN0IGU9bmV3IENvbXByZXNzaW9uU3RyZWFtKCJkZWZsYXRlIiksdD1lLndyaXRhYmxlLmdldFdyaXRlcigpO2F3YWl0IHQucmVhZHk7dC53cml0ZShyKS50aGVuKGFzeW5jKCk9Pnthd2FpdCB0LnJlYWR5O2F3YWl0IHQuY2xvc2UoKX0pLmNhdGNoKCgpPT57fSk7Y29uc3QgYT1hd2FpdCBuZXcgUmVzcG9uc2UoZS5yZWFkYWJsZSkuYXJyYXlCdWZmZXIoKTtyPW5ldyBVaW50OEFycmF5KGEpO2xldCBjLGw7aWYobil7aWYoIW8pe2M9QXJyYXkuaXNBcnJheShuKT9bTmFtZS5nZXQoIkZsYXRlRGVjb2RlIiksLi4ubl06W05hbWUuZ2V0KCJGbGF0ZURlY29kZSIpLG5dO3MmJihsPUFycmF5LmlzQXJyYXkocyk/W251bGwsLi4uc106W251bGwsc10pfX1lbHNlIGM9TmFtZS5nZXQoIkZsYXRlRGVjb2RlIik7YyYmaS5zZXQoIkZpbHRlciIsYyk7bCYmaS5zZXQoIkRlY29kZVBhcm1zIixsKX1jYXRjaChlKXtpbmZvKGB3cml0ZVN0cmVhbSAtIGNhbm5vdCBjb21wcmVzcyBkYXRhOiAiJHtlfSIuYCl9bGV0IGM9Ynl0ZXNUb1N0cmluZyhyKTthJiYoYz1hLmVuY3J5cHRTdHJpbmcoYykpO2kuc2V0KCJMZW5ndGgiLGMubGVuZ3RoKTthd2FpdCB3cml0ZURpY3QoaSx0LGEpO3QucHVzaCgiIHN0cmVhbVxuIixjLCJcbmVuZHN0cmVhbSIpfWFzeW5jIGZ1bmN0aW9uIHdyaXRlQXJyYXkoZSx0LGEpe3QucHVzaCgiWyIpO2xldCByPSEwO2Zvcihjb25zdCBpIG9mIGUpe3I/cj0hMTp0LnB1c2goIiAiKTthd2FpdCB3cml0ZVZhbHVlKGksdCxhKX10LnB1c2goIl0iKX1hc3luYyBmdW5jdGlvbiB3cml0ZVZhbHVlKGUsdCxhKXtpZihlIGluc3RhbmNlb2YgTmFtZSl0LnB1c2goYC8ke2VzY2FwZVBERk5hbWUoZS5uYW1lKX1gKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBSZWYpdC5wdXNoKGAke2UubnVtfSAke2UuZ2VufSBSYCk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpfHxBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpYXdhaXQgd3JpdGVBcnJheShlLHQsYSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpe2EmJihlPWEuZW5jcnlwdFN0cmluZyhlKSk7dC5wdXNoKGAoJHtlc2NhcGVTdHJpbmcoZSl9KWApfWVsc2UibnVtYmVyIj09dHlwZW9mIGU/dC5wdXNoKG51bWJlclRvU3RyaW5nKGUpKToiYm9vbGVhbiI9PXR5cGVvZiBlP3QucHVzaChlLnRvU3RyaW5nKCkpOmUgaW5zdGFuY2VvZiBEaWN0P2F3YWl0IHdyaXRlRGljdChlLHQsYSk6ZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/YXdhaXQgd3JpdGVTdHJlYW0oZSx0LGEpOm51bGw9PT1lP3QucHVzaCgibnVsbCIpOndhcm4oYFVuaGFuZGxlZCB2YWx1ZSBpbiB3cml0ZXI6ICR7dHlwZW9mIGV9LCBwbGVhc2UgZmlsZSBhIGJ1Zy5gKX1mdW5jdGlvbiB3cml0ZUludChlLHQsYSxyKXtmb3IobGV0IGk9dCthLTE7aT5hLTE7aS0tKXtyW2ldPTI1NSZlO2U+Pj04fXJldHVybiBhK3R9ZnVuY3Rpb24gd3JpdGVTdHJpbmcoZSx0LGEpe2NvbnN0IHI9ZS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxyO2krKylhW3QraV09MjU1JmUuY2hhckNvZGVBdChpKTtyZXR1cm4gdCtyfWZ1bmN0aW9uIHVwZGF0ZVhGQSh7eGZhRGF0YTplLHhmYURhdGFzZXRzUmVmOnQsY2hhbmdlczphLHhyZWY6cn0pe2lmKG51bGw9PT1lKXtlPWZ1bmN0aW9uIHdyaXRlWEZBRGF0YUZvckFjcm9mb3JtKGUsdCl7Y29uc3QgYT1uZXcgU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO2Zvcihjb25zdHt4ZmE6ZX1vZiB0KXtpZighZSljb250aW51ZTtjb25zdHtwYXRoOnQsdmFsdWU6cn09ZTtpZighdCljb250aW51ZTtjb25zdCBpPXBhcnNlWEZBUGF0aCh0KTtsZXQgbj1hLmRvY3VtZW50RWxlbWVudC5zZWFyY2hOb2RlKGksMCk7IW4mJmkubGVuZ3RoPjEmJihuPWEuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUoW2kuYXQoLTEpXSwwKSk7bj9uLmNoaWxkTm9kZXM9QXJyYXkuaXNBcnJheShyKT9yLm1hcChlPT5uZXcgU2ltcGxlRE9NTm9kZSgidmFsdWUiLGUpKTpbbmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixyKV06d2FybihgTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICR7dH1gKX1jb25zdCByPVtdO2EuZG9jdW1lbnRFbGVtZW50LmR1bXAocik7cmV0dXJuIHIuam9pbigiIil9KHIuZmV0Y2hJZlJlZih0KS5nZXRTdHJpbmcoKSxhKX1jb25zdCBpPW5ldyBTdHJpbmdTdHJlYW0oZSk7aS5kaWN0PW5ldyBEaWN0KHIpO2kuZGljdC5zZXRJZk5hbWUoIlR5cGUiLCJFbWJlZGRlZEZpbGUiKTthLnB1dCh0LHtkYXRhOml9KX1mdW5jdGlvbiBnZXRJbmRleGVzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0e3JlZjphfW9mIGUpYS5udW09PT10LmF0KC0yKSt0LmF0KC0xKT90W3QubGVuZ3RoLTFdKz0xOnQucHVzaChhLm51bSwxKTtyZXR1cm4gdH1mdW5jdGlvbiBjb21wdXRlSURzKGUsdCxhKXtpZihBcnJheS5pc0FycmF5KHQuZmlsZUlkcykmJnQuZmlsZUlkcy5sZW5ndGg+MCl7Y29uc3Qgcj1mdW5jdGlvbiBjb21wdXRlTUQ1KGUsdCl7Y29uc3QgYT1NYXRoLmZsb29yKERhdGUubm93KCkvMWUzKSxyPXQuZmlsZW5hbWV8fCIiLGk9W2EudG9TdHJpbmcoKSxyLGUudG9TdHJpbmcoKSwuLi50LmluZm9NYXAudmFsdWVzKCldLG49TWF0aC5zdW1QcmVjaXNlKGkubWFwKGU9PmUubGVuZ3RoKSkscz1uZXcgVWludDhBcnJheShuKTtsZXQgbz0wO2Zvcihjb25zdCBlIG9mIGkpbz13cml0ZVN0cmluZyhlLG8scyk7cmV0dXJuIGJ5dGVzVG9TdHJpbmcoY2FsY3VsYXRlTUQ1KHMsMCxzLmxlbmd0aCkpfShlLHQpO2Euc2V0KCJJRCIsW3QuZmlsZUlkc1swXSxyXSl9fWFzeW5jIGZ1bmN0aW9uIGluY3JlbWVudGFsVXBkYXRlKHtvcmlnaW5hbERhdGE6ZSx4cmVmSW5mbzp0LGNoYW5nZXM6YSx4cmVmOnI9bnVsbCxoYXNYZmE6aT0hMSx4ZmFEYXRhc2V0c1JlZjpuPW51bGwsaGFzWGZhRGF0YXNldHNFbnRyeTpzPSExLG5lZWRBcHBlYXJhbmNlczpvLGFjcm9Gb3JtUmVmOmM9bnVsbCxhY3JvRm9ybTpsPW51bGwseGZhRGF0YTpoPW51bGwsdXNlWHJlZlN0cmVhbTp1PSExfSl7YXdhaXQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWNyb2Zvcm0oe3hyZWY6ZSxhY3JvRm9ybTp0LGFjcm9Gb3JtUmVmOmEsaGFzWGZhOnIsaGFzWGZhRGF0YXNldHNFbnRyeTppLHhmYURhdGFzZXRzUmVmOm4sbmVlZEFwcGVhcmFuY2VzOnMsY2hhbmdlczpvfSl7IXJ8fGl8fG58fHdhcm4oIlhGQSAtIENhbm5vdCBzYXZlIGl0Iik7aWYoIXMmJighcnx8IW58fGkpKXJldHVybjtjb25zdCBjPXQuY2xvbmUoKTtpZihyJiYhaSl7Y29uc3QgZT10LmdldCgiWEZBIikuc2xpY2UoKTtlLnNwbGljZSgyLDAsImRhdGFzZXRzIik7ZS5zcGxpY2UoMywwLG4pO2Muc2V0KCJYRkEiLGUpfXMmJmMuc2V0KCJOZWVkQXBwZWFyYW5jZXMiLCEwKTtvLnB1dChhLHtkYXRhOmN9KX0oe3hyZWY6cixhY3JvRm9ybTpsLGFjcm9Gb3JtUmVmOmMsaGFzWGZhOmksaGFzWGZhRGF0YXNldHNFbnRyeTpzLHhmYURhdGFzZXRzUmVmOm4sbmVlZEFwcGVhcmFuY2VzOm8sY2hhbmdlczphfSk7aSYmdXBkYXRlWEZBKHt4ZmFEYXRhOmgseGZhRGF0YXNldHNSZWY6bixjaGFuZ2VzOmEseHJlZjpyfSk7Y29uc3QgZD1mdW5jdGlvbiBnZXRUcmFpbGVyRGljdChlLHQsYSl7Y29uc3Qgcj1uZXcgRGljdChudWxsKTtyLnNldCgiUHJldiIsZS5zdGFydFhSZWYpO2NvbnN0IGk9ZS5uZXdSZWY7aWYoYSl7dC5wdXQoaSx7ZGF0YToiIn0pO3Iuc2V0KCJTaXplIixpLm51bSsxKTtyLnNldElmTmFtZSgiVHlwZSIsIlhSZWYiKX1lbHNlIHIuc2V0KCJTaXplIixpLm51bSk7bnVsbCE9PWUucm9vdFJlZiYmci5zZXQoIlJvb3QiLGUucm9vdFJlZik7bnVsbCE9PWUuaW5mb1JlZiYmci5zZXQoIkluZm8iLGUuaW5mb1JlZik7bnVsbCE9PWUuZW5jcnlwdFJlZiYmci5zZXQoIkVuY3J5cHQiLGUuZW5jcnlwdFJlZik7cmV0dXJuIHJ9KHQsYSx1KSxmPVtdLGc9YXdhaXQgYXN5bmMgZnVuY3Rpb24gd3JpdGVDaGFuZ2VzKGUsdCxhPVtdKXtjb25zdCByPVtdO2Zvcihjb25zdFtpLHtkYXRhOm59XW9mIGUuaXRlbXMoKSlpZihudWxsIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXthd2FpdCB3cml0ZU9iamVjdChpLG4sYSx0KTtyLnB1c2goe3JlZjppLGRhdGE6YS5qb2luKCIiKX0pO2EubGVuZ3RoPTB9ZWxzZSByLnB1c2goe3JlZjppLGRhdGE6bn0pO3JldHVybiByLnNvcnQoKGUsdCk9PmUucmVmLm51bS10LnJlZi5udW0pfShhLHIsZik7bGV0IHA9ZS5sZW5ndGg7Y29uc3QgbT1lLmF0KC0xKTtpZigxMCE9PW0mJjEzIT09bSl7Zi5wdXNoKCJcbiIpO3ArPTF9Zm9yKGNvbnN0e2RhdGE6ZX1vZiBnKW51bGwhPT1lJiZmLnB1c2goZSk7YXdhaXQodT9hc3luYyBmdW5jdGlvbiBnZXRYUmVmU3RyZWFtVGFibGUoZSx0LGEscixpKXtjb25zdCBuPVtdO2xldCBzPTAsbz0wO2Zvcihjb25zdHtyZWY6ZSxkYXRhOnJ9b2YgYSl7bGV0IGE7cz1NYXRoLm1heChzLHQpO2lmKG51bGwhPT1yKXthPU1hdGgubWluKGUuZ2VuLDY1NTM1KTtuLnB1c2goWzEsdCxhXSk7dCs9ci5sZW5ndGh9ZWxzZXthPU1hdGgubWluKGUuZ2VuKzEsNjU1MzUpO24ucHVzaChbMCwwLGFdKX1vPU1hdGgubWF4KG8sYSl9ci5zZXQoIkluZGV4IixnZXRJbmRleGVzKGEpKTtjb25zdCBjPVsxLGdldFNpemVJbkJ5dGVzKHMpLGdldFNpemVJbkJ5dGVzKG8pXTtyLnNldCgiVyIsYyk7Y29tcHV0ZUlEcyh0LGUscik7Y29uc3QgbD1NYXRoLnN1bVByZWNpc2UoYyksaD1uZXcgVWludDhBcnJheShsKm4ubGVuZ3RoKSx1PW5ldyBTdHJlYW0oaCk7dS5kaWN0PXI7bGV0IGQ9MDtmb3IoY29uc3RbZSx0LGFdb2Ygbil7ZD13cml0ZUludChlLGNbMF0sZCxoKTtkPXdyaXRlSW50KHQsY1sxXSxkLGgpO2Q9d3JpdGVJbnQoYSxjWzJdLGQsaCl9YXdhaXQgd3JpdGVPYmplY3QoZS5uZXdSZWYsdSxpLHt9KTtpLnB1c2goInN0YXJ0eHJlZlxuIix0LnRvU3RyaW5nKCksIlxuJSVFT0ZcbiIpfSh0LHAsZyxkLGYpOmFzeW5jIGZ1bmN0aW9uIGdldFhSZWZUYWJsZShlLHQsYSxyLGkpe2kucHVzaCgieHJlZlxuIik7Y29uc3Qgbj1nZXRJbmRleGVzKGEpO2xldCBzPTA7Zm9yKGNvbnN0e3JlZjplLGRhdGE6cn1vZiBhKXtpZihlLm51bT09PW5bc10pe2kucHVzaChgJHtuW3NdfSAke25bcysxXX1cbmApO3MrPTJ9aWYobnVsbCE9PXIpe2kucHVzaChgJHt0LnRvU3RyaW5nKCkucGFkU3RhcnQoMTAsIjAiKX0gJHtNYXRoLm1pbihlLmdlbiw2NTUzNSkudG9TdHJpbmcoKS5wYWRTdGFydCg1LCIwIil9IG5cclxuYCk7dCs9ci5sZW5ndGh9ZWxzZSBpLnB1c2goYDAwMDAwMDAwMDAgJHtNYXRoLm1pbihlLmdlbisxLDY1NTM1KS50b1N0cmluZygpLnBhZFN0YXJ0KDUsIjAiKX0gZlxyXG5gKX1jb21wdXRlSURzKHQsZSxyKTtpLnB1c2goInRyYWlsZXJcbiIpO2F3YWl0IHdyaXRlRGljdChyLGkpO2kucHVzaCgiXG5zdGFydHhyZWZcbiIsdC50b1N0cmluZygpLCJcbiUlRU9GXG4iKX0odCxwLGcsZCxmKSk7Y29uc3QgYj1lLmxlbmd0aCtNYXRoLnN1bVByZWNpc2UoZi5tYXAoZT0+ZS5sZW5ndGgpKSx5PW5ldyBVaW50OEFycmF5KGIpO3kuc2V0KGUpO2xldCB3PWUubGVuZ3RoO2Zvcihjb25zdCBlIG9mIGYpdz13cml0ZVN0cmluZyhlLHcseSk7cmV0dXJuIHl9Y2xhc3MgUERGV29ya2VyU3RyZWFte2NvbnN0cnVjdG9yKGUpe3RoaXMuX21zZ0hhbmRsZXI9ZTt0aGlzLl9jb250ZW50TGVuZ3RoPW51bGw7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbDt0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzPVtdfWdldEZ1bGxSZWFkZXIoKXthc3NlcnQoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZXb3JrZXJTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4iKTt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1uZXcgUERGV29ya2VyU3RyZWFtUmVhZGVyKHRoaXMuX21zZ0hhbmRsZXIpO3JldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn1nZXRSYW5nZVJlYWRlcihlLHQpe2NvbnN0IGE9bmV3IFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVyKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTt0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2goYSk7cmV0dXJuIGF9Y2FuY2VsQWxsUmVxdWVzdHMoZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/LmNhbmNlbChlKTtmb3IoY29uc3QgdCBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKXQuY2FuY2VsKGUpfX1jbGFzcyBQREZXb3JrZXJTdHJlYW1SZWFkZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fbXNnSGFuZGxlcj1lO3RoaXMub25Qcm9ncmVzcz1udWxsO3RoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbDt0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExO3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO2NvbnN0IHQ9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmVhZGVyIik7dGhpcy5fcmVhZGVyPXQuZ2V0UmVhZGVyKCk7dGhpcy5faGVhZGVyc1JlYWR5PXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJSZWFkZXJIZWFkZXJzUmVhZHkiKS50aGVuKGU9Pnt0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD1lLmlzU3RyZWFtaW5nU3VwcG9ydGVkO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ZS5pc1JhbmdlU3VwcG9ydGVkO3RoaXMuX2NvbnRlbnRMZW5ndGg9ZS5jb250ZW50TGVuZ3RofSl9Z2V0IGhlYWRlcnNSZWFkeSgpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9Z2V0IGNvbnRlbnRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH1nZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9Z2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH1hc3luYyByZWFkKCl7Y29uc3R7dmFsdWU6ZSxkb25lOnR9PWF3YWl0IHRoaXMuX3JlYWRlci5yZWFkKCk7cmV0dXJuIHQ/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTp7dmFsdWU6ZS5idWZmZXIsZG9uZTohMX19Y2FuY2VsKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fWNsYXNzIFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLl9tc2dIYW5kbGVyPWE7dGhpcy5vblByb2dyZXNzPW51bGw7Y29uc3Qgcj10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSYW5nZVJlYWRlciIse2JlZ2luOmUsZW5kOnR9KTt0aGlzLl9yZWFkZXI9ci5nZXRSZWFkZXIoKX1nZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4hMX1hc3luYyByZWFkKCl7Y29uc3R7dmFsdWU6ZSxkb25lOnR9PWF3YWl0IHRoaXMuX3JlYWRlci5yZWFkKCk7cmV0dXJuIHQ/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTp7dmFsdWU6ZS5idWZmZXIsZG9uZTohMX19Y2FuY2VsKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fWNsYXNzIFdvcmtlclRhc2t7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lPWU7dGhpcy50ZXJtaW5hdGVkPSExO3RoaXMuX2NhcGFiaWxpdHk9UHJvbWlzZS53aXRoUmVzb2x2ZXJzKCl9Z2V0IGZpbmlzaGVkKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX1maW5pc2goKXt0aGlzLl9jYXBhYmlsaXR5LnJlc29sdmUoKX10ZXJtaW5hdGUoKXt0aGlzLnRlcm1pbmF0ZWQ9ITB9ZW5zdXJlTm90VGVybWluYXRlZCgpe2lmKHRoaXMudGVybWluYXRlZCl0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB0YXNrIHdhcyB0ZXJtaW5hdGVkIil9fWNsYXNzIFdvcmtlck1lc3NhZ2VIYW5kbGVye3N0YXRpY3sidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyYmIWUmJiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYucG9zdE1lc3NhZ2UmJiJvbm1lc3NhZ2UiaW4gc2VsZiYmdGhpcy5pbml0aWFsaXplRnJvbVBvcnQoc2VsZil9c3RhdGljIHNldHVwKGUsdCl7bGV0IGE9ITE7ZS5vbigidGVzdCIsdD0+e2lmKCFhKXthPSEwO2Uuc2VuZCgidGVzdCIsdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpfX0pO2Uub24oImNvbmZpZ3VyZSIsZT0+eyFmdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoUXQ9ZSl9KGUudmVyYm9zaXR5KX0pO2Uub24oIkdldERvY1JlcXVlc3QiLGU9PnRoaXMuY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGUsdCkpfXN0YXRpYyBjcmVhdGVEb2N1bWVudEhhbmRsZXIoZSx0KXtsZXQgYSxyPSExLGk9bnVsbDtjb25zdCBuPW5ldyBTZXQscz1nZXRWZXJib3NpdHlMZXZlbCgpLHtkb2NJZDpvLGFwaVZlcnNpb246Y309ZSxsPSI1LjQuMzk0IjtpZihjIT09bCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBBUEkgdmVyc2lvbiAiJHtjfSIgZG9lcyBub3QgbWF0Y2ggdGhlIFdvcmtlciB2ZXJzaW9uICIke2x9Ii5gKTtjb25zdCBidWlsZE1zZz0oZSx0KT0+YFRoZSBcYCR7ZX0ucHJvdG90eXBlXGAgY29udGFpbnMgdW5leHBlY3RlZCBlbnVtZXJhYmxlIHByb3BlcnR5ICIke3R9IiwgdGh1cyBicmVha2luZyBlLmcuIFxgZm9yLi4uaW5cYCBpdGVyYXRpb24gb2YgJHtlfXMuYDtmb3IoY29uc3QgZSBpbnt9KXRocm93IG5ldyBFcnJvcihidWlsZE1zZygiT2JqZWN0IixlKSk7Zm9yKGNvbnN0IGUgaW5bXSl0aHJvdyBuZXcgRXJyb3IoYnVpbGRNc2coIkFycmF5IixlKSk7Y29uc3QgaD1vKyJfd29ya2VyIjtsZXQgdT1uZXcgTWVzc2FnZUhhbmRsZXIoaCxvLHQpO2Z1bmN0aW9uIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKXtpZihyKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIil9ZnVuY3Rpb24gc3RhcnRXb3JrZXJUYXNrKGUpe24uYWRkKGUpfWZ1bmN0aW9uIGZpbmlzaFdvcmtlclRhc2soZSl7ZS5maW5pc2goKTtuLmRlbGV0ZShlKX1hc3luYyBmdW5jdGlvbiBsb2FkRG9jdW1lbnQoZSl7YXdhaXQgYS5lbnN1cmVEb2MoImNoZWNrSGVhZGVyIik7YXdhaXQgYS5lbnN1cmVEb2MoInBhcnNlU3RhcnRYUmVmIik7YXdhaXQgYS5lbnN1cmVEb2MoInBhcnNlIixbZV0pO2F3YWl0IGEuZW5zdXJlRG9jKCJjaGVja0ZpcnN0UGFnZSIsW2VdKTthd2FpdCBhLmVuc3VyZURvYygiY2hlY2tMYXN0UGFnZSIsW2VdKTtjb25zdCB0PWF3YWl0IGEuZW5zdXJlRG9jKCJpc1B1cmVYZmEiKTtpZih0KXtjb25zdCBlPW5ldyBXb3JrZXJUYXNrKCJsb2FkWGZhUmVzb3VyY2VzIik7c3RhcnRXb3JrZXJUYXNrKGUpO2F3YWl0IGEuZW5zdXJlRG9jKCJsb2FkWGZhUmVzb3VyY2VzIixbdSxlXSk7ZmluaXNoV29ya2VyVGFzayhlKX1jb25zdFtyLGldPWF3YWl0IFByb21pc2UuYWxsKFthLmVuc3VyZURvYygibnVtUGFnZXMiKSxhLmVuc3VyZURvYygiZmluZ2VycHJpbnRzIildKTtyZXR1cm57bnVtUGFnZXM6cixmaW5nZXJwcmludHM6aSxodG1sRm9yWGZhOnQ/YXdhaXQgYS5lbnN1cmVEb2MoImh0bWxGb3JYZmEiKTpudWxsfX1mdW5jdGlvbiBzZXR1cERvYyhlKXtmdW5jdGlvbiBvblN1Y2Nlc3MoZSl7ZW5zdXJlTm90VGVybWluYXRlZCgpO3Uuc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gb25GYWlsdXJlKGUpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtpZihlIGluc3RhbmNlb2YgUGFzc3dvcmRFeGNlcHRpb24pe2NvbnN0IHQ9bmV3IFdvcmtlclRhc2soYFBhc3N3b3JkRXhjZXB0aW9uOiByZXNwb25zZSAke2UuY29kZX1gKTtzdGFydFdvcmtlclRhc2sodCk7dS5zZW5kV2l0aFByb21pc2UoIlBhc3N3b3JkUmVxdWVzdCIsZSkudGhlbihmdW5jdGlvbih7cGFzc3dvcmQ6ZX0pe2ZpbmlzaFdvcmtlclRhc2sodCk7YS51cGRhdGVQYXNzd29yZChlKTtwZGZNYW5hZ2VyUmVhZHkoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayh0KTt1LnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSl9KX1lbHNlIHUuc2VuZCgiRG9jRXhjZXB0aW9uIix3cmFwUmVhc29uKGUpKX1mdW5jdGlvbiBwZGZNYW5hZ2VyUmVhZHkoKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7bG9hZERvY3VtZW50KCExKS50aGVuKG9uU3VjY2VzcyxmdW5jdGlvbihlKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7ZSBpbnN0YW5jZW9mIFhSZWZQYXJzZUV4Y2VwdGlvbj9hLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKGZ1bmN0aW9uKCl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2xvYWREb2N1bWVudCghMCkudGhlbihvblN1Y2Nlc3Msb25GYWlsdXJlKX0pOm9uRmFpbHVyZShlKX0pfWVuc3VyZU5vdFRlcm1pbmF0ZWQoKTsoYXN5bmMgZnVuY3Rpb24gZ2V0UGRmTWFuYWdlcih7ZGF0YTplLHBhc3N3b3JkOnQsZGlzYWJsZUF1dG9GZXRjaDphLHJhbmdlQ2h1bmtTaXplOnIsbGVuZ3RoOm4sZG9jQmFzZVVybDpzLGVuYWJsZVhmYTpjLGV2YWx1YXRvck9wdGlvbnM6bH0pe2NvbnN0IGg9e3NvdXJjZTpudWxsLGRpc2FibGVBdXRvRmV0Y2g6YSxkb2NCYXNlVXJsOnMsZG9jSWQ6byxlbmFibGVYZmE6YyxldmFsdWF0b3JPcHRpb25zOmwsaGFuZGxlcjp1LGxlbmd0aDpuLHBhc3N3b3JkOnQscmFuZ2VDaHVua1NpemU6cn07aWYoZSl7aC5zb3VyY2U9ZTtyZXR1cm4gbmV3IExvY2FsUGRmTWFuYWdlcihoKX1jb25zdCBkPW5ldyBQREZXb3JrZXJTdHJlYW0odSksZj1kLmdldEZ1bGxSZWFkZXIoKSxnPVByb21pc2Uud2l0aFJlc29sdmVycygpO2xldCBwLG09W10sYj0wO2YuaGVhZGVyc1JlYWR5LnRoZW4oZnVuY3Rpb24oKXtpZihmLmlzUmFuZ2VTdXBwb3J0ZWQpe2guc291cmNlPWQ7aC5sZW5ndGg9Zi5jb250ZW50TGVuZ3RoO2guZGlzYWJsZUF1dG9GZXRjaHx8PWYuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7cD1uZXcgTmV0d29ya1BkZk1hbmFnZXIoaCk7Zm9yKGNvbnN0IGUgb2YgbSlwLnNlbmRQcm9ncmVzc2l2ZURhdGEoZSk7bT1bXTtnLnJlc29sdmUocCk7aT1udWxsfX0pLmNhdGNoKGZ1bmN0aW9uKGUpe2cucmVqZWN0KGUpO2k9bnVsbH0pO25ldyBQcm9taXNlKGZ1bmN0aW9uKGUsdCl7Y29uc3QgcmVhZENodW5rPWZ1bmN0aW9uKHt2YWx1ZTplLGRvbmU6YX0pe3RyeXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7aWYoYSl7aWYoIXApe2NvbnN0IGU9YXJyYXlCdWZmZXJzVG9CeXRlcyhtKTttPVtdO24mJmUubGVuZ3RoIT09biYmd2FybigicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsIik7aC5zb3VyY2U9ZTtwPW5ldyBMb2NhbFBkZk1hbmFnZXIoaCk7Zy5yZXNvbHZlKHApfWk9bnVsbDtyZXR1cm59Yis9ZS5ieXRlTGVuZ3RoO2YuaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fHUuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6Yix0b3RhbDpNYXRoLm1heChiLGYuY29udGVudExlbmd0aHx8MCl9KTtwP3Auc2VuZFByb2dyZXNzaXZlRGF0YShlKTptLnB1c2goZSk7Zi5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9Y2F0Y2goZSl7dChlKX19O2YucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpfSkuY2F0Y2goZnVuY3Rpb24oZSl7Zy5yZWplY3QoZSk7aT1udWxsfSk7aT1lPT57ZC5jYW5jZWxBbGxSZXF1ZXN0cyhlKX07cmV0dXJuIGcucHJvbWlzZX0pKGUpLnRoZW4oZnVuY3Rpb24oZSl7aWYocil7ZS50ZXJtaW5hdGUobmV3IEFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO3Rocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIil9YT1lO2EucmVxdWVzdExvYWRlZFN0cmVhbSghMCkudGhlbihlPT57dS5zZW5kKCJEYXRhTG9hZGVkIix7bGVuZ3RoOmUuYnl0ZXMuYnl0ZUxlbmd0aH0pfSl9KS50aGVuKHBkZk1hbmFnZXJSZWFkeSxvbkZhaWx1cmUpfXUub24oIkdldFBhZ2UiLGZ1bmN0aW9uKGUpe3JldHVybiBhLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKFthLmVuc3VyZShlLCJyb3RhdGUiKSxhLmVuc3VyZShlLCJyZWYiKSxhLmVuc3VyZShlLCJ1c2VyVW5pdCIpLGEuZW5zdXJlKGUsInZpZXciKV0pLnRoZW4oZnVuY3Rpb24oW2UsdCxhLHJdKXtyZXR1cm57cm90YXRlOmUscmVmOnQscmVmU3RyOnQ/LnRvU3RyaW5nKCk/P251bGwsdXNlclVuaXQ6YSx2aWV3OnJ9fSl9KX0pO3Uub24oIkdldFBhZ2VJbmRleCIsZnVuY3Rpb24oZSl7Y29uc3QgdD1SZWYuZ2V0KGUubnVtLGUuZ2VuKTtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJnZXRQYWdlSW5kZXgiLFt0XSl9KTt1Lm9uKCJHZXREZXN0aW5hdGlvbnMiLGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coImRlc3RpbmF0aW9ucyIpfSk7dS5vbigiR2V0RGVzdGluYXRpb24iLGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coImdldERlc3RpbmF0aW9uIixbZS5pZF0pfSk7dS5vbigiR2V0UGFnZUxhYmVscyIsZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygicGFnZUxhYmVscyIpfSk7dS5vbigiR2V0UGFnZUxheW91dCIsZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygicGFnZUxheW91dCIpfSk7dS5vbigiR2V0UGFnZU1vZGUiLGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KTt1Lm9uKCJHZXRWaWV3ZXJQcmVmZXJlbmNlcyIsZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygidmlld2VyUHJlZmVyZW5jZXMiKX0pO3Uub24oIkdldE9wZW5BY3Rpb24iLGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coIm9wZW5BY3Rpb24iKX0pO3Uub24oIkdldEF0dGFjaG1lbnRzIixmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSk7dS5vbigiR2V0RG9jSlNBY3Rpb25zIixmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKX0pO3Uub24oIkdldFBhZ2VKU0FjdGlvbnMiLGZ1bmN0aW9uKHtwYWdlSW5kZXg6ZX0pe3JldHVybiBhLmdldFBhZ2UoZSkudGhlbihlPT5hLmVuc3VyZShlLCJqc0FjdGlvbnMiKSl9KTt1Lm9uKCJHZXRBbm5vdGF0aW9uc0J5VHlwZSIsYXN5bmMgZnVuY3Rpb24oe3R5cGVzOmUscGFnZUluZGV4ZXNUb1NraXA6dH0pe2NvbnN0W3IsaV09YXdhaXQgUHJvbWlzZS5hbGwoW2EuZW5zdXJlRG9jKCJudW1QYWdlcyIpLGEuZW5zdXJlRG9jKCJhbm5vdGF0aW9uR2xvYmFscyIpXSk7aWYoIWkpcmV0dXJuIG51bGw7Y29uc3Qgbj1bXSxzPVtdO2xldCBvPW51bGw7dHJ5e2ZvcihsZXQgYz0wLGw9cjtjPGw7YysrKWlmKCF0Py5oYXMoYykpe2lmKCFvKXtvPW5ldyBXb3JrZXJUYXNrKCJHZXRBbm5vdGF0aW9uc0J5VHlwZSIpO3N0YXJ0V29ya2VyVGFzayhvKX1uLnB1c2goYS5nZXRQYWdlKGMpLnRoZW4oYXN5bmMgdD0+dCYmdC5jb2xsZWN0QW5ub3RhdGlvbnNCeVR5cGUodSxvLGUscyxpKXx8W10pKX1hd2FpdCBQcm9taXNlLmFsbChuKTtyZXR1cm4oYXdhaXQgUHJvbWlzZS5hbGwocykpLmZpbHRlcihlPT4hIWUpfWZpbmFsbHl7byYmZmluaXNoV29ya2VyVGFzayhvKX19KTt1Lm9uKCJHZXRPdXRsaW5lIixmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJkb2N1bWVudE91dGxpbmUiKX0pO3Uub24oIkdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygib3B0aW9uYWxDb250ZW50Q29uZmlnIil9KTt1Lm9uKCJHZXRQZXJtaXNzaW9ucyIsZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygicGVybWlzc2lvbnMiKX0pO3Uub24oIkdldE1ldGFkYXRhIixmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxhLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pO3Uub24oIkdldE1hcmtJbmZvIixmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJtYXJrSW5mbyIpfSk7dS5vbigiR2V0RGF0YSIsZnVuY3Rpb24oZSl7cmV0dXJuIGEucmVxdWVzdExvYWRlZFN0cmVhbSgpLnRoZW4oZT0+ZS5ieXRlcyl9KTt1Lm9uKCJHZXRBbm5vdGF0aW9ucyIsZnVuY3Rpb24oe3BhZ2VJbmRleDplLGludGVudDp0fSl7cmV0dXJuIGEuZ2V0UGFnZShlKS50aGVuKGZ1bmN0aW9uKGEpe2NvbnN0IHI9bmV3IFdvcmtlclRhc2soYEdldEFubm90YXRpb25zOiBwYWdlICR7ZX1gKTtzdGFydFdvcmtlclRhc2socik7cmV0dXJuIGEuZ2V0QW5ub3RhdGlvbnNEYXRhKHUscix0KS50aGVuKGU9PntmaW5pc2hXb3JrZXJUYXNrKHIpO3JldHVybiBlfSxlPT57ZmluaXNoV29ya2VyVGFzayhyKTt0aHJvdyBlfSl9KX0pO3Uub24oIkdldEZpZWxkT2JqZWN0cyIsZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKS50aGVuKGU9PmU/LmFsbEZpZWxkc3x8bnVsbCl9KTt1Lm9uKCJIYXNKU0FjdGlvbnMiLGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZURvYygiaGFzSlNBY3Rpb25zIil9KTt1Lm9uKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIixmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVEb2MoImNhbGN1bGF0aW9uT3JkZXJJZHMiKX0pO3Uub24oIlNhdmVEb2N1bWVudCIsYXN5bmMgZnVuY3Rpb24oe2lzUHVyZVhmYTplLG51bVBhZ2VzOnQsYW5ub3RhdGlvblN0b3JhZ2U6cixmaWxlbmFtZTppfSl7Y29uc3Qgbj1bYS5yZXF1ZXN0TG9hZGVkU3RyZWFtKCksYS5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpLGEuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm1SZWYiKSxhLmVuc3VyZURvYygic3RhcnRYUmVmIiksYS5lbnN1cmVEb2MoInhyZWYiKSxhLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290IildLHM9bmV3IFJlZlNldENhY2hlLG89W10sYz1lP251bGw6Z2V0TmV3QW5ub3RhdGlvbnNNYXAociksW2wsaCxkLGYsZyxwXT1hd2FpdCBQcm9taXNlLmFsbChuKSxtPWcudHJhaWxlci5nZXRSYXcoIlJvb3QiKXx8bnVsbDtsZXQgYjtpZihjKXtwP2F3YWl0IHAuY2FuVXBkYXRlU3RydWN0VHJlZSh7cGRmTWFuYWdlcjphLG5ld0Fubm90YXRpb25zQnlQYWdlOmN9KSYmKGI9cCk6YXdhaXQgU3RydWN0VHJlZVJvb3QuY2FuQ3JlYXRlU3RydWN0dXJlVHJlZSh7Y2F0YWxvZ1JlZjptLHBkZk1hbmFnZXI6YSxuZXdBbm5vdGF0aW9uc0J5UGFnZTpjfSkmJihiPW51bGwpO2NvbnN0IGU9QW5ub3RhdGlvbkZhY3RvcnkuZ2VuZXJhdGVJbWFnZXMoci52YWx1ZXMoKSxnLGEuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCksdD12b2lkIDA9PT1iP286W107Zm9yKGNvbnN0W3IsaV1vZiBjKXQucHVzaChhLmdldFBhZ2UocikudGhlbih0PT57Y29uc3QgYT1uZXcgV29ya2VyVGFzayhgU2F2ZSAoZWRpdG9yKTogcGFnZSAke3J9YCk7c3RhcnRXb3JrZXJUYXNrKGEpO3JldHVybiB0LnNhdmVOZXdBbm5vdGF0aW9ucyh1LGEsaSxlLHMpLmZpbmFsbHkoZnVuY3Rpb24oKXtmaW5pc2hXb3JrZXJUYXNrKGEpfSl9KSk7bnVsbD09PWI/by5wdXNoKFByb21pc2UuYWxsKHQpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IFN0cnVjdFRyZWVSb290LmNyZWF0ZVN0cnVjdHVyZVRyZWUoe25ld0Fubm90YXRpb25zQnlQYWdlOmMseHJlZjpnLGNhdGFsb2dSZWY6bSxwZGZNYW5hZ2VyOmEsY2hhbmdlczpzfSl9KSk6YiYmby5wdXNoKFByb21pc2UuYWxsKHQpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IGIudXBkYXRlU3RydWN0dXJlVHJlZSh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6YyxwZGZNYW5hZ2VyOmEsY2hhbmdlczpzfSl9KSl9aWYoZSlvLnB1c2goYS5lbnN1cmVEb2MoInNlcmlhbGl6ZVhmYURhdGEiLFtyXSkpO2Vsc2UgZm9yKGxldCBlPTA7ZTx0O2UrKylvLnB1c2goYS5nZXRQYWdlKGUpLnRoZW4oZnVuY3Rpb24odCl7Y29uc3QgYT1uZXcgV29ya2VyVGFzayhgU2F2ZTogcGFnZSAke2V9YCk7c3RhcnRXb3JrZXJUYXNrKGEpO3JldHVybiB0LnNhdmUodSxhLHIscykuZmluYWxseShmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2soYSl9KX0pKTtjb25zdCB5PWF3YWl0IFByb21pc2UuYWxsKG8pO2xldCB3PW51bGw7aWYoZSl7dz15WzBdO2lmKCF3KXJldHVybiBsLmJ5dGVzfWVsc2UgaWYoMD09PXMuc2l6ZSlyZXR1cm4gbC5ieXRlcztjb25zdCB4PWQmJmggaW5zdGFuY2VvZiBEaWN0JiZzLnZhbHVlcygpLnNvbWUoZT0+ZS5uZWVkQXBwZWFyYW5jZXMpLFM9aCBpbnN0YW5jZW9mIERpY3QmJmguZ2V0KCJYRkEiKXx8bnVsbDtsZXQgaz1udWxsLEM9ITE7aWYoQXJyYXkuaXNBcnJheShTKSl7Zm9yKGxldCBlPTAsdD1TLmxlbmd0aDtlPHQ7ZSs9MilpZigiZGF0YXNldHMiPT09U1tlXSl7az1TW2UrMV07Qz0hMH1udWxsPT09ayYmKGs9Zy5nZXROZXdUZW1wb3JhcnlSZWYoKSl9ZWxzZSBTJiZ3YXJuKCJVbnN1cHBvcnRlZCBYRkEgdHlwZS4iKTtsZXQgdj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGcudHJhaWxlcil7Y29uc3QgZT1uZXcgTWFwLHQ9Zy50cmFpbGVyLmdldCgiSW5mbyIpfHxudWxsO2lmKHQgaW5zdGFuY2VvZiBEaWN0KWZvcihjb25zdFthLHJdb2YgdCkic3RyaW5nIj09dHlwZW9mIHImJmUuc2V0KGEsc3RyaW5nVG9QREZTdHJpbmcocikpO3Y9e3Jvb3RSZWY6bSxlbmNyeXB0UmVmOmcudHJhaWxlci5nZXRSYXcoIkVuY3J5cHQiKXx8bnVsbCxuZXdSZWY6Zy5nZXROZXdUZW1wb3JhcnlSZWYoKSxpbmZvUmVmOmcudHJhaWxlci5nZXRSYXcoIkluZm8iKXx8bnVsbCxpbmZvTWFwOmUsZmlsZUlkczpnLnRyYWlsZXIuZ2V0KCJJRCIpfHxudWxsLHN0YXJ0WFJlZjpmLGZpbGVuYW1lOml9fXJldHVybiBpbmNyZW1lbnRhbFVwZGF0ZSh7b3JpZ2luYWxEYXRhOmwuYnl0ZXMseHJlZkluZm86dixjaGFuZ2VzOnMseHJlZjpnLGhhc1hmYTohIVMseGZhRGF0YXNldHNSZWY6ayxoYXNYZmFEYXRhc2V0c0VudHJ5OkMsbmVlZEFwcGVhcmFuY2VzOngsYWNyb0Zvcm1SZWY6ZCxhY3JvRm9ybTpoLHhmYURhdGE6dyx1c2VYcmVmU3RyZWFtOmlzRGljdChnLnRvcERpY3QsIlhSZWYiKX0pLmZpbmFsbHkoKCk9PntnLnJlc2V0TmV3VGVtcG9yYXJ5UmVmKCl9KX0pO3Uub24oIkdldE9wZXJhdG9yTGlzdCIsZnVuY3Rpb24oZSx0KXtjb25zdCByPWUucGFnZUluZGV4O2EuZ2V0UGFnZShyKS50aGVuKGZ1bmN0aW9uKGEpe2NvbnN0IGk9bmV3IFdvcmtlclRhc2soYEdldE9wZXJhdG9yTGlzdDogcGFnZSAke3J9YCk7c3RhcnRXb3JrZXJUYXNrKGkpO2NvbnN0IG49cz49Y2U/RGF0ZS5ub3coKTowO2EuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOnUsc2luazp0LHRhc2s6aSxpbnRlbnQ6ZS5pbnRlbnQsY2FjaGVLZXk6ZS5jYWNoZUtleSxhbm5vdGF0aW9uU3RvcmFnZTplLmFubm90YXRpb25TdG9yYWdlLG1vZGlmaWVkSWRzOmUubW9kaWZpZWRJZHN9KS50aGVuKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soaSk7biYmaW5mbyhgcGFnZT0ke3IrMX0gLSBnZXRPcGVyYXRvckxpc3Q6IHRpbWU9JHtEYXRlLm5vdygpLW59bXMsIGxlbj0ke2UubGVuZ3RofWApO3QuY2xvc2UoKX0sZnVuY3Rpb24oZSl7ZmluaXNoV29ya2VyVGFzayhpKTtpLnRlcm1pbmF0ZWR8fHQuZXJyb3IoZSl9KX0pfSk7dS5vbigiR2V0VGV4dENvbnRlbnQiLGZ1bmN0aW9uKGUsdCl7Y29uc3R7cGFnZUluZGV4OnIsaW5jbHVkZU1hcmtlZENvbnRlbnQ6aSxkaXNhYmxlTm9ybWFsaXphdGlvbjpufT1lO2EuZ2V0UGFnZShyKS50aGVuKGZ1bmN0aW9uKGUpe2NvbnN0IGE9bmV3IFdvcmtlclRhc2soIkdldFRleHRDb250ZW50OiBwYWdlICIrcik7c3RhcnRXb3JrZXJUYXNrKGEpO2NvbnN0IG89cz49Y2U/RGF0ZS5ub3coKTowO2UuZXh0cmFjdFRleHRDb250ZW50KHtoYW5kbGVyOnUsdGFzazphLHNpbms6dCxpbmNsdWRlTWFya2VkQ29udGVudDppLGRpc2FibGVOb3JtYWxpemF0aW9uOm59KS50aGVuKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayhhKTtvJiZpbmZvKGBwYWdlPSR7cisxfSAtIGdldFRleHRDb250ZW50OiB0aW1lPWArKERhdGUubm93KCktbykrIm1zIik7dC5jbG9zZSgpfSxmdW5jdGlvbihlKXtmaW5pc2hXb3JrZXJUYXNrKGEpO2EudGVybWluYXRlZHx8dC5lcnJvcihlKX0pfSl9KTt1Lm9uKCJHZXRTdHJ1Y3RUcmVlIixmdW5jdGlvbihlKXtyZXR1cm4gYS5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKGU9PmEuZW5zdXJlKGUsImdldFN0cnVjdFRyZWUiKSl9KTt1Lm9uKCJGb250RmFsbGJhY2siLGZ1bmN0aW9uKGUpe3JldHVybiBhLmZvbnRGYWxsYmFjayhlLmlkLHUpfSk7dS5vbigiQ2xlYW51cCIsZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2xlYW51cCghMCl9KTt1Lm9uKCJUZXJtaW5hdGUiLGZ1bmN0aW9uKGUpe3I9ITA7Y29uc3QgdD1bXTtpZihhKXthLnRlcm1pbmF0ZShuZXcgQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7Y29uc3QgZT1hLmNsZWFudXAoKTt0LnB1c2goZSk7YT1udWxsfWVsc2UgY2xlYXJHbG9iYWxDYWNoZXMoKTtpPy4obmV3IEFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO2Zvcihjb25zdCBlIG9mIG4pe3QucHVzaChlLmZpbmlzaGVkKTtlLnRlcm1pbmF0ZSgpfXJldHVybiBQcm9taXNlLmFsbCh0KS50aGVuKGZ1bmN0aW9uKCl7dS5kZXN0cm95KCk7dT1udWxsfSl9KTt1Lm9uKCJSZWFkeSIsZnVuY3Rpb24odCl7c2V0dXBEb2MoZSk7ZT1udWxsfSk7cmV0dXJuIGh9c3RhdGljIGluaXRpYWxpemVGcm9tUG9ydChlKXtjb25zdCB0PW5ldyBNZXNzYWdlSGFuZGxlcigid29ya2VyIiwibWFpbiIsZSk7dGhpcy5zZXR1cCh0LGUpO3Quc2VuZCgicmVhZHkiLG51bGwpfX1nbG9iYWxUaGlzLnBkZmpzV29ya2VyPXtXb3JrZXJNZXNzYWdlSGFuZGxlcn07ZXhwb3J0e1dvcmtlck1lc3NhZ2VIYW5kbGVyfTs=",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:ZZ&&ZZ.tagName.toUpperCase()==="SCRIPT"&&ZZ.src||new URL("pdf-editor.umd.cjs",document.baseURI).href).toString();const Dd=6,Hl=8,Ud=8,Od=({fileUrl:l,onSave:Z,shouldExport:d,onExportComplete:W})=>{const c=V.useRef(null),G=V.useRef(new Map),M=V.useRef(new Map),i=V.useRef(!1),[L,w]=V.useState(null),[x,O]=V.useState([]),[E,D]=V.useState(!0),[p,o]=V.useState(null),[m,Y]=V.useState("none"),[j,F]=V.useState(1),[N,U]=V.useState(0),[h,k]=V.useState("1"),[t,R]=V.useState(null),[C,B]=V.useState(null),J=V.useRef(null),Q=V.useRef(null),H=V.useRef(!1),[e,dl]=V.useState("#000000"),[A,f]=V.useState(3),[cl,ml]=V.useState("#FFFF00"),[I,P]=V.useState(2),[r,$]=V.useState("#000000"),[Nl,ul]=V.useState(20),[ll,Yl]=V.useState("rectangle"),[Xl,al]=V.useState("#1f2937"),[Rl,yZ]=V.useState("#fde68a"),[zl,Pl]=V.useState(3),[Bl,fZ]=V.useState(0),[TZ,Fd]=V.useState(0),[Il,Ml]=V.useState(null),[_,tl]=V.useState(null),il=V.useRef(null),sl=1.5,Sl=()=>`${Date.now()}-${Math.random().toString(36).substr(2,9)}`,el=(b,X,S,u,T,s)=>b>=S&&b<=S+T&&X>=u&&X<=u+s,kd=(b,X,S,u,T)=>{const s=b-S,y=X-u;return s*s+y*y<=T*T},Wl=td({annotations:x,setAnnotations:O,highlightColor:cl,highlightStrokeWidth:I,generateId:Sl,pointInRect:el}),{currentPenPath:Cd,isDrawing:xl,startPenDraw:od,addPenPoint:Kd,finishPenDraw:rZ,cancelPenDraw:gd,clearCurrentPenPath:qZ,drawPenAnnotations:Ed,drawLivePenPath:Qd,exportPenToPdf:Hd}=Sd({setAnnotations:O,penColor:e,penStrokeWidth:A,generateId:Sl}),{activeTextInput:vl,textInput:Pd,setTextInput:Bd,textInputRef:ed,draggedTextId:Al,findTextAtPoint:Cl,startTextInput:vd,startTextEdit:Ad,cancelTextInput:fd,handleTextInputKeyDown:rd,handleTextInputBlur:qd,startTextDrag:_d,updateTextDrag:$d,finishTextDrag:_Z,drawTextAnnotations:$Z,exportTextToPdf:lb}=xd({annotations:x,setAnnotations:O,textColor:r,generateId:Sl,containerRef:c}),{selectedImage:VZ,imageInputRef:Zb,findImageAtPoint:fl,handleImageUpload:cb,triggerImageSelect:lc,createImageAnnotation:db,drawImageAnnotations:bb,exportImageToPdf:Wb}=wd({annotations:x,setAnnotations:O,generateId:Sl,pointInRect:el,setError:o}),{eraserPath:mb,isErasing:rl,startErasing:Gb,addEraserPoint:Xb,finishErasing:Nb,cancelErasing:Zc,drawEraserPreview:Yb}=jd({setAnnotations:O,eraserWidth:Nl,pointInCircle:kd,pointInRect:el}),{savedSignature:wl,showSignatureModal:Mb,showSignatureSelectionModal:yb,setShowSignatureModal:Tb,setShowSignatureSelectionModal:Vb,findSignatureAtPoint:hZ,saveSignature:hb,deleteSignature:sb,showSignatureSelection:Lb,useSavedSignature:ub,createNewSignature:zb,createSignatureAnnotation:Ib,drawSignatureAnnotations:ib,exportSignatureToPdf:pb}=Jd({annotations:x,setAnnotations:O,generateId:Sl,pointInRect:el,viewportScale:sl}),{searchQuery:ab,searchResults:sZ,currentSearchIndex:LZ,isSearching:Rb,handleSearchInputChange:tb,handleSearchKeyDown:Sb,navigateSearchResult:cc,clearSearch:xb}=nd({pdfDoc:L,viewportScale:sl,containerRef:c}),Ll=b=>{const X=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(b);return X?{r:parseInt(X[1],16)/255,g:parseInt(X[2],16)/255,b:parseInt(X[3],16)/255}:{r:1,g:1,b:0}},jl=b=>b.type==="shape"&&!!b.shapeType,Vl=b=>jl(b)&&(b.shapeType==="line"||b.shapeType==="arrow"),wb=b=>jl(b)&&!Vl(b),dc=b=>{if(Vl(b)&&b.points&&b.points.length>=2){const X=b.points.map(a=>a.x),S=b.points.map(a=>a.y),u=Math.min(...X),T=Math.min(...S),s=Math.max(...X),y=Math.max(...S);return{x:u,y:T,width:s-u,height:y-T}}return{x:b.x??0,y:b.y??0,width:b.width??0,height:b.height??0}},uZ=b=>{const X=dc(b);return{x:X.x+X.width/2,y:X.y+X.height/2}},jb=(b,X)=>{const S=X*Math.PI/180;return{x:b.x*Math.cos(S)-b.y*Math.sin(S),y:b.x*Math.sin(S)+b.y*Math.cos(S)}},Jb=(b,X,S)=>{const u=-S*Math.PI/180,T=b.x-X.x,s=b.y-X.y;return{x:T*Math.cos(u)-s*Math.sin(u),y:T*Math.sin(u)+s*Math.cos(u)}},nb=(b,X,S)=>{const u=jb(b,S);return{x:X.x+u.x,y:X.y+u.y}},Db=b=>{if(!wb(b))return[];const X=b.rotation??0,S=uZ(b),u=b.width??0,T=b.height??0,s=u/2,y=T/2,a=[],n={"top-left":{x:-s,y:-y},top:{x:0,y:-y},"top-right":{x:s,y:-y},right:{x:s,y:0},"bottom-right":{x:s,y},bottom:{x:0,y},"bottom-left":{x:-s,y},left:{x:-s,y:0}};return Object.keys(n).forEach(K=>{const g=nb(n[K],S,X);a.push({handle:K,x:g.x,y:g.y})}),a},Ub=b=>!Vl(b)||!b.points||b.points.length<2?[]:[{handle:"line-start",x:b.points[0].x,y:b.points[0].y},{handle:"line-end",x:b.points[b.points.length-1].x,y:b.points[b.points.length-1].y}],Ob=b=>Vl(b)?Ub(b):Db(b),Fb=(b,X,S,u,T)=>{const s=u.x-S.x,y=u.y-S.y,a=s*s+y*y;if(a===0)return Math.hypot(b-S.x,X-S.y)<=T;const n=Math.max(0,Math.min(1,((b-S.x)*s+(X-S.y)*y)/a)),K=S.x+n*s,g=S.y+n*y;return Math.hypot(b-K,X-g)<=T},ql=(b,X=1)=>{const{r:S,g:u,b:T}=Ll(b);return`rgba(${Math.round(S*255)}, ${Math.round(u*255)}, ${Math.round(T*255)}, ${X})`},kb=(b,X,S)=>{if(!jl(X))return;const u=X.strokeColor||Xl,T=X.strokeWidth||zl,s=X.rotation??0;if(b.save(),S.isDragged&&(b.shadowColor="rgba(37, 99, 235, 0.45)",b.shadowBlur=8),Vl(X)){if(X.points&&X.points.length>=2){b.strokeStyle=ql(u,.95),b.lineWidth=T,b.lineCap="round",b.lineJoin="round",b.beginPath(),b.moveTo(X.points[0].x,X.points[0].y);for(let y=1;y<X.points.length;y++)b.lineTo(X.points[y].x,X.points[y].y);if(b.stroke(),X.shapeType==="arrow"){const y=X.points[X.points.length-2],a=X.points[X.points.length-1],n=Math.atan2(a.y-y.y,a.x-y.x),K=Math.max(12,T*3);b.beginPath(),b.moveTo(a.x,a.y),b.lineTo(a.x-K*Math.cos(n-Math.PI/6),a.y-K*Math.sin(n-Math.PI/6)),b.moveTo(a.x,a.y),b.lineTo(a.x-K*Math.cos(n+Math.PI/6),a.y-K*Math.sin(n+Math.PI/6)),b.stroke()}}}else{if(X.x===void 0||X.y===void 0||!X.width||!X.height){b.restore();return}const y=uZ(X);if(b.translate(y.x,y.y),b.rotate(s*Math.PI/180),b.translate(-y.x,-y.y),X.shapeType==="rectangle")b.strokeStyle=ql(u,.95),b.lineWidth=T,b.strokeRect(X.x,X.y,X.width,X.height);else if(X.shapeType==="ellipse"||X.shapeType==="circle"){const a=X.shapeType==="circle"?Math.min(X.width,X.height)/2:(X.width??0)/2,n=X.shapeType==="circle"?a:(X.height??0)/2,K=X.x+(X.width??0)/2,g=X.y+(X.height??0)/2;b.beginPath(),b.ellipse(K,g,a,n,0,0,Math.PI*2),b.strokeStyle=ql(u,.95),b.lineWidth=T,b.stroke()}}if(S.isSelected){b.shadowColor="transparent",b.lineWidth=1,b.strokeStyle="rgba(37, 99, 235, 0.9)",b.setLineDash([4,3]);const y=dc(X);b.strokeRect(y.x-4,y.y-4,y.width+8,y.height+8),Ob(X).forEach(n=>{b.fillStyle="white",b.strokeStyle="rgba(37, 99, 235, 0.95)",b.lineWidth=1,b.beginPath(),b.rect(n.x-Hl/2,n.y-Hl/2,Hl,Hl),b.fill(),b.stroke()})}b.restore()},Cb=(b,X)=>{if(!X)return;const S=X.currentX-X.startX,u=X.currentY-X.startY,T=Math.abs(S),s=Math.abs(u),y=S>=0?X.startX:X.currentX,a=u>=0?X.startY:X.currentY;if(b.save(),b.strokeStyle=ql(X.settings.strokeColor,.9),b.lineWidth=X.settings.strokeWidth,b.setLineDash([6,4]),X.settings.type==="arrow"||X.settings.type==="line"){b.beginPath(),b.moveTo(X.startX,X.startY),b.lineTo(X.currentX,X.currentY),b.stroke(),b.restore();return}if(X.settings.type==="circle"){const n=Math.max(T,s),K=(X.startX+X.currentX)/2,g=(X.startY+X.currentY)/2;b.beginPath(),b.ellipse(K,g,n/2,n/2,0,0,Math.PI*2),b.stroke(),b.restore();return}if(X.settings.type==="ellipse"){const n=(X.startX+X.currentX)/2,K=(X.startY+X.currentY)/2;b.beginPath(),b.ellipse(n,K,T/2,s/2,0,0,Math.PI*2),b.stroke(),b.restore();return}b.strokeRect(y,a,T,s),b.restore()},bc=(b,X,S)=>{const u=x.filter(T=>T.page===S&&T.type==="shape");for(const T of u){if(!jl(T))continue;if(Vl(T)&&T.points&&T.points.length>=2){const g=T.points[0],v=T.points[T.points.length-1];if(Fb(b,X,g,v,Ud))return T;continue}if(T.x===void 0||T.y===void 0||!T.width||!T.height)continue;const s=T.rotation??0,y=uZ(T),a=Jb({x:b,y:X},y,s),n=(T.width??0)/2,K=(T.height??0)/2;if(T.shapeType==="ellipse"){if(a.x*a.x/(n?n*n:1)+a.y*a.y/(K?K*K:1)<=1)return T}else if(T.shapeType==="circle"){const g=n;if(a.x*a.x+a.y*a.y<=g*g)return T}else if(Math.abs(a.x)<=n&&Math.abs(a.y)<=K)return T}return null},_l=Wl.findHighlightAtPoint,$l=(b,X,S)=>{const u=x.filter(s=>s.page===S&&s.type==="pen"&&s.points&&s.points.length>0),T=10;for(const s of u)if(s.points)for(let y=0;y<s.points.length-1;y++){const a=s.points[y],n=s.points[y+1],K=n.x-a.x,g=n.y-a.y,v=Math.sqrt(K*K+g*g);if(v===0){if(Math.sqrt((b-a.x)**2+(X-a.y)**2)<=T)return s}else{const Zl=Math.max(0,Math.min(1,((b-a.x)*K+(X-a.y)*g)/(v*v))),q=a.x+Zl*K,Gl=a.y+Zl*g;if(Math.sqrt((b-q)**2+(X-Gl)**2)<=T)return s}}return null};V.useEffect(()=>{l&&(async()=>{try{D(!0);const S=await iZ.getDocument(l).promise;w(S),U(S.numPages),F(1),k("1")}catch(X){console.error("Error loading PDF:",X),o("Failed to load PDF")}finally{D(!1)}})()},[l]),V.useEffect(()=>{(async()=>{if(!(!L||!c.current)&&!i.current){i.current=!0;try{const X=c.current,S=X.querySelectorAll("canvas");if(S.length===L.numPages){Array.from(S).forEach(u=>{u.style.display="block"}),yl(!1);return}G.current.forEach(u=>{if(u&&u.cancel){u.promise.catch(T=>{T?.name!=="RenderingCancelledException"&&console.warn("Render task error:",T)});try{u.cancel()}catch{}}}),G.current.clear(),M.current.clear(),X.innerHTML="";for(let u=1;u<=L.numPages;u++)try{const T=await L.getPage(u),s=T.getViewport({scale:sl}),y=document.createElement("canvas"),a=y.getContext("2d");if(!a)continue;y.width=s.width,y.height=s.height,y.style.display="block",y.style.margin="0 auto 10px auto",y.style.border="1px solid #ddd",y.dataset.page=String(u),X.appendChild(y);const n=T.render({canvasContext:a,viewport:s});G.current.set(u,n),n.promise.catch(K=>{K?.name!=="RenderingCancelledException"&&console.error(`Error rendering page ${u}:`,K)});try{await n.promise;const K=a.getImageData(0,0,y.width,y.height);M.current.set(u,K)}catch(K){K?.name!=="RenderingCancelledException"&&console.error(`Error rendering page ${u}:`,K)}}catch(T){console.error(`Error processing page ${u}:`,T)}yl(!1)}finally{i.current=!1}}})()},[L]),V.useEffect(()=>{if(!c.current)return;const b=c.current.querySelectorAll("canvas");Array.from(b).forEach(S=>{S.style.display="block"});const X=Array.from(b).find(S=>Number(S.dataset.page)===j);if(X&&c.current){const S=c.current.getBoundingClientRect(),u=X.getBoundingClientRect(),T=c.current.scrollTop,s=u.top-S.top+T-c.current.clientHeight/2+u.height/2;c.current.scrollTo({top:Math.max(0,s),behavior:"smooth"})}yl(!1),k(String(j))},[j]),V.useEffect(()=>{const b=X=>{X.target instanceof HTMLInputElement||X.target instanceof HTMLTextAreaElement||(X.key==="ArrowLeft"||X.key==="PageUp"?(X.preventDefault(),F(S=>Math.max(1,S-1))):(X.key==="ArrowRight"||X.key==="PageDown")&&(X.preventDefault(),F(S=>Math.min(N,S+1))))};return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[N]);const yl=(b=!1)=>{if(!c.current||!L)return;const X=c.current.querySelectorAll("canvas");Array.from(X).forEach(S=>{const u=S.getContext("2d"),T=Number(S.dataset.page);if(!u)return;const s=G.current.get(T);if(s&&s.cancel){s.promise.catch(n=>{n?.name!=="RenderingCancelledException"&&console.warn(`Render task error for page ${T}:`,n)});try{s.cancel()}catch{}G.current.delete(T)}const y=M.current.get(T);if(y)u.putImageData(y,0,0);else return;const a=x.filter(n=>n.page===T);Wl.drawHighlights(u,T,a,t,Ll),$Z(u,T,a),Ed(u,T,a,t,Ll),m==="pen"&&Qd(u,T,Ll),bb(u,T,a,t,()=>{yl(!1)}),ib(u,T,a,t,()=>{yl(!1)}),a.filter(n=>n.type==="shape").forEach(n=>{kb(u,n,{isDragged:t===n.id,isSelected:Il===n.id})}),_&&_.page===T&&b&&Cb(u,_),b&&m==="highlight"&&Wl.drawHighlightPreview(u,T,Ll),m==="eraser"&&Yb(u,T),sZ.forEach((n,K)=>{if(n.page!==T)return;const g=K===LZ;n.rects.forEach(v=>{u.fillStyle=g?"rgba(255, 255, 0, 0.5)":"rgba(255, 255, 0, 0.3)",u.fillRect(v.x,v.y,v.width,v.height),g&&(u.strokeStyle="rgba(255, 200, 0, 0.8)",u.lineWidth=2,u.strokeRect(v.x-1,v.y-1,v.width+2,v.height+2))})})})};V.useEffect(()=>{yl(!0)},[Wl.dragCurrent,Wl.isDragging,Cd,mb,Al,t,$Z,_]),V.useEffect(()=>{yl(!1)},[Il]),V.useEffect(()=>{!Wl.isDragging&&!xl&&!rl&&yl(!1)},[x,Wl.isDragging,xl,rl]),V.useEffect(()=>{Il&&!x.some(b=>b.id===Il)&&Ml(null)},[x,Il]),V.useEffect(()=>{yl(!1)},[sZ,LZ]),V.useEffect(()=>{m!=="pen"&&gd(),m!=="eraser"&&Zc(),m!=="text"&&fd(),m!=="text"&&m!=="none"&&_Z(),m!=="pen"&&m!=="highlight"&&m!=="image"&&m!=="signature"&&m!=="none"&&(R(null),B(null),J.current=null,Q.current=null)},[m]),V.useEffect(()=>{m==="pen"&&!xl&&qZ()},[A,e,m,xl,qZ]);const ob=()=>({type:ll,strokeColor:Xl,fillColor:Rl,strokeWidth:zl,fillOpacity:Bl,rotation:TZ}),Kb=(b,X,S)=>{tl({page:S,startX:b,startY:X,currentX:b,currentY:X,settings:ob()}),Ml(null)},gb=(b,X,S)=>{tl(u=>!u||u.page!==S?u:{...u,currentX:b,currentY:X})},Eb=()=>{tl(null)},Qb=()=>{if(!_)return;const b=_.currentX-_.startX,X=_.currentY-_.startY;if(Math.hypot(b,X)<Dd){tl(null);return}const S=_.settings,u=Sl(),T={page:_.page,type:"shape",shapeType:S.type,strokeColor:S.strokeColor,fillColor:S.fillColor,strokeWidth:S.strokeWidth,fillOpacity:0,rotation:S.rotation,id:u};if(S.type==="arrow"||S.type==="line")T.points=[{x:_.startX,y:_.startY},{x:_.currentX,y:_.currentY}];else{const s=Math.min(_.startX,_.currentX),y=Math.min(_.startY,_.currentY);let a=Math.abs(b),n=Math.abs(X),K=s,g=y;if(S.type==="circle"){const v=Math.max(a,n),Zl=(_.startX+_.currentX)/2,q=(_.startY+_.currentY)/2;a=v,n=v,K=Zl-v/2,g=q-v/2}T.x=K,T.y=g,T.width=a,T.height=S.type==="circle"?a:n}O(s=>[...s,T]),tl(null),Ml(u)};V.useEffect(()=>{m!=="shape"&&_&&tl(null)},[m,_]);const Hb=()=>{Il&&O(b=>b.map(X=>{if(X.id!==Il||X.type!=="shape")return X;const S={...X,strokeColor:Xl,strokeWidth:zl,rotation:TZ};return Vl(X)||(S.fillColor=Rl,S.fillOpacity=0),S}))},Pb=(b,X,S,u,T,s)=>{if(!jl(b))return;const y=b.strokeColor||Xl,a=(b.strokeWidth||zl)/u,n=T(y);if(!Vl(b)&&b.x!==void 0&&b.y!==void 0&&b.width&&b.height){const K=b.fillOpacity??Bl,g=b.fillColor||Rl,v=T(g),Zl=b.width/u,q=b.height/u,Gl=b.x/u,Tl=S-(b.y+b.height)/u;if(b.shapeType==="ellipse"||b.shapeType==="circle"){const zZ=(b.x+b.width/2)/u,IZ=S-(b.y+b.height/2)/u,lZ=b.shapeType==="circle"?Zl/2:(b.width??0)/(2*u),_b=b.shapeType==="circle"?Zl/2:(b.height??0)/(2*u);X.drawEllipse({x:zZ,y:IZ,xScale:lZ,yScale:_b,color:K>0?s(v.r,v.g,v.b):void 0,opacity:K>0?K:void 0,borderColor:s(n.r,n.g,n.b),borderWidth:a,borderOpacity:.95})}else X.drawRectangle({x:Gl,y:Tl,width:Zl,height:q,color:K>0?s(v.r,v.g,v.b):void 0,opacity:K>0?K:void 0,borderColor:s(n.r,n.g,n.b),borderWidth:a,borderOpacity:.95});return}if(b.points&&b.points.length>=2){const K=b.points[0],g=b.points[b.points.length-1],v=q=>({x:q.x/u,y:S-q.y/u}),Zl=v(g);for(let q=1;q<b.points.length;q++){const Gl=v(b.points[q-1]),Tl=v(b.points[q]);X.drawLine({start:Gl,end:Tl,thickness:a,color:s(n.r,n.g,n.b),opacity:.95})}if(b.shapeType==="arrow"){const q=Math.atan2(g.y-K.y,g.x-K.x),Gl=Math.max(12,(b.strokeWidth||zl)*3),Tl=lZ=>({x:g.x-Gl*Math.cos(q+lZ),y:g.y-Gl*Math.sin(q+lZ)}),zZ=v(Tl(-Math.PI/6)),IZ=v(Tl(Math.PI/6));X.drawLine({start:Zl,end:zZ,thickness:a,color:s(n.r,n.g,n.b),opacity:.95}),X.drawLine({start:Zl,end:IZ,thickness:a,color:s(n.r,n.g,n.b),opacity:.95})}}},Bb=b=>{const X=b.target;if(!(X instanceof HTMLCanvasElement))return;const S=X.getBoundingClientRect(),u=Number(X.dataset.page),T=b.clientX-S.left,s=b.clientY-S.top;if(il.current=null,m==="none"||m==="text"||m==="pen"||m==="highlight"||m==="image"||m==="signature"||m==="shape"){if(m==="image"||m==="none"){const y=fl(T,s,u);if(y&&y.id&&y.x!==void 0&&y.y!==void 0){Ml(null),R(y.id),B({x:T-y.x,y:s-y.y});return}}if(m==="signature"||m==="none"){const y=hZ(T,s,u);if(y&&y.id&&y.x!==void 0&&y.y!==void 0){Ml(null),R(y.id),B({x:T-y.x,y:s-y.y});return}}if(m==="text"||m==="none"){const y=Cl(T,s,u);if(y){Ml(null),_d(T,s,y);return}}if(m==="highlight"||m==="none"){const y=_l(T,s,u);if(y&&y.id&&y.x!==void 0&&y.y!==void 0){Ml(null),R(y.id),B({x:T-y.x,y:s-y.y});return}}if(m==="pen"||m==="none"){const y=$l(T,s,u);if(y&&y.id&&y.points&&y.points.length>0){Ml(null);let a=y.points[0].x,n=y.points[0].y,K=y.points[0].x,g=y.points[0].y;for(const q of y.points)a=Math.min(a,q.x),n=Math.min(n,q.y),K=Math.max(K,q.x),g=Math.max(g,q.y);const v=(a+K)/2,Zl=(n+g)/2;R(y.id),B({x:T-v,y:s-Zl}),J.current={x:v,y:Zl},Q.current=y.points.map(q=>({...q}));return}}if(m==="shape"||m==="none"){const y=bc(T,s,u);if(y&&y.id){Ml(y.id),Vl(y)&&y.points?(R(y.id),B(null),il.current={shapeId:y.id,pointerStart:{x:T,y:s},originalPoints:y.points.map(a=>({...a}))}):y.x!==void 0&&y.y!==void 0&&y.width!==void 0&&y.height!==void 0&&(R(y.id),B({x:T-y.x,y:s-y.y}));return}else m==="shape"&&Ml(null)}}m==="pen"?od({x:T,y:s,page:u}):m==="eraser"?Gb({x:T,y:s,page:u}):m==="highlight"?Wl.startHighlightDrag(T,s,u):m==="shape"&&Kb(T,s,u)},eb=b=>{const X=b.target;if(!(X instanceof HTMLCanvasElement))return;const S=X.getBoundingClientRect(),u=Number(X.dataset.page),T=b.clientX-S.left,s=b.clientY-S.top;if(Al){$d(T,s);return}if(t){const y=x.find(a=>a.id===t);if(y){if(y.type==="highlight"&&y.x!==void 0&&y.y!==void 0&&C){const a=T-C.x,n=s-C.y;O(K=>K.map(g=>g.id===t?{...g,x:a,y:n}:g))}else if(y.type==="pen"&&y.points&&J.current&&Q.current&&C){const a=J.current,n=Q.current,K=T-C.x,g=s-C.y,v=K-a.x,Zl=g-a.y,q=n.map(Gl=>({x:Gl.x+v,y:Gl.y+Zl}));O(Gl=>Gl.map(Tl=>Tl.id===t?{...Tl,points:q}:Tl))}else if(y.type==="shape"&&jl(y)){if(Vl(y)&&y.points&&il.current&&il.current.shapeId===t){const{pointerStart:a,originalPoints:n}=il.current,K=T-a.x,g=s-a.y,v=n.map(Zl=>({x:Zl.x+K,y:Zl.y+g}));O(Zl=>Zl.map(q=>q.id===t?{...q,points:v}:q))}else if(y.x!==void 0&&y.y!==void 0&&C){const a=T-C.x,n=s-C.y;O(K=>K.map(g=>g.id===t?{...g,x:a,y:n}:g))}}else if(y.type==="image"&&y.x!==void 0&&y.y!==void 0&&C){const a=T-C.x,n=s-C.y;O(K=>K.map(g=>g.id===t?{...g,x:a,y:n}:g))}else if(y.type==="signature"&&y.x!==void 0&&y.y!==void 0&&C){const a=T-C.x,n=s-C.y;O(K=>K.map(g=>g.id===t?{...g,x:a,y:n}:g))}}return}if(m==="shape"&&_){gb(T,s,u);return}m==="pen"&&xl?Kd({x:T,y:s,page:u}):m==="eraser"&&rl?Xb({x:T,y:s,page:u}):m==="highlight"&&Wl.updateHighlightDrag(T,s,u)},vb=()=>{if(Al){_Z(),H.current=!0,setTimeout(()=>{H.current=!1},100);return}if(t){R(null),B(null),J.current=null,Q.current=null,il.current=null,H.current=!0,setTimeout(()=>{H.current=!1},100);return}m==="pen"?rZ():m==="eraser"?Nb():m==="highlight"?Wl.finishHighlightDrag():Wl.isDragging?(Wl.cancelHighlightDrag(),yl(!1)):m==="shape"&&_&&Qb()},Ab=()=>{Wl.isDragging&&(Wl.cancelHighlightDrag(),yl(!1)),xl&&rZ(),rl&&Zc(),_&&Eb(),t&&(R(null),B(null),J.current=null,Q.current=null,il.current=null)},fb=b=>{const X=b.target;if(!(X instanceof HTMLCanvasElement))return;const S=X.getBoundingClientRect(),u=Number(X.dataset.page),T=b.clientX-S.left,s=b.clientY-S.top,y=Cl(T,s,u);if(y){b.preventDefault(),b.stopPropagation(),Ad(y);return}},rb=b=>{if(Al||t||H.current||Wl.isDragging)return;const X=b.target;if(!(X instanceof HTMLCanvasElement))return;const S=X.getBoundingClientRect(),u=Number(X.dataset.page),T=b.clientX-S.left,s=b.clientY-S.top;if((m==="shape"||m==="none")&&(bc(T,s,u)||Ml(null)),m==="text"){if(Cl(T,s,u))return;const a=_l(T,s,u),n=$l(T,s,u),K=fl(T,s,u);if(a||n||K)return;vd(T,s,u)}else if(m==="image"&&VZ){const y=Cl(T,s,u),a=_l(T,s,u),n=$l(T,s,u),K=fl(T,s,u),g=hZ(T,s,u);if(y||a||n||K||g)return;db(T,s,u),Y("none")}else if(m==="signature"&&wl){const y=Cl(T,s,u),a=_l(T,s,u),n=$l(T,s,u),K=fl(T,s,u),g=hZ(T,s,u);if(y||a||n||K||g)return;Ib(T,s,u),Y("none")}},qb=async()=>{try{const b=await fetch(l).then(s=>s.arrayBuffer()),X=await Jl.PDFDocument.load(b);for(const s of x){const y=X.getPages()[s.page-1],a=y.getHeight();s.type==="highlight"&&Wl.exportHighlightToPdf(s,y,a,sl,Ll,Jl.rgb),s.type==="text"&&lb(s,y,a,sl,Ll,Jl.rgb),s.type==="pen"&&Hd(s,y,a,sl,Ll,Jl.rgb),s.type==="image"&&await Wb(s,y,a,sl,X),s.type==="signature"&&await pb(s,y,a,sl,X),s.type==="shape"&&Pb(s,y,a,sl,Ll,Jl.rgb)}const S=await X.save(),u=S.buffer instanceof ArrayBuffer?S.buffer.slice(S.byteOffset,S.byteOffset+S.byteLength):new Uint8Array(S).buffer,T=new Blob([u],{type:"application/pdf"});if(Z){const s=new File([T],"edited.pdf",{type:"application/pdf"});Z(s)}}catch(b){console.error(b),o("Failed to export PDF")}};return V.useEffect(()=>{d&&(qb(),W&&W())},[d]),E?z.jsx("div",{children:"Loading PDF..."}):p?z.jsx("div",{style:{color:"red"},children:p}):z.jsxs("div",{children:[z.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",padding:12,borderBottom:"1px solid #e5e7eb",flexWrap:"wrap"},children:[z.jsx(Gd,{isActive:m==="highlight",onActivate:()=>Y("highlight")}),z.jsx(Nd,{isActive:m==="pen",onActivate:()=>Y("pen")}),z.jsx(ad,{isActive:m==="shape",onActivate:()=>Y("shape")}),z.jsx(Md,{isActive:m==="text",onActivate:()=>Y("text")}),z.jsx(Td,{isActive:m==="image",onActivate:()=>{VZ?Y("image"):lc()}}),z.jsx(hd,{isActive:m==="eraser",onActivate:()=>Y("eraser")}),z.jsx(Ld,{isActive:m==="signature",onActivate:()=>{Lb(),Y("signature")}}),z.jsx("button",{onClick:()=>Y("none"),style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:m==="none"?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Select",children:z.jsx(bl,{icon:"mdi:cursor-pointer",width:"20",height:"20"})}),z.jsx("input",{ref:Zb,type:"file",accept:"image/*",onChange:b=>{cb(b),Y("image")},style:{display:"none"}}),N>0&&z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginLeft:"auto"},children:[z.jsx("button",{onClick:()=>F(b=>Math.max(1,b-1)),disabled:j===1,style:{padding:"2px 4px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:j===1?"#f3f4f6":"white",cursor:j===1?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"center",opacity:j===1?.5:1,minWidth:"24px",height:"24px"},title:"Previous Page",children:z.jsx(bl,{icon:"mdi:chevron-left",width:"12",height:"12"})}),z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[z.jsx("input",{type:"number",min:1,max:N,value:h,onChange:b=>{k(b.target.value)},onBlur:b=>{const X=parseInt(b.target.value);isNaN(X)||X<1?k(String(j)):X>N?(k(String(N)),F(N)):(F(X),k(String(X)))},onKeyDown:b=>{b.key==="Enter"&&b.currentTarget.blur()},style:{width:"30px",padding:"2px 4px",border:"1px solid #ccc",borderRadius:"4px",textAlign:"center",fontSize:"12px"}}),z.jsxs("span",{style:{fontSize:"12px",color:"#666"},children:["/ ",N]})]}),z.jsx("button",{onClick:()=>F(b=>Math.min(N,b+1)),disabled:j===N,style:{padding:"2px 4px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:j===N?"#f3f4f6":"white",cursor:j===N?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"center",opacity:j===N?.5:1,minWidth:"24px",height:"24px"},title:"Next Page",children:z.jsx(bl,{icon:"mdi:chevron-right",width:"12",height:"12"})})]}),z.jsx(id,{searchQuery:ab,searchResultsCount:sZ.length,currentSearchIndex:LZ,isSearching:Rb,onChange:tb,onKeyDown:Sb,onPrev:()=>cc("prev"),onNext:()=>cc("next"),onClear:xb})]}),m==="highlight"&&z.jsx(Xd,{isActive:m==="highlight",highlightColor:cl,highlightStrokeWidth:I,onColorChange:ml,onStrokeWidthChange:P}),m==="pen"&&z.jsx(Yd,{isActive:m==="pen",penColor:e,penStrokeWidth:A,onColorChange:dl,onStrokeWidthChange:f}),m==="text"&&z.jsx(yd,{isActive:m==="text",textColor:r,onColorChange:$}),m==="eraser"&&z.jsx(sd,{isActive:m==="eraser",eraserWidth:Nl,onWidthChange:ul}),m==="image"&&z.jsx(Vd,{isActive:m==="image",hasSelectedImage:!!VZ,onImageSelect:lc}),m==="signature"&&z.jsx(ud,{isActive:m==="signature",hasSavedSignature:!!wl}),m==="shape"&&z.jsx(Rd,{isActive:m==="shape",selectedShape:ll,strokeColor:Xl,strokeWidth:zl,rotation:TZ,hasSelection:!!Il,onShapeChange:b=>Yl(b),onStrokeColorChange:al,onStrokeWidthChange:Pl,onRotationChange:Fd,onApplySelectionSettings:Hb}),z.jsx("div",{ref:c,style:{height:"80vh",overflowY:"auto",overflowX:"hidden",border:"1px solid #ccc",position:"relative",cursor:m==="pen"?`url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 24 24' fill='none'><path d='M3 21l1.5-4.5L15 6l3 3-10.5 10.5L3 21z' fill='%23FFD600' stroke='%23000' stroke-width='1'/><path d='M14.5 5.5l4 4' stroke='%23000' stroke-width='1.2'/></svg>") 0 24, auto`:m==="highlight"?"crosshair":m==="text"?"text":m==="shape"?"crosshair":m==="none"?"move":m==="eraser"?`url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='28' height='28' viewBox='0 0 24 24' fill='%23f8f8f8' stroke='%23000' stroke-width='1.5'><path d='M3 16l8-8 5 5-8 8H3z'/><path d='M12 8l3-3 4 4-3 3' stroke='%23000' stroke-width='1.2'/></svg>") 8 20, auto`:m==="image"||m==="signature"&&wl?"crosshair":"default"},onMouseDown:Bb,onMouseMove:eb,onMouseUp:vb,onMouseLeave:Ab,onClick:rb,onDoubleClick:fb,children:vl&&(()=>{const b=c.current?.querySelector(`canvas[data-page="${vl.page}"]`);if(!b)return null;const X=b.offsetLeft,S=b.offsetTop,u=X+vl.x,T=S+vl.y-20;return z.jsx("input",{ref:ed,type:"text",value:Pd,onChange:s=>Bd(s.target.value),onKeyDown:rd,onBlur:qd,onClick:s=>s.stopPropagation(),onMouseDown:s=>s.stopPropagation(),placeholder:"Type text here...",style:{position:"absolute",left:`${u}px`,top:`${T}px`,padding:"4px 8px",border:"2px solid #4A90E2",borderRadius:"4px",fontSize:"16px",fontFamily:"Arial",backgroundColor:"white",boxShadow:"0 2px 8px rgba(0,0,0,0.2)",outline:"none",minWidth:"200px",zIndex:1e3},autoFocus:!0})})()}),yb&&wl&&z.jsx(zd,{savedSignature:wl,onUseSaved:()=>{ub(),Y("signature")},onCreateNew:zb,onDelete:()=>{sb(),Y("none")},onClose:()=>Vb(!1)}),Mb&&z.jsx(Id,{onSave:b=>{hb(b),Y("signature")},onClear:()=>{},onClose:()=>{Tb(!1),wl||Y("none")}})]})};hl.PdfEditor=Od,Object.defineProperty(hl,Symbol.toStringTag,{value:"Module"})}));
6
+ <%s key={someKey} {...props} />`,$,te,ue,te),ae[te+$]=!0)}if(te=null,K!==void 0&&(o(K),te=""+K),f(U)&&(o(U.key),te=""+U.key),"key"in U){K={};for(var le in U)le!=="key"&&(K[le]=U[le])}else K=U;return te&&S(K,typeof m=="function"?m.displayName||m.name||"Unknown":m),E(m,te,K,t(),de,me)}function O(m){F(m)?m._store&&(m._store.validated=1):typeof m=="object"&&m!==null&&m.$$typeof===T&&(m._payload.status==="fulfilled"?F(m._payload.value)&&m._payload.value._store&&(m._payload.value._store.validated=1):m._store&&(m._store.validated=1))}function F(m){return typeof m=="object"&&m!==null&&m.$$typeof===k}var A=h,k=Symbol.for("react.transitional.element"),_=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),d=Symbol.for("react.strict_mode"),M=Symbol.for("react.profiler"),W=Symbol.for("react.consumer"),c=Symbol.for("react.context"),D=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),Y=Symbol.for("react.suspense_list"),P=Symbol.for("react.memo"),T=Symbol.for("react.lazy"),L=Symbol.for("react.activity"),Q=Symbol.for("react.client.reference"),R=A.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,z=Object.prototype.hasOwnProperty,B=Array.isArray,V=console.createTask?console.createTask:function(){return null};A={react_stack_bottom_frame:function(m){return m()}};var ie,J={},G=A.react_stack_bottom_frame.bind(A,a)(),oe=V(s(a)),ae={};De.Fragment=r,De.jsx=function(m,U,K){var $=1e4>R.recentlyCreatedOwnerStacks++;return j(m,U,K,!1,$?Error("react-stack-top-frame"):G,$?V(s(m)):oe)},De.jsxs=function(m,U,K){var $=1e4>R.recentlyCreatedOwnerStacks++;return j(m,U,K,!0,$?Error("react-stack-top-frame"):G,$?V(s(m)):oe)}})()),De}var kt;function an(){return kt||(kt=1,process.env.NODE_ENV==="production"?Ne.exports=sn():Ne.exports=rn()),Ne.exports}var y=an();function ln(e,n){const o=e.icons,s=e.aliases||Object.create(null),t=Object.create(null);function a(f){if(o[f])return t[f]=[];if(!(f in t)){t[f]=null;const S=s[f]&&s[f].parent,x=S&&a(S);x&&(t[f]=[S].concat(x))}return t[f]}return Object.keys(o).concat(Object.keys(s)).forEach(a),t}const Ct=Object.freeze({left:0,top:0,width:16,height:16}),Xe=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),ot=Object.freeze({...Ct,...Xe}),it=Object.freeze({...ot,body:"",hidden:!1});function cn(e,n){const o={};!e.hFlip!=!n.hFlip&&(o.hFlip=!0),!e.vFlip!=!n.vFlip&&(o.vFlip=!0);const s=((e.rotate||0)+(n.rotate||0))%4;return s&&(o.rotate=s),o}function Tt(e,n){const o=cn(e,n);for(const s in it)s in Xe?s in e&&!(s in o)&&(o[s]=Xe[s]):s in n?o[s]=n[s]:s in e&&(o[s]=e[s]);return o}function dn(e,n,o){const s=e.icons,t=e.aliases||Object.create(null);let a={};function f(S){a=Tt(s[S]||t[S],a)}return f(n),o.forEach(f),Tt(e,a)}function Pt(e,n){const o=[];if(typeof e!="object"||typeof e.icons!="object")return o;e.not_found instanceof Array&&e.not_found.forEach(t=>{n(t,null),o.push(t)});const s=ln(e);for(const t in s){const a=s[t];a&&(n(t,dn(e,t,a)),o.push(t))}return o}const un={provider:"",aliases:{},not_found:{},...Ct};function st(e,n){for(const o in n)if(o in e&&typeof e[o]!=typeof n[o])return!1;return!0}function It(e){if(typeof e!="object"||e===null)return null;const n=e;if(typeof n.prefix!="string"||!e.icons||typeof e.icons!="object"||!st(e,un))return null;const o=n.icons;for(const t in o){const a=o[t];if(!t||typeof a.body!="string"||!st(a,it))return null}const s=n.aliases||Object.create(null);for(const t in s){const a=s[t],f=a.parent;if(!t||typeof f!="string"||!o[f]&&!s[f]||!st(a,it))return null}return n}const jt=Object.create(null);function fn(e,n){return{provider:e,prefix:n,icons:Object.create(null),missing:new Set}}function ke(e,n){const o=jt[e]||(jt[e]=Object.create(null));return o[n]||(o[n]=fn(e,n))}function Et(e,n){return It(n)?Pt(n,(o,s)=>{s?e.icons[o]=s:e.missing.add(o)}):[]}function hn(e,n,o){try{if(typeof o.body=="string")return e.icons[n]={...o},!0}catch{}return!1}const Mt=/^[a-z0-9]+(-[a-z0-9]+)*$/,He=(e,n,o,s="")=>{const t=e.split(":");if(e.slice(0,1)==="@"){if(t.length<2||t.length>3)return null;s=t.shift().slice(1)}if(t.length>3||!t.length)return null;if(t.length>1){const S=t.pop(),x=t.pop(),E={provider:t.length>0?t[0]:s,prefix:x,name:S};return n&&!Fe(E)?null:E}const a=t[0],f=a.split("-");if(f.length>1){const S={provider:s,prefix:f.shift(),name:f.join("-")};return n&&!Fe(S)?null:S}if(o&&s===""){const S={provider:s,prefix:"",name:a};return n&&!Fe(S,o)?null:S}return null},Fe=(e,n)=>e?!!((n&&e.prefix===""||e.prefix)&&e.name):!1;let Oe=!1;function Rt(e){return typeof e=="boolean"&&(Oe=e),Oe}function At(e){const n=typeof e=="string"?He(e,!0,Oe):e;if(n){const o=ke(n.provider,n.prefix),s=n.name;return o.icons[s]||(o.missing.has(s)?null:void 0)}}function pn(e,n){const o=He(e,!0,Oe);if(!o)return!1;const s=ke(o.provider,o.prefix);return n?hn(s,o.name,n):(s.missing.add(o.name),!0)}function gn(e,n){if(typeof e!="object")return!1;if(typeof n!="string"&&(n=e.provider||""),Oe&&!n&&!e.prefix){let t=!1;return It(e)&&(e.prefix="",Pt(e,(a,f)=>{pn(a,f)&&(t=!0)})),t}const o=e.prefix;if(!Fe({prefix:o,name:"a"}))return!1;const s=ke(n,o);return!!Et(s,e)}const Dt=Object.freeze({width:null,height:null}),Ot=Object.freeze({...Dt,...Xe}),xn=/(-?[0-9.]*[0-9]+[0-9.]*)/g,yn=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function Wt(e,n,o){if(n===1)return e;if(o=o||100,typeof e=="number")return Math.ceil(e*n*o)/o;if(typeof e!="string")return e;const s=e.split(xn);if(s===null||!s.length)return e;const t=[];let a=s.shift(),f=yn.test(a);for(;;){if(f){const S=parseFloat(a);isNaN(S)?t.push(a):t.push(Math.ceil(S*n*o)/o)}else t.push(a);if(a=s.shift(),a===void 0)return t.join("");f=!f}}function mn(e,n="defs"){let o="";const s=e.indexOf("<"+n);for(;s>=0;){const t=e.indexOf(">",s),a=e.indexOf("</"+n);if(t===-1||a===-1)break;const f=e.indexOf(">",a);if(f===-1)break;o+=e.slice(t+1,a).trim(),e=e.slice(0,s).trim()+e.slice(f+1)}return{defs:o,content:e}}function bn(e,n){return e?"<defs>"+e+"</defs>"+n:n}function wn(e,n,o){const s=mn(e);return bn(s.defs,n+s.content+o)}const vn=e=>e==="unset"||e==="undefined"||e==="none";function Sn(e,n){const o={...ot,...e},s={...Ot,...n},t={left:o.left,top:o.top,width:o.width,height:o.height};let a=o.body;[o,s].forEach(_=>{const r=[],d=_.hFlip,M=_.vFlip;let W=_.rotate;d?M?W+=2:(r.push("translate("+(t.width+t.left).toString()+" "+(0-t.top).toString()+")"),r.push("scale(-1 1)"),t.top=t.left=0):M&&(r.push("translate("+(0-t.left).toString()+" "+(t.height+t.top).toString()+")"),r.push("scale(1 -1)"),t.top=t.left=0);let c;switch(W<0&&(W-=Math.floor(W/4)*4),W=W%4,W){case 1:c=t.height/2+t.top,r.unshift("rotate(90 "+c.toString()+" "+c.toString()+")");break;case 2:r.unshift("rotate(180 "+(t.width/2+t.left).toString()+" "+(t.height/2+t.top).toString()+")");break;case 3:c=t.width/2+t.left,r.unshift("rotate(-90 "+c.toString()+" "+c.toString()+")");break}W%2===1&&(t.left!==t.top&&(c=t.left,t.left=t.top,t.top=c),t.width!==t.height&&(c=t.width,t.width=t.height,t.height=c)),r.length&&(a=wn(a,'<g transform="'+r.join(" ")+'">',"</g>"))});const f=s.width,S=s.height,x=t.width,E=t.height;let j,O;f===null?(O=S===null?"1em":S==="auto"?E:S,j=Wt(O,x/E)):(j=f==="auto"?x:f,O=S===null?Wt(j,E/x):S==="auto"?E:S);const F={},A=(_,r)=>{vn(r)||(F[_]=r.toString())};A("width",j),A("height",O);const k=[t.left,t.top,x,E];return F.viewBox=k.join(" "),{attributes:F,viewBox:k,body:a}}const kn=/\sid="(\S+)"/g,Cn="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let Tn=0;function Pn(e,n=Cn){const o=[];let s;for(;s=kn.exec(e);)o.push(s[1]);if(!o.length)return e;const t="suffix"+(Math.random()*16777216|Date.now()).toString(16);return o.forEach(a=>{const f=typeof n=="function"?n(a):n+(Tn++).toString(),S=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+S+')([")]|\\.[a-z])',"g"),"$1"+f+t+"$3")}),e=e.replace(new RegExp(t,"g"),""),e}const rt=Object.create(null);function In(e,n){rt[e]=n}function at(e){return rt[e]||rt[""]}function lt(e){let n;if(typeof e.resources=="string")n=[e.resources];else if(n=e.resources,!(n instanceof Array)||!n.length)return null;return{resources:n,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:e.random===!0,index:e.index||0,dataAfterTimeout:e.dataAfterTimeout!==!1}}const ct=Object.create(null),We=["https://api.simplesvg.com","https://api.unisvg.com"],ze=[];for(;We.length>0;)We.length===1||Math.random()>.5?ze.push(We.shift()):ze.push(We.pop());ct[""]=lt({resources:["https://api.iconify.design"].concat(ze)});function jn(e,n){const o=lt(n);return o===null?!1:(ct[e]=o,!0)}function dt(e){return ct[e]}let Yt=(()=>{let e;try{if(e=fetch,typeof e=="function")return e}catch{}})();function En(e,n){const o=dt(e);if(!o)return 0;let s;if(!o.maxURL)s=0;else{let t=0;o.resources.forEach(f=>{t=Math.max(t,f.length)});const a=n+".json?icons=";s=o.maxURL-t-o.path.length-a.length}return s}function Mn(e){return e===404}const Rn=(e,n,o)=>{const s=[],t=En(e,n),a="icons";let f={type:a,provider:e,prefix:n,icons:[]},S=0;return o.forEach((x,E)=>{S+=x.length+1,S>=t&&E>0&&(s.push(f),f={type:a,provider:e,prefix:n,icons:[]},S=x.length),f.icons.push(x)}),s.push(f),s};function An(e){if(typeof e=="string"){const n=dt(e);if(n)return n.path}return"/"}const Dn={prepare:Rn,send:(e,n,o)=>{if(!Yt){o("abort",424);return}let s=An(n.provider);switch(n.type){case"icons":{const a=n.prefix,S=n.icons.join(","),x=new URLSearchParams({icons:S});s+=a+".json?"+x.toString();break}case"custom":{const a=n.uri;s+=a.slice(0,1)==="/"?a.slice(1):a;break}default:o("abort",400);return}let t=503;Yt(e+s).then(a=>{const f=a.status;if(f!==200){setTimeout(()=>{o(Mn(f)?"abort":"next",f)});return}return t=501,a.json()}).then(a=>{if(typeof a!="object"||a===null){setTimeout(()=>{a===404?o("abort",a):o("next",t)});return}setTimeout(()=>{o("success",a)})}).catch(()=>{o("next",t)})}};function Lt(e,n){e.forEach(o=>{const s=o.loaderCallbacks;s&&(o.loaderCallbacks=s.filter(t=>t.id!==n))})}function On(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;const n=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!n.length)return;let o=!1;const s=e.provider,t=e.prefix;n.forEach(a=>{const f=a.icons,S=f.pending.length;f.pending=f.pending.filter(x=>{if(x.prefix!==t)return!0;const E=x.name;if(e.icons[E])f.loaded.push({provider:s,prefix:t,name:E});else if(e.missing.has(E))f.missing.push({provider:s,prefix:t,name:E});else return o=!0,!0;return!1}),f.pending.length!==S&&(o||Lt([e],a.id),a.callback(f.loaded.slice(0),f.missing.slice(0),f.pending.slice(0),a.abort))})}))}let Wn=0;function Yn(e,n,o){const s=Wn++,t=Lt.bind(null,o,s);if(!n.pending.length)return t;const a={id:s,icons:n,callback:e,abort:t};return o.forEach(f=>{(f.loaderCallbacks||(f.loaderCallbacks=[])).push(a)}),t}function Ln(e){const n={loaded:[],missing:[],pending:[]},o=Object.create(null);e.sort((t,a)=>t.provider!==a.provider?t.provider.localeCompare(a.provider):t.prefix!==a.prefix?t.prefix.localeCompare(a.prefix):t.name.localeCompare(a.name));let s={provider:"",prefix:"",name:""};return e.forEach(t=>{if(s.name===t.name&&s.prefix===t.prefix&&s.provider===t.provider)return;s=t;const a=t.provider,f=t.prefix,S=t.name,x=o[a]||(o[a]=Object.create(null)),E=x[f]||(x[f]=ke(a,f));let j;S in E.icons?j=n.loaded:f===""||E.missing.has(S)?j=n.missing:j=n.pending;const O={provider:a,prefix:f,name:S};j.push(O)}),n}function _n(e,n=!0,o=!1){const s=[];return e.forEach(t=>{const a=typeof t=="string"?He(t,n,o):t;a&&s.push(a)}),s}const Nn={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function Xn(e,n,o,s){const t=e.resources.length,a=e.random?Math.floor(Math.random()*t):e.index;let f;if(e.random){let g=e.resources.slice(0);for(f=[];g.length>1;){const Y=Math.floor(Math.random()*g.length);f.push(g[Y]),g=g.slice(0,Y).concat(g.slice(Y+1))}f=f.concat(g)}else f=e.resources.slice(a).concat(e.resources.slice(0,a));const S=Date.now();let x="pending",E=0,j,O=null,F=[],A=[];typeof s=="function"&&A.push(s);function k(){O&&(clearTimeout(O),O=null)}function _(){x==="pending"&&(x="aborted"),k(),F.forEach(g=>{g.status==="pending"&&(g.status="aborted")}),F=[]}function r(g,Y){Y&&(A=[]),typeof g=="function"&&A.push(g)}function d(){return{startTime:S,payload:n,status:x,queriesSent:E,queriesPending:F.length,subscribe:r,abort:_}}function M(){x="failed",A.forEach(g=>{g(void 0,j)})}function W(){F.forEach(g=>{g.status==="pending"&&(g.status="aborted")}),F=[]}function c(g,Y,P){const T=Y!=="success";switch(F=F.filter(L=>L!==g),x){case"pending":break;case"failed":if(T||!e.dataAfterTimeout)return;break;default:return}if(Y==="abort"){j=P,M();return}if(T){j=P,F.length||(f.length?D():M());return}if(k(),W(),!e.random){const L=e.resources.indexOf(g.resource);L!==-1&&L!==e.index&&(e.index=L)}x="completed",A.forEach(L=>{L(P)})}function D(){if(x!=="pending")return;k();const g=f.shift();if(g===void 0){if(F.length){O=setTimeout(()=>{k(),x==="pending"&&(W(),M())},e.timeout);return}M();return}const Y={status:"pending",resource:g,callback:(P,T)=>{c(Y,P,T)}};F.push(Y),E++,O=setTimeout(D,e.rotate),o(g,n,Y.callback)}return setTimeout(D),d}function _t(e){const n={...Nn,...e};let o=[];function s(){o=o.filter(S=>S().status==="pending")}function t(S,x,E){const j=Xn(n,S,x,(O,F)=>{s(),E&&E(O,F)});return o.push(j),j}function a(S){return o.find(x=>S(x))||null}return{query:t,find:a,setIndex:S=>{n.index=S},getIndex:()=>n.index,cleanup:s}}function Nt(){}const ut=Object.create(null);function Hn(e){if(!ut[e]){const n=dt(e);if(!n)return;const o=_t(n),s={config:n,redundancy:o};ut[e]=s}return ut[e]}function Fn(e,n,o){let s,t;if(typeof e=="string"){const a=at(e);if(!a)return o(void 0,424),Nt;t=a.send;const f=Hn(e);f&&(s=f.redundancy)}else{const a=lt(e);if(a){s=_t(a);const f=e.resources?e.resources[0]:"",S=at(f);S&&(t=S.send)}}return!s||!t?(o(void 0,424),Nt):s.query(n,t,o)().abort}function Xt(){}function zn(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,On(e)}))}function Bn(e){const n=[],o=[];return e.forEach(s=>{(s.match(Mt)?n:o).push(s)}),{valid:n,invalid:o}}function Ye(e,n,o){function s(){const t=e.pendingIcons;n.forEach(a=>{t&&t.delete(a),e.icons[a]||e.missing.add(a)})}if(o&&typeof o=="object")try{if(!Et(e,o).length){s();return}}catch(t){console.error(t)}s(),zn(e)}function Ht(e,n){e instanceof Promise?e.then(o=>{n(o)}).catch(()=>{n(null)}):n(e)}function Un(e,n){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(n).sort():e.iconsToLoad=n,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;const{provider:o,prefix:s}=e,t=e.iconsToLoad;if(delete e.iconsToLoad,!t||!t.length)return;const a=e.loadIcon;if(e.loadIcons&&(t.length>1||!a)){Ht(e.loadIcons(t,s,o),j=>{Ye(e,t,j)});return}if(a){t.forEach(j=>{const O=a(j,s,o);Ht(O,F=>{const A=F?{prefix:s,icons:{[j]:F}}:null;Ye(e,[j],A)})});return}const{valid:f,invalid:S}=Bn(t);if(S.length&&Ye(e,S,null),!f.length)return;const x=s.match(Mt)?at(o):null;if(!x){Ye(e,f,null);return}x.prepare(o,s,f).forEach(j=>{Fn(o,j,O=>{Ye(e,j.icons,O)})})}))}const Qn=(e,n)=>{const o=_n(e,!0,Rt()),s=Ln(o);if(!s.pending.length){let x=!0;return n&&setTimeout(()=>{x&&n(s.loaded,s.missing,s.pending,Xt)}),()=>{x=!1}}const t=Object.create(null),a=[];let f,S;return s.pending.forEach(x=>{const{provider:E,prefix:j}=x;if(j===S&&E===f)return;f=E,S=j,a.push(ke(E,j));const O=t[E]||(t[E]=Object.create(null));O[j]||(O[j]=[])}),s.pending.forEach(x=>{const{provider:E,prefix:j,name:O}=x,F=ke(E,j),A=F.pendingIcons||(F.pendingIcons=new Set);A.has(O)||(A.add(O),t[E][j].push(O))}),a.forEach(x=>{const E=t[x.provider][x.prefix];E.length&&Un(x,E)}),n?Yn(n,s,a):Xt};function Vn(e,n){const o={...e};for(const s in n){const t=n[s],a=typeof t;s in Dt?(t===null||t&&(a==="string"||a==="number"))&&(o[s]=t):a===typeof o[s]&&(o[s]=s==="rotate"?t%4:t)}return o}const Jn=/[\s,]+/;function Gn(e,n){n.split(Jn).forEach(o=>{switch(o.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function Kn(e,n=0){const o=e.replace(/^-?[0-9.]*/,"");function s(t){for(;t<0;)t+=4;return t%4}if(o===""){const t=parseInt(e);return isNaN(t)?0:s(t)}else if(o!==e){let t=0;switch(o){case"%":t=25;break;case"deg":t=90}if(t){let a=parseFloat(e.slice(0,e.length-o.length));return isNaN(a)?0:(a=a/t,a%1===0?s(a):0)}}return n}function Zn(e,n){let o=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const s in n)o+=" "+s+'="'+n[s]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+o+">"+e+"</svg>"}function qn(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\s+/g," ")}function $n(e){return"data:image/svg+xml,"+qn(e)}function eo(e){return'url("'+$n(e)+'")'}let Le;function to(){try{Le=window.trustedTypes.createPolicy("iconify",{createHTML:e=>e})}catch{Le=null}}function no(e){return Le===void 0&&to(),Le?Le.createHTML(e):e}const Ft={...Ot,inline:!1},oo={xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},io={display:"inline-block"},ft={backgroundColor:"currentColor"},zt={backgroundColor:"transparent"},Bt={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},Ut={WebkitMask:ft,mask:ft,background:zt};for(const e in Ut){const n=Ut[e];for(const o in Bt)n[e+o]=Bt[o]}const so={...Ft,inline:!0};function Qt(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}const ro=(e,n,o)=>{const s=n.inline?so:Ft,t=Vn(s,n),a=n.mode||"svg",f={},S=n.style||{},x={...a==="svg"?oo:{}};if(o){const r=He(o,!1,!0);if(r){const d=["iconify"],M=["provider","prefix"];for(const W of M)r[W]&&d.push("iconify--"+r[W]);x.className=d.join(" ")}}for(let r in n){const d=n[r];if(d!==void 0)switch(r){case"icon":case"style":case"children":case"onLoad":case"mode":case"ssr":case"fallback":break;case"_ref":x.ref=d;break;case"className":x[r]=(x[r]?x[r]+" ":"")+d;break;case"inline":case"hFlip":case"vFlip":t[r]=d===!0||d==="true"||d===1;break;case"flip":typeof d=="string"&&Gn(t,d);break;case"color":f.color=d;break;case"rotate":typeof d=="string"?t[r]=Kn(d):typeof d=="number"&&(t[r]=d);break;case"ariaHidden":case"aria-hidden":d!==!0&&d!=="true"&&delete x["aria-hidden"];break;default:s[r]===void 0&&(x[r]=d)}}const E=Sn(e,t),j=E.attributes;if(t.inline&&(f.verticalAlign="-0.125em"),a==="svg"){x.style={...f,...S},Object.assign(x,j);let r=0,d=n.id;return typeof d=="string"&&(d=d.replace(/-/g,"_")),x.dangerouslySetInnerHTML={__html:no(Pn(E.body,d?()=>d+"ID"+r++:"iconifyReact"))},h.createElement("svg",x)}const{body:O,width:F,height:A}=e,k=a==="mask"||(a==="bg"?!1:O.indexOf("currentColor")!==-1),_=Zn(O,{...j,width:F+"",height:A+""});return x.style={...f,"--svg":eo(_),width:Qt(j.width),height:Qt(j.height),...io,...k?ft:zt,...S},h.createElement("span",x)};if(Rt(!0),In("",Dn),typeof document<"u"&&typeof window<"u"){const e=window;if(e.IconifyPreload!==void 0){const n=e.IconifyPreload,o="Invalid IconifyPreload syntax.";typeof n=="object"&&n!==null&&(n instanceof Array?n:[n]).forEach(s=>{try{(typeof s!="object"||s===null||s instanceof Array||typeof s.icons!="object"||typeof s.prefix!="string"||!gn(s))&&console.error(o)}catch{console.error(o)}})}if(e.IconifyProviders!==void 0){const n=e.IconifyProviders;if(typeof n=="object"&&n!==null)for(let o in n){const s="IconifyProviders["+o+"] is invalid.";try{const t=n[o];if(typeof t!="object"||!t||t.resources===void 0)continue;jn(o,t)||console.error(s)}catch{console.error(s)}}}}function Vt(e){const[n,o]=h.useState(!!e.ssr),[s,t]=h.useState({});function a(A){if(A){const k=e.icon;if(typeof k=="object")return{name:"",data:k};const _=At(k);if(_)return{name:k,data:_}}return{name:""}}const[f,S]=h.useState(a(!!e.ssr));function x(){const A=s.callback;A&&(A(),t({}))}function E(A){if(JSON.stringify(f)!==JSON.stringify(A))return x(),S(A),!0}function j(){var A;const k=e.icon;if(typeof k=="object"){E({name:"",data:k});return}const _=At(k);if(E({name:k,data:_}))if(_===void 0){const r=Qn([k],j);t({callback:r})}else _&&((A=e.onLoad)===null||A===void 0||A.call(e,k))}h.useEffect(()=>(o(!0),x),[]),h.useEffect(()=>{n&&j()},[e.icon,n]);const{name:O,data:F}=f;return F?ro({...ot,...F},e,O):e.children?e.children:e.fallback?e.fallback:h.createElement("span",{})}const se=h.forwardRef((e,n)=>Vt({...e,_ref:n}));h.forwardRef((e,n)=>Vt({inline:!0,...e,_ref:n}));const ao=({isActive:e,onActivate:n})=>y.jsx("button",{onClick:n,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:e?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Box Highlight",children:y.jsx(se,{icon:"mdi:border-style",width:"20",height:"20"})}),lo=({isActive:e,highlightColor:n,highlightStrokeWidth:o,onColorChange:s,onStrokeWidthChange:t})=>e?y.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[y.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Highlight Color:"}),y.jsx("input",{type:"color",value:n,onChange:a=>s(a.target.value),style:{width:"40px",height:"32px",border:"1px solid #ccc",borderRadius:"4px",cursor:"pointer"}})]})}):null,co=({isActive:e,onActivate:n})=>y.jsx("button",{onClick:n,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:e?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Pen Highlighter",children:y.jsx(se,{icon:"mdi:pen",width:"20",height:"20"})}),uo=({isActive:e,penColor:n,penStrokeWidth:o,onColorChange:s,onStrokeWidthChange:t})=>e?y.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:[y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[y.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Pen Color:"}),y.jsx("input",{type:"color",value:n,onChange:a=>s(a.target.value),style:{width:"40px",height:"32px",border:"1px solid #ccc",borderRadius:"4px",cursor:"pointer"}})]}),y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[y.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Width:"}),y.jsx("input",{type:"range",min:1,max:50,value:o,onChange:a=>t(Number(a.target.value)),style:{width:"80px"}}),y.jsxs("span",{style:{fontSize:"12px",minWidth:"30px"},children:[o,"px"]})]})]}):null,fo=({isActive:e,onActivate:n})=>y.jsx("button",{onClick:n,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:e?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Text",children:y.jsx(se,{icon:"mdi:format-text",width:"20",height:"20"})}),ho=({isActive:e,textColor:n,onColorChange:o})=>e?y.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[y.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Text Color:"}),y.jsx("input",{type:"color",value:n,onChange:s=>o(s.target.value),style:{width:"40px",height:"32px",border:"1px solid #ccc",borderRadius:"4px",cursor:"pointer"}})]})}):null,po=({isActive:e,onActivate:n})=>y.jsx("button",{onClick:n,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:e?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Add Image",children:y.jsx(se,{icon:"mdi:image-outline",width:"20",height:"20"})}),go=({isActive:e,hasSelectedImage:n,onImageSelect:o})=>e?y.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:n?y.jsx("span",{style:{fontSize:"12px",color:"#666"},children:"Click on PDF to place image"}):y.jsxs(y.Fragment,{children:[y.jsx("span",{style:{fontSize:"12px",color:"#666"},children:"Select an image to add:"}),y.jsx("button",{onClick:o,style:{padding:"6px 12px",border:"1px solid #4CAF50",borderRadius:"4px",backgroundColor:"#4CAF50",color:"white",cursor:"pointer",fontSize:"12px",fontWeight:500},children:"Choose Image"})]})}):null,xo=({isActive:e,onActivate:n})=>y.jsx("button",{onClick:n,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:e?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Eraser",children:y.jsx(se,{icon:"mdi:eraser",width:"20",height:"20"})}),yo=({isActive:e,eraserWidth:n,onWidthChange:o})=>e?y.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[y.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Eraser Width:"}),y.jsx("input",{type:"range",min:5,max:100,value:n,onChange:s=>o(Number(s.target.value)),style:{width:"80px"}}),y.jsxs("span",{style:{fontSize:"12px",minWidth:"40px"},children:[n,"px"]})]})}):null,mo=({isActive:e,onActivate:n})=>y.jsx("button",{onClick:n,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:e?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Add Signature",children:y.jsx(se,{icon:"mdi:draw-pen",width:"20",height:"20"})}),bo=({isActive:e,hasSavedSignature:n})=>e?y.jsx("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:n?y.jsx("span",{style:{fontSize:"12px",color:"#666"},children:"Click on PDF to place signature"}):y.jsx("span",{style:{fontSize:"12px",color:"#666"},children:'Click "Add Signature" to draw your signature'})}):null,wo=({savedSignature:e,onUseSaved:n,onCreateNew:o,onDelete:s,onClose:t})=>y.jsx("div",{style:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0,0,0,0.5)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3},children:y.jsxs("div",{style:{backgroundColor:"white",padding:"24px",borderRadius:"8px",boxShadow:"0 4px 20px rgba(0,0,0,0.3)",maxWidth:"500px",width:"90%"},children:[y.jsx("h3",{style:{margin:"0 0 20px 0",fontSize:"20px",fontWeight:"600"},children:"Signature Options"}),y.jsxs("div",{style:{marginBottom:"20px"},children:[y.jsx("p",{style:{margin:"0 0 12px 0",fontSize:"14px",color:"#666"},children:"Your saved signature:"}),y.jsx("div",{style:{border:"2px solid #e5e7eb",borderRadius:"8px",padding:"20px",backgroundColor:"#f9fafb",display:"flex",alignItems:"center",justifyContent:"center",minHeight:"120px",marginBottom:"16px"},children:y.jsx("img",{src:e,alt:"Saved signature",style:{maxWidth:"100%",maxHeight:"100px",objectFit:"contain"}})})]}),y.jsxs("div",{style:{display:"flex",gap:"10px",flexWrap:"wrap"},children:[y.jsxs("button",{onClick:n,style:{flex:"1",minWidth:"140px",padding:"12px 20px",border:"1px solid #4CAF50",borderRadius:"6px",backgroundColor:"#4CAF50",color:"white",cursor:"pointer",fontSize:"14px",fontWeight:"500",display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"},children:[y.jsx(se,{icon:"mdi:check-circle",width:"18",height:"18"}),"Use Saved"]}),y.jsxs("button",{onClick:o,style:{flex:"1",minWidth:"140px",padding:"12px 20px",border:"1px solid #2196F3",borderRadius:"6px",backgroundColor:"#2196F3",color:"white",cursor:"pointer",fontSize:"14px",fontWeight:"500",display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"},children:[y.jsx(se,{icon:"mdi:draw-pen",width:"18",height:"18"}),"Create New"]}),y.jsxs("button",{onClick:s,style:{flex:"1",minWidth:"140px",padding:"12px 20px",border:"1px solid #dc3545",borderRadius:"6px",backgroundColor:"white",color:"#dc3545",cursor:"pointer",fontSize:"14px",fontWeight:"500",display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"},children:[y.jsx(se,{icon:"mdi:delete-outline",width:"18",height:"18"}),"Delete"]}),y.jsx("button",{onClick:t,style:{flex:"1",minWidth:"140px",padding:"12px 20px",border:"1px solid #ccc",borderRadius:"6px",backgroundColor:"white",color:"#666",cursor:"pointer",fontSize:"14px",fontWeight:"500"},children:"Cancel"})]})]})}),vo=({onSave:e,onClose:n})=>{const o=h.useRef(null),[s,t]=h.useState(!1),[a,f]=h.useState(null);h.useEffect(()=>{const A=o.current;if(!A)return;const k=A.getContext("2d");if(!k)return;const _=window.devicePixelRatio||2,r=400,d=200;A.width=r*_,A.height=d*_,A.style.width=`${r}px`,A.style.height=`${d}px`,k.scale(_,_),k.clearRect(0,0,r,d),k.strokeStyle="#000000",k.lineWidth=4,k.lineCap="round",k.lineJoin="round"},[]);const S=A=>{const k=o.current;if(!k)return null;const _=k.getBoundingClientRect(),r="touches"in A?A.touches[0]?.clientX:A.clientX,d="touches"in A?A.touches[0]?.clientY:A.clientY;return{x:r-_.left,y:d-_.top}},x=A=>{const k=o.current?.getContext("2d");k&&(t(!0),f(A),k.strokeStyle="#000000",k.lineWidth=4,k.lineCap="round",k.lineJoin="round",k.beginPath(),k.moveTo(A.x,A.y))},E=A=>{if(!s||!a)return;const k=o.current?.getContext("2d");k&&(k.strokeStyle="#000000",k.lineWidth=4,k.lineCap="round",k.lineJoin="round",k.lineTo(A.x,A.y),k.stroke(),f(A))},j=()=>{t(!1),f(null)},O=()=>{const A=o.current?.getContext("2d"),k=o.current;if(!A||!k)return;A.clearRect(0,0,400,200)},F=()=>{const A=o.current?.toDataURL("image/png",1);A&&e(A)};return y.jsx("div",{style:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0,0,0,0.5)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3},children:y.jsxs("div",{style:{backgroundColor:"white",padding:"20px",borderRadius:"8px",boxShadow:"0 4px 20px rgba(0,0,0,0.3)",maxWidth:"90%",maxHeight:"90%"},children:[y.jsx("h3",{style:{margin:"0 0 15px 0",fontSize:"18px"},children:"Draw Your Signature"}),y.jsx("div",{style:{border:"2px dashed #ccc",borderRadius:"4px",padding:"10px",backgroundImage:"linear-gradient(45deg, #f0f0f0 25%, transparent 25%), linear-gradient(-45deg, #f0f0f0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #f0f0f0 75%), linear-gradient(-45deg, transparent 75%, #f0f0f0 75%)",backgroundSize:"20px 20px",backgroundPosition:"0 0, 0 10px, 10px -10px, -10px 0px",marginBottom:"15px"},children:y.jsx("canvas",{ref:o,style:{display:"block",cursor:"crosshair",touchAction:"none",backgroundColor:"transparent"},onMouseDown:A=>{const k=S(A);k&&x(k)},onMouseMove:A=>{const k=S(A);k&&E(k)},onMouseUp:j,onMouseLeave:j,onTouchStart:A=>{A.preventDefault();const k=S(A);k&&x(k)},onTouchMove:A=>{A.preventDefault();const k=S(A);k&&E(k)},onTouchEnd:j})}),y.jsxs("div",{style:{display:"flex",gap:"10px",justifyContent:"flex-end"},children:[y.jsx("button",{onClick:O,style:{padding:"8px 16px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:"white",cursor:"pointer"},children:"Clear"}),y.jsx("button",{onClick:F,style:{padding:"8px 16px",border:"1px solid #4CAF50",borderRadius:"4px",backgroundColor:"#4CAF50",color:"white",cursor:"pointer"},children:"Save Signature"}),y.jsx("button",{onClick:n,style:{padding:"8px 16px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:"white",cursor:"pointer"},children:"Cancel"})]})]})})},So=({searchQuery:e,searchResultsCount:n,currentSearchIndex:o,isSearching:s,onChange:t,onKeyDown:a,onPrev:f,onNext:S,onClear:x})=>y.jsx("div",{style:{display:"flex",alignItems:"center",gap:4,marginLeft:"auto",marginRight:"8px",position:"relative"},children:y.jsxs("div",{style:{position:"relative",display:"inline-block"},children:[y.jsx("input",{type:"text",placeholder:"Search in PDF...",value:e,onChange:E=>t(E.target.value),onKeyDown:a,style:{padding:"10px 80px 10px 12px",border:"1px solid #ccc",borderRadius:"4px",fontSize:"14px",width:"200px",outline:"none"}}),y.jsxs("div",{style:{position:"absolute",right:"4px",top:"50%",transform:"translateY(-50%)",display:"flex",alignItems:"center",gap:"2px"},children:[n>0&&y.jsxs(y.Fragment,{children:[y.jsxs("span",{style:{fontSize:"11px",color:"#666",padding:"0 4px",userSelect:"none"},children:[o+1,"/",n]}),y.jsx("button",{onClick:f,disabled:s,style:{padding:"2px 6px",border:"none",borderRadius:"2px",backgroundColor:"transparent",cursor:s?"not-allowed":"pointer",fontSize:"14px",color:s?"#ccc":"#666",display:"flex",alignItems:"center",justifyContent:"center",minWidth:"24px",height:"24px"},title:"Previous (Shift+Enter)",onMouseEnter:E=>{s||(E.currentTarget.style.backgroundColor="#e0e0e0")},onMouseLeave:E=>{E.currentTarget.style.backgroundColor="transparent"},children:y.jsx(se,{icon:"mdi:chevron-up",width:"18",height:"18"})}),y.jsx("button",{onClick:S,disabled:s,style:{padding:"2px 6px",border:"none",borderRadius:"2px",backgroundColor:"transparent",cursor:s?"not-allowed":"pointer",fontSize:"14px",color:s?"#ccc":"#666",display:"flex",alignItems:"center",justifyContent:"center",minWidth:"24px",height:"24px"},title:"Next (Enter)",onMouseEnter:E=>{s||(E.currentTarget.style.backgroundColor="#e0e0e0")},onMouseLeave:E=>{E.currentTarget.style.backgroundColor="transparent"},children:y.jsx(se,{icon:"mdi:chevron-down",width:"18",height:"18"})})]}),e&&y.jsx("button",{onClick:x,style:{padding:"2px 6px",border:"none",borderRadius:"2px",backgroundColor:"transparent",cursor:"pointer",fontSize:"14px",color:"#666",display:"flex",alignItems:"center",justifyContent:"center",minWidth:"24px",height:"24px",marginLeft:"2px"},title:"Clear (Esc)",onMouseEnter:E=>{E.currentTarget.style.backgroundColor="#e0e0e0"},onMouseLeave:E=>{E.currentTarget.style.backgroundColor="transparent"},children:y.jsx(se,{icon:"mdi:close",width:"18",height:"18"})})]})]})}),ko=[{type:"rectangle",icon:"mdi:rectangle-outline",label:"Rectangle"},{type:"ellipse",icon:"mdi:ellipse-outline",label:"Ellipse"},{type:"circle",icon:"mdi:circle-outline",label:"Circle"},{type:"line",icon:"mdi:ray-start-end",label:"Line"},{type:"arrow",icon:"mdi:arrow-top-right",label:"Arrow"}],Co=({isActive:e,onActivate:n})=>y.jsx("button",{onClick:n,style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:e?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Shape Tool",children:y.jsx(se,{icon:"mdi:shape-outline",width:"20",height:"20"})}),To=({isActive:e,selectedShape:n,strokeColor:o,strokeWidth:s,rotation:t,hasSelection:a,onShapeChange:f,onStrokeColorChange:S,onStrokeWidthChange:x,onRotationChange:E,onApplySelectionSettings:j})=>e?y.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"8px 12px",borderBottom:"1px solid #e5e7eb",backgroundColor:"#fafafa",flexWrap:"wrap"},children:[y.jsx("div",{style:{display:"flex",gap:6,alignItems:"center"},children:ko.map(O=>y.jsx("button",{onClick:()=>f(O.type),style:{padding:"6px 10px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:n===O.type?"#cce5ff":"white",cursor:"pointer",display:"flex",alignItems:"center",gap:4,fontSize:"12px",transition:"background-color 0.2s"},title:O.label,children:y.jsx(se,{icon:O.icon,width:"16",height:"16"})},O.type))}),y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[y.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Stroke:"}),y.jsx("input",{type:"color",value:o,onChange:O=>S(O.target.value),style:{width:"40px",height:"32px",border:"1px solid #ccc",borderRadius:"4px",cursor:"pointer"},title:"Stroke Color"})]}),y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[y.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Width:"}),y.jsx("input",{type:"range",min:1,max:20,value:s,onChange:O=>x(Number(O.target.value)),style:{width:"80px"},title:`Stroke Width: ${s}px`}),y.jsxs("span",{style:{fontSize:"12px",minWidth:"30px"},children:[s,"px"]})]}),y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[y.jsx("label",{style:{fontSize:"12px",fontWeight:500},children:"Rotate:"}),y.jsx("input",{type:"range",min:0,max:360,value:t,onChange:O=>E(Number(O.target.value)),style:{width:"80px"},title:`Rotation: ${t}°`}),y.jsxs("span",{style:{fontSize:"12px",minWidth:"40px"},children:[t,"°"]})]}),a&&y.jsx("button",{onClick:j,style:{padding:"6px 12px",border:"none",borderRadius:"4px",backgroundColor:"#2563eb",color:"white",cursor:"pointer",fontSize:"12px",fontWeight:500,transition:"background-color 0.2s"},title:"Apply settings to selected shape",children:"Apply"})]}):null,Po=({annotations:e,setAnnotations:n,highlightColor:o,highlightStrokeWidth:s,generateId:t,pointInRect:a})=>{const[f,S]=h.useState(null),[x,E]=h.useState(null),[j,O]=h.useState(!1),F=h.useCallback((c,D,g)=>{const Y=e.filter(P=>P.page===g&&P.type==="highlight"&&P.x!==void 0&&P.y!==void 0&&P.width&&P.height);for(const P of Y)if(!(P.x===void 0||P.y===void 0||P.width===void 0||P.height===void 0)&&a(c,D,P.x,P.y,P.width,P.height))return P;return null},[e,a]),A=h.useCallback((c,D,g)=>{O(!0),S({x:c,y:D,page:g}),E({x:c,y:D,page:g})},[]),k=h.useCallback((c,D,g)=>{f&&E({x:c,y:D,page:g})},[f]),_=h.useCallback(()=>{if(f&&x&&f.page===x.page&&j){const c=Math.min(f.x,x.x),D=Math.min(f.y,x.y),g=Math.abs(x.x-f.x),Y=Math.abs(x.y-f.y);g>5&&Y>5&&n(P=>[...P,{page:f.page,type:"highlight",x:c,y:D,width:g,height:Y,color:o,strokeWidth:s,id:t()}])}O(!1),S(null),E(null)},[f,x,j,o,s,t,n]),r=h.useCallback(()=>{O(!1),S(null),E(null)},[]),d=h.useCallback((c,D,g,Y,P)=>{g.filter(T=>T.type==="highlight"&&T.x!==void 0&&T.y!==void 0).forEach(T=>{if(T.x!==void 0&&T.y!==void 0&&T.width&&T.height){const L=T.color||o,Q=P(L);T.id===Y&&(c.strokeStyle="rgba(74, 144, 226, 0.8)",c.lineWidth=2,c.strokeRect(T.x-2,T.y-2,T.width+4,T.height+4)),c.fillStyle=`rgba(${Math.round(Q.r*255)}, ${Math.round(Q.g*255)}, ${Math.round(Q.b*255)}, 0.4)`,c.fillRect(T.x,T.y,T.width,T.height)}})},[o]),M=h.useCallback((c,D,g)=>{if(j&&f&&x&&f.page===D&&x.page===D){const Y=Math.min(f.x,x.x),P=Math.min(f.y,x.y),T=Math.abs(x.x-f.x),L=Math.abs(x.y-f.y),Q=g(o);c.strokeStyle=`rgba(${Math.round(Q.r*255)}, ${Math.round(Q.g*255)}, ${Math.round(Q.b*255)}, 0.8)`,c.lineWidth=s,c.strokeRect(Y,P,T,L)}},[j,f,x,o,s]),W=h.useCallback((c,D,g,Y,P,T)=>{if(c.type==="highlight"&&c.x!==void 0&&c.y!==void 0){const L=c.x/Y,Q=g-c.y/Y,R=c.color||o,z=P(R);D.drawRectangle({x:L,y:Q-(c.height??20)/Y,width:(c.width??200)/Y,height:(c.height??20)/Y,color:T(z.r,z.g,z.b),opacity:.4})}},[o]);return{dragStart:f,dragCurrent:x,isDragging:j,findHighlightAtPoint:F,startHighlightDrag:A,updateHighlightDrag:k,finishHighlightDrag:_,cancelHighlightDrag:r,drawHighlights:d,drawHighlightPreview:M,exportHighlightToPdf:W}},Io=({setAnnotations:e,penColor:n,penStrokeWidth:o,generateId:s})=>{const[t,a]=h.useState([]),[f,S]=h.useState(!1),x=h.useCallback(d=>{if(d.length<=1)return;const M=new Map;d.forEach(c=>{M.has(c.page)||M.set(c.page,[]),M.get(c.page).push(c)});const W=[];M.forEach((c,D)=>{c.length>1&&W.push({page:D,type:"pen",points:c.map(g=>({x:g.x,y:g.y})),color:n,strokeWidth:o,id:s()})}),W.length>0&&e(c=>[...c,...W])},[s,n,o,e]),E=h.useCallback(d=>{S(!0),a([d])},[]),j=h.useCallback(d=>{a(M=>M.length===0||M[M.length-1].page!==d.page?M:[...M,d])},[]),O=h.useCallback(()=>{a(d=>(x(d),[])),S(!1)},[x]),F=h.useCallback(()=>{S(!1),a([])},[]),A=h.useCallback(()=>{a([])},[]),k=h.useCallback((d,M,W,c,D)=>{W.filter(g=>g.type==="pen").forEach(g=>{if(!g.points||g.points.length<2)return;const Y=g.color||n,P=g.strokeWidth||o,T=D(Y);if(g.id===c){d.strokeStyle="rgba(74, 144, 226, 0.5)",d.lineWidth=P+4,d.lineCap="round",d.lineJoin="round",d.beginPath(),d.moveTo(g.points[0].x,g.points[0].y);for(let L=1;L<g.points.length;L++)d.lineTo(g.points[L].x,g.points[L].y);d.stroke()}d.strokeStyle=`rgba(${Math.round(T.r*255)}, ${Math.round(T.g*255)}, ${Math.round(T.b*255)}, 0.9)`,d.lineWidth=P,d.lineCap="round",d.lineJoin="round",d.beginPath(),d.moveTo(g.points[0].x,g.points[0].y);for(let L=1;L<g.points.length;L++)d.lineTo(g.points[L].x,g.points[L].y);d.stroke()})},[n,o]),_=h.useCallback((d,M,W)=>{if(t.length>1){const c=t.filter(D=>D.page===M);if(c.length>1){const D=W(n);d.strokeStyle=`rgba(${Math.round(D.r*255)}, ${Math.round(D.g*255)}, ${Math.round(D.b*255)}, 0.9)`,d.lineWidth=o,d.lineCap="round",d.lineJoin="round",d.beginPath(),d.moveTo(c[0].x,c[0].y);for(let g=1;g<c.length;g++)d.lineTo(c[g].x,c[g].y);d.stroke()}}},[t,n,o]),r=h.useCallback((d,M,W,c,D,g)=>{if(d.type==="pen"&&d.points){const Y=d.color||n,P=d.strokeWidth||o,T=D(Y);for(let L=1;L<d.points.length;L++){const Q=d.points[L-1],R=d.points[L];M.drawLine({start:{x:Q.x/c,y:W-Q.y/c},end:{x:R.x/c,y:W-R.y/c},thickness:P/c,color:g(T.r,T.g,T.b),opacity:.9})}}},[n,o]);return{currentPenPath:t,isDrawing:f,startPenDraw:E,addPenPoint:j,finishPenDraw:O,cancelPenDraw:F,clearCurrentPenPath:A,drawPenAnnotations:k,drawLivePenPath:_,exportPenToPdf:r}},jo=({annotations:e,setAnnotations:n,textColor:o,generateId:s,containerRef:t})=>{const[a,f]=h.useState(null),[S,x]=h.useState(""),[E,j]=h.useState(null),O=h.useRef(null),[F,A]=h.useState(null),[k,_]=h.useState(null),r=h.useCallback((R,z,B)=>{const V=e.filter(G=>G.page===B&&G.type==="text"&&G.x!==void 0&&G.y!==void 0),ie=20,J=5;for(const G of V){if(G.x===void 0||G.y===void 0||!G.content)continue;const oe=t.current?.querySelector(`canvas[data-page="${B}"]`);if(!oe)continue;const ae=oe.getContext("2d");if(!ae)continue;ae.font="16px Arial";const m=ae.measureText(G.content).width||100,U=G.x-J,K=G.x+m+J,$=G.y-ie-J,de=G.y+J;if(R>=U&&R<=K&&z>=$&&z<=de)return G}return null},[e,t]),d=h.useCallback((R,z,B)=>{f({x:R,y:z,page:B}),x(""),j(null),setTimeout(()=>{O.current?.focus()},10)},[]),M=h.useCallback(R=>{R.id&&R.x!==void 0&&R.y!==void 0&&R.page!==void 0&&(f({x:R.x,y:R.y,page:R.page}),x(R.content||""),j(R.id),setTimeout(()=>{O.current?.focus(),O.current?.select()},10))},[]),W=h.useCallback(()=>{if(!a){f(null),x(""),j(null);return}E?S.trim()?n(R=>R.map(z=>z.id===E?{...z,content:S,color:o}:z)):n(R=>R.filter(z=>z.id!==E)):S.trim()&&n(R=>[...R,{page:a.page,type:"text",x:a.x,y:a.y,content:S,color:o,id:s()}]),f(null),x(""),j(null)},[a,S,o,s,n,E]),c=h.useCallback(()=>{f(null),x(""),j(null)},[]),D=h.useCallback(R=>{R.key==="Enter"&&a?W():R.key==="Escape"&&c()},[a,W,c]),g=h.useCallback(()=>{a&&(E||S.trim())?W():c()},[a,S,E,W,c]),Y=h.useCallback((R,z,B)=>{B.id&&B.x!==void 0&&B.y!==void 0&&(A(B.id),_({x:R-B.x,y:z-B.y}))},[]),P=h.useCallback((R,z)=>{if(F&&k){const B=R-k.x,V=z-k.y;n(ie=>ie.map(J=>J.id===F?{...J,x:B,y:V}:J))}},[F,k,n]),T=h.useCallback(()=>{A(null),_(null)},[]),L=h.useCallback((R,z,B)=>{B.filter(V=>V.type==="text"&&V.x!==void 0&&V.y!==void 0).forEach(V=>{if(V.x!==void 0&&V.y!==void 0&&V.content){if(V.id===F){R.fillStyle="rgba(74, 144, 226, 0.2)",R.font="16px Arial";const J=R.measureText(V.content).width||100;R.fillRect(V.x-2,V.y-18,J+4,20)}const ie=V.color||o;R.fillStyle=V.id===F?"#4A90E2":ie,R.font="16px Arial",R.fillText(V.content,V.x,V.y)}})},[F,o]),Q=h.useCallback((R,z,B,V,ie,J)=>{if(R.type==="text"&&R.x!==void 0&&R.y!==void 0){const G=R.x/V,oe=B-R.y/V,ae=R.color||o,m=ie(ae);z.drawText(R.content??"",{x:G,y:oe,size:12,color:J(m.r,m.g,m.b)})}},[o]);return{activeTextInput:a,textInput:S,setTextInput:x,textInputRef:O,draggedTextId:F,editingTextId:E,findTextAtPoint:r,startTextInput:d,startTextEdit:M,saveTextAnnotation:W,cancelTextInput:c,handleTextInputKeyDown:D,handleTextInputBlur:g,startTextDrag:Y,updateTextDrag:P,finishTextDrag:T,drawTextAnnotations:L,exportTextToPdf:Q}},Eo=({annotations:e,setAnnotations:n,generateId:o,pointInRect:s,setError:t})=>{const[a,f]=h.useState(null),[S,x]=h.useState(null),E=h.useRef(null),j=h.useCallback((d,M,W)=>{const c=e.filter(D=>D.page===W&&D.type==="image"&&D.x!==void 0&&D.y!==void 0&&D.width&&D.height);for(const D of c)if(!(D.x===void 0||D.y===void 0||D.width===void 0||D.height===void 0)&&s(d,M,D.x,D.y,D.width,D.height))return D;return null},[e,s]),O=h.useCallback(d=>{const M=d.target.files?.[0];if(!M)return;if(!M.type.startsWith("image/")){t("Please select an image file");return}x(M);const W=new FileReader;W.onload=c=>{const D=c.target?.result;f(D)},W.readAsDataURL(M)},[t]),F=h.useCallback(()=>{E.current?.click()},[]),A=h.useCallback((d,M,W)=>{if(!a)return;const c=new Image;c.src=a,c.onload=()=>{let g=c.width,Y=c.height;if(g>200||Y>200){const L=Math.min(200/g,200/Y);g=g*L,Y=Y*L}const P=document.createElement("canvas");P.width=c.width,P.height=c.height;const T=P.getContext("2d");T&&(T.drawImage(c,0,0),P.toBlob(L=>{L&&L.arrayBuffer().then(Q=>{const R=new Uint8Array(Q),z=S?.type||"image/png";n(B=>[...B,{page:W,type:"image",x:d-g/2,y:M-Y/2,width:g,height:Y,imageUrl:a,imageData:R,imageMimeType:z,id:o()}]),f(null),x(null)})},S?.type||"image/png"))}},[a,S,o,n]),k=h.useCallback(()=>{f(null),x(null)},[]),_=h.useCallback((d,M,W,c,D)=>{W.filter(g=>g.type==="image"&&g.x!==void 0&&g.y!==void 0&&g.width&&g.height&&g.imageUrl).forEach(g=>{if(g.x===void 0||g.y===void 0||g.width===void 0||g.height===void 0||!g.imageUrl)return;const Y=new Image;Y.src=g.imageUrl,g.id===c&&(d.strokeStyle="rgba(74, 144, 226, 0.8)",d.lineWidth=2,d.strokeRect(g.x-2,g.y-2,g.width+4,g.height+4)),Y.complete?d.drawImage(Y,g.x,g.y,g.width,g.height):Y.onload=()=>{d.drawImage(Y,g.x,g.y,g.width,g.height),D&&D()}})},[]),r=h.useCallback(async(d,M,W,c,D)=>{if(d.type==="image"&&d.x!==void 0&&d.y!==void 0&&d.width&&d.height&&d.imageData&&d.imageMimeType){const g=d.x/c,Y=W-d.y/c,P=d.width/c,T=d.height/c;try{let L;d.imageMimeType==="image/png"?L=await D.embedPng(d.imageData):d.imageMimeType==="image/jpeg"||d.imageMimeType==="image/jpg"?L=await D.embedJpg(d.imageData):L=await D.embedPng(d.imageData),M.drawImage(L,{x:g,y:Y-T,width:P,height:T})}catch(L){console.error("Error embedding image:",L)}}},[]);return{selectedImage:a,selectedImageFile:S,imageInputRef:E,findImageAtPoint:j,handleImageUpload:O,triggerImageSelect:F,createImageAnnotation:A,clearSelectedImage:k,drawImageAnnotations:_,exportImageToPdf:r}},Mo=({setAnnotations:e,eraserWidth:n,pointInCircle:o,pointInRect:s})=>{const[t,a]=h.useState([]),[f,S]=h.useState(!1),x=h.useCallback((k,_,r)=>{const d=_/2;for(const M of k)if(M.page===r.page){if(r.type==="pen"&&r.points){for(const W of r.points)if(o(W.x,W.y,M.x,M.y,d))return!0}else if(r.type==="highlight"&&r.x!==void 0&&r.y!==void 0&&r.width&&r.height){const W=r.x-d,c=r.y-d,D=r.width+_,g=r.height+_;if(s(M.x,M.y,W,c,D,g))return!0}else if(r.type==="text"&&r.x!==void 0&&r.y!==void 0){const D=r.x-d,g=r.y-20-d,Y=100+_,P=20+_;if(s(M.x,M.y,D,g,Y,P))return!0}else if(r.type==="image"&&r.x!==void 0&&r.y!==void 0&&r.width&&r.height){const W=r.x-d,c=r.y-d,D=r.width+_,g=r.height+_;if(s(M.x,M.y,W,c,D,g))return!0}else if(r.type==="signature"&&r.x!==void 0&&r.y!==void 0&&r.width&&r.height){const W=r.x-d,c=r.y-d,D=r.width+_,g=r.height+_;if(s(M.x,M.y,W,c,D,g))return!0}else if(r.type==="shape"){if(r.points&&r.points.length>=2){const W=r.points.map(T=>T.x),c=r.points.map(T=>T.y),D=Math.min(...W)-d,g=Math.min(...c)-d,Y=Math.max(...W)+d,P=Math.max(...c)+d;if(s(M.x,M.y,D,g,Y-D,P-g))return!0}else if(r.x!==void 0&&r.y!==void 0&&r.width&&r.height){const W=r.x-d,c=r.y-d,D=r.width+_,g=r.height+_;if(s(M.x,M.y,W,c,D,g))return!0}}}return!1},[o,s]),E=h.useCallback(k=>{S(!0),a([k])},[]),j=h.useCallback(k=>{a(_=>{const r=_.length>0?_[_.length-1]:null;if(!r||r.page===k.page){const d=[..._,k];return e(M=>M.filter(W=>W.page!==k.page?!0:!x([k],n,W))),d}return _})},[n,x,e]),O=h.useCallback(()=>{S(!1),t.length>0&&e(k=>k.filter(_=>!x(t,n,_))),a([])},[t,n,x,e]),F=h.useCallback(()=>{S(!1),t.length>0&&e(k=>k.filter(_=>!x(t,n,_))),a([])},[t,n,x,e]),A=h.useCallback((k,_)=>{const r=t.filter(d=>d.page===_);if(r.length>0){k.fillStyle="rgba(255, 0, 0, 0.2)",k.strokeStyle="rgba(255, 0, 0, 0.5)",k.lineWidth=2;for(const d of r)k.beginPath(),k.arc(d.x,d.y,n/2,0,Math.PI*2),k.fill(),k.stroke()}},[t,n]);return{eraserPath:t,isErasing:f,startErasing:E,addEraserPoint:j,finishErasing:O,cancelErasing:F,drawEraserPreview:A,eraserIntersectsAnnotation:x}},Ro=({annotations:e,setAnnotations:n,generateId:o,pointInRect:s,viewportScale:t})=>{const[a,f]=h.useState(null),[S,x]=h.useState(!1),[E,j]=h.useState(!1);h.useEffect(()=>{const c=localStorage.getItem("userSignature");c&&f(c)},[]);const O=h.useCallback((c,D,g)=>{const Y=e.filter(P=>P.page===g&&P.type==="signature"&&P.x!==void 0&&P.y!==void 0&&P.width&&P.height);for(const P of Y)if(!(P.x===void 0||P.y===void 0||P.width===void 0||P.height===void 0)&&s(c,D,P.x,P.y,P.width,P.height))return P;return null},[e,s]),F=h.useCallback(c=>{f(c),localStorage.setItem("userSignature",c),x(!1)},[]),A=h.useCallback(()=>{f(null),localStorage.removeItem("userSignature"),j(!1)},[]),k=h.useCallback(()=>{a?j(!0):x(!0)},[a]),_=h.useCallback(()=>{j(!1)},[]),r=h.useCallback(()=>{j(!1),x(!0)},[]),d=h.useCallback((c,D,g)=>{if(!a)return;const Y=new Image;Y.src=a,Y.onload=()=>{const P=Y.width/Y.height,T=250,L=100;let Q=T*t,R=T*t/P;const z=L*t;R>z&&(R=z,Q=R*P);const B=document.createElement("canvas");B.width=Y.width,B.height=Y.height;const V=B.getContext("2d");V&&(V.drawImage(Y,0,0),B.toBlob(ie=>{ie&&ie.arrayBuffer().then(J=>{const G=new Uint8Array(J);n(oe=>[...oe,{page:g,type:"signature",x:c-Q/2,y:D-R/2,width:Q,height:R,imageUrl:a,imageData:G,imageMimeType:"image/png",id:o()}])})},"image/png"))}},[a,t,o,n]),M=h.useCallback((c,D,g,Y,P)=>{g.filter(T=>T.type==="signature"&&T.x!==void 0&&T.y!==void 0&&T.width&&T.height&&T.imageUrl).forEach(T=>{if(T.x===void 0||T.y===void 0||T.width===void 0||T.height===void 0||!T.imageUrl)return;const L=new Image;L.src=T.imageUrl,T.id===Y&&(c.strokeStyle="rgba(74, 144, 226, 0.8)",c.lineWidth=2,c.strokeRect(T.x-2,T.y-2,T.width+4,T.height+4));const Q=c.imageSmoothingEnabled,R=c.imageSmoothingQuality;c.imageSmoothingEnabled=!0,c.imageSmoothingQuality&&(c.imageSmoothingQuality="high"),L.complete&&T.x!==void 0&&T.y!==void 0&&T.width!==void 0&&T.height!==void 0?(c.drawImage(L,T.x,T.y,T.width,T.height),c.imageSmoothingEnabled=Q,c.imageSmoothingQuality&&(c.imageSmoothingQuality=R)):L.onload=()=>{c.imageSmoothingEnabled=!0,c.imageSmoothingQuality&&(c.imageSmoothingQuality="high"),T.x!==void 0&&T.y!==void 0&&T.width!==void 0&&T.height!==void 0&&c.drawImage(L,T.x,T.y,T.width,T.height),c.imageSmoothingEnabled=Q,c.imageSmoothingQuality&&(c.imageSmoothingQuality=R),P&&P()}})},[]),W=h.useCallback(async(c,D,g,Y,P)=>{if(c.type==="signature"&&c.x!==void 0&&c.y!==void 0&&c.width&&c.height&&c.imageData&&c.imageMimeType){const T=c.x/Y,L=g-c.y/Y,Q=c.width/Y,R=c.height/Y;try{let z;c.imageMimeType==="image/png"?z=await P.embedPng(c.imageData):c.imageMimeType==="image/jpeg"||c.imageMimeType==="image/jpg"?z=await P.embedJpg(c.imageData):z=await P.embedPng(c.imageData),D.drawImage(z,{x:T,y:L-R,width:Q,height:R})}catch(z){console.error("Error embedding signature:",z)}}},[]);return{savedSignature:a,showSignatureModal:S,showSignatureSelectionModal:E,setShowSignatureModal:x,setShowSignatureSelectionModal:j,findSignatureAtPoint:O,saveSignature:F,deleteSignature:A,showSignatureSelection:k,useSavedSignature:_,createNewSignature:r,createSignatureAnnotation:d,drawSignatureAnnotations:M,exportSignatureToPdf:W}},Ao=({pdfDoc:e,viewportScale:n,containerRef:o})=>{const[s,t]=h.useState(""),[a,f]=h.useState([]),[S,x]=h.useState(-1),[E,j]=h.useState(!1),O=h.useCallback(d=>{const M=d.rects[0];if(!M)return;const W=o.current?.querySelector(`canvas[data-page="${d.page}"]`);if(W&&o.current){const c=o.current.getBoundingClientRect(),D=W.getBoundingClientRect(),g=o.current.scrollTop,Y=D.top-c.top+g+M.y-o.current.clientHeight/2;o.current.scrollTo({top:Math.max(0,Y),behavior:"smooth"})}},[o]),F=h.useCallback(()=>{t(""),f([]),x(-1)},[]),A=h.useCallback(async d=>{if(!e){f([]),x(-1);return}const M=d.toLowerCase().trim();if(!M){f([]),x(-1);return}j(!0);const W=[];try{for(let c=1;c<=e.numPages;c++){const D=await e.getPage(c),g=D.getViewport({scale:n}),Y=await D.getTextContent({disableCombineTextItems:!0}),P=[];for(const R of Y.items){if(!("str"in R)||!R.str)continue;const z=R.str,B="transform"in R?R.transform:null,V=typeof R.width=="number"?R.width:0;if(!B||B.length<6)continue;const[,,,ie,J,G]=B,oe=z.length,ae=oe>0?V/oe:0;for(let m=0;m<oe;m++){const U=z[m],K=ae*m,$=J+K,de=$+ae,me=G,te=G+ie,[ue,le]=g.convertToViewportPoint($,me),[Ce]=g.convertToViewportPoint(de,me),[,Te]=g.convertToViewportPoint($,te),ht=Math.min(ue,Ce),be=Math.max(ue,Ce),Ue=Math.min(le,Te),Qe=Math.max(le,Te),Jt={x:ht,y:Ue,width:Math.max(2,be-ht),height:Math.max(2,Qe-Ue)};P.push({char:U,rect:Jt})}if("hasEOL"in R&&R.hasEOL){const[m,U]=g.convertToViewportPoint(J,G);P.push({char:`
7
+ `,rect:{x:m,y:U,width:0,height:0}})}}const L=P.map(R=>R.char).join("").toLowerCase();let Q=L.indexOf(M);for(;Q!==-1;){const R=P.slice(Q,Q+M.length);if(R.length>0){const z=[];let B=[];const V=()=>{if(B.length===0)return;const J=Math.min(...B.map(m=>m.x)),G=Math.min(...B.map(m=>m.y)),oe=Math.max(...B.map(m=>m.x+m.width)),ae=Math.max(...B.map(m=>m.y+m.height));z.push({x:J,y:G,width:Math.max(2,oe-J),height:Math.max(2,ae-G)}),B=[]};R.forEach(({rect:J})=>{if(J.width===0&&J.height===0){V();return}if(B.length===0){B.push(J);return}const G=B[B.length-1];Math.abs(J.y-G.y)<=4||Math.abs(J.y+J.height-(G.y+G.height))<=4||V(),B.push(J)}),V(),z.length===0&&R.length>0&&z.push(R[0].rect),W.push({page:c,rects:z})}Q=L.indexOf(M,Q+1)}}f(W),W.length>0?(x(0),O(W[0])):x(-1)}catch(c){console.error("Error searching PDF:",c),f([]),x(-1)}finally{j(!1)}},[e,n,O]),k=h.useCallback(d=>{t(d),d.trim()?A(d):(f([]),x(-1))},[A]),_=h.useCallback(d=>{if(a.length===0)return;let M;d==="next"?M=(S+1)%a.length:M=S<=0?a.length-1:S-1,x(M),O(a[M])},[S,O,a]),r=h.useCallback(d=>{d.key==="Enter"?(d.preventDefault(),d.shiftKey?_("prev"):_("next")):d.key==="Escape"&&F()},[_,F]);return{searchQuery:s,searchResults:a,currentSearchIndex:S,isSearching:E,handleSearchInputChange:k,handleSearchKeyDown:r,navigateSearchResult:_,clearSearch:F}};typeof window<"u"&&!nt.GlobalWorkerOptions.workerSrc&&(nt.GlobalWorkerOptions.workerSrc="https://cdn.jsdelivr.net/npm/pdfjs-dist@5.4.530/build/pdf.worker.min.mjs");const Do=6,Be=8,Oo=8,Wo=({fileUrl:e,onSave:n,shouldExport:o,onExportComplete:s})=>{const t=h.useRef(null),a=h.useRef(new Map),f=h.useRef(new Map),S=h.useRef(!1),[x,E]=h.useState(null),[j,O]=h.useState([]),[F,A]=h.useState(!0),[k,_]=h.useState(null),[r,d]=h.useState("none"),[M,W]=h.useState(1),[c,D]=h.useState(0),[g,Y]=h.useState("1"),[P,T]=h.useState(null),[L,Q]=h.useState(null),R=h.useRef(null),z=h.useRef(null),B=h.useRef(!1),[V,ie]=h.useState("#000000"),[J,G]=h.useState(1),[oe,ae]=h.useState("#FFFF00"),[m,U]=h.useState(2),[K,$]=h.useState("#000000"),[de,me]=h.useState(20),[te,ue]=h.useState("rectangle"),[le,Ce]=h.useState("#1f2937"),[Te,ht]=h.useState("#fde68a"),[be,Ue]=h.useState(3),[Qe,Jt]=h.useState(0),[pt,Yo]=h.useState(0),[we,fe]=h.useState(null),[Z,Pe]=h.useState(null),ve=h.useRef(null),xe=1.5,Ie=()=>`${Date.now()}-${Math.random().toString(36).substr(2,9)}`,Ve=(i,l,C,v,w,p)=>i>=C&&i<=C+w&&l>=v&&l<=v+p,Lo=(i,l,C,v,w)=>{const p=i-C,b=l-v;return p*p+b*b<=w*w},re=Po({annotations:j,setAnnotations:O,highlightColor:oe,highlightStrokeWidth:m,generateId:Ie,pointInRect:Ve}),{currentPenPath:_o,isDrawing:je,startPenDraw:No,addPenPoint:Xo,finishPenDraw:Gt,cancelPenDraw:Ho,clearCurrentPenPath:Kt,drawPenAnnotations:Fo,drawLivePenPath:zo,exportPenToPdf:Bo}=Io({setAnnotations:O,penColor:V,penStrokeWidth:J,generateId:Ie}),{activeTextInput:Je,textInput:Uo,setTextInput:Qo,textInputRef:Vo,draggedTextId:Ge,findTextAtPoint:_e,startTextInput:Jo,startTextEdit:Go,cancelTextInput:Ko,handleTextInputKeyDown:Zo,handleTextInputBlur:qo,startTextDrag:$o,updateTextDrag:ei,finishTextDrag:Zt,drawTextAnnotations:qt,exportTextToPdf:ti}=jo({annotations:j,setAnnotations:O,textColor:K,generateId:Ie,containerRef:t}),{selectedImage:gt,imageInputRef:ni,findImageAtPoint:Ke,handleImageUpload:oi,triggerImageSelect:$t,createImageAnnotation:ii,drawImageAnnotations:si,exportImageToPdf:ri}=Eo({annotations:j,setAnnotations:O,generateId:Ie,pointInRect:Ve,setError:_}),{eraserPath:ai,isErasing:Ze,startErasing:li,addEraserPoint:ci,finishErasing:di,cancelErasing:en,drawEraserPreview:ui}=Mo({setAnnotations:O,eraserWidth:de,pointInCircle:Lo,pointInRect:Ve}),{savedSignature:Ee,showSignatureModal:fi,showSignatureSelectionModal:hi,setShowSignatureModal:pi,setShowSignatureSelectionModal:gi,findSignatureAtPoint:xt,saveSignature:xi,deleteSignature:yi,showSignatureSelection:mi,useSavedSignature:bi,createNewSignature:wi,createSignatureAnnotation:vi,drawSignatureAnnotations:Si,exportSignatureToPdf:ki}=Ro({annotations:j,setAnnotations:O,generateId:Ie,pointInRect:Ve,viewportScale:xe}),{searchQuery:Ci,searchResults:yt,currentSearchIndex:mt,isSearching:Ti,handleSearchInputChange:Pi,handleSearchKeyDown:Ii,navigateSearchResult:tn,clearSearch:ji}=Ao({pdfDoc:x,viewportScale:xe,containerRef:t}),ye=i=>{const l=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(i);return l?{r:parseInt(l[1],16)/255,g:parseInt(l[2],16)/255,b:parseInt(l[3],16)/255}:{r:1,g:1,b:0}},Me=i=>i.type==="shape"&&!!i.shapeType,pe=i=>Me(i)&&(i.shapeType==="line"||i.shapeType==="arrow"),Ei=i=>Me(i)&&!pe(i),nn=i=>{if(pe(i)&&i.points&&i.points.length>=2){const l=i.points.map(u=>u.x),C=i.points.map(u=>u.y),v=Math.min(...l),w=Math.min(...C),p=Math.max(...l),b=Math.max(...C);return{x:v,y:w,width:p-v,height:b-w}}return{x:i.x??0,y:i.y??0,width:i.width??0,height:i.height??0}},bt=i=>{const l=nn(i);return{x:l.x+l.width/2,y:l.y+l.height/2}},Mi=(i,l)=>{const C=l*Math.PI/180;return{x:i.x*Math.cos(C)-i.y*Math.sin(C),y:i.x*Math.sin(C)+i.y*Math.cos(C)}},Ri=(i,l,C)=>{const v=-C*Math.PI/180,w=i.x-l.x,p=i.y-l.y;return{x:w*Math.cos(v)-p*Math.sin(v),y:w*Math.sin(v)+p*Math.cos(v)}},Ai=(i,l,C)=>{const v=Mi(i,C);return{x:l.x+v.x,y:l.y+v.y}},Di=i=>{if(!Ei(i))return[];const l=i.rotation??0,C=bt(i),v=i.width??0,w=i.height??0,p=v/2,b=w/2,u=[],I={"top-left":{x:-p,y:-b},top:{x:0,y:-b},"top-right":{x:p,y:-b},right:{x:p,y:0},"bottom-right":{x:p,y:b},bottom:{x:0,y:b},"bottom-left":{x:-p,y:b},left:{x:-p,y:0}};return Object.keys(I).forEach(N=>{const H=Ai(I[N],C,l);u.push({handle:N,x:H.x,y:H.y})}),u},Oi=i=>!pe(i)||!i.points||i.points.length<2?[]:[{handle:"line-start",x:i.points[0].x,y:i.points[0].y},{handle:"line-end",x:i.points[i.points.length-1].x,y:i.points[i.points.length-1].y}],Wi=i=>pe(i)?Oi(i):Di(i),Yi=(i,l,C,v,w)=>{const p=v.x-C.x,b=v.y-C.y,u=p*p+b*b;if(u===0)return Math.hypot(i-C.x,l-C.y)<=w;const I=Math.max(0,Math.min(1,((i-C.x)*p+(l-C.y)*b)/u)),N=C.x+I*p,H=C.y+I*b;return Math.hypot(i-N,l-H)<=w},qe=(i,l=1)=>{const{r:C,g:v,b:w}=ye(i);return`rgba(${Math.round(C*255)}, ${Math.round(v*255)}, ${Math.round(w*255)}, ${l})`},Li=(i,l,C)=>{if(!Me(l))return;const v=l.strokeColor||le,w=l.strokeWidth||be,p=l.rotation??0;if(i.save(),C.isDragged&&(i.shadowColor="rgba(37, 99, 235, 0.45)",i.shadowBlur=8),pe(l)){if(l.points&&l.points.length>=2){i.strokeStyle=qe(v,.95),i.lineWidth=w,i.lineCap="round",i.lineJoin="round",i.beginPath(),i.moveTo(l.points[0].x,l.points[0].y);for(let b=1;b<l.points.length;b++)i.lineTo(l.points[b].x,l.points[b].y);if(i.stroke(),l.shapeType==="arrow"){const b=l.points[l.points.length-2],u=l.points[l.points.length-1],I=Math.atan2(u.y-b.y,u.x-b.x),N=Math.max(12,w*3);i.beginPath(),i.moveTo(u.x,u.y),i.lineTo(u.x-N*Math.cos(I-Math.PI/6),u.y-N*Math.sin(I-Math.PI/6)),i.moveTo(u.x,u.y),i.lineTo(u.x-N*Math.cos(I+Math.PI/6),u.y-N*Math.sin(I+Math.PI/6)),i.stroke()}}}else{if(l.x===void 0||l.y===void 0||!l.width||!l.height){i.restore();return}const b=bt(l);if(i.translate(b.x,b.y),i.rotate(p*Math.PI/180),i.translate(-b.x,-b.y),l.shapeType==="rectangle")i.strokeStyle=qe(v,.95),i.lineWidth=w,i.strokeRect(l.x,l.y,l.width,l.height);else if(l.shapeType==="ellipse"||l.shapeType==="circle"){const u=l.shapeType==="circle"?Math.min(l.width,l.height)/2:(l.width??0)/2,I=l.shapeType==="circle"?u:(l.height??0)/2,N=l.x+(l.width??0)/2,H=l.y+(l.height??0)/2;i.beginPath(),i.ellipse(N,H,u,I,0,0,Math.PI*2),i.strokeStyle=qe(v,.95),i.lineWidth=w,i.stroke()}}if(C.isSelected){i.shadowColor="transparent",i.lineWidth=1,i.strokeStyle="rgba(37, 99, 235, 0.9)",i.setLineDash([4,3]);const b=nn(l);i.strokeRect(b.x-4,b.y-4,b.width+8,b.height+8),Wi(l).forEach(I=>{i.fillStyle="white",i.strokeStyle="rgba(37, 99, 235, 0.95)",i.lineWidth=1,i.beginPath(),i.rect(I.x-Be/2,I.y-Be/2,Be,Be),i.fill(),i.stroke()})}i.restore()},_i=(i,l)=>{if(!l)return;const C=l.currentX-l.startX,v=l.currentY-l.startY,w=Math.abs(C),p=Math.abs(v),b=C>=0?l.startX:l.currentX,u=v>=0?l.startY:l.currentY;if(i.save(),i.strokeStyle=qe(l.settings.strokeColor,.9),i.lineWidth=l.settings.strokeWidth,i.setLineDash([6,4]),l.settings.type==="arrow"||l.settings.type==="line"){i.beginPath(),i.moveTo(l.startX,l.startY),i.lineTo(l.currentX,l.currentY),i.stroke(),i.restore();return}if(l.settings.type==="circle"){const I=Math.max(w,p),N=(l.startX+l.currentX)/2,H=(l.startY+l.currentY)/2;i.beginPath(),i.ellipse(N,H,I/2,I/2,0,0,Math.PI*2),i.stroke(),i.restore();return}if(l.settings.type==="ellipse"){const I=(l.startX+l.currentX)/2,N=(l.startY+l.currentY)/2;i.beginPath(),i.ellipse(I,N,w/2,p/2,0,0,Math.PI*2),i.stroke(),i.restore();return}i.strokeRect(b,u,w,p),i.restore()},on=(i,l,C)=>{const v=j.filter(w=>w.page===C&&w.type==="shape");for(const w of v){if(!Me(w))continue;if(pe(w)&&w.points&&w.points.length>=2){const H=w.points[0],X=w.points[w.points.length-1];if(Yi(i,l,H,X,Oo))return w;continue}if(w.x===void 0||w.y===void 0||!w.width||!w.height)continue;const p=w.rotation??0,b=bt(w),u=Ri({x:i,y:l},b,p),I=(w.width??0)/2,N=(w.height??0)/2;if(w.shapeType==="ellipse"){if(u.x*u.x/(I?I*I:1)+u.y*u.y/(N?N*N:1)<=1)return w}else if(w.shapeType==="circle"){const H=I;if(u.x*u.x+u.y*u.y<=H*H)return w}else if(Math.abs(u.x)<=I&&Math.abs(u.y)<=N)return w}return null},$e=re.findHighlightAtPoint,et=(i,l,C)=>{const v=j.filter(p=>p.page===C&&p.type==="pen"&&p.points&&p.points.length>0),w=10;for(const p of v)if(p.points)for(let b=0;b<p.points.length-1;b++){const u=p.points[b],I=p.points[b+1],N=I.x-u.x,H=I.y-u.y,X=Math.sqrt(N*N+H*H);if(X===0){if(Math.sqrt((i-u.x)**2+(l-u.y)**2)<=w)return p}else{const q=Math.max(0,Math.min(1,((i-u.x)*N+(l-u.y)*H)/(X*X))),ee=u.x+q*N,ne=u.y+q*H;if(Math.sqrt((i-ee)**2+(l-ne)**2)<=w)return p}}return null};h.useEffect(()=>{e&&(async()=>{try{A(!0);const C=await nt.getDocument(e).promise;E(C),D(C.numPages),W(1),Y("1")}catch(l){console.error("Error loading PDF:",l),_("Failed to load PDF")}finally{A(!1)}})()},[e]),h.useEffect(()=>{(async()=>{if(!(!x||!t.current)&&!S.current){S.current=!0;try{const l=t.current,C=l.querySelectorAll("canvas");if(C.length===x.numPages){Array.from(C).forEach(w=>{w.style.display="block"}),he(!1);return}a.current.forEach(w=>{if(w&&w.cancel){w.promise.catch(p=>{p?.name!=="RenderingCancelledException"&&console.warn("Render task error:",p)});try{w.cancel()}catch{}}}),a.current.clear(),f.current.clear(),l.innerHTML="";const v=l.clientWidth;for(let w=1;w<=x.numPages;w++)try{const p=await x.getPage(w),b=p.getViewport({scale:xe}),u=document.createElement("canvas"),I=u.getContext("2d");if(!I)continue;u.width=b.width,u.height=b.height;const N=v-20,H=Math.min(1,N/b.width);u.style.display="block",u.style.margin="0 auto 10px auto",u.style.border="1px solid #ddd",u.style.width=`${b.width*H}px`,u.style.height=`${b.height*H}px`,u.dataset.page=String(w),u.dataset.scale=String(H),l.appendChild(u);const X=p.render({canvasContext:I,viewport:b});a.current.set(w,X),X.promise.catch(q=>{q?.name!=="RenderingCancelledException"&&console.error(`Error rendering page ${w}:`,q)});try{await X.promise;const q=I.getImageData(0,0,u.width,u.height);f.current.set(w,q)}catch(q){q?.name!=="RenderingCancelledException"&&console.error(`Error rendering page ${w}:`,q)}}catch(p){console.error(`Error processing page ${w}:`,p)}he(!1)}finally{S.current=!1}}})()},[x]),h.useEffect(()=>{const i=()=>{if(!t.current||!x)return;const l=t.current,C=l.clientWidth,v=l.querySelectorAll("canvas");Array.from(v).forEach(w=>{if(!Number(w.dataset.page))return;const b=w.width,u=w.height,I=C-20,N=Math.min(1,I/b);w.style.width=`${b*N}px`,w.style.height=`${u*N}px`,w.dataset.scale=String(N)})};return window.addEventListener("resize",i),i(),()=>{window.removeEventListener("resize",i)}},[x]),h.useEffect(()=>{if(!t.current)return;const i=t.current.querySelectorAll("canvas");Array.from(i).forEach(C=>{C.style.display="block"});const l=Array.from(i).find(C=>Number(C.dataset.page)===M);if(l&&t.current){const C=t.current.getBoundingClientRect(),v=l.getBoundingClientRect(),w=t.current.scrollTop,p=v.top-C.top+w-t.current.clientHeight/2+v.height/2;t.current.scrollTo({top:Math.max(0,p),behavior:"smooth"})}he(!1),Y(String(M))},[M]),h.useEffect(()=>{const i=l=>{l.target instanceof HTMLInputElement||l.target instanceof HTMLTextAreaElement||(l.key==="ArrowLeft"||l.key==="PageUp"?(l.preventDefault(),W(C=>Math.max(1,C-1))):(l.key==="ArrowRight"||l.key==="PageDown")&&(l.preventDefault(),W(C=>Math.min(c,C+1))))};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[c]);const he=(i=!1)=>{if(!t.current||!x)return;const l=t.current.querySelectorAll("canvas");Array.from(l).forEach(C=>{const v=C.getContext("2d"),w=Number(C.dataset.page);if(!v)return;const p=a.current.get(w);if(p&&p.cancel){p.promise.catch(I=>{I?.name!=="RenderingCancelledException"&&console.warn(`Render task error for page ${w}:`,I)});try{p.cancel()}catch{}a.current.delete(w)}const b=f.current.get(w);if(b)v.putImageData(b,0,0);else return;const u=j.filter(I=>I.page===w);re.drawHighlights(v,w,u,P,ye),qt(v,w,u),Fo(v,w,u,P,ye),r==="pen"&&zo(v,w,ye),si(v,w,u,P,()=>{he(!1)}),Si(v,w,u,P,()=>{he(!1)}),u.filter(I=>I.type==="shape").forEach(I=>{Li(v,I,{isDragged:P===I.id,isSelected:we===I.id})}),Z&&Z.page===w&&i&&_i(v,Z),i&&r==="highlight"&&re.drawHighlightPreview(v,w,ye),r==="eraser"&&ui(v,w),yt.forEach((I,N)=>{if(I.page!==w)return;const H=N===mt;I.rects.forEach(X=>{v.fillStyle=H?"rgba(255, 255, 0, 0.5)":"rgba(255, 255, 0, 0.3)",v.fillRect(X.x,X.y,X.width,X.height),H&&(v.strokeStyle="rgba(255, 200, 0, 0.8)",v.lineWidth=2,v.strokeRect(X.x-1,X.y-1,X.width+2,X.height+2))})})})};h.useEffect(()=>{he(!0)},[re.dragCurrent,re.isDragging,_o,ai,Ge,P,qt,Z]),h.useEffect(()=>{he(!1)},[we]),h.useEffect(()=>{!re.isDragging&&!je&&!Ze&&he(!1)},[j,re.isDragging,je,Ze]),h.useEffect(()=>{we&&!j.some(i=>i.id===we)&&fe(null)},[j,we]),h.useEffect(()=>{he(!1)},[yt,mt]),h.useEffect(()=>{r!=="pen"&&Ho(),r!=="eraser"&&en(),r!=="text"&&Ko(),r!=="text"&&r!=="none"&&Zt(),r!=="pen"&&r!=="highlight"&&r!=="image"&&r!=="signature"&&r!=="none"&&(T(null),Q(null),R.current=null,z.current=null)},[r]),h.useEffect(()=>{r==="pen"&&!je&&Kt()},[J,V,r,je,Kt]);const Ni=()=>({type:te,strokeColor:le,fillColor:Te,strokeWidth:be,fillOpacity:Qe,rotation:pt}),Xi=(i,l,C)=>{Pe({page:C,startX:i,startY:l,currentX:i,currentY:l,settings:Ni()}),fe(null)},Hi=(i,l,C)=>{Pe(v=>!v||v.page!==C?v:{...v,currentX:i,currentY:l})},Fi=()=>{Pe(null)},zi=()=>{if(!Z)return;const i=Z.currentX-Z.startX,l=Z.currentY-Z.startY;if(Math.hypot(i,l)<Do){Pe(null);return}const C=Z.settings,v=Ie(),w={page:Z.page,type:"shape",shapeType:C.type,strokeColor:C.strokeColor,fillColor:C.fillColor,strokeWidth:C.strokeWidth,fillOpacity:0,rotation:C.rotation,id:v};if(C.type==="arrow"||C.type==="line")w.points=[{x:Z.startX,y:Z.startY},{x:Z.currentX,y:Z.currentY}];else{const p=Math.min(Z.startX,Z.currentX),b=Math.min(Z.startY,Z.currentY);let u=Math.abs(i),I=Math.abs(l),N=p,H=b;if(C.type==="circle"){const X=Math.max(u,I),q=(Z.startX+Z.currentX)/2,ee=(Z.startY+Z.currentY)/2;u=X,I=X,N=q-X/2,H=ee-X/2}w.x=N,w.y=H,w.width=u,w.height=C.type==="circle"?u:I}O(p=>[...p,w]),Pe(null),fe(v)};h.useEffect(()=>{r!=="shape"&&Z&&Pe(null)},[r,Z]);const Bi=()=>{we&&O(i=>i.map(l=>{if(l.id!==we||l.type!=="shape")return l;const C={...l,strokeColor:le,strokeWidth:be,rotation:pt};return pe(l)||(C.fillColor=Te,C.fillOpacity=0),C}))},Ui=(i,l,C,v,w,p)=>{if(!Me(i))return;const b=i.strokeColor||le,u=(i.strokeWidth||be)/v,I=w(b);if(!pe(i)&&i.x!==void 0&&i.y!==void 0&&i.width&&i.height){const N=i.fillOpacity??Qe,H=i.fillColor||Te,X=w(H),q=i.width/v,ee=i.height/v,ne=i.x/v,ce=C-(i.y+i.height)/v;if(i.shapeType==="ellipse"||i.shapeType==="circle"){const Se=(i.x+i.width/2)/v,wt=C-(i.y+i.height/2)/v,tt=i.shapeType==="circle"?q/2:(i.width??0)/(2*v),$i=i.shapeType==="circle"?q/2:(i.height??0)/(2*v);l.drawEllipse({x:Se,y:wt,xScale:tt,yScale:$i,color:N>0?p(X.r,X.g,X.b):void 0,opacity:N>0?N:void 0,borderColor:p(I.r,I.g,I.b),borderWidth:u,borderOpacity:.95})}else l.drawRectangle({x:ne,y:ce,width:q,height:ee,color:N>0?p(X.r,X.g,X.b):void 0,opacity:N>0?N:void 0,borderColor:p(I.r,I.g,I.b),borderWidth:u,borderOpacity:.95});return}if(i.points&&i.points.length>=2){const N=i.points[0],H=i.points[i.points.length-1],X=ee=>({x:ee.x/v,y:C-ee.y/v}),q=X(H);for(let ee=1;ee<i.points.length;ee++){const ne=X(i.points[ee-1]),ce=X(i.points[ee]);l.drawLine({start:ne,end:ce,thickness:u,color:p(I.r,I.g,I.b),opacity:.95})}if(i.shapeType==="arrow"){const ee=Math.atan2(H.y-N.y,H.x-N.x),ne=Math.max(12,(i.strokeWidth||be)*3),ce=tt=>({x:H.x-ne*Math.cos(ee+tt),y:H.y-ne*Math.sin(ee+tt)}),Se=X(ce(-Math.PI/6)),wt=X(ce(Math.PI/6));l.drawLine({start:q,end:Se,thickness:u,color:p(I.r,I.g,I.b),opacity:.95}),l.drawLine({start:q,end:wt,thickness:u,color:p(I.r,I.g,I.b),opacity:.95})}}},Qi=i=>{const l=i.target;if(!(l instanceof HTMLCanvasElement))return;const C=l.getBoundingClientRect(),v=Number(l.dataset.page),w=Number(l.dataset.scale)||1,p=(i.clientX-C.left)/w,b=(i.clientY-C.top)/w;if(ve.current=null,r==="none"||r==="text"||r==="pen"||r==="highlight"||r==="image"||r==="signature"||r==="shape"){if(r==="image"||r==="none"){const u=Ke(p,b,v);if(u&&u.id&&u.x!==void 0&&u.y!==void 0){fe(null),T(u.id),Q({x:p-u.x,y:b-u.y});return}}if(r==="signature"||r==="none"){const u=xt(p,b,v);if(u&&u.id&&u.x!==void 0&&u.y!==void 0){fe(null),T(u.id),Q({x:p-u.x,y:b-u.y});return}}if(r==="text"||r==="none"){const u=_e(p,b,v);if(u){fe(null),$o(p,b,u);return}}if(r==="highlight"||r==="none"){const u=$e(p,b,v);if(u&&u.id&&u.x!==void 0&&u.y!==void 0){fe(null),T(u.id),Q({x:p-u.x,y:b-u.y});return}}if(r==="pen"||r==="none"){const u=et(p,b,v);if(u&&u.id&&u.points&&u.points.length>0){fe(null);let I=u.points[0].x,N=u.points[0].y,H=u.points[0].x,X=u.points[0].y;for(const ne of u.points)I=Math.min(I,ne.x),N=Math.min(N,ne.y),H=Math.max(H,ne.x),X=Math.max(X,ne.y);const q=(I+H)/2,ee=(N+X)/2;T(u.id),Q({x:p-q,y:b-ee}),R.current={x:q,y:ee},z.current=u.points.map(ne=>({...ne}));return}}if(r==="shape"||r==="none"){const u=on(p,b,v);if(u&&u.id){fe(u.id),pe(u)&&u.points?(T(u.id),Q(null),ve.current={shapeId:u.id,pointerStart:{x:p,y:b},originalPoints:u.points.map(I=>({...I}))}):u.x!==void 0&&u.y!==void 0&&u.width!==void 0&&u.height!==void 0&&(T(u.id),Q({x:p-u.x,y:b-u.y}));return}else r==="shape"&&fe(null)}}r==="pen"?No({x:p,y:b,page:v}):r==="eraser"?li({x:p,y:b,page:v}):r==="highlight"?re.startHighlightDrag(p,b,v):r==="shape"&&Xi(p,b,v)},Vi=i=>{const l=i.target;if(!(l instanceof HTMLCanvasElement))return;const C=l.getBoundingClientRect(),v=Number(l.dataset.page),w=Number(l.dataset.scale)||1,p=(i.clientX-C.left)/w,b=(i.clientY-C.top)/w;if(Ge){ei(p,b);return}if(P){const u=j.find(I=>I.id===P);if(u){if(u.type==="highlight"&&u.x!==void 0&&u.y!==void 0&&L){const I=p-L.x,N=b-L.y;O(H=>H.map(X=>X.id===P?{...X,x:I,y:N}:X))}else if(u.type==="pen"&&u.points&&R.current&&z.current&&L){const I=R.current,N=z.current,H=p-L.x,X=b-L.y,q=H-I.x,ee=X-I.y,ne=N.map(ce=>({x:ce.x+q,y:ce.y+ee}));O(ce=>ce.map(Se=>Se.id===P?{...Se,points:ne}:Se))}else if(u.type==="shape"&&Me(u)){if(pe(u)&&u.points&&ve.current&&ve.current.shapeId===P){const{pointerStart:I,originalPoints:N}=ve.current,H=p-I.x,X=b-I.y,q=N.map(ee=>({x:ee.x+H,y:ee.y+X}));O(ee=>ee.map(ne=>ne.id===P?{...ne,points:q}:ne))}else if(u.x!==void 0&&u.y!==void 0&&L){const I=p-L.x,N=b-L.y;O(H=>H.map(X=>X.id===P?{...X,x:I,y:N}:X))}}else if(u.type==="image"&&u.x!==void 0&&u.y!==void 0&&L){const I=p-L.x,N=b-L.y;O(H=>H.map(X=>X.id===P?{...X,x:I,y:N}:X))}else if(u.type==="signature"&&u.x!==void 0&&u.y!==void 0&&L){const I=p-L.x,N=b-L.y;O(H=>H.map(X=>X.id===P?{...X,x:I,y:N}:X))}}return}if(r==="shape"&&Z){Hi(p,b,v);return}r==="pen"&&je?Xo({x:p,y:b,page:v}):r==="eraser"&&Ze?ci({x:p,y:b,page:v}):r==="highlight"&&re.updateHighlightDrag(p,b,v)},Ji=()=>{if(Ge){Zt(),B.current=!0,setTimeout(()=>{B.current=!1},100);return}if(P){T(null),Q(null),R.current=null,z.current=null,ve.current=null,B.current=!0,setTimeout(()=>{B.current=!1},100);return}r==="pen"?Gt():r==="eraser"?di():r==="highlight"?re.finishHighlightDrag():re.isDragging?(re.cancelHighlightDrag(),he(!1)):r==="shape"&&Z&&zi()},Gi=()=>{re.isDragging&&(re.cancelHighlightDrag(),he(!1)),je&&Gt(),Ze&&en(),Z&&Fi(),P&&(T(null),Q(null),R.current=null,z.current=null,ve.current=null)},Ki=i=>{const l=i.target;if(!(l instanceof HTMLCanvasElement))return;const C=l.getBoundingClientRect(),v=Number(l.dataset.page),w=Number(l.dataset.scale)||1,p=(i.clientX-C.left)/w,b=(i.clientY-C.top)/w,u=_e(p,b,v);if(u){i.preventDefault(),i.stopPropagation(),Go(u);return}},Zi=i=>{if(Ge||P||B.current||re.isDragging)return;const l=i.target;if(!(l instanceof HTMLCanvasElement))return;const C=l.getBoundingClientRect(),v=Number(l.dataset.page),w=Number(l.dataset.scale)||1,p=(i.clientX-C.left)/w,b=(i.clientY-C.top)/w;if((r==="shape"||r==="none")&&(on(p,b,v)||fe(null)),r==="text"){if(_e(p,b,v))return;const I=$e(p,b,v),N=et(p,b,v),H=Ke(p,b,v);if(I||N||H)return;Jo(p,b,v)}else if(r==="image"&&gt){const u=_e(p,b,v),I=$e(p,b,v),N=et(p,b,v),H=Ke(p,b,v),X=xt(p,b,v);if(u||I||N||H||X)return;ii(p,b,v),d("none")}else if(r==="signature"&&Ee){const u=_e(p,b,v),I=$e(p,b,v),N=et(p,b,v),H=Ke(p,b,v),X=xt(p,b,v);if(u||I||N||H||X)return;vi(p,b,v),d("none")}},qi=async()=>{try{const i=await fetch(e).then(p=>p.arrayBuffer()),l=await Re.PDFDocument.load(i);for(const p of j){const b=l.getPages()[p.page-1],u=b.getHeight();p.type==="highlight"&&re.exportHighlightToPdf(p,b,u,xe,ye,Re.rgb),p.type==="text"&&ti(p,b,u,xe,ye,Re.rgb),p.type==="pen"&&Bo(p,b,u,xe,ye,Re.rgb),p.type==="image"&&await ri(p,b,u,xe,l),p.type==="signature"&&await ki(p,b,u,xe,l),p.type==="shape"&&Ui(p,b,u,xe,ye,Re.rgb)}const C=await l.save(),v=C.buffer instanceof ArrayBuffer?C.buffer.slice(C.byteOffset,C.byteOffset+C.byteLength):new Uint8Array(C).buffer,w=new Blob([v],{type:"application/pdf"});if(n){const p=new File([w],"edited.pdf",{type:"application/pdf"});n(p)}}catch(i){console.error(i),_("Failed to export PDF")}};return h.useEffect(()=>{o&&(qi(),s&&s())},[o]),F?y.jsx("div",{children:"Loading PDF..."}):k?y.jsx("div",{style:{color:"red"},children:k}):y.jsxs("div",{children:[y.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",padding:12,borderBottom:"1px solid #e5e7eb",flexWrap:"wrap"},children:[y.jsx(ao,{isActive:r==="highlight",onActivate:()=>d("highlight")}),y.jsx(co,{isActive:r==="pen",onActivate:()=>d("pen")}),y.jsx(Co,{isActive:r==="shape",onActivate:()=>d("shape")}),y.jsx(fo,{isActive:r==="text",onActivate:()=>d("text")}),y.jsx(po,{isActive:r==="image",onActivate:()=>{gt?d("image"):$t()}}),y.jsx(xo,{isActive:r==="eraser",onActivate:()=>d("eraser")}),y.jsx(mo,{isActive:r==="signature",onActivate:()=>{mi(),d("signature")}}),y.jsx("button",{onClick:()=>d("none"),style:{padding:"8px 12px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:r==="none"?"#e3f2fd":"white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},title:"Select",children:y.jsx(se,{icon:"mdi:cursor-pointer",width:"20",height:"20"})}),y.jsx("input",{ref:ni,type:"file",accept:"image/*",onChange:i=>{oi(i),d("image")},style:{display:"none"}}),c>0&&y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginLeft:"auto"},children:[y.jsx("button",{onClick:()=>W(i=>Math.max(1,i-1)),disabled:M===1,style:{padding:"2px 4px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:M===1?"#f3f4f6":"white",cursor:M===1?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"center",opacity:M===1?.5:1,minWidth:"24px",height:"24px"},title:"Previous Page",children:y.jsx(se,{icon:"mdi:chevron-left",width:"12",height:"12"})}),y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[y.jsx("input",{type:"number",min:1,max:c,value:g,onChange:i=>{Y(i.target.value)},onBlur:i=>{const l=parseInt(i.target.value);isNaN(l)||l<1?Y(String(M)):l>c?(Y(String(c)),W(c)):(W(l),Y(String(l)))},onKeyDown:i=>{i.key==="Enter"&&i.currentTarget.blur()},style:{width:"30px",padding:"2px 4px",border:"1px solid #ccc",borderRadius:"4px",textAlign:"center",fontSize:"12px"}}),y.jsxs("span",{style:{fontSize:"12px",color:"#666"},children:["/ ",c]})]}),y.jsx("button",{onClick:()=>W(i=>Math.min(c,i+1)),disabled:M===c,style:{padding:"2px 4px",border:"1px solid #ccc",borderRadius:"4px",backgroundColor:M===c?"#f3f4f6":"white",cursor:M===c?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"center",opacity:M===c?.5:1,minWidth:"24px",height:"24px"},title:"Next Page",children:y.jsx(se,{icon:"mdi:chevron-right",width:"12",height:"12"})})]}),y.jsx(So,{searchQuery:Ci,searchResultsCount:yt.length,currentSearchIndex:mt,isSearching:Ti,onChange:Pi,onKeyDown:Ii,onPrev:()=>tn("prev"),onNext:()=>tn("next"),onClear:ji})]}),r==="highlight"&&y.jsx(lo,{isActive:r==="highlight",highlightColor:oe,highlightStrokeWidth:m,onColorChange:ae,onStrokeWidthChange:U}),r==="pen"&&y.jsx(uo,{isActive:r==="pen",penColor:V,penStrokeWidth:J,onColorChange:ie,onStrokeWidthChange:G}),r==="text"&&y.jsx(ho,{isActive:r==="text",textColor:K,onColorChange:$}),r==="eraser"&&y.jsx(yo,{isActive:r==="eraser",eraserWidth:de,onWidthChange:me}),r==="image"&&y.jsx(go,{isActive:r==="image",hasSelectedImage:!!gt,onImageSelect:$t}),r==="signature"&&y.jsx(bo,{isActive:r==="signature",hasSavedSignature:!!Ee}),r==="shape"&&y.jsx(To,{isActive:r==="shape",selectedShape:te,strokeColor:le,strokeWidth:be,rotation:pt,hasSelection:!!we,onShapeChange:i=>ue(i),onStrokeColorChange:Ce,onStrokeWidthChange:Ue,onRotationChange:Yo,onApplySelectionSettings:Bi}),y.jsx("div",{ref:t,style:{height:"80vh",overflowY:"auto",overflowX:"hidden",border:"1px solid #ccc",position:"relative",cursor:r==="pen"?`url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 24 24' fill='none'><path d='M3 21l1.5-4.5L15 6l3 3-10.5 10.5L3 21z' fill='%23FFD600' stroke='%23000' stroke-width='1'/><path d='M14.5 5.5l4 4' stroke='%23000' stroke-width='1.2'/></svg>") 0 24, auto`:r==="highlight"?"crosshair":r==="text"?"text":r==="shape"?"crosshair":r==="none"?"move":r==="eraser"?`url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='28' height='28' viewBox='0 0 24 24' fill='%23f8f8f8' stroke='%23000' stroke-width='1.5'><path d='M3 16l8-8 5 5-8 8H3z'/><path d='M12 8l3-3 4 4-3 3' stroke='%23000' stroke-width='1.2'/></svg>") 8 20, auto`:r==="image"||r==="signature"&&Ee?"crosshair":"default"},onMouseDown:Qi,onMouseMove:Vi,onMouseUp:Ji,onMouseLeave:Gi,onClick:Zi,onDoubleClick:Ki,children:Je&&(()=>{const i=t.current?.querySelector(`canvas[data-page="${Je.page}"]`);if(!i)return null;const l=i.offsetLeft,C=i.offsetTop,v=Number(i.dataset.scale)||1,w=l+Je.x*v,p=C+Je.y*v-20;return y.jsx("input",{ref:Vo,type:"text",value:Uo,onChange:b=>Qo(b.target.value),onKeyDown:Zo,onBlur:qo,onClick:b=>b.stopPropagation(),onMouseDown:b=>b.stopPropagation(),placeholder:"Type text here...",style:{position:"absolute",left:`${w}px`,top:`${p}px`,padding:"4px 8px",border:"2px solid #4A90E2",borderRadius:"4px",fontSize:"16px",fontFamily:"Arial",backgroundColor:"white",boxShadow:"0 2px 8px rgba(0,0,0,0.2)",outline:"none",minWidth:"200px",zIndex:1e3},autoFocus:!0})})()}),hi&&Ee&&y.jsx(wo,{savedSignature:Ee,onUseSaved:()=>{bi(),d("signature")},onCreateNew:wi,onDelete:()=>{yi(),d("none")},onClose:()=>gi(!1)}),fi&&y.jsx(vo,{onSave:i=>{xi(i),d("signature")},onClear:()=>{},onClose:()=>{pi(!1),Ee||d("none")}})]})};ge.PdfEditor=Wo,Object.defineProperty(ge,Symbol.toStringTag,{value:"Module"})}));