@datagrok/eda 1.1.1 → 1.1.2
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.
- package/CHANGELOG.md +4 -7
- package/dist/package.js +1 -1
- package/package.json +1 -1
- package/src/package.ts +4 -4
package/dist/package.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var eda;(()=>{"use strict";var t={m:{},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},u:t=>t+".js"};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var e;t.g.importScripts&&(e=t.g.location+"");var n=t.g.document;if(!e&&n&&(n.currentScript&&(e=n.currentScript.src),!e)){var r=n.getElementsByTagName("script");if(r.length)for(var a=r.length-1;a>-1&&!e;)e=r[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=e})(),t.b=document.baseURI||self.location.href;var e={};t.r(e),t.d(e,{PCA:()=>Pe,PLS:()=>Le,_package:()=>ke,applyLinearKernelSVM:()=>Re,applyPolynomialKernelSVM:()=>Me,applyRBFkernelSVM:()=>Te,applySigmoidKernelSVM:()=>$e,demoMultivariateAnalysis:()=>Ee,info:()=>De,init:()=>Fe,testDataLinearNonSeparable:()=>xe,testDataLinearSeparable:()=>Ie,trainLinearKernelSVM:()=>Ve,trainPolynomialKernelSVM:()=>Be,trainRBFkernelSVM:()=>Ne,trainSigmoidKernelSVM:()=>Oe});const n=grok,r=ui,a=DG;var o;function i(t){return e=this,n=void 0,a=function*(){yield new Promise((e=>setTimeout(e,t)))},new((r=void 0)||(r=Promise))((function(t,o){function i(t){try{l(a.next(t))}catch(t){o(t)}}function s(t){try{l(a.throw(t))}catch(t){o(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r((function(t){t(n)}))).then(i,s)}l((a=a.apply(e,n||[])).next())}));var e,n,r,a}!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(o||(o={}));var s=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};class l{constructor(t,e,n=!1,a){var o;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._stopStartBtn=r.button(r.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=r.button(r.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=r.button(r.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._closeBtn=r.button(r.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=t,this.description=e,this._isAutomatic=n,this._autoStartFirstStep=null!==(o=null==a?void 0:a.autoStartFirstStep)&&void 0!==o&&o,this._progress.max=0,this._progress.value=1,l.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=r.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(r.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let n=r.iconFA("clock");this._isAutomatic||0===e&&(n=r.iconFA("play",(()=>this._nextStep()),"Next step"),n.className="grok-icon fas fa-play");const a=r.div(this._steps[e].name,"grok-tutorial-entry-instruction"),o=r.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),i=r.divH([n,a],"grok-tutorial-entry");this._activity.append(i,o)}}_initRoot(){var t,e,r;n.shell.windows.showContextPanel=!0,n.shell.windows.showHelp=!1;const o=Array.from(n.shell.dockManager.rootNode.children)[0];this._node=n.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,o,""),(null===(e=null===(t=o.parent.container.containerElement.firstElementChild)||void 0===t?void 0:t.lastElementChild)||void 0===e?void 0:e.classList.contains("tab-handle-list-container"))&&(null===(r=o.parent.container.containerElement.firstElementChild)||void 0===r||r.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var t,e;return s(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const n=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],a=this._activity.getElementsByClassName("grok-icon")[this._currentStep],o=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];a.className="grok-icon far fa-spinner-third fa-spin",o.classList.remove("hidden"),o.classList.add("visible");const s=n,l=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,s.offsetTop-this._mainHeader.offsetHeight),this._isAutomatic&&(yield this._countdown(n,a,l),yield i(l));const c=r.iconFA("check");if(a.replaceWith(c),c.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=r.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return s(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,n){return s(this,void 0,void 0,(function*(){const a=r.div([],"demo-script-countdown");e.classList.add("hidden");let o=n/1e3;const i=this._createSVGIndicator(o);a.append(i),t.prepend(a);const s=setInterval((()=>{o--,0===o&&(clearInterval(s),a.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","circle");return n.setAttributeNS(null,"cx","7"),n.setAttributeNS(null,"cy","7"),n.setAttributeNS(null,"r","6"),n.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(n),e}_changeStopState(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){n.shell.dockManager.close(this._node),n.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){n.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,l.currentObject=null}step(t,e,n){return this._steps[this.steps.length]={name:t,func:e,options:n},this}start(){return s(this,void 0,void 0,(function*(){this._initRoot(),n.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}l.currentObject=null,Int32Array,Float32Array,DG.Column.fromInt32Array,DG.Column.fromFloat32Array;const c="num",u="floatColumn",m="intColumn",d="floatColumns",h="newFloatColumns",p="intColumns",f="newIntColumns",y="newFloatColumn",v="newIntColumn",w="column",g="_callResult",_="numOfRows",b="numOfColumns",S="ref",C="value",A="tableFromColumns",k="objects",D="int",F="double",P={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function L(t,e){let n,r=[],a=0;for(const o in t){const i=t[o],s=i.type;if(o!==g){switch(s){case c:case D:case F:i.data=e[a],a++;break;case m:case u:let r,o=e[a];r=o.type===D&&s===m||o.type===F&&s===u?o.getRawData():new P[s](o.getRawData()),i.data={array:r,numOfRows:r.length},a++;break;case v:case y:let l=0;n=i[_][S],l=t[n].type===c?t[n].data:t[n].data[i[_][C]],i.data={numOfRows:l},a++;break;case p:case d:let w=[];for(let t of e[a].toList())t.type===D&&s===m||t.type===F&&s===u?w.push(t.getRawData()):w.push(new P[s](t.getRawData()));i.data={arrays:w,numOfRows:w[0].length,numOfColumns:w.length},a++;break;case f:case h:let g=0,A=0;n=i[_][S],g=t[n].type===c?t[n].data:t[n].data[i[_][C]],n=i[b][S],A=t[n].type===c?t[n].data:t[n].data[i[b][C]],i.data={numOfRows:g,numOfColumns:A},a++;break;default:return}r.push(i)}}return r}function E(t,e){t.arguments._callResult=e.callResult,function(t,e){const n={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const a in t){const o=t[a];switch(o.type){case c:case D:case F:case m:case u:case d:case p:break;case y:case v:let t;null==o.name?t=(0).toString():s=o.name,o.column=n[o.type](t,e[r].array);break;case f:case h:let a=[],i=e[r].arrays.length,s=[];if(null==o.names)for(let t=1;t<=i;t++)s.push(t.toString());else s=o.names;for(let t=0;t<i;t++)a.push(n[o.type](s[t],e[r].arrays[t]));o.columns=a}r++}}(t.arguments,e.args);let n=function(t){let e=t.output;const n={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(e.type){case c:case D:case F:return t.arguments[e.source];case w:return t.arguments[e.source].column;case A:return DG.DataFrame.fromColumns(t.arguments[e.source].columns);case k:let r=[];for(let a of e.source){let e=t.arguments[a];r.push(e[n[e.type]])}return r}}(t);return function(t){for(const e in t){const n=t[e];switch(n.type){case c:case D:case F:case m:case u:case p:case d:break;case v:case y:n.column=null;break;case f:case h:n.columns=null}}}(t.arguments),n}const I=1,x=1,V=1,R=0,N=100,T=1e8,B="components must be positive.",M="components must not be greater than feautures count.",O="min must be less than max.",$="features must be positive.",H="samples must be positive.",W="violators percentage must be from the range from 0 to 100.",j="dataframe is too big.";function G(t,e){if(e<I)throw new Error(B);if(e>t.length)throw new Error(M);if(t.length*t.byIndex(0).length>T)throw new Error(j)}var z=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};function K(e,n,r,a){return z(this,void 0,void 0,(function*(){let e;G(n,a);let o=async function(e,n,r,a){return new Promise(((e,o)=>{const i=new Worker(new URL(t.p+t.u(93),t.b));i.postMessage(L(EDA.partialLeastSquareRegression.arguments,[n,r,a])),i.onmessage=function(t){i.terminate(),e(E(EDA.partialLeastSquareRegression,t.data))}}))}(0,n,r,a);return yield o.then((t=>{e=t}),(t=>{throw new Error(`Error: ${t}`)})),e}))}function U(t,e,n){n.name=e.name+"(predicted)";let r=a.DataFrame.fromColumns([t,e,n]);return r.name="Reference vs. Predicted",a.Viewer.scatterPlot(r,{title:r.name,x:e.name,y:n.name,showRegressionLine:!0,markerType:"circle",labels:t.name})}function q(t,e){e.name="regression coefficient";let n=[];for(const e of t)n.push(e.name);let r=a.Column.fromStrings("feature",n),o=a.DataFrame.fromColumns([r,e]);return o.name="Regression Coefficients",a.Viewer.barChart(o,{title:o.name,split:"feature",value:"regression coefficient",valueAggrType:"avg"})}function Y(t,e,n){let r=[t];for(let t=0;t<e.length;t++)e[t].name=`x.score.t${t+1}`,r.push(e[t]);for(let t=0;t<n.length;t++)n[t].name=`y.score.u${t+1}`,r.push(n[t]);let o=a.DataFrame.fromColumns(r);o.name="Scores";const i=e.length>1?1:0;return a.Viewer.scatterPlot(o,{title:o.name,x:e[0].name,y:e[i].name,markerType:"circle",labels:t.name})}var J=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const Q=0,X=1,Z="Feature #",tt="Label";function et(){return a.DataFrame.fromColumns([a.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),a.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),a.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),a.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),a.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),a.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),a.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),a.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),a.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),a.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),a.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),a.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),a.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),a.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),a.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),a.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),a.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])}function nt(e,n,r,o,i,s,l,c){return J(this,void 0,void 0,(function*(){!function(t,e,n,r,a){if(n>=r)throw new Error(O);if(e<V)throw new Error($);if(t<x)throw new Error(H);if(a<R||a>N)throw new Error(W)}(o,i,s,l,c);const u=a.Column.fromList("double","kernelParams",n);let m,d=async function(e,n,r,a,o,i,s){return new Promise(((l,c)=>{const u=new Worker(new URL(t.p+t.u(584),t.b));u.postMessage(L(EDA.generateDataset.arguments,[e,n,r,a,o,i,s])),u.onmessage=function(t){u.terminate(),l(E(EDA.generateDataset,t.data))}}))}(e,u,o,i,s,l,c);yield d.then((t=>{m=t}),(t=>{throw new Error(`Error: ${t}`)})),m[X].name=tt;for(const t of m[Q])t.name=Z+t.name;const h=a.DataFrame.fromColumns(m[Q]);return h.name=r,h.columns.add(m[X]),h}))}var rt=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const at=0,ot=1,it=2,st=3,lt=4,ct=0,ut=1,mt=2,dt=3,ht=4,pt=5,ft=6,yt=7,vt=0,wt=1,gt=2,_t=3,bt=0,St=0,Ct=1,At=0,kt=1,Dt=0,Ft=0,Pt=0,Lt=0,Et="gamma must be strictly positive.",It="sigma must be strictly positive.",xt="c must be strictly positive.",Vt="d must be strictly positive.",Rt="incorrect kernel.",Nt="Labels",Tt="predicted",Bt="correctness",Mt="Confusion matrix",Ot="mean",$t="std dev",Ht="alpha",Wt="weight",jt="gamma",Gt="kernel",zt="kernel params",Kt="kernel param 1",Ut="kernel param 2",qt="features count",Yt="train samples count",Jt="Train error,%",Qt=["linear","polynomial","RBF","sigmoid"],Xt="positive (P)",Zt="negative (N)",te="predicted positive (PP)",ee="predicted negative (PN)",ne="Sensitivity",re="Specificity",ae="Balanced accuracy",oe="Positive predicitve value",ie="Negative predicitve value",se="Model report",le="Predicted labels",ce="Train labels",ue="Prediction correctness",me="prediction",de=4,he=3,pe=2,fe=0,ye=1,ve=2,we=0,ge=1;function _e(e,n,r){return rt(this,void 0,void 0,(function*(){let o=n.columns,i=o.byName(r);return o.remove(r),yield function(e,n,r){return rt(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Dt)throw new Error(Et);switch(t.kernel){case at:return;case it:if(t.sigma<=Ft)throw new Error(It);return;case ot:if(t.cParam<=Pt)throw new Error(xt);if(t.dParam<=Lt)throw new Error(Vt);return;case st:return;default:throw new Error(Rt)}}(e);const o=[we,we];switch(e.kernel){case at:break;case it:o[bt]=e.sigma;break;case ot:o[St]=e.cParam,o[Ct]=e.dParam;break;case st:o[At]=e.kappa,o[kt]=e.theta;break;default:throw new Error(Rt)}let i,s=a.Column.fromList("double",zt,o),l=n.toList(),c=l[0].length+ge,u=l.length+ge,m=lt,d=async function(e,n,r,a,o,i,s,l){return new Promise(((c,u)=>{const m=new Worker(new URL(t.p+t.u(111),t.b));m.postMessage(L(EDA.trainAndAnalyzeLSSVM.arguments,[e,n,r,a,o,i,s,l])),m.onmessage=function(t){m.terminate(),c(E(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(e.gamma,e.kernel,s,c,u,m,n,r);yield d.then((t=>{i=t}),(t=>{throw new Error(`Error: ${t}`)})),i[ut].name=Ot,i[mt].name=$t,i[dt].name=Ht,i[ht].name=Wt,i[pt].name=Tt,i[ft].name=Bt,i[yt].name=Mt;let h={trainGamma:e.gamma,kernelType:e.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:a.DataFrame.fromColumns(i[ct]),means:i[ut],stdDevs:i[mt],modelParams:i[dt],modelWeights:i[ht],predictedLabels:i[pt],correctness:i[ft],confusionMatrix:i[yt],trainError:void 0,featuresCount:l.length,trainSamplesCount:l[0].length};return function(t){let e=t.confusionMatrix.getRawData(),n=e[vt],r=e[_t],a=e[gt],o=e[wt],i=n+o,s=a+r,l=n/i,c=r/s,u=n/(n+a),m=r/(r+o),d=(n+r)/(i+s),h=(l+c)/2;t.sensitivity=l,t.specificity=c,t.balancedAccuracy=h,t.positivePredicitveValue=u,t.negativePredicitveValue=m,t.trainError=100*(1-d)}(h),h}))}(e,o,i)}))}function be(t,e){t.name=se,t.columns.add(e.trainLabels),t.columns.add(e.predictedLabels),t.columns.add(e.correctness);let r=n.shell.addTableView(t);r.addViewer(a.Viewer.form(function(t){let e=t.kernelParams.getRawData();return a.DataFrame.fromColumns([a.Column.fromList("double",jt,[t.trainGamma]),a.Column.fromStrings(Gt,[Qt[t.kernelType]]),a.Column.fromList("double",Kt,[e[0]]),a.Column.fromList("double",Ut,[e[1]]),a.Column.fromList("double",qt,[t.featuresCount]),a.Column.fromList("double",Yt,[t.trainSamplesCount]),a.Column.fromList("double",Jt,[t.trainError]),a.Column.fromList("double",ae,[t.balancedAccuracy]),a.Column.fromList("double",ne,[t.sensitivity]),a.Column.fromList("double",re,[t.specificity]),a.Column.fromList("double",oe,[t.positivePredicitveValue]),a.Column.fromList("double",ie,[t.negativePredicitveValue])])}(e))),r.addViewer(a.Viewer.scatterPlot(t,{title:le,color:e.predictedLabels.name})),r.addViewer(a.Viewer.scatterPlot(t,{title:ce,color:e.trainLabels.name})),r.addViewer(a.Viewer.grid(function(t){let e=t.confusionMatrix.getRawData();return a.DataFrame.fromColumns([a.Column.fromStrings("",[Xt,Zt]),a.Column.fromList("int",te,[e[vt],e[gt]]),a.Column.fromList("int",ee,[e[wt],e[_t]])])}(e))),r.addViewer(a.Viewer.scatterPlot(t,{title:ue,color:e.correctness.name}))}function Se(t){let e=t.normalizedTrainData.columns,n=t.trainSamplesCount,r=t.featuresCount,a=new Uint8Array(de*(he+pe+n+r+r+n+ge+r+ge+r*n)),o=a.buffer,i=0,s=new Int32Array(o,i,he);s[fe]=t.kernelType,s[ye]=n,s[ve]=r,i+=he*de;let l=new Float32Array(o,i,pe);l.set(t.kernelParams.getRawData()),i+=pe*de,l=new Float32Array(o,i,n),l.set(t.trainLabels.getRawData()),i+=n*de,l=new Float32Array(o,i,r),l.set(t.means.getRawData()),i+=r*de,l=new Float32Array(o,i,r),l.set(t.stdDevs.getRawData()),i+=r*de,l=new Float32Array(o,i,n+ge),l.set(t.modelParams.getRawData()),i+=(n+ge)*de,l=new Float32Array(o,i,r+ge),l.set(t.modelWeights.getRawData()),i+=(r+ge)*de;for(const t of e)l=new Float32Array(o,i,r),l.set(t.getRawData()),i+=r*de;return a}function Ce(e,n){return rt(this,void 0,void 0,(function*(){let r=function(t){let e=t.buffer,n=0,r=new Int32Array(e,n,he);n+=he*de;let o=r[ye],i=r[ve];const s=a.Column.fromFloat32Array(zt,new Float32Array(e,n,pe));n+=pe*de;const l=a.Column.fromFloat32Array(Nt,new Float32Array(e,n,o));n+=o*de;const c=a.Column.fromFloat32Array(Ot,new Float32Array(e,n,i));n+=i*de;const u=a.Column.fromFloat32Array($t,new Float32Array(e,n,i));n+=i*de;const m=a.Column.fromFloat32Array(Ht,new Float32Array(e,n,o+ge));n+=(o+ge)*de;const d=a.Column.fromFloat32Array(Wt,new Float32Array(e,n,i+ge));n+=(i+ge)*de;let h=[];for(let t=0;t<o;t++)h.push(a.Column.fromFloat32Array(t.toString(),new Float32Array(e,n,i))),n+=i*de;const p=a.DataFrame.fromColumns(h);return{kernelType:r[fe],kernelParams:s,trainLabels:l,means:c,stdDevs:u,modelParams:m,modelWeights:d,normalizedTrainData:p}}(new Uint8Array(n)),o=yield function(e,n){return rt(this,void 0,void 0,(function*(){let r,a=async function(e,n,r,a,o,i,s,l,c){return new Promise(((u,m)=>{const d=new Worker(new URL(t.p+t.u(604),t.b));d.postMessage(L(EDA.predictByLSSVM.arguments,[e,n,r,a,o,i,s,l,c])),d.onmessage=function(t){d.terminate(),u(E(EDA.predictByLSSVM,t.data))}}))}(e.kernelType,e.kernelParams,e.normalizedTrainData.columns,e.trainLabels,e.means,e.stdDevs,e.modelParams,e.modelWeights,n);return yield a.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,e.columns);return o.name=me,a.DataFrame.fromColumns([o])}))}var Ae=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const ke=new a.Package;function De(){n.shell.info(ke.webRoot)}function Fe(){return Ae(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function Pe(e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){return function(t){for(const e of t.columns.toList())e.name="PCA"+e.name;return t}(yield function(e,n,r,a,o){return z(this,void 0,void 0,(function*(){G(n,r);let e,i=async function(e,n,r,a,o){return new Promise(((e,i)=>{const s=new Worker(new URL(t.p+t.u(155),t.b));s.postMessage(L(EDA.principalComponentAnalysis.arguments,[n,r,a,o])),s.onmessage=function(t){s.terminate(),e(E(EDA.principalComponentAnalysis,t.data))}}))}(0,n,r,a?1:0,o?1:0);return yield i.then((t=>{e=t}),(t=>{throw new Error(`Error: ${t}`)})),e}))}(0,n,r,a,o))}))}function Le(t,e,r,o,i){return Ae(this,void 0,void 0,(function*(){const s=yield K(0,r,o,i);!function(t,e,r,o,i){let s=n.shell.getTableView(t.name);s.addViewer(U(e,o,i[0])),s.addViewer(q(r,i[1])),s.addViewer(function(t,e){let n=[],r=[];for(let e of t)r.push(e.name);n.push(a.Column.fromStrings("labels",r));for(let t=0;t<e.length;t++)e[t].name=`x.loading.p${t+1}`,n.push(e[t]);let o=a.DataFrame.fromColumns(n);return o.name="Loadings",a.Viewer.scatterPlot(o,{title:o.name,x:e[0].name,y:e[e.length-1].name,markerType:"circle",labels:"labels"})}(r,i[4])),s.addViewer(Y(e,i[2],i[3]))}(t,e,r,o,s)}))}function Ee(){return Ae(this,void 0,void 0,(function*(){const t=new l("Partial least squares regression","Analysis of multidimensional data."),e=et(),a=e.columns.byName("model"),o=e.columns.byName("price"),i=e.columns.remove("price").remove("model"),s=yield K(0,i,o,3),c=et();let u,m;c.name="Cars",yield t.step("Data",(()=>Ae(this,void 0,void 0,(function*(){n.shell.addTableView(c),u=n.shell.getTableView(c.name)}))),{description:"Each car has many features - patterns extraction is complicated.",delay:0}).step("Model",(()=>Ae(this,void 0,void 0,(function*(){m=r.dialog({title:"Multivariate Analysis (PLS)"}).add(r.tableInput("Table",c)).add(r.columnsInput("Features",e,i.toList,{available:void 0,checked:i.names()})).add(r.columnInput("Names",e,a,void 0)).add(r.columnInput("Predict",e,o,void 0)).add(r.intInput("Components",3,void 0)).onOK((()=>{n.shell.info("Multivariate analysis has been already performed.")})).show({x:400,y:140})}))),{description:"Predict car price by its other features.",delay:0}).step("Regression coeffcicients",(()=>Ae(this,void 0,void 0,(function*(){m.close(),u.addViewer(q(i,s[1]))}))),{description:'The feature "diesel" affects the price the most.',delay:0}).step("Scores",(()=>Ae(this,void 0,void 0,(function*(){u.addViewer(Y(a,s[2],s[3]))}))),{description:"Similarities & dissimilarities: alfaromeo and mercedes are different.",delay:0}).step("Prediction",(()=>Ae(this,void 0,void 0,(function*(){u.addViewer(U(a,o,s[0]))}))),{description:"Closer to the line means better price prediction.",delay:0}).start()}))}function Ie(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){return yield nt(at,[0,0],t,e,n,r,a,o)}))}function xe(t,e,n,r,a,o,i){return Ae(this,void 0,void 0,(function*(){return yield nt(it,[e,0],t,n,r,a,o,i)}))}function Ve(t,e,n,r){return Ae(this,void 0,void 0,(function*(){const a=yield _e({gamma:n,kernel:at},t,e);return r&&be(t,a),Se(a)}))}function Re(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Ne(t,e,n,r,a){return Ae(this,void 0,void 0,(function*(){const o=yield _e({gamma:n,kernel:it,sigma:r},t,e);return a&&be(t,o),Se(o)}))}function Te(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Be(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){const i=yield _e({gamma:n,kernel:ot,cParam:r,dParam:a},t,e);return o&&be(t,i),Se(i)}))}function Me(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Oe(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){const i=yield _e({gamma:n,kernel:st,kappa:r,theta:a},t,e);return o&&be(t,i),Se(i)}))}function $e(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}eda=e})();
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsIm1hcHBpbmdzIjoiK0JBQ0lBLEVBQXNCLENBRzFCQSxFLEdDSEFBLEVBQXdCLENBQUNDLEVBQVNDLEtBQ2pDLElBQUksSUFBSUMsS0FBT0QsRUFDWEYsRUFBb0JJLEVBQUVGLEVBQVlDLEtBQVNILEVBQW9CSSxFQUFFSCxFQUFTRSxJQUM1RUUsT0FBT0MsZUFBZUwsRUFBU0UsRUFBSyxDQUFFSSxZQUFZLEVBQU1DLElBQUtOLEVBQVdDLElBRTFFLEVDTERILEVBQXlCUyxHQUVaQSxFQUFVLE9DSHZCVCxFQUFvQlUsRUFBSSxXQUN2QixHQUEwQixpQkFBZkMsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPQyxNQUFRLElBQUlDLFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU9DLEdBQ1IsR0FBc0IsaUJBQVhDLE9BQXFCLE9BQU9BLE1BQ3hDLENBQ0EsQ0FQdUIsR0NBeEJmLEVBQW9CSSxFQUFJLENBQUNZLEVBQUtDLElBQVVaLE9BQU9hLFVBQVVDLGVBQWVDLEtBQUtKLEVBQUtDLEdDQ2xGakIsRUFBb0JxQixFQUFLcEIsSUFDSCxvQkFBWHFCLFFBQTBCQSxPQUFPQyxhQUMxQ2xCLE9BQU9DLGVBQWVMLEVBQVNxQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RuQixPQUFPQyxlQUFlTCxFQUFTLGFBQWMsQ0FBRXVCLE9BQU8sR0FBTyxFLE1DTDlELElBQUlDLEVBQ0F6QixFQUFvQlUsRUFBRWdCLGdCQUFlRCxFQUFZekIsRUFBb0JVLEVBQUVpQixTQUFXLElBQ3RGLElBQUlDLEVBQVc1QixFQUFvQlUsRUFBRWtCLFNBQ3JDLElBQUtILEdBQWFHLElBQ2JBLEVBQVNDLGdCQUNaSixFQUFZRyxFQUFTQyxjQUFjQyxNQUMvQkwsR0FBVyxDQUNmLElBQUlNLEVBQVVILEVBQVNJLHFCQUFxQixVQUM1QyxHQUFHRCxFQUFRRSxPQUVWLElBREEsSUFBSUMsRUFBSUgsRUFBUUUsT0FBUyxFQUNsQkMsR0FBSyxJQUFNVCxHQUFXQSxFQUFZTSxFQUFRRyxLQUFLSixHQUV4RCxDQUlELElBQUtMLEVBQVcsTUFBTSxJQUFJVSxNQUFNLHlEQUNoQ1YsRUFBWUEsRUFBVVcsUUFBUSxPQUFRLElBQUlBLFFBQVEsUUFBUyxJQUFJQSxRQUFRLFlBQWEsS0FDcEZwQyxFQUFvQnFDLEVBQUlaLEMsS0NsQnhCekIsRUFBb0JzQyxFQUFJVixTQUFTVyxTQUFXQyxLQUFLYixTQUFTYyxLLDRaQ0ExRCxNQUFNLEVBQStCQyxLQ0EvQixFQUErQkMsR0NBL0IsRUFBK0JDLEdDQXJDLElBZVdDLEVBMlNKLFNBQVNDLEVBQU1DLEdBQ2xCLE9BM1RrREMsRUEyVGpDcEMsS0EzVDBDcUMsT0EyVHBDLEVBM1RtREMsRUEyVG5DLGtCQUM3QixJQUFJQyxTQUFTOUIsR0FBTStCLFdBQVcvQixFQUFHMEIsSUFDM0MsRUEzVE8sS0FGZ0VNLE9BMlR4QyxLQXpUYkEsRUFBSUYsV0FBVSxTQUFVRyxFQUFTQyxHQUMvQyxTQUFTQyxFQUFVaEMsR0FBUyxJQUFNaUMsRUFBS1AsRUFBVVEsS0FBS2xDLEdBQVMsQ0FBRSxNQUFPVixHQUFLeUMsRUFBT3pDLEVBQUksQ0FBRSxDQUMxRixTQUFTNkMsRUFBU25DLEdBQVMsSUFBTWlDLEVBQUtQLEVBQWlCLE1BQUUxQixHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDN0YsU0FBUzJDLEVBQUtHLEdBSmxCLElBQWVwQyxFQUlhb0MsRUFBT0MsS0FBT1AsRUFBUU0sRUFBT3BDLFFBSjFDQSxFQUl5RG9DLEVBQU9wQyxNQUpoREEsYUFBaUI2QixFQUFJN0IsRUFBUSxJQUFJNkIsR0FBRSxTQUFVQyxHQUFXQSxFQUFROUIsRUFBUSxLQUlqQnNDLEtBQUtOLEVBQVdHLEVBQVcsQ0FDN0dGLEdBQU1QLEVBQVlBLEVBQVVhLE1BQU1mLEVBQVNDLEdBQWMsS0FBS1MsT0FDbEUsSUFQd0MsSUFBVVYsRUFBU0MsRUFBWUksRUFBR0gsQ0E4VDlFLEVBOVNBLFNBQVdMLEdBS1BBLEVBQU9tQixRQUpQLFNBQWlCeEMsRUFBT3lDLEdBQ3BCLEdBQWEsTUFBVHpDLEVBQ0EsTUFBTSxJQUFJVyxNQUFNLEdBQVcsTUFBUjhCLEVBQWUsUUFBVUEsZ0JBQ3BELENBRUgsQ0FORCxDQU1HcEIsSUFBV0EsRUFBUyxDQUFDLElDdEJ4QixJQUFJLEVBQXdDLFNBQVVHLEVBQVNDLEVBQVlJLEVBQUdILEdBRTFFLE9BQU8sSUFBS0csSUFBTUEsRUFBSUYsV0FBVSxTQUFVRyxFQUFTQyxHQUMvQyxTQUFTQyxFQUFVaEMsR0FBUyxJQUFNaUMsRUFBS1AsRUFBVVEsS0FBS2xDLEdBQVMsQ0FBRSxNQUFPVixHQUFLeUMsRUFBT3pDLEVBQUksQ0FBRSxDQUMxRixTQUFTNkMsRUFBU25DLEdBQVMsSUFBTWlDLEVBQUtQLEVBQWlCLE1BQUUxQixHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDN0YsU0FBUzJDLEVBQUtHLEdBSmxCLElBQWVwQyxFQUlhb0MsRUFBT0MsS0FBT1AsRUFBUU0sRUFBT3BDLFFBSjFDQSxFQUl5RG9DLEVBQU9wQyxNQUpoREEsYUFBaUI2QixFQUFJN0IsRUFBUSxJQUFJNkIsR0FBRSxTQUFVQyxHQUFXQSxFQUFROUIsRUFBUSxLQUlqQnNDLEtBQUtOLEVBQVdHLEVBQVcsQ0FDN0dGLEdBQU1QLEVBQVlBLEVBQVVhLE1BQU1mLEVBQVNDLEdBQWMsS0FBS1MsT0FDbEUsR0FDSixFQU1PLE1BQU1RLEVBQ1RDLFlBQVlGLEVBQU1HLEVBQWFDLEdBQWMsRUFBT0MsR0FDaEQsSUFBSUMsRUFDSjNELEtBQUtxRCxLQUFPLEdBQ1pyRCxLQUFLd0QsWUFBYyxHQUNuQnhELEtBQUs0RCxjQUFlLEVBQ3BCNUQsS0FBSzZELHFCQUFzQixFQUMzQjdELEtBQUs4RCxhQUFlLEVBQ3BCOUQsS0FBSytELFlBQWEsRUFDbEIvRCxLQUFLZ0UsY0FBZSxFQUNwQmhFLEtBQUtpRSxrQkFBbUIsRUFDeEJqRSxLQUFLa0UsTUFBUSxNQUFPLEdBQUksQ0FBRUMsR0FBSSxjQUMxQkMsUUFBUyxtREFDYnBFLEtBQUtxRSxPQUFTLEdBQ2RyRSxLQUFLc0UsWUFBYyxRQUFTLEdBQUkseUJBQ2hDdEUsS0FBS3VFLFFBQVUsS0FBTSxJQUNyQnZFLEtBQUt3RSxXQUFhLE9BQVEsR0FBSSx5QkFDOUJ4RSxLQUFLeUUsY0FBZ0IsU0FBVSxTQUFVLFVBQVUsSUFBTXpFLEtBQUswRSxvQkFBb0IsZ0JBQ2xGMUUsS0FBSzJFLFlBQWMsU0FBVSxTQUFVLFNBQVMsSUFBTTNFLEtBQUs0RSxrQkFBa0IsV0FDN0U1RSxLQUFLNkUsYUFBZSxTQUFVLFNBQVUsU0FBUyxLQUN4QzdFLEtBQUtpRSxrQkFDTmpFLEtBQUs4RSxXQUFXLEdBQ3JCLGFBQ0g5RSxLQUFLK0UsVUFBWSxRQUFTLEdBQUksOEJBQzlCL0UsS0FBS2dGLGFBQWUsT0FBUSxHQUFJLDJCQUNoQ2hGLEtBQUtpRixVQUFZLFVBQVcsWUFDNUJqRixLQUFLa0YsZUFBaUIsVUFBVyxJQUNqQ2xGLEtBQUttRixVQUFZLFNBQVUsU0FBVSxpQkFBaUIsSUFBTW5GLEtBQUtvRixjQUFjLGdCQUMvRXBGLEtBQUtxRCxLQUFPQSxFQUNackQsS0FBS3dELFlBQWNBLEVBQ25CeEQsS0FBSzRELGFBQWVILEVBQ3BCekQsS0FBSzZELG9CQUE4RyxRQUF2RkYsRUFBS0QsYUFBeUMsRUFBU0EsRUFBUTJCLDBCQUF1QyxJQUFQMUIsR0FBZ0JBLEVBQzNJM0QsS0FBS2lGLFVBQVVLLElBQU0sRUFDckJ0RixLQUFLaUYsVUFBVXJFLE1BQVEsRUFDdkIwQyxFQUFXaUMsY0FBZ0J2RixJQUMvQixDQUVJd0YsWUFDQSxPQUFPeEYsS0FBS3FFLE1BQ2hCLENBRUlvQixpQkFDQSxPQUFPekYsS0FBS3FFLE9BQU9oRCxNQUN2QixDQUVBcUUsYUFDSTFGLEtBQUsyRixtQkFDTDNGLEtBQUs0RixxQkFDTDVGLEtBQUtzRSxZQUFZdUIsT0FBTzdGLEtBQUt3RSxXQUFZeEUsS0FBS2dGLGFBQ2xELENBRUFXLG1CQUNJM0YsS0FBS3VFLFFBQVF1QixVQUFZOUYsS0FBS3FELEtBQzlCckQsS0FBS3dFLFdBQVdxQixPQUFPN0YsS0FBS21GLFdBQzVCbkYsS0FBS3dFLFdBQVdxQixPQUFPN0YsS0FBS3VFLFNBQzVCdkUsS0FBSzZFLGFBQWFrQixXQUFXQyxVQUFZLHdCQUN6Q2hHLEtBQUt3RSxXQUFXcUIsT0FBTzdGLEtBQUs0RCxhQUFlNUQsS0FBS3lFLGNBQWdCekUsS0FBSzZFLGFBQ3pFLENBRUFlLHFCQUNJNUYsS0FBS2lGLFVBQVVLLElBQU10RixLQUFLeUYsV0FDMUJ6RixLQUFLZ0YsYUFBYWEsT0FBTzdGLEtBQUtpRixXQUM5QmpGLEtBQUtrRixlQUFpQixVQUFXLFNBQVNsRixLQUFLaUYsVUFBVXJFLFlBQVlaLEtBQUt5RixjQUMxRXpGLEtBQUtnRixhQUFhYSxPQUFPN0YsS0FBS2tGLGVBQ2xDLENBRUFlLGtCQUNJLElBQUl0QyxFQUNKM0QsS0FBSytFLFVBQVVjLE9BQU8sTUFBTzdGLEtBQUt3RCxZQUFhLCtCQUMvQyxJQUFLLElBQUlsQyxFQUFJLEVBQUdBLEVBQUl0QixLQUFLeUYsV0FBWW5FLElBQUssQ0FDdEMsSUFBSTRFLEVBQXVCLFNBQVUsU0FDaENsRyxLQUFLNEQsY0FDSSxJQUFOdEMsSUFDQTRFLEVBQXVCLFNBQVUsUUFBUSxJQUFNbEcsS0FBSzhFLGFBQWEsYUFDakVvQixFQUFxQkYsVUFBWSx5QkFHekMsTUFBTUcsRUFBaUIsTUFBT25HLEtBQUtxRSxPQUFPL0MsR0FBRytCLEtBQU0sbUNBQzdDK0MsRUFBeUIsTUFBeUMsUUFBakN6QyxFQUFLM0QsS0FBS3FFLE9BQU8vQyxHQUFHb0MsZUFBNEIsSUFBUEMsT0FBZ0IsRUFBU0EsRUFBR0gsWUFBYSx5Q0FDbkg2QyxFQUFRLE9BQVEsQ0FDbEJILEVBQ0FDLEdBQ0QsdUJBQ0huRyxLQUFLK0UsVUFBVWMsT0FBT1EsRUFBT0QsRUFDakMsQ0FDSixDQUVBRSxZQUNJLElBQUkzQyxFQUFJNEMsRUFBSUMsRUFDWixrQ0FBc0MsRUFDdEMsMEJBQThCLEVBQzlCLE1BQU1DLEVBQWlCQyxNQUFNQyxLQUFLLHVDQUEwQyxHQUM1RTNHLEtBQUs0RyxNQUFRLHlCQUE0QjVHLEtBQUtrRSxNQUFPLGlCQUFtQnVDLEVBQWdCLEtBQzBELFFBQTdJRixFQUFtRixRQUE3RTVDLEVBQUs4QyxFQUFlSSxPQUFPQyxVQUFVQyxpQkFBaUJDLHlCQUFzQyxJQUFQckQsT0FBZ0IsRUFBU0EsRUFBR3NELHdCQUFxQyxJQUFQVixPQUFnQixFQUFTQSxFQUFHVyxVQUFVQyxTQUFTLGdDQUN2SCxRQUE3RVgsRUFBS0MsRUFBZUksT0FBT0MsVUFBVUMsaUJBQWlCQyx5QkFBc0MsSUFBUFIsR0FBeUJBLEVBQUdTLGlCQUFpQkcsVUFDdklwSCxLQUFLNEcsTUFBTUUsVUFBVUMsaUJBQWlCRyxVQUFVRyxJQUFJLG1DQUNwRHJILEtBQUswRixhQUNMMUYsS0FBS2tFLE1BQU0yQixPQUFPN0YsS0FBS3NFLGFBQ3ZCdEUsS0FBS2lHLGtCQUNMakcsS0FBS2tFLE1BQU0yQixPQUFPN0YsS0FBSytFLFVBQzNCLENBRUFELFlBQ0ksSUFBSW5CLEVBQUk0QyxFQUNSLE9BQU8sRUFBVXZHLFVBQU0sT0FBUSxHQUFRLFlBQ25DQSxLQUFLaUUsa0JBQW1CLEVBQ25CakUsS0FBSzRELGVBQ041RCxLQUFLNkUsYUFBYXFDLFVBQVVHLElBQUksWUFDaENySCxLQUFLNkUsYUFBYWtCLFdBQVdtQixVQUFVRyxJQUFJLGdCQUUvQyxNQUFNaEIsRUFBUXJHLEtBQUsrRSxVQUFVdUMsdUJBQXVCLHVCQUF1QnRILEtBQUs4RCxjQUMxRXlELEVBQWlCdkgsS0FBSytFLFVBQVV1Qyx1QkFBdUIsYUFBYXRILEtBQUs4RCxjQUN6RTBELEVBQW1CeEgsS0FBSytFLFVBQVV1Qyx1QkFBdUIsa0NBQWtDdEgsS0FBSzhELGNBQ3RHeUQsRUFBZXZCLFVBQVkseUNBQzNCd0IsRUFBaUJOLFVBQVVFLE9BQU8sVUFDbENJLEVBQWlCTixVQUFVRyxJQUFJLFdBQy9CLE1BQU1JLEVBQWNwQixFQUNkcUIsR0FBK0QsUUFBakQvRCxFQUFLM0QsS0FBS3FFLE9BQU9yRSxLQUFLOEQsY0FBY0osZUFBNEIsSUFBUEMsT0FBZ0IsRUFBU0EsRUFBR3pCLE9BQ25ELFFBQWpEcUUsRUFBS3ZHLEtBQUtxRSxPQUFPckUsS0FBSzhELGNBQWNKLGVBQTRCLElBQVA2QyxPQUFnQixFQUFTQSxFQUFHckUsTUFBUSxVQUM1RmxDLEtBQUtxRSxPQUFPckUsS0FBSzhELGNBQWM2RCxPQUNyQzNILEtBQUs0SCxVQUFVNUgsS0FBS2tFLE1BQU91RCxFQUFZSSxVQUFZN0gsS0FBS3NFLFlBQVl3RCxjQUNoRTlILEtBQUs0RCxxQkFDQzVELEtBQUsrSCxXQUFXMUIsRUFBT2tCLEVBQWdCRyxTQUN2Q3hGLEVBQU13RixJQUVoQixNQUFNTSxFQUFvQixTQUFVLFNBT3BDLEdBTkFULEVBQWVVLFlBQVlELEdBQzNCQSxFQUFrQmhDLFVBQVkseUJBQzlCaEcsS0FBS2lGLFVBQVVyRSxRQUNmWixLQUFLa0YsZUFBZVksVUFBWSxTQUFTOUYsS0FBS2lGLFVBQVVyRSxZQUFZWixLQUFLeUYsYUFDekV6RixLQUFLOEQsZUFDTDlELEtBQUtpRSxrQkFBbUIsRUFDcEJqRSxLQUFLOEQsZUFBaUI5RCxLQUFLeUYsWUFLL0IsSUFBS3pGLEtBQUs0RCxhQUFjLENBQ3BCLE1BQU1zRSxFQUF5QmxJLEtBQUsrRSxVQUFVdUMsdUJBQXVCLGFBQWF0SCxLQUFLOEQsY0FDakZxRSxFQUFvQixTQUFVLFFBQVEsSUFBTW5JLEtBQUs4RSxhQUFhLGFBQ3BFcUQsRUFBa0JuQyxVQUFZLHdCQUM5QmtDLEVBQXVCRCxZQUFZRSxHQUNuQ25JLEtBQUs2RSxhQUFhcUMsVUFBVUUsT0FBTyxZQUNuQ3BILEtBQUs2RSxhQUFha0IsV0FBV21CLFVBQVVFLE9BQU8sY0FDbEQsT0FYSXBILEtBQUs0RCxhQUFlNUQsS0FBS3lFLGNBQWN3RCxZQUFZakksS0FBSzJFLGFBQ3BEM0UsS0FBSzZFLGFBQWFvRCxZQUFZakksS0FBSzJFLFlBVy9DLEdBQ0osQ0FFQXlELGVBQ0ksT0FBTyxFQUFVcEksVUFBTSxPQUFRLEdBQVEsWUFDbkMsSUFBSyxJQUFJc0IsRUFBSXRCLEtBQUs4RCxhQUFjeEMsRUFBSXRCLEtBQUt5RixhQUNqQ3pGLEtBQUsrRCxhQUFjL0QsS0FBS2dFLGFBRHFCMUMsVUFHM0N0QixLQUFLOEUsV0FFbkIsR0FDSixDQU1BOEMsVUFBVVMsRUFBU0MsR0FDZkQsRUFBUUUsUUFDUkYsRUFBUUcsVUFBWUYsQ0FDeEIsQ0FPQVAsV0FBV00sRUFBU0ksRUFBV0MsR0FDM0IsT0FBTyxFQUFVMUksVUFBTSxPQUFRLEdBQVEsWUFDbkMsTUFBTTJJLEVBQWUsTUFBTyxHQUFJLHlCQUNoQ0YsRUFBVXZCLFVBQVVHLElBQUksVUFDeEIsSUFBSXVCLEVBQVlGLEVBQU8sSUFDdkIsTUFBTUcsRUFBTTdJLEtBQUs4SSxvQkFBb0JGLEdBQ3JDRCxFQUFhOUMsT0FBT2dELEdBQ3BCUixFQUFRVSxRQUFRSixHQUNoQixNQUFNSyxFQUFXQyxhQUFZLEtBQ3pCTCxJQUNrQixJQUFkQSxJQUNBTSxjQUFjRixHQUNkTCxFQUFhdkIsU0FDYnFCLEVBQVV2QixVQUFVRSxPQUFPLFVBQzNCcUIsRUFBVXZCLFVBQVVHLElBQUksV0FDNUIsR0FDRCxJQUNQLEdBQ0osQ0FNQXlCLG9CQUFvQkYsR0FDaEIsTUFBTUMsRUFBTTdILFNBQVNtSSxnQkFBZ0IsNkJBQThCLE9BQzdEQyxFQUFTcEksU0FBU21JLGdCQUFnQiw2QkFBOEIsVUFNdEUsT0FMQUMsRUFBT0MsZUFBZSxLQUFNLEtBQU0sS0FDbENELEVBQU9DLGVBQWUsS0FBTSxLQUFNLEtBQ2xDRCxFQUFPQyxlQUFlLEtBQU0sSUFBSyxLQUNqQ0QsRUFBT0MsZUFBZSxLQUFNLFFBQVMsd0JBQXdCVCwrQkFDN0RDLEVBQUloRCxPQUFPdUQsR0FDSlAsQ0FDWCxDQUVBbkUsbUJBQ0ksTUFBTTRFLEVBQU90SixLQUFLeUUsY0FBYzZDLHVCQUF1QixhQUN2RGdDLEVBQUssR0FBR3RELFVBQVksd0JBQ3BCaEcsS0FBSytELFlBQWMvRCxLQUFLK0QsV0FDbkIvRCxLQUFLK0QsYUFDTnVGLEVBQUssR0FBR3RELFVBQVkseUJBQ2ZoRyxLQUFLaUUsa0JBQ05qRSxLQUFLb0ksZUFFakIsQ0FFQXhELGlCQUNJLDBCQUE2QjVFLEtBQUs0RyxPQUNsQyxtQkFDQTVHLEtBQUt1SixhQUNMdkosS0FBS3dKLGlCQUNMeEosS0FBS3lKLE9BQ1QsQ0FFQUYsYUFDSXZKLEtBQUtrRSxNQUFRLE1BQU8sR0FBSSxDQUFFQyxHQUFJLGNBQWVDLFFBQVMsbURBQ3REcEUsS0FBS3NFLFlBQWMsUUFBUyxHQUFJLHlCQUNoQ3RFLEtBQUt1RSxRQUFVLEtBQU0sSUFDckJ2RSxLQUFLd0UsV0FBYSxPQUFRLEdBQUkseUJBQzlCeEUsS0FBSytFLFVBQVksUUFBUyxHQUFJLDhCQUM5Qi9FLEtBQUtnRixhQUFlLE9BQVEsR0FBSSwyQkFDaENoRixLQUFLaUYsVUFBWSxVQUFXLFlBQzVCakYsS0FBS2tGLGVBQWlCLFVBQVcsSUFDakNsRixLQUFLaUYsVUFBVUssSUFBTSxFQUNyQnRGLEtBQUtpRixVQUFVckUsTUFBUSxDQUMzQixDQUVBNEksaUJBQ0l4SixLQUFLOEQsYUFBZSxFQUNwQjlELEtBQUsrRCxZQUFhLEVBQ2xCL0QsS0FBS2dFLGNBQWUsRUFDUGhFLEtBQUt5RSxjQUFjNkMsdUJBQXVCLGFBQ2xELEdBQUd0QixVQUFZLHlCQUNwQmhHLEtBQUs2RSxhQUFhcUMsVUFBVUUsT0FBTyxXQUN2QyxDQUVBaEMsYUFDSSwwQkFBNkJwRixLQUFLNEcsT0FDbEM1RyxLQUFLMEosY0FDVCxDQUVBQSxlQUNJMUosS0FBS2dFLGNBQWUsRUFDcEJWLEVBQVdpQyxjQUFnQixJQUMvQixDQVFBMUMsS0FBS1EsRUFBTXNFLEVBQU1qRSxHQU1iLE9BTEExRCxLQUFLcUUsT0FBT3JFLEtBQUt3RixNQUFNbkUsUUFBVSxDQUM3QmdDLEtBQU1BLEVBQ05zRSxLQUFNQSxFQUNOakUsUUFBU0EsR0FFTjFELElBQ1gsQ0FFQXlKLFFBQ0ksT0FBTyxFQUFVekosVUFBTSxPQUFRLEdBQVEsWUFDbkNBLEtBQUtzRyxZQUNMLGdCQUFtQnRHLEtBQUtxRCxNQUNwQnJELEtBQUs0RCxhQUNMNUQsS0FBS29JLGVBR0xwSSxLQUFLNkQsNEJBQ0M3RCxLQUFLOEUsWUFDbkIsR0FDSixFQUVKeEIsRUFBV2lDLGNBQWdCLEtDblNIb0UsV0FDQUMsYUFTZTVILEdBQUc2SCxPQUFPQyxlQUNWOUgsR0FBRzZILE9BQU9FLGlCQ2JqRCxNQUNNQyxFQUFXLE1BQ1hDLEVBQW9CLGNBQ3BCQyxFQUFrQixZQUNsQkMsRUFBcUIsZUFDckJDLEVBQXlCLGtCQUN6QkMsRUFBbUIsYUFDbkJDLEVBQXVCLGdCQUN2QkMsRUFBd0IsaUJBQ3hCQyxFQUFzQixlQUN0QkMsRUFBUyxTQUNUQyxFQUFjLGNBQ2RDLEVBQWMsWUFDZEMsRUFBaUIsZUFDakJDLEVBQU0sTUFDTkMsRUFBUSxRQUNSQyxFQUFtQixtQkFDbkJDLEVBQVUsVUFDVkMsRUFBVyxNQUNYQyxFQUFjLFNBcUJkLEVBQVUsQ0FDQyxVQUFhdkIsV0FDYixZQUFlQyxhQUNmLGFBQWdCQSxhQUNoQixnQkFBbUJBLGFBQ25CLFdBQWNELFdBQ2QsY0FBaUJBLFdBQ2pCLGVBQWtCQyxhQUNsQixhQUFnQkQsWUFvQjFCLFNBQVMsRUFBWXdCLEVBQW1CQyxHQUMzQyxJQUNJQyxFQURBQyxFQUFlLEdBSWZoSyxFQUFJLEVBQ1IsSUFBSSxNQUFNL0IsS0FBTzRMLEVBQW1CLENBQ2hDLE1BQU1JLEVBQU1KLEVBQWtCNUwsR0FDeEJpTSxFQUFPRCxFQUFJQyxLQUdqQixHQUFHak0sSUFBUW1MLEVBQVgsQ0FJQSxPQUFPYyxHQUdILEtBQUt4QixFQUNMLEtBQUtpQixFQUNMLEtBQUtDLEVBQ0RLLEVBQUlFLEtBQU9MLEVBQVU5SixHQUNyQkEsSUFDQSxNQUdKLEtBQUs0SSxFQUNMLEtBQUtELEVBRUQsSUFBSXlCLEVBS0FDLEVBQU1QLEVBQVU5SixHQUtmb0ssRUFGRUMsRUFBSUgsT0FBU1AsR0FBY08sSUFBU3RCLEdBQ2xDeUIsRUFBSUgsT0FBU04sR0FBaUJNLElBQVN2QixFQUNuQzBCLEVBQUlDLGFBRUosSUFBSSxFQUFRSixHQUFNRyxFQUFJQyxjQVNuQ0wsRUFBSUUsS0FBTyxDQUFFLE1BQVNDLEVBQ1QsVUFBYUEsRUFBTXJLLFFBRWhDQyxJQUNBLE1BR0osS0FBS2tKLEVBQ0wsS0FBS0QsRUFDRCxJQUFJc0IsRUFBTSxFQUVWUixFQUFNRSxFQUFJWixHQUFhRSxHQUduQmdCLEVBREFWLEVBQWtCRSxHQUFLRyxPQUFTeEIsRUFDMUJtQixFQUFrQkUsR0FBS0ksS0FFdkJOLEVBQWtCRSxHQUFLSSxLQUFLRixFQUFJWixHQUFhRyxJQUV2RFMsRUFBSUUsS0FBTyxDQUFDLFVBQWFJLEdBRXpCdkssSUFDQSxNQUdKLEtBQUsrSSxFQUNMLEtBQUtGLEVBQ0QsSUFBSTJCLEVBQVMsR0FPYixJQUFJLElBQUlILEtBQU9QLEVBQVU5SixHQUFHeUssU0FDbkJKLEVBQUlILE9BQVNQLEdBQWNPLElBQVN0QixHQUNuQ3lCLEVBQUlILE9BQVNOLEdBQWlCTSxJQUFTdkIsRUFDN0M2QixFQUFPRSxLQUFLTCxFQUFJQyxjQUVoQkUsRUFBT0UsS0FBSyxJQUFJLEVBQVFSLEdBQU1HLEVBQUlDLGVBU3RDTCxFQUFJRSxLQUFPLENBQUUsT0FBVUssRUFDbkIsVUFBYUEsRUFBTyxHQUFHekssT0FDdkIsYUFBZ0J5SyxFQUFPekssUUFFM0JDLElBQ0EsTUFHSixLQUFLZ0osRUFDTCxLQUFLRixFQUNELElBQUk2QixFQUFPLEVBQ1BDLEVBQU8sRUFFWGIsRUFBTUUsRUFBSVosR0FBYUUsR0FHbkJvQixFQURBZCxFQUFrQkUsR0FBS0csT0FBU3hCLEVBQ3pCbUIsRUFBa0JFLEdBQUtJLEtBRXZCTixFQUFrQkUsR0FBS0ksS0FBS0YsRUFBSVosR0FBYUcsSUFFeERPLEVBQU1FLEVBQUlYLEdBQWdCQyxHQU90QnFCLEVBREFmLEVBQWtCRSxHQUFLRyxPQUFTeEIsRUFDekJtQixFQUFrQkUsR0FBS0ksS0FFdkJOLEVBQWtCRSxHQUFLSSxLQUFLRixFQUFJWCxHQUFnQkUsSUFFM0RTLEVBQUlFLEtBQU8sQ0FBQyxVQUFhUSxFQUN2QixhQUFnQkMsR0FFbEI1SyxJQUNBLE1BRUosUUFDSSxPQUdSZ0ssRUFBYVUsS0FBS1QsRUE5SE4sQ0ErSGhCLENBS0EsT0FBT0QsQ0FDWCxDQXlkTyxTQUFTLEVBQVVhLEVBQW1CQyxHQUN6Q0QsRUFBa0JFLFVBQVVDLFlBQWNGLEVBQWtCRyxXQTlMaEUsU0FBaUNDLEVBQXVCQyxHQUVwRCxNQUFNQyxFQUF5QixDQUFDLGdCQUFtQjFLLEdBQUc2SCxPQUFPRSxpQkFDN0IsY0FBaUIvSCxHQUFHNkgsT0FBT0MsZUFDM0IsZUFBa0I5SCxHQUFHNkgsT0FBT0UsaUJBQzVCLGFBQWdCL0gsR0FBRzZILE9BQU9DLGdCQUUxRCxJQUFJeEksRUFBSSxFQUVSLElBQUksTUFBTS9CLEtBQU9pTixFQUNqQixDQUNJLE1BQU1qQixFQUFNaUIsRUFBc0JqTixHQUVsQyxPQUFPZ00sRUFBSUMsTUFHUCxLQUFLeEIsRUFDTCxLQUFLaUIsRUFDTCxLQUFLQyxFQUlMLEtBQUtoQixFQUNMLEtBQUtELEVBQ0wsS0FBS0UsRUFDTCxLQUFLRSxFQUNELE1BR0osS0FBS0UsRUFDTCxLQUFLQyxFQUNELElBQUluSCxFQUdXc0osTUFBWnBCLEVBQUlsSSxLQUNIQSxHQUFPLEdBQUl1SixXQUVYQyxFQUFRdEIsRUFBSWxJLEtBRWhCa0ksRUFBSXVCLE9BQVNKLEVBQXVCbkIsRUFBSUMsTUFBTW5JLEVBQzFDb0osRUFBa0JuTCxHQUFHb0ssT0FDekIsTUFHSixLQUFLcEIsRUFDTCxLQUFLRixFQUNELElBQUkyQyxFQUFVLEdBQ1YxTCxFQUFTb0wsRUFBa0JuTCxHQUFHd0ssT0FBT3pLLE9BRXJDd0wsRUFBUSxHQUdaLEdBQWdCRixNQUFicEIsRUFBSXNCLE1BQ0gsSUFBSSxJQUFJRyxFQUFJLEVBQUdBLEdBQUszTCxFQUFRMkwsSUFDeEJILEVBQU1iLEtBQUssRUFBSVksaUJBQ2xCQyxFQUFRdEIsRUFBSXNCLE1BRWpCLElBQUksSUFBSUksRUFBSSxFQUFHQSxFQUFJNUwsRUFBUTRMLElBQ3ZCRixFQUFRZixLQUFLVSxFQUF1Qm5CLEVBQUlDLE1BQU1xQixFQUFNSSxHQUNoRFIsRUFBa0JuTCxHQUFHd0ssT0FBT21CLEtBRXBDMUIsRUFBSXdCLFFBQVVBLEVBU3RCekwsR0FDSixDQUNKLENBd0hJNEwsQ0FBd0JmLEVBQWtCRSxVQUFXRCxFQUFrQmUsTUFFdkUsSUFBSUMsRUF2SFIsU0FBbUJqQixHQUNmLElBQUlrQixFQUFTbEIsRUFBa0JrQixPQUUvQixNQUFNQyxFQUFxQixDQUFDLGdCQUFtQixVQUNuQixjQUFpQixVQUNqQixlQUFrQixTQUNsQixhQUFnQixVQUU1QyxPQUFPRCxFQUFPN0IsTUFFVixLQUFLeEIsRUFDTCxLQUFLaUIsRUFDTCxLQUFLQyxFQUNELE9BQU9pQixFQUFrQkUsVUFBVWdCLEVBQU9FLFFBRzlDLEtBQUs5QyxFQUNELE9BQU8wQixFQUFrQkUsVUFBVWdCLEVBQU9FLFFBQVFULE9BR3RELEtBQUsvQixFQUNELE9BQU8vSSxHQUFHd0wsVUFBVUMsWUFBWXRCLEVBQWtCRSxVQUFVZ0IsRUFBT0UsUUFBUVIsU0FHL0UsS0FBSy9CLEVBQ0QsSUFBSTBDLEVBQWdCLEdBR3BCLElBQUksSUFBSXJLLEtBQVFnSyxFQUFPRSxPQUFRLENBQzNCLElBQUloQyxFQUFNWSxFQUFrQkUsVUFBVWhKLEdBQ3RDcUssRUFBYzFCLEtBQUtULEVBQUkrQixFQUFtQi9CLEVBQUlDLE9BQ2xELENBRUEsT0FBT2tDLEVBUW5CLENBOEVpQkMsQ0FBVXhCLEdBTXZCLE9BakZKLFNBQStCSyxHQUMzQixJQUFJLE1BQU1qTixLQUFPaU4sRUFBdUIsQ0FDcEMsTUFBTWpCLEVBQU1pQixFQUFzQmpOLEdBRWxDLE9BQVFnTSxFQUFJQyxNQUNSLEtBQUt4QixFQUNMLEtBQUtpQixFQUNMLEtBQUtDLEVBQ0wsS0FBS2hCLEVBQ0wsS0FBS0QsRUFDTCxLQUFLSSxFQUNMLEtBQUtGLEVBQ0QsTUFFSixLQUFLSyxFQUNMLEtBQUtELEVBQ0RnQixFQUFJdUIsT0FBUyxLQUNiLE1BRUosS0FBS3hDLEVBQ0wsS0FBS0YsRUFDRG1CLEVBQUl3QixRQUFVLEtBTzFCLENBQ0osQ0FrRElhLENBQXNCekIsRUFBa0JFLFdBRWpDZSxDQUNYLENDL3JCQSxNQUFNUyxFQUFXLEVBQ1hDLEVBQW9CLEVBQ3BCQyxFQUFxQixFQUNyQkMsRUFBaUIsRUFDakJDLEVBQWlCLElBQ2pCQyxFQUFxQixJQUVyQkMsRUFBbUIsK0JBQ25CQyxFQUFjLHVEQUNkQyxFQUEwQiw2QkFDMUJDLEVBQTJCLDZCQUMzQkMsRUFBMEIsNEJBQzFCQyxFQUE2Qiw2REFDN0JDLEVBQTJCLHdCQUUxQixTQUFTQyxFQUFpQkMsRUFBVUMsR0FDdkMsR0FBSUEsRUFBYWYsRUFDYixNQUFNLElBQUl0TSxNQUFNNE0sR0FDcEIsR0FBSVMsRUFBYUQsRUFBU3ROLE9BQ3RCLE1BQU0sSUFBSUUsTUFBTTZNLEdBQ3BCLEdBQUlPLEVBQVN0TixPQUFTc04sRUFBU0UsUUFBUSxHQUFHeE4sT0FBUzZNLEVBQy9DLE1BQU0sSUFBSTNNLE1BQU1rTixFQUN4QixDQ3ZCQSxJQUFJLEVBQXdDLFNBQVVyTSxFQUFTQyxFQUFZSSxFQUFHSCxHQUUxRSxPQUFPLElBQUtHLElBQU1BLEVBQUlGLFdBQVUsU0FBVUcsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVWhDLEdBQVMsSUFBTWlDLEVBQUtQLEVBQVVRLEtBQUtsQyxHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDMUYsU0FBUzZDLEVBQVNuQyxHQUFTLElBQU1pQyxFQUFLUCxFQUFpQixNQUFFMUIsR0FBUyxDQUFFLE1BQU9WLEdBQUt5QyxFQUFPekMsRUFBSSxDQUFFLENBQzdGLFNBQVMyQyxFQUFLRyxHQUpsQixJQUFlcEMsRUFJYW9DLEVBQU9DLEtBQU9QLEVBQVFNLEVBQU9wQyxRQUoxQ0EsRUFJeURvQyxFQUFPcEMsTUFKaERBLGFBQWlCNkIsRUFBSTdCLEVBQVEsSUFBSTZCLEdBQUUsU0FBVUMsR0FBV0EsRUFBUTlCLEVBQVEsS0FJakJzQyxLQUFLTixFQUFXRyxFQUFXLENBQzdHRixHQUFNUCxFQUFZQSxFQUFVYSxNQUFNZixFQUFTQyxHQUFjLEtBQUtTLE9BQ2xFLEdBQ0osRUFnQk8sU0FBU2dNLEVBQVdDLEVBQU9KLEVBQVVLLEVBQVNKLEdBQ2pELE9BQU8sRUFBVTVPLFVBQU0sT0FBUSxHQUFRLFlBRW5DLElBQUlpUCxFQURKUCxFQUFpQkMsRUFBVUMsR0FFM0IsSUFBSU0sRUNnQkxDLGVBQXdESixFQUFPSixFQUFVSyxFQUFTSSxHQUN2RixPQUFPLElBQUk3TSxTQUFRLENBQUNHLEVBQVNDLEtBQzNCLE1BQU0wTSxFQUFTLElBQUlDLE9BQU8sSUFBSUMsSUFBSSxrQkFDbENGLEVBQU9HLFlBQVksRUFBWUMsSUFBa0MsNkJBQUVwRCxVQUFVLENBQUNzQyxFQUFVSyxFQUFTSSxLQUNqR0MsRUFBT0ssVUFBWSxTQUFTeFAsR0FDMUJtUCxFQUFPTSxZQUNQak4sRUFBUSxFQUFVK00sSUFBa0MsNkJBQUd2UCxFQUFFdUwsTUFDM0QsSUFFSixDRHpCdUJtRSxDQUF5Q2IsRUFBT0osRUFBVUssRUFBU0osR0FFbEYsYUFETU0sRUFBU2hNLE1BQUsyTSxJQUFhWixFQUFVWSxDQUFPLElBQUtDLElBQVksTUFBTSxJQUFJdk8sTUFBTSxVQUFVdU8sSUFBUyxJQUMvRmIsQ0FDWCxHQUNKLENFdkJPLFNBQVNjLEVBQW9DQyxFQUFjQyxFQUFXQyxHQUN6RUEsRUFBVzdNLEtBQU80TSxFQUFVNU0sS0FBTyxjQUNuQyxJQUFJOE0sRUFBd0Isd0JBQXlCLENBQUNILEVBQWNDLEVBQVdDLElBRS9FLE9BREFDLEVBQXNCOU0sS0FBTywwQkFDdEIscUJBQXNCOE0sRUFBdUIsQ0FBRUMsTUFBT0QsRUFBc0I5TSxLQUMvRWdOLEVBQUdKLEVBQVU1TSxLQUNiaUYsRUFBRzRILEVBQVc3TSxLQUNkaU4sb0JBQW9CLEVBQ3BCQyxXQUFZLFNBQ1pDLE9BQVFSLEVBQWEzTSxNQUU3QixDQUVPLFNBQVNvTixFQUErQjlCLEVBQVUrQixHQUNyREEsRUFBaUJyTixLQUFPLHlCQUN4QixJQUFJc04sRUFBb0IsR0FDeEIsSUFBSyxNQUFNaEYsS0FBT2dELEVBQ2RnQyxFQUFrQjNFLEtBQUtMLEVBQUl0SSxNQUMvQixJQUFJdU4sRUFBdUIscUJBQXNCLFVBQVdELEdBQ3hERSxFQUFjLHdCQUF5QixDQUFDRCxFQUFzQkYsSUFFbEUsT0FEQUcsRUFBWXhOLEtBQU8sMEJBQ1osa0JBQW1Cd04sRUFBYSxDQUFFVCxNQUFPUyxFQUFZeE4sS0FBTXlOLE1BQU8sVUFDckVsUSxNQUFPLHlCQUEwQm1RLGNBQWUsT0FDeEQsQ0FFTyxTQUFTQyxFQUFrQmhCLEVBQWNpQixFQUFTQyxHQUNyRCxJQUFJQyxFQUFnQixDQUFDbkIsR0FDckIsSUFBSyxJQUFJMU8sRUFBSSxFQUFHQSxFQUFJMlAsRUFBUTVQLE9BQVFDLElBQ2hDMlAsRUFBUTNQLEdBQUcrQixLQUFPLFlBQVkvQixFQUFJLElBQ2xDNlAsRUFBY25GLEtBQUtpRixFQUFRM1AsSUFFL0IsSUFBSyxJQUFJQSxFQUFJLEVBQUdBLEVBQUk0UCxFQUFRN1AsT0FBUUMsSUFDaEM0UCxFQUFRNVAsR0FBRytCLEtBQU8sWUFBWS9CLEVBQUksSUFDbEM2UCxFQUFjbkYsS0FBS2tGLEVBQVE1UCxJQUUvQixJQUFJOFAsRUFBUyx3QkFBeUJELEdBQ3RDQyxFQUFPL04sS0FBTyxTQUVkLE1BQU1nTyxFQUFRSixFQUFRNVAsT0FBUyxFQUFJLEVBQUksRUFDdkMsT0FBTyxxQkFBc0IrUCxFQUFRLENBQUVoQixNQUFPZ0IsRUFBTy9OLEtBQ2pEZ04sRUFBR1ksRUFBUSxHQUFHNU4sS0FDZGlGLEVBQUcySSxFQUFRSSxHQUFPaE8sS0FDbEJrTixXQUFZLFNBQ1pDLE9BQVFSLEVBQWEzTSxNQUU3QixDQ3REQSxJQUFJLEVBQXdDLFNBQVVqQixFQUFTQyxFQUFZSSxFQUFHSCxHQUUxRSxPQUFPLElBQUtHLElBQU1BLEVBQUlGLFdBQVUsU0FBVUcsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVWhDLEdBQVMsSUFBTWlDLEVBQUtQLEVBQVVRLEtBQUtsQyxHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDMUYsU0FBUzZDLEVBQVNuQyxHQUFTLElBQU1pQyxFQUFLUCxFQUFpQixNQUFFMUIsR0FBUyxDQUFFLE1BQU9WLEdBQUt5QyxFQUFPekMsRUFBSSxDQUFFLENBQzdGLFNBQVMyQyxFQUFLRyxHQUpsQixJQUFlcEMsRUFJYW9DLEVBQU9DLEtBQU9QLEVBQVFNLEVBQU9wQyxRQUoxQ0EsRUFJeURvQyxFQUFPcEMsTUFKaERBLGFBQWlCNkIsRUFBSTdCLEVBQVEsSUFBSTZCLEdBQUUsU0FBVUMsR0FBV0EsRUFBUTlCLEVBQVEsS0FJakJzQyxLQUFLTixFQUFXRyxFQUFXLENBQzdHRixHQUFNUCxFQUFZQSxFQUFVYSxNQUFNZixFQUFTQyxHQUFjLEtBQUtTLE9BQ2xFLEdBQ0osRUFJQSxNQUFNd08sRUFBeUIsRUFDekJDLEVBQXVCLEVBQ3ZCQyxFQUFtQixZQUNuQkMsR0FBaUIsUUFFaEIsU0FBU0MsS0FDWixPQUFPLHdCQUF5QixDQUM1QixxQkFBc0IsUUFBUyxDQUFDLFlBQWEsT0FBUSxNQUFPLFlBQWEsU0FBVSxTQUFVLFNBQVUsU0FBVSxRQUFTLFNBQVUsUUFBUyxXQUFZLFVBQVcsYUFBYyxVQUFXLFVBQVcsU0FBVSxXQUFZLFVBQVcsT0FBUSxTQUFVLFVBQVcsVUFBVyxVQUFXLFVBQVcsY0FBZSxjQUFlLFNBQVUsU0FBVSxXQUN6Vix3QkFBeUIsU0FBVSxJQUFJL0gsV0FBVyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxLQUMxSSx3QkFBeUIsUUFBUyxJQUFJQSxXQUFXLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEtBQ3pJLHdCQUF5QixZQUFhLElBQUlBLFdBQVcsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsS0FDN0ksd0JBQXlCLFlBQWEsSUFBSUEsV0FBVyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxLQUM3SSwwQkFBMkIsYUFBYyxJQUFJQyxhQUFhLENBQUMsS0FBTSxtQkFBb0IsbUJBQW9CLEtBQU0sa0JBQW1CLGtCQUFtQixrQkFBbUIsS0FBTSxrQkFBbUIsSUFBSyxpQkFBa0Isa0JBQW1CLG1CQUFvQixrQkFBbUIsS0FBTSxLQUFNLGtCQUFtQixtQkFBb0IsS0FBTSxpQkFBa0Isa0JBQW1CLGtCQUFtQixrQkFBbUIsaUJBQWtCLGtCQUFtQixrQkFBbUIsa0JBQW1CLG1CQUFvQixrQkFBbUIscUJBQ3hnQiwwQkFBMkIsU0FBVSxJQUFJQSxhQUFhLENBQUMsa0JBQW1CLGtCQUFtQixrQkFBbUIsa0JBQW1CLGtCQUFtQixrQkFBbUIsSUFBSyxtQkFBb0Isa0JBQW1CLG1CQUFvQixrQkFBbUIsbUJBQW9CLG1CQUFvQixrQkFBbUIsa0JBQW1CLGtCQUFtQixrQkFBbUIsbUJBQW9CLG1CQUFvQixtQkFBb0IsSUFBSyxrQkFBbUIsa0JBQW1CLGtCQUFtQixtQkFBb0Isa0JBQW1CLGtCQUFtQixrQkFBbUIsa0JBQW1CLHFCQUMxa0IsMEJBQTJCLFFBQVMsSUFBSUEsYUFBYSxDQUFDLEtBQU0saUJBQWtCLGtCQUFtQixtQkFBb0Isa0JBQW1CLGtCQUFtQixHQUFJLGtCQUFtQixrQkFBbUIsaUJBQWtCLGtCQUFtQixrQkFBbUIsR0FBSSxpQkFBa0Isa0JBQW1CLGtCQUFtQixrQkFBbUIsaUJBQWtCLEdBQUksS0FBTSxpQkFBa0IsbUJBQW9CLGlCQUFrQixpQkFBa0IsS0FBTSxLQUFNLGlCQUFrQixrQkFBbUIsa0JBQW1CLG9CQUN0ZiwwQkFBMkIsU0FBVSxJQUFJQSxhQUFhLENBQUMsbUJBQW9CLGtCQUFtQixrQkFBbUIsR0FBSSxrQkFBbUIsbUJBQW9CLG1CQUFvQixtQkFBb0IsS0FBTSxrQkFBbUIsbUJBQW9CLGtCQUFtQixrQkFBbUIsa0JBQW1CLEtBQU0sS0FBTSxtQkFBb0Isa0JBQW1CLG1CQUFvQixtQkFBb0IsS0FBTSxLQUFNLEdBQUksR0FBSSxtQkFBb0Isa0JBQW1CLG1CQUFvQixrQkFBbUIsS0FBTSxRQUM3ZSx3QkFBeUIsY0FBZSxJQUFJRCxXQUFXLENBQUMsS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLFFBQ3RPLHdCQUF5QixXQUFZLElBQUlBLFdBQVcsQ0FBQyxJQUFLLElBQUssSUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUksSUFBSyxJQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUksSUFBSyxJQUFLLElBQUssT0FDM0wsd0JBQXlCLGFBQWMsSUFBSUEsV0FBVyxDQUFDLElBQUssSUFBSyxJQUFLLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssR0FBSSxJQUFLLElBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxPQUN4TCx3QkFBeUIsV0FBWSxJQUFJQSxXQUFXLENBQUMsSUFBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sSUFBTSxLQUFNLEtBQU0sS0FBTSxJQUFNLEtBQU0sSUFBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLFFBQ25PLHdCQUF5QixTQUFVLElBQUlBLFdBQVcsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksS0FDL0ksd0JBQXlCLFdBQVksSUFBSUEsV0FBVyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxNQUN6Syx3QkFBeUIsY0FBZSxJQUFJQSxXQUFXLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLE1BQzVLLHdCQUF5QixRQUFTLElBQUlBLFdBQVcsQ0FBQyxNQUFPLE1BQU8sTUFBTyxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxNQUFPLEtBQU0sTUFBTyxNQUFPLEtBQU0sS0FBTSxLQUFNLEtBQU0sTUFBTyxNQUFPLE1BQU8sS0FBTSxLQUFNLEtBQU0sS0FBTSxNQUFPLEtBQU0sTUFBTyxNQUFPLE1BQU8sVUFFclAsQ0FFTyxTQUFTZ0ksR0FBZ0NDLEVBQVFDLEVBQWN4TyxFQUFNeU8sRUFBY0MsRUFBZUMsRUFBSzFNLEVBQUsyTSxHQUMvRyxPQUFPLEVBQVVqUyxVQUFNLE9BQVEsR0FBUSxhSmZwQyxTQUFpQzhSLEVBQWNDLEVBQWVDLEVBQUsxTSxFQUFLMk0sR0FDM0UsR0FBSUQsR0FBTzFNLEVBQ1AsTUFBTSxJQUFJL0QsTUFBTThNLEdBQ3BCLEdBQUkwRCxFQUFnQmhFLEVBQ2hCLE1BQU0sSUFBSXhNLE1BQU0rTSxHQUNwQixHQUFJd0QsRUFBZWhFLEVBQ2YsTUFBTSxJQUFJdk0sTUFBTWdOLEdBQ3BCLEdBQUswRCxFQUFzQmpFLEdBQW9CaUUsRUFBc0JoRSxFQUNqRSxNQUFNLElBQUkxTSxNQUFNaU4sRUFDeEIsQ0lRUTBELENBQXdCSixFQUFjQyxFQUFlQyxFQUFLMU0sRUFBSzJNLEdBRS9ELE1BQU1FLEVBQWtCLGtCQUFtQixTQUFVLGVBQWdCTixHQUVyRSxJQUFJNUMsRUFDQUMsRUZZTEMsZUFBMkN5QyxFQUFRQyxFQUFjQyxFQUFjQyxFQUFlQyxFQUFLMU0sRUFBSzJNLEdBQzdHLE9BQU8sSUFBSTFQLFNBQVEsQ0FBQ0csRUFBU0MsS0FDM0IsTUFBTTBNLEVBQVMsSUFBSUMsT0FBTyxJQUFJQyxJQUFJLG1CQUNsQ0YsRUFBT0csWUFBWSxFQUFZQyxJQUFxQixnQkFBRXBELFVBQVUsQ0FBQ3VGLEVBQVFDLEVBQWNDLEVBQWNDLEVBQWVDLEVBQUsxTSxFQUFLMk0sS0FDOUg1QyxFQUFPSyxVQUFZLFNBQVN4UCxHQUMxQm1QLEVBQU9NLFlBQ1BqTixFQUFRLEVBQVUrTSxJQUFxQixnQkFBR3ZQLEVBQUV1TCxNQUM5QyxJQUVKLENFckJ1QjJHLENBQTRCUixFQUFRTyxFQUFpQkwsRUFBY0MsRUFBZUMsRUFBSzFNLEVBQUsyTSxTQUNyRy9DLEVBQVNoTSxNQUFLMk0sSUFBYVosRUFBVVksQ0FBTyxJQUFLQyxJQUFZLE1BQU0sSUFBSXZPLE1BQU0sVUFBVXVPLElBQVMsSUFFdEdiLEVBQVFzQyxHQUFzQmxPLEtBQU9vTyxHQUVyQyxJQUFLLE1BQU05RixLQUFPc0QsRUFBUXFDLEdBQ3RCM0YsRUFBSXRJLEtBQU9tTyxFQUFtQjdGLEVBQUl0SSxLQUV0QyxNQUFNZ1AsRUFBSyx3QkFBeUJwRCxFQUFRcUMsSUFHNUMsT0FGQWUsRUFBR2hQLEtBQU9BLEVBQ1ZnUCxFQUFHdEYsUUFBUTFGLElBQUk0SCxFQUFRc0MsSUFDaEJjLENBQ1gsR0FDSixDQzdEQSxJQUFJLEdBQXdDLFNBQVVqUSxFQUFTQyxFQUFZSSxFQUFHSCxHQUUxRSxPQUFPLElBQUtHLElBQU1BLEVBQUlGLFdBQVUsU0FBVUcsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVWhDLEdBQVMsSUFBTWlDLEVBQUtQLEVBQVVRLEtBQUtsQyxHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDMUYsU0FBUzZDLEVBQVNuQyxHQUFTLElBQU1pQyxFQUFLUCxFQUFpQixNQUFFMUIsR0FBUyxDQUFFLE1BQU9WLEdBQUt5QyxFQUFPekMsRUFBSSxDQUFFLENBQzdGLFNBQVMyQyxFQUFLRyxHQUpsQixJQUFlcEMsRUFJYW9DLEVBQU9DLEtBQU9QLEVBQVFNLEVBQU9wQyxRQUoxQ0EsRUFJeURvQyxFQUFPcEMsTUFKaERBLGFBQWlCNkIsRUFBSTdCLEVBQVEsSUFBSTZCLEdBQUUsU0FBVUMsR0FBV0EsRUFBUTlCLEVBQVEsS0FJakJzQyxLQUFLTixFQUFXRyxFQUFXLENBQzdHRixHQUFNUCxFQUFZQSxFQUFVYSxNQUFNZixFQUFTQyxHQUFjLEtBQUtTLE9BQ2xFLEdBQ0osRUFlTyxNQUFNd1AsR0FBUyxFQUNUQyxHQUFhLEVBQ2JDLEdBQU0sRUFDTkMsR0FBVSxFQUVqQkMsR0FBc0IsRUFDdEJDLEdBQXdCLEVBQ3hCQyxHQUFjLEVBQ2RDLEdBQWlCLEVBQ2pCQyxHQUFxQixFQUNyQkMsR0FBc0IsRUFDdEJDLEdBQXlCLEVBQ3pCQyxHQUFvQixFQUNwQkMsR0FBeUIsRUFDekJDLEdBQXNCLEVBQ3RCQyxHQUF1QixFQUN2QkMsR0FBdUIsRUFDdkJDLEdBQXNCLEVBRXRCQyxHQUFrQixFQUNsQkMsR0FBcUIsRUFDckJDLEdBQXFCLEVBQ3JCQyxHQUFzQixFQUN0QkMsR0FBc0IsRUFFdEJDLEdBQXNCLEVBQ3RCQyxHQUEwQixFQUMxQkMsR0FBNkIsRUFDN0JDLEdBQTZCLEVBRTdCQyxHQUFzQixtQ0FDdEJDLEdBQTBCLG1DQUMxQkMsR0FBNkIsK0JBQzdCQyxHQUE2QiwrQkFDN0JDLEdBQXVCLG9CQUV2QkMsR0FBUyxTQUNUQyxHQUFZLFlBQ1pDLEdBQWMsY0FDZEMsR0FBd0IsbUJBQ3hCQyxHQUFPLE9BQ1BDLEdBQVUsVUFDVkMsR0FBb0IsUUFDcEJDLEdBQXFCLFNBQ3JCQyxHQUFRLFFBQ1JDLEdBQVMsU0FDVEMsR0FBZ0IsZ0JBQ2hCQyxHQUFpQixpQkFDakJDLEdBQWlCLGlCQUNqQkMsR0FBc0IsaUJBQ3RCQyxHQUEyQixzQkFDM0JDLEdBQWMsZ0JBQ2RDLEdBQTBCLENBQUMsU0FBVSxhQUFjLE1BQU8sV0FDMURDLEdBQWdCLGVBQ2hCQyxHQUFnQixlQUNoQkMsR0FBMEIsMEJBQzFCQyxHQUEwQiwwQkFDMUJDLEdBQWMsY0FDZEMsR0FBYyxjQUNkQyxHQUFvQixvQkFDcEJDLEdBQTRCLDRCQUM1QkMsR0FBNEIsNEJBQzVCQyxHQUFZLGVBQ1pDLEdBQTZCLG1CQUM3QkMsR0FBeUIsZUFDekJDLEdBQXdCLHlCQUN4QkMsR0FBYSxhQUViQyxHQUFRLEVBQ1JDLEdBQWEsRUFDYkMsR0FBbUIsRUFDbkJDLEdBQXFCLEVBQ3JCQyxHQUFzQixFQUN0QkMsR0FBdUIsRUFFdkJDLEdBQWEsRUFDYkMsR0FBbUIsRUFpSWxCLFNBQVNDLEdBQWdCQyxFQUFpQnhFLEVBQUl5RSxHQUNqRCxPQUFPLEdBQVU5VyxVQUFNLE9BQVEsR0FBUSxZQUNuQyxJQUFJK00sRUFBVXNGLEVBQUd0RixRQUNieUQsRUFBU3pELEVBQVFnSyxPQUFPRCxHQUU1QixPQURBL0osRUFBUTNGLE9BQU8wUCxTQXZFdkIsU0FBOEJELEVBQWlCRyxFQUFTeEcsR0FDcEQsT0FBTyxHQUFVeFEsVUFBTSxPQUFRLEdBQVEsYUE1RDNDLFNBQThCNlcsR0FFMUIsR0FBSUEsRUFBZ0JJLE9BQVNyRCxHQUN6QixNQUFNLElBQUlyUyxNQUFNeVMsSUFFcEIsT0FBUTZDLEVBQWdCakYsUUFDcEIsS0FBS1UsR0FDRCxPQUNKLEtBQUtFLEdBQ0QsR0FBSXFFLEVBQWdCSyxPQUFTckQsR0FDekIsTUFBTSxJQUFJdFMsTUFBTTBTLElBQ3BCLE9BQ0osS0FBSzFCLEdBRUQsR0FBSXNFLEVBQWdCTSxRQUFVckQsR0FDMUIsTUFBTSxJQUFJdlMsTUFBTTJTLElBRXBCLEdBQUkyQyxFQUFnQk8sUUFBVXJELEdBQzFCLE1BQU0sSUFBSXhTLE1BQU00UyxJQUNwQixPQUNKLEtBQUsxQixHQUNELE9BQ0osUUFDSSxNQUFNLElBQUlsUixNQUFNNlMsSUFFNUIsQ0FxQ1FpRCxDQUFxQlIsR0FFckIsTUFBTVMsRUFBb0IsQ0FBQ1osR0FBWUEsSUFFdkMsT0FBUUcsRUFBZ0JqRixRQUNwQixLQUFLVSxHQUNELE1BQ0osS0FBS0UsR0FDRDhFLEVBQWtCL0QsSUFBbUJzRCxFQUFnQkssTUFDckQsTUFDSixLQUFLM0UsR0FDRCtFLEVBQWtCOUQsSUFBc0JxRCxFQUFnQk0sT0FDeERHLEVBQWtCN0QsSUFBc0JvRCxFQUFnQk8sT0FDeEQsTUFDSixLQUFLM0UsR0FDRDZFLEVBQWtCNUQsSUFBdUJtRCxFQUFnQlUsTUFDekRELEVBQWtCM0QsSUFBdUJrRCxFQUFnQlcsTUFDekQsTUFDSixRQUNJLE1BQU0sSUFBSWpXLE1BQU02UyxJQUl4QixJQU9JL0csRUFQQXdFLEVBQWUsa0JBQW1CLFNBQVVrRCxHQUFldUMsR0FFM0RHLEVBQVlULEVBQVFqTCxTQUNwQjJMLEVBQW1CRCxFQUFVLEdBQUdwVyxPQUFTc1YsR0FDekNnQixFQUEwQkYsRUFBVXBXLE9BQVNzVixHQUM3Q2lCLEVBQStCbEYsR0FHL0J4RCxFSDNFTEMsZUFBZ0Q4SCxFQUFPckYsRUFBUUMsRUFBYzZGLEVBQWtCQyxFQUF5QkMsRUFBOEJaLEVBQVN4RyxHQUNwSyxPQUFPLElBQUlqTyxTQUFRLENBQUNHLEVBQVNDLEtBQzNCLE1BQU0wTSxFQUFTLElBQUlDLE9BQU8sSUFBSUMsSUFBSSxtQkFDbENGLEVBQU9HLFlBQVksRUFBWUMsSUFBMEIscUJBQUVwRCxVQUFVLENBQUM0SyxFQUFPckYsRUFBUUMsRUFBYzZGLEVBQWtCQyxFQUF5QkMsRUFBOEJaLEVBQVN4RyxLQUNyTG5CLEVBQU9LLFVBQVksU0FBU3hQLEdBQzFCbVAsRUFBT00sWUFDUGpOLEVBQVEsRUFBVStNLElBQTBCLHFCQUFHdlAsRUFBRXVMLE1BQ25ELElBRUosQ0drRXVCb00sQ0FBaUNoQixFQUFnQkksTUFBT0osRUFBZ0JqRixPQUFRQyxFQUFjNkYsRUFBa0JDLEVBQXlCQyxFQUE4QlosRUFBU3hHLFNBQ3pMdEIsRUFBU2hNLE1BQUsyTSxJQUFheEMsRUFBU3dDLENBQU8sSUFBS0MsSUFBWSxNQUFNLElBQUl2TyxNQUFNLFVBQVV1TyxJQUFTLElBRXJHekMsRUFBT3VGLElBQWF2UCxLQUFPb1IsR0FDM0JwSCxFQUFPd0YsSUFBZ0J4UCxLQUFPcVIsR0FDOUJySCxFQUFPeUYsSUFBb0J6UCxLQUFPc1IsR0FDbEN0SCxFQUFPMEYsSUFBcUIxUCxLQUFPdVIsR0FDbkN2SCxFQUFPMkYsSUFBd0IzUCxLQUFPaVIsR0FDdENqSCxFQUFPNEYsSUFBbUI1UCxLQUFPa1IsR0FDakNsSCxFQUFPNkYsSUFBd0I3UCxLQUFPbVIsR0FFdEMsSUFBSXNELEVBQVEsQ0FDUkMsV0FBWWxCLEVBQWdCSSxNQUM1QmUsV0FBWW5CLEVBQWdCakYsT0FDNUJDLGFBQWNBLEVBQ2RvRyxZQUFhekgsRUFDYjBILG9CQUFxQix3QkFBeUI3SyxFQUFPc0YsS0FDckR3RixNQUFPOUssRUFBT3VGLElBQ2R3RixRQUFTL0ssRUFBT3dGLElBQ2hCd0YsWUFBYWhMLEVBQU95RixJQUNwQndGLGFBQWNqTCxFQUFPMEYsSUFDckJ3RixnQkFBaUJsTCxFQUFPMkYsSUFDeEJ3RixZQUFhbkwsRUFBTzRGLElBQ3BCd0YsZ0JBQWlCcEwsRUFBTzZGLElBQ3hCd0YsZ0JBQVkvTCxFQUNab0YsY0FBZTBGLEVBQVVwVyxPQUN6QnNYLGtCQUFtQmxCLEVBQVUsR0FBR3BXLFFBR3BDLE9BdEZSLFNBQTBCeVcsR0FDdEIsSUFBSXJNLEVBQU9xTSxFQUFNVyxnQkFBZ0I3TSxhQUU3QmdOLEVBQUtuTixFQUFLMEgsSUFDVjBGLEVBQUtwTixFQUFLNkgsSUFDVndGLEVBQUtyTixFQUFLNEgsSUFDVjBGLEVBQUt0TixFQUFLMkgsSUFDVjNRLEVBQUltVyxFQUFLRyxFQUNUQyxFQUFJRixFQUFLRCxFQUNUSSxFQUFNTCxFQUFLblcsRUFDWHlXLEVBQU1MLEVBQUtHLEVBQ1hHLEVBQU1QLEdBQU1BLEVBQUtFLEdBQ2pCTSxFQUFNUCxHQUFNQSxFQUFLRSxHQUNqQk0sR0FBT1QsRUFBS0MsSUFBT3BXLEVBQUl1VyxHQUN2Qk0sR0FBTUwsRUFBTUMsR0FBTyxFQUN2QnBCLEVBQU15QixZQUFjTixFQUNwQm5CLEVBQU0wQixZQUFjTixFQUNwQnBCLEVBQU0yQixpQkFBbUJILEVBQ3pCeEIsRUFBTTRCLHdCQUEwQlAsRUFDaENyQixFQUFNNkIsd0JBQTBCUCxFQUNoQ3RCLEVBQU1ZLFdBQXlCLEtBQVgsRUFBSVcsRUFDNUIsQ0FnRVFPLENBQWlCOUIsR0FDVkEsQ0FDWCxHQUNKLENBT3FCK0IsQ0FBcUJoRCxFQUFpQjlKLEVBQVN5RCxFQUNoRSxHQUNKLENBNkJPLFNBQVNzSixHQUFnQnpILEVBQUl5RixHQUNoQ3pGLEVBQUdoUCxLQUFPMFMsR0FDVjFELEVBQUd0RixRQUFRMUYsSUFBSXlRLEVBQU1HLGFBQ3JCNUYsRUFBR3RGLFFBQVExRixJQUFJeVEsRUFBTVMsaUJBQ3JCbEcsRUFBR3RGLFFBQVExRixJQUFJeVEsRUFBTVUsYUFDckIsSUFBSXVCLEVBQVMscUJBQXdCMUgsR0FDckMwSCxFQUFPQyxVQUFVLGNBakNyQixTQUFzQmxDLEdBQ2xCLElBQUlqRyxFQUFlaUcsRUFBTWpHLGFBQWFqRyxhQUN0QyxPQUFPLHdCQUF5QixDQUM1QixrQkFBbUIsU0FBVWlKLEdBQU8sQ0FBQ2lELEVBQU1DLGFBQzNDLHFCQUFzQmpELEdBQVEsQ0FBQ08sR0FBd0J5QyxFQUFNRSxjQUM3RCxrQkFBbUIsU0FBVWhELEdBQWdCLENBQUNuRCxFQUFhLEtBQzNELGtCQUFtQixTQUFVb0QsR0FBZ0IsQ0FBQ3BELEVBQWEsS0FDM0Qsa0JBQW1CLFNBQVVxRCxHQUFxQixDQUFDNEMsRUFBTS9GLGdCQUN6RCxrQkFBbUIsU0FBVW9ELEdBQTBCLENBQUMyQyxFQUFNYSxvQkFDOUQsa0JBQW1CLFNBQVV2RCxHQUFhLENBQUMwQyxFQUFNWSxhQUNqRCxrQkFBbUIsU0FBVTlDLEdBQW1CLENBQUNrQyxFQUFNMkIsbUJBQ3ZELGtCQUFtQixTQUFVL0QsR0FBYSxDQUFDb0MsRUFBTXlCLGNBQ2pELGtCQUFtQixTQUFVNUQsR0FBYSxDQUFDbUMsRUFBTTBCLGNBQ2pELGtCQUFtQixTQUFVM0QsR0FBMkIsQ0FBQ2lDLEVBQU00QiwwQkFDL0Qsa0JBQW1CLFNBQVU1RCxHQUEyQixDQUFDZ0MsRUFBTTZCLDJCQUV2RSxDQWlCb0NNLENBQWFuQyxLQUM3Q2lDLEVBQU9DLFVBQVUscUJBQXNCM0gsRUFBSSxDQUFFakMsTUFBTzRGLEdBQ2hEa0UsTUFBT3BDLEVBQU1TLGdCQUFnQmxWLFFBRWpDMFcsRUFBT0MsVUFBVSxxQkFBc0IzSCxFQUFJLENBQUVqQyxNQUFPNkYsR0FDaERpRSxNQUFPcEMsRUFBTUcsWUFBWTVVLFFBRTdCMFcsRUFBT0MsVUFBVSxjQXRCckIsU0FBOEJsQyxHQUMxQixJQUFJck0sRUFBT3FNLEVBQU1XLGdCQUFnQjdNLGFBQ2pDLE9BQU8sd0JBQXlCLENBQzVCLHFCQUFzQixHQUFJLENBQUMwSixHQUFlQyxLQUMxQyxrQkFBbUIsTUFBT0MsR0FBeUIsQ0FBQy9KLEVBQUswSCxJQUFzQjFILEVBQUs0SCxNQUNwRixrQkFBbUIsTUFBT29DLEdBQXlCLENBQUNoSyxFQUFLMkgsSUFBdUIzSCxFQUFLNkgsT0FFN0YsQ0Flb0M2RyxDQUFxQnJDLEtBQ3JEaUMsRUFBT0MsVUFBVSxxQkFBc0IzSCxFQUFJLENBQUVqQyxNQUFPOEYsR0FDaERnRSxNQUFPcEMsRUFBTVUsWUFBWW5WLE9BRWpDLENBRU8sU0FBUytXLEdBQWV0QyxHQUUzQixJQUFJdUMsRUFBV3ZDLEVBQU1JLG9CQUFvQm5MLFFBQ3JDK0UsRUFBZWdHLEVBQU1hLGtCQUNyQjVHLEVBQWdCK0YsRUFBTS9GLGNBUXRCL08sRUFBUyxJQUFJc1gsV0FKQWxFLElBQVNDLEdBQWFDLEdBQ25DeEUsRUFBZUMsRUFBZ0JBLEVBQWdCRCxFQUFlNkUsR0FDNUQ1RSxFQUFnQjRFLEdBQW1CNUUsRUFBZ0JELElBR3JEeUksRUFBU3ZYLEVBQU91WCxPQUNoQkMsRUFBUyxFQUVUQyxFQUFPLElBQUk5USxXQUFXNFEsRUFBUUMsRUFBUW5FLElBQzFDb0UsRUFBS2xFLElBQXNCdUIsRUFBTUUsV0FDakN5QyxFQUFLakUsSUFBdUIxRSxFQUM1QjJJLEVBQUtoRSxJQUF3QjFFLEVBQzdCeUksR0FBVW5FLEdBQWFELEdBRXZCLElBQUlzRSxFQUFTLElBQUk5USxhQUFhMlEsRUFBUUMsRUFBUWxFLElBQzlDb0UsRUFBT0MsSUFBSTdDLEVBQU1qRyxhQUFhakcsY0FDOUI0TyxHQUFVbEUsR0FBbUJGLEdBRTdCc0UsRUFBUyxJQUFJOVEsYUFBYTJRLEVBQVFDLEVBQVExSSxHQUMxQzRJLEVBQU9DLElBQUk3QyxFQUFNRyxZQUFZck0sY0FDN0I0TyxHQUFVMUksRUFBZXNFLEdBRXpCc0UsRUFBUyxJQUFJOVEsYUFBYTJRLEVBQVFDLEVBQVF6SSxHQUMxQzJJLEVBQU9DLElBQUk3QyxFQUFNSyxNQUFNdk0sY0FDdkI0TyxHQUFVekksRUFBZ0JxRSxHQUUxQnNFLEVBQVMsSUFBSTlRLGFBQWEyUSxFQUFRQyxFQUFRekksR0FDMUMySSxFQUFPQyxJQUFJN0MsRUFBTU0sUUFBUXhNLGNBQ3pCNE8sR0FBVXpJLEVBQWdCcUUsR0FFMUJzRSxFQUFTLElBQUk5USxhQUFhMlEsRUFBUUMsRUFBUTFJLEVBQWU2RSxJQUN6RCtELEVBQU9DLElBQUk3QyxFQUFNTyxZQUFZek0sY0FDN0I0TyxJQUFXMUksRUFBZTZFLElBQW9CUCxHQUU5Q3NFLEVBQVMsSUFBSTlRLGFBQWEyUSxFQUFRQyxFQUFRekksRUFBZ0I0RSxJQUMxRCtELEVBQU9DLElBQUk3QyxFQUFNUSxhQUFhMU0sY0FDOUI0TyxJQUFXekksRUFBZ0I0RSxJQUFvQlAsR0FFL0MsSUFBSyxNQUFNekssS0FBTzBPLEVBQ2RLLEVBQVMsSUFBSTlRLGFBQWEyUSxFQUFRQyxFQUFRekksR0FDMUMySSxFQUFPQyxJQUFJaFAsRUFBSUMsY0FDZjRPLEdBQVV6SSxFQUFnQnFFLEdBRTlCLE9BQU9wVCxDQUNYLENBK0NPLFNBQVM0WCxHQUFjdkksRUFBSXdJLEdBQzlCLE9BQU8sR0FBVTdhLFVBQU0sT0FBUSxHQUFRLFlBQ25DLElBQUk4WCxFQS9DWixTQUEwQitDLEdBQ3RCLElBQUlDLEVBQWFELEVBQVlOLE9BQ3pCQyxFQUFTLEVBRVRPLEVBQVMsSUFBSXBSLFdBQVdtUixFQUFZTixFQUFRbkUsSUFDaERtRSxHQUFVbkUsR0FBYUQsR0FDdkIsSUFBSXRFLEVBQWVpSixFQUFPdkUsSUFDdEJ6RSxFQUFnQmdKLEVBQU90RSxJQUUzQixNQUFNNUUsRUFBZSwwQkFBMkJrRCxHQUFlLElBQUluTCxhQUFha1IsRUFBWU4sRUFBUWxFLEtBQ3BHa0UsR0FBVWxFLEdBQW1CRixHQUU3QixNQUFNNkIsRUFBYywwQkFBMkI1RCxHQUFRLElBQUl6SyxhQUFha1IsRUFBWU4sRUFBUTFJLElBQzVGMEksR0FBVTFJLEVBQWVzRSxHQUV6QixNQUFNK0IsRUFBUSwwQkFBMkIxRCxHQUFNLElBQUk3SyxhQUFha1IsRUFBWU4sRUFBUXpJLElBQ3BGeUksR0FBVXpJLEVBQWdCcUUsR0FFMUIsTUFBTWdDLEVBQVUsMEJBQTJCMUQsR0FBUyxJQUFJOUssYUFBYWtSLEVBQVlOLEVBQVF6SSxJQUN6RnlJLEdBQVV6SSxFQUFnQnFFLEdBRTFCLE1BQU1pQyxFQUFjLDBCQUEyQjFELEdBQW1CLElBQUkvSyxhQUFha1IsRUFBWU4sRUFBUTFJLEVBQWU2RSxLQUN0SDZELElBQVcxSSxFQUFlNkUsSUFBb0JQLEdBRTlDLE1BQU1rQyxFQUFlLDBCQUEyQjFELEdBQW9CLElBQUloTCxhQUFha1IsRUFBWU4sRUFBUXpJLEVBQWdCNEUsS0FDekg2RCxJQUFXekksRUFBZ0I0RSxJQUFvQlAsR0FFL0MsSUFBSWlFLEVBQVcsR0FDZixJQUFLLElBQUkvWSxFQUFJLEVBQUdBLEVBQUl3USxFQUFjeFEsSUFDOUIrWSxFQUFTck8sS0FBSywwQkFBMkIxSyxFQUFFc0wsV0FBWSxJQUFJaEQsYUFBYWtSLEVBQVlOLEVBQVF6SSxLQUM1RnlJLEdBQVV6SSxFQUFnQnFFLEdBRTlCLE1BQU04QixFQUFzQix3QkFBeUJtQyxHQVVyRCxNQVRZLENBQUVyQyxXQUFZK0MsRUFBT3hFLElBQzdCMUUsYUFBY0EsRUFDZG9HLFlBQWFBLEVBQ2JFLE1BQU9BLEVBQ1BDLFFBQVNBLEVBQ1RDLFlBQWFBLEVBQ2JDLGFBQWNBLEVBQ2RKLG9CQUFxQkEsRUFHN0IsQ0FJb0I4QyxDQUFpQixJQUFJVixXQUFXTyxJQUN4Q0ksUUFoUVosU0FBaUJuRCxFQUFPZCxHQUNwQixPQUFPLEdBQVVoWCxVQUFNLE9BQVEsR0FBUSxZQUNuQyxJQUFJaVAsRUFDQUMsRUgzQkxDLGVBQTBDeUMsRUFBUUMsRUFBY3FKLEVBQWdCMUssRUFBUTJILEVBQU9DLEVBQVNDLEVBQWE4QyxFQUFvQkMsR0FDOUksT0FBTyxJQUFJN1ksU0FBUSxDQUFDRyxFQUFTQyxLQUMzQixNQUFNME0sRUFBUyxJQUFJQyxPQUFPLElBQUlDLElBQUksbUJBQ2xDRixFQUFPRyxZQUFZLEVBQVlDLElBQW9CLGVBQUVwRCxVQUFVLENBQUN1RixFQUFRQyxFQUFjcUosRUFBZ0IxSyxFQUFRMkgsRUFBT0MsRUFBU0MsRUFBYThDLEVBQW9CQyxLQUMvSi9MLEVBQU9LLFVBQVksU0FBU3hQLEdBQzFCbVAsRUFBT00sWUFDUGpOLEVBQVEsRUFBVStNLElBQW9CLGVBQUd2UCxFQUFFdUwsTUFDN0MsSUFFSixDR2tCdUI0UCxDQUEyQnZELEVBQU1FLFdBQVlGLEVBQU1qRyxhQUFjaUcsRUFBTUksb0JBQW9CbkwsUUFBUytLLEVBQU1HLFlBQWFILEVBQU1LLE1BQU9MLEVBQU1NLFFBQVNOLEVBQU1PLFlBQWFQLEVBQU1RLGFBQWN0QixHQUV6TSxhQURNOUgsRUFBU2hNLE1BQUsyTSxJQUFhWixFQUFVWSxDQUFPLElBQUtDLElBQVksTUFBTSxJQUFJdk8sTUFBTSxVQUFVdU8sSUFBUyxJQUMvRmIsQ0FDWCxHQUNKLENBeVB3QkQsQ0FBUThJLEVBQU96RixFQUFHdEYsU0FFbEMsT0FEQWtPLEVBQUk1WCxLQUFPOFMsR0FDSix3QkFBeUIsQ0FBQzhFLEdBQ3JDLEdBQ0osQ0NyWUEsSUFBSSxHQUF3QyxTQUFVN1ksRUFBU0MsRUFBWUksRUFBR0gsR0FFMUUsT0FBTyxJQUFLRyxJQUFNQSxFQUFJRixXQUFVLFNBQVVHLEVBQVNDLEdBQy9DLFNBQVNDLEVBQVVoQyxHQUFTLElBQU1pQyxFQUFLUCxFQUFVUSxLQUFLbEMsR0FBUyxDQUFFLE1BQU9WLEdBQUt5QyxFQUFPekMsRUFBSSxDQUFFLENBQzFGLFNBQVM2QyxFQUFTbkMsR0FBUyxJQUFNaUMsRUFBS1AsRUFBaUIsTUFBRTFCLEdBQVMsQ0FBRSxNQUFPVixHQUFLeUMsRUFBT3pDLEVBQUksQ0FBRSxDQUM3RixTQUFTMkMsRUFBS0csR0FKbEIsSUFBZXBDLEVBSWFvQyxFQUFPQyxLQUFPUCxFQUFRTSxFQUFPcEMsUUFKMUNBLEVBSXlEb0MsRUFBT3BDLE1BSmhEQSxhQUFpQjZCLEVBQUk3QixFQUFRLElBQUk2QixHQUFFLFNBQVVDLEdBQVdBLEVBQVE5QixFQUFRLEtBSWpCc0MsS0FBS04sRUFBV0csRUFBVyxDQUM3R0YsR0FBTVAsRUFBWUEsRUFBVWEsTUFBTWYsRUFBU0MsR0FBYyxLQUFLUyxPQUNsRSxHQUNKLEVBV08sTUFBTXdZLEdBQVcsSUFBSSxVQUVyQixTQUFTQyxLQUNaLGFBQWdCRCxHQUFTRSxRQUM3QixDQUVPLFNBQVNDLEtBQ1osT0FBTyxHQUFVemIsVUFBTSxPQUFRLEdBQVEsa0JKbkJwQ21QLHVCQUNDdU0sU0FDUixDSWtCY0MsRUFDVixHQUNKLENBVU8sU0FBU0MsR0FBSTdNLEVBQU9KLEVBQVVDLEVBQVlpTixFQUFRQyxHQUNyRCxPQUFPLEdBQVU5YixVQUFNLE9BQVEsR0FBUSxZQUNuQyxPSHJDRCxTQUEwQitiLEdBQzdCLElBQUssTUFBTXBRLEtBQU9vUSxFQUFTaFAsUUFBUWhCLFNBQy9CSixFQUFJdEksS0FBTyxNQUFRc0ksRUFBSXRJLEtBQzNCLE9BQU8wWSxDQUNYLENHaUNlQyxPTDVCUixTQUFvQmpOLEVBQU9KLEVBQVVDLEVBQVlpTixFQUFRQyxHQUM1RCxPQUFPLEVBQVU5YixVQUFNLE9BQVEsR0FBUSxZQUNuQzBPLEVBQWlCQyxFQUFVQyxHQUczQixJQUFJSyxFQUNBQyxFQ0pMQyxlQUFzREosRUFBT2hDLEVBQVNxQyxFQUFpQjZNLEVBQVdDLEdBQ3ZHLE9BQU8sSUFBSTNaLFNBQVEsQ0FBQ0csRUFBU0MsS0FDM0IsTUFBTTBNLEVBQVMsSUFBSUMsT0FBTyxJQUFJQyxJQUFJLG1CQUNsQ0YsRUFBT0csWUFBWSxFQUFZQyxJQUFnQywyQkFBRXBELFVBQVUsQ0FBQ1UsRUFBU3FDLEVBQWlCNk0sRUFBV0MsS0FDakg3TSxFQUFPSyxVQUFZLFNBQVN4UCxHQUMxQm1QLEVBQU9NLFlBQ1BqTixFQUFRLEVBQVUrTSxJQUFnQywyQkFBR3ZQLEVBQUV1TCxNQUN6RCxJQUVKLENETHVCMFEsQ0FBdUNwTixFQUFPSixFQUFVQyxFQUhyRGlOLEVBQVMsRUFBSSxFQUNkQyxFQUFRLEVBQUksR0FJN0IsYUFETTVNLEVBQVNoTSxNQUFLMk0sSUFBYVosRUFBVVksQ0FBTyxJQUFLQyxJQUFZLE1BQU0sSUFBSXZPLE1BQU0sVUFBVXVPLElBQVMsSUFDL0ZiLENBQ1gsR0FDSixDS2tCc0NtTixDQUFXck4sRUFBT0osRUFBVUMsRUFBWWlOLEVBQVFDLEdBQ2xGLEdBQ0osQ0FTTyxTQUFTTyxHQUFJdE4sRUFBT2xDLEVBQU84QixFQUFVSyxFQUFTSixHQUNqRCxPQUFPLEdBQVU1TyxVQUFNLE9BQVEsR0FBUSxZQUNuQyxNQUFNc2MsUUFBbUJ4TixFQUFXQyxFQUFPSixFQUFVSyxFQUFTSixJSHVCL0QsU0FBNkJHLEVBQU9pQixFQUFjckIsRUFBVUssRUFBU3VOLEdBQ3hFLElBQUlDLEVBQU8scUJBQXdCek4sRUFBTTFMLE1BRXpDbVosRUFBS3hDLFVBQVVqSyxFQUFvQ0MsRUFBY2hCLEVBQVN1TixFQUFVLEtBRXBGQyxFQUFLeEMsVUFBVXZKLEVBQStCOUIsRUFBVTROLEVBQVUsS0FFbEVDLEVBQUt4QyxVQTNCRixTQUE0QnJMLEVBQVU4TixHQUN6QyxJQUFJQyxFQUFjLEdBQ2RDLEVBQWdCLEdBQ3BCLElBQUssSUFBSWhSLEtBQU9nRCxFQUNaZ08sRUFBYzNRLEtBQUtMLEVBQUl0SSxNQUMzQnFaLEVBQVkxUSxLQUFLLHFCQUFzQixTQUFVMlEsSUFDakQsSUFBSyxJQUFJcmIsRUFBSSxFQUFHQSxFQUFJbWIsRUFBVXBiLE9BQVFDLElBQ2xDbWIsRUFBVW5iLEdBQUcrQixLQUFPLGNBQWMvQixFQUFJLElBQ3RDb2IsRUFBWTFRLEtBQUt5USxFQUFVbmIsSUFFL0IsSUFBSXNiLEVBQWEsd0JBQXlCRixHQUUxQyxPQURBRSxFQUFXdlosS0FBTyxXQUNYLHFCQUFzQnVaLEVBQVksQ0FBRXhNLE1BQU93TSxFQUFXdlosS0FDekRnTixFQUFHb00sRUFBVSxHQUFHcFosS0FDaEJpRixFQUFHbVUsRUFBVUEsRUFBVXBiLE9BQVMsR0FBR2dDLEtBQ25Da04sV0FBWSxTQUNaQyxPQUFRLFVBRWhCLENBU21CcU0sQ0FBbUJsTyxFQUFVNE4sRUFBVSxLQUV0REMsRUFBS3hDLFVBQVVoSixFQUFrQmhCLEVBQWN1TSxFQUFVLEdBQUlBLEVBQVUsSUFDM0UsQ0doQ1FPLENBQW9CL04sRUFBT2xDLEVBQU84QixFQUFVSyxFQUFTc04sRUFDekQsR0FDSixDQUtPLFNBQVNTLEtBQ1osT0FBTyxHQUFVL2MsVUFBTSxPQUFRLEdBQVEsWUFDbkMsTUFBTWdkLEVBQWEsSUFBSTFaLEVBQVcsbUNBQW9DLHNDQUNoRTJaLEVBQU92TCxLQUVQN0UsRUFBUW9RLEVBQUtsUSxRQUFRZ0ssT0FBTyxTQUM1Qi9ILEVBQVVpTyxFQUFLbFEsUUFBUWdLLE9BQU8sU0FDOUJwSSxFQUFXc08sRUFBS2xRLFFBQVEzRixPQUFPLFNBQVNBLE9BQU8sU0FDL0NtVixRQUFrQnpOLEVBQVdtTyxFQUFNdE8sRUFBVUssRUFKaEMsR0FLYmtPLEVBQWF4TCxLQUVuQixJQUFJOEssRUFDQVcsRUFGSkQsRUFBVzdaLEtBQU8sYUFHWjJaLEVBQ0RuYSxLQUFLLFFBQVEsSUFBTSxHQUFVN0MsVUFBTSxPQUFRLEdBQVEsWUFDcEQscUJBQXdCa2QsR0FDeEJWLEVBQU8scUJBQXdCVSxFQUFXN1osS0FDOUMsS0FBSSxDQUFFRyxZQUFhLG1FQUFvRXRCLE1BQU8sSUFDekZXLEtBQUssU0FBUyxJQUFNLEdBQVU3QyxVQUFNLE9BQVEsR0FBUSxZQUNyRG1kLEVBQVMsU0FBVSxDQUFFL00sTUFBTyxnQ0FDdkIvSSxJQUFJLGFBQWMsUUFBUzZWLElBQzNCN1YsSUFBSSxlQUFnQixXQUFZNFYsRUFBTXRPLEVBQVM1QyxPQUFRLENBQUVxUixlQUFXelEsRUFBVzBRLFFBQVMxTyxFQUFTOUIsV0FDakd4RixJQUFJLGNBQWUsUUFBUzRWLEVBQU1wUSxPQUFPRixJQUN6Q3RGLElBQUksY0FBZSxVQUFXNFYsRUFBTWpPLE9BQVNyQyxJQUM3Q3RGLElBQUksV0FBWSxhQXBCTixPQW9CZ0NzRixJQUMxQzJRLE1BQUssS0FDTixhQUFnQixvREFBb0QsSUFFbkVDLEtBQUssQ0FBRWxOLEVBQUcsSUFBSy9ILEVBQUcsS0FDM0IsS0FBSSxDQUFFOUUsWUFBYSwyQ0FBNEN0QixNQUFPLElBQ2pFVyxLQUFLLDRCQUE0QixJQUFNLEdBQVU3QyxVQUFNLE9BQVEsR0FBUSxZQUN4RW1kLEVBQU9LLFFBQ1BoQixFQUFLeEMsVUFBVXZKLEVBQStCOUIsRUFBVTROLEVBQVUsSUFDdEUsS0FBSSxDQUFFL1ksWUFBYSxtREFBb0R0QixNQUFPLElBQ3pFVyxLQUFLLFVBQVUsSUFBTSxHQUFVN0MsVUFBTSxPQUFRLEdBQVEsWUFBZXdjLEVBQUt4QyxVQUFVaEosRUFBa0JuRSxFQUFPMFAsRUFBVSxHQUFJQSxFQUFVLElBQU0sS0FBSSxDQUFFL1ksWUFBYSx3RUFBeUV0QixNQUFPLElBQzdPVyxLQUFLLGNBQWMsSUFBTSxHQUFVN0MsVUFBTSxPQUFRLEdBQVEsWUFBZXdjLEVBQUt4QyxVQUFVakssRUFBb0NsRCxFQUFPbUMsRUFBU3VOLEVBQVUsSUFBTSxLQUFJLENBQUUvWSxZQUFhLG9EQUFxRHRCLE1BQU8sSUFDMU91SCxPQUNULEdBQ0osQ0FVTyxTQUFTZ1UsR0FBd0JwYSxFQUFNeU8sRUFBY0MsRUFBZUMsRUFBSzFNLEVBQUsyTSxHQUNqRixPQUFPLEdBQVVqUyxVQUFNLE9BQVEsR0FBUSxZQUNuQyxhQUFhMlIsR0FBZ0NXLEdBQVEsQ0FBQyxFQUFHLEdBQUlqUCxFQUFNeU8sRUFBY0MsRUFBZUMsRUFBSzFNLEVBQUsyTSxFQUM5RyxHQUNKLENBV08sU0FBU3lMLEdBQTJCcmEsRUFBTTZULEVBQU9wRixFQUFjQyxFQUFlQyxFQUFLMU0sRUFBSzJNLEdBQzNGLE9BQU8sR0FBVWpTLFVBQU0sT0FBUSxHQUFRLFlBQ25DLGFBQWEyUixHQUFnQ2EsR0FBSyxDQUFDMEUsRUFBTyxHQUFJN1QsRUFBTXlPLEVBQWNDLEVBQWVDLEVBQUsxTSxFQUFLMk0sRUFDL0csR0FDSixDQVNPLFNBQVMwTCxHQUFxQnRMLEVBQUl5RSxFQUFnQkcsRUFBTzJHLEdBQzVELE9BQU8sR0FBVTVkLFVBQU0sT0FBUSxHQUFRLFlBQ25DLE1BQU02ZCxRQUFxQmpILEdBQWdCLENBQUVLLE1BQU9BLEVBQU9yRixPQUFRVSxJQUFVRCxFQUFJeUUsR0FHakYsT0FGSThHLEdBQ0E5RCxHQUFnQnpILEVBQUl3TCxHQUNqQnpELEdBQWV5RCxFQUMxQixHQUNKLENBT08sU0FBU0MsR0FBcUJ6TCxFQUFJeUYsR0FDckMsT0FBTyxHQUFVOVgsVUFBTSxPQUFRLEdBQVEsWUFDbkMsYUFBYTRhLEdBQWN2SSxFQUFJeUYsRUFDbkMsR0FDSixDQVVPLFNBQVNpRyxHQUFrQjFMLEVBQUl5RSxFQUFnQkcsRUFBT0MsRUFBTzBHLEdBQ2hFLE9BQU8sR0FBVTVkLFVBQU0sT0FBUSxHQUFRLFlBQ25DLE1BQU02ZCxRQUFxQmpILEdBQWdCLENBQUVLLE1BQU9BLEVBQU9yRixPQUFRWSxHQUFLMEUsTUFBT0EsR0FBUzdFLEVBQUl5RSxHQUc1RixPQUZJOEcsR0FDQTlELEdBQWdCekgsRUFBSXdMLEdBQ2pCekQsR0FBZXlELEVBQzFCLEdBQ0osQ0FPTyxTQUFTRyxHQUFrQjNMLEVBQUl5RixHQUNsQyxPQUFPLEdBQVU5WCxVQUFNLE9BQVEsR0FBUSxZQUNuQyxhQUFhNGEsR0FBY3ZJLEVBQUl5RixFQUNuQyxHQUNKLENBV08sU0FBU21HLEdBQXlCNUwsRUFBSXlFLEVBQWdCRyxFQUFPaUgsRUFBR0MsRUFBR1AsR0FDdEUsT0FBTyxHQUFVNWQsVUFBTSxPQUFRLEdBQVEsWUFDbkMsTUFBTTZkLFFBQXFCakgsR0FBZ0IsQ0FBRUssTUFBT0EsRUFBT3JGLE9BQVFXLEdBQVk0RSxPQUFRK0csRUFBRzlHLE9BQVErRyxHQUFLOUwsRUFBSXlFLEdBRzNHLE9BRkk4RyxHQUNBOUQsR0FBZ0J6SCxFQUFJd0wsR0FDakJ6RCxHQUFleUQsRUFDMUIsR0FDSixDQU9PLFNBQVNPLEdBQXlCL0wsRUFBSXlGLEdBQ3pDLE9BQU8sR0FBVTlYLFVBQU0sT0FBUSxHQUFRLFlBQ25DLGFBQWE0YSxHQUFjdkksRUFBSXlGLEVBQ25DLEdBQ0osQ0FXTyxTQUFTdUcsR0FBc0JoTSxFQUFJeUUsRUFBZ0JHLEVBQU9NLEVBQU9DLEVBQU9vRyxHQUMzRSxPQUFPLEdBQVU1ZCxVQUFNLE9BQVEsR0FBUSxZQUNuQyxNQUFNNmQsUUFBcUJqSCxHQUFnQixDQUFFSyxNQUFPQSxFQUFPckYsT0FBUWEsR0FBUzhFLE1BQU9BLEVBQU9DLE1BQU9BLEdBQVNuRixFQUFJeUUsR0FHOUcsT0FGSThHLEdBQ0E5RCxHQUFnQnpILEVBQUl3TCxHQUNqQnpELEdBQWV5RCxFQUMxQixHQUNKLENBT08sU0FBU1MsR0FBc0JqTSxFQUFJeUYsR0FDdEMsT0FBTyxHQUFVOVgsVUFBTSxPQUFRLEdBQVEsWUFDbkMsYUFBYTRhLEdBQWN2SSxFQUFJeUYsRUFDbkMsR0FDSixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJncm9rXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcInVpXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdHV0b3JpYWxzL3NyYy9kZW1vLXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL2NhbGxXYXNtLmpzIiwid2VicGFjazovL2VkYS8uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3V0aWxzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9FREF0b29scy50cyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL0VEQUFQSS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvRURBdWkudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL2RhdGFHZW5lcmF0b3JzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9zdm0udHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3BhY2thZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHNlbGYubG9jYXRpb24uaHJlZjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQzNTk6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbi8vIG5vIG9uIGNodW5rcyBsb2FkZWRcblxuLy8gbm8ganNvbnAgZnVuY3Rpb24iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gZ3JvazsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gdWk7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IERHOyIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuZXhwb3J0IGNvbnN0IHRlc3RzID0ge307XG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZCA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk7XG5leHBvcnQgdmFyIGFzc3VyZTtcbihmdW5jdGlvbiAoYXNzdXJlKSB7XG4gICAgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICB9XG4gICAgYXNzdXJlLm5vdE51bGwgPSBub3ROdWxsO1xufSkoYXNzdXJlIHx8IChhc3N1cmUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZCwgcmVwb3J0KSB7XG4gICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcG9ydCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSBjYXRjaFVuaGFuZGxlZDtcbiAgICAgICAgaWYgKHJlcG9ydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYSA9IG9wdGlvbnMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKG9wdGlvbnMudGltZW91dCA9IDMwMDAwKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50ZXN0ID0gKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgdGVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RFdmVudChldmVudCwgaGFuZGxlciwgdHJpZ2dlciwgbXMgPSAwKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHN1YjtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgICAgICAgICAgICByZWplY3QoJ3RpbWVvdXQnKTtcbiAgICAgICAgICAgIH0sIG1zKTtcbiAgICAgICAgICAgIHRyaWdnZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsLCBleHBlY3RlZCA9IHRydWUsIGVycm9yKSB7XG4gICAgaWYgKGVycm9yKVxuICAgICAgICBlcnJvciA9IGAke2Vycm9yfSwgYDtcbiAgICBlbHNlXG4gICAgICAgIGVycm9yID0gJyc7XG4gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvcn1FeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsLCBleHBlY3RlZCwgdG9sZXJhbmNlID0gMC4wMDEsIGVycm9yKSB7XG4gICAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgICAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAgICAgKGFjdHVhbCA9PT0gTnVtYmVyLk5hTiAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5hTikgfHwgKGlzTmFOKGFjdHVhbCkgJiYgaXNOYU4oZXhwZWN0ZWQpKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICAgIGV4cGVjdChhcmVFcXVhbCwgdHJ1ZSwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG4gICAgaWYgKCFhcmVFcXVhbClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdFRhYmxlKGFjdHVhbCwgZXhwZWN0ZWQsIGVycm9yKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRSb3dDb3VudCA9IGV4cGVjdGVkLnJvd0NvdW50O1xuICAgIGNvbnN0IGFjdHVhbFJvd0NvdW50ID0gYWN0dWFsLnJvd0NvdW50O1xuICAgIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9LCByb3cgY291bnRgKTtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbHVtbiA9IGFjdHVhbC5jb2x1bW5zLmJ5TmFtZShjb2x1bW4ubmFtZSk7XG4gICAgICAgIGlmIChhY3R1YWxDb2x1bW4gPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGApO1xuICAgICAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkUm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxDb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuRkxPQVQpXG4gICAgICAgICAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZS5pc1NhbWUodmFsdWUpLCB0cnVlLCBlcnJvcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLCB2YWx1ZSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgICAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgICAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChOdW1iZXIuaXNGaW5pdGUoYWN0dWFsVmFsdWUpICYmIE51bWJlci5pc0Zpbml0ZShleHBlY3RlZFZhbHVlKSlcbiAgICAgICAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICAgICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gICAgfVxufVxuLyogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnksIHRlc3RzKSB7XG4gICAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGVzdHMoKTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmUpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXIpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5mdW5jdGlvbiBhZGROYW1lc3BhY2UocywgZikge1xuICAgIHJldHVybiBzLnJlcGxhY2UobmV3IFJlZ0V4cChmLm5hbWUsICdnaScpLCBmLm5xTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5pdEF1dG9UZXN0cyhwYWNrYWdlSWQsIG1vZHVsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICh3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gICAgICAgIGlmIChtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZHVsZUF1dG9UZXN0cyA9IFtdO1xuICAgICAgICBjb25zdCBwYWNrRnVuY3Rpb25zID0geWllbGQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5maWx0ZXIoYHBhY2thZ2UuaWQgPSBcIiR7cGFja2FnZUlkfVwiYCkubGlzdCgpO1xuICAgICAgICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKC8uKlxcL1xcL1xccypza2lwWzpcXHNdKiguKikkLyk7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0cyA9IGYub3B0aW9uc1sndGVzdCddO1xuICAgICAgICAgICAgaWYgKCEodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwUmVhc29ucyA9IHRlc3RzW2ldLm1hdGNoKHJlZyk7XG4gICAgICAgICAgICAgICAgbGV0IHNraXBSZWFzb247XG4gICAgICAgICAgICAgICAgaWYgKHNraXBSZWFzb25zICYmIChza2lwUmVhc29ucyA9PT0gbnVsbCB8fCBza2lwUmVhc29ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2tpcFJlYXNvbnMubGVuZ3RoKSA+IDEpXG4gICAgICAgICAgICAgICAgICAgIHNraXBSZWFzb24gPSBza2lwUmVhc29uc1sxXTtcbiAgICAgICAgICAgICAgICBtb2R1bGVBdXRvVGVzdHMucHVzaChuZXcgVGVzdChhdXRvVGVzdHNDYXROYW1lLCB0ZXN0cy5sZW5ndGggPT09IDEgPyBmLm5hbWUgOiBgJHtmLm5hbWV9ICR7aSArIDF9YCwgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBncm9rLmZ1bmN0aW9ucy5ldmFsKGFkZE5hbWVzcGFjZSh0ZXN0c1tpXSwgZikpO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX1gO1xuICAgICAgICAgICAgICAgIH0pLCB7IHNraXBSZWFzb246IHNraXBSZWFzb24gfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgICAgIGlmICghbW9kdWxlQXV0b1Rlc3RzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVBdXRvVGVzdHMgfTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHZhciBfZTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwYWNrYWdlXyA9IChfYiA9IChfYSA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mdW5jKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFja2FnZTtcbiAgICAgICAgeWllbGQgaW5pdEF1dG9UZXN0cyhwYWNrYWdlXy5pZCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHNgKTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYyA9IChfZSA9IG9wdGlvbnMpLnRlc3RDb250ZXh0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAoX2UudGVzdENvbnRleHQgPSBuZXcgVGVzdENvbnRleHQoKSk7XG4gICAgICAgIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHtrZXl9IGNhdGVnb3J5YCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmJlZm9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0ID0gKF9kID0gdmFsdWUudGVzdHMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goeWllbGQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRlc3QpKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoeWllbGQgUHJvbWlzZS5hbGwocmVzKSkuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmFmdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7IGNhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5jYXRjaFVuaGFuZGxlZCkge1xuICAgICAgICAgICAgeWllbGQgZGVsYXkoMTAwMCk7XG4gICAgICAgICAgICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnVW5oYW5kbGVkIGV4Y2VwdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXhjZXB0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogZ3Jvay5zaGVsbC5sYXN0RXJyb3IsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5yZXBvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBERy5Mb2dnZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5zdWNjZXNzKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBza2lwcGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuc2tpcHBlZCkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+ICFyLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSAnUGFja2FnZSBAcGFja2FnZSB0ZXN0ZWQ6IEBzdWNjZXNzZnVsIHN1Y2Nlc3NmdWwsIEBza2lwcGVkIHNraXBwZWQsIEBmYWlsZWQgZmFpbGVkIHRlc3RzJztcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzZnVsOiBzdWNjZXNzZnVsLFxuICAgICAgICAgICAgICAgIHNraXBwZWQ6IHNraXBwZWQsXG4gICAgICAgICAgICAgICAgZmFpbGVkOiBmYWlsZWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHBhY2thZ2U6IHBhY2thZ2VfXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGZhaWxlZClcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgeyBbYCR7ci5jYXRlZ29yeX0gfCAke3IubmFtZX1gXTogci5yZXN1bHQgfSk7XG4gICAgICAgICAgICBsb2dnZXIubG9nKGRlc2NyaXB0aW9uLCBwYXJhbXMsICdwYWNrYWdlLXRlc3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZXhlY1Rlc3QodCwgcHJlZGljYXRlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKCF0Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIGNvbnN0IHNraXAgPSAoKF9hID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2tpcFJlYXNvbikgfHwgZmlsdGVyO1xuICAgICAgICBjb25zdCBza2lwUmVhc29uID0gZmlsdGVyID8gJ3NraXBwZWQnIDogKF9iID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2tpcFJlYXNvbjtcbiAgICAgICAgaWYgKCFza2lwKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX1gKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBza2lwUmVhc29uLCBtczogMCwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogKF9jID0geWllbGQgdC50ZXN0KCkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICdPSycsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3AgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHIubXMgPSBzdG9wIC0gc3RhcnQ7XG4gICAgICAgIGlmICghc2tpcClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuICAgICAgICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgICAgICAgci5uYW1lID0gdC5uYW1lO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9KTtcbn1cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF3YWl0Q2hlY2soY2hlY2tIYW5kbGVyLCBlcnJvciA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdCA9IDUwMCwgaW50ZXJ2YWwgPSA1MCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlKSB7XG4gICAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlhbG9ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdFZpZXdlcih2LCBkZiwgZGV0ZWN0U2VtYW50aWNUeXBlcyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKGRldGVjdFNlbWFudGljVHlwZXMpXG4gICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgICAgICBjb25zdCB2aWV3ZXJOYW1lID0gYFtuYW1lPXZpZXdlci0ke3YucmVwbGFjZSgvXFxzKy9nLCAnLScpfSBpXWA7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gYCR7dmlld2VyTmFtZX0gY2FudmFzLCR7dmlld2VyTmFtZX0gc3ZnLCR7dmlld2VyTmFtZX0gaW1nLFxuICAgICR7dmlld2VyTmFtZX0gaW5wdXQsJHt2aWV3ZXJOYW1lfSBoMSwke3ZpZXdlck5hbWV9IGFgO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB2aWV3ZXIgPSB0di5hZGRWaWV3ZXIodik7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyJywgMzAwMCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGRmLnJvdygwKS5jZWxscykuZm9yRWFjaCgoYykgPT4gYy52YWx1ZSA9IG51bGwpO1xuICAgICAgICAgICAgZGYucm93cy5zZWxlY3QoKHJvdykgPT4gcm93LmlkeCA+IDEgJiYgcm93LmlkeCA8IDcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDc7IGkgPCAxMjsgaSsrKVxuICAgICAgICAgICAgICAgIGRmLmZpbHRlci5zZXQoaSwgZmFsc2UpO1xuICAgICAgICAgICAgZGYuY3VycmVudFJvd0lkeCA9IDE7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKHRydWUpLmxvb2s7XG4gICAgICAgICAgICBjb25zdCBuZXdQcm9wcyA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcigoaykgPT4gdHlwZW9mIHByb3BzW2tdID09PSAnYm9vbGVhbicpLmZvckVhY2goKGspID0+IG5ld1Byb3BzW2tdID0gIXByb3BzW2tdKTtcbiAgICAgICAgICAgIHZpZXdlci5zZXRPcHRpb25zKG5ld1Byb3BzKTtcbiAgICAgICAgICAgIHlpZWxkIGRlbGF5KDI1MCk7XG4gICAgICAgICAgICBjb25zdCBsYXlvdXQgPSB0di5zYXZlTGF5b3V0KCk7XG4gICAgICAgICAgICBjb25zdCBvbGRQcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKCkubG9vaztcbiAgICAgICAgICAgIHR2LnJlc2V0TGF5b3V0KCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICB0di5sb2FkTGF5b3V0KGxheW91dCk7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyIGZyb20gbGF5b3V0JywgMzAwMCk7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSgyNTApO1xuICAgICAgICAgICAgcmVzLnB1c2goQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5sZW5ndGgpO1xuICAgICAgICAgICAgdmlld2VyID0gQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5maW5kKCh2KSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgICAgICAgICBleHBlY3RBcnJheShyZXMsIFsyLCAxLCAyXSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodmlld2VyLmdldE9wdGlvbnMoKS5sb29rKSwgSlNPTi5zdHJpbmdpZnkob2xkUHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHR2LmNsb3NlKCk7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmNsb3NlVGFibGUoZGYpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkR1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblJsYzNRdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN08wRkJRVUVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVU14UXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUzNSRExFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZMWkN4RlFVRkZMRU5CUVVNN1FVRkZVQ3hOUVVGTkxHZENRVUZuUWl4SFFVRkhMRmxCUVZrc1EwRkJRenRCUVVOMFF5eE5RVUZOTEdGQlFXRXNSMEZCTmtJc1JVRkJSU3hEUVVGRE8wRkJRMjVFTEUxQlFVMHNRMEZCUXl4SlFVRkpMR1ZCUVhWQ0xFTkJRVU03UVVGRmJrTXNUVUZCVFN4TFFVRlhMRTFCUVUwc1EwRkxkRUk3UVVGTVJDeFhRVUZwUWl4TlFVRk5PMGxCUTNKQ0xGTkJRV2RDTEU5QlFVOHNRMEZCUXl4TFFVRlZMRVZCUVVVc1NVRkJZVHRSUVVNdlF5eEpRVUZKTEV0QlFVc3NTVUZCU1N4SlFVRkpPMWxCUTJZc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVsQlFVa3NTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOd1JTeERRVUZETzBsQlNHVXNZMEZCVHl4VlFVZDBRaXhEUVVGQk8wRkJRMGdzUTBGQlF5eEZRVXhuUWl4TlFVRk5MRXRCUVU0c1RVRkJUU3hSUVV0MFFqdEJRVkZFTEUxQlFVMHNUMEZCVHl4WFFVRlhPMGxCU1hSQ0xGbEJRVmtzWTBGQmQwSXNSVUZCUlN4TlFVRm5RanRSUVVoMFJDeHRRa0ZCWXl4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOMFFpeFhRVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUjJJc1NVRkJTU3hqUVVGakxFdEJRVXNzVTBGQlV6dFpRVUZGTEVsQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1kwRkJZeXhEUVVGRE8xRkJRM1pGTEVsQlFVa3NUVUZCVFN4TFFVRkxMRk5CUVZNN1dVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0SlFVTnFSQ3hEUVVGRE8wbEJRVUVzUTBGQlF6dERRVU5JTzBGQlJVUXNUVUZCVFN4UFFVRlBMRWxCUVVrN1NVRk5aaXhaUVVGWkxGRkJRV2RDTEVWQlFVVXNTVUZCV1N4RlFVRkZMRWxCUVhkQ0xFVkJRVVVzVDBGQmNVSTdPMUZCUTNwR0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeE5RVUZCTEU5QlFVOHNRMEZCUXl4UFFVRlBMRzlEUVVGbUxFOUJRVThzUTBGQlF5eFBRVUZQTEVkQlFVc3NTMEZCU3l4RlFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUMEZCVHl4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCZFVJc1JVRkJSVHRaUVVOdVF5eFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVU4c1QwRkJUeXhGUVVGRkxFMUJRVTBzUlVGQlJTeEZRVUZGTzJkQ1FVTXpReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdaMEpCUTJoQ0xFbEJRVWs3YjBKQlEwWXNUVUZCVFN4SFFVRkhMRTFCUVUwc1NVRkJTU3hGUVVGRkxFTkJRVU03YVVKQlEzWkNPMmRDUVVGRExFOUJRVThzUTBGQlRTeEZRVUZGTzI5Q1FVTm1MRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEV0R0blFrRkRSQ3hQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYkVJc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUVN4RFFVRkRPMGxCUTBvc1EwRkJRenREUVVOR08wRkJSVVFzVFVGQlRTeFZRVUZuUWl4VFFVRlRMRU5CUVVrc1MwRkJiMElzUlVGRGNrUXNUMEZCTUVJc1JVRkJSU3hQUVVGdFFpeEZRVUZGTEV0QlFXRXNRMEZCUXpzN1VVRkRMMFFzU1VGQlNTeEhRVUZwUWl4RFFVRkRPMUZCUTNSQ0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUU3hGUVVGRkxFVkJRVVU3V1VGRGNrTXNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlR0blFrRkROMElzU1VGQlNUdHZRa0ZEUml4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YVVKQlEyWTdaMEpCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3YjBKQlExWXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU5ZTzJkQ1FVTkVMRWRCUVVjc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dG5Ra0ZEYkVJc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEyaENMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlR0blFrRkRaQ3hIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdaMEpCUTJ4Q0xIZEVRVUYzUkR0blFrRkRlRVFzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTNCQ0xFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMW9zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPME5CUVVFN1FVRkZSQ3hOUVVGTkxGVkJRVlVzU1VGQlNTeERRVUZETEVsQlFWa3NSVUZCUlN4SlFVRjNRaXhGUVVGRkxFOUJRWEZDTzBsQlEyaEdMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEZOQlFWTTdVVUZEY2tNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1UwRkJVenRSUVVNelF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU53UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0pHTEVOQlFVTTdRVUZGUkN4blJrRkJaMFk3UVVGRGFFWXNUVUZCVFN4VlFVRlZMRTFCUVUwc1EwRkJReXhOUVVGWExFVkJRVVVzVjBGQlowSXNTVUZCU1N4RlFVRkZMRXRCUVdNN1NVRkRkRVVzU1VGQlNTeExRVUZMTzFGQlExQXNTMEZCU3l4SFFVRkhMRWRCUVVjc1MwRkJTeXhKUVVGSkxFTkJRVU03TzFGQlEyeENMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGFFSXNTVUZCU1N4TlFVRk5MRXRCUVVzc1VVRkJVVHRSUVVOeVFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1MwRkJTeXhoUVVGaExGRkJRVkVzVjBGQlZ5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNaRkxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNWMEZCVnl4RFFVRkRMRTFCUVdNc1JVRkJSU3hSUVVGblFpeEZRVUZGTEZOQlFWTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1MwRkJZenRKUVVNM1JpeEpRVUZKTEVOQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4UlFVRlJMRXRCUVVzc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUXpsRkxFTkJRVU1zVFVGQlRTeExRVUZMTEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeFJRVUZSTEV0QlFVc3NUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFGQlF6bEZMRU5CUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NVVUZCVVN4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETVVZc1QwRkJUenRKUVVOVUxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXp0SlFVTjZSQ3hOUVVGTkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SFFVRkhMRXRCUVVzc1lVRkJUQ3hMUVVGTExHTkJRVXdzUzBGQlN5eEhRVUZKTEVWQlFVVXNhVUpCUVdsQ0xGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEY0VVc1NVRkJTU3hEUVVGRExGRkJRVkU3VVVGRFdDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hUUVVGVExFMUJRVTBzYVVKQlFXbENMRk5CUVZNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGRFWXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zVFVGQmFVSXNSVUZCUlN4UlFVRnRRaXhGUVVGRkxFdEJRV003U1VGRGFFWXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eFJRVUZSTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUXpORExFMUJRVTBzWTBGQll5eEhRVUZITEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNN1NVRkRka01zVFVGQlRTeERRVUZETEdOQlFXTXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeEhRVUZITEV0QlFVc3NZVUZCVEN4TFFVRkxMR05CUVV3c1MwRkJTeXhIUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdTVUZGZEVVc1MwRkJTeXhOUVVGTkxFMUJRVTBzU1VGQlNTeFJRVUZSTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUTNKRExFMUJRVTBzV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxGbEJRVmtzU1VGQlNTeEpRVUZKTzFsQlEzUkNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zVlVGQlZTeE5RVUZOTEVOQlFVTXNTVUZCU1N4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVOeVJDeEpRVUZKTEZsQlFWa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWs3V1VGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhWUVVGVkxFMUJRVTBzUTBGQlF5eEpRVUZKTEd0Q1FVRnJRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeFJRVUZSTEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBITEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU42UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzVjBGQlZ5eEhRVUZITEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3p0blFrRkRPVUlzVjBGQlZ5eERRVUZETEZkQlFWY3NSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzJsQ1FVTTFReXhKUVVGSkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVE8yZENRVU4yUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03TzJkQ1FVVXZReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRUUVVOeVF6dExRVU5HTzBGQlEwZ3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3haUVVGWkxFTkJRVU1zVFVGQk9FSXNSVUZCUlN4UlFVRm5RenRKUVVNelJpeExRVUZMTEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJZU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSVHRSUVVOdVJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhYUVVGWExFTkJRVU03V1VGRGNrTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXh6UWtGQmMwSXNWMEZCVnl4aFFVRmhMRU5CUVVNc1EwRkJRenRSUVVWc1JTeE5RVUZOTEZkQlFWY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRGVFTXNTVUZCU1N4WFFVRlhMRmxCUVZrc1MwRkJTeXhKUVVGSkxHRkJRV0VzV1VGQldTeExRVUZMTzFsQlEyaEZMRmRCUVZjc1EwRkJReXhYUVVGWExFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdZVUZEY2tNc1NVRkJTU3hYUVVGWExGbEJRVmtzVFVGQlRTeEpRVUZKTEdGQlFXRXNXVUZCV1N4TlFVRk5PMWxCUTNaRkxGbEJRVmtzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRkRU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUTNKRkxGZEJRVmNzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRja01zU1VGQlNTeFhRVUZYTEVsQlFVa3NZVUZCWVR0WlFVTnVReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdGQlFXRXNZVUZCWVN4alFVRmpMRmRCUVZjc1YwRkJWeXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEycEhPMEZCUTBnc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFhRVUZYTEVOQlFVTXNUVUZCYzBJc1JVRkJSU3hSUVVGM1FqdEpRVU14UlN4TlFVRk5MRmxCUVZrc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEyNURMRTFCUVUwc1kwRkJZeXhIUVVGSExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZGZGtNc1NVRkJTU3haUVVGWkxFbEJRVWtzWTBGQll5eEZRVUZGTzFGQlEyeERMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zTUVSQlFUQkVMRmxCUVZrc1IwRkJSenRaUVVOMlJpeG5RMEZCWjBNc1kwRkJZeXhGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU55UkR0SlFVVkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4WlFVRlpMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGNrTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzUzBGQlN5eEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hMUVVGTE8xbEJRelZFTEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRha01zU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1RVRkJUU3hKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4TlFVRk5PMWxCUTI1RkxGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEYkVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNdlFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhUUVVGVExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1MwRkRha1k3UVVGRFNDeERRVUZETzBGQlJVUXNNa0pCUVRKQ08wRkJRek5DTEUxQlFVMHNWVUZCVlN4UlFVRlJMRU5CUVVNc1VVRkJaMElzUlVGQlJTeExRVUZwUWp0SlFVTXhSQ3hsUVVGbExFZEJRVWNzVVVGQlVTeERRVUZETzBsQlF6TkNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wRkJRMVlzUTBGQlF6dEJRVVZFTEhWR1FVRjFSanRCUVVOMlJpeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRTFCUVRKQ08wbEJRMmhFTEVsQlFVa3NTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhKUVVGSkxGTkJRVk03VVVGRGNrTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU01UWl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTjZReXhEUVVGRE8wRkJSVVFzYzBaQlFYTkdPMEZCUTNSR0xFMUJRVTBzVlVGQlZTeExRVUZMTEVOQlFVTXNTMEZCTUVJN1NVRkRPVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzWkRMRU5CUVVNN1FVRkZSQ3hUUVVGVExGbEJRVmtzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVlR0SlFVTjZReXhQUVVGUExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGRrUXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJaMElzWVVGQllTeERRVUZETEZOQlFXbENMRVZCUVVVc1RVRkJXVHM3VVVGRGFrVXNTVUZCU1N4aFFVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRVVVzVDBGQlR6dFJRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU5zUkN4SlFVRkpMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSVHRaUVVNdlF5eGhRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRMmhETEU5QlFVODdVMEZEVWp0UlFVTkVMRTFCUVUwc1pVRkJaU3hIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU16UWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU0zUml4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhEUVVGRE8xRkJRMjVFTEV0QlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1lVRkJZU3hGUVVGRk8xbEJRemRDTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0blFrRkJSU3hUUVVGVE8xbEJReTlFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZaTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU53UkN4SlFVRkpMRlZCUVZVc1EwRkJRenRuUWtGRFppeEpRVUZKTEZkQlFWY3NTVUZCU1N4RFFVRkJMRmRCUVZjc1lVRkJXQ3hYUVVGWExIVkNRVUZZTEZkQlFWY3NRMEZCUlN4TlFVRk5MRWxCUVVjc1EwRkJRenR2UWtGQlJTeFZRVUZWTEVkQlFVY3NWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU40UlN4bFFVRmxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVZNc1JVRkJSVHR2UWtGRE4wY3NUVUZCVFN4SFFVRkhMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMnBGTERSRFFVRTBRenR2UWtGRE5VTXNTVUZCU1N4SFFVRkhMRXRCUVVzc1NVRkJTVHQzUWtGQlJTeE5RVUZOTEZkQlFWY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03WjBKQlEyaEVMRU5CUVVNc1EwRkJRU3hGUVVGRkxFVkJRVU1zVlVGQlZTeEZRVUZGTEZWQlFWVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVNdlFqdFRRVU5HTzFGQlEwUXNZVUZCWVN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFMUJRVTA3V1VGQlJTeFBRVUZQTzFGQlEzQkRMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRVZCUVVNc1MwRkJTeXhGUVVGRkxHVkJRV1VzUlVGQlF5eERRVUZETzBsQlF6TkVMRU5CUVVNN1EwRkJRVHRCUVVWRUxFMUJRVTBzVlVGQlowSXNVVUZCVVN4RFFVRkRMRTlCUVhWRk96czdPMUZCUTNCSExFMUJRVTBzVVVGQlVTeEhRVUZITEUxQlFVRXNUVUZCUVN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExHTkJRV01zUlVGQlJTd3dRMEZCUlN4SlFVRkpMREJEUVVGRkxFOUJRVThzUTBGQlF6dFJRVU5vUlN4TlFVRk5MR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYWtNc1RVRkJUU3hQUVVGUExFZEJRM1ZFTEVWQlFVVXNRMEZCUXp0UlFVTjJSU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMUZCUXpkQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeFpRVUZCTEU5QlFWRXNSVUZCUXl4WFFVRlhMSFZEUVVGWUxGZEJRVmNzUjBGQlN5eEpRVUZKTEZkQlFWY3NSVUZCUlN4RlFVRkRPMUZCUXpORExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNeFFpeExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVOb1JDeEpRVUZKTEVOQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEZGQlFWRXNTMEZCU1N4VFFVRlRMRVZCUVVVN1owSkJRMnhETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN2IwSkJRMmhGTEZOQlFWTTdZVUZEV2p0WlFVTkVMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRPMWxCUTNaRExFbEJRVWs3WjBKQlEwWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRoUVVONFFqdFpRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMmRDUVVObUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yRkJRMjVETzFsQlEwUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJRU3hMUVVGTExFTkJRVU1zUzBGQlN5eHRRMEZCU1N4RlFVRkZMRU5CUVVNN1dVRkROVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTXZRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTm9SQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVNelJTeEpRVUZKTzJkQ1FVTkdMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXM3YjBKQlEySXNUVUZCVFN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03WVVGRGRrSTdXVUZCUXl4UFFVRlBMRU5CUVUwc1JVRkJSVHRuUWtGRFppeExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dGhRVU5zUXp0WlFVTkVMRWxCUVVrc1MwRkJTeXhEUVVGRExGZEJRVmM3WjBKQlEyNUNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6ZEhMRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVms3WjBKQlEzQkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WlFVRlpMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6bEhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTjJRanRSUVVORUxFbEJRVWtzVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4alFVRmpMRVZCUVVVN1dVRkRkRU1zVFVGQlRTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRiRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzJkQ1FVTnVReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVTllMRkZCUVZFc1JVRkJSU3h6UWtGQmMwSTdiMEpCUTJoRExFbEJRVWtzUlVGQlJTeFpRVUZaTzI5Q1FVTnNRaXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTE8ybENRVU53UlN4RFFVRkRMRU5CUVVNN1lVRkRTanRUUVVOR08xRkJRMFFzU1VGQlNTeFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1JVRkJSVHRaUVVNNVFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU12UWl4TlFVRk5MRlZCUVZVc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUXpORUxFMUJRVTBzVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03V1VGRGVFUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEYWtRc1RVRkJUU3hYUVVGWExFZEJRVWNzZVVaQlFYbEdMRU5CUVVNN1dVRkRPVWNzVFVGQlRTeE5RVUZOTEVkQlFVYzdaMEpCUTJJc1ZVRkJWU3hGUVVGRkxGVkJRVlU3WjBKQlEzUkNMRTlCUVU4c1JVRkJSU3hQUVVGUE8yZENRVU5vUWl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFMUJRVTA3WjBKQlEzSkNMRTlCUVU4c1JVRkJSU3hSUVVGUk8yRkJRMnhDTEVOQlFVTTdXVUZEUml4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFMUJRVTA3WjBKQlFVVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42Uml4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJTeE5RVUZOTEVWQlFVVXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dFRRVU51UkR0UlFVTkVMRTlCUVU4c1QwRkJUeXhEUVVGRE96dERRVU5vUWp0QlFVVkVMRk5CUVdVc1VVRkJVU3hEUVVGRExFTkJRVThzUlVGQlJTeFRRVUUyUWpzN08xRkJRelZFTEVsQlFVa3NRMEZCZFVjc1EwRkJRenRSUVVNMVJ5eE5RVUZOTEUxQlFVMHNSMEZCUnl4VFFVRlRMRWxCUVVrc1UwRkJVeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFRRVUZUTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pITEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVFc1RVRkJRU3hEUVVGRExFTkJRVU1zVDBGQlR5d3dRMEZCUlN4VlFVRlZMRXRCUVVrc1RVRkJUU3hEUVVGRE8xRkJRemRETEUxQlFVMHNWVUZCVlN4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRkJMRU5CUVVNc1EwRkJReXhQUVVGUExEQkRRVUZGTEZWQlFWVXNRMEZCUXp0UlFVTTVSQ3hKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBFTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVrSXNTVUZCU1R0WlFVTkdMRWxCUVVrc1NVRkJTVHRuUWtGRFRpeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeFZRVUZYTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTTdPMmRDUVVVdlJDeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZCTEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3h0UTBGQlNTeEpRVUZKTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTTdVMEZET1VVN1VVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdFpRVU5tTEVOQlFVTXNSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJRenRUUVVOdVJUdFJRVU5FTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVFSXNZVUZCWVR0UlFVTmlMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTndRaXhKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYWtVc1EwRkJReXhEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTNoQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOb1FpeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1EwRkRWanRCUVVWRUxEWkNRVUUyUWp0QlFVTTNRaXhOUVVGTkxGVkJRV2RDTEV0QlFVc3NRMEZCUXl4RlFVRlZPenRSUVVOd1F5eE5RVUZOTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE9VTXNRMEZCUXp0RFFVRkJPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNXVUZCTWtJc1JVRkRNVVFzVVVGQlowSXNhMEpCUVd0Q0xFVkJRVVVzVDBGQlpTeEhRVUZITEVWQlFVVXNWMEZCYlVJc1JVRkJSVHM3VVVGRE4wVXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0WlFVTnlReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTmtMR0ZCUVdFc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZETVVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNMElzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTFRc1lVRkJZVHRaUVVOaUxFMUJRVTBzVlVGQlZTeEhRVUZaTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVN1owSkJRek5ETEVsQlFVa3NXVUZCV1N4RlFVRkZMRVZCUVVVN2IwSkJRMnhDTEdGQlFXRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenR2UWtGRE1VSXNUMEZCVHl4RlFVRkZMRU5CUVVNN2FVSkJRMWc3V1VGRFNDeERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRaaXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5NTEVOQlFVTTdRMEZCUVR0QlFVVkVMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zVjBGQmJVSTdTVUZEYWtRc1RVRkJUU3hQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRKUVVNelF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOMlF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVjBGQlZ6dFpRVU5xUXl4UFFVRlBMRWxCUVVrc1EwRkJRenRMUVVObU8wbEJRMFFzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVdkQ0xFVkJRVVVzYzBKQlFTdENMRXRCUVVzN08xRkJRMmhITEVsQlFVa3NiVUpCUVcxQ08xbEJRVVVzVFVGQlRTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJwRkxFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEzWkRMRTFCUVUwc1ZVRkJWU3hIUVVGSExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUXk5RUxFMUJRVTBzVVVGQlVTeEhRVUZITEVkQlFVY3NWVUZCVlN4WFFVRlhMRlZCUVZVc1VVRkJVU3hWUVVGVk8wMUJRMnBGTEZWQlFWVXNWVUZCVlN4VlFVRlZMRTlCUVU4c1ZVRkJWU3hKUVVGSkxFTkJRVU03VVVGRGVFUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMllzU1VGQlNUdFpRVU5HTEVsQlFVa3NUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETjBJc1RVRkJUU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlF6bEVMRzlDUVVGdlFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpsQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRlRU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU16UkN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU53UkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGQlJTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEY2tRc1JVRkJSU3hEUVVGRExHRkJRV0VzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEY2tJc1RVRkJUU3hMUVVGTExFZEJRVWNzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE0wTXNUVUZCVFN4UlFVRlJMRWRCUVRSQ0xFVkJRVVVzUTBGQlF6dFpRVU0zUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU40Unl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRTFCUVUwc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhOUVVGTkxGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRekZETEVWQlFVVXNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRaUVVOcVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRM2hETEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGRFSXNUVUZCVFN4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRemxFTEdkRFFVRm5ReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF6RkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEZUVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVVXNRMEZCUXp0WlFVTm9SU3hYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE5VVTdaMEpCUVZNN1dVRkRVaXhGUVVGRkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEV0N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0VFFVTXpRanRKUVVOSUxFTkJRVU03UTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQXFJR0Z6SUdkeWIyc2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMmR5YjJzbk8xeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0I3VDJKelpYSjJZV0pzWlN3Z1UzVmljMk55YVhCMGFXOXVmU0JtY205dElDZHllR3B6Snp0Y2JtbHRjRzl5ZENCVWFXMWxiM1YwSUQwZ1RtOWtaVXBUTGxScGJXVnZkWFE3WEc1cGJYQnZjblFnZTBSaGRHRkdjbUZ0WlgwZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSFJsYzNSek9pQjdYRzRnSUZ0clpYazZJSE4wY21sdVoxMDZJSHRjYmlBZ0lDQjBaWE4wY3o4NklGUmxjM1JiWFN3Z1ltVm1iM0psUHpvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1Bpd2dZV1owWlhJL09pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStMRnh1SUNBZ0lHSmxabTl5WlZOMFlYUjFjejg2SUhOMGNtbHVaeXdnWVdaMFpYSlRkR0YwZFhNL09pQnpkSEpwYm1kY2JpQWdmVnh1ZlNBOUlIdDlPMXh1WEc1amIyNXpkQ0JoZFhSdlZHVnpkSE5EWVhST1lXMWxJRDBnSjBGMWRHOGdWR1Z6ZEhNbk8xeHVZMjl1YzNRZ2QyRnpVbVZuYVhOMFpYSmxaRG9nZTF0clpYazZJSE4wY21sdVoxMDZJR0p2YjJ4bFlXNTlJRDBnZTMwN1hHNWxlSEJ2Y25RZ2JHVjBJR04xY25KbGJuUkRZWFJsWjI5eWVUb2djM1J5YVc1bk8xeHVYRzVsZUhCdmNuUWdibUZ0WlhOd1lXTmxJR0Z6YzNWeVpTQjdYRzRnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNST2RXeHNLSFpoYkhWbE9pQmhibmtzSUc1aGJXVS9PaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ0pIdHVZVzFsSUQwOUlHNTFiR3dnUHlBblZtRnNkV1VuSURvZ2JtRnRaWDBnYm05MElHUmxabWx1WldSZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJsYzNSUGNIUnBiMjV6SUh0Y2JpQWdkR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkRDg2SUc1MWJXSmxjanRjYmlBZ2MydHBjRkpsWVhOdmJqODZJSE4wY21sdVp6dGNibjFjYmx4dVpYaHdiM0owSUdOc1lYTnpJRlJsYzNSRGIyNTBaWGgwSUh0Y2JpQWdZMkYwWTJoVmJtaGhibVJzWldRZ1BTQjBjblZsTzF4dUlDQnlaWEJ2Y25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2loallYUmphRlZ1YUdGdVpHeGxaRDg2SUdKdmIyeGxZVzRzSUhKbGNHOXlkRDg2SUdKdmIyeGxZVzRwSUh0Y2JpQWdJQ0JwWmlBb1kyRjBZMmhWYm1oaGJtUnNaV1FnSVQwOUlIVnVaR1ZtYVc1bFpDa2dkR2hwY3k1allYUmphRlZ1YUdGdVpHeGxaQ0E5SUdOaGRHTm9WVzVvWVc1a2JHVmtPMXh1SUNBZ0lHbG1JQ2h5WlhCdmNuUWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2RHaHBjeTV5WlhCdmNuUWdQU0J5WlhCdmNuUTdYRzRnSUgwN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlVaWE4wSUh0Y2JpQWdkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK08xeHVJQ0J1WVcxbE9pQnpkSEpwYm1jN1hHNGdJR05oZEdWbmIzSjVPaUJ6ZEhKcGJtYzdYRzRnSUc5d2RHbHZibk0vT2lCVVpYTjBUM0IwYVc5dWN6dGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQnVZVzFsT2lCemRISnBibWNzSUhSbGMzUTZJQ2dwSUQwK0lGQnliMjFwYzJVOFlXNTVQaXdnYjNCMGFXOXVjejg2SUZSbGMzUlBjSFJwYjI1ektTQjdYRzRnSUNBZ2RHaHBjeTVqWVhSbFoyOXllU0E5SUdOaGRHVm5iM0o1TzF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2IzQjBhVzl1Y3lBL1B6MGdlMzA3WEc0Z0lDQWdiM0IwYVc5dWN5NTBhVzFsYjNWMElEOC9QU0F6TURBd01EdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpPMXh1SUNBZ0lIUm9hWE11ZEdWemRDQTlJR0Z6ZVc1aklDZ3BPaUJRY205dGFYTmxQR0Z1ZVQ0Z1BUNGdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlDY25PMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RDQTlJR0YzWVdsMElIUmxjM1FvS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dZVzU1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvY21WemRXeDBLVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDA3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSFJsYzNSRmRtVnVkRHhVUGlobGRtVnVkRG9nVDJKelpYSjJZV0pzWlR4VVBpeGNiaUFnYUdGdVpHeGxjam9nS0dGeVozTTZJRlFwSUQwK0lIWnZhV1FzSUhSeWFXZG5aWEk2SUNncElEMCtJSFp2YVdRc0lHMXpPaUJ1ZFcxaVpYSWdQU0F3S1RvZ1VISnZiV2x6WlR4emRISnBibWMrSUh0Y2JpQWdiR1YwSUhOMVlqb2dVM1ZpYzJOeWFYQjBhVzl1TzF4dUlDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJSE4xWWlBOUlHVjJaVzUwTG5OMVluTmpjbWxpWlNnb1lYSm5jeWtnUFQ0Z2UxeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjaWhoY21kektUdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnY21WcVpXTjBLR1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0J5WlhOdmJIWmxLQ2RQU3ljcE8xeHVJQ0FnSUgwcE8xeHVJQ0FnSUhObGRGUnBiV1Z2ZFhRb0tDa2dQVDRnZTF4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnY0hKbFptVnlMWEJ5YjIxcGMyVXRjbVZxWldOMExXVnljbTl5YzF4dUlDQWdJQ0FnY21WcVpXTjBLQ2QwYVcxbGIzVjBKeWs3WEc0Z0lDQWdmU3dnYlhNcE8xeHVJQ0FnSUhSeWFXZG5aWElvS1R0Y2JpQWdmU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBaWE4wS0c1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wT2lCMmIybGtJSHRjYmlBZ2FXWWdLSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFNCN2ZUdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdWRHVnpkSE1nUFNCYlhUdGNiaUFnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lFdWNIVnphQ2h1WlhjZ1ZHVnpkQ2hqZFhKeVpXNTBRMkYwWldkdmNua3NJRzVoYldVc0lIUmxjM1FzSUc5d2RHbHZibk1wS1R0Y2JuMWNibHh1THlvZ1ZHVnpkSE1nZEhkdklHOWlhbVZqZEhNZ1ptOXlJR1Z4ZFdGc2FYUjVMQ0IwYUhKdmQzTWdZVzRnWlhoalpYQjBhVzl1SUdsbUlIUm9aWGtnWVhKbElHNXZkQ0JsY1hWaGJDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJsZUhCbFkzUW9ZV04wZFdGc09pQmhibmtzSUdWNGNHVmpkR1ZrT2lCaGJua2dQU0IwY25WbExDQmxjbkp2Y2o4NklITjBjbWx1WnlrNklIWnZhV1FnZTF4dUlDQnBaaUFvWlhKeWIzSXBYRzRnSUNBZ1pYSnliM0lnUFNCZ0pIdGxjbkp2Y24wc0lHQTdYRzRnSUdWc2MyVWdaWEp5YjNJZ1BTQW5KenRjYmlBZ2FXWWdLR0ZqZEhWaGJDQWhQVDBnWlhod1pXTjBaV1FwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQWtlMlZ5Y205eWZVVjRjR1ZqZEdWa0lGd2lKSHRsZUhCbFkzUmxaSDFjSWl3Z1oyOTBJRndpSkh0aFkzUjFZV3g5WENKZ0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWNGNHVmpkRVpzYjJGMEtHRmpkSFZoYkRvZ2JuVnRZbVZ5TENCbGVIQmxZM1JsWkRvZ2JuVnRZbVZ5TENCMGIyeGxjbUZ1WTJVZ1BTQXdMakF3TVN3Z1pYSnliM0kvT2lCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ2FXWWdLQ2hoWTNSMVlXd2dQVDA5SUU1MWJXSmxjaTVRVDFOSlZFbFdSVjlKVGtaSlRrbFVXU0FtSmlCbGVIQmxZM1JsWkNBOVBUMGdUblZ0WW1WeUxsQlBVMGxVU1ZaRlgwbE9Sa2xPU1ZSWktTQjhmRnh1SUNBZ0lDQWdLR0ZqZEhWaGJDQTlQVDBnVG5WdFltVnlMazVGUjBGVVNWWkZYMGxPUmtsT1NWUlpJQ1ltSUdWNGNHVmpkR1ZrSUQwOVBTQk9kVzFpWlhJdVRrVkhRVlJKVmtWZlNVNUdTVTVKVkZrcElIeDhYRzRnSUNBZ0lDQW9ZV04wZFdGc0lEMDlQU0JPZFcxaVpYSXVUbUZPSUNZbUlHVjRjR1ZqZEdWa0lEMDlQU0JPZFcxaVpYSXVUbUZPS1NCOGZDQW9hWE5PWVU0b1lXTjBkV0ZzS1NBbUppQnBjMDVoVGlobGVIQmxZM1JsWkNrcEtWeHVJQ0FnSUhKbGRIVnlianRjYmlBZ1kyOXVjM1FnWVhKbFJYRjFZV3dnUFNCTllYUm9MbUZpY3loaFkzUjFZV3dnTFNCbGVIQmxZM1JsWkNrZ1BDQjBiMnhsY21GdVkyVTdYRzRnSUdWNGNHVmpkQ2hoY21WRmNYVmhiQ3dnZEhKMVpTd2dZQ1I3WlhKeWIzSWdQejhnSnlkOUlDaDBiMnhsY21GdVkyVWdQU0FrZTNSdmJHVnlZVzVqWlgwcFlDazdYRzRnSUdsbUlDZ2hZWEpsUlhGMVlXd3BYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRmVIQmxZM1JsWkNBa2UyVjRjR1ZqZEdWa2ZTd2daMjkwSUNSN1lXTjBkV0ZzZlNBb2RHOXNaWEpoYm1ObElEMGdKSHQwYjJ4bGNtRnVZMlY5S1dBcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlhod1pXTjBWR0ZpYkdVb1lXTjBkV0ZzT2lCRVlYUmhSbkpoYldVc0lHVjRjR1ZqZEdWa09pQkVZWFJoUm5KaGJXVXNJR1Z5Y205eVB6b2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJR052Ym5OMElHVjRjR1ZqZEdWa1VtOTNRMjkxYm5RZ1BTQmxlSEJsWTNSbFpDNXliM2REYjNWdWREdGNiaUFnWTI5dWMzUWdZV04wZFdGc1VtOTNRMjkxYm5RZ1BTQmhZM1IxWVd3dWNtOTNRMjkxYm5RN1hHNGdJR1Y0Y0dWamRDaGhZM1IxWVd4U2IzZERiM1Z1ZEN3Z1pYaHdaV04wWldSU2IzZERiM1Z1ZEN3Z1lDUjdaWEp5YjNJZ1B6OGdKeWQ5TENCeWIzY2dZMjkxYm5SZ0tUdGNibHh1SUNCbWIzSWdLR052Ym5OMElHTnZiSFZ0YmlCdlppQmxlSEJsWTNSbFpDNWpiMngxYlc1ektTQjdYRzRnSUNBZ1kyOXVjM1FnWVdOMGRXRnNRMjlzZFcxdUlEMGdZV04wZFdGc0xtTnZiSFZ0Ym5NdVlubE9ZVzFsS0dOdmJIVnRiaTV1WVcxbEtUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1SUQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRU52YkhWdGJpQWtlMk52YkhWdGJpNXVZVzFsZlNCdWIzUWdabTkxYm1SZ0tUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1TG5SNWNHVWdJVDBnWTI5c2RXMXVMblI1Y0dVcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVOdmJIVnRiaUFrZTJOdmJIVnRiaTV1WVcxbGZTQjBlWEJsSUdWNGNHVmpkR1ZrSUNSN1kyOXNkVzF1TG5SNWNHVjlJR2R2ZENBa2UyRmpkSFZoYkVOdmJIVnRiaTUwZVhCbGZXQXBPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daWGh3WldOMFpXUlNiM2REYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpTQTlJR052YkhWdGJpNW5aWFFvYVNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JoWTNSMVlXeFdZV3gxWlNBOUlHRmpkSFZoYkVOdmJIVnRiaTVuWlhRb2FTazdYRzRnSUNBZ0lDQnBaaUFvWTI5c2RXMXVMblI1Y0dVZ1BUMGdSRWN1VkZsUVJTNUdURTlCVkNsY2JpQWdJQ0FnSUNBZ1pYaHdaV04wUm14dllYUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0F3TGpBd01ERXNJR1Z5Y205eUtUdGNiaUFnSUNBZ0lHVnNjMlVnYVdZZ0tHTnZiSFZ0Ymk1MGVYQmxJRDA5SUVSSExsUlpVRVV1UkVGVVJWOVVTVTFGS1Z4dUlDQWdJQ0FnSUNCbGVIQmxZM1FvWVdOMGRXRnNWbUZzZFdVdWFYTlRZVzFsS0haaGJIVmxLU3dnZEhKMVpTd2daWEp5YjNJcE8xeHVJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0JsZUhCbFkzUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0JsY25KdmNpazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNPaUI3SUZ0clpYazZJSE4wY21sdVoxMDZJR0Z1ZVNCOUxDQmxlSEJsWTNSbFpEb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQmhibmtnZlNrZ2UxeHVJQ0JtYjNJZ0tHTnZibk4wSUZ0bGVIQmxZM1JsWkV0bGVTd2daWGh3WldOMFpXUldZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb1pYaHdaV04wWldRcEtTQjdYRzRnSUNBZ2FXWWdLQ0ZoWTNSMVlXd3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYaHdaV04wWldSTFpYa3BLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkZlSEJsWTNSbFpDQndjbTl3WlhKMGVTQmNJaVI3Wlhod1pXTjBaV1JMWlhsOVhDSWdibTkwSUdadmRXNWtZQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRnRsZUhCbFkzUmxaRXRsZVYwN1hHNGdJQ0FnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JXWVd4MVpTQnBibk4wWVc1alpXOW1JRUZ5Y21GNUtWeHVJQ0FnSUNBZ1pYaHdaV04wUVhKeVlYa29ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnVDJKcVpXTjBJQ1ltSUdWNGNHVmpkR1ZrVm1Gc2RXVWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUXBYRzRnSUNBZ0lDQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLRTUxYldKbGNpNXBjMFpwYm1sMFpTaGhZM1IxWVd4V1lXeDFaU2tnSmlZZ1RuVnRZbVZ5TG1selJtbHVhWFJsS0dWNGNHVmpkR1ZrVm1Gc2RXVXBLVnh1SUNBZ0lDQWdaWGh3WldOMFJteHZZWFFvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUNFOUlHVjRjR1ZqZEdWa1ZtRnNkV1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ2drZTJWNGNHVmpkR1ZrVm1Gc2RXVjlLU0JtYjNJZ2EyVjVJQ2NrZTJWNGNHVmpkR1ZrUzJWNWZTY3NJR2R2ZENBb0pIdGhZM1IxWVd4V1lXeDFaWDBwWUNrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVGeWNtRjVLR0ZqZEhWaGJEb2dRWEp5WVhsTWFXdGxQR0Z1ZVQ0c0lHVjRjR1ZqZEdWa09pQkJjbkpoZVV4cGEyVThZVzU1UGlrZ2UxeHVJQ0JqYjI1emRDQmhZM1IxWVd4TVpXNW5kR2dnUFNCaFkzUjFZV3d1YkdWdVozUm9PMXh1SUNCamIyNXpkQ0JsZUhCbFkzUmxaRXhsYm1kMGFDQTlJR1Y0Y0dWamRHVmtMbXhsYm1kMGFEdGNibHh1SUNCcFppQW9ZV04wZFdGc1RHVnVaM1JvSUNFOUlHVjRjR1ZqZEdWa1RHVnVaM1JvS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JCY25KaGVYTWdZWEpsSUc5bUlHUnBabVpsY21WdWRDQnNaVzVuZEdnNklHRmpkSFZoYkNCaGNuSmhlU0JzWlc1bmRHZ2dhWE1nSkh0aFkzUjFZV3hNWlc1bmRHaDlJR0FnSzF4dUlDQWdJQ0FnWUdGdVpDQmxlSEJsWTNSbFpDQmhjbkpoZVNCc1pXNW5kR2dnYVhNZ0pIdGxlSEJsWTNSbFpFeGxibWQwYUgxZ0tUdGNiaUFnZlZ4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWVdOMGRXRnNUR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JwWmlBb1lXTjBkV0ZzVzJsZElHbHVjM1JoYm1ObGIyWWdRWEp5WVhrZ0ppWWdaWGh3WldOMFpXUmJhVjBnYVc1emRHRnVZMlZ2WmlCQmNuSmhlU2xjYmlBZ0lDQWdJR1Y0Y0dWamRFRnljbUY1S0dGamRIVmhiRnRwWFN3Z1pYaHdaV04wWldSYmFWMHBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZ0cFhTQnBibk4wWVc1alpXOW1JRTlpYW1WamRDQW1KaUJsZUhCbFkzUmxaRnRwWFNCcGJuTjBZVzVqWlc5bUlFOWlhbVZqZENsY2JpQWdJQ0FnSUdWNGNHVmpkRTlpYW1WamRDaGhZM1IxWVd4YmFWMHNJR1Y0Y0dWamRHVmtXMmxkS1R0Y2JpQWdJQ0JsYkhObElHbG1JQ2hoWTNSMVlXeGJhVjBnSVQwZ1pYaHdaV04wWldSYmFWMHBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFVjRjR1ZqZEdWa0lDUjdaWGh3WldOMFpXUmJhVjE5SUdGMElIQnZjMmwwYVc5dUlDUjdhWDBzSUdkdmRDQWtlMkZqZEhWaGJGdHBYWDFnS1R0Y2JpQWdmVnh1ZlZ4dVhHNHZLaUJFWldacGJtVnpJR0VnZEdWemRDQnpkV2wwWlM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmpZWFJsWjI5eWVTaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQjBaWE4wY3pvZ0tDa2dQVDRnZG05cFpDazZJSFp2YVdRZ2UxeHVJQ0JqZFhKeVpXNTBRMkYwWldkdmNua2dQU0JqWVhSbFoyOXllVHRjYmlBZ2RHVnpkSE1vS1R0Y2JuMWNibHh1THlvZ1JHVm1hVzVsY3lCaElHWjFibU4wYVc5dUlIUnZJR0psSUdWNFpXTjFkR1ZrSUdKbFptOXlaU0IwYUdVZ2RHVnpkSE1nYVc0Z2RHaHBjeUJqWVhSbFoyOXllU0JoY21VZ1pYaGxZM1YwWldRdUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZbVZtYjNKbEtHSmxabTl5WlRvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1KbFptOXlaU0E5SUdKbFptOXlaVHRjYm4xY2JseHVMeW9nUkdWbWFXNWxjeUJoSUdaMWJtTjBhVzl1SUhSdklHSmxJR1Y0WldOMWRHVmtJR0ZtZEdWeUlIUm9aU0IwWlhOMGN5QnBiaUIwYUdseklHTmhkR1ZuYjNKNUlHRnlaU0JsZUdWamRYUmxaQzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaFpuUmxjaWhoWm5SbGNqb2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaWs2SUhadmFXUWdlMXh1SUNCcFppQW9kR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOVBTQjFibVJsWm1sdVpXUXBYRzRnSUNBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5SUh0OU8xeHVJQ0IwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZExtRm1kR1Z5SUQwZ1lXWjBaWEk3WEc1OVhHNWNibVoxYm1OMGFXOXVJR0ZrWkU1aGJXVnpjR0ZqWlNoek9pQnpkSEpwYm1jc0lHWTZJRVJITGtaMWJtTXBPaUJ6ZEhKcGJtY2dlMXh1SUNCeVpYUjFjbTRnY3k1eVpYQnNZV05sS0c1bGR5QlNaV2RGZUhBb1ppNXVZVzFsTENBbloya25LU3dnWmk1dWNVNWhiV1VwTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2FXNXBkRUYxZEc5VVpYTjBjeWh3WVdOcllXZGxTV1E2SUhOMGNtbHVaeXdnYlc5a2RXeGxQem9nWVc1NUtTQjdYRzRnSUdsbUlDaDNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwcElISmxkSFZ5Ymp0Y2JpQWdZMjl1YzNRZ2JXOWtkV3hsVkdWemRITWdQU0J0YjJSMWJHVWdQeUJ0YjJSMWJHVXVkR1Z6ZEhNZ09pQjBaWE4wY3p0Y2JpQWdhV1lnS0cxdlpIVnNaVlJsYzNSelcyRjFkRzlVWlhOMGMwTmhkRTVoYldWZElDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0IzWVhOU1pXZHBjM1JsY21Wa1czQmhZMnRoWjJWSlpGMGdQU0IwY25WbE8xeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0JqYjI1emRDQnRiMlIxYkdWQmRYUnZWR1Z6ZEhNZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnY0dGamEwWjFibU4wYVc5dWN5QTlJR0YzWVdsMElHZHliMnN1WkdGd2FTNW1kVzVqZEdsdmJuTXVabWxzZEdWeUtHQndZV05yWVdkbExtbGtJRDBnWENJa2UzQmhZMnRoWjJWSlpIMWNJbUFwTG14cGMzUW9LVHRjYmlBZ1kyOXVjM1FnY21WbklEMGdibVYzSUZKbFowVjRjQ2d2TGlwY1hDOWNYQzljWEhNcWMydHBjRnM2WEZ4elhTb29MaW9wSkM4cE8xeHVJQ0JtYjNJZ0tHTnZibk4wSUdZZ2IyWWdjR0ZqYTBaMWJtTjBhVzl1Y3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFJsYzNSeklEMGdaaTV2Y0hScGIyNXpXeWQwWlhOMEoxMDdYRzRnSUNBZ2FXWWdLQ0VvZEdWemRITWdKaVlnUVhKeVlYa3VhWE5CY25KaGVTaDBaWE4wY3lrZ0ppWWdkR1Z6ZEhNdWJHVnVaM1JvS1NrZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMFpYTjBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzJ0cGNGSmxZWE52Ym5NZ1BTQW9kR1Z6ZEhOYmFWMGdZWE1nYzNSeWFXNW5LUzV0WVhSamFDaHlaV2NwTzF4dUlDQWdJQ0FnYkdWMElITnJhWEJTWldGemIyNDdYRzRnSUNBZ0lDQnBaaUFvYzJ0cGNGSmxZWE52Ym5NZ0ppWWdjMnRwY0ZKbFlYTnZibk0vTG14bGJtZDBhQ0ErSURFcElITnJhWEJTWldGemIyNGdQU0J6YTJsd1VtVmhjMjl1YzFzeFhUdGNiaUFnSUNBZ0lHMXZaSFZzWlVGMWRHOVVaWE4wY3k1d2RYTm9LRzVsZHlCVVpYTjBLR0YxZEc5VVpYTjBjME5oZEU1aGJXVXNJSFJsYzNSekxteGxibWQwYUNBOVBUMGdNU0EvSUdZdWJtRnRaU0E2SUdBa2UyWXVibUZ0WlgwZ0pIdHBJQ3NnTVgxZ0xDQmhjM2x1WXlBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsY3lBOUlHRjNZV2wwSUdkeWIyc3VablZ1WTNScGIyNXpMbVYyWVd3b1lXUmtUbUZ0WlhOd1lXTmxLSFJsYzNSelcybGRMQ0JtS1NrN1hHNGdJQ0FnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTEwYUhKdmR5MXNhWFJsY21Gc1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhNZ0lUMDlJSFJ5ZFdVcElIUm9jbTkzSUdCR1lXbHNaV1E2SUNSN2RHVnpkSE5iYVYxOVlEdGNiaUFnSUNBZ0lIMHNJSHR6YTJsd1VtVmhjMjl1T2lCemEybHdVbVZoYzI5dWZTa3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQjNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwZ1BTQjBjblZsTzF4dUlDQnBaaUFvSVcxdlpIVnNaVUYxZEc5VVpYTjBjeTVzWlc1bmRHZ3BJSEpsZEhWeWJqdGNiaUFnYlc5a2RXeGxWR1Z6ZEhOYllYVjBiMVJsYzNSelEyRjBUbUZ0WlYwZ1BTQjdkR1Z6ZEhNNklHMXZaSFZzWlVGMWRHOVVaWE4wYzMwN1hHNTlYRzVjYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQnlkVzVVWlhOMGN5aHZjSFJwYjI1elB6b2dlMk5oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0IwWlhOMFB6b2djM1J5YVc1bkxDQjBaWE4wUTI5dWRHVjRkRDg2SUZSbGMzUkRiMjUwWlhoMGZTa2dlMXh1SUNCamIyNXpkQ0J3WVdOcllXZGxYeUE5SUdkeWIyc3VablZ1WTNScGIyNXpMbWRsZEVOMWNuSmxiblJEWVd4c0tDay9MbVoxYm1NL0xuQmhZMnRoWjJVN1hHNGdJR0YzWVdsMElHbHVhWFJCZFhSdlZHVnpkSE1vY0dGamEyRm5aVjh1YVdRcE8xeHVJQ0JqYjI1emRDQnlaWE4xYkhSek9pQjdJR05oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0J1WVcxbFB6b2djM1J5YVc1bkxDQnpkV05qWlhOek9pQmliMjlzWldGdUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsYzNWc2REb2djM1J5YVc1bkxDQnRjem9nYm5WdFltVnlMQ0J6YTJsd2NHVmtPaUJpYjI5c1pXRnVJSDFiWFNBOUlGdGRPMXh1SUNCamIyNXpiMnhsTG14dlp5aGdVblZ1Ym1sdVp5QjBaWE4wYzJBcE8xeHVJQ0J2Y0hScGIyNXpJRDgvUFNCN2ZUdGNiaUFnYjNCMGFXOXVjeUV1ZEdWemRFTnZiblJsZUhRZ1B6ODlJRzVsZHlCVVpYTjBRMjl1ZEdWNGRDZ3BPMXh1SUNCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpQTlJQ2NuTzF4dUlDQm1iM0lnS0dOdmJuTjBJRnRyWlhrc0lIWmhiSFZsWFNCdlppQlBZbXBsWTNRdVpXNTBjbWxsY3loMFpYTjBjeWtwSUh0Y2JpQWdJQ0JwWmlBb2IzQjBhVzl1Y3o4dVkyRjBaV2R2Y25rZ0lUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lXdGxlUzUwYjB4dmQyVnlRMkZ6WlNncExuTjBZWEowYzFkcGRHZ29iM0IwYVc5dWN6OHVZMkYwWldkdmNua3VkRzlNYjNkbGNrTmhjMlVvS1NrcFhHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UydGxlWDBnWTJGMFpXZHZjbmxnS1R0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbExtSmxabTl5WlNsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZbVZtYjNKbEtDazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnSUNCMllXeDFaUzVpWldadmNtVlRkR0YwZFhNZ1BTQjRMblJ2VTNSeWFXNW5LQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUhRZ1BTQjJZV3gxWlM1MFpYTjBjeUEvUHlCYlhUdGNiaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFF1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCeVpYTXVjSFZ6YUNoaGQyRnBkQ0JsZUdWalZHVnpkQ2gwVzJsZExDQnZjSFJwYjI1elB5NTBaWE4wS1NrN1hHNGdJQ0FnWTI5dWMzUWdaR0YwWVNBOUlDaGhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaHlaWE1wS1M1bWFXeDBaWElvS0dRcElEMCtJR1F1Y21WemRXeDBJQ0U5SUNkemEybHdjR1ZrSnlrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTNWhablJsY2lsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZV1owWlhJb0tUdGNiaUFnSUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0FnSUhaaGJIVmxMbUZtZEdWeVUzUmhkSFZ6SUQwZ2VDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kbUZzZFdVdVlXWjBaWEpUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWhablJsY2xOMFlYUjFjeXdnYzNWalkyVnpjem9nWm1Gc2MyVXNJRzF6T2lBd0xDQnphMmx3Y0dWa09pQm1ZV3h6WlgwcE8xeHVJQ0FnSUdsbUlDaDJZV3gxWlM1aVpXWnZjbVZUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1zSUhOMVkyTmxjM002SUdaaGJITmxMQ0J0Y3pvZ01Dd2djMnRwY0hCbFpEb2dabUZzYzJWOUtUdGNiaUFnSUNCeVpYTjFiSFJ6TG5CMWMyZ29MaTR1WkdGMFlTazdYRzRnSUgxY2JpQWdhV1lnS0c5d2RHbHZibk11ZEdWemRFTnZiblJsZUhRdVkyRjBZMmhWYm1oaGJtUnNaV1FwSUh0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hoZVNneE1EQXdLVHRjYmlBZ0lDQnBaaUFvWjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNJdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdjbVZ6ZFd4MGN5NXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ1kyRjBaV2R2Y25rNklDZFZibWhoYm1Sc1pXUWdaWGhqWlhCMGFXOXVjeWNzWEc0Z0lDQWdJQ0FnSUc1aGJXVTZJQ2RsZUdObGNIUnBiMjV6Snl4Y2JpQWdJQ0FnSUNBZ2NtVnpkV3gwT2lCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpd2djM1ZqWTJWemN6b2dabUZzYzJVc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCbVlXeHpaVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJR2xtSUNodmNIUnBiMjV6TG5SbGMzUkRiMjUwWlhoMExuSmxjRzl5ZENrZ2UxeHVJQ0FnSUdOdmJuTjBJR3h2WjJkbGNpQTlJRzVsZHlCRVJ5NU1iMmRuWlhJb0tUdGNiaUFnSUNCamIyNXpkQ0J6ZFdOalpYTnpablZzSUQwZ2NtVnpkV3gwY3k1bWFXeDBaWElvS0hJcElEMCtJSEl1YzNWalkyVnpjeWt1YkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUhOcmFYQndaV1FnUFNCeVpYTjFiSFJ6TG1acGJIUmxjaWdvY2lrZ1BUNGdjaTV6YTJsd2NHVmtLUzVzWlc1bmRHZzdYRzRnSUNBZ1kyOXVjM1FnWm1GcGJHVmtJRDBnY21WemRXeDBjeTVtYVd4MFpYSW9LSElwSUQwK0lDRnlMbk4xWTJObGMzTXBPMXh1SUNBZ0lHTnZibk4wSUdSbGMyTnlhWEIwYVc5dUlEMGdKMUJoWTJ0aFoyVWdRSEJoWTJ0aFoyVWdkR1Z6ZEdWa09pQkFjM1ZqWTJWemMyWjFiQ0J6ZFdOalpYTnpablZzTENCQWMydHBjSEJsWkNCemEybHdjR1ZrTENCQVptRnBiR1ZrSUdaaGFXeGxaQ0IwWlhOMGN5YzdYRzRnSUNBZ1kyOXVjM1FnY0dGeVlXMXpJRDBnZTF4dUlDQWdJQ0FnYzNWalkyVnpjMloxYkRvZ2MzVmpZMlZ6YzJaMWJDeGNiaUFnSUNBZ0lITnJhWEJ3WldRNklITnJhWEJ3WldRc1hHNGdJQ0FnSUNCbVlXbHNaV1E2SUdaaGFXeGxaQzVzWlc1bmRHZ3NYRzRnSUNBZ0lDQndZV05yWVdkbE9pQndZV05yWVdkbFgxeHVJQ0FnSUgwN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCeUlHOW1JR1poYVd4bFpDa2dUMkpxWldOMExtRnpjMmxuYmlod1lYSmhiWE1zSUh0YllDUjdjaTVqWVhSbFoyOXllWDBnZkNBa2UzSXVibUZ0WlgxZ1hUb2djaTV5WlhOMWJIUjlLVHRjYmlBZ0lDQnNiMmRuWlhJdWJHOW5LR1JsYzJOeWFYQjBhVzl1TENCd1lYSmhiWE1zSUNkd1lXTnJZV2RsTFhSbGMzUmxaQ2NwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhOMWJIUnpPMXh1ZlZ4dVhHNWhjM2x1WXlCbWRXNWpkR2x2YmlCbGVHVmpWR1Z6ZENoME9pQlVaWE4wTENCd2NtVmthV05oZEdVNklITjBjbWx1WnlCOElIVnVaR1ZtYVc1bFpDa2dlMXh1SUNCc1pYUWdjam9nZXlCallYUmxaMjl5ZVQ4NklITjBjbWx1Wnl3Z2JtRnRaVDg2SUhOMGNtbHVaeXdnYzNWalkyVnpjem9nWW05dmJHVmhiaXdnY21WemRXeDBPaUJ6ZEhKcGJtY3NJRzF6T2lCdWRXMWlaWElzSUhOcmFYQndaV1E2SUdKdmIyeGxZVzRnZlR0Y2JpQWdZMjl1YzNRZ1ptbHNkR1Z5SUQwZ2NISmxaR2xqWVhSbElDRTlJSFZ1WkdWbWFXNWxaQ0FtSmlBb0lYUXVibUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BMbk4wWVhKMGMxZHBkR2dvY0hKbFpHbGpZWFJsTG5SdlRHOTNaWEpEWVhObEtDa3BLVHRjYmlBZ1kyOXVjM1FnYzJ0cGNDQTlJSFF1YjNCMGFXOXVjejh1YzJ0cGNGSmxZWE52YmlCOGZDQm1hV3gwWlhJN1hHNGdJR052Ym5OMElITnJhWEJTWldGemIyNGdQU0JtYVd4MFpYSWdQeUFuYzJ0cGNIQmxaQ2NnT2lCMExtOXdkR2x2Ym5NL0xuTnJhWEJTWldGemIyNDdYRzRnSUdsbUlDZ2hjMnRwY0NsY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UzUXVZMkYwWldkdmNubDlJQ1I3ZEM1dVlXMWxmV0FwTzF4dUlDQmpiMjV6ZENCemRHRnlkQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYVdZZ0tITnJhWEFwWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nYzJ0cGNGSmxZWE52YmlFc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCMGNuVmxmVHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nWVhkaGFYUWdkQzUwWlhOMEtDa2dQejhnSjA5TEp5d2diWE02SURBc0lITnJhWEJ3WldRNklHWmhiSE5sZlR0Y2JpQWdmU0JqWVhSamFDQW9lRG9nWVc1NUtTQjdYRzRnSUNBZ2NpQTlJSHR6ZFdOalpYTnpPaUJtWVd4elpTd2djbVZ6ZFd4ME9pQjRMblJ2VTNSeWFXNW5LQ2tzSUcxek9pQXdMQ0J6YTJsd2NHVmtPaUJtWVd4elpYMDdYRzRnSUgxY2JpQWdZMjl1YzNRZ2MzUnZjQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJQzh2SUVCMGN5MXBaMjV2Y21WY2JpQWdjaTV0Y3lBOUlITjBiM0FnTFNCemRHRnlkRHRjYmlBZ2FXWWdLQ0Z6YTJsd0tWeHVJQ0FnSUdOdmJuTnZiR1V1Ykc5bktHQkdhVzVwYzJobFpDQWtlM1F1WTJGMFpXZHZjbmw5SUNSN2RDNXVZVzFsZlNCbWIzSWdKSHR5TG0xemZTQnRjMkFwTzF4dUlDQnlMbU5oZEdWbmIzSjVJRDBnZEM1allYUmxaMjl5ZVR0Y2JpQWdjaTV1WVcxbElEMGdkQzV1WVcxbE8xeHVJQ0J5WlhSMWNtNGdjanRjYm4xY2JseHVMeW9nVjJGcGRITWdXMjF6WFNCdGFXeHNhWE5sWTI5dVpITWdLaTljYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQmtaV3hoZVNodGN6b2diblZ0WW1WeUtTQjdYRzRnSUdGM1lXbDBJRzVsZHlCUWNtOXRhWE5sS0NoeUtTQTlQaUJ6WlhSVWFXMWxiM1YwS0hJc0lHMXpLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCaGQyRnBkRU5vWldOcktHTm9aV05yU0dGdVpHeGxjam9nS0NrZ1BUNGdZbTl2YkdWaGJpeGNiaUFnWlhKeWIzSTZJSE4wY21sdVp5QTlJQ2RVYVcxbGIzVjBJR1Y0WTJWbFpHVmtKeXdnZDJGcGREb2diblZ0WW1WeUlEMGdOVEF3TENCcGJuUmxjblpoYkRvZ2JuVnRZbVZ5SUQwZ05UQXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUdOc1pXRnlTVzUwWlhKMllXd29hVzUwWlhKMllXeEpaQ2s3WEc0Z0lDQWdJQ0J5WldwbFkzUW9ibVYzSUVWeWNtOXlLR1Z5Y205eUtTazdYRzRnSUNBZ2ZTd2dkMkZwZENrN1hHNGdJQ0FnTHk4Z1FIUnpMV2xuYm05eVpWeHVJQ0FnSUdOdmJuTjBJR2x1ZEdWeWRtRnNTV1E2SUZScGJXVnZkWFFnUFNCelpYUkpiblJsY25aaGJDZ29LU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9ZMmhsWTJ0SVlXNWtiR1Z5S0NrcElIdGNiaUFnSUNBZ0lDQWdZMnhsWVhKSmJuUmxjblpoYkNocGJuUmxjblpoYkVsa0tUdGNiaUFnSUNBZ0lDQWdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHNJR2x1ZEdWeWRtRnNLVHRjYmlBZ2ZTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwUnBZV3h2WjFCeVpYTmxiblFvWkdsaGJHOW5WR2wwYkdVNklITjBjbWx1WnlrNklHSnZiMnhsWVc0Z2UxeHVJQ0JqYjI1emRDQmthV0ZzYjJkeklEMGdSRWN1UkdsaGJHOW5MbWRsZEU5d1pXNUVhV0ZzYjJkektDazdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pHbGhiRzluY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2hrYVdGc2IyZHpXMmxkTG5ScGRHeGxJRDA5SUdScFlXeHZaMVJwZEd4bEtWeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHWmhiSE5sTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2RHVnpkRlpwWlhkbGNpaDJPaUJ6ZEhKcGJtY3NJR1JtT2lCRVJ5NUVZWFJoUm5KaGJXVXNJR1JsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE02SUdKdmIyeGxZVzRnUFNCbVlXeHpaU2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNCcFppQW9aR1YwWldOMFUyVnRZVzUwYVdOVWVYQmxjeWtnWVhkaGFYUWdaM0p2YXk1a1lYUmhMbVJsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE1vWkdZcE8xeHVJQ0JqYjI1emRDQjBkaUE5SUdkeWIyc3VjMmhsYkd3dVlXUmtWR0ZpYkdWV2FXVjNLR1JtS1R0Y2JpQWdZMjl1YzNRZ2RtbGxkMlZ5VG1GdFpTQTlJR0JiYm1GdFpUMTJhV1YzWlhJdEpIdDJMbkpsY0d4aFkyVW9MMXhjY3lzdlp5d2dKeTBuS1gwZ2FWMWdPMXh1SUNCamIyNXpkQ0J6Wld4bFkzUnZjaUE5SUdBa2UzWnBaWGRsY2s1aGJXVjlJR05oYm5aaGN5d2tlM1pwWlhkbGNrNWhiV1Y5SUhOMlp5d2tlM1pwWlhkbGNrNWhiV1Y5SUdsdFp5eGNiaUFnSUNBa2UzWnBaWGRsY2s1aGJXVjlJR2x1Y0hWMExDUjdkbWxsZDJWeVRtRnRaWDBnYURFc0pIdDJhV1YzWlhKT1lXMWxmU0JoWUR0Y2JpQWdZMjl1YzNRZ2NtVnpJRDBnVzEwN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYkdWMElIWnBaWGRsY2lBOUlIUjJMbUZrWkZacFpYZGxjaWgyS1R0Y2JpQWdJQ0JoZDJGcGRDQmhkMkZwZEVOb1pXTnJLQ2dwSUQwK0lHUnZZM1Z0Wlc1MExuRjFaWEo1VTJWc1pXTjBiM0lvYzJWc1pXTjBiM0lwSUNFOVBTQnVkV3hzTEZ4dUlDQWdJQ0FnSjJOaGJtNXZkQ0JzYjJGa0lIWnBaWGRsY2ljc0lETXdNREFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0JCY25KaGVTNW1jbTl0S0dSbUxuSnZkeWd3S1M1alpXeHNjeWt1Wm05eVJXRmphQ2dvWXlrZ1BUNGdZeTUyWVd4MVpTQTlJRzUxYkd3cE8xeHVJQ0FnSUdSbUxuSnZkM011YzJWc1pXTjBLQ2h5YjNjcElEMCtJSEp2ZHk1cFpIZ2dQaUF4SUNZbUlISnZkeTVwWkhnZ1BDQTNLVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTnpzZ2FTQThJREV5T3lCcEt5c3BJR1JtTG1acGJIUmxjaTV6WlhRb2FTd2dabUZzYzJVcE8xeHVJQ0FnSUdSbUxtTjFjbkpsYm5SU2IzZEpaSGdnUFNBeE8xeHVJQ0FnSUdOdmJuTjBJSEJ5YjNCeklEMGdkbWxsZDJWeUxtZGxkRTl3ZEdsdmJuTW9kSEoxWlNrdWJHOXZhenRjYmlBZ0lDQmpiMjV6ZENCdVpYZFFjbTl3Y3pvZ1VtVmpiM0prUEhOMGNtbHVaeXdnWW05dmJHVmhiajRnUFNCN2ZUdGNiaUFnSUNCUFltcGxZM1F1YTJWNWN5aHdjbTl3Y3lrdVptbHNkR1Z5S0NocktTQTlQaUIwZVhCbGIyWWdjSEp2Y0hOYmExMGdQVDA5SUNkaWIyOXNaV0Z1SnlrdVptOXlSV0ZqYUNnb2F5a2dQVDRnYm1WM1VISnZjSE5iYTEwZ1BTQWhjSEp2Y0hOYmExMHBPMXh1SUNBZ0lIWnBaWGRsY2k1elpYUlBjSFJwYjI1ektHNWxkMUJ5YjNCektUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJR052Ym5OMElHeGhlVzkxZENBOUlIUjJMbk5oZG1WTVlYbHZkWFFvS1R0Y2JpQWdJQ0JqYjI1emRDQnZiR1JRY205d2N5QTlJSFpwWlhkbGNpNW5aWFJQY0hScGIyNXpLQ2t1Ykc5dmF6dGNiaUFnSUNCMGRpNXlaWE5sZEV4aGVXOTFkQ2dwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IwZGk1c2IyRmtUR0Y1YjNWMEtHeGhlVzkxZENrN1hHNGdJQ0FnWVhkaGFYUWdZWGRoYVhSRGFHVmpheWdvS1NBOVBpQmtiMk4xYldWdWRDNXhkV1Z5ZVZObGJHVmpkRzl5S0hObGJHVmpkRzl5S1NBaFBUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkallXNXViM1FnYkc5aFpDQjJhV1YzWlhJZ1puSnZiU0JzWVhsdmRYUW5MQ0F6TURBd0tUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IyYVdWM1pYSWdQU0JCY25KaGVTNW1jbTl0S0hSMkxuWnBaWGRsY25NcExtWnBibVFvS0hZcElEMCtJSFl1ZEhsd1pTQWhQVDBnSjBkeWFXUW5LU0U3WEc0Z0lDQWdaWGh3WldOMFFYSnlZWGtvY21WekxDQmJNaXdnTVN3Z01sMHBPMXh1SUNBZ0lHVjRjR1ZqZENoS1UwOU9Mbk4wY21sdVoybG1lU2gyYVdWM1pYSXVaMlYwVDNCMGFXOXVjeWdwTG14dmIyc3BMQ0JLVTA5T0xuTjBjbWx1WjJsbWVTaHZiR1JRY205d2N5a3BPMXh1SUNCOUlHWnBibUZzYkhrZ2UxeHVJQ0FnSUhSMkxtTnNiM05sS0NrN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1amJHOXpaVlJoWW14bEtHUm1LVHRjYmlBZ2ZWeHVmVnh1SWwxOSIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG4vKiogRGVtbyBzY3JpcHQgY2xhc3MuIENvdWxkIGJlIHVzZWQgZm9yIGNyZWF0aW5nIGRlbW8gc2NyaXB0cyB0byBzaG93IHRoZSBwbGF0Zm9ybSBjYXBhYmlsaXRpZXMgKi9cbmV4cG9ydCBjbGFzcyBEZW1vU2NyaXB0IHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjcmlwdGlvbiwgaXNBdXRvbWF0aWMgPSBmYWxzZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX2lzQXV0b21hdGljID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2F1dG9TdGFydEZpcnN0U3RlcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RlcCA9IDA7XG4gICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm9vdCA9IHVpLmRpdihbXSwgeyBpZDogJ2RlbW8tc2NyaXB0JyxcbiAgICAgICAgICAgIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBbXTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgyKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9zdG9wU3RhcnRCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdwYXVzZScpLCAoKSA9PiB0aGlzLl9jaGFuZ2VTdG9wU3RhdGUoKSwgJ1BsYXkgLyBwYXVzZScpO1xuICAgICAgICB0aGlzLl9yZXN0YXJ0QnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncmVkbycpLCAoKSA9PiB0aGlzLl9yZXN0YXJ0U2NyaXB0KCksICdSZXN0YXJ0Jyk7XG4gICAgICAgIHRoaXMuX25leHRTdGVwQnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncGxheScpLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU3RlcFByb2Nlc3NlZClcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICB9LCAnTmV4dCBzdGVwJyk7XG4gICAgICAgIHRoaXMuX2FjdGl2aXR5ID0gdWkucGFuZWwoW10sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0RpdiA9IHVpLmRpdlYoW10sICd0dXRvcmlhbHMtcm9vdC1wcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHVpLmVsZW1lbnQoJ3Byb2dyZXNzJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMgPSB1aS5kaXZUZXh0KCcnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdjaGV2cm9uLWxlZnQnKSwgKCkgPT4gdGhpcy5fY2xvc2VEb2NrKCksICdCYWNrIHRvIGRlbW8nKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLl9pc0F1dG9tYXRpYyA9IGlzQXV0b21hdGljO1xuICAgICAgICB0aGlzLl9hdXRvU3RhcnRGaXJzdFN0ZXAgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYXV0b1N0YXJ0Rmlyc3RTdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUgPSAxO1xuICAgICAgICBEZW1vU2NyaXB0LmN1cnJlbnRPYmplY3QgPSB0aGlzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBkZW1vIHNjcmlwdCBzdGVwcyAqL1xuICAgIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyB0aGUgYW1vdW50IG9mIGRlbW8gc2NyaXB0IHN0ZXBzICovXG4gICAgZ2V0IHN0ZXBOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKiBBZGRzIHNjcmlwdCBoZWFkZXIgKi9cbiAgICBfYWRkSGVhZGVyKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVIZWFkZXJEaXYoKTtcbiAgICAgICAgdGhpcy5fY3JlYXRlUHJvZ3Jlc3NEaXYoKTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlci5hcHBlbmQodGhpcy5faGVhZGVyRGl2LCB0aGlzLl9wcm9ncmVzc0Rpdik7XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNjcmlwdCBoZWFkZXIgZGl2ICovXG4gICAgX2NyZWF0ZUhlYWRlckRpdigpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyLmlubmVyVGV4dCA9IHRoaXMubmFtZTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9jbG9zZUJ0bik7XG4gICAgICAgIHRoaXMuX2hlYWRlckRpdi5hcHBlbmQodGhpcy5faGVhZGVyKTtcbiAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9pc0F1dG9tYXRpYyA/IHRoaXMuX3N0b3BTdGFydEJ0biA6IHRoaXMuX25leHRTdGVwQnRuKTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc2NyaXB0IHByb2dyZXNzIGRpdiAqL1xuICAgIF9jcmVhdGVQcm9ncmVzc0RpdigpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gdGhpcy5zdGVwTnVtYmVyO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0Rpdi5hcHBlbmQodGhpcy5fcHJvZ3Jlc3MpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dChgU3RlcDogJHt0aGlzLl9wcm9ncmVzcy52YWx1ZX0gb2YgJHt0aGlzLnN0ZXBOdW1iZXJ9YCk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzRGl2LmFwcGVuZCh0aGlzLl9wcm9ncmVzc1N0ZXBzKTtcbiAgICB9XG4gICAgLyoqIEFkZHMgZGVzY3JpcHRpb24gb2YgdGhlIHNjcmlwdCAqL1xuICAgIF9hZGREZXNjcmlwdGlvbigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eS5hcHBlbmQodWkuZGl2KHRoaXMuZGVzY3JpcHRpb24sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0ZXBOdW1iZXI7IGkrKykge1xuICAgICAgICAgICAgbGV0IGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjbG9jaycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdwbGF5JywgKCkgPT4gdGhpcy5fbmV4dFN0ZXAoKSwgJ05leHQgc3RlcCcpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbkluZGljYXRvci5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkRpdiA9IHVpLmRpdih0aGlzLl9zdGVwc1tpXS5uYW1lLCAnZ3Jvay10dXRvcmlhbC1lbnRyeS1pbnN0cnVjdGlvbicpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0ZXBEZXNjcmlwdGlvbiA9IHVpLmRpdigoX2EgPSB0aGlzLl9zdGVwc1tpXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVzY3JpcHRpb24sICdncm9rLXR1dG9yaWFsLXN0ZXAtZGVzY3JpcHRpb24gaGlkZGVuJyk7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHVpLmRpdkgoW1xuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yLFxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uRGl2LFxuICAgICAgICAgICAgXSwgJ2dyb2stdHV0b3JpYWwtZW50cnknKTtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2aXR5LmFwcGVuZChlbnRyeSwgY3VycmVudFN0ZXBEZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIEluaXRpYWxpemVzIHRoZSByb290IG9mIHRoZSBkZW1vIHNjcmlwdCAqL1xuICAgIF9pbml0Um9vdCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93Q29udGV4dFBhbmVsID0gdHJ1ZTtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dIZWxwID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNjcmlwdERvY2tOb2RlID0gQXJyYXkuZnJvbShncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLnJvb3ROb2RlLmNoaWxkcmVuKVswXTtcbiAgICAgICAgdGhpcy5fbm9kZSA9IGdyb2suc2hlbGwuZG9ja01hbmFnZXIuZG9jayh0aGlzLl9yb290LCBERy5ET0NLX1RZUEUuRklMTCwgc2NyaXB0RG9ja05vZGUsICcnKTtcbiAgICAgICAgaWYgKChfYiA9IChfYSA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxhc3RFbGVtZW50Q2hpbGQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jbGFzc0xpc3QuY29udGFpbnMoJ3RhYi1oYW5kbGUtbGlzdC1jb250YWluZXInKSlcbiAgICAgICAgICAgIChfYyA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxhc3RFbGVtZW50Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX25vZGUuY29udGFpbmVyLmNvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHV0b3JpYWxzLWRlbW8tc2NyaXB0LWNvbnRhaW5lcicpO1xuICAgICAgICB0aGlzLl9hZGRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5fcm9vdC5hcHBlbmQodGhpcy5fbWFpbkhlYWRlcik7XG4gICAgICAgIHRoaXMuX2FkZERlc2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuX3Jvb3QuYXBwZW5kKHRoaXMuX2FjdGl2aXR5KTtcbiAgICB9XG4gICAgLyoqIFByb2Nlc3NlcyBuZXh0IHN0ZXAgKi9cbiAgICBfbmV4dFN0ZXAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25leHRTdGVwQnRuLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc0xpc3QuYWRkKCdmYS1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLXR1dG9yaWFsLWVudHJ5JylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgY29uc3QgZW50cnlJbmRpY2F0b3IgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKVt0aGlzLl9jdXJyZW50U3RlcF07XG4gICAgICAgICAgICBjb25zdCBlbnRyeUluc3RydWN0aW9uID0gdGhpcy5fYWN0aXZpdHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay10dXRvcmlhbC1zdGVwLWRlc2NyaXB0aW9uJylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgZW50cnlJbmRpY2F0b3IuY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluJztcbiAgICAgICAgICAgIGVudHJ5SW5zdHJ1Y3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgICAgICBlbnRyeUluc3RydWN0aW9uLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gZW50cnk7XG4gICAgICAgICAgICBjb25zdCBzdGVwRGVsYXkgPSAoKF9hID0gdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWxheSkgP1xuICAgICAgICAgICAgICAgIChfYiA9IHRoaXMuX3N0ZXBzW3RoaXMuX2N1cnJlbnRTdGVwXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVsYXkgOiAyMDAwO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLmZ1bmMoKTtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Jvb3QsIGN1cnJlbnRTdGVwLm9mZnNldFRvcCAtIHRoaXMuX21haW5IZWFkZXIub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuX2NvdW50ZG93bihlbnRyeSwgZW50cnlJbmRpY2F0b3IsIHN0ZXBEZWxheSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZGVsYXkoc3RlcERlbGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld0VudHJ5SW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjaGVjaycpO1xuICAgICAgICAgICAgZW50cnlJbmRpY2F0b3IucmVwbGFjZVdpdGgobmV3RW50cnlJbmRpY2F0b3IpO1xuICAgICAgICAgICAgbmV3RW50cnlJbmRpY2F0b3IuY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtY2hlY2snO1xuICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUrKztcbiAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMuaW5uZXJUZXh0ID0gYFN0ZXA6ICR7dGhpcy5fcHJvZ3Jlc3MudmFsdWV9IG9mICR7dGhpcy5zdGVwTnVtYmVyfWA7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RlcCsrO1xuICAgICAgICAgICAgdGhpcy5faXNTdGVwUHJvY2Vzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0ZXAgPT09IHRoaXMuc3RlcE51bWJlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzQXV0b21hdGljID8gdGhpcy5fc3RvcFN0YXJ0QnRuLnJlcGxhY2VXaXRoKHRoaXMuX3Jlc3RhcnRCdG4pIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4ucmVwbGFjZVdpdGgodGhpcy5fcmVzdGFydEJ0bik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTdGVwRW50cnlJbmRpY2F0b3IgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKVt0aGlzLl9jdXJyZW50U3RlcF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnROZXh0U3RlcEljb24gPSB1aS5pY29uRkEoJ3BsYXknLCAoKSA9PiB0aGlzLl9uZXh0U3RlcCgpLCAnTmV4dCBzdGVwJyk7XG4gICAgICAgICAgICAgICAgc3RhcnROZXh0U3RlcEljb24uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXMgZmEtcGxheSc7XG4gICAgICAgICAgICAgICAgbmV4dFN0ZXBFbnRyeUluZGljYXRvci5yZXBsYWNlV2l0aChzdGFydE5leHRTdGVwSWNvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5maXJzdENoaWxkLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhLWRpc2FibGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKiogU3RhcnRzIHRoZSBkZW1vIHNjcmlwdCBhY3Rpb25zICovXG4gICAgX3N0YXJ0U2NyaXB0KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2N1cnJlbnRTdGVwOyBpIDwgdGhpcy5zdGVwTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNTdG9wcGVkIHx8IHRoaXMuX2lzQ2FuY2VsbGVkKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2Nyb2xscyB0byB0aGUgY3VycmVudCBzdGVwXG4gICAgICogQHBhcmFtIGVsZW1lbnQgLSBDdXJyZW50IHN0ZXAgZWxlbWVudCBpbiByb290XG4gICAgICogQHBhcmFtIHkgLSB5IGNvb3JkaW5hdGUgb2YgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBfc2Nyb2xsVG8oZWxlbWVudCwgeSkge1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0geTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBpbnRlcmFjdGl2ZSBkZWxheSBpbmRpY2F0b3JcbiAgICAgKiBAcGFyYW0gZWxlbWVudCAtIEN1cnJlbnQgc3RlcCBlbGVtZW50XG4gICAgICogQHBhcmFtIGluZGljYXRvciAtIEN1cnJlbnQgc3RlcCBpbmRpY2F0b3JcbiAgICAgKiBAcGFyYW0gdGltZSAtIEluZGljYXRvciBhbmltYXRpb24gdGltZVxuICAgICAqL1xuICAgIF9jb3VudGRvd24oZWxlbWVudCwgaW5kaWNhdG9yLCB0aW1lKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudGRvd25EaXYgPSB1aS5kaXYoW10sICdkZW1vLXNjcmlwdC1jb3VudGRvd24nKTtcbiAgICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgICAgIGxldCBjb3VudGRvd24gPSB0aW1lIC8gMTAwMDtcbiAgICAgICAgICAgIGNvbnN0IHN2ZyA9IHRoaXMuX2NyZWF0ZVNWR0luZGljYXRvcihjb3VudGRvd24pO1xuICAgICAgICAgICAgY291bnRkb3duRGl2LmFwcGVuZChzdmcpO1xuICAgICAgICAgICAgZWxlbWVudC5wcmVwZW5kKGNvdW50ZG93bkRpdik7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGRvd24tLTtcbiAgICAgICAgICAgICAgICBpZiAoY291bnRkb3duID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGRvd25EaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgU1ZHIHdpdGggY291bnRkb3duIGNpcmNsZVxuICAgICAqIEBwYXJhbSBjb3VudGRvd24gLSBjb3VudGRvd24gdGltZVxuICAgICAqIEByZXR1cm5zIFNWRyBjb3VudGRvd24gaW5kaWNhdG9yXG4gICAgICovXG4gICAgX2NyZWF0ZVNWR0luZGljYXRvcihjb3VudGRvd24pIHtcbiAgICAgICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnKTtcbiAgICAgICAgY29uc3QgY2lyY2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdjaXJjbGUnKTtcbiAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICc3Jyk7XG4gICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3knLCAnNycpO1xuICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3InLCAnNicpO1xuICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0eWxlJywgYGFuaW1hdGlvbjogY291bnRkb3duICR7Y291bnRkb3dufXMgbGluZWFyIGluZmluaXRlIGZvcndhcmRzYCk7XG4gICAgICAgIHN2Zy5hcHBlbmQoY2lyY2xlKTtcbiAgICAgICAgcmV0dXJuIHN2ZztcbiAgICB9XG4gICAgLyoqIENoYW5nZXMgdGhlIHN0YXRlIG9mIHRoZSBkZW1vIHNjcmlwdCAoc3RvcC9wbGF5KSAqL1xuICAgIF9jaGFuZ2VTdG9wU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9zdG9wU3RhcnRCdG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXMgZmEtcGxheSc7XG4gICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9ICF0aGlzLl9pc1N0b3BwZWQ7XG4gICAgICAgIGlmICghdGhpcy5faXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBpY29uWzBdLmNsYXNzTmFtZSA9ICdncm9rLWljb24gZmFsIGZhLXBhdXNlJztcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNTdGVwUHJvY2Vzc2VkKVxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2NyaXB0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIFJlc3RhcnRzIHRoZSBzY3JpcHQgKi9cbiAgICBfcmVzdGFydFNjcmlwdCgpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC5kb2NrTWFuYWdlci5jbG9zZSh0aGlzLl9ub2RlKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgICB0aGlzLl9jbGVhclJvb3QoKTtcbiAgICAgICAgdGhpcy5fc2V0SW5pdFBhcmFtcygpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICAgIC8qKiBDbGVhcnMgdGhlIHJvb3QgZWxlbWVudCAqL1xuICAgIF9jbGVhclJvb3QoKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB1aS5kaXYoW10sIHsgaWQ6ICdkZW1vLXNjcmlwdCcsIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgyKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eSA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLXJvb3QtZGVzY3JpcHRpb24nKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NEaXYgPSB1aS5kaXZWKFtdLCAndHV0b3JpYWxzLXJvb3QtcHJvZ3Jlc3MnKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB1aS5lbGVtZW50KCdwcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dCgnJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLm1heCA9IDA7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLnZhbHVlID0gMTtcbiAgICB9XG4gICAgLyoqIFNldHMgaW5pdGlhbCBwYXJhbWV0ZXJzICovXG4gICAgX3NldEluaXRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwID0gMDtcbiAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9zdG9wU3RhcnRCdG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYWwgZmEtcGF1c2UnO1xuICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xuICAgIH1cbiAgICAvKiogQ2xvc2VzIGRlbW8gc2NyaXB0IGRvY2sgKi9cbiAgICBfY2xvc2VEb2NrKCkge1xuICAgICAgICBncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLmNsb3NlKHRoaXMuX25vZGUpO1xuICAgICAgICB0aGlzLmNhbmNlbFNjcmlwdCgpO1xuICAgIH1cbiAgICAvKiogQ2FuY2VscyB0aGUgc2NyaXB0ICovXG4gICAgY2FuY2VsU2NyaXB0KCkge1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIERlbW9TY3JpcHQuY3VycmVudE9iamVjdCA9IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgc3RlcCB0byBzY3JpcHRcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFN0ZXAgbmFtZVxuICAgICAqIEBwYXJhbSBmdW5jIC0gU3RlcCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gU3RlcCBvcHRpb25zIChkZXNjcmlwdGlvbiBhbmQgZGVsYXkgYWZ0ZXIgc3RlcCBlbmRzKVxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGN1cnJlbnQgZGVtbyBzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgc3RlcChuYW1lLCBmdW5jLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBzW3RoaXMuc3RlcHMubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKiBTdGFydHMgdGhlIGRlbW8gc2NyaXB0ICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0Um9vdCgpO1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC5uZXdWaWV3KHRoaXMubmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNBdXRvbWF0aWMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFNjcmlwdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvU3RhcnRGaXJzdFN0ZXApXG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fbmV4dFN0ZXAoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuRGVtb1NjcmlwdC5jdXJyZW50T2JqZWN0ID0gbnVsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHVnRieTF6WTNKcGNIUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKa1pXMXZMWE5qY21sd2RDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdRVUZCUVN4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUTNSRExFOUJRVThzUzBGQlN5eEZRVUZGTEUxQlFVMHNhVUpCUVdsQ0xFTkJRVU03UVVGRGRFTXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhQUVVGUExFVkJRVU1zUzBGQlN5eEZRVUZETEUxQlFVMHNiME5CUVc5RExFTkJRVU03UVVGbGVrUXNiVWRCUVcxSE8wRkJRMjVITEUxQlFVMHNUMEZCVHl4VlFVRlZPMGxCZFVOeVFpeFpRVUZaTEVsQlFWa3NSVUZCUlN4WFFVRnRRaXhGUVVGRkxHTkJRWFZDTEV0QlFVc3NSVUZEZWtVc1QwRkJkME03TzFGQmRrTXhReXhUUVVGSkxFZEJRVmNzUlVGQlJTeERRVUZETzFGQlEyeENMR2RDUVVGWExFZEJRVmNzUlVGQlJTeERRVUZETzFGQlNXcENMR2xDUVVGWkxFZEJRVmtzUzBGQlN5eERRVUZETzFGQlF6bENMSGRDUVVGdFFpeEhRVUZaTEV0QlFVc3NRMEZCUXp0UlFVTnlReXhwUWtGQldTeEhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVTjZRaXhsUVVGVkxFZEJRVmtzUzBGQlN5eERRVUZETzFGQlF6VkNMR2xDUVVGWkxFZEJRVmtzUzBGQlN5eERRVUZETzFGQlF6bENMSEZDUVVGblFpeEhRVUZaTEV0QlFVc3NRMEZCUXp0UlFVVnNReXhWUVVGTExFZEJRVzFDTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZGTEdGQlFXRTdXVUZETTBRc1QwRkJUeXhGUVVGRkxHZEVRVUZuUkN4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVWMFJDeFhRVUZOTEVkQlFWY3NSVUZCUlN4RFFVRkRPMUZCUlhCQ0xHZENRVUZYTEVkQlFXMUNMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeEZRVUZGTEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGRGNFVXNXVUZCVHl4SFFVRjFRaXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNoRExHVkJRVlVzUjBGQmJVSXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFVkJRVVVzZFVKQlFYVkNMRU5CUVVNc1EwRkJRenRSUVVOc1JTeHJRa0ZCWVN4SFFVRnpRaXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRM0pGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNSVUZCUlN4RlFVRkZMR05CUVdNc1EwRkJReXhEUVVGRE8xRkJRM3BETEdkQ1FVRlhMRWRCUVhOQ0xFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEZEVjc2FVSkJRVmtzUjBGQmMwSXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSVHRaUVVNeFJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFqdG5Ra0ZEZUVJc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzFGQlEzSkNMRU5CUVVNc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dFJRVVZTTEdOQlFWTXNSMEZCYlVJc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVWQlFVVXNORUpCUVRSQ0xFTkJRVU1zUTBGQlF6dFJRVVYyUlN4cFFrRkJXU3hIUVVGdFFpeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUTNSRkxHTkJRVk1zUjBGQmQwSXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UkN4dFFrRkJZeXhIUVVGdFFpeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSMmhFTEdOQlFWTXNSMEZCYzBJc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hqUVVGakxFTkJRVU1zUTBGQlF6dFJRVXR1U0N4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5xUWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExGZEJRVmNzUTBGQlF6dFJRVU12UWl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExGZEJRVmNzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVkQlFVY3NUVUZCUVN4UFFVRlBMR0ZCUVZBc1QwRkJUeXgxUWtGQlVDeFBRVUZQTEVOQlFVVXNhMEpCUVd0Q0xHMURRVUZKTEV0QlFVc3NRMEZCUXp0UlFVVm9SU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka0lzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSWHBDTEZWQlFWVXNRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZGUkN4blEwRkJaME03U1VGRGFFTXNTVUZCU1N4TFFVRkxPMUZCUTFBc1QwRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEzSkNMRU5CUVVNN1NVRkZSQ3c0UTBGQk9FTTdTVUZET1VNc1NVRkJTU3hWUVVGVk8xRkJRMW9zVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVNMVFpeERRVUZETzBsQlIwUXNlVUpCUVhsQ08wbEJRMnBDTEZWQlFWVTdVVUZEYUVJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhGUVVGRkxFTkJRVU03VVVGRE1VSXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03U1VGRE9VUXNRMEZCUXp0SlFVVkVMR2REUVVGblF6dEpRVU40UWl4blFrRkJaMEk3VVVGRGRFSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTnVReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRGRrTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUlhCRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNWVUZCTUVJc1EwRkJReXhUUVVGVExFZEJRVWNzZFVKQlFYVkNMRU5CUVVNN1VVRkZiRVlzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMGxCUTNKR0xFTkJRVU03U1VGRlJDeHJRMEZCYTBNN1NVRkRNVUlzYTBKQlFXdENPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNwRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4UFFVRlBMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlJYaEdMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOb1JDeERRVUZETzBsQlJVUXNjVU5CUVhGRE8wbEJRemRDTEdWQlFXVTdPMUZCUTNKQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NSVUZCUlN3MFFrRkJORUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGT1VVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEZUVNc1NVRkJTU3h2UWtGQmIwSXNSMEZCUnl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlF6bERMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTzJkQ1FVTjBRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVTdiMEpCUTFnc2IwSkJRVzlDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZETzI5Q1FVTTVSU3h2UWtGQmIwSXNRMEZCUXl4VFFVRlRMRWRCUVVjc2RVSkJRWFZDTEVOQlFVTTdhVUpCUXpGRU8yRkJRMFk3V1VGRFJDeE5RVUZOTEdOQlFXTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxHbERRVUZwUXl4RFFVRkRMRU5CUVVNN1dVRkRkRVlzVFVGQlRTeHpRa0ZCYzBJc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVRXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTERCRFFVRkZMRmRCUVZjc1JVRkRka1VzZFVOQlFYVkRMRU5CUVVNc1EwRkJRenRaUVVNelF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU53UWl4dlFrRkJiMEk3WjBKQlEzQkNMR05CUVdNN1lVRkRaaXhGUVVGRkxIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNN1dVRkZNVUlzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxITkNRVUZ6UWl4RFFVRkRMRU5CUVVNN1UwRkRkRVE3U1VGRFNDeERRVUZETzBsQlJVUXNPRU5CUVRoRE8wbEJRM1JETEZOQlFWTTdPMUZCUTJZc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzU1VGQlNTeERRVUZETzFGQlF6TkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkZjRU1zVFVGQlRTeGpRVUZqTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGTDBVc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeGpRVUZqTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkZOVVlzU1VGQlNTeE5RVUZCTEUxQlFVRXNZMEZCWXl4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc2FVSkJRV2xDTERCRFFVRkZMR2RDUVVGblFpd3dRMEZEZEVZc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF5d3lRa0ZCTWtJc1EwRkJRenRaUVVNdlF5eE5RVUZCTEdOQlFXTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExHZENRVUZuUWl4RFFVRkRMR2xDUVVGcFFpd3dRMEZCUlN4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVVm9SeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMR2xEUVVGcFF5eERRVUZETEVOQlFVTTdVVUZGZGtZc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETzFGQlEyeENMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRSUVVWd1F5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1VVRkRka0lzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBsQlEzQkRMRU5CUVVNN1NVRkZSQ3d3UWtGQk1FSTdTVUZEV2l4VFFVRlRPenM3V1VGRGNrSXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTTNRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkRkRUlzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTXpReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZWQlFUQkNMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0aFFVTTFSVHRaUVVWRUxFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRPVVlzVFVGQlRTeGpRVUZqTEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdXVUZETjBZc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExITkNRVUZ6UWl4RFFVRkRMR2REUVVGblF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xbEJSWEJJTEdOQlFXTXNRMEZCUXl4VFFVRlRMRWRCUVVjc2QwTkJRWGRETEVOQlFVTTdXVUZEY0VVc1owSkJRV2RDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFpRVU0xUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJSVEZETEUxQlFVMHNWMEZCVnl4SFFVRkhMRXRCUVhWQ0xFTkJRVU03V1VGRE5VTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1EwRkJRU3hOUVVGQkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFOUJRVThzTUVOQlFVVXNTMEZCU3l4RlFVRkRMRU5CUVVNN1owSkJReTlFTEUxQlFVRXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNUMEZCVHl3d1EwRkJSU3hMUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVVjRSQ3hOUVVGTkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFsQlF6VkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4WFFVRlhMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRiRVlzU1VGQlNTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMmRDUVVOeVFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJiMElzUlVGQlJTeGpRVUUyUWl4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8yZENRVU4wUml4TlFVRk5MRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dGhRVU40UWp0WlFVVkVMRTFCUVUwc2FVSkJRV2xDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFpRVU0zUXl4alFVRmpMRU5CUVVNc1YwRkJWeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1dVRkRPVU1zYVVKQlFXbENMRU5CUVVNc1UwRkJVeXhIUVVGSExIZENRVUYzUWl4RFFVRkRPMWxCUlhaRUxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1dVRkRka0lzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4VFFVRlRMRWRCUVVjc1UwRkJVeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NUMEZCVHl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03V1VGRmRFWXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8xbEJRM0JDTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZGT1VJc1NVRkJTU3hKUVVGSkxFTkJRVU1zV1VGQldTeExRVUZMTEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVN1owSkJRM3BETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTndSU3hKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03WjBKQlEyeEVMRTlCUVU4N1lVRkRVanRaUVVWRUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMmRDUVVOMFFpeE5RVUZOTEhOQ1FVRnpRaXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8yZENRVU55Unl4TlFVRk5MR2xDUVVGcFFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dG5Ra0ZEYWtZc2FVSkJRV2xDTEVOQlFVTXNVMEZCVXl4SFFVRkhMSFZDUVVGMVFpeERRVUZETzJkQ1FVTjBSQ3h6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXp0blFrRkRkRVFzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTTVReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZWQlFUQkNMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0aFFVTXZSVHM3UzBGRFJqdEpRVVZFTEhGRFFVRnhRenRKUVVOMlFpeFpRVUZaT3p0WlFVTjRRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRM2hFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1NVRkJTU3hKUVVGSkxFTkJRVU1zV1VGQldUdHZRa0ZEZEVNc1RVRkJUVHRuUWtGRlVpeE5RVUZOTEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRoUVVONFFqdFJRVU5JTEVOQlFVTTdTMEZCUVR0SlFVVkVPenM3TzA5QlNVYzdTVUZEU3l4VFFVRlRMRU5CUVVNc1QwRkJkVUlzUlVGQlJTeERRVUZUTzFGQlEyeEVMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFJRVU5vUWl4UFFVRlBMRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU40UWl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRWeXhWUVVGVkxFTkJRVU1zVDBGQmIwSXNSVUZCUlN4VFFVRnpRaXhGUVVGRkxFbEJRVms3TzFsQlEycEdMRTFCUVUwc1dVRkJXU3hIUVVGdFFpeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1JVRkJSU3gxUWtGQmRVSXNRMEZCUXl4RFFVRkRPMWxCUlhwRkxGTkJRVk1zUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xbEJSV3hETEVsQlFVa3NVMEZCVXl4SFFVRkhMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU03V1VGRE5VSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJSV2hFTEZsQlFWa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVrSXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFpRVVU1UWl4TlFVRk5MRkZCUVZFc1IwRkJSeXhYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTm9ReXhUUVVGVExFVkJRVVVzUTBGQlF6dG5Ra0ZEV2l4SlFVRkpMRk5CUVZNc1MwRkJTeXhEUVVGRExFVkJRVVU3YjBKQlEyNUNMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dHZRa0ZEZUVJc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzI5Q1FVVjBRaXhUUVVGVExFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenR2UWtGRGNrTXNVMEZCVXl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdhVUpCUTNCRE8xbEJRMGdzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTFnc1EwRkJRenRMUVVGQk8wbEJSVVE3T3pzN1QwRkpSenRKUVVOTExHMUNRVUZ0UWl4RFFVRkRMRk5CUVdsQ08xRkJRek5ETEUxQlFVMHNSMEZCUnl4SFFVRkhMRkZCUVZFc1EwRkJReXhsUVVGbExFTkJRVU1zTkVKQlFUUkNMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRE1VVXNUVUZCVFN4TlFVRk5MRWRCUVVjc1VVRkJVU3hEUVVGRExHVkJRV1VzUTBGQlF5dzBRa0ZCTkVJc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU5vUml4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka01zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzWkRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMFF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hQUVVGUExFVkJRVVVzZDBKQlFYZENMRk5CUVZNc05FSkJRVFJDTEVOQlFVTXNRMEZCUXp0UlFVTndSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUlc1Q0xFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNRMEZCUXp0SlFVVkVMSFZFUVVGMVJEdEpRVU12UXl4blFrRkJaMEk3VVVGRGRFSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFJRVU53UlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEhWQ1FVRjFRaXhEUVVGRE8xRkJRelZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlJXNURMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTzFsQlEzQkNMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVkQlFVY3NkMEpCUVhkQ0xFTkJRVU03V1VGRE4wTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSTdaMEpCUTNoQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXp0VFFVTjJRanRKUVVOSUxFTkJRVU03U1VGRlJDd3dRa0ZCTUVJN1NVRkRiRUlzWTBGQll6dFJRVU53UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVUwc1EwRkJReXhEUVVGRE8xRkJRekZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03VVVGRGRFSXNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8xRkJRMnhDTEVsQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRSUVVOMFFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1NVRkRaaXhEUVVGRE8wbEJSVVFzT0VKQlFUaENPMGxCUTNSQ0xGVkJRVlU3VVVGRGFFSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJSU3hoUVVGaExFVkJRVVVzVDBGQlR5eEZRVUZGTEdkRVFVRm5SQ3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVVY0Unl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RlFVRkZMSFZDUVVGMVFpeERRVUZETEVOQlFVTTdVVUZEZWtRc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVVYyUkN4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RlFVRkZMRFJDUVVFMFFpeERRVUZETEVOQlFVTTdVVUZGTlVRc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUXpORUxFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkZja01zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM1pDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU16UWl4RFFVRkRPMGxCUlVRc09FSkJRVGhDTzBsQlEzUkNMR05CUVdNN1VVRkRjRUlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRUlzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkZNVUlzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRSUVVOd1JTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExIZENRVUYzUWl4RFFVRkRPMUZCUXpkRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dEpRVU5xUkN4RFFVRkRPMGxCUlVRc09FSkJRVGhDTzBsQlEzUkNMRlZCUVZVN1VVRkRhRUlzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXp0UlFVTXhReXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdTVUZEZEVJc1EwRkJRenRKUVVWRUxIbENRVUY1UWp0SlFVTjZRaXhaUVVGWk8xRkJRMVlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRla0lzVlVGQlZTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkRiRU1zUTBGQlF6dEpRVVZFT3pzN096czdUMEZOUnp0SlFVTklMRWxCUVVrc1EwRkJReXhKUVVGWkxFVkJRVVVzU1VGQmVVSXNSVUZCUlN4UFFVRm5SRHRSUVVNMVJpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVYzdXVUZETDBJc1NVRkJTU3hGUVVGRkxFbEJRVWs3V1VGRFZpeEpRVUZKTEVWQlFVVXNTVUZCU1R0WlFVTldMRTlCUVU4c1JVRkJSU3hQUVVGUE8xTkJRMnBDTEVOQlFVTTdVVUZEUml4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDdzJRa0ZCTmtJN1NVRkRka0lzUzBGQlN6czdXVUZEVkN4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03V1VGRGFrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUlRsQ0xFbEJRVWtzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkRja0lzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeFBRVUZQTzJGQlExSTdXVUZGUkN4SlFVRkpMRWxCUVVrc1EwRkJReXh0UWtGQmJVSTdaMEpCUXpGQ0xFMUJRVTBzU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMUZCUXpOQ0xFTkJRVU03UzBGQlFUczdRVUYwVmswc2QwSkJRV0VzUjBGQmMwSXNTVUZCU1N4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJQ29nWVhNZ1JFY2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMlJuSnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCbmNtOXJJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzluY205ckp6dGNibHh1YVcxd2IzSjBJSHRrWld4aGVYMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkR1Z6ZENjN1hHNWNibHh1THlvcUlGUjVjR1VnWm05eUlIdEFiR2x1YXlCRVpXMXZVMk55YVhCMGZTQnpkR1Z3SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JUZEdWd0lEMGdlMXh1SUNCdVlXMWxPaUJ6ZEhKcGJtYzdYRzRnSUdaMWJtTTZJQ2dwSUQwK0lGQnliMjFwYzJVOGRtOXBaRDQ3WEc1Y2JpQWdMeW9xSUZOMFpYQWdiM0IwYVc5dWN6b2daR1Z6WTNKcGNIUnBiMjRnWVc1a0lHUmxiR0Y1SUNocGJpQnRjeWtnWVdaMFpYSWdablZ1WTNScGIyNGdaVzVrY3lBcUwxeHVJQ0J2Y0hScGIyNXpQem9nZTF4dUlDQWdJR1JsYzJOeWFYQjBhVzl1UHpvZ2MzUnlhVzVuTzF4dUlDQWdJR1JsYkdGNVB6b2diblZ0WW1WeU8xeHVJQ0I5WEc1OU8xeHVYRzR2S2lvZ1JHVnRieUJ6WTNKcGNIUWdZMnhoYzNNdUlFTnZkV3hrSUdKbElIVnpaV1FnWm05eUlHTnlaV0YwYVc1bklHUmxiVzhnYzJOeWFYQjBjeUIwYnlCemFHOTNJSFJvWlNCd2JHRjBabTl5YlNCallYQmhZbWxzYVhScFpYTWdLaTljYm1WNGNHOXlkQ0JqYkdGemN5QkVaVzF2VTJOeWFYQjBJSHRjYmlBZ2JtRnRaVG9nYzNSeWFXNW5JRDBnSnljN1hHNGdJR1JsYzJOeWFYQjBhVzl1T2lCemRISnBibWNnUFNBbkp6dGNibHh1SUNCemRHRjBhV01nWTNWeWNtVnVkRTlpYW1WamREb2dSR1Z0YjFOamNtbHdkQ0I4SUc1MWJHd2dQU0J1ZFd4c08xeHVYRzRnSUhCeWFYWmhkR1VnWDJselFYVjBiMjFoZEdsak9pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNGdJSEJ5YVhaaGRHVWdYMkYxZEc5VGRHRnlkRVpwY25OMFUzUmxjRG9nWW05dmJHVmhiaUE5SUdaaGJITmxPMXh1SUNCd2NtbDJZWFJsSUY5amRYSnlaVzUwVTNSbGNEb2diblZ0WW1WeUlEMGdNRHRjYmlBZ2NISnBkbUYwWlNCZmFYTlRkRzl3Y0dWa09pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNGdJSEJ5YVhaaGRHVWdYMmx6UTJGdVkyVnNiR1ZrT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlU3WEc0Z0lIQnlhWFpoZEdVZ1gybHpVM1JsY0ZCeWIyTmxjM05sWkRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dVhHNGdJSEJ5YVhaaGRHVWdYM0p2YjNRNklFaFVUVXhFYVhaRmJHVnRaVzUwSUQwZ2RXa3VaR2wyS0Z0ZExDQjdhV1E2SUNka1pXMXZMWE5qY21sd2RDY3NYRzRnSUNBZ1kyeGhjM05sY3pvZ0ozUjFkRzl5YVdGc2N5MXliMjkwSUhSMWRHOXlhV0ZzY3kxMGNtRmpheUJrWlcxdkxXRndjQzF6WTNKcGNIUW5mU2s3WEc1Y2JpQWdjSEpwZG1GMFpTQmZjM1JsY0hNNklGTjBaWEJiWFNBOUlGdGRPMXh1WEc0Z0lIQnlhWFpoZEdVZ1gyMWhhVzVJWldGa1pYSTZJRWhVVFV4RWFYWkZiR1Z0Wlc1MElEMGdkV2t1Y0dGdVpXd29XMTBzSUNkMGRYUnZjbWxoYkhNdGJXRnBiaTFvWldGa1pYSW5LVHRjYmlBZ2NISnBkbUYwWlNCZmFHVmhaR1Z5T2lCSVZFMU1TR1ZoWkdsdVowVnNaVzFsYm5RZ1BTQjFhUzVvTWlnbkp5azdYRzRnSUhCeWFYWmhkR1VnWDJobFlXUmxja1JwZGpvZ1NGUk5URVJwZGtWc1pXMWxiblFnUFNCMWFTNWthWFpJS0Z0ZExDQW5kSFYwYjNKcFlXeHpMWEp2YjNRdGFHVmhaR1Z5SnlrN1hHNGdJSEJ5YVhaaGRHVWdYM04wYjNCVGRHRnlkRUowYmpvZ1NGUk5URUoxZEhSdmJrVnNaVzFsYm5RZ1BTQjFhUzVpZFhSMGIyNG9kV2t1YVdOdmJrWkJLQ2R3WVhWelpTY3BMRnh1SUNBZ0lDZ3BJRDArSUhSb2FYTXVYMk5vWVc1blpWTjBiM0JUZEdGMFpTZ3BMQ0FuVUd4aGVTQXZJSEJoZFhObEp5azdYRzRnSUhCeWFYWmhkR1VnWDNKbGMzUmhjblJDZEc0NklFaFVUVXhDZFhSMGIyNUZiR1Z0Wlc1MElEMGdkV2t1WW5WMGRHOXVLSFZwTG1samIyNUdRU2duY21Wa2J5Y3BMQ0FvS1NBOVBpQjBhR2x6TGw5eVpYTjBZWEowVTJOeWFYQjBLQ2tzSUNkU1pYTjBZWEowSnlrN1hHNGdJSEJ5YVhaaGRHVWdYMjVsZUhSVGRHVndRblJ1T2lCSVZFMU1RblYwZEc5dVJXeGxiV1Z1ZENBOUlIVnBMbUoxZEhSdmJpaDFhUzVwWTI5dVJrRW9KM0JzWVhrbktTd2dLQ2tnUFQ0Z2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1ZmFYTlRkR1Z3VUhKdlkyVnpjMlZrS1Z4dUlDQWdJQ0FnZEdocGN5NWZibVY0ZEZOMFpYQW9LVHRjYmlBZ2ZTd2dKMDVsZUhRZ2MzUmxjQ2NwTzF4dVhHNGdJSEJ5YVhaaGRHVWdYMkZqZEdsMmFYUjVPaUJJVkUxTVJHbDJSV3hsYldWdWRDQTlJSFZwTG5CaGJtVnNLRnRkTENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0WkdWelkzSnBjSFJwYjI0bktUdGNibHh1SUNCd2NtbDJZWFJsSUY5d2NtOW5jbVZ6YzBScGRqb2dTRlJOVEVScGRrVnNaVzFsYm5RZ1BTQjFhUzVrYVhaV0tGdGRMQ0FuZEhWMGIzSnBZV3h6TFhKdmIzUXRjSEp2WjNKbGMzTW5LVHRjYmlBZ2NISnBkbUYwWlNCZmNISnZaM0psYzNNNklFaFVUVXhRY205bmNtVnpjMFZzWlcxbGJuUWdQU0IxYVM1bGJHVnRaVzUwS0Nkd2NtOW5jbVZ6Y3ljcE8xeHVJQ0J3Y21sMllYUmxJRjl3Y205bmNtVnpjMU4wWlhCek9pQklWRTFNUkdsMlJXeGxiV1Z1ZENBOUlIVnBMbVJwZGxSbGVIUW9KeWNwTzF4dVhHNGdJSEJ5YVhaaGRHVWdYMjV2WkdVL09pQkVSeTVFYjJOclRtOWtaVHRjYmlBZ2NISnBkbUYwWlNCZlkyeHZjMlZDZEc0NklFaFVUVXhDZFhSMGIyNUZiR1Z0Wlc1MElEMGdkV2t1WW5WMGRHOXVLSFZwTG1samIyNUdRU2duWTJobGRuSnZiaTFzWldaMEp5a3NJQ2dwSUQwK0lIUm9hWE11WDJOc2IzTmxSRzlqYXlncExDQW5RbUZqYXlCMGJ5QmtaVzF2SnlrN1hHNWNibHh1SUNCamIyNXpkSEoxWTNSdmNpaHVZVzFsT2lCemRISnBibWNzSUdSbGMyTnlhWEIwYVc5dU9pQnpkSEpwYm1jc0lHbHpRWFYwYjIxaGRHbGpPaUJpYjI5c1pXRnVJRDBnWm1Gc2MyVXNYRzRnSUNBZ2IzQjBhVzl1Y3o4NklIdGhkWFJ2VTNSaGNuUkdhWEp6ZEZOMFpYQS9PaUJpYjI5c1pXRnVmU2tnZTF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2RHaHBjeTVrWlhOamNtbHdkR2x2YmlBOUlHUmxjMk55YVhCMGFXOXVPMXh1SUNBZ0lIUm9hWE11WDJselFYVjBiMjFoZEdsaklEMGdhWE5CZFhSdmJXRjBhV003WEc0Z0lDQWdkR2hwY3k1ZllYVjBiMU4wWVhKMFJtbHljM1JUZEdWd0lEMGdiM0IwYVc5dWN6OHVZWFYwYjFOMFlYSjBSbWx5YzNSVGRHVndJRDgvSUdaaGJITmxPMXh1WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWJXRjRJRDBnTUR0Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlNBOUlERTdYRzVjYmlBZ0lDQkVaVzF2VTJOeWFYQjBMbU4xY25KbGJuUlBZbXBsWTNRZ1BTQjBhR2x6TzF4dUlDQjlYRzVjYmlBZ0x5b3FJRkpsZEhWeWJuTWdaR1Z0YnlCelkzSnBjSFFnYzNSbGNITWdLaTljYmlBZ1oyVjBJSE4wWlhCektDazZJRk4wWlhCYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM04wWlhCek8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUZKbGRIVnlibk1nZEdobElHRnRiM1Z1ZENCdlppQmtaVzF2SUhOamNtbHdkQ0J6ZEdWd2N5QXFMMXh1SUNCblpYUWdjM1JsY0U1MWJXSmxjaWdwT2lCdWRXMWlaWElnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5emRHVndjeTVzWlc1bmRHZzdYRzRnSUgxY2JseHVYRzRnSUM4cUtpQkJaR1J6SUhOamNtbHdkQ0JvWldGa1pYSWdLaTljYmlBZ2NISnBkbUYwWlNCZllXUmtTR1ZoWkdWeUtDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYMk55WldGMFpVaGxZV1JsY2tScGRpZ3BPMXh1SUNBZ0lIUm9hWE11WDJOeVpXRjBaVkJ5YjJkeVpYTnpSR2wyS0NrN1hHNGdJQ0FnZEdocGN5NWZiV0ZwYmtobFlXUmxjaTVoY0hCbGJtUW9kR2hwY3k1ZmFHVmhaR1Z5UkdsMkxDQjBhR2x6TGw5d2NtOW5jbVZ6YzBScGRpazdYRzRnSUgxY2JseHVJQ0F2S2lvZ1EzSmxZWFJsY3lCelkzSnBjSFFnYUdWaFpHVnlJR1JwZGlBcUwxeHVJQ0J3Y21sMllYUmxJRjlqY21WaGRHVklaV0ZrWlhKRWFYWW9LVG9nZG05cFpDQjdYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlMbWx1Ym1WeVZHVjRkQ0E5SUhSb2FYTXVibUZ0WlR0Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWXVZWEJ3Wlc1a0tIUm9hWE11WDJOc2IzTmxRblJ1S1R0Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWXVZWEJ3Wlc1a0tIUm9hWE11WDJobFlXUmxjaWs3WEc1Y2JpQWdJQ0FvZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1Wm1seWMzUkRhR2xzWkNCaGN5QklWRTFNUld4bGJXVnVkQ2t1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZWE1nWm1FdGNHeGhlU2M3WEc1Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWXVZWEJ3Wlc1a0tIUm9hWE11WDJselFYVjBiMjFoZEdsaklEOGdkR2hwY3k1ZmMzUnZjRk4wWVhKMFFuUnVJRG9nZEdocGN5NWZibVY0ZEZOMFpYQkNkRzRwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRU55WldGMFpYTWdjMk55YVhCMElIQnliMmR5WlhOeklHUnBkaUFxTDF4dUlDQndjbWwyWVhSbElGOWpjbVZoZEdWUWNtOW5jbVZ6YzBScGRpZ3BPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjeTV0WVhnZ1BTQjBhR2x6TG5OMFpYQk9kVzFpWlhJN1hHNGdJQ0FnZEdocGN5NWZjSEp2WjNKbGMzTkVhWFl1WVhCd1pXNWtLSFJvYVhNdVgzQnliMmR5WlhOektUdGNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjMU4wWlhCeklEMGdkV2t1WkdsMlZHVjRkQ2hnVTNSbGNEb2dKSHQwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlgwZ2IyWWdKSHQwYUdsekxuTjBaWEJPZFcxaVpYSjlZQ2s3WEc1Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemMwUnBkaTVoY0hCbGJtUW9kR2hwY3k1ZmNISnZaM0psYzNOVGRHVndjeWs3WEc0Z0lIMWNibHh1SUNBdktpb2dRV1JrY3lCa1pYTmpjbWx3ZEdsdmJpQnZaaUIwYUdVZ2MyTnlhWEIwSUNvdlhHNGdJSEJ5YVhaaGRHVWdYMkZrWkVSbGMyTnlhWEIwYVc5dUtDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYMkZqZEdsMmFYUjVMbUZ3Y0dWdVpDaDFhUzVrYVhZb2RHaHBjeTVrWlhOamNtbHdkR2x2Yml3Z0ozUjFkRzl5YVdGc2N5MXliMjkwTFdSbGMyTnlhWEIwYVc5dUp5a3BPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwYUdsekxuTjBaWEJPZFcxaVpYSTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2JHVjBJR2x1YzNSeWRXTjBhVzl1U1c1a2FXTmhkRzl5SUQwZ2RXa3VhV052YmtaQktDZGpiRzlqYXljcE8xeHVJQ0FnSUNBZ2FXWWdLQ0YwYUdsekxsOXBjMEYxZEc5dFlYUnBZeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9hU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdsdWMzUnlkV04wYVc5dVNXNWthV05oZEc5eUlEMGdkV2t1YVdOdmJrWkJLQ2R3YkdGNUp5d2dLQ2tnUFQ0Z2RHaHBjeTVmYm1WNGRGTjBaWEFvS1N3Z0owNWxlSFFnYzNSbGNDY3BPMXh1SUNBZ0lDQWdJQ0FnSUdsdWMzUnlkV04wYVc5dVNXNWthV05oZEc5eUxtTnNZWE56VG1GdFpTQTlJQ2RuY205ckxXbGpiMjRnWm1GeklHWmhMWEJzWVhrbk8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiMjV6ZENCcGJuTjBjblZqZEdsdmJrUnBkaUE5SUhWcExtUnBkaWgwYUdsekxsOXpkR1Z3YzF0cFhTNXVZVzFsTENBblozSnZheTEwZFhSdmNtbGhiQzFsYm5SeWVTMXBibk4wY25WamRHbHZiaWNwTzF4dUlDQWdJQ0FnWTI5dWMzUWdZM1Z5Y21WdWRGTjBaWEJFWlhOamNtbHdkR2x2YmlBOUlIVnBMbVJwZGloMGFHbHpMbDl6ZEdWd2MxdHBYUzV2Y0hScGIyNXpQeTVrWlhOamNtbHdkR2x2Yml4Y2JpQWdJQ0FnSUNBZ0oyZHliMnN0ZEhWMGIzSnBZV3d0YzNSbGNDMWtaWE5qY21sd2RHbHZiaUJvYVdSa1pXNG5LVHRjYmlBZ0lDQWdJR052Ym5OMElHVnVkSEo1SUQwZ2RXa3VaR2wyU0NoYlhHNGdJQ0FnSUNBZ0lHbHVjM1J5ZFdOMGFXOXVTVzVrYVdOaGRHOXlMRnh1SUNBZ0lDQWdJQ0JwYm5OMGNuVmpkR2x2YmtScGRpeGNiaUFnSUNBZ0lGMHNJQ2RuY205ckxYUjFkRzl5YVdGc0xXVnVkSEo1SnlrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WDJGamRHbDJhWFI1TG1Gd2NHVnVaQ2hsYm5SeWVTd2dZM1Z5Y21WdWRGTjBaWEJFWlhOamNtbHdkR2x2YmlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FJRWx1YVhScFlXeHBlbVZ6SUhSb1pTQnliMjkwSUc5bUlIUm9aU0JrWlcxdklITmpjbWx3ZENBcUwxeHVJQ0J3Y21sMllYUmxJRjlwYm1sMFVtOXZkQ2dwT2lCMmIybGtJSHRjYmlBZ0lDQm5jbTlyTG5Ob1pXeHNMbmRwYm1SdmQzTXVjMmh2ZDBOdmJuUmxlSFJRWVc1bGJDQTlJSFJ5ZFdVN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1M2FXNWtiM2R6TG5Ob2IzZElaV3h3SUQwZ1ptRnNjMlU3WEc1Y2JpQWdJQ0JqYjI1emRDQnpZM0pwY0hSRWIyTnJUbTlrWlNBOUlFRnljbUY1TG1aeWIyMG9aM0p2YXk1emFHVnNiQzVrYjJOclRXRnVZV2RsY2k1eWIyOTBUbTlrWlM1amFHbHNaSEpsYmlsYk1GMDdYRzVjYmlBZ0lDQjBhR2x6TGw5dWIyUmxJRDBnWjNKdmF5NXphR1ZzYkM1a2IyTnJUV0Z1WVdkbGNpNWtiMk5yS0hSb2FYTXVYM0p2YjNRc0lFUkhMa1JQUTB0ZlZGbFFSUzVHU1V4TUxDQnpZM0pwY0hSRWIyTnJUbTlrWlN3Z0p5Y3BPMXh1WEc0Z0lDQWdhV1lnS0hOamNtbHdkRVJ2WTJ0T2IyUmxMbkJoY21WdWRDNWpiMjUwWVdsdVpYSXVZMjl1ZEdGcGJtVnlSV3hsYldWdWRDNW1hWEp6ZEVWc1pXMWxiblJEYUdsc1pEOHViR0Z6ZEVWc1pXMWxiblJEYUdsc1pEOHVYRzRnSUNBZ0lDQmpiR0Z6YzB4cGMzUXVZMjl1ZEdGcGJuTW9KM1JoWWkxb1lXNWtiR1V0YkdsemRDMWpiMjUwWVdsdVpYSW5LU2xjYmlBZ0lDQWdJSE5qY21sd2RFUnZZMnRPYjJSbExuQmhjbVZ1ZEM1amIyNTBZV2x1WlhJdVkyOXVkR0ZwYm1WeVJXeGxiV1Z1ZEM1bWFYSnpkRVZzWlcxbGJuUkRhR2xzWkQ4dWJHRnpkRVZzWlcxbGJuUkRhR2xzWkM1eVpXMXZkbVVvS1R0Y2JseHVJQ0FnSUhSb2FYTXVYMjV2WkdVdVkyOXVkR0ZwYm1WeUxtTnZiblJoYVc1bGNrVnNaVzFsYm5RdVkyeGhjM05NYVhOMExtRmtaQ2duZEhWMGIzSnBZV3h6TFdSbGJXOHRjMk55YVhCMExXTnZiblJoYVc1bGNpY3BPMXh1WEc0Z0lDQWdkR2hwY3k1ZllXUmtTR1ZoWkdWeUtDazdYRzRnSUNBZ2RHaHBjeTVmY205dmRDNWhjSEJsYm1Rb2RHaHBjeTVmYldGcGJraGxZV1JsY2lrN1hHNWNiaUFnSUNCMGFHbHpMbDloWkdSRVpYTmpjbWx3ZEdsdmJpZ3BPMXh1SUNBZ0lIUm9hWE11WDNKdmIzUXVZWEJ3Wlc1a0tIUm9hWE11WDJGamRHbDJhWFI1S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJRY205alpYTnpaWE1nYm1WNGRDQnpkR1Z3SUNvdlhHNGdJSEJ5YVhaaGRHVWdZWE41Ym1NZ1gyNWxlSFJUZEdWd0tDazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0FnSUhSb2FYTXVYMmx6VTNSbGNGQnliMk5sYzNObFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TGw5cGMwRjFkRzl0WVhScFl5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmJtVjRkRk4wWlhCQ2RHNHVZMnhoYzNOTWFYTjBMbUZrWkNnblpHbHpZV0pzWldRbktUdGNiaUFnSUNBZ0lDaDBhR2x6TGw5dVpYaDBVM1JsY0VKMGJpNW1hWEp6ZEVOb2FXeGtJR0Z6SUVoVVRVeEZiR1Z0Wlc1MEtTNWpiR0Z6YzB4cGMzUXVZV1JrS0NkbVlTMWthWE5oWW14bFpDY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHTnZibk4wSUdWdWRISjVJRDBnZEdocGN5NWZZV04wYVhacGRIa3VaMlYwUld4bGJXVnVkSE5DZVVOc1lYTnpUbUZ0WlNnblozSnZheTEwZFhSdmNtbGhiQzFsYm5SeWVTY3BXM1JvYVhNdVgyTjFjbkpsYm5SVGRHVndYVHRjYmlBZ0lDQmpiMjV6ZENCbGJuUnllVWx1WkdsallYUnZjaUE5SUhSb2FYTXVYMkZqZEdsMmFYUjVMbWRsZEVWc1pXMWxiblJ6UW5sRGJHRnpjMDVoYldVb0oyZHliMnN0YVdOdmJpY3BXM1JvYVhNdVgyTjFjbkpsYm5SVGRHVndYVHRjYmlBZ0lDQmpiMjV6ZENCbGJuUnllVWx1YzNSeWRXTjBhVzl1SUQwZ2RHaHBjeTVmWVdOMGFYWnBkSGt1WjJWMFJXeGxiV1Z1ZEhOQ2VVTnNZWE56VG1GdFpTZ25aM0p2YXkxMGRYUnZjbWxoYkMxemRHVndMV1JsYzJOeWFYQjBhVzl1SnlsYmRHaHBjeTVmWTNWeWNtVnVkRk4wWlhCZE8xeHVYRzRnSUNBZ1pXNTBjbmxKYm1ScFkyRjBiM0l1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZWElnWm1FdGMzQnBibTVsY2kxMGFHbHlaQ0JtWVMxemNHbHVKenRjYmlBZ0lDQmxiblJ5ZVVsdWMzUnlkV04wYVc5dUxtTnNZWE56VEdsemRDNXlaVzF2ZG1Vb0oyaHBaR1JsYmljcE8xeHVJQ0FnSUdWdWRISjVTVzV6ZEhKMVkzUnBiMjR1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25kbWx6YVdKc1pTY3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ1kzVnljbVZ1ZEZOMFpYQWdQU0JsYm5SeWVTQmhjeUJJVkUxTVJHbDJSV3hsYldWdWREdGNiaUFnSUNCamIyNXpkQ0J6ZEdWd1JHVnNZWGtnUFNCMGFHbHpMbDl6ZEdWd2MxdDBhR2x6TGw5amRYSnlaVzUwVTNSbGNGMHViM0IwYVc5dWN6OHVaR1ZzWVhrZ1AxeHVJQ0FnSUNBZ2RHaHBjeTVmYzNSbGNITmJkR2hwY3k1ZlkzVnljbVZ1ZEZOMFpYQmRMbTl3ZEdsdmJuTS9MbVJsYkdGNUlTQTZJREl3TURBN1hHNWNiaUFnSUNCaGQyRnBkQ0IwYUdsekxsOXpkR1Z3YzF0MGFHbHpMbDlqZFhKeVpXNTBVM1JsY0YwdVpuVnVZeWdwTzF4dUlDQWdJSFJvYVhNdVgzTmpjbTlzYkZSdktIUm9hWE11WDNKdmIzUXNJR04xY25KbGJuUlRkR1Z3TG05bVpuTmxkRlJ2Y0NBdElIUm9hWE11WDIxaGFXNUlaV0ZrWlhJdWIyWm1jMlYwU0dWcFoyaDBLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NWZhWE5CZFhSdmJXRjBhV01wSUh0Y2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdVgyTnZkVzUwWkc5M2JpaGxiblJ5ZVNCaGN5QklWRTFNUld4bGJXVnVkQ3dnWlc1MGNubEpibVJwWTJGMGIzSWdZWE1nU0ZSTlRFVnNaVzFsYm5Rc0lITjBaWEJFWld4aGVTazdYRzRnSUNBZ0lDQmhkMkZwZENCa1pXeGhlU2h6ZEdWd1JHVnNZWGtwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHNWxkMFZ1ZEhKNVNXNWthV05oZEc5eUlEMGdkV2t1YVdOdmJrWkJLQ2RqYUdWamF5Y3BPMXh1SUNBZ0lHVnVkSEo1U1c1a2FXTmhkRzl5TG5KbGNHeGhZMlZYYVhSb0tHNWxkMFZ1ZEhKNVNXNWthV05oZEc5eUtUdGNiaUFnSUNCdVpYZEZiblJ5ZVVsdVpHbGpZWFJ2Y2k1amJHRnpjMDVoYldVZ1BTQW5aM0p2YXkxcFkyOXVJR1poY2lCbVlTMWphR1ZqYXljN1hHNWNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjeTUyWVd4MVpTc3JPMXh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56VTNSbGNITXVhVzV1WlhKVVpYaDBJRDBnWUZOMFpYQTZJQ1I3ZEdocGN5NWZjSEp2WjNKbGMzTXVkbUZzZFdWOUlHOW1JQ1I3ZEdocGN5NXpkR1Z3VG5WdFltVnlmV0E3WEc1Y2JpQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFUzUmxjQ3NyTzF4dUlDQWdJSFJvYVhNdVgybHpVM1JsY0ZCeWIyTmxjM05sWkNBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11WDJOMWNuSmxiblJUZEdWd0lEMDlQU0IwYUdsekxuTjBaWEJPZFcxaVpYSXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVgybHpRWFYwYjIxaGRHbGpJRDhnZEdocGN5NWZjM1J2Y0ZOMFlYSjBRblJ1TG5KbGNHeGhZMlZYYVhSb0tIUm9hWE11WDNKbGMzUmhjblJDZEc0cElEcGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmJtVjRkRk4wWlhCQ2RHNHVjbVZ3YkdGalpWZHBkR2dvZEdocGN5NWZjbVZ6ZEdGeWRFSjBiaWs3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLQ0YwYUdsekxsOXBjMEYxZEc5dFlYUnBZeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdibVY0ZEZOMFpYQkZiblJ5ZVVsdVpHbGpZWFJ2Y2lBOUlIUm9hWE11WDJGamRHbDJhWFI1TG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVW9KMmR5YjJzdGFXTnZiaWNwVzNSb2FYTXVYMk4xY25KbGJuUlRkR1Z3WFR0Y2JpQWdJQ0FnSUdOdmJuTjBJSE4wWVhKMFRtVjRkRk4wWlhCSlkyOXVJRDBnZFdrdWFXTnZia1pCS0Nkd2JHRjVKeXdnS0NrZ1BUNGdkR2hwY3k1ZmJtVjRkRk4wWlhBb0tTd2dKMDVsZUhRZ2MzUmxjQ2NwTzF4dUlDQWdJQ0FnYzNSaGNuUk9aWGgwVTNSbGNFbGpiMjR1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZWE1nWm1FdGNHeGhlU2M3WEc0Z0lDQWdJQ0J1WlhoMFUzUmxjRVZ1ZEhKNVNXNWthV05oZEc5eUxuSmxjR3hoWTJWWGFYUm9LSE4wWVhKMFRtVjRkRk4wWlhCSlkyOXVLVHRjYmlBZ0lDQWdJSFJvYVhNdVgyNWxlSFJUZEdWd1FuUnVMbU5zWVhOelRHbHpkQzV5WlcxdmRtVW9KMlJwYzJGaWJHVmtKeWs3WEc0Z0lDQWdJQ0FvZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1Wm1seWMzUkRhR2xzWkNCaGN5QklWRTFNUld4bGJXVnVkQ2t1WTJ4aGMzTk1hWE4wTG5KbGJXOTJaU2duWm1FdFpHbHpZV0pzWldRbktUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaW9nVTNSaGNuUnpJSFJvWlNCa1pXMXZJSE5qY21sd2RDQmhZM1JwYjI1eklDb3ZYRzRnSUhCeWFYWmhkR1VnWVhONWJtTWdYM04wWVhKMFUyTnlhWEIwS0NrNklGQnliMjFwYzJVOGRtOXBaRDRnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCMGFHbHpMbDlqZFhKeVpXNTBVM1JsY0RzZ2FTQThJSFJvYVhNdWMzUmxjRTUxYldKbGNqc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1ZmFYTlRkRzl3Y0dWa0lIeDhJSFJvYVhNdVgybHpRMkZ1WTJWc2JHVmtLVnh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNibHh1SUNBZ0lDQWdZWGRoYVhRZ2RHaHBjeTVmYm1WNGRGTjBaWEFvS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1UyTnliMnhzY3lCMGJ5QjBhR1VnWTNWeWNtVnVkQ0J6ZEdWd1hHNGdJQ0FxSUVCd1lYSmhiU0JsYkdWdFpXNTBJQzBnUTNWeWNtVnVkQ0J6ZEdWd0lHVnNaVzFsYm5RZ2FXNGdjbTl2ZEZ4dUlDQWdLaUJBY0dGeVlXMGdlU0F0SUhrZ1kyOXZjbVJwYm1GMFpTQnZaaUIwYUdVZ1pXeGxiV1Z1ZEZ4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCZmMyTnliMnhzVkc4b1pXeGxiV1Z1ZERvZ1NGUk5URVJwZGtWc1pXMWxiblFzSUhrNklHNTFiV0psY2lrNklIWnZhV1FnZTF4dUlDQWdJR1ZzWlcxbGJuUXVabTlqZFhNb0tUdGNiaUFnSUNCbGJHVnRaVzUwTG5OamNtOXNiRlJ2Y0NBOUlIazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUVdSa2N5QmhiaUJwYm5SbGNtRmpkR2wyWlNCa1pXeGhlU0JwYm1ScFkyRjBiM0pjYmlBZ0lDb2dRSEJoY21GdElHVnNaVzFsYm5RZ0xTQkRkWEp5Wlc1MElITjBaWEFnWld4bGJXVnVkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2FXNWthV05oZEc5eUlDMGdRM1Z5Y21WdWRDQnpkR1Z3SUdsdVpHbGpZWFJ2Y2x4dUlDQWdLaUJBY0dGeVlXMGdkR2x0WlNBdElFbHVaR2xqWVhSdmNpQmhibWx0WVhScGIyNGdkR2x0WlZ4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCaGMzbHVZeUJmWTI5MWJuUmtiM2R1S0dWc1pXMWxiblE2SUVoVVRVeEZiR1Z0Wlc1MExDQnBibVJwWTJGMGIzSTZJRWhVVFV4RmJHVnRaVzUwTENCMGFXMWxPaUJ1ZFcxaVpYSXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnSUNCamIyNXpkQ0JqYjNWdWRHUnZkMjVFYVhZNklFaFVUVXhFYVhaRmJHVnRaVzUwSUQwZ2RXa3VaR2wyS0Z0ZExDQW5aR1Z0YnkxelkzSnBjSFF0WTI5MWJuUmtiM2R1SnlrN1hHNWNiaUFnSUNCcGJtUnBZMkYwYjNJdVkyeGhjM05NYVhOMExtRmtaQ2duYUdsa1pHVnVKeWs3WEc1Y2JpQWdJQ0JzWlhRZ1kyOTFiblJrYjNkdUlEMGdkR2x0WlNBdklERXdNREE3WEc0Z0lDQWdZMjl1YzNRZ2MzWm5JRDBnZEdocGN5NWZZM0psWVhSbFUxWkhTVzVrYVdOaGRHOXlLR052ZFc1MFpHOTNiaWs3WEc1Y2JpQWdJQ0JqYjNWdWRHUnZkMjVFYVhZdVlYQndaVzVrS0hOMlp5azdYRzRnSUNBZ1pXeGxiV1Z1ZEM1d2NtVndaVzVrS0dOdmRXNTBaRzkzYmtScGRpazdYRzVjYmlBZ0lDQmpiMjV6ZENCcGJuUmxjblpoYkNBOUlITmxkRWx1ZEdWeWRtRnNLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lHTnZkVzUwWkc5M2JpMHRPMXh1SUNBZ0lDQWdhV1lnS0dOdmRXNTBaRzkzYmlBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNCamJHVmhja2x1ZEdWeWRtRnNLR2x1ZEdWeWRtRnNLVHRjYmlBZ0lDQWdJQ0FnWTI5MWJuUmtiM2R1UkdsMkxuSmxiVzkyWlNncE8xeHVYRzRnSUNBZ0lDQWdJR2x1WkdsallYUnZjaTVqYkdGemMweHBjM1F1Y21WdGIzWmxLQ2RvYVdSa1pXNG5LVHRjYmlBZ0lDQWdJQ0FnYVc1a2FXTmhkRzl5TG1Oc1lYTnpUR2x6ZEM1aFpHUW9KM1pwYzJsaWJHVW5LVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlMQ0F4TURBd0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEY21WaGRHVnpJRk5XUnlCM2FYUm9JR052ZFc1MFpHOTNiaUJqYVhKamJHVmNiaUFnSUNvZ1FIQmhjbUZ0SUdOdmRXNTBaRzkzYmlBdElHTnZkVzUwWkc5M2JpQjBhVzFsWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRk5XUnlCamIzVnVkR1J2ZDI0Z2FXNWthV05oZEc5eVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElGOWpjbVZoZEdWVFZrZEpibVJwWTJGMGIzSW9ZMjkxYm5Sa2IzZHVPaUJ1ZFcxaVpYSXBPaUJUVmtkVFZrZEZiR1Z0Wlc1MElIdGNiaUFnSUNCamIyNXpkQ0J6ZG1jZ1BTQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwVGxNb0oyaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabkp5d2dKM04yWnljcE8xeHVJQ0FnSUdOdmJuTjBJR05wY21Oc1pTQTlJR1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5ST1V5Z25hSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY25MQ0FuWTJseVkyeGxKeWs3WEc0Z0lDQWdZMmx5WTJ4bExuTmxkRUYwZEhKcFluVjBaVTVUS0c1MWJHd3NJQ2RqZUNjc0lDYzNKeWs3WEc0Z0lDQWdZMmx5WTJ4bExuTmxkRUYwZEhKcFluVjBaVTVUS0c1MWJHd3NJQ2RqZVNjc0lDYzNKeWs3WEc0Z0lDQWdZMmx5WTJ4bExuTmxkRUYwZEhKcFluVjBaVTVUS0c1MWJHd3NJQ2R5Snl3Z0p6WW5LVHRjYmlBZ0lDQmphWEpqYkdVdWMyVjBRWFIwY21saWRYUmxUbE1vYm5Wc2JDd2dKM04wZVd4bEp5d2dZR0Z1YVcxaGRHbHZiam9nWTI5MWJuUmtiM2R1SUNSN1kyOTFiblJrYjNkdWZYTWdiR2x1WldGeUlHbHVabWx1YVhSbElHWnZjbmRoY21SellDazdYRzRnSUNBZ2MzWm5MbUZ3Y0dWdVpDaGphWEpqYkdVcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhOMlp6dGNiaUFnZlZ4dVhHNGdJQzhxS2lCRGFHRnVaMlZ6SUhSb1pTQnpkR0YwWlNCdlppQjBhR1VnWkdWdGJ5QnpZM0pwY0hRZ0tITjBiM0F2Y0d4aGVTa2dLaTljYmlBZ2NISnBkbUYwWlNCZlkyaGhibWRsVTNSdmNGTjBZWFJsS0NrNklIWnZhV1FnZTF4dUlDQWdJR052Ym5OMElHbGpiMjRnUFNCMGFHbHpMbDl6ZEc5d1UzUmhjblJDZEc0dVoyVjBSV3hsYldWdWRITkNlVU5zWVhOelRtRnRaU2duWjNKdmF5MXBZMjl1SnlrN1hHNGdJQ0FnYVdOdmJsc3dYUzVqYkdGemMwNWhiV1VnUFNBblozSnZheTFwWTI5dUlHWmhjeUJtWVMxd2JHRjVKenRjYmlBZ0lDQjBhR2x6TGw5cGMxTjBiM0J3WldRZ1BTQWhkR2hwY3k1ZmFYTlRkRzl3Y0dWa08xeHVYRzRnSUNBZ2FXWWdLQ0YwYUdsekxsOXBjMU4wYjNCd1pXUXBJSHRjYmlBZ0lDQWdJR2xqYjI1Yk1GMHVZMnhoYzNOT1lXMWxJRDBnSjJkeWIyc3RhV052YmlCbVlXd2dabUV0Y0dGMWMyVW5PMXh1SUNBZ0lDQWdhV1lnS0NGMGFHbHpMbDlwYzFOMFpYQlFjbTlqWlhOelpXUXBYRzRnSUNBZ0lDQWdJSFJvYVhNdVgzTjBZWEowVTJOeWFYQjBLQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHlvcUlGSmxjM1JoY25SeklIUm9aU0J6WTNKcGNIUWdLaTljYmlBZ2NISnBkbUYwWlNCZmNtVnpkR0Z5ZEZOamNtbHdkQ2dwT2lCMmIybGtJSHRjYmlBZ0lDQm5jbTlyTG5Ob1pXeHNMbVJ2WTJ0TllXNWhaMlZ5TG1Oc2IzTmxLSFJvYVhNdVgyNXZaR1VoS1R0Y2JpQWdJQ0JuY205ckxuTm9aV3hzTG1Oc2IzTmxRV3hzS0NrN1hHNGdJQ0FnZEdocGN5NWZZMnhsWVhKU2IyOTBLQ2s3WEc0Z0lDQWdkR2hwY3k1ZmMyVjBTVzVwZEZCaGNtRnRjeWdwTzF4dUlDQWdJSFJvYVhNdWMzUmhjblFvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJEYkdWaGNuTWdkR2hsSUhKdmIzUWdaV3hsYldWdWRDQXFMMXh1SUNCd2NtbDJZWFJsSUY5amJHVmhjbEp2YjNRb0tUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWZjbTl2ZENBOUlIVnBMbVJwZGloYlhTd2dlMmxrT2lBblpHVnRieTF6WTNKcGNIUW5MQ0JqYkdGemMyVnpPaUFuZEhWMGIzSnBZV3h6TFhKdmIzUWdkSFYwYjNKcFlXeHpMWFJ5WVdOcklHUmxiVzh0WVhCd0xYTmpjbWx3ZENkOUtUdGNibHh1SUNBZ0lIUm9hWE11WDIxaGFXNUlaV0ZrWlhJZ1BTQjFhUzV3WVc1bGJDaGJYU3dnSjNSMWRHOXlhV0ZzY3kxdFlXbHVMV2hsWVdSbGNpY3BPMXh1SUNBZ0lIUm9hWE11WDJobFlXUmxjaUE5SUhWcExtZ3lLQ2NuS1R0Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWWdQU0IxYVM1a2FYWklLRnRkTENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0YUdWaFpHVnlKeWs3WEc1Y2JpQWdJQ0IwYUdsekxsOWhZM1JwZG1sMGVTQTlJSFZwTG5CaGJtVnNLRnRkTENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0WkdWelkzSnBjSFJwYjI0bktUdGNibHh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56UkdsMklEMGdkV2t1WkdsMlZpaGJYU3dnSjNSMWRHOXlhV0ZzY3kxeWIyOTBMWEJ5YjJkeVpYTnpKeWs3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNZ1BTQjFhUzVsYkdWdFpXNTBLQ2R3Y205bmNtVnpjeWNwTzF4dUlDQWdJSFJvYVhNdVgzQnliMmR5WlhOelUzUmxjSE1nUFNCMWFTNWthWFpVWlhoMEtDY25LVHRjYmx4dUlDQWdJSFJvYVhNdVgzQnliMmR5WlhOekxtMWhlQ0E5SURBN1hHNGdJQ0FnZEdocGN5NWZjSEp2WjNKbGMzTXVkbUZzZFdVZ1BTQXhPMXh1SUNCOVhHNWNiaUFnTHlvcUlGTmxkSE1nYVc1cGRHbGhiQ0J3WVhKaGJXVjBaWEp6SUNvdlhHNGdJSEJ5YVhaaGRHVWdYM05sZEVsdWFYUlFZWEpoYlhNb0tUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWZZM1Z5Y21WdWRGTjBaWEFnUFNBd08xeHVJQ0FnSUhSb2FYTXVYMmx6VTNSdmNIQmxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lIUm9hWE11WDJselEyRnVZMlZzYkdWa0lEMGdabUZzYzJVN1hHNWNiaUFnSUNCamIyNXpkQ0JwWTI5dUlEMGdkR2hwY3k1ZmMzUnZjRk4wWVhKMFFuUnVMbWRsZEVWc1pXMWxiblJ6UW5sRGJHRnpjMDVoYldVb0oyZHliMnN0YVdOdmJpY3BPMXh1SUNBZ0lHbGpiMjViTUYwdVkyeGhjM05PWVcxbElEMGdKMmR5YjJzdGFXTnZiaUJtWVd3Z1ptRXRjR0YxYzJVbk8xeHVJQ0FnSUhSb2FYTXVYMjVsZUhSVGRHVndRblJ1TG1Oc1lYTnpUR2x6ZEM1eVpXMXZkbVVvSjJScGMyRmliR1ZrSnlrN1hHNGdJSDFjYmx4dUlDQXZLaW9nUTJ4dmMyVnpJR1JsYlc4Z2MyTnlhWEIwSUdSdlkyc2dLaTljYmlBZ2NISnBkbUYwWlNCZlkyeHZjMlZFYjJOcktDazZJSFp2YVdRZ2UxeHVJQ0FnSUdkeWIyc3VjMmhsYkd3dVpHOWphMDFoYm1GblpYSXVZMnh2YzJVb2RHaHBjeTVmYm05a1pTRXBPMXh1SUNBZ0lIUm9hWE11WTJGdVkyVnNVMk55YVhCMEtDazdYRzRnSUgxY2JseHVJQ0F2S2lvZ1EyRnVZMlZzY3lCMGFHVWdjMk55YVhCMElDb3ZYRzRnSUdOaGJtTmxiRk5qY21sd2RDZ3BPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbDlwYzBOaGJtTmxiR3hsWkNBOUlIUnlkV1U3WEc0Z0lDQWdSR1Z0YjFOamNtbHdkQzVqZFhKeVpXNTBUMkpxWldOMElEMGdiblZzYkR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkJaR1J6SUdFZ2JtVjNJSE4wWlhBZ2RHOGdjMk55YVhCMFhHNGdJQ0FxSUVCd1lYSmhiU0J1WVcxbElDMGdVM1JsY0NCdVlXMWxYRzRnSUNBcUlFQndZWEpoYlNCbWRXNWpJQzBnVTNSbGNDQm1kVzVqZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnYjNCMGFXOXVjeUF0SUZOMFpYQWdiM0IwYVc5dWN5QW9aR1Z6WTNKcGNIUnBiMjRnWVc1a0lHUmxiR0Y1SUdGbWRHVnlJSE4wWlhBZ1pXNWtjeWxjYmlBZ0lDb2dRSEpsZEhWeWJuTWdVbVYwZFhKdWN5QjBhR1VnWTNWeWNtVnVkQ0JrWlcxdklITmpjbWx3ZENCdlltcGxZM1JjYmlBZ0lDb3ZYRzRnSUhOMFpYQW9ibUZ0WlRvZ2MzUnlhVzVuTENCbWRXNWpPaUFvS1NBOVBpQlFjbTl0YVhObFBIWnZhV1ErTENCdmNIUnBiMjV6UHpvZ2UyUmxjMk55YVhCMGFXOXVQem9nYzNSeWFXNW5MQ0JrWld4aGVUODZJRzUxYldKbGNuMHBPaUIwYUdseklIdGNiaUFnSUNCMGFHbHpMbDl6ZEdWd2MxdDBhR2x6TG5OMFpYQnpMbXhsYm1kMGFGMGdQU0I3WEc0Z0lDQWdJQ0J1WVcxbE9pQnVZVzFsTEZ4dUlDQWdJQ0FnWm5WdVl6b2dablZ1WXl4Y2JpQWdJQ0FnSUc5d2RHbHZibk02SUc5d2RHbHZibk1zWEc0Z0lDQWdmVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4cUtpQlRkR0Z5ZEhNZ2RHaGxJR1JsYlc4Z2MyTnlhWEIwSUNvdlhHNGdJR0Z6ZVc1aklITjBZWEowS0NrNklGQnliMjFwYzJVOGRtOXBaRDRnZTF4dUlDQWdJSFJvYVhNdVgybHVhWFJTYjI5MEtDazdYRzRnSUNBZ1ozSnZheTV6YUdWc2JDNXVaWGRXYVdWM0tIUm9hWE11Ym1GdFpTazdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWZhWE5CZFhSdmJXRjBhV01wSUh0Y2JpQWdJQ0FnSUhSb2FYTXVYM04wWVhKMFUyTnlhWEIwS0NrN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMkYxZEc5VGRHRnlkRVpwY25OMFUzUmxjQ2xjYmlBZ0lDQWdJR0YzWVdsMElIUm9hWE11WDI1bGVIUlRkR1Z3S0NrN1hHNGdJSDFjYm4xY2JpSmRmUT09IiwiLy8gUnVudGltZSBzeXN0ZW0gZm9yIGV4cG9ydGVkIEMvQysrLWZ1bmN0aW9ucyBjYWxsLlxuLy8gSXQgd2FzIHByZXZpb3VzZWx5IGRldmVsb3BlZCBhbmQgZG9lcyBOT1QgcHJvdmlkZSBjYWxsIHdhc20tZnVuY3Rpb25zIGluIFdlYldvcmtlcnMuXG5cbi8vIHR5cGUtdG8taGVhcCBjb3JyZXNwb25kZW5jZVxuY29uc3QgaGVhcE1hcCA9IHtcImkzMlwiOiBcIkhFQVAzMlwiLCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgIFwiZjMyXCI6IFwiSEVBUEYzMlwiIC8vIEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgICAgIH07XG5cbi8vIHR5cGUgc2lnbmF0dXJlIHRvIHR5cGVkIGFycmF5ICxhcHBcbmNvbnN0IHR5cGVNYXAgPSB7XCJpMzJcIjogSW50MzJBcnJheSwgLy8gSW50MzJBcnJheVxuICAgICAgICAgICAgICAgICBcImYzMlwiOiBGbG9hdDMyQXJyYXkgLy8gRmxvYXQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTsgXG4gXG4vLyB0eXBlLXRvLXNoaWZ0IG1hcFxuY29uc3Qgc2hpZnRNYXAgPSB7XCJpMzJcIjogMiwgLy8gSW50MzJBcnJheVxuICAgICAgICAgICAgICAgICAgXCJmMzJcIjogMiAvLyBGbG9hdDMyQXJyYXlcbiAgICAgICAgICAgICAgICAgfTtcblxuLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbmNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7XCJpMzJcIjogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImYzMlwiOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheX07XG4gXG5cbi8vIENMQVNTRVMgVEhBVCBBUkUgVVNFRCBCWSBDUFAtV1JBUFBFUlxuXG4vLyBzaW1wbGUgYXJndW1lbnQ6IGEgbnVtYmVyIFxuY2xhc3MgQXJne1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOyAgICAgICAgXG4gICAgfVxuXG4gICAgY29tcGxlbWVudEFyck9mUGFyYW1zKGFyck9mUGFyYW1zKSB7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZUeXBlcyhhcnJPZlR5cGVzKSB7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7ICAgICAgICBcbiAgICB9XG5cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHt9XG59XG5cbi8vIGNvbHVtbiBhcmd1bWVudFxuY2xhc3MgQXJnQ29sdW1uIGV4dGVuZHMgQXJnIHtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHRhcmdldFR5cGUsIHRvVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMudHlwZSA9IHRhcmdldFR5cGU7XG4gICAgICAgIHRoaXMudG9VcGRhdGUgPSB0b1VwZGF0ZTtcbiAgICAgICAgdGhpcy5idWYgPSAwOyAgICBcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBkYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmJ1Zik7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZlJvd3MpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKHRoaXMubnVtT2ZSb3dzICogdHlwZU1hcFt0aGlzLnR5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gKHRoaXMuYnVmICE9IDApO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07ICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgYXJyYXkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZGF0YTtcblxuICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSBcbiAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09ICdmMzInKSkpXG4gICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgaWYoYXJyYXkpIFxuICAgICAgICAgICAgICBoZWFwLnNldChhcnJheSwgdGhpcy5idWYgPj4gc2hpZnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgbGV0IGJ1ZmZlciA9IHRoaXMuYnVmO1xuICAgICAgICAgICAgbGV0IGJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgIGxldCBhcnJheSA9IHRoaXMuZGF0YS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm51bU9mUm93czsgaSsrKVxuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaGVhcFtidWZmZXIgLyBieXRlcyArIGldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICAgICAgIHRoaXMuYnVmID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBuZXcgY29sdW1uIGFyZ3VtZW50OiBhIG5ldyBjb2x1bW4gaXMgY3JlYXRlZFxuY2xhc3MgQXJnTmV3Q29sdW1uIGV4dGVuZHMgQXJnQ29sdW1uIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRUeXBlLCBudW1PZlJvd3MpIHtcbiAgICAgICAgc3VwZXIoW10sIHRhcmdldFR5cGUsIHRydWUpO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgbGV0IGJ1ZiA9IHRoaXMuYnVmO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgY29sdW1uQ3JlYXRvciA9IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbdHlwZV07ICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXSh0aGlzLm51bU9mUm93cyk7ICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyW2ldID0gaGVhcFtidWYgLyBhcnIuQllURVNfUEVSX0VMRU1FTlQgKyBpXTtcblxuICAgICAgICAgICAgdGhpcy5kYXRhID0gY29sdW1uQ3JlYXRvcignbmFtZScsIGFycik7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYXJyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyBtaXN0YWtlLCB3aGVuIHRoaXMubnVtT2ZSb3dzID0gNSAoVE9ETzogaW52ZXN0aWdhdGUgd2h5KVxuICAgICAgICAgICAgLy90aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIHRoaXMuYnVmLCB0aGlzLm51bU9mUm93cykpO1xuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGF0YS5nZXRSYXdEYXRhKCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBhbiBhcnJheSBvZiBjb2x1bW5zIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW5zIGV4dGVuZHMgQXJnIHtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHRhcmdldFR5cGUsIHRvVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMudHlwZSA9IHRhcmdldFR5cGU7XG4gICAgICAgIHRoaXMudG9VcGRhdGUgPSB0b1VwZGF0ZTtcbiAgICAgICAgdGhpcy5idWYgPSAwOyAgICBcbiAgICAgICAgdGhpcy5udW1PZkNvbHVtbnMgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBkYXRhWzBdLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmJ1Zik7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZlJvd3MpO1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMubnVtT2ZDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZUeXBlcyhhcnJPZlR5cGVzKSB7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7ICAgICAgICBcbiAgICB9XG5cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgdGhpcy5idWYgPSBtb2R1bGUuX21hbGxvYyh0aGlzLm51bU9mUm93cyAqIHRoaXMubnVtT2ZDb2x1bW5zIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdHlwZU1hcFt0aGlzLnR5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gKHRoaXMuYnVmICE9IDApO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1dCBjb2x1bW5zIGRhdGEgdG8gYnVmZmVyXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1PZkNvbHVtbnM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZGF0YVtpXTtcblxuICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09ICdpMzInKSkgXG4gICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZGF0YSBhcnJheVxuICAgICAgICAgICAgICAgIGlmKGFycmF5ICE9IG51bGwpIFxuICAgICAgICAgICAgICAgICAgICBoZWFwLnNldChhcnJheSwgKHRoaXMuYnVmICsgaSAqIHRoaXMubnVtT2ZSb3dzICogbnVtT2ZCeXRlcykgPj4gc2hpZnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gdGhpcy5udW1PZlJvd3M7XG4gICAgICAgICAgICBsZXQgbnVtT2ZDb2xzID0gdGhpcy5udW1PZkNvbHVtbnM7ICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXShoZWFwLmJ1ZmZlciwgdGhpcy5idWYsIG51bU9mUm93cyAqIG51bU9mQ29scyk7XG4gICAgICAgXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY29sRGF0YSA9IHRoaXMuZGF0YVtpXS5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgY29sRGF0YVtqXSA9IGFycltqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZyZWVCdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICBtb2R1bGUuX2ZyZWUodGhpcy5idWYpO1xuICAgICAgICAgICB0aGlzLmJ1ZiA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuLy8gYW4gYXJyYXkgb2YgbmV3IGNvbHVtbnM6IG5ldyBjb2x1bW5zIGFyZSBjcmVhdGVkXG5jbGFzcyBBcmdOZXdDb2x1bW5zIGV4dGVuZHMgQXJnQ29sdW1ucyB7XG5cbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRUeXBlLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICBzdXBlcihbW11dLCB0YXJnZXRUeXBlLCB0cnVlKTsgIFxuICAgICAgICB0aGlzLmRhdGEgPSBbXTsgICAgICAgIFxuICAgICAgICB0aGlzLm51bU9mQ29sdW1ucyA9IG51bU9mQ29sdW1ucztcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBudW1PZlJvd3M7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkgeyB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gdGhpcy5udW1PZlJvd3M7XG4gICAgICAgICAgICBsZXQgbnVtT2ZDb2xzID0gdGhpcy5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTtcbiAgICAgICAgICAgIGxldCBidWYgPSB0aGlzLmJ1ZjtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG51bU9mQ29sczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKG51bU9mUm93cyk7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgYXJyKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBjb2x1bW5zOiBoZXJlLCBtYXkgYmUgYSBwcm9ibGVtIHdoZW4gbnVtT2ZSb3dzID0gNSAgICAgICAgICAgIFxuICAgICAgICAgICAgLypmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goY29sdW1uQ3JlYXRvcigoaSArIDEpLnRvU3RyaW5nKCksIG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYgKyBpICogbnVtT2ZSb3dzICogbnVtT2ZCeXRlcywgbnVtT2ZSb3dzKSkpOyovXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGEgd3JhcHBlciBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb24gY2FsbFxuZnVuY3Rpb24gY3BwRnVuY1dyYXBwZXIobW9kdWxlLCBjRnVuY05hbWUsIHJldHVyblR5cGUsIGFyZ3MpXG57XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVyc1xuICAgIGZvcihsZXQgYXJnIG9mIGFyZ3MpICAgICAgICAgXG4gICAgICAgIGFyZy5hbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpO1xuICAgIFxuICAgIGxldCBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkID0gdHJ1ZTtcblxuICAgIC8vIGNoZWNrIG1lbW9yeSBhbGxvY2F0aW9uXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncylcbiAgICAgICAgaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCAmPSBhcmcuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKTsgIFxuICAgIFxuICAgIC8vIHJ1biBleHBvcnRlZCBmdW5jdGlvbiBpZiBlbm91Z2ggb2YgbWVtb3J5IGlzIGFsbG9jYXRlZFxuICAgIGlmKGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQpIHtcblxuICAgICAgICBsZXQgcGFyYW1zID0gW107IC8vIGFyZ3VtZW50cyB0aGF0IGFyZSBwdXQgdG8gdGhlIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGxldCB0eXBlcyA9IFtdOyAvLyB0aGVpciB0eXBlc1xuXG4gICAgICAgIC8vIHByZXBhcmUgZGF0YSB0aGF0IGlzIHB1dCB0byBleHBvcnRlZCBmdW5jdGlvblxuICAgICAgICBmb3IobGV0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICBhcmcuY29tcGxlbWVudEFyck9mUGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICBhcmcuY29tcGxlbWVudEFyck9mVHlwZXModHlwZXMpO1xuICAgICAgICAgICAgYXJnLnB1dERhdGFUb0J1ZmZlcihtb2R1bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4dGVuZGVkVHlwZU9mUmV0dXJuID0gKHJldHVyblR5cGUgPT0gJ251bScpID8gJ251bWJlcicgOiBudWxsOyAgIFxuICAgICAgICBcbiAgICAgICAgLy8gY2FsbCBleHBvcnRlZCBmdW5jdGlvblxuICAgICAgICBpZihleHRlbmRlZFR5cGVPZlJldHVybilcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vZHVsZS5jY2FsbChjRnVuY05hbWUsIGV4dGVuZGVkVHlwZU9mUmV0dXJuLCB0eXBlcywgcGFyYW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgLy8gdXBkYXRlIGFuZCBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgaWYgcmVxdWlyZWRcbiAgICAgICAgZm9yKGxldCBhcmcgb2YgYXJncylcbiAgICAgICAgICAgIGFyZy5nZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpOyAgICAgICBcbiAgICB9XG5cbiAgICAvLyBjbGVhciBidWZmZXJzXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncykgICAgICAgICBcbiAgICAgICAgYXJnLmZyZWVCdWZmZXIobW9kdWxlKTtcblxuICAgIGlmKHJlc3VsdCAhPSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiByZXN1bHQ7ICAgIFxufSAvLyBjcHBGdW5jV3JhcHBlclxuXG5cbi8vIEEgTEFZRVIgQkVUV0VFTiBKUyBBTkQgQ1BQLVdSQVBQRVJcblxuLy8gUGFyYW1ldGVycyBjcmVhdG9yXG5sZXQgUGFyYW0gPSB7XG4gICAgaW50Q29sdW1uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdDb2x1bW4oY29sdW1uLCAnaTMyJyk7XG4gICAgfSxcbiAgICBcbiAgICBuZXdJbnRDb2x1bW4gKG51bU9mUm93cykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbignaTMyJywgbnVtT2ZSb3dzKTtcbiAgICB9LFxuXG4gICAgaW50Q29sdW1ucyhjb2x1bW5zKXtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdDb2x1bW5zKGNvbHVtbnMudG9MaXN0KCksICdpMzInKTtcbiAgICB9LFxuXG4gICAgbmV3SW50Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbnMoJ2kzMicsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKTtcbiAgICB9LFxuXG4gICAgZmxvYXRDb2x1bW4gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdmMzInKTtcbiAgICB9LFxuXG4gICAgbmV3RmxvYXRDb2x1bW4gKG51bU9mUm93cykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbignZjMyJywgbnVtT2ZSb3dzKTtcbiAgICB9LFxuXG4gICAgZmxvYXRDb2x1bW5zKGNvbHVtbnMpe1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2YzMicpO1xuICAgIH0sXG5cbiAgICBuZXdGbG9hdENvbHVtbnMobnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdOZXdDb2x1bW5zKCdmMzInLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucyk7XG4gICAgfSxcblxuICAgIGludChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmcobnVtYmVyKTtcbiAgICB9LFxuXG4gICAgbnVtKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB2YWx1ZSBjcmVhdG9yXG5sZXQgUmV0dXJuID0ge1xuICAgIHRhYmxlRnJvbUNvbHVtbnMoYXJnQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGFyZ0NvbHVtbnMuZGF0YSk7XG4gICAgfSxcblxuICAgIG51bShudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgaW50KG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG5cbiAgICBkb3VibGUobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcblxuICAgIGNvbHVtbihhcmdDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGFyZ0NvbHVtbi5kYXRhO1xuICAgIH1cbn07XG5cbi8vIFRoZSBtYWluIHRvb2wgdGhhdCBjb21iaW5lcyBhbGwgdG9nZXRoZXJcbmV4cG9ydCBmdW5jdGlvbiBjYWxsV2FzbShtb2R1bGUsIGZ1bmNOYW1lLCBpbnB1dHMpIHtcbiAgICAvLyBnZXQgc3BlY2lmaWNhdGlvbiBvZiBleHBvcnRlZCBDL0MrKy1mdW5jdGlvblxuICAgIGxldCBmdW5jU3BlY2lmaWNhdGlvbiA9IG1vZHVsZVtmdW5jTmFtZV07XG5cbiAgICAvLyBnZXQgYXJndW1uZXRzXG4gICAgbGV0IGFyZ3MgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHM7IFxuXG4gICAgLy8gYXJyYXkgb2YgYXJndW1lbnRzIHRoYXQgZnVydGhlciBhcmUgdXNlZCBieSBjcHAtd3JhcHBlclxuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGxldCBrZXkgaW4gYXJncyl7XG4gICAgICAgIGxldCBhcmcgPSBhcmdzW2tleV07IFxuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PSAnX2NhbGxSZXN1bHQnKSAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhbiBhcmd1bWVudFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpe1xuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgICAgICBjYXNlICdudW0nOlxuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnaW50Q29sdW1uJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKGlucHV0c1tpXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ25ld0ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGxldCB2YWwyID0gYXJnc1sgYXJnWydudW1PZkNvbHVtbnMnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbDEsIHZhbDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnbmV3SW50Q29sdW1uJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIHN3aXRjaFxuXG4gICAgICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZ3Nba2V5XS5kYXRhKTtcblxuICAgIH0gLy8gZm9yIGtleSAgICBcblxuICAgIC8vIENBTEwgRVhQT1JURUQgQ1BQLUZVTkNUSU9OXG4gICAgbGV0IGNhbGxSZXN1bHQgPSBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGZ1bmNOYW1lLCAnbnVtJywgY3BwRnVuY0lucHV0KTtcblxuICAgIC8vIHN0b3JlIHJlc3VsdCB0aGF0IGlzIHJldHVybmVkIGJ5IGV4cG9ydGVkIGNwcC1mdW5jdGlvblxuICAgIGFyZ3MuX2NhbGxSZXN1bHQgPSBQYXJhbS5udW0oY2FsbFJlc3VsdCk7XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0XG4gICAgbGV0IG91dHB1dCA9IGZ1bmNTcGVjaWZpY2F0aW9uLm91dHB1dDtcblxuICAgIC8vIGlmIGEgc2luZ2xlIG9iamVjdCBtdXN0IGJlIHJldHVybmVkXG4gICAgaWYob3V0cHV0Wyd0eXBlJ10gIT0gJ29iamVjdHMnKVxuICAgICAgcmV0dXJuIFJldHVybltvdXRwdXRbJ3R5cGUnXV0oYXJnc1tvdXRwdXRbJ3NvdXJjZSddXS5kYXRhKTtcblxuICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG5cbiAgICAvLyBwdXNoIGRhdGEgb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50c1xuICAgIGZvcihsZXQgbmFtZSBvZiBvdXRwdXRbJ3NvdXJjZSddKVxuICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ3NbbmFtZV0uZGF0YS5kYXRhKTtcblxuICAgIHJldHVybiBhcnJheVRvUmV0dXJuO1xuICB9IC8vIGNhbGxXYXNtIiwiLy8gVXRpbGl0aWVzIGZvciBjYWxsaW5nIHdhc20tZnVuY3Rpb25zIHZpYSB3ZWJ3b3JrZXIuXG5cbi8vIFdlIHVzZSBhbiBhcHByb2FjaCB0aGF0IGlzIHdlbGwgZGVzY3JpYmVkIGhlcmU6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG4vLyBJdCBoYXMgYmVlbiBtb2RpZmllZCBmb3IgdXNhZ2UgaW4gREFUQUdST0suXG5cbi8vIENvbnN0YW50cyBmb3Igd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VycyBydW50aW1lIHN5c3RlbVxuY29uc3QgVFlQRSA9ICd0eXBlJztcbmNvbnN0IE5VTV9UWVBFID0gJ251bSc7XG5jb25zdCBGTE9BVF9DT0xVTU5fVFlQRSA9ICdmbG9hdENvbHVtbic7XG5jb25zdCBJTlRfQ09MVU1OX1RZUEUgPSAnaW50Q29sdW1uJztcbmNvbnN0IEZMT0FUX0NPTFVNTlNfVFlQRSA9ICdmbG9hdENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSA9ICduZXdGbG9hdENvbHVtbnMnO1xuY29uc3QgSU5UX0NPTFVNTlNfVFlQRSA9ICdpbnRDb2x1bW5zJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OU19UWVBFID0gJ25ld0ludENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFID0gJ25ld0Zsb2F0Q29sdW1uJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OX1RZUEUgPSAnbmV3SW50Q29sdW1uJztcbmNvbnN0IENPTFVNTiA9ICdjb2x1bW4nO1xuY29uc3QgQ0FMTF9SRVNVTFQgPSAnX2NhbGxSZXN1bHQnO1xuY29uc3QgTlVNX09GX1JPV1MgPSAnbnVtT2ZSb3dzJztcbmNvbnN0IE5VTV9PRl9DT0xVTU5TID0gJ251bU9mQ29sdW1ucyc7XG5jb25zdCBSRUYgPSAncmVmJztcbmNvbnN0IFZBTFVFID0gJ3ZhbHVlJztcbmNvbnN0IFRBQkxFX09GX0NPTFVNTlMgPSAndGFibGVGcm9tQ29sdW1ucyc7XG5jb25zdCBPQkpFQ1RTID0gJ29iamVjdHMnO1xuY29uc3QgSU5UX1RZUEUgPSAnaW50JztcbmNvbnN0IERPVUJMRV9UWVBFID0gJ2RvdWJsZSc7XG5jb25zdCBOVU1CRVIgPSAnbnVtYmVyJztcblxuLy8gVHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlLlxuLy8gSXQgaXMgcmVxdWlyZWQgZm9yIEpTLW1vZHVsZSBnZW5lcmF0ZWQgYnkgRW1zY3JpcHRlbixcbi8vIGFuZCBpdCBpcyB1c2VkLCB3aGVuIHBhc3NpbmcgYXJyYXkgZGF0YSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG5jb25zdCBoZWFwTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IFwiSEVBUDMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBcIkhFQVAzMlwiXG4gICAgICAgICAgICAgICAgfTtcblxuLy8gVHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBtYW5pcHVsYXRpbmcgY29sdW1uKHMpLlxuY29uc3QgdHlwZU1hcCA9IHtcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbic6IEludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbic6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiBJbnQzMkFycmF5LCAgXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogSW50MzJBcnJheVxuICAgICAgICAgICAgICAgIH07IFxuXG4vLyBUeXBlLXRvLXNoaWZ0IG1hcC5cbi8vIEl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3IFxuY29uc3Qgc2hpZnRNYXAgPSB7J2ludENvbHVtbic6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogMiwgIFxuICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAyLFxuICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IDJcbiAgICAgICAgICAgICAgICAgfTsgICAgICAgICBcblxuLy8gR2V0IGlucHV0IGZvciBDKystZnVuY3Rpb24uXG4vLyBUaGlzIGZ1bmN0aW9uIHRha2VzIHNwZWNpZmljYXRpb24gb2YgYXJndW1lbnRzIChhcmdzU3BlY2lmaWNhdGlvbikgJiBpbnB1dCBkYXRhIChpbnB1dFZhbHMpXG4vLyBhbmQgcmV0dXJucyBpbnB1dCB0aGF0IHdpbGwgYmUgZnVydGhlciB1c2VkIGluIGNwcC93YXNtLWZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENwcElucHV0KGFyZ3NTcGVjaWZpY2F0aW9uLCBpbnB1dFZhbHMpIHtcbiAgICBsZXQgY3BwRnVuY0lucHV0ID0gW107XG4gICAgbGV0IHJlZjtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGNvbnN0IGtleSBpbiBhcmdzU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcmcgPSBhcmdzU3BlY2lmaWNhdGlvbltrZXldOyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PT0gQ0FMTF9SRVNVTFQpICAgICAgICAgICAgIFxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gaGVyZSwgd2UgY29uc2lkZXIgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgICAgIHN3aXRjaCh0eXBlKSB7ICAgICAgICAgICBcbiBcbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSBpbnB1dFZhbHNbaV07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcblxuICAgICAgICAgICAgICAgIGxldCBhcnJheTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW4gYW5kIHRhcmdldCB0eXBlIGNvaW5zaWRlXG4gICAgICAgICAgICAgICAgLy9hcnJheSA9IGlucHV0VmFsc1tpXS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29sID0gaW5wdXRWYWxzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSwgd2UgY2hlY2sgdHlwZXMgYW5kIHBlcmZvcm0gYW4gYXBwcm9wcmlhdGUgdHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgaWYoICggKGNvbC50eXBlID09PSBJTlRfVFlQRSkgJiYgKHR5cGUgPT09IElOVF9DT0xVTU5fVFlQRSkgKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8qaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSBGTE9BVF9DT0xVTU5fVFlQRSkpKVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpOyovXG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayB0eXBlc1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXknOiBhcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bU9mUm93cyc6IGFycmF5Lmxlbmd0aH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbiBcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSAwOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfUk9XU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzU3BlY2lmaWNhdGlvbltyZWZdLnR5cGUgPT09IE5VTV9UWVBFKVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyBvciBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIE9LIGlmIHR5cGUgb2YgY29sdW1ucyBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2ZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAvLyAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLypmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09IElOVF9DT0xVTU5fVFlQRSkpIFxuICAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7Ki9cblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXlzJzogYXJyYXlzLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IGFycmF5cy5sZW5ndGh9O1xuXG4gICAgICAgICAgICAgICAgaSsrOyAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zIG9yIG5ldyBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgdmFsMSA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHZhbDIgPSAwO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwxID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfUk9XU11bVkFMVUVdXTtcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfQ09MVU1OU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1JlZjonKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJlZik7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwyID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfQ09MVU1OU11bVkFMVUVdXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsMSxcbiAgICAgICAgICAgICAgICAgICdudW1PZkNvbHVtbnMnOiB2YWwyfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUT0RPOiBzcGVjaWZ5IGJlaGF2aW91ciAgICAgICAgICAgXG4gICAgICAgICAgICB9IC8vIHN3aXRjaCAgICAgICAgXG5cbiAgICAgICAgY3BwRnVuY0lucHV0LnB1c2goYXJnKTtcbiAgICB9IC8vIGZvciBrZXlcblxuICAgIC8vY29uc29sZS5sb2coJ2NwcEZ1bmNJbnB1dDonKTtcbiAgICAvL2NvbnNvbGUubG9nKGNwcEZ1bmNJbnB1dCk7XG5cbiAgICByZXR1cm4gY3BwRnVuY0lucHV0O1xufSAvLyBnZXRDcHBJbnB1dFxuXG4vLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlcnMgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHsgXG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2godHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YS5idWYgPSBtb2R1bGUuX21hbGxvYyhhcmcuZGF0YS5udW1PZlJvd3MgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOiAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogLy8gYWxsb2NhdGlvbiBtZW1vcnkgZm9yIGNvbHVtbnMgdGhhdCBhcmUgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIGFyZy5kYXRhLm51bU9mQ29sdW1ucyBcbiAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7IFxuICAgICAgICB9ICBcbiAgICB9XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygnaW5wdXRzIGFmdGVyIG1lbW9yeSBhbGxvY2F0aW9uOicpO1xuICAgIC8vY29uc29sZS5sb2coaW5wdXRzKTtcbn0gLy8gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXJcblxuLy8gR2V0IGFycmF5IG9mIHZhbHVlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVBhcmFtcyhpbnB1dHMpIHtcbiAgICBsZXQgcGFyYW1zID0gW107XG5cbiAgICAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcblxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uICYgbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZkNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn0gLy8gZ2V0QXJyT2ZXYXNtUGFyYW1zXG5cbi8vIEdldCBhcnJheSBvZiB0eXBlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVR5cGVzKGlucHV0cykge1xuICAgIGxldCB0eXBlcyA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufSAvLyBnZXRBcnJPZldhc21UeXBlc1xuXG4vLyBQdXQgYXJyYXkgZGF0YSB0byBidWZmZXJcbmZ1bmN0aW9uIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGxldCBzaGlmdDtcbiAgICBsZXQgaGVhcDsgICAgXG4gICAgXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgIFxuICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFyZy5kYXRhLmFycmF5LCBhcmcuZGF0YS5idWYgPj4gc2hpZnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgICAgIGxldCBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQ29sdW1ucyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBhcmcuZGF0YS5hcnJheXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2x1bW5zOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5c1tpXSwgKGJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn0gLy8gcHV0RGF0YVRvQnVmZmVyXG5cbi8vIEdldCBhcnJheSBkYXRhIGZyb20gYnVmZmVyLlxuZnVuY3Rpb24gZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcblxuICAgIGxldCBoZWFwO1xuICAgIGxldCBudW1PZlJvd3M7XG4gICAgbGV0IG51bU9mQ29scztcbiAgICBsZXQgbnVtT2ZCeXRlczsgICAgXG4gICAgbGV0IGJ1ZjtcblxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHsgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UOyAgICBcbiAgICAgICAgICAgICAgICBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqXTtcblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheSA9IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiBcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgICAgIG51bU9mUm93cyA9IGFyZy5kYXRhLm51bU9mUm93cztcbiAgICAgICAgICAgICAgICBudW1PZkNvbHMgPSBhcmcuZGF0YS5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goYXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhcmcuYXJyYXlzID0gYXJyYXlzO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSAgICAgICAgICAgIFxufSAvLyBnZXREYXRhRnJvbUJ1ZmZlclxuXG4vLyBDbGVhciBtZW1vcnkgYWxsb2NhdGVkIGZvciBhcnJheSBkYXRhXG5mdW5jdGlvbiBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSBcbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKSB7IC8vIHByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBlYWNoIG5vbi1udW1iZXIgY2FzZVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIG1vZHVsZS5fZnJlZShhcmcuZGF0YS5idWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gICAgXG59IC8vIGNsZWFyTWVtb3J5Rm9yQnVmZmVyXG5cbi8vIEV4dHJhY3QgbmV3bHkgY3JlYXRlZCBkYXRhOiBuZXcgY29sdW1uKHMpIGFyZSBjcmVhdGVkXG5mdW5jdGlvbiBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MsIGFyZ3NBZnRlcldhc21DYWxsKSB7XG4gICAgLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbiAgICBjb25zdCB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5fTtcblxuICAgIGxldCBpID0gMDtcblxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSBcbiAgICB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaChhcmcudHlwZSl7IC8vIFByb2Nlc3MgZWFjaCB0eXBlXG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgbmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWUgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gKDApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBcbiAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBhcmcubmFtZTtcblxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzQWZ0ZXJXYXNtQ2FsbFtpXS5hcnJheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgbGV0IGxlbmd0aCA9IGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5cy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBsZXQgbmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWVzID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBrID0gMTsgayA8PSBsZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goKGspLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGVsc2UgbmFtZXMgPSBhcmcubmFtZXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5c1tqXSkpO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGkrKztcbiAgICB9XG59IC8vIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhXG5cbi8vIEdldCBvdXRwdXQgZGF0YTogb3ZlcmFsbCBvdXRwdXQgaXMgY3JlYXRlZFxuZnVuY3Rpb24gZ2V0T3V0cHV0KGZ1bmNTcGVjaWZpY2F0aW9uKSB7ICBcbiAgICBsZXQgb3V0cHV0ID0gZnVuY1NwZWNpZmljYXRpb24ub3V0cHV0O1xuICAgIFxuICAgIGNvbnN0IHR5cGVUb0RhdGFGaWVsZE1hcCA9IHsnbmV3RmxvYXRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiAnY29sdW1uJ307XG5cbiAgICBzd2l0Y2gob3V0cHV0LnR5cGUpIHtcblxuICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ09MVU1OOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW47XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRBQkxFX09GX0NPTFVNTlM6XG4gICAgICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW5zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgT0JKRUNUUzpcbiAgICAgICAgICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgICAgICAgICBmb3IobGV0IG5hbWUgb2Ygb3V0cHV0LnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGxldCBhcmcgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHNbbmFtZV07XG4gICAgICAgICAgICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ1t0eXBlVG9EYXRhRmllbGRNYXBbYXJnLnR5cGVdXSk7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlUb1JldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbn0gLy8gZ2V0T3V0cHV0XG5cbi8vIENsZWFyIG5ld2x5IGNyZWF0ZWQgZGF0YSBmaWVsZHMgKG5ldyBjb2x1bW4ocykpXG5mdW5jdGlvbiBjbGVhck5ld2x5Q3JlYXRlZERhdGEoZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7IFxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1uID0gbnVsbDsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBjbGVhck5ld2x5Q3JlYXRlZERhdGFcblxuLy8gVEhFIE1BSU4gRlVOQ1RJT046IGEgd3JhcHBlciBmb3IgQysrLWZ1bmN0aW9uIGNhbGxcbmV4cG9ydCBmdW5jdGlvbiBjcHBXcmFwcGVyKG1vZHVsZSwgYXJncywgY3BwRnVuY05hbWUsIHJldHVyblR5cGUpIHtcbiAgICAvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFycmF5cyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIHB1dCBkYXRhIChqdXN0IGNvbHVtbihzKSkgdG8gYWxsb2NhdGVkIGJ1ZmZlcnNcbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgcGFyYW1zID0gZ2V0QXJyT2ZXYXNtUGFyYW1zKGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygncGFyYW1zOicpO1xuICAgIC8vY29uc29sZS5sb2cocGFyYW1zKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzJyB0eXBlcyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgbGV0IHR5cGVzID0gZ2V0QXJyT2ZXYXNtVHlwZXMoYXJncyk7XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygndHlwZXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyh0eXBlcyk7XG5cbiAgICAvLyBjYWxsIHdhc20tZnVuY3Rpb25cbiAgICBsZXQgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNwcEZ1bmNOYW1lLCByZXR1cm5UeXBlLCB0eXBlcywgcGFyYW1zKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgICAvLyBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgKGp1c3QgY29sdW1uKHMpKVxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSwgYXJncyk7ICAgICAgICBcblxuICAgIC8vIGNsZWFyIG1lbW9yeSB0aGF0IHdhcyBwcmV2aW91c2VseSBhbGxvY2F0ZWRcbiAgICBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnZG9uZScpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0IHRoZSByZXF1aXJlZCBvdXRwdXQuXG4vLyBJdCB0YWtlcyBhIHNwZWNpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBjb21wdXRlZFxuLy8gYW5kIGV4dHJhY3RzIHRoZSByZXF1aXJlZCByZXN1bHRzLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3VsdChmdW5jU3BlY2lmaWNhdGlvbiwgZGF0YUZyb21XZWJXb3JrZXIpIHtcbiAgICBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMuX2NhbGxSZXN1bHQgPSBkYXRhRnJvbVdlYldvcmtlci5jYWxsUmVzdWx0OyAgXG5cbiAgICBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMsIGRhdGFGcm9tV2ViV29ya2VyLmFyZ3MpOyAgICBcblxuICAgIGxldCBvdXRQdXQgPSBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pO1xuXG4gICAgLy8gQmVsb3csIHdlIHJlbW92ZSBuZXdseSBjcmVhdGVkIGNvbHVtbihzKSwgd2hpY2ggYXJlIGNyZWF0ZWQgYXQgdGhlIGV4dHJhY3Rpb24tc3RlcC5cbiAgICAvLyBJdCBpcyBlc3BlY2lhbGx5IHJlcXVpcmVkLCB3aGVuIG11bHRpcGxlIGNhbGwgb2Ygd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VyLlxuICAgIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIG91dFB1dDtcbn0iLCIvLyBJbnB1dHMgY29ycmVjdG5lc3MgY2hlY2sgdG9vbHNcbi8vTGltaXRhdGlvbiBjb25zdGFudHNcbmNvbnN0IENPTVBfTUlOID0gMTtcbmNvbnN0IFNBTVBMRVNfQ09VTlRfTUlOID0gMTtcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX01JTiA9IDE7XG5jb25zdCBQRVJDRU5UQUdFX01JTiA9IDA7XG5jb25zdCBQRVJDRU5UQUdFX01BWCA9IDEwMDtcbmNvbnN0IE1BWF9FTEVNRU5UU19DT1VOVCA9IDEwMDAwMDAwMDtcbi8vIEVycm9yIG1lc3NhZ2VzXG5jb25zdCBDT01QX1BPU0lUVkVfTUVTID0gJ2NvbXBvbmVudHMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgQ09NUF9FWENFU1MgPSAnY29tcG9uZW50cyBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gZmVhdXR1cmVzIGNvdW50Lic7XG5jb25zdCBJTkNPUkVSUkVDVF9NSU5fTUFYX01FUyA9ICdtaW4gbXVzdCBiZSBsZXNzIHRoYW4gbWF4Lic7XG5jb25zdCBJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMgPSAnZmVhdHVyZXMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgSU5DT1JFUlJFQ1RfU0FNUExFU19NRVMgPSAnc2FtcGxlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUkVSUkVDVF9QRVJDRU5UQUdFX01FUyA9ICd2aW9sYXRvcnMgcGVyY2VudGFnZSBtdXN0IGJlIGZyb20gdGhlIHJhbmdlIGZyb20gMCB0byAxMDAuJztcbmNvbnN0IERBVEFGUkFNRV9JU19UT09fQklHX01FUyA9ICdkYXRhZnJhbWUgaXMgdG9vIGJpZy4nO1xuLy8gQ2hlY2sgY29tcG9uZW50cyBjb3VudCAoUENBLCBQTFMpXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cykge1xuICAgIGlmIChjb21wb25lbnRzIDwgQ09NUF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihDT01QX1BPU0lUVkVfTUVTKTtcbiAgICBpZiAoY29tcG9uZW50cyA+IGZlYXR1cmVzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPTVBfRVhDRVNTKTtcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoICogZmVhdHVyZXMuYnlJbmRleCgwKS5sZW5ndGggPiBNQVhfRUxFTUVOVFNfQ09VTlQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihEQVRBRlJBTUVfSVNfVE9PX0JJR19NRVMpO1xufVxuLy8gQ2hlY2sgaW5wdXRzIG9mIGRhdGEgZm9yIFNWTSB0ZXN0aW5nIGdlbmVyYXRvclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICBpZiAobWluID49IG1heClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX01JTl9NQVhfTUVTKTtcbiAgICBpZiAoZmVhdHVyZXNDb3VudCA8IEZFQVRVUkVTX0NPVU5UX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX0ZFQVRVUkVTX01FUyk7XG4gICAgaWYgKHNhbXBsZXNDb3VudCA8IFNBTVBMRVNfQ09VTlRfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfU0FNUExFU19NRVMpO1xuICAgIGlmICgodmlvbGF0b3JzUGVyY2VudGFnZSA8IFBFUkNFTlRBR0VfTUlOKSB8fCAodmlvbGF0b3JzUGVyY2VudGFnZSA+IFBFUkNFTlRBR0VfTUFYKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTKTtcbn1cbiIsIi8vIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzSW5XZWJXb3JrZXIsIF9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjaGVja0NvbXBvbmVuZXRzIH0gZnJvbSAnLi91dGlscyc7XG4vLyBQcmluY2lwYWwgY29tcG9uZW50cyBhbmFseXNpcyAoUENBKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGNlbnRlck51bSA9IGNlbnRlciA/IDEgOiAwO1xuICAgICAgICBjb25zdCBzY2FsZU51bSA9IHNjYWxlID8gMSA6IDA7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlck51bSwgc2NhbGVOdW0pO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBfb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICByZXR1cm4gX291dHB1dDtcbiAgICB9KTtcbn1cbi8vIFBhcnRpYWwgbGVhc3Qgc3F1YXJlIHJlZ3Jlc3Npb24gKFBMUylcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlUExTKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNoZWNrQ29tcG9uZW5ldHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpO1xuICAgICAgICBsZXQgX291dHB1dDtcbiAgICAgICAgbGV0IF9wcm9taXNlID0gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBfb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICByZXR1cm4gX291dHB1dDtcbiAgICB9KTtcbn1cbiIsIi8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbi8vIEphdmFTY3JpcHQgQVBJIGZvciBjYWxsIHdhc20tZnVuY3Rpb25zIGZyb20gdGhlIG1vZHVsZSBFREFcblxuLy8gSW1wb3J0cyBmb3IgY2FsbCB3YXNtIHJ1bnRpbWUtc3lzdGVtOiBpbiB0aGUgbWFpbiBzdHJlYW0gYW5kIGluIHdlYndvcmtlcnNcbmltcG9ydCB7Y2FsbFdhc219IGZyb20gJy4uL3dhc20vY2FsbFdhc20nO1xuaW1wb3J0IHtnZXRDcHBJbnB1dCwgZ2V0UmVzdWx0fSBmcm9tICcuLi93YXNtL2NhbGxXYXNtRm9yV2ViV29ya2VyJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9pbml0RURBQVBJKCkge1xuICBhd2FpdCBpbml0RURBKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXModGFibGUsIGNvbHVtbnMsIGNvbXBvbmVudHNDb3VudCwgY2VudGVyTnVtLCBzY2FsZU51bSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnLCBbY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlcih0YWJsZSwgY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyddLmFyZ3VtZW50cyxbY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZXJyb3IoZGYsIGNvbDEsIGNvbDIpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2Vycm9yJywgW2NvbDEsIGNvbDJdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9lcnJvckluV2ViV29ya2VyKGRmLCBjb2wxLCBjb2wyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvZXJyb3JXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydlcnJvciddLmFyZ3VtZW50cyxbY29sMSwgY29sMl0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydlcnJvciddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24odGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnQpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nLCBbZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudF0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uJ10uYXJndW1lbnRzLFtmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50XSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9nZW5lcmF0ZURhdGFzZXQoa2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2dlbmVyYXRlRGF0YXNldCcsIFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyKGtlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvZ2VuZXJhdGVEYXRhc2V0V29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnZ2VuZXJhdGVEYXRhc2V0J10uYXJndW1lbnRzLFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydnZW5lcmF0ZURhdGFzZXQnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9ub3JtYWxpemVEYXRhc2V0KGRhdGEpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ25vcm1hbGl6ZURhdGFzZXQnLCBbZGF0YV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX25vcm1hbGl6ZURhdGFzZXRJbldlYldvcmtlcihkYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvbm9ybWFsaXplRGF0YXNldFdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ25vcm1hbGl6ZURhdGFzZXQnXS5hcmd1bWVudHMsW2RhdGFdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsnbm9ybWFsaXplRGF0YXNldCddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3RyYWluTFNTVk0oZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICd0cmFpbkxTU1ZNJywgW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RyYWluTFNTVk1JbldlYldvcmtlcihnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy90cmFpbkxTU1ZNV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsndHJhaW5MU1NWTSddLmFyZ3VtZW50cyxbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3RyYWluTFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmVkaWN0QnlMU1NWTShrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGEpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3ByZWRpY3RCeUxTU1ZNJywgW2tlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcHJlZGljdEJ5TFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwcmVkaWN0QnlMU1NWTSddLmFyZ3VtZW50cyxba2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3ByZWRpY3RCeUxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdHJhaW5BbmRBbmFseXplTFNTVk0oZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICd0cmFpbkFuZEFuYWx5emVMU1NWTScsIFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3RyYWluQW5kQW5hbHl6ZUxTU1ZNV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsndHJhaW5BbmRBbmFseXplTFNTVk0nXS5hcmd1bWVudHMsW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWyd0cmFpbkFuZEFuYWx5emVMU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG4iLCIvLyBDdXN0b20gVUkgZm9yIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vIFJlbmFtZSBQQ0EgY29sdW1uc1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZVBDQWNvbHVtbnMocGNhVGFibGUpIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBwY2FUYWJsZS5jb2x1bW5zLnRvTGlzdCgpKVxuICAgICAgICBjb2wubmFtZSA9ICdQQ0EnICsgY29sLm5hbWU7XG4gICAgcmV0dXJuIHBjYVRhYmxlO1xufVxuLy8gUHJlZGljdGVkIHZzIFJlZmVyZW5jZSBzY2F0dGVyIHBsb3RcbmV4cG9ydCBmdW5jdGlvbiBwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdChzYW1wbGVzTmFtZXMsIHJlZmVyZW5jZSwgcHJlZGljdGlvbikge1xuICAgIHByZWRpY3Rpb24ubmFtZSA9IHJlZmVyZW5jZS5uYW1lICsgJyhwcmVkaWN0ZWQpJztcbiAgICBsZXQgZGZSZWZlcmVuY2VQcmVkaWN0aW9uID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtzYW1wbGVzTmFtZXMsIHJlZmVyZW5jZSwgcHJlZGljdGlvbl0pO1xuICAgIGRmUmVmZXJlbmNlUHJlZGljdGlvbi5uYW1lID0gJ1JlZmVyZW5jZSB2cy4gUHJlZGljdGVkJztcbiAgICByZXR1cm4gREcuVmlld2VyLnNjYXR0ZXJQbG90KGRmUmVmZXJlbmNlUHJlZGljdGlvbiwgeyB0aXRsZTogZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHg6IHJlZmVyZW5jZS5uYW1lLFxuICAgICAgICB5OiBwcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHNob3dSZWdyZXNzaW9uTGluZTogdHJ1ZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZScsXG4gICAgICAgIGxhYmVsczogc2FtcGxlc05hbWVzLm5hbWVcbiAgICB9KTtcbn1cbi8vIFJlZ3Jlc3Npb24gQ29lZmZpY2llbnRzIEJhciBDaGFydFxuZXhwb3J0IGZ1bmN0aW9uIHJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydChmZWF0dXJlcywgcmVncmVzc2lvbkNvZWZmcykge1xuICAgIHJlZ3Jlc3Npb25Db2VmZnMubmFtZSA9ICdyZWdyZXNzaW9uIGNvZWZmaWNpZW50JztcbiAgICBsZXQgbmFtZXNPZlByZWRpY3RvcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbmFtZXNPZlByZWRpY3RvcnMucHVzaChjb2wubmFtZSk7XG4gICAgbGV0IHByZWRpY3Rvck5hbWVzQ29sdW1uID0gREcuQ29sdW1uLmZyb21TdHJpbmdzKCdmZWF0dXJlJywgbmFtZXNPZlByZWRpY3RvcnMpO1xuICAgIGxldCBkZlJlZ3JDb2VmcyA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbcHJlZGljdG9yTmFtZXNDb2x1bW4sIHJlZ3Jlc3Npb25Db2VmZnNdKTtcbiAgICBkZlJlZ3JDb2Vmcy5uYW1lID0gJ1JlZ3Jlc3Npb24gQ29lZmZpY2llbnRzJztcbiAgICByZXR1cm4gREcuVmlld2VyLmJhckNoYXJ0KGRmUmVnckNvZWZzLCB7IHRpdGxlOiBkZlJlZ3JDb2Vmcy5uYW1lLCBzcGxpdDogJ2ZlYXR1cmUnLFxuICAgICAgICB2YWx1ZTogJ3JlZ3Jlc3Npb24gY29lZmZpY2llbnQnLCB2YWx1ZUFnZ3JUeXBlOiAnYXZnJyB9KTtcbn1cbi8vIFNjb3JlcyBTY2F0dGVyIFBsb3RcbmV4cG9ydCBmdW5jdGlvbiBzY29yZXNTY2F0dGVyUGxvdChzYW1wbGVzTmFtZXMsIHhTY29yZXMsIHlTY29yZXMpIHtcbiAgICBsZXQgc2NvcmVzQ29sdW1ucyA9IFtzYW1wbGVzTmFtZXNdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeFNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB4U2NvcmVzW2ldLm5hbWUgPSBgeC5zY29yZS50JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeFNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB5U2NvcmVzW2ldLm5hbWUgPSBgeS5zY29yZS51JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeVNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGxldCBzY29yZXMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoc2NvcmVzQ29sdW1ucyk7XG4gICAgc2NvcmVzLm5hbWUgPSAnU2NvcmVzJztcbiAgICAvL2dyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNjb3Jlcyk7XG4gICAgY29uc3QgaW5kZXggPSB4U2NvcmVzLmxlbmd0aCA+IDEgPyAxIDogMDtcbiAgICByZXR1cm4gREcuVmlld2VyLnNjYXR0ZXJQbG90KHNjb3JlcywgeyB0aXRsZTogc2NvcmVzLm5hbWUsXG4gICAgICAgIHg6IHhTY29yZXNbMF0ubmFtZSxcbiAgICAgICAgeTogeFNjb3Jlc1tpbmRleF0ubmFtZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZScsXG4gICAgICAgIGxhYmVsczogc2FtcGxlc05hbWVzLm5hbWVcbiAgICB9KTtcbn1cbi8vIExvYWRpbmcgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gbG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCB4TG9hZGluZ3MpIHtcbiAgICBsZXQgbG9hZGluZ0NvbHMgPSBbXTtcbiAgICBsZXQgbG9hZGluZ0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbG9hZGluZ0xhYmVscy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsb2FkaW5nQ29scy5wdXNoKERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbGFiZWxzJywgbG9hZGluZ0xhYmVscykpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeExvYWRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhMb2FkaW5nc1tpXS5uYW1lID0gYHgubG9hZGluZy5wJHtpICsgMX1gO1xuICAgICAgICBsb2FkaW5nQ29scy5wdXNoKHhMb2FkaW5nc1tpXSk7XG4gICAgfVxuICAgIGxldCBkZkxvYWRpbmdzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGxvYWRpbmdDb2xzKTtcbiAgICBkZkxvYWRpbmdzLm5hbWUgPSAnTG9hZGluZ3MnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGZMb2FkaW5ncywgeyB0aXRsZTogZGZMb2FkaW5ncy5uYW1lLFxuICAgICAgICB4OiB4TG9hZGluZ3NbMF0ubmFtZSxcbiAgICAgICAgeTogeExvYWRpbmdzW3hMb2FkaW5ncy5sZW5ndGggLSAxXS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiAnbGFiZWxzJ1xuICAgIH0pO1xufVxuLy8gQWRkIFBMUyB2aXN1YWxpemF0aW9uXG5leHBvcnQgZnVuY3Rpb24gYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgc2FtcGxlc05hbWVzLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzT3V0cHV0KSB7XG4gICAgbGV0IHZpZXcgPSBncm9rLnNoZWxsLmdldFRhYmxlVmlldyh0YWJsZS5uYW1lKTtcbiAgICAvLyAxLiBQcmVkaWN0ZWQgdnMgUmVmZXJlbmNlIHNjYXR0ZXIgcGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcHJlZGljdCwgcGxzT3V0cHV0WzBdKSk7XG4gICAgLy8gMi4gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG4gICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAvLyAzLiBMb2FkaW5nIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKGxvYWRpbmdTY2F0dGVyUGxvdChmZWF0dXJlcywgcGxzT3V0cHV0WzRdKSk7XG4gICAgLy8gNC4gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHNjb3Jlc1NjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTtcbn1cbiIsIi8vIFRlc3QgZGF0YSBnZW5lcmF0aW9uIHRvb2xzXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBjaGVja0dlbmVyYXRvclNWTWlucHV0cyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIH0gZnJvbSAnLi4vd2FzbS9FREFBUEknO1xuY29uc3QgU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCA9IDA7XG5jb25zdCBTVk1fR0VOX0xBQkVMU19JTkRFWCA9IDE7XG5jb25zdCBTVk1fRkVBVFVSRV9OQU1FID0gJ0ZlYXR1cmUgIyc7XG5jb25zdCBTVk1fTEFCRUxfTkFNRSA9ICdMYWJlbCc7XG4vLyBSZXR1cm5zIHRoZSBkYXRhZnJhbWUgXCJjYXJzXCJcbmV4cG9ydCBmdW5jdGlvbiBjYXJzRGF0YWZyYW1lKCkge1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ21vZGVsJywgWydhbGZhcm9tZW8nLCAnYXVkaScsICdibXcnLCAnY2hldnJvbGV0JywgJ2RvZGdlMScsICdkb2RnZTInLCAnaG9uZGExJywgJ2hvbmRhMicsICdpc3V6dScsICdqYWd1YXInLCAnbWF6ZGEnLCAnbWVyY2VkZXMnLCAnbWVyY3VyeScsICdtaXRzdWJpc2hpJywgJ25pc3NhbjEnLCAnbmlzc2FuMicsICdwZXVnb3QnLCAncGx5bW91dGgnLCAncG9yc2NoZScsICdzYWFiJywgJ3N1YmFydScsICd0b3lvdGExJywgJ3RveW90YTInLCAndG95b3RhMycsICd0b3lvdGE0JywgJ3ZvbGtzd2FnZW4xJywgJ3ZvbGtzd2FnZW4yJywgJ3ZvbHZvMScsICd2b2x2bzInLCAndm9sdm8zJ10pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2RpZXNlbCcsIG5ldyBJbnQzMkFycmF5KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAxXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3R1cmJvJywgbmV3IEludDMyQXJyYXkoWzAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgndHdvLmRvb3JzJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnaGF0Y2hiYWNrJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd3aGVlbC5iYXNlJywgbmV3IEZsb2F0MzJBcnJheShbOTQuNSwgMTA1LjgwMDAwMzA1MTc1NzgxLCAxMDEuMTk5OTk2OTQ4MjQyMTksIDk0LjUsIDkzLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDk2LjUsIDk0LjMwMDAwMzA1MTc1NzgxLCAxMTMsIDkzLjA5OTk5ODQ3NDEyMTEsIDExNS41OTk5OTg0NzQxMjExLCAxMDIuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5NC41LCA5NC41LCA5My42OTk5OTY5NDgyNDIxOSwgMTE0LjE5OTk5Njk0ODI0MjE5LCA4OS41LCA5OS4wOTk5OTg0NzQxMjExLCA5Ny4xOTk5OTY5NDgyNDIxOSwgOTUuNjk5OTk2OTQ4MjQyMTksIDk1LjY5OTk5Njk0ODI0MjE5LCA5OC40MDAwMDE1MjU4Nzg5LCAxMDIuNDAwMDAxNTI1ODc4OSwgOTcuMzAwMDAzMDUxNzU3ODEsIDEwMC40MDAwMDE1MjU4Nzg5LCAxMDQuMzAwMDAzMDUxNzU3ODEsIDEwOS4wOTk5OTg0NzQxMjExLCAxMDkuMDk5OTk4NDc0MTIxMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2xlbmd0aCcsIG5ldyBGbG9hdDMyQXJyYXkoWzE3MS4xOTk5OTY5NDgyNDIyLCAxOTIuNjk5OTk2OTQ4MjQyMiwgMTc2LjgwMDAwMzA1MTc1NzgsIDE1OC44MDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE1MCwgMTc1LjM5OTk5Mzg5NjQ4NDM4LCAxNzAuNjk5OTk2OTQ4MjQyMiwgMTk5LjYwMDAwNjEwMzUxNTYyLCAxNjYuODAwMDAzMDUxNzU3OCwgMjAyLjYwMDAwNjEwMzUxNTYyLCAxNzguMzk5OTkzODk2NDg0MzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNzAuMTk5OTk2OTQ4MjQyMiwgMTY1LjMwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxOTguODk5OTkzODk2NDg0MzgsIDE2OC44OTk5OTM4OTY0ODQzOCwgMTg2LjYwMDAwNjEwMzUxNTYyLCAxNzIsIDE1OC42OTk5OTY5NDgyNDIyLCAxNjYuMzAwMDAzMDUxNzU3OCwgMTc2LjE5OTk5Njk0ODI0MjIsIDE3NS42MDAwMDYxMDM1MTU2MiwgMTcxLjY5OTk5Njk0ODI0MjIsIDE4MC4xOTk5OTY5NDgyNDIyLCAxODguODAwMDAzMDUxNzU3OCwgMTg4LjgwMDAwMzA1MTc1NzgsIDE4OC44MDAwMDMwNTE3NTc4XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnd2lkdGgnLCBuZXcgRmxvYXQzMkFycmF5KFs2NS41LCA3MS40MDAwMDE1MjU4Nzg5LCA2NC44MDAwMDMwNTE3NTc4MSwgNjMuNTk5OTk4NDc0MTIxMDk0LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY0LCA2NS4xOTk5OTY5NDgyNDIxOSwgNjEuNzk5OTk5MjM3MDYwNTUsIDY5LjU5OTk5ODQ3NDEyMTEsIDY0LjE5OTk5Njk0ODI0MjE5LCA3MS42OTk5OTY5NDgyNDIxOSwgNjgsIDY0LjQwMDAwMTUyNTg3ODksIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY4LjQwMDAwMTUyNTg3ODksIDY1LCA2Ni41LCA2NS40MDAwMDE1MjU4Nzg5LCA2My41OTk5OTg0NzQxMjEwOTQsIDY0LjQwMDAwMTUyNTg3ODksIDY1LjU5OTk5ODQ3NDEyMTEsIDY2LjUsIDY1LjUsIDY2LjkwMDAwMTUyNTg3ODksIDY3LjE5OTk5Njk0ODI0MjE5LCA2OC44MDAwMDMwNTE3NTc4MSwgNjguOTAwMDAxNTI1ODc4OV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2hlaWdodCcsIG5ldyBGbG9hdDMyQXJyYXkoWzUyLjQwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU0LjI5OTk5OTIzNzA2MDU1LCA1MiwgNTAuNzk5OTk5MjM3MDYwNTUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTIuNTk5OTk4NDc0MTIxMDk0LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDUzLjUsIDUyLjc5OTk5OTIzNzA2MDU1LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDU2LjI5OTk5OTIzNzA2MDU1LCA1NC43OTk5OTkyMzcwNjA1NSwgNTAuNzk5OTk5MjM3MDYwNTUsIDUzLjUsIDU0LjUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTguNzAwMDAwNzYyOTM5NDUsIDUxLjU5OTk5ODQ3NDEyMTA5NCwgNTYuMDk5OTk4NDc0MTIxMDk0LCA1Mi41LCA1NC41LCA1MywgNTIsIDU0LjkwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU1LjA5OTk5ODQ3NDEyMTA5NCwgNTYuMjAwMDAwNzYyOTM5NDUsIDU1LjUsIDU1LjVdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY3VyYi53ZWlnaHQnLCBuZXcgSW50MzJBcnJheShbMjgyMywgMjg0NCwgMjM5NSwgMTkwOSwgMjEyOCwgMTk2NywgMTk1NiwgMjMwNCwgMjMzNywgNDA2NiwgMTk1MCwgMzc3MCwgMjkxMCwgMTkxOCwgMjAyNCwgMTk1MSwgMTk2NywgMzQzMCwgMjgwMCwgMjY5NSwgMjE5MCwgMTk4NSwgMjI3NSwgMjU1MSwgMjQ4MCwgMjI2MSwgMjY2MSwgMjkxMiwgMzA0OSwgMzIxN10pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdlbmcuc2l6ZScsIG5ldyBJbnQzMkFycmF5KFsxNTIsIDEzNiwgMTA4LCA5MCwgOTgsIDkwLCA5MiwgMTEwLCAxMTEsIDI1OCwgOTEsIDE4MywgMTQwLCA5MiwgOTcsIDk3LCA5MCwgMTUyLCAxOTQsIDEyMSwgMTA4LCA5MiwgMTEwLCAxNDYsIDExMCwgOTcsIDEzNiwgMTQxLCAxNDEsIDE0NV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdob3JzZXBvd2VyJywgbmV3IEludDMyQXJyYXkoWzE1NCwgMTEwLCAxMDEsIDcwLCAxMDIsIDY4LCA3NiwgODYsIDc4LCAxNzYsIDY4LCAxMjMsIDE3NSwgNjgsIDY5LCA2OSwgNjgsIDk1LCAyMDcsIDExMCwgODIsIDYyLCA1NiwgMTE2LCA3MywgNTIsIDExMCwgMTE0LCAxNjAsIDEwNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdwZWFrLnJwbScsIG5ldyBJbnQzMkFycmF5KFs1MDAwLCA1NTAwLCA1ODAwLCA1NDAwLCA1NTAwLCA1NTAwLCA2MDAwLCA1ODAwLCA0ODAwLCA0NzUwLCA1MDAwLCA0MzUwLCA1MDAwLCA1NTAwLCA1MjAwLCA1MjAwLCA1NTAwLCA0MTUwLCA1OTAwLCA1MjUwLCA0NDAwLCA0ODAwLCA0NTAwLCA0ODAwLCA0NTAwLCA0ODAwLCA1NTAwLCA1NDAwLCA1MzAwLCA0ODAwXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3N5bWJvbCcsIG5ldyBJbnQzMkFycmF5KFsxLCAxLCAyLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAtMSwgMSwgMiwgMSwgMSwgMSwgMCwgMywgMiwgMCwgMSwgMCwgMiwgLTEsIDIsIDAsIC0yLCAtMSwgLTFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY2l0eS5tcGcnLCBuZXcgSW50MzJBcnJheShbMTksIDE5LCAyMywgMzgsIDI0LCAzMSwgMzAsIDI3LCAyNCwgMTUsIDMxLCAyMiwgMTksIDM3LCAzMSwgMzEsIDMxLCAyNSwgMTcsIDIxLCAyOCwgMzUsIDM0LCAyNCwgMzAsIDM3LCAxOSwgMjMsIDE5LCAyNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdoaWdod2F5Lm1wZycsIG5ldyBJbnQzMkFycmF5KFsyNiwgMjUsIDI5LCA0MywgMzAsIDM4LCAzNCwgMzMsIDI5LCAxOSwgMzgsIDI1LCAyNCwgNDEsIDM3LCAzNywgMzgsIDI1LCAyNSwgMjgsIDMzLCAzOSwgMzYsIDMwLCAzMywgNDYsIDI0LCAyOCwgMjUsIDI3XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3ByaWNlJywgbmV3IEludDMyQXJyYXkoWzE2NTAwLCAxNzcxMCwgMTY0MzAsIDY1NzUsIDc5NTcsIDYyMjksIDcxMjksIDg4NDUsIDY3ODUsIDM1NTUwLCA3Mzk1LCAzMTYwMCwgMTY1MDMsIDUzODksIDczNDksIDcyOTksIDYyMjksIDEzODYwLCAzNzAyOCwgMTIxNzAsIDc3NzUsIDUzNDgsIDc4OTgsIDk5ODksIDEwNjk4LCA3Nzc1LCAxMzI5NSwgMTI5NDAsIDE5MDQ1LCAyMjQ3MF0pKSxcbiAgICBdKTtcbn0gLy8gY2Fyc0RhdGFmcmFtZVxuLy8gR2VuZXJhdGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmllcnNcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKGtlcm5lbCwga2VybmVsUGFyYW1zLCBuYW1lLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgaW5wdXRzXG4gICAgICAgIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpO1xuICAgICAgICAvLyBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNDb2wgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsICdrZXJuZWxQYXJhbXMnLCBrZXJuZWxQYXJhbXMpO1xuICAgICAgICAvLyBDQUxMIFdBU00tQ09NUFVUQVRJT05TICBcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtc0NvbCwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIFJlbmFtZSBsYWJlbHMgY29sdW1uXG4gICAgICAgIF9vdXRwdXRbU1ZNX0dFTl9MQUJFTFNfSU5ERVhdLm5hbWUgPSBTVk1fTEFCRUxfTkFNRTtcbiAgICAgICAgLy8gUmVuYW1lIGZlYXR1cmUgY29sdW1uc1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBfb3V0cHV0W1NWTV9HRU5fRkVBVFVSRVNfSU5ERVhdKVxuICAgICAgICAgICAgY29sLm5hbWUgPSBTVk1fRkVBVFVSRV9OQU1FICsgY29sLm5hbWU7XG4gICAgICAgIC8vIENyZWF0ZSBkYXRhZnJhbWVcbiAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoX291dHB1dFtTVk1fR0VOX0ZFQVRVUkVTX0lOREVYXSk7XG4gICAgICAgIGRmLm5hbWUgPSBuYW1lO1xuICAgICAgICBkZi5jb2x1bW5zLmFkZChfb3V0cHV0W1NWTV9HRU5fTEFCRUxTX0lOREVYXSk7XG4gICAgICAgIHJldHVybiBkZjtcbiAgICB9KTtcbn0gLy8gdGVzdERhdGFGb3JNYWNoaW5lTGVhcm5pbmdcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyogU3VwcG9ydCB2ZWN0b3IgbWFjaGluZSAoU1ZNKSB0b29scy5cbiAgIEl0J3MgZGV2ZWxvcGVkIGZvciBhcHBseWluZyBpbiBjb21iaW5hdGlvbiB3aXRoIERBVEFHUk9LIHByZWRpY3RpdmUgdG9vbHMuXG5cbiAgIFRyYWluaW5nICYgcHJlZGljdGluZyBhcmUgcHJvdmlkZWQgYnkgd2FzbS1jb21wdXRhdGlvbnMuXG5cbiAgIExlYXN0IHNxdWFyZSBzdXBwb3J0IHZlY3RvciBtYWNoaW5lIChMUy1TVk0pIGlzIGltcGxlbWVudGVkOlxuICAgICBbMV0gU3V5a2VucywgSi4sIFZhbmRld2FsbGUsIEouIFwiTGVhc3QgU3F1YXJlcyBTdXBwb3J0IFZlY3RvciBNYWNoaW5lIENsYXNzaWZpZXJzXCIsXG4gICAgICAgICAgIE5ldXJhbCBQcm9jZXNzaW5nIExldHRlcnMgOSwgMjkzLTMwMCAoMTk5OSkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDIzL0E6MTAxODYyODYwOTc0MlxuKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyLCBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbi8vIDEuIENPTlNUQU5UU1xuLy8ga2VybmVsIHR5cGVzXG5leHBvcnQgY29uc3QgTElORUFSID0gMDtcbmV4cG9ydCBjb25zdCBQT0xZTk9NSUFMID0gMTtcbmV4cG9ydCBjb25zdCBSQkYgPSAyO1xuZXhwb3J0IGNvbnN0IFNJR01PSUQgPSAzO1xuLy8gb3V0cHV0LXJlbGF0ZWRcbmNvbnN0IENPTkZVU0lPTl9NQVRSX1NJWkUgPSA0O1xuY29uc3QgTk9STUFMSVpFRF9EQVRBX0lOREVYID0gMDtcbmNvbnN0IE1FQU5TX0lOREVYID0gMTtcbmNvbnN0IFNURF9ERVZTX0lOREVYID0gMjtcbmNvbnN0IE1PREVMX1BBUkFNU19JTkRFWCA9IDM7XG5jb25zdCBNT0RFTF9XRUlHSFRTX0lOREVYID0gNDtcbmNvbnN0IFBSRURJQ1RFRF9MQUJFTFNfSU5ERVggPSA1O1xuY29uc3QgQ09SUkVDVE5FU1NfSU5ERVggPSA2O1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9JTkRFWCA9IDc7XG5jb25zdCBUUlVFX1BPU0lUSVZFX0lOREVYID0gMDtcbmNvbnN0IEZBTFNFX05FR0FUSVZFX0lOREVYID0gMTtcbmNvbnN0IEZBTFNFX1BPU0lUSVZFX0lOREVYID0gMjtcbmNvbnN0IFRSVUVfTkVHQVRJVkVfSU5ERVggPSAzO1xuLy8ga2VybmVsIHBhcmFtZXRlcnMgaW5kZWNlc1xuY29uc3QgUkJGX1NJR01BX0lOREVYID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfQ19JTkRFWCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0RfSU5ERVggPSAxO1xuY29uc3QgU0lHTU9JRF9LQVBQQV9JTkRFWCA9IDA7XG5jb25zdCBTSUdNT0lEX1RIRVRBX0lOREVYID0gMTtcbi8vIGh5cGVycGFyYW1ldGVycyBsaW1pdHNcbmNvbnN0IEdBTU1BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUkJGX1NJR01BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQgPSAwO1xuLy8gZXJyb3IgbWVzc2FnZXNcbmNvbnN0IFdST05HX0dBTU1BX01FU1NBR0UgPSAnZ2FtbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUkJGX1NJR01BX01FU1NBR0UgPSAnc2lnbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UgPSAnYyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSA9ICdkIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX0tFUk5FTF9NRVNTQUdFID0gJ2luY29ycmVjdCBrZXJuZWwuJztcbi8vIG5hbWVzXG5jb25zdCBMQUJFTFMgPSAnTGFiZWxzJztcbmNvbnN0IFBSRURJQ1RFRCA9ICdwcmVkaWN0ZWQnO1xuY29uc3QgQ09SUkVDVE5FU1MgPSAnY29ycmVjdG5lc3MnO1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9OQU1FID0gJ0NvbmZ1c2lvbiBtYXRyaXgnO1xuY29uc3QgTUVBTiA9ICdtZWFuJztcbmNvbnN0IFNURF9ERVYgPSAnc3RkIGRldic7XG5jb25zdCBNT0RFTF9QQVJBTVNfTkFNRSA9ICdhbHBoYSc7XG5jb25zdCBNT0RFTF9XRUlHSFRTX05BTUUgPSAnd2VpZ2h0JztcbmNvbnN0IEdBTU1BID0gJ2dhbW1hJztcbmNvbnN0IEtFUk5FTCA9ICdrZXJuZWwnO1xuY29uc3QgS0VSTkVMX1BBUkFNUyA9ICdrZXJuZWwgcGFyYW1zJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8xID0gJ2tlcm5lbCBwYXJhbSAxJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8yID0gJ2tlcm5lbCBwYXJhbSAyJztcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX05BTUUgPSAnZmVhdHVyZXMgY291bnQnO1xuY29uc3QgVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FID0gJ3RyYWluIHNhbXBsZXMgY291bnQnO1xuY29uc3QgVFJBSU5fRVJST1IgPSAnVHJhaW4gZXJyb3IsJSc7XG5jb25zdCBLRVJORUxfVFlQRV9UT19OQU1FX01BUCA9IFsnbGluZWFyJywgJ3BvbHlub21pYWwnLCAnUkJGJywgJ3NpZ21vaWQnXTtcbmNvbnN0IFBPU0lUSVZFX05BTUUgPSAncG9zaXRpdmUgKFApJztcbmNvbnN0IE5FR0FUSVZFX05BTUUgPSAnbmVnYXRpdmUgKE4pJztcbmNvbnN0IFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBwb3NpdGl2ZSAoUFApJztcbmNvbnN0IFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBuZWdhdGl2ZSAoUE4pJztcbmNvbnN0IFNFTlNJVElWSVRZID0gJ1NlbnNpdGl2aXR5JztcbmNvbnN0IFNQRUNJRklDSVRZID0gJ1NwZWNpZmljaXR5JztcbmNvbnN0IEJBTEFOQ0VEX0FDQ1VSQUNZID0gJ0JhbGFuY2VkIGFjY3VyYWN5JztcbmNvbnN0IFBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUgPSAnUG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZSc7XG5jb25zdCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFID0gJ05lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWUnO1xuY29uc3QgTUxfUkVQT1JUID0gJ01vZGVsIHJlcG9ydCc7XG5jb25zdCBNTF9SRVBPUlRfUFJFRElDVEVEX0xBQkVMUyA9ICdQcmVkaWN0ZWQgbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMgPSAnVHJhaW4gbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyA9ICdQcmVkaWN0aW9uIGNvcnJlY3RuZXNzJztcbmNvbnN0IFBSRURJQ1RJT04gPSAncHJlZGljdGlvbic7XG4vLyBQYWNrL3VucGFjayBjb25zdGFudHNcbmNvbnN0IEJZVEVTID0gNDtcbmNvbnN0IElOVFNfQ09VTlQgPSAzO1xuY29uc3QgS0VSX1BBUkFNU19DT1VOVCA9IDI7XG5jb25zdCBNT0RFTF9LRVJORUxfSU5ERVggPSAwO1xuY29uc3QgU0FNUExFU19DT1VOVF9JTkRFWCA9IDE7XG5jb25zdCBGRUFUVVJFU19DT1VOVF9JTkRFWCA9IDI7XG4vLyBtaXNjXG5jb25zdCBJTklUX1ZBTFVFID0gMDsgLy8gYW55IG51bWJlciBjYW4gYmUgdXNlZFxuY29uc3QgTFNfU1ZNX0FERF9DT05TVCA9IDE7IC8vIHNlZSBbMV0gZm9yIG1vcmUgZGV0YWlsc1xuLy8gMi4gVE9PTFNcbi8vIENoZWNrIExTLVNWTSBsZWFybmluZyBoeXBlcnBhcmFtZXRlcnNcbmZ1bmN0aW9uIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycykge1xuICAgIC8vIGNoZWNrIGdhbW1hXG4gICAgaWYgKGh5cGVycGFyYW1ldGVycy5nYW1tYSA8PSBHQU1NQV9JTkZJTVVNX0xJTUlUKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfR0FNTUFfTUVTU0FHRSk7XG4gICAgLy8gY2hlY2sga2VybmVsICYgaXRzIHBhcmFtZXRlcnNcbiAgICBzd2l0Y2ggKGh5cGVycGFyYW1ldGVycy5rZXJuZWwpIHtcbiAgICAgICAgY2FzZSBMSU5FQVI6IC8vIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBSQkY6IC8vIHRoZSBjYXNlIG9mIFJCRiBrZXJuZWxcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuc2lnbWEgPD0gUkJGX1NJR01BX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1JCRl9TSUdNQV9NRVNTQUdFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBQT0xZTk9NSUFMOiAvLyB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgLy8gY2hlY2sgY1xuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5jUGFyYW0gPD0gUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGRcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuZFBhcmFtIDw9IFBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgU0lHTU9JRDogLy8gdGhlIGNhc2Ugb2YgcG9seW5vbWlhbCBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICB9IC8vIHN3aXRjaCAgICBcbn0gLy8gY2hlY2tIeXBlcnBhcmFtZXRlcnNcbi8vIFJldHVybmVzIGxhYmVscyBwcmVkaWN0ZWQgYnkgdGhlIG1vZGVsIHNwZWNpZmllZFxuZnVuY3Rpb24gcHJlZGljdChtb2RlbCwgZGF0YXNldCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihtb2RlbC5rZXJuZWxUeXBlLCBtb2RlbC5rZXJuZWxQYXJhbXMsIG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucywgbW9kZWwudHJhaW5MYWJlbHMsIG1vZGVsLm1lYW5zLCBtb2RlbC5zdGREZXZzLCBtb2RlbC5tb2RlbFBhcmFtcywgbW9kZWwubW9kZWxXZWlnaHRzLCBkYXRhc2V0KTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgX291dHB1dCA9IF9yZXN1bHQ7IH0sIF9lcnJvciA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgcmV0dXJuIF9vdXRwdXQ7XG4gICAgfSk7XG59IC8vIHByZWRpY3Rcbi8vIEV2YWx1YXRlIGFjY3VyYWN5IG9mIHRoZSBtb2RlbFxuZnVuY3Rpb24gZXZhbHVhdGVBY2N1cmFjeShtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICAvLyBoZXJlLCB0aGUgY2xhc3NpYyBub3RhdGlvbiBpcyB1c2VkIChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2Vuc2l0aXZpdHlfYW5kX3NwZWNpZmljaXR5KVxuICAgIGxldCBUUCA9IGRhdGFbVFJVRV9QT1NJVElWRV9JTkRFWF07IC8vIHRydWUgcG9zaXRpdmVcbiAgICBsZXQgVE4gPSBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdOyAvLyB0cnVlIG5lZ2F0aXZlXG4gICAgbGV0IEZQID0gZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF07IC8vIGZhbHNlIHBvc2l0aXZlXG4gICAgbGV0IEZOID0gZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF07IC8vIGZhbHNlIG5lZ2F0aXZlXG4gICAgbGV0IFAgPSBUUCArIEZOOyAvLyBwb3NpdGl2ZVxuICAgIGxldCBOID0gRlAgKyBUTjsgLy8gbmVnYXRpdmVcbiAgICBsZXQgVFBSID0gVFAgLyBQOyAvLyB0cnVlIHBvc2l0aXZlIHJhdGVcbiAgICBsZXQgVE5SID0gVE4gLyBOOyAvLyB0cnVlIG5lZ2F0aXZlIHJhdGVcbiAgICBsZXQgUFBWID0gVFAgLyAoVFAgKyBGUCk7IC8vIHBvc2l0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgTlBWID0gVE4gLyAoVE4gKyBGTik7IC8vIG5lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgQUNDID0gKFRQICsgVE4pIC8gKFAgKyBOKTsgLy8gYWNjdXJhY3lcbiAgICBsZXQgQkEgPSAoVFBSICsgVE5SKSAvIDI7IC8vIGJhbGFuY2VkIGFjY3VyYWN5XG4gICAgbW9kZWwuc2Vuc2l0aXZpdHkgPSBUUFI7XG4gICAgbW9kZWwuc3BlY2lmaWNpdHkgPSBUTlI7XG4gICAgbW9kZWwuYmFsYW5jZWRBY2N1cmFjeSA9IEJBO1xuICAgIG1vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlID0gUFBWO1xuICAgIG1vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlID0gTlBWO1xuICAgIG1vZGVsLnRyYWluRXJyb3IgPSAoMSAtIEFDQykgKiAxMDA7IC8vIHRyYWluIGVycm9yLCAlXG59IC8vIGV2YWx1YXRlQWNjdXJhY3lcbi8vIFJldHVybnMgdHJhaW5lZCBMUy1TVk0gbW9kZWwuXG5mdW5jdGlvbiB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGRhdGFzZXQsIGxhYmVscykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGNvcnJlY3RuZXNzIG9mIGh5cGVycGFyYW1ldGVyIGdhbW1hXG4gICAgICAgIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycyk7XG4gICAgICAgIC8vIGNyZWF0ZSBkZWZhdWx0IGtlcm5lbCBwYXJhbXMgYXJyYXlcbiAgICAgICAgY29uc3Qga2VybmVsUGFyYW1zQXJyYXkgPSBbSU5JVF9WQUxVRSwgSU5JVF9WQUxVRV07XG4gICAgICAgIC8vIGZpbGwga2VybmVsUGFyYW1zXG4gICAgICAgIHN3aXRjaCAoaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCkge1xuICAgICAgICAgICAgY2FzZSBMSU5FQVI6IC8vIG5vIGtlcm5lbCBwYXJhbWV0ZXJzIGluIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUkJGOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2YgUkJGLWtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1JCRl9TSUdNQV9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuc2lnbWE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBPTFlOT01JQUw6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfQ19JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuY1BhcmFtO1xuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfRF9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuZFBhcmFtO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTSUdNT0lEOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2Ygc2lnbW9pZCBrZXJuZWxcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX0tBUFBBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5rYXBwYTtcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX1RIRVRBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy50aGV0YTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGluY29ycmVjdCBrZXJuZWwgXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIC8vIGNyZWF0ZSBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBsZXQga2VybmVsUGFyYW1zID0gREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1TLCBrZXJuZWxQYXJhbXNBcnJheSk7XG4gICAgICAgIC8vIGNvbXB1dGUgc2l6ZSBvZiBtb2RlbCBwYXJhbXMgJiBwcmVjb21wdXRlZCB3ZWlndGhzXG4gICAgICAgIGxldCB0cmFpbkNvbHMgPSBkYXRhc2V0LnRvTGlzdCgpO1xuICAgICAgICBsZXQgbW9kZWxQYXJhbXNDb3VudCA9IHRyYWluQ29sc1swXS5sZW5ndGggKyBMU19TVk1fQUREX0NPTlNUO1xuICAgICAgICBsZXQgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQgPSB0cmFpbkNvbHMubGVuZ3RoICsgTFNfU1ZNX0FERF9DT05TVDtcbiAgICAgICAgbGV0IGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQgPSBDT05GVVNJT05fTUFUUl9TSVpFO1xuICAgICAgICAvLyBjYWxsIHdlYmFzc2VtYmx5IHRyYWluaW5nIGZ1bmN0aW9uXG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGh5cGVycGFyYW1ldGVycy5nYW1tYSwgaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICAvLyByZW5hbWUgb3V0cHV0IGNvbHVtbnNcbiAgICAgICAgb3V0cHV0W01FQU5TX0lOREVYXS5uYW1lID0gTUVBTjtcbiAgICAgICAgb3V0cHV0W1NURF9ERVZTX0lOREVYXS5uYW1lID0gU1REX0RFVjtcbiAgICAgICAgb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0ubmFtZSA9IE1PREVMX1BBUkFNU19OQU1FO1xuICAgICAgICBvdXRwdXRbTU9ERUxfV0VJR0hUU19JTkRFWF0ubmFtZSA9IE1PREVMX1dFSUdIVFNfTkFNRTtcbiAgICAgICAgb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLm5hbWUgPSBQUkVESUNURUQ7XG4gICAgICAgIG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0ubmFtZSA9IENPUlJFQ1RORVNTO1xuICAgICAgICBvdXRwdXRbQ09ORlVTSU9OX01BVFJJWF9JTkRFWF0ubmFtZSA9IENPTkZVU0lPTl9NQVRSSVhfTkFNRTtcbiAgICAgICAgLy8gY29tcGxldGUgbW9kZWxcbiAgICAgICAgbGV0IG1vZGVsID0ge1xuICAgICAgICAgICAgdHJhaW5HYW1tYTogaHlwZXJwYXJhbWV0ZXJzLmdhbW1hLFxuICAgICAgICAgICAga2VybmVsVHlwZTogaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCxcbiAgICAgICAgICAgIGtlcm5lbFBhcmFtczoga2VybmVsUGFyYW1zLFxuICAgICAgICAgICAgdHJhaW5MYWJlbHM6IGxhYmVscyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRUcmFpbkRhdGE6IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhvdXRwdXRbTk9STUFMSVpFRF9EQVRBX0lOREVYXSksXG4gICAgICAgICAgICBtZWFuczogb3V0cHV0W01FQU5TX0lOREVYXSxcbiAgICAgICAgICAgIHN0ZERldnM6IG91dHB1dFtTVERfREVWU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFBhcmFtczogb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFdlaWdodHM6IG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXSxcbiAgICAgICAgICAgIHByZWRpY3RlZExhYmVsczogb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLFxuICAgICAgICAgICAgY29ycmVjdG5lc3M6IG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0sXG4gICAgICAgICAgICBjb25mdXNpb25NYXRyaXg6IG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXSxcbiAgICAgICAgICAgIHRyYWluRXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZlYXR1cmVzQ291bnQ6IHRyYWluQ29scy5sZW5ndGgsXG4gICAgICAgICAgICB0cmFpblNhbXBsZXNDb3VudDogdHJhaW5Db2xzWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICBldmFsdWF0ZUFjY3VyYWN5KG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pO1xufSAvLyB0cmFpbkFuZEFuYWx5emVNb2RlbFxuLy8gV3JhcHBlciBmb3IgY29tYmluaW5nIHRoZSBmdW5jdGlvbiBcInRyYWluQW5kQW5hbHl6ZU1vZGVsXCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhaW5lZE1vZGVsKGh5cGVycGFyYW1ldGVycywgZGYsIHByZWRpY3RfY29sdW1uKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBkZi5jb2x1bW5zO1xuICAgICAgICBsZXQgbGFiZWxzID0gY29sdW1ucy5ieU5hbWUocHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBjb2x1bW5zLnJlbW92ZShwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIHJldHVybiB5aWVsZCB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGNvbHVtbnMsIGxhYmVscyk7XG4gICAgfSk7XG59XG4vLyBSZXR1cm5zIGRhdGFmcmFtZSB3aXRoIHNob3J0IGluZm8gYWJvdXQgbW9kZWxcbmZ1bmN0aW9uIGdldE1vZGVsSW5mbyhtb2RlbCkge1xuICAgIGxldCBrZXJuZWxQYXJhbXMgPSBtb2RlbC5rZXJuZWxQYXJhbXMuZ2V0UmF3RGF0YSgpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEdBTU1BLCBbbW9kZWwudHJhaW5HYW1tYV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoS0VSTkVMLCBbS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVBbbW9kZWwua2VybmVsVHlwZV1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1fMSwgW2tlcm5lbFBhcmFtc1swXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTV8yLCBba2VybmVsUGFyYW1zWzFdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgRkVBVFVSRVNfQ09VTlRfTkFNRSwgW21vZGVsLmZlYXR1cmVzQ291bnRdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBUUkFJTl9TQU1QTEVTX0NPVU5UX05BTUUsIFttb2RlbC50cmFpblNhbXBsZXNDb3VudF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFRSQUlOX0VSUk9SLCBbbW9kZWwudHJhaW5FcnJvcl0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEJBTEFOQ0VEX0FDQ1VSQUNZLCBbbW9kZWwuYmFsYW5jZWRBY2N1cmFjeV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFNFTlNJVElWSVRZLCBbbW9kZWwuc2Vuc2l0aXZpdHldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBTUEVDSUZJQ0lUWSwgW21vZGVsLnNwZWNpZmljaXR5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgUE9TSVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlXSlcbiAgICBdKTtcbn1cbi8vIEdldCBkYXRhZnJhbWUgd2l0aCBjb25mdXNpb24gbWF0cml4XG5mdW5jdGlvbiBnZXRDb25mdXNpb25NYXRyaXhERihtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKCcnLCBbUE9TSVRJVkVfTkFNRSwgTkVHQVRJVkVfTkFNRV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2ludCcsIFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FLCBbZGF0YVtUUlVFX1BPU0lUSVZFX0lOREVYXSwgZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdpbnQnLCBQUkVESUNURURfTkVHQVRJVkVfTkFNRSwgW2RhdGFbRkFMU0VfTkVHQVRJVkVfSU5ERVhdLCBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdXSlcbiAgICBdKTtcbn1cbi8vIFNob3cgdHJhaW5pbmcgcmVwb3J0XG5leHBvcnQgZnVuY3Rpb24gc2hvd1RyYWluUmVwb3J0KGRmLCBtb2RlbCkge1xuICAgIGRmLm5hbWUgPSBNTF9SRVBPUlQ7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwudHJhaW5MYWJlbHMpO1xuICAgIGRmLmNvbHVtbnMuYWRkKG1vZGVsLnByZWRpY3RlZExhYmVscyk7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwuY29ycmVjdG5lc3MpO1xuICAgIGxldCBkZlZpZXcgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuZm9ybShnZXRNb2RlbEluZm8obW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTLFxuICAgICAgICBjb2xvcjogbW9kZWwucHJlZGljdGVkTGFiZWxzLm5hbWVcbiAgICB9KSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMsXG4gICAgICAgIGNvbG9yOiBtb2RlbC50cmFpbkxhYmVscy5uYW1lXG4gICAgfSkpO1xuICAgIGRmVmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmdyaWQoZ2V0Q29uZnVzaW9uTWF0cml4REYobW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLmNvcnJlY3RuZXNzLm5hbWVcbiAgICB9KSk7XG59IC8vIHNob3dUcmFpblJlcG9ydFxuLy8gUmV0dXJucyB0cmFpbmVkIG1vZGVsIHBhY2tlZCBpbnRvIFVJbnQ4QXJyYXlcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrZWRNb2RlbChtb2RlbCkge1xuICAgIC8vIGdldCBwcmluY2lwYWwgZGF0YVxuICAgIGxldCBkYXRhQ29scyA9IG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucztcbiAgICBsZXQgc2FtcGxlc0NvdW50ID0gbW9kZWwudHJhaW5TYW1wbGVzQ291bnQ7XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBtb2RlbC5mZWF0dXJlc0NvdW50O1xuICAgIC8qbGV0IGJ1ZmZlclNpemUgPSBCWVRFUyAqICg3ICsgZmVhdHVyZXNDb3VudCAqIHNhbXBsZXNDb3VudFxuICAgICAgKyAzICogZmVhdHVyZXNDb3VudCArIDIgKiBzYW1wbGVzQ291bnQpOyovXG4gICAgLy8gY29tcHV0ZSBzaXplIG9mIHBhY2tlZCBtb2RlbFxuICAgIGxldCBidWZmZXJTaXplID0gQllURVMgKiAoSU5UU19DT1VOVCArIEtFUl9QQVJBTVNfQ09VTlQgK1xuICAgICAgICBzYW1wbGVzQ291bnQgKyBmZWF0dXJlc0NvdW50ICsgZmVhdHVyZXNDb3VudCArIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1RcbiAgICAgICAgKyBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCArIGZlYXR1cmVzQ291bnQgKiBzYW1wbGVzQ291bnQpO1xuICAgIC8vIHBhY2tlZCBtb2RlbFxuICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheShidWZmZXJTaXplKTtcbiAgICBsZXQgYnVmZmVyID0gcmVzdWx0LmJ1ZmZlcjtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAvLyBwYWNrIGtlcm5lbCB0eXBlIGFuZCBzaXplc1xuICAgIGxldCBpbnRzID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIGludHNbTU9ERUxfS0VSTkVMX0lOREVYXSA9IG1vZGVsLmtlcm5lbFR5cGU7XG4gICAgaW50c1tTQU1QTEVTX0NPVU5UX0lOREVYXSA9IHNhbXBsZXNDb3VudDtcbiAgICBpbnRzW0ZFQVRVUkVTX0NPVU5UX0lOREVYXSA9IGZlYXR1cmVzQ291bnQ7XG4gICAgb2Zmc2V0ICs9IElOVFNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIGtlcm5lbCBwYXJhbWV0ZXJzXG4gICAgbGV0IGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIEtFUl9QQVJBTVNfQ09VTlQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwua2VybmVsUGFyYW1zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IEtFUl9QQVJBTVNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIHBhY2sgbGFiZWxzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzYW1wbGVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwudHJhaW5MYWJlbHMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gc2FtcGxlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBtZWFuIHZhbHVlcyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tZWFucy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLnN0ZERldnMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbW9kZWwgcGFyYW10ZXJzXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tb2RlbFBhcmFtcy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1vZGVsJ3MgcHJlY29tcHV0ZWQgd2VpZ2h0c1xuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1vZGVsV2VpZ2h0cy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gcGFjayB0cmFpbmluZyBkYXRhc2V0XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUNvbHMpIHtcbiAgICAgICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgICAgIGZsb2F0cy5zZXQoY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59IC8vIGdldFBhY2tlZE1vZGVsXG4vLyBSZXR1cm5zIHVucGFja2VkIG1vZGVsXG5mdW5jdGlvbiBnZXRVbnBhY2tlZE1vZGVsKHBhY2tlZE1vZGVsKSB7XG4gICAgbGV0IG1vZGVsQnl0ZXMgPSBwYWNrZWRNb2RlbC5idWZmZXI7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgLy8gZXh0cmFjdCBrZXJuZWwgdHlwZSBhbmQgc2l6ZXNcbiAgICBsZXQgaGVhZGVyID0gbmV3IEludDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBJTlRTX0NPVU5UKTtcbiAgICBvZmZzZXQgKz0gSU5UU19DT1VOVCAqIEJZVEVTO1xuICAgIGxldCBzYW1wbGVzQ291bnQgPSBoZWFkZXJbU0FNUExFU19DT1VOVF9JTkRFWF07XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBoZWFkZXJbRkVBVFVSRVNfQ09VTlRfSU5ERVhdO1xuICAgIC8vIGV4dHJhY3QgcGFyYW1ldGVycyBvZiBrZXJuZWxcbiAgICBjb25zdCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShLRVJORUxfUEFSQU1TLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgS0VSX1BBUkFNU19DT1VOVCkpO1xuICAgIG9mZnNldCArPSBLRVJfUEFSQU1TX0NPVU5UICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBsYWJlbHNcbiAgICBjb25zdCB0cmFpbkxhYmVscyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KExBQkVMUywgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBzYW1wbGVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1lYW4gdmFsdWVzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBjb25zdCBtZWFucyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1FQU4sIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IHN0ZERldnMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShTVERfREVWLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIG1vZGVsXG4gICAgY29uc3QgbW9kZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9QQVJBTVNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpKTtcbiAgICBvZmZzZXQgKz0gKHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBtb2RlbCdzIHByZWNvbXB1dGVkIHdlaWdodHNcbiAgICBjb25zdCBtb2RlbFdlaWdodHMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9XRUlHSFRTX05BTUUsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBkYXRhIGNvbHVtbnNcbiAgICBsZXQgZGF0YUNvbHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZXNDb3VudDsgaSsrKSB7XG4gICAgICAgIGRhdGFDb2xzLnB1c2goREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoaS50b1N0cmluZygpLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpKTtcbiAgICAgICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZFRyYWluRGF0YSA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhkYXRhQ29scyk7XG4gICAgbGV0IG1vZGVsID0geyBrZXJuZWxUeXBlOiBoZWFkZXJbTU9ERUxfS0VSTkVMX0lOREVYXSxcbiAgICAgICAga2VybmVsUGFyYW1zOiBrZXJuZWxQYXJhbXMsXG4gICAgICAgIHRyYWluTGFiZWxzOiB0cmFpbkxhYmVscyxcbiAgICAgICAgbWVhbnM6IG1lYW5zLFxuICAgICAgICBzdGREZXZzOiBzdGREZXZzLFxuICAgICAgICBtb2RlbFBhcmFtczogbW9kZWxQYXJhbXMsXG4gICAgICAgIG1vZGVsV2VpZ2h0czogbW9kZWxXZWlnaHRzLFxuICAgICAgICBub3JtYWxpemVkVHJhaW5EYXRhOiBub3JtYWxpemVkVHJhaW5EYXRhXG4gICAgfTtcbiAgICByZXR1cm4gbW9kZWw7XG59IC8vIGdldFVucGFja2VkTW9kZWxcbi8vIFdyYXBwZXIgZm9yIGNvbWJpbmluZyB0aGUgZnVuY3Rpb24gXCJwcmVkaWN0XCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlZGljdGlvbihkZiwgcGFja2VkTW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgbW9kZWwgPSBnZXRVbnBhY2tlZE1vZGVsKG5ldyBVaW50OEFycmF5KHBhY2tlZE1vZGVsKSk7XG4gICAgICAgIGxldCByZXMgPSB5aWVsZCBwcmVkaWN0KG1vZGVsLCBkZi5jb2x1bW5zKTtcbiAgICAgICAgcmVzLm5hbWUgPSBQUkVESUNUSU9OO1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtyZXNdKTtcbiAgICB9KTtcbn0gLy8gZ2V0UHJlZGljdGlvblxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBEbyBub3QgY2hhbmdlIHRoZXNlIGltcG9ydCBsaW5lcyB0byBtYXRjaCBleHRlcm5hbCBtb2R1bGVzIGluIHdlYnBhY2sgY29uZmlndXJhdGlvbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IERlbW9TY3JpcHQgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3R1dG9yaWFscy9zcmMvZGVtby1zY3JpcHQnO1xuaW1wb3J0IHsgX2luaXRFREFBUEkgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjb21wdXRlUENBLCBjb21wdXRlUExTIH0gZnJvbSAnLi9FREF0b29scyc7XG5pbXBvcnQgeyByZW5hbWVQQ0Fjb2x1bW5zLCBhZGRQTFN2aXN1YWxpemF0aW9uLCByZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQsIHNjb3Jlc1NjYXR0ZXJQbG90LCBwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdCB9IGZyb20gJy4vRURBdWknO1xuaW1wb3J0IHsgY2Fyc0RhdGFmcmFtZSwgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbiB9IGZyb20gJy4vZGF0YUdlbmVyYXRvcnMnO1xuaW1wb3J0IHsgTElORUFSLCBSQkYsIFBPTFlOT01JQUwsIFNJR01PSUQsIGdldFRyYWluZWRNb2RlbCwgZ2V0UHJlZGljdGlvbiwgc2hvd1RyYWluUmVwb3J0LCBnZXRQYWNrZWRNb2RlbCB9IGZyb20gJy4vc3ZtJztcbmV4cG9ydCBjb25zdCBfcGFja2FnZSA9IG5ldyBERy5QYWNrYWdlKCk7XG4vL25hbWU6IGluZm9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKCkge1xuICAgIGdyb2suc2hlbGwuaW5mbyhfcGFja2FnZS53ZWJSb290KTtcbn1cbi8vdGFnczogaW5pdFxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX2luaXRFREFBUEkoKTtcbiAgICB9KTtcbn1cbi8vdG9wLW1lbnU6IFRvb2xzIHwgRGF0YSBTY2llbmNlIHwgUHJpbmNpcGFsIENvbXBvbmVudCBBbmFseXNpcy4uLlxuLy9uYW1lOiBQQ0Fcbi8vZGVzY3JpcHRpb246IFByaW5jaXBhbCBjb21wb25lbnQgYW5hbHlzaXMgKFBDQSkuXG4vL2lucHV0OiBkYXRhZnJhbWUgdGFibGVcbi8vaW5wdXQ6IGNvbHVtbl9saXN0IGZlYXR1cmVzXG4vL2lucHV0OiBpbnQgY29tcG9uZW50cyA9IDJcbi8vaW5wdXQ6IGJvb2wgY2VudGVyID0gdHJ1ZVxuLy9pbnB1dDogYm9vbCBzY2FsZSA9IHRydWVcbi8vb3V0cHV0OiBkYXRhZnJhbWUgcmVzdWx0IHthY3Rpb246am9pbih0YWJsZSl9XG5leHBvcnQgZnVuY3Rpb24gUENBKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyLCBzY2FsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiByZW5hbWVQQ0Fjb2x1bW5zKHlpZWxkIGNvbXB1dGVQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBUb29scyB8IERhdGEgU2NpZW5jZSB8IE11bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKS4uLlxuLy9uYW1lOiBNdWx0aXZhcmlhdGUgQW5hbHlzaXMgKFBMUylcbi8vZGVzY3JpcHRpb246IE11bHRpZGltZW5zaW9uYWwgZGF0YSBhbmFseXNpcyB1c2luZyBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbi4gSXQgcmVkdWNlcyB0aGUgcHJlZGljdG9ycyB0byBhIHNtYWxsZXIgc2V0IG9mIHVuY29ycmVsYXRlZCBjb21wb25lbnRzIGFuZCBwZXJmb3JtcyBsZWFzdCBzcXVhcmVzIHJlZ3Jlc3Npb24gb24gdGhlbS5cbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uIG5hbWVzXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlc1xuLy9pbnB1dDogY29sdW1uIHByZWRpY3Rcbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gM1xuZXhwb3J0IGZ1bmN0aW9uIFBMUyh0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcGxzUmVzdWx0cyA9IHlpZWxkIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKTtcbiAgICAgICAgYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBwbHNSZXN1bHRzKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogTVZBIGRlbW9cbi8vZGVzY3JpcHRpb246IE11bHRpZGltZW5zaW9uYWwgZGF0YSBhbmFseXNpcyB1c2luZyBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbi4gSXQgcmVkdWNlcyB0aGUgcHJlZGljdG9ycyB0byBhIHNtYWxsZXIgc2V0IG9mIHVuY29ycmVsYXRlZCBjb21wb25lbnRzIGFuZCBwZXJmb3JtcyBsZWFzdCBzcXVhcmVzIHJlZ3Jlc3Npb24gb24gdGhlbS5cbi8vbWV0YS5kZW1vUGF0aDogQ29tcHV0ZSB8IE11bHRpdmFyaWF0ZSBhbmFseXNpc1xuLy9tZXRhLmlzRGVtb1NjcmlwdDogVHJ1ZVxuZXhwb3J0IGZ1bmN0aW9uIGRlbW9NdWx0aXZhcmlhdGVBbmFseXNpcygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZW1vU2NyaXB0ID0gbmV3IERlbW9TY3JpcHQoJ1BhcnRpYWwgbGVhc3Qgc3F1YXJlcyByZWdyZXNzaW9uJywgJ0FuYWx5c2lzIG9mIG11bHRpZGltZW5zaW9uYWwgZGF0YS4nKTtcbiAgICAgICAgY29uc3QgY2FycyA9IGNhcnNEYXRhZnJhbWUoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IDM7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gY2Fycy5jb2x1bW5zLmJ5TmFtZSgnbW9kZWwnKTtcbiAgICAgICAgY29uc3QgcHJlZGljdCA9IGNhcnMuY29sdW1ucy5ieU5hbWUoJ3ByaWNlJyk7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gY2Fycy5jb2x1bW5zLnJlbW92ZSgncHJpY2UnKS5yZW1vdmUoJ21vZGVsJyk7XG4gICAgICAgIGNvbnN0IHBsc091dHB1dCA9IHlpZWxkIGNvbXB1dGVQTFMoY2FycywgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBzb3VyY2VDYXJzID0gY2Fyc0RhdGFmcmFtZSgpO1xuICAgICAgICBzb3VyY2VDYXJzLm5hbWUgPSAnQ2Fycyc7XG4gICAgICAgIGxldCB2aWV3O1xuICAgICAgICBsZXQgZGlhbG9nO1xuICAgICAgICB5aWVsZCBkZW1vU2NyaXB0XG4gICAgICAgICAgICAuc3RlcCgnRGF0YScsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNvdXJjZUNhcnMpO1xuICAgICAgICAgICAgdmlldyA9IGdyb2suc2hlbGwuZ2V0VGFibGVWaWV3KHNvdXJjZUNhcnMubmFtZSk7XG4gICAgICAgIH0pLCB7IGRlc2NyaXB0aW9uOiAnRWFjaCBjYXIgaGFzIG1hbnkgZmVhdHVyZXMgLSBwYXR0ZXJucyBleHRyYWN0aW9uIGlzIGNvbXBsaWNhdGVkLicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnTW9kZWwnLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBkaWFsb2cgPSB1aS5kaWFsb2coeyB0aXRsZTogJ011bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKScgfSlcbiAgICAgICAgICAgICAgICAuYWRkKHVpLnRhYmxlSW5wdXQoJ1RhYmxlJywgc291cmNlQ2FycykpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5zSW5wdXQoJ0ZlYXR1cmVzJywgY2FycywgZmVhdHVyZXMudG9MaXN0LCB7IGF2YWlsYWJsZTogdW5kZWZpbmVkLCBjaGVja2VkOiBmZWF0dXJlcy5uYW1lcygpIH0pKVxuICAgICAgICAgICAgICAgIC5hZGQodWkuY29sdW1uSW5wdXQoJ05hbWVzJywgY2FycywgbmFtZXMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5JbnB1dCgnUHJlZGljdCcsIGNhcnMsIHByZWRpY3QsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5pbnRJbnB1dCgnQ29tcG9uZW50cycsIGNvbXBvbmVudHMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLm9uT0soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuaW5mbygnTXVsdGl2YXJpYXRlIGFuYWx5c2lzIGhhcyBiZWVuIGFscmVhZHkgcGVyZm9ybWVkLicpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc2hvdyh7IHg6IDQwMCwgeTogMTQwIH0pO1xuICAgICAgICB9KSwgeyBkZXNjcmlwdGlvbjogJ1ByZWRpY3QgY2FyIHByaWNlIGJ5IGl0cyBvdGhlciBmZWF0dXJlcy4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1JlZ3Jlc3Npb24gY29lZmZjaWNpZW50cycsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAgICAgfSksIHsgZGVzY3JpcHRpb246ICdUaGUgZmVhdHVyZSBcImRpZXNlbFwiIGFmZmVjdHMgdGhlIHByaWNlIHRoZSBtb3N0LicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnU2NvcmVzJywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB2aWV3LmFkZFZpZXdlcihzY29yZXNTY2F0dGVyUGxvdChuYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTsgfSksIHsgZGVzY3JpcHRpb246ICdTaW1pbGFyaXRpZXMgJiBkaXNzaW1pbGFyaXRpZXM6IGFsZmFyb21lbyBhbmQgbWVyY2VkZXMgYXJlIGRpZmZlcmVudC4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1ByZWRpY3Rpb24nLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KG5hbWVzLCBwcmVkaWN0LCBwbHNPdXRwdXRbMF0pKTsgfSksIHsgZGVzY3JpcHRpb246ICdDbG9zZXIgdG8gdGhlIGxpbmUgbWVhbnMgYmV0dGVyIHByaWNlIHByZWRpY3Rpb24uJywgZGVsYXk6IDAgfSlcbiAgICAgICAgICAgIC5zdGFydCgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZW5lcmF0ZSBsaW5lYXIgc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnMuXG4vL2lucHV0OiBzdHJpbmcgbmFtZSA9ICdEYXRhJyB7Y2FwdGlvbjogbmFtZTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL2lucHV0OiBpbnQgc2FtcGxlc0NvdW50ID0gMTAwMCB7Y2FwdGlvbjogc2FtcGxlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBpbnQgZmVhdHVyZXNDb3VudCA9IDIge2NhcHRpb246IGZlYXR1cmVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGRvdWJsZSBtaW4gPSAtMzkge2NhcHRpb246IG1pbjsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIG1heCA9IDE3MyB7Y2FwdGlvbjogbWF4OyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgdmlvbGF0b3JzUGVyY2VudGFnZSA9IDUge2NhcHRpb246IHZpb2xhdG9yczsgdW5pdHM6ICU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhTGluZWFyU2VwYXJhYmxlKG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihMSU5FQVIsIFswLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IEdlbmVyYXRlIGxpbmVhciBub24tc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgbm9uLXNlcGFyYmxlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpY2F0b3JzLlxuLy9pbnB1dDogc3RyaW5nIG5hbWUgPSAnRGF0YScge2NhcHRpb246IG5hbWU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9pbnB1dDogZG91YmxlIHNpZ21hID0gOTAgIHtjYXB0aW9uOiBzaWdtYTsgY2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc30gW1JCRi1rZXJuZWwgcGFyYW1hdGVyXVxuLy9pbnB1dDogaW50IHNhbXBsZXNDb3VudCA9IDEwMDAge2NhcHRpb246IHNhbXBsZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogaW50IGZlYXR1cmVzQ291bnQgPSAyIHtjYXB0aW9uOiBmZWF0dXJlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBkb3VibGUgbWluID0gLTM5IHtjYXB0aW9uOiBtaW47IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSBtYXggPSAxNzMge2NhcHRpb246IG1heDsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIHZpb2xhdG9yc1BlcmNlbnRhZ2UgPSA1IHtjYXB0aW9uOiB2aW9sYXRvcnM7IHVuaXRzOiAlOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vb3V0cHV0OiBkYXRhZnJhbWUgZGZcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUxpbmVhck5vblNlcGFyYWJsZShuYW1lLCBzaWdtYSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKFJCRiwgW3NpZ21hLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluTGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5MaW5lYXJLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IExJTkVBUiB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlMaW5lYXJLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IGxpbmVhciBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaW5lYXJLZXJuZWxTVk0oZGYsIG1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGdldFByZWRpY3Rpb24oZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5SQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDEuNSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGJvb2wgdG9TaG93UmVwb3J0ID0gZmFsc2Uge2NhcHRpb246IHRvIHNob3cgcmVwb3J0OyBjYXRlZ29yeTogUmVwb3J0fVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblJCRmtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBzaWdtYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IFJCRiwgc2lnbWE6IHNpZ21hIH0sIGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGlmICh0b1Nob3dSZXBvcnQpXG4gICAgICAgICAgICBzaG93VHJhaW5SZXBvcnQoZGYsIHRyYWluZWRNb2RlbCk7XG4gICAgICAgIHJldHVybiBnZXRQYWNrZWRNb2RlbCh0cmFpbmVkTW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBhcHBseVJCRmtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogUkJGLWtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGFwcGx5XG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGR5bmFtaWMgbW9kZWxcbi8vb3V0cHV0OiBkYXRhZnJhbWUgdGFibGVcbmV4cG9ydCBmdW5jdGlvbiBhcHBseVJCRmtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpblBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgYyA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgZCA9IDIge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbiwgZ2FtbWEsIGMsIGQsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBQT0xZTk9NSUFMLCBjUGFyYW06IGMsIGRQYXJhbTogZCB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogcG9seW5vbWlhbCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBrYXBwYSA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgdGhldGEgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluU2lnbW9pZEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBrYXBwYSwgdGhldGEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBTSUdNT0lELCBrYXBwYToga2FwcGEsIHRoZXRhOiB0aGV0YSB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5TaWdtb2lkS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5U2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTaWdtb2lkS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnIiwiZ2xvYmFsVGhpcyIsInRoaXMiLCJGdW5jdGlvbiIsImUiLCJ3aW5kb3ciLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJpIiwiRXJyb3IiLCJyZXBsYWNlIiwicCIsImIiLCJiYXNlVVJJIiwic2VsZiIsImhyZWYiLCJncm9rIiwidWkiLCJERyIsImFzc3VyZSIsImRlbGF5IiwibXMiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiUCIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm5vdE51bGwiLCJuYW1lIiwiRGVtb1NjcmlwdCIsImNvbnN0cnVjdG9yIiwiZGVzY3JpcHRpb24iLCJpc0F1dG9tYXRpYyIsIm9wdGlvbnMiLCJfYSIsIl9pc0F1dG9tYXRpYyIsIl9hdXRvU3RhcnRGaXJzdFN0ZXAiLCJfY3VycmVudFN0ZXAiLCJfaXNTdG9wcGVkIiwiX2lzQ2FuY2VsbGVkIiwiX2lzU3RlcFByb2Nlc3NlZCIsIl9yb290IiwiaWQiLCJjbGFzc2VzIiwiX3N0ZXBzIiwiX21haW5IZWFkZXIiLCJfaGVhZGVyIiwiX2hlYWRlckRpdiIsIl9zdG9wU3RhcnRCdG4iLCJfY2hhbmdlU3RvcFN0YXRlIiwiX3Jlc3RhcnRCdG4iLCJfcmVzdGFydFNjcmlwdCIsIl9uZXh0U3RlcEJ0biIsIl9uZXh0U3RlcCIsIl9hY3Rpdml0eSIsIl9wcm9ncmVzc0RpdiIsIl9wcm9ncmVzcyIsIl9wcm9ncmVzc1N0ZXBzIiwiX2Nsb3NlQnRuIiwiX2Nsb3NlRG9jayIsImF1dG9TdGFydEZpcnN0U3RlcCIsIm1heCIsImN1cnJlbnRPYmplY3QiLCJzdGVwcyIsInN0ZXBOdW1iZXIiLCJfYWRkSGVhZGVyIiwiX2NyZWF0ZUhlYWRlckRpdiIsIl9jcmVhdGVQcm9ncmVzc0RpdiIsImFwcGVuZCIsImlubmVyVGV4dCIsImZpcnN0Q2hpbGQiLCJjbGFzc05hbWUiLCJfYWRkRGVzY3JpcHRpb24iLCJpbnN0cnVjdGlvbkluZGljYXRvciIsImluc3RydWN0aW9uRGl2IiwiY3VycmVudFN0ZXBEZXNjcmlwdGlvbiIsImVudHJ5IiwiX2luaXRSb290IiwiX2IiLCJfYyIsInNjcmlwdERvY2tOb2RlIiwiQXJyYXkiLCJmcm9tIiwiX25vZGUiLCJwYXJlbnQiLCJjb250YWluZXIiLCJjb250YWluZXJFbGVtZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJyZW1vdmUiLCJhZGQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiZW50cnlJbmRpY2F0b3IiLCJlbnRyeUluc3RydWN0aW9uIiwiY3VycmVudFN0ZXAiLCJzdGVwRGVsYXkiLCJmdW5jIiwiX3Njcm9sbFRvIiwib2Zmc2V0VG9wIiwib2Zmc2V0SGVpZ2h0IiwiX2NvdW50ZG93biIsIm5ld0VudHJ5SW5kaWNhdG9yIiwicmVwbGFjZVdpdGgiLCJuZXh0U3RlcEVudHJ5SW5kaWNhdG9yIiwic3RhcnROZXh0U3RlcEljb24iLCJfc3RhcnRTY3JpcHQiLCJlbGVtZW50IiwieSIsImZvY3VzIiwic2Nyb2xsVG9wIiwiaW5kaWNhdG9yIiwidGltZSIsImNvdW50ZG93bkRpdiIsImNvdW50ZG93biIsInN2ZyIsIl9jcmVhdGVTVkdJbmRpY2F0b3IiLCJwcmVwZW5kIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjcmVhdGVFbGVtZW50TlMiLCJjaXJjbGUiLCJzZXRBdHRyaWJ1dGVOUyIsImljb24iLCJfY2xlYXJSb290IiwiX3NldEluaXRQYXJhbXMiLCJzdGFydCIsImNhbmNlbFNjcmlwdCIsIkludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJDb2x1bW4iLCJmcm9tSW50MzJBcnJheSIsImZyb21GbG9hdDMyQXJyYXkiLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwiYXJnIiwidHlwZSIsImRhdGEiLCJhcnJheSIsImNvbCIsImdldFJhd0RhdGEiLCJ2YWwiLCJhcnJheXMiLCJ0b0xpc3QiLCJwdXNoIiwidmFsMSIsInZhbDIiLCJmdW5jU3BlY2lmaWNhdGlvbiIsImRhdGFGcm9tV2ViV29ya2VyIiwiYXJndW1lbnRzIiwiX2NhbGxSZXN1bHQiLCJjYWxsUmVzdWx0IiwiZnVuY1NwZWNpZmljYXRpb25BcmdzIiwiYXJnc0FmdGVyV2FzbUNhbGwiLCJ0eXBlVG9Db2x1bW5DcmVhdG9yTWFwIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJuYW1lcyIsImNvbHVtbiIsImNvbHVtbnMiLCJrIiwiaiIsImV4dHJhY3ROZXdseUNyZWF0ZWREYXRhIiwiYXJncyIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsIkRhdGFGcmFtZSIsImZyb21Db2x1bW5zIiwiYXJyYXlUb1JldHVybiIsImdldE91dHB1dCIsImNsZWFyTmV3bHlDcmVhdGVkRGF0YSIsIkNPTVBfTUlOIiwiU0FNUExFU19DT1VOVF9NSU4iLCJGRUFUVVJFU19DT1VOVF9NSU4iLCJQRVJDRU5UQUdFX01JTiIsIlBFUkNFTlRBR0VfTUFYIiwiTUFYX0VMRU1FTlRTX0NPVU5UIiwiQ09NUF9QT1NJVFZFX01FUyIsIkNPTVBfRVhDRVNTIiwiSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMiLCJJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMiLCJJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyIsIklOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTIiwiREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTIiwiY2hlY2tDb21wb25lbmV0cyIsImZlYXR1cmVzIiwiY29tcG9uZW50cyIsImJ5SW5kZXgiLCJjb21wdXRlUExTIiwidGFibGUiLCJwcmVkaWN0IiwiX291dHB1dCIsIl9wcm9taXNlIiwiYXN5bmMiLCJjb21wb25lbnRzQ291bnQiLCJ3b3JrZXIiLCJXb3JrZXIiLCJVUkwiLCJwb3N0TWVzc2FnZSIsIkVEQSIsIm9ubWVzc2FnZSIsInRlcm1pbmF0ZSIsIl9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIiLCJfcmVzdWx0IiwiX2Vycm9yIiwicHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3QiLCJzYW1wbGVzTmFtZXMiLCJyZWZlcmVuY2UiLCJwcmVkaWN0aW9uIiwiZGZSZWZlcmVuY2VQcmVkaWN0aW9uIiwidGl0bGUiLCJ4Iiwic2hvd1JlZ3Jlc3Npb25MaW5lIiwibWFya2VyVHlwZSIsImxhYmVscyIsInJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydCIsInJlZ3Jlc3Npb25Db2VmZnMiLCJuYW1lc09mUHJlZGljdG9ycyIsInByZWRpY3Rvck5hbWVzQ29sdW1uIiwiZGZSZWdyQ29lZnMiLCJzcGxpdCIsInZhbHVlQWdnclR5cGUiLCJzY29yZXNTY2F0dGVyUGxvdCIsInhTY29yZXMiLCJ5U2NvcmVzIiwic2NvcmVzQ29sdW1ucyIsInNjb3JlcyIsImluZGV4IiwiU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCIsIlNWTV9HRU5fTEFCRUxTX0lOREVYIiwiU1ZNX0ZFQVRVUkVfTkFNRSIsIlNWTV9MQUJFTF9OQU1FIiwiY2Fyc0RhdGFmcmFtZSIsInRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24iLCJrZXJuZWwiLCJrZXJuZWxQYXJhbXMiLCJzYW1wbGVzQ291bnQiLCJmZWF0dXJlc0NvdW50IiwibWluIiwidmlvbGF0b3JzUGVyY2VudGFnZSIsImNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzIiwia2VybmVsUGFyYW1zQ29sIiwiX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIiwiZGYiLCJMSU5FQVIiLCJQT0xZTk9NSUFMIiwiUkJGIiwiU0lHTU9JRCIsIkNPTkZVU0lPTl9NQVRSX1NJWkUiLCJOT1JNQUxJWkVEX0RBVEFfSU5ERVgiLCJNRUFOU19JTkRFWCIsIlNURF9ERVZTX0lOREVYIiwiTU9ERUxfUEFSQU1TX0lOREVYIiwiTU9ERUxfV0VJR0hUU19JTkRFWCIsIlBSRURJQ1RFRF9MQUJFTFNfSU5ERVgiLCJDT1JSRUNUTkVTU19JTkRFWCIsIkNPTkZVU0lPTl9NQVRSSVhfSU5ERVgiLCJUUlVFX1BPU0lUSVZFX0lOREVYIiwiRkFMU0VfTkVHQVRJVkVfSU5ERVgiLCJGQUxTRV9QT1NJVElWRV9JTkRFWCIsIlRSVUVfTkVHQVRJVkVfSU5ERVgiLCJSQkZfU0lHTUFfSU5ERVgiLCJQT0xZTk9NSUFMX0NfSU5ERVgiLCJQT0xZTk9NSUFMX0RfSU5ERVgiLCJTSUdNT0lEX0tBUFBBX0lOREVYIiwiU0lHTU9JRF9USEVUQV9JTkRFWCIsIkdBTU1BX0lORklNVU1fTElNSVQiLCJSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVCIsIlBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUIiwiUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQiLCJXUk9OR19HQU1NQV9NRVNTQUdFIiwiV1JPTkdfUkJGX1NJR01BX01FU1NBR0UiLCJXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSIsIldST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFIiwiV1JPTkdfS0VSTkVMX01FU1NBR0UiLCJMQUJFTFMiLCJQUkVESUNURUQiLCJDT1JSRUNUTkVTUyIsIkNPTkZVU0lPTl9NQVRSSVhfTkFNRSIsIk1FQU4iLCJTVERfREVWIiwiTU9ERUxfUEFSQU1TX05BTUUiLCJNT0RFTF9XRUlHSFRTX05BTUUiLCJHQU1NQSIsIktFUk5FTCIsIktFUk5FTF9QQVJBTVMiLCJLRVJORUxfUEFSQU1fMSIsIktFUk5FTF9QQVJBTV8yIiwiRkVBVFVSRVNfQ09VTlRfTkFNRSIsIlRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSIsIlRSQUlOX0VSUk9SIiwiS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVAiLCJQT1NJVElWRV9OQU1FIiwiTkVHQVRJVkVfTkFNRSIsIlBSRURJQ1RFRF9QT1NJVElWRV9OQU1FIiwiUFJFRElDVEVEX05FR0FUSVZFX05BTUUiLCJTRU5TSVRJVklUWSIsIlNQRUNJRklDSVRZIiwiQkFMQU5DRURfQUNDVVJBQ1kiLCJQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFIiwiTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSIsIk1MX1JFUE9SVCIsIk1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTIiwiTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyIsIk1MX1JFUE9SVF9DT1JSRUNUTkVTUyIsIlBSRURJQ1RJT04iLCJCWVRFUyIsIklOVFNfQ09VTlQiLCJLRVJfUEFSQU1TX0NPVU5UIiwiTU9ERUxfS0VSTkVMX0lOREVYIiwiU0FNUExFU19DT1VOVF9JTkRFWCIsIkZFQVRVUkVTX0NPVU5UX0lOREVYIiwiSU5JVF9WQUxVRSIsIkxTX1NWTV9BRERfQ09OU1QiLCJnZXRUcmFpbmVkTW9kZWwiLCJoeXBlcnBhcmFtZXRlcnMiLCJwcmVkaWN0X2NvbHVtbiIsImJ5TmFtZSIsImRhdGFzZXQiLCJnYW1tYSIsInNpZ21hIiwiY1BhcmFtIiwiZFBhcmFtIiwiY2hlY2tIeXBlcnBhcmFtZXRlcnMiLCJrZXJuZWxQYXJhbXNBcnJheSIsImthcHBhIiwidGhldGEiLCJ0cmFpbkNvbHMiLCJtb2RlbFBhcmFtc0NvdW50IiwicHJlY29tcHV0ZWRXZWlnaHRzQ291bnQiLCJjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50IiwiX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIiLCJtb2RlbCIsInRyYWluR2FtbWEiLCJrZXJuZWxUeXBlIiwidHJhaW5MYWJlbHMiLCJub3JtYWxpemVkVHJhaW5EYXRhIiwibWVhbnMiLCJzdGREZXZzIiwibW9kZWxQYXJhbXMiLCJtb2RlbFdlaWdodHMiLCJwcmVkaWN0ZWRMYWJlbHMiLCJjb3JyZWN0bmVzcyIsImNvbmZ1c2lvbk1hdHJpeCIsInRyYWluRXJyb3IiLCJ0cmFpblNhbXBsZXNDb3VudCIsIlRQIiwiVE4iLCJGUCIsIkZOIiwiTiIsIlRQUiIsIlROUiIsIlBQViIsIk5QViIsIkFDQyIsIkJBIiwic2Vuc2l0aXZpdHkiLCJzcGVjaWZpY2l0eSIsImJhbGFuY2VkQWNjdXJhY3kiLCJwb3NpdGl2ZVByZWRpY2l0dmVWYWx1ZSIsIm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlIiwiZXZhbHVhdGVBY2N1cmFjeSIsInRyYWluQW5kQW5hbHl6ZU1vZGVsIiwic2hvd1RyYWluUmVwb3J0IiwiZGZWaWV3IiwiYWRkVmlld2VyIiwiZ2V0TW9kZWxJbmZvIiwiY29sb3IiLCJnZXRDb25mdXNpb25NYXRyaXhERiIsImdldFBhY2tlZE1vZGVsIiwiZGF0YUNvbHMiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwib2Zmc2V0IiwiaW50cyIsImZsb2F0cyIsInNldCIsImdldFByZWRpY3Rpb24iLCJwYWNrZWRNb2RlbCIsIm1vZGVsQnl0ZXMiLCJoZWFkZXIiLCJnZXRVbnBhY2tlZE1vZGVsIiwicmVzIiwibm9ybWFsaXplZERhdGEiLCJwcmVjb21wdXRlZFdlaWdodHMiLCJ0YXJnZXREYXRhIiwiX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIiLCJfcGFja2FnZSIsImluZm8iLCJ3ZWJSb290IiwiaW5pdCIsImluaXRFREEiLCJfaW5pdEVEQUFQSSIsIlBDQSIsImNlbnRlciIsInNjYWxlIiwicGNhVGFibGUiLCJyZW5hbWVQQ0Fjb2x1bW5zIiwiY2VudGVyTnVtIiwic2NhbGVOdW0iLCJfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciIsImNvbXB1dGVQQ0EiLCJQTFMiLCJwbHNSZXN1bHRzIiwicGxzT3V0cHV0IiwidmlldyIsInhMb2FkaW5ncyIsImxvYWRpbmdDb2xzIiwibG9hZGluZ0xhYmVscyIsImRmTG9hZGluZ3MiLCJsb2FkaW5nU2NhdHRlclBsb3QiLCJhZGRQTFN2aXN1YWxpemF0aW9uIiwiZGVtb011bHRpdmFyaWF0ZUFuYWx5c2lzIiwiZGVtb1NjcmlwdCIsImNhcnMiLCJzb3VyY2VDYXJzIiwiZGlhbG9nIiwiYXZhaWxhYmxlIiwiY2hlY2tlZCIsIm9uT0siLCJzaG93IiwiY2xvc2UiLCJ0ZXN0RGF0YUxpbmVhclNlcGFyYWJsZSIsInRlc3REYXRhTGluZWFyTm9uU2VwYXJhYmxlIiwidHJhaW5MaW5lYXJLZXJuZWxTVk0iLCJ0b1Nob3dSZXBvcnQiLCJ0cmFpbmVkTW9kZWwiLCJhcHBseUxpbmVhcktlcm5lbFNWTSIsInRyYWluUkJGa2VybmVsU1ZNIiwiYXBwbHlSQkZrZXJuZWxTVk0iLCJ0cmFpblBvbHlub21pYWxLZXJuZWxTVk0iLCJjIiwiZCIsImFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTSIsInRyYWluU2lnbW9pZEtlcm5lbFNWTSIsImFwcGx5U2lnbW9pZEtlcm5lbFNWTSJdLCJzb3VyY2VSb290IjoiIn0=
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsIm1hcHBpbmdzIjoiK0JBQ0lBLEVBQXNCLENBRzFCQSxFLEdDSEFBLEVBQXdCLENBQUNDLEVBQVNDLEtBQ2pDLElBQUksSUFBSUMsS0FBT0QsRUFDWEYsRUFBb0JJLEVBQUVGLEVBQVlDLEtBQVNILEVBQW9CSSxFQUFFSCxFQUFTRSxJQUM1RUUsT0FBT0MsZUFBZUwsRUFBU0UsRUFBSyxDQUFFSSxZQUFZLEVBQU1DLElBQUtOLEVBQVdDLElBRTFFLEVDTERILEVBQXlCUyxHQUVaQSxFQUFVLE9DSHZCVCxFQUFvQlUsRUFBSSxXQUN2QixHQUEwQixpQkFBZkMsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPQyxNQUFRLElBQUlDLFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU9DLEdBQ1IsR0FBc0IsaUJBQVhDLE9BQXFCLE9BQU9BLE1BQ3hDLENBQ0EsQ0FQdUIsR0NBeEJmLEVBQW9CSSxFQUFJLENBQUNZLEVBQUtDLElBQVVaLE9BQU9hLFVBQVVDLGVBQWVDLEtBQUtKLEVBQUtDLEdDQ2xGakIsRUFBb0JxQixFQUFLcEIsSUFDSCxvQkFBWHFCLFFBQTBCQSxPQUFPQyxhQUMxQ2xCLE9BQU9DLGVBQWVMLEVBQVNxQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RuQixPQUFPQyxlQUFlTCxFQUFTLGFBQWMsQ0FBRXVCLE9BQU8sR0FBTyxFLE1DTDlELElBQUlDLEVBQ0F6QixFQUFvQlUsRUFBRWdCLGdCQUFlRCxFQUFZekIsRUFBb0JVLEVBQUVpQixTQUFXLElBQ3RGLElBQUlDLEVBQVc1QixFQUFvQlUsRUFBRWtCLFNBQ3JDLElBQUtILEdBQWFHLElBQ2JBLEVBQVNDLGdCQUNaSixFQUFZRyxFQUFTQyxjQUFjQyxNQUMvQkwsR0FBVyxDQUNmLElBQUlNLEVBQVVILEVBQVNJLHFCQUFxQixVQUM1QyxHQUFHRCxFQUFRRSxPQUVWLElBREEsSUFBSUMsRUFBSUgsRUFBUUUsT0FBUyxFQUNsQkMsR0FBSyxJQUFNVCxHQUFXQSxFQUFZTSxFQUFRRyxLQUFLSixHQUV4RCxDQUlELElBQUtMLEVBQVcsTUFBTSxJQUFJVSxNQUFNLHlEQUNoQ1YsRUFBWUEsRUFBVVcsUUFBUSxPQUFRLElBQUlBLFFBQVEsUUFBUyxJQUFJQSxRQUFRLFlBQWEsS0FDcEZwQyxFQUFvQnFDLEVBQUlaLEMsS0NsQnhCekIsRUFBb0JzQyxFQUFJVixTQUFTVyxTQUFXQyxLQUFLYixTQUFTYyxLLDRaQ0ExRCxNQUFNLEVBQStCQyxLQ0EvQixFQUErQkMsR0NBL0IsRUFBK0JDLEdDQXJDLElBZVdDLEVBMlNKLFNBQVNDLEVBQU1DLEdBQ2xCLE9BM1RrREMsRUEyVGpDcEMsS0EzVDBDcUMsT0EyVHBDLEVBM1RtREMsRUEyVG5DLGtCQUM3QixJQUFJQyxTQUFTOUIsR0FBTStCLFdBQVcvQixFQUFHMEIsSUFDM0MsRUEzVE8sS0FGZ0VNLE9BMlR4QyxLQXpUYkEsRUFBSUYsV0FBVSxTQUFVRyxFQUFTQyxHQUMvQyxTQUFTQyxFQUFVaEMsR0FBUyxJQUFNaUMsRUFBS1AsRUFBVVEsS0FBS2xDLEdBQVMsQ0FBRSxNQUFPVixHQUFLeUMsRUFBT3pDLEVBQUksQ0FBRSxDQUMxRixTQUFTNkMsRUFBU25DLEdBQVMsSUFBTWlDLEVBQUtQLEVBQWlCLE1BQUUxQixHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDN0YsU0FBUzJDLEVBQUtHLEdBSmxCLElBQWVwQyxFQUlhb0MsRUFBT0MsS0FBT1AsRUFBUU0sRUFBT3BDLFFBSjFDQSxFQUl5RG9DLEVBQU9wQyxNQUpoREEsYUFBaUI2QixFQUFJN0IsRUFBUSxJQUFJNkIsR0FBRSxTQUFVQyxHQUFXQSxFQUFROUIsRUFBUSxLQUlqQnNDLEtBQUtOLEVBQVdHLEVBQVcsQ0FDN0dGLEdBQU1QLEVBQVlBLEVBQVVhLE1BQU1mLEVBQVNDLEdBQWMsS0FBS1MsT0FDbEUsSUFQd0MsSUFBVVYsRUFBU0MsRUFBWUksRUFBR0gsQ0E4VDlFLEVBOVNBLFNBQVdMLEdBS1BBLEVBQU9tQixRQUpQLFNBQWlCeEMsRUFBT3lDLEdBQ3BCLEdBQWEsTUFBVHpDLEVBQ0EsTUFBTSxJQUFJVyxNQUFNLEdBQVcsTUFBUjhCLEVBQWUsUUFBVUEsZ0JBQ3BELENBRUgsQ0FORCxDQU1HcEIsSUFBV0EsRUFBUyxDQUFDLElDdEJ4QixJQUFJLEVBQXdDLFNBQVVHLEVBQVNDLEVBQVlJLEVBQUdILEdBRTFFLE9BQU8sSUFBS0csSUFBTUEsRUFBSUYsV0FBVSxTQUFVRyxFQUFTQyxHQUMvQyxTQUFTQyxFQUFVaEMsR0FBUyxJQUFNaUMsRUFBS1AsRUFBVVEsS0FBS2xDLEdBQVMsQ0FBRSxNQUFPVixHQUFLeUMsRUFBT3pDLEVBQUksQ0FBRSxDQUMxRixTQUFTNkMsRUFBU25DLEdBQVMsSUFBTWlDLEVBQUtQLEVBQWlCLE1BQUUxQixHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDN0YsU0FBUzJDLEVBQUtHLEdBSmxCLElBQWVwQyxFQUlhb0MsRUFBT0MsS0FBT1AsRUFBUU0sRUFBT3BDLFFBSjFDQSxFQUl5RG9DLEVBQU9wQyxNQUpoREEsYUFBaUI2QixFQUFJN0IsRUFBUSxJQUFJNkIsR0FBRSxTQUFVQyxHQUFXQSxFQUFROUIsRUFBUSxLQUlqQnNDLEtBQUtOLEVBQVdHLEVBQVcsQ0FDN0dGLEdBQU1QLEVBQVlBLEVBQVVhLE1BQU1mLEVBQVNDLEdBQWMsS0FBS1MsT0FDbEUsR0FDSixFQU1PLE1BQU1RLEVBQ1RDLFlBQVlGLEVBQU1HLEVBQWFDLEdBQWMsRUFBT0MsR0FDaEQsSUFBSUMsRUFDSjNELEtBQUtxRCxLQUFPLEdBQ1pyRCxLQUFLd0QsWUFBYyxHQUNuQnhELEtBQUs0RCxjQUFlLEVBQ3BCNUQsS0FBSzZELHFCQUFzQixFQUMzQjdELEtBQUs4RCxhQUFlLEVBQ3BCOUQsS0FBSytELFlBQWEsRUFDbEIvRCxLQUFLZ0UsY0FBZSxFQUNwQmhFLEtBQUtpRSxrQkFBbUIsRUFDeEJqRSxLQUFLa0UsTUFBUSxNQUFPLEdBQUksQ0FBRUMsR0FBSSxjQUMxQkMsUUFBUyxtREFDYnBFLEtBQUtxRSxPQUFTLEdBQ2RyRSxLQUFLc0UsWUFBYyxRQUFTLEdBQUkseUJBQ2hDdEUsS0FBS3VFLFFBQVUsS0FBTSxJQUNyQnZFLEtBQUt3RSxXQUFhLE9BQVEsR0FBSSx5QkFDOUJ4RSxLQUFLeUUsY0FBZ0IsU0FBVSxTQUFVLFVBQVUsSUFBTXpFLEtBQUswRSxvQkFBb0IsZ0JBQ2xGMUUsS0FBSzJFLFlBQWMsU0FBVSxTQUFVLFNBQVMsSUFBTTNFLEtBQUs0RSxrQkFBa0IsV0FDN0U1RSxLQUFLNkUsYUFBZSxTQUFVLFNBQVUsU0FBUyxLQUN4QzdFLEtBQUtpRSxrQkFDTmpFLEtBQUs4RSxXQUFXLEdBQ3JCLGFBQ0g5RSxLQUFLK0UsVUFBWSxRQUFTLEdBQUksOEJBQzlCL0UsS0FBS2dGLGFBQWUsT0FBUSxHQUFJLDJCQUNoQ2hGLEtBQUtpRixVQUFZLFVBQVcsWUFDNUJqRixLQUFLa0YsZUFBaUIsVUFBVyxJQUNqQ2xGLEtBQUttRixVQUFZLFNBQVUsU0FBVSxpQkFBaUIsSUFBTW5GLEtBQUtvRixjQUFjLGdCQUMvRXBGLEtBQUtxRCxLQUFPQSxFQUNackQsS0FBS3dELFlBQWNBLEVBQ25CeEQsS0FBSzRELGFBQWVILEVBQ3BCekQsS0FBSzZELG9CQUE4RyxRQUF2RkYsRUFBS0QsYUFBeUMsRUFBU0EsRUFBUTJCLDBCQUF1QyxJQUFQMUIsR0FBZ0JBLEVBQzNJM0QsS0FBS2lGLFVBQVVLLElBQU0sRUFDckJ0RixLQUFLaUYsVUFBVXJFLE1BQVEsRUFDdkIwQyxFQUFXaUMsY0FBZ0J2RixJQUMvQixDQUVJd0YsWUFDQSxPQUFPeEYsS0FBS3FFLE1BQ2hCLENBRUlvQixpQkFDQSxPQUFPekYsS0FBS3FFLE9BQU9oRCxNQUN2QixDQUVBcUUsYUFDSTFGLEtBQUsyRixtQkFDTDNGLEtBQUs0RixxQkFDTDVGLEtBQUtzRSxZQUFZdUIsT0FBTzdGLEtBQUt3RSxXQUFZeEUsS0FBS2dGLGFBQ2xELENBRUFXLG1CQUNJM0YsS0FBS3VFLFFBQVF1QixVQUFZOUYsS0FBS3FELEtBQzlCckQsS0FBS3dFLFdBQVdxQixPQUFPN0YsS0FBS21GLFdBQzVCbkYsS0FBS3dFLFdBQVdxQixPQUFPN0YsS0FBS3VFLFNBQzVCdkUsS0FBSzZFLGFBQWFrQixXQUFXQyxVQUFZLHdCQUN6Q2hHLEtBQUt3RSxXQUFXcUIsT0FBTzdGLEtBQUs0RCxhQUFlNUQsS0FBS3lFLGNBQWdCekUsS0FBSzZFLGFBQ3pFLENBRUFlLHFCQUNJNUYsS0FBS2lGLFVBQVVLLElBQU10RixLQUFLeUYsV0FDMUJ6RixLQUFLZ0YsYUFBYWEsT0FBTzdGLEtBQUtpRixXQUM5QmpGLEtBQUtrRixlQUFpQixVQUFXLFNBQVNsRixLQUFLaUYsVUFBVXJFLFlBQVlaLEtBQUt5RixjQUMxRXpGLEtBQUtnRixhQUFhYSxPQUFPN0YsS0FBS2tGLGVBQ2xDLENBRUFlLGtCQUNJLElBQUl0QyxFQUNKM0QsS0FBSytFLFVBQVVjLE9BQU8sTUFBTzdGLEtBQUt3RCxZQUFhLCtCQUMvQyxJQUFLLElBQUlsQyxFQUFJLEVBQUdBLEVBQUl0QixLQUFLeUYsV0FBWW5FLElBQUssQ0FDdEMsSUFBSTRFLEVBQXVCLFNBQVUsU0FDaENsRyxLQUFLNEQsY0FDSSxJQUFOdEMsSUFDQTRFLEVBQXVCLFNBQVUsUUFBUSxJQUFNbEcsS0FBSzhFLGFBQWEsYUFDakVvQixFQUFxQkYsVUFBWSx5QkFHekMsTUFBTUcsRUFBaUIsTUFBT25HLEtBQUtxRSxPQUFPL0MsR0FBRytCLEtBQU0sbUNBQzdDK0MsRUFBeUIsTUFBeUMsUUFBakN6QyxFQUFLM0QsS0FBS3FFLE9BQU8vQyxHQUFHb0MsZUFBNEIsSUFBUEMsT0FBZ0IsRUFBU0EsRUFBR0gsWUFBYSx5Q0FDbkg2QyxFQUFRLE9BQVEsQ0FDbEJILEVBQ0FDLEdBQ0QsdUJBQ0huRyxLQUFLK0UsVUFBVWMsT0FBT1EsRUFBT0QsRUFDakMsQ0FDSixDQUVBRSxZQUNJLElBQUkzQyxFQUFJNEMsRUFBSUMsRUFDWixrQ0FBc0MsRUFDdEMsMEJBQThCLEVBQzlCLE1BQU1DLEVBQWlCQyxNQUFNQyxLQUFLLHVDQUEwQyxHQUM1RTNHLEtBQUs0RyxNQUFRLHlCQUE0QjVHLEtBQUtrRSxNQUFPLGlCQUFtQnVDLEVBQWdCLEtBQzBELFFBQTdJRixFQUFtRixRQUE3RTVDLEVBQUs4QyxFQUFlSSxPQUFPQyxVQUFVQyxpQkFBaUJDLHlCQUFzQyxJQUFQckQsT0FBZ0IsRUFBU0EsRUFBR3NELHdCQUFxQyxJQUFQVixPQUFnQixFQUFTQSxFQUFHVyxVQUFVQyxTQUFTLGdDQUN2SCxRQUE3RVgsRUFBS0MsRUFBZUksT0FBT0MsVUFBVUMsaUJBQWlCQyx5QkFBc0MsSUFBUFIsR0FBeUJBLEVBQUdTLGlCQUFpQkcsVUFDdklwSCxLQUFLNEcsTUFBTUUsVUFBVUMsaUJBQWlCRyxVQUFVRyxJQUFJLG1DQUNwRHJILEtBQUswRixhQUNMMUYsS0FBS2tFLE1BQU0yQixPQUFPN0YsS0FBS3NFLGFBQ3ZCdEUsS0FBS2lHLGtCQUNMakcsS0FBS2tFLE1BQU0yQixPQUFPN0YsS0FBSytFLFVBQzNCLENBRUFELFlBQ0ksSUFBSW5CLEVBQUk0QyxFQUNSLE9BQU8sRUFBVXZHLFVBQU0sT0FBUSxHQUFRLFlBQ25DQSxLQUFLaUUsa0JBQW1CLEVBQ25CakUsS0FBSzRELGVBQ041RCxLQUFLNkUsYUFBYXFDLFVBQVVHLElBQUksWUFDaENySCxLQUFLNkUsYUFBYWtCLFdBQVdtQixVQUFVRyxJQUFJLGdCQUUvQyxNQUFNaEIsRUFBUXJHLEtBQUsrRSxVQUFVdUMsdUJBQXVCLHVCQUF1QnRILEtBQUs4RCxjQUMxRXlELEVBQWlCdkgsS0FBSytFLFVBQVV1Qyx1QkFBdUIsYUFBYXRILEtBQUs4RCxjQUN6RTBELEVBQW1CeEgsS0FBSytFLFVBQVV1Qyx1QkFBdUIsa0NBQWtDdEgsS0FBSzhELGNBQ3RHeUQsRUFBZXZCLFVBQVkseUNBQzNCd0IsRUFBaUJOLFVBQVVFLE9BQU8sVUFDbENJLEVBQWlCTixVQUFVRyxJQUFJLFdBQy9CLE1BQU1JLEVBQWNwQixFQUNkcUIsR0FBK0QsUUFBakQvRCxFQUFLM0QsS0FBS3FFLE9BQU9yRSxLQUFLOEQsY0FBY0osZUFBNEIsSUFBUEMsT0FBZ0IsRUFBU0EsRUFBR3pCLE9BQ25ELFFBQWpEcUUsRUFBS3ZHLEtBQUtxRSxPQUFPckUsS0FBSzhELGNBQWNKLGVBQTRCLElBQVA2QyxPQUFnQixFQUFTQSxFQUFHckUsTUFBUSxVQUM1RmxDLEtBQUtxRSxPQUFPckUsS0FBSzhELGNBQWM2RCxPQUNyQzNILEtBQUs0SCxVQUFVNUgsS0FBS2tFLE1BQU91RCxFQUFZSSxVQUFZN0gsS0FBS3NFLFlBQVl3RCxjQUNoRTlILEtBQUs0RCxxQkFDQzVELEtBQUsrSCxXQUFXMUIsRUFBT2tCLEVBQWdCRyxTQUN2Q3hGLEVBQU13RixJQUVoQixNQUFNTSxFQUFvQixTQUFVLFNBT3BDLEdBTkFULEVBQWVVLFlBQVlELEdBQzNCQSxFQUFrQmhDLFVBQVkseUJBQzlCaEcsS0FBS2lGLFVBQVVyRSxRQUNmWixLQUFLa0YsZUFBZVksVUFBWSxTQUFTOUYsS0FBS2lGLFVBQVVyRSxZQUFZWixLQUFLeUYsYUFDekV6RixLQUFLOEQsZUFDTDlELEtBQUtpRSxrQkFBbUIsRUFDcEJqRSxLQUFLOEQsZUFBaUI5RCxLQUFLeUYsWUFLL0IsSUFBS3pGLEtBQUs0RCxhQUFjLENBQ3BCLE1BQU1zRSxFQUF5QmxJLEtBQUsrRSxVQUFVdUMsdUJBQXVCLGFBQWF0SCxLQUFLOEQsY0FDakZxRSxFQUFvQixTQUFVLFFBQVEsSUFBTW5JLEtBQUs4RSxhQUFhLGFBQ3BFcUQsRUFBa0JuQyxVQUFZLHdCQUM5QmtDLEVBQXVCRCxZQUFZRSxHQUNuQ25JLEtBQUs2RSxhQUFhcUMsVUFBVUUsT0FBTyxZQUNuQ3BILEtBQUs2RSxhQUFha0IsV0FBV21CLFVBQVVFLE9BQU8sY0FDbEQsT0FYSXBILEtBQUs0RCxhQUFlNUQsS0FBS3lFLGNBQWN3RCxZQUFZakksS0FBSzJFLGFBQ3BEM0UsS0FBSzZFLGFBQWFvRCxZQUFZakksS0FBSzJFLFlBVy9DLEdBQ0osQ0FFQXlELGVBQ0ksT0FBTyxFQUFVcEksVUFBTSxPQUFRLEdBQVEsWUFDbkMsSUFBSyxJQUFJc0IsRUFBSXRCLEtBQUs4RCxhQUFjeEMsRUFBSXRCLEtBQUt5RixhQUNqQ3pGLEtBQUsrRCxhQUFjL0QsS0FBS2dFLGFBRHFCMUMsVUFHM0N0QixLQUFLOEUsV0FFbkIsR0FDSixDQU1BOEMsVUFBVVMsRUFBU0MsR0FDZkQsRUFBUUUsUUFDUkYsRUFBUUcsVUFBWUYsQ0FDeEIsQ0FPQVAsV0FBV00sRUFBU0ksRUFBV0MsR0FDM0IsT0FBTyxFQUFVMUksVUFBTSxPQUFRLEdBQVEsWUFDbkMsTUFBTTJJLEVBQWUsTUFBTyxHQUFJLHlCQUNoQ0YsRUFBVXZCLFVBQVVHLElBQUksVUFDeEIsSUFBSXVCLEVBQVlGLEVBQU8sSUFDdkIsTUFBTUcsRUFBTTdJLEtBQUs4SSxvQkFBb0JGLEdBQ3JDRCxFQUFhOUMsT0FBT2dELEdBQ3BCUixFQUFRVSxRQUFRSixHQUNoQixNQUFNSyxFQUFXQyxhQUFZLEtBQ3pCTCxJQUNrQixJQUFkQSxJQUNBTSxjQUFjRixHQUNkTCxFQUFhdkIsU0FDYnFCLEVBQVV2QixVQUFVRSxPQUFPLFVBQzNCcUIsRUFBVXZCLFVBQVVHLElBQUksV0FDNUIsR0FDRCxJQUNQLEdBQ0osQ0FNQXlCLG9CQUFvQkYsR0FDaEIsTUFBTUMsRUFBTTdILFNBQVNtSSxnQkFBZ0IsNkJBQThCLE9BQzdEQyxFQUFTcEksU0FBU21JLGdCQUFnQiw2QkFBOEIsVUFNdEUsT0FMQUMsRUFBT0MsZUFBZSxLQUFNLEtBQU0sS0FDbENELEVBQU9DLGVBQWUsS0FBTSxLQUFNLEtBQ2xDRCxFQUFPQyxlQUFlLEtBQU0sSUFBSyxLQUNqQ0QsRUFBT0MsZUFBZSxLQUFNLFFBQVMsd0JBQXdCVCwrQkFDN0RDLEVBQUloRCxPQUFPdUQsR0FDSlAsQ0FDWCxDQUVBbkUsbUJBQ0ksTUFBTTRFLEVBQU90SixLQUFLeUUsY0FBYzZDLHVCQUF1QixhQUN2RGdDLEVBQUssR0FBR3RELFVBQVksd0JBQ3BCaEcsS0FBSytELFlBQWMvRCxLQUFLK0QsV0FDbkIvRCxLQUFLK0QsYUFDTnVGLEVBQUssR0FBR3RELFVBQVkseUJBQ2ZoRyxLQUFLaUUsa0JBQ05qRSxLQUFLb0ksZUFFakIsQ0FFQXhELGlCQUNJLDBCQUE2QjVFLEtBQUs0RyxPQUNsQyxtQkFDQTVHLEtBQUt1SixhQUNMdkosS0FBS3dKLGlCQUNMeEosS0FBS3lKLE9BQ1QsQ0FFQUYsYUFDSXZKLEtBQUtrRSxNQUFRLE1BQU8sR0FBSSxDQUFFQyxHQUFJLGNBQWVDLFFBQVMsbURBQ3REcEUsS0FBS3NFLFlBQWMsUUFBUyxHQUFJLHlCQUNoQ3RFLEtBQUt1RSxRQUFVLEtBQU0sSUFDckJ2RSxLQUFLd0UsV0FBYSxPQUFRLEdBQUkseUJBQzlCeEUsS0FBSytFLFVBQVksUUFBUyxHQUFJLDhCQUM5Qi9FLEtBQUtnRixhQUFlLE9BQVEsR0FBSSwyQkFDaENoRixLQUFLaUYsVUFBWSxVQUFXLFlBQzVCakYsS0FBS2tGLGVBQWlCLFVBQVcsSUFDakNsRixLQUFLaUYsVUFBVUssSUFBTSxFQUNyQnRGLEtBQUtpRixVQUFVckUsTUFBUSxDQUMzQixDQUVBNEksaUJBQ0l4SixLQUFLOEQsYUFBZSxFQUNwQjlELEtBQUsrRCxZQUFhLEVBQ2xCL0QsS0FBS2dFLGNBQWUsRUFDUGhFLEtBQUt5RSxjQUFjNkMsdUJBQXVCLGFBQ2xELEdBQUd0QixVQUFZLHlCQUNwQmhHLEtBQUs2RSxhQUFhcUMsVUFBVUUsT0FBTyxXQUN2QyxDQUVBaEMsYUFDSSwwQkFBNkJwRixLQUFLNEcsT0FDbEM1RyxLQUFLMEosY0FDVCxDQUVBQSxlQUNJMUosS0FBS2dFLGNBQWUsRUFDcEJWLEVBQVdpQyxjQUFnQixJQUMvQixDQVFBMUMsS0FBS1EsRUFBTXNFLEVBQU1qRSxHQU1iLE9BTEExRCxLQUFLcUUsT0FBT3JFLEtBQUt3RixNQUFNbkUsUUFBVSxDQUM3QmdDLEtBQU1BLEVBQ05zRSxLQUFNQSxFQUNOakUsUUFBU0EsR0FFTjFELElBQ1gsQ0FFQXlKLFFBQ0ksT0FBTyxFQUFVekosVUFBTSxPQUFRLEdBQVEsWUFDbkNBLEtBQUtzRyxZQUNMLGdCQUFtQnRHLEtBQUtxRCxNQUNwQnJELEtBQUs0RCxhQUNMNUQsS0FBS29JLGVBR0xwSSxLQUFLNkQsNEJBQ0M3RCxLQUFLOEUsWUFDbkIsR0FDSixFQUVKeEIsRUFBV2lDLGNBQWdCLEtDblNIb0UsV0FDQUMsYUFTZTVILEdBQUc2SCxPQUFPQyxlQUNWOUgsR0FBRzZILE9BQU9FLGlCQ2JqRCxNQUNNQyxFQUFXLE1BQ1hDLEVBQW9CLGNBQ3BCQyxFQUFrQixZQUNsQkMsRUFBcUIsZUFDckJDLEVBQXlCLGtCQUN6QkMsRUFBbUIsYUFDbkJDLEVBQXVCLGdCQUN2QkMsRUFBd0IsaUJBQ3hCQyxFQUFzQixlQUN0QkMsRUFBUyxTQUNUQyxFQUFjLGNBQ2RDLEVBQWMsWUFDZEMsRUFBaUIsZUFDakJDLEVBQU0sTUFDTkMsRUFBUSxRQUNSQyxFQUFtQixtQkFDbkJDLEVBQVUsVUFDVkMsRUFBVyxNQUNYQyxFQUFjLFNBcUJkLEVBQVUsQ0FDQyxVQUFhdkIsV0FDYixZQUFlQyxhQUNmLGFBQWdCQSxhQUNoQixnQkFBbUJBLGFBQ25CLFdBQWNELFdBQ2QsY0FBaUJBLFdBQ2pCLGVBQWtCQyxhQUNsQixhQUFnQkQsWUFvQjFCLFNBQVMsRUFBWXdCLEVBQW1CQyxHQUMzQyxJQUNJQyxFQURBQyxFQUFlLEdBSWZoSyxFQUFJLEVBQ1IsSUFBSSxNQUFNL0IsS0FBTzRMLEVBQW1CLENBQ2hDLE1BQU1JLEVBQU1KLEVBQWtCNUwsR0FDeEJpTSxFQUFPRCxFQUFJQyxLQUdqQixHQUFHak0sSUFBUW1MLEVBQVgsQ0FJQSxPQUFPYyxHQUdILEtBQUt4QixFQUNMLEtBQUtpQixFQUNMLEtBQUtDLEVBQ0RLLEVBQUlFLEtBQU9MLEVBQVU5SixHQUNyQkEsSUFDQSxNQUdKLEtBQUs0SSxFQUNMLEtBQUtELEVBRUQsSUFBSXlCLEVBS0FDLEVBQU1QLEVBQVU5SixHQUtmb0ssRUFGRUMsRUFBSUgsT0FBU1AsR0FBY08sSUFBU3RCLEdBQ2xDeUIsRUFBSUgsT0FBU04sR0FBaUJNLElBQVN2QixFQUNuQzBCLEVBQUlDLGFBRUosSUFBSSxFQUFRSixHQUFNRyxFQUFJQyxjQVNuQ0wsRUFBSUUsS0FBTyxDQUFFLE1BQVNDLEVBQ1QsVUFBYUEsRUFBTXJLLFFBRWhDQyxJQUNBLE1BR0osS0FBS2tKLEVBQ0wsS0FBS0QsRUFDRCxJQUFJc0IsRUFBTSxFQUVWUixFQUFNRSxFQUFJWixHQUFhRSxHQUduQmdCLEVBREFWLEVBQWtCRSxHQUFLRyxPQUFTeEIsRUFDMUJtQixFQUFrQkUsR0FBS0ksS0FFdkJOLEVBQWtCRSxHQUFLSSxLQUFLRixFQUFJWixHQUFhRyxJQUV2RFMsRUFBSUUsS0FBTyxDQUFDLFVBQWFJLEdBRXpCdkssSUFDQSxNQUdKLEtBQUsrSSxFQUNMLEtBQUtGLEVBQ0QsSUFBSTJCLEVBQVMsR0FPYixJQUFJLElBQUlILEtBQU9QLEVBQVU5SixHQUFHeUssU0FDbkJKLEVBQUlILE9BQVNQLEdBQWNPLElBQVN0QixHQUNuQ3lCLEVBQUlILE9BQVNOLEdBQWlCTSxJQUFTdkIsRUFDN0M2QixFQUFPRSxLQUFLTCxFQUFJQyxjQUVoQkUsRUFBT0UsS0FBSyxJQUFJLEVBQVFSLEdBQU1HLEVBQUlDLGVBU3RDTCxFQUFJRSxLQUFPLENBQUUsT0FBVUssRUFDbkIsVUFBYUEsRUFBTyxHQUFHekssT0FDdkIsYUFBZ0J5SyxFQUFPekssUUFFM0JDLElBQ0EsTUFHSixLQUFLZ0osRUFDTCxLQUFLRixFQUNELElBQUk2QixFQUFPLEVBQ1BDLEVBQU8sRUFFWGIsRUFBTUUsRUFBSVosR0FBYUUsR0FHbkJvQixFQURBZCxFQUFrQkUsR0FBS0csT0FBU3hCLEVBQ3pCbUIsRUFBa0JFLEdBQUtJLEtBRXZCTixFQUFrQkUsR0FBS0ksS0FBS0YsRUFBSVosR0FBYUcsSUFFeERPLEVBQU1FLEVBQUlYLEdBQWdCQyxHQU90QnFCLEVBREFmLEVBQWtCRSxHQUFLRyxPQUFTeEIsRUFDekJtQixFQUFrQkUsR0FBS0ksS0FFdkJOLEVBQWtCRSxHQUFLSSxLQUFLRixFQUFJWCxHQUFnQkUsSUFFM0RTLEVBQUlFLEtBQU8sQ0FBQyxVQUFhUSxFQUN2QixhQUFnQkMsR0FFbEI1SyxJQUNBLE1BRUosUUFDSSxPQUdSZ0ssRUFBYVUsS0FBS1QsRUE5SE4sQ0ErSGhCLENBS0EsT0FBT0QsQ0FDWCxDQXlkTyxTQUFTLEVBQVVhLEVBQW1CQyxHQUN6Q0QsRUFBa0JFLFVBQVVDLFlBQWNGLEVBQWtCRyxXQTlMaEUsU0FBaUNDLEVBQXVCQyxHQUVwRCxNQUFNQyxFQUF5QixDQUFDLGdCQUFtQjFLLEdBQUc2SCxPQUFPRSxpQkFDN0IsY0FBaUIvSCxHQUFHNkgsT0FBT0MsZUFDM0IsZUFBa0I5SCxHQUFHNkgsT0FBT0UsaUJBQzVCLGFBQWdCL0gsR0FBRzZILE9BQU9DLGdCQUUxRCxJQUFJeEksRUFBSSxFQUVSLElBQUksTUFBTS9CLEtBQU9pTixFQUNqQixDQUNJLE1BQU1qQixFQUFNaUIsRUFBc0JqTixHQUVsQyxPQUFPZ00sRUFBSUMsTUFHUCxLQUFLeEIsRUFDTCxLQUFLaUIsRUFDTCxLQUFLQyxFQUlMLEtBQUtoQixFQUNMLEtBQUtELEVBQ0wsS0FBS0UsRUFDTCxLQUFLRSxFQUNELE1BR0osS0FBS0UsRUFDTCxLQUFLQyxFQUNELElBQUluSCxFQUdXc0osTUFBWnBCLEVBQUlsSSxLQUNIQSxHQUFPLEdBQUl1SixXQUVYQyxFQUFRdEIsRUFBSWxJLEtBRWhCa0ksRUFBSXVCLE9BQVNKLEVBQXVCbkIsRUFBSUMsTUFBTW5JLEVBQzFDb0osRUFBa0JuTCxHQUFHb0ssT0FDekIsTUFHSixLQUFLcEIsRUFDTCxLQUFLRixFQUNELElBQUkyQyxFQUFVLEdBQ1YxTCxFQUFTb0wsRUFBa0JuTCxHQUFHd0ssT0FBT3pLLE9BRXJDd0wsRUFBUSxHQUdaLEdBQWdCRixNQUFicEIsRUFBSXNCLE1BQ0gsSUFBSSxJQUFJRyxFQUFJLEVBQUdBLEdBQUszTCxFQUFRMkwsSUFDeEJILEVBQU1iLEtBQUssRUFBSVksaUJBQ2xCQyxFQUFRdEIsRUFBSXNCLE1BRWpCLElBQUksSUFBSUksRUFBSSxFQUFHQSxFQUFJNUwsRUFBUTRMLElBQ3ZCRixFQUFRZixLQUFLVSxFQUF1Qm5CLEVBQUlDLE1BQU1xQixFQUFNSSxHQUNoRFIsRUFBa0JuTCxHQUFHd0ssT0FBT21CLEtBRXBDMUIsRUFBSXdCLFFBQVVBLEVBU3RCekwsR0FDSixDQUNKLENBd0hJNEwsQ0FBd0JmLEVBQWtCRSxVQUFXRCxFQUFrQmUsTUFFdkUsSUFBSUMsRUF2SFIsU0FBbUJqQixHQUNmLElBQUlrQixFQUFTbEIsRUFBa0JrQixPQUUvQixNQUFNQyxFQUFxQixDQUFDLGdCQUFtQixVQUNuQixjQUFpQixVQUNqQixlQUFrQixTQUNsQixhQUFnQixVQUU1QyxPQUFPRCxFQUFPN0IsTUFFVixLQUFLeEIsRUFDTCxLQUFLaUIsRUFDTCxLQUFLQyxFQUNELE9BQU9pQixFQUFrQkUsVUFBVWdCLEVBQU9FLFFBRzlDLEtBQUs5QyxFQUNELE9BQU8wQixFQUFrQkUsVUFBVWdCLEVBQU9FLFFBQVFULE9BR3RELEtBQUsvQixFQUNELE9BQU8vSSxHQUFHd0wsVUFBVUMsWUFBWXRCLEVBQWtCRSxVQUFVZ0IsRUFBT0UsUUFBUVIsU0FHL0UsS0FBSy9CLEVBQ0QsSUFBSTBDLEVBQWdCLEdBR3BCLElBQUksSUFBSXJLLEtBQVFnSyxFQUFPRSxPQUFRLENBQzNCLElBQUloQyxFQUFNWSxFQUFrQkUsVUFBVWhKLEdBQ3RDcUssRUFBYzFCLEtBQUtULEVBQUkrQixFQUFtQi9CLEVBQUlDLE9BQ2xELENBRUEsT0FBT2tDLEVBUW5CLENBOEVpQkMsQ0FBVXhCLEdBTXZCLE9BakZKLFNBQStCSyxHQUMzQixJQUFJLE1BQU1qTixLQUFPaU4sRUFBdUIsQ0FDcEMsTUFBTWpCLEVBQU1pQixFQUFzQmpOLEdBRWxDLE9BQVFnTSxFQUFJQyxNQUNSLEtBQUt4QixFQUNMLEtBQUtpQixFQUNMLEtBQUtDLEVBQ0wsS0FBS2hCLEVBQ0wsS0FBS0QsRUFDTCxLQUFLSSxFQUNMLEtBQUtGLEVBQ0QsTUFFSixLQUFLSyxFQUNMLEtBQUtELEVBQ0RnQixFQUFJdUIsT0FBUyxLQUNiLE1BRUosS0FBS3hDLEVBQ0wsS0FBS0YsRUFDRG1CLEVBQUl3QixRQUFVLEtBTzFCLENBQ0osQ0FrRElhLENBQXNCekIsRUFBa0JFLFdBRWpDZSxDQUNYLENDL3JCQSxNQUFNUyxFQUFXLEVBQ1hDLEVBQW9CLEVBQ3BCQyxFQUFxQixFQUNyQkMsRUFBaUIsRUFDakJDLEVBQWlCLElBQ2pCQyxFQUFxQixJQUVyQkMsRUFBbUIsK0JBQ25CQyxFQUFjLHVEQUNkQyxFQUEwQiw2QkFDMUJDLEVBQTJCLDZCQUMzQkMsRUFBMEIsNEJBQzFCQyxFQUE2Qiw2REFDN0JDLEVBQTJCLHdCQUUxQixTQUFTQyxFQUFpQkMsRUFBVUMsR0FDdkMsR0FBSUEsRUFBYWYsRUFDYixNQUFNLElBQUl0TSxNQUFNNE0sR0FDcEIsR0FBSVMsRUFBYUQsRUFBU3ROLE9BQ3RCLE1BQU0sSUFBSUUsTUFBTTZNLEdBQ3BCLEdBQUlPLEVBQVN0TixPQUFTc04sRUFBU0UsUUFBUSxHQUFHeE4sT0FBUzZNLEVBQy9DLE1BQU0sSUFBSTNNLE1BQU1rTixFQUN4QixDQ3ZCQSxJQUFJLEVBQXdDLFNBQVVyTSxFQUFTQyxFQUFZSSxFQUFHSCxHQUUxRSxPQUFPLElBQUtHLElBQU1BLEVBQUlGLFdBQVUsU0FBVUcsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVWhDLEdBQVMsSUFBTWlDLEVBQUtQLEVBQVVRLEtBQUtsQyxHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDMUYsU0FBUzZDLEVBQVNuQyxHQUFTLElBQU1pQyxFQUFLUCxFQUFpQixNQUFFMUIsR0FBUyxDQUFFLE1BQU9WLEdBQUt5QyxFQUFPekMsRUFBSSxDQUFFLENBQzdGLFNBQVMyQyxFQUFLRyxHQUpsQixJQUFlcEMsRUFJYW9DLEVBQU9DLEtBQU9QLEVBQVFNLEVBQU9wQyxRQUoxQ0EsRUFJeURvQyxFQUFPcEMsTUFKaERBLGFBQWlCNkIsRUFBSTdCLEVBQVEsSUFBSTZCLEdBQUUsU0FBVUMsR0FBV0EsRUFBUTlCLEVBQVEsS0FJakJzQyxLQUFLTixFQUFXRyxFQUFXLENBQzdHRixHQUFNUCxFQUFZQSxFQUFVYSxNQUFNZixFQUFTQyxHQUFjLEtBQUtTLE9BQ2xFLEdBQ0osRUFnQk8sU0FBU2dNLEVBQVdDLEVBQU9KLEVBQVVLLEVBQVNKLEdBQ2pELE9BQU8sRUFBVTVPLFVBQU0sT0FBUSxHQUFRLFlBRW5DLElBQUlpUCxFQURKUCxFQUFpQkMsRUFBVUMsR0FFM0IsSUFBSU0sRUNnQkxDLGVBQXdESixFQUFPSixFQUFVSyxFQUFTSSxHQUN2RixPQUFPLElBQUk3TSxTQUFRLENBQUNHLEVBQVNDLEtBQzNCLE1BQU0wTSxFQUFTLElBQUlDLE9BQU8sSUFBSUMsSUFBSSxrQkFDbENGLEVBQU9HLFlBQVksRUFBWUMsSUFBa0MsNkJBQUVwRCxVQUFVLENBQUNzQyxFQUFVSyxFQUFTSSxLQUNqR0MsRUFBT0ssVUFBWSxTQUFTeFAsR0FDMUJtUCxFQUFPTSxZQUNQak4sRUFBUSxFQUFVK00sSUFBa0MsNkJBQUd2UCxFQUFFdUwsTUFDM0QsSUFFSixDRHpCdUJtRSxDQUF5Q2IsRUFBT0osRUFBVUssRUFBU0osR0FFbEYsYUFETU0sRUFBU2hNLE1BQUsyTSxJQUFhWixFQUFVWSxDQUFPLElBQUtDLElBQVksTUFBTSxJQUFJdk8sTUFBTSxVQUFVdU8sSUFBUyxJQUMvRmIsQ0FDWCxHQUNKLENFdkJPLFNBQVNjLEVBQW9DQyxFQUFjQyxFQUFXQyxHQUN6RUEsRUFBVzdNLEtBQU80TSxFQUFVNU0sS0FBTyxjQUNuQyxJQUFJOE0sRUFBd0Isd0JBQXlCLENBQUNILEVBQWNDLEVBQVdDLElBRS9FLE9BREFDLEVBQXNCOU0sS0FBTywwQkFDdEIscUJBQXNCOE0sRUFBdUIsQ0FBRUMsTUFBT0QsRUFBc0I5TSxLQUMvRWdOLEVBQUdKLEVBQVU1TSxLQUNiaUYsRUFBRzRILEVBQVc3TSxLQUNkaU4sb0JBQW9CLEVBQ3BCQyxXQUFZLFNBQ1pDLE9BQVFSLEVBQWEzTSxNQUU3QixDQUVPLFNBQVNvTixFQUErQjlCLEVBQVUrQixHQUNyREEsRUFBaUJyTixLQUFPLHlCQUN4QixJQUFJc04sRUFBb0IsR0FDeEIsSUFBSyxNQUFNaEYsS0FBT2dELEVBQ2RnQyxFQUFrQjNFLEtBQUtMLEVBQUl0SSxNQUMvQixJQUFJdU4sRUFBdUIscUJBQXNCLFVBQVdELEdBQ3hERSxFQUFjLHdCQUF5QixDQUFDRCxFQUFzQkYsSUFFbEUsT0FEQUcsRUFBWXhOLEtBQU8sMEJBQ1osa0JBQW1Cd04sRUFBYSxDQUFFVCxNQUFPUyxFQUFZeE4sS0FBTXlOLE1BQU8sVUFDckVsUSxNQUFPLHlCQUEwQm1RLGNBQWUsT0FDeEQsQ0FFTyxTQUFTQyxFQUFrQmhCLEVBQWNpQixFQUFTQyxHQUNyRCxJQUFJQyxFQUFnQixDQUFDbkIsR0FDckIsSUFBSyxJQUFJMU8sRUFBSSxFQUFHQSxFQUFJMlAsRUFBUTVQLE9BQVFDLElBQ2hDMlAsRUFBUTNQLEdBQUcrQixLQUFPLFlBQVkvQixFQUFJLElBQ2xDNlAsRUFBY25GLEtBQUtpRixFQUFRM1AsSUFFL0IsSUFBSyxJQUFJQSxFQUFJLEVBQUdBLEVBQUk0UCxFQUFRN1AsT0FBUUMsSUFDaEM0UCxFQUFRNVAsR0FBRytCLEtBQU8sWUFBWS9CLEVBQUksSUFDbEM2UCxFQUFjbkYsS0FBS2tGLEVBQVE1UCxJQUUvQixJQUFJOFAsRUFBUyx3QkFBeUJELEdBQ3RDQyxFQUFPL04sS0FBTyxTQUVkLE1BQU1nTyxFQUFRSixFQUFRNVAsT0FBUyxFQUFJLEVBQUksRUFDdkMsT0FBTyxxQkFBc0IrUCxFQUFRLENBQUVoQixNQUFPZ0IsRUFBTy9OLEtBQ2pEZ04sRUFBR1ksRUFBUSxHQUFHNU4sS0FDZGlGLEVBQUcySSxFQUFRSSxHQUFPaE8sS0FDbEJrTixXQUFZLFNBQ1pDLE9BQVFSLEVBQWEzTSxNQUU3QixDQ3REQSxJQUFJLEVBQXdDLFNBQVVqQixFQUFTQyxFQUFZSSxFQUFHSCxHQUUxRSxPQUFPLElBQUtHLElBQU1BLEVBQUlGLFdBQVUsU0FBVUcsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVWhDLEdBQVMsSUFBTWlDLEVBQUtQLEVBQVVRLEtBQUtsQyxHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDMUYsU0FBUzZDLEVBQVNuQyxHQUFTLElBQU1pQyxFQUFLUCxFQUFpQixNQUFFMUIsR0FBUyxDQUFFLE1BQU9WLEdBQUt5QyxFQUFPekMsRUFBSSxDQUFFLENBQzdGLFNBQVMyQyxFQUFLRyxHQUpsQixJQUFlcEMsRUFJYW9DLEVBQU9DLEtBQU9QLEVBQVFNLEVBQU9wQyxRQUoxQ0EsRUFJeURvQyxFQUFPcEMsTUFKaERBLGFBQWlCNkIsRUFBSTdCLEVBQVEsSUFBSTZCLEdBQUUsU0FBVUMsR0FBV0EsRUFBUTlCLEVBQVEsS0FJakJzQyxLQUFLTixFQUFXRyxFQUFXLENBQzdHRixHQUFNUCxFQUFZQSxFQUFVYSxNQUFNZixFQUFTQyxHQUFjLEtBQUtTLE9BQ2xFLEdBQ0osRUFJQSxNQUFNd08sRUFBeUIsRUFDekJDLEVBQXVCLEVBQ3ZCQyxFQUFtQixZQUNuQkMsR0FBaUIsUUFFaEIsU0FBU0MsS0FDWixPQUFPLHdCQUF5QixDQUM1QixxQkFBc0IsUUFBUyxDQUFDLFlBQWEsT0FBUSxNQUFPLFlBQWEsU0FBVSxTQUFVLFNBQVUsU0FBVSxRQUFTLFNBQVUsUUFBUyxXQUFZLFVBQVcsYUFBYyxVQUFXLFVBQVcsU0FBVSxXQUFZLFVBQVcsT0FBUSxTQUFVLFVBQVcsVUFBVyxVQUFXLFVBQVcsY0FBZSxjQUFlLFNBQVUsU0FBVSxXQUN6Vix3QkFBeUIsU0FBVSxJQUFJL0gsV0FBVyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxLQUMxSSx3QkFBeUIsUUFBUyxJQUFJQSxXQUFXLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEtBQ3pJLHdCQUF5QixZQUFhLElBQUlBLFdBQVcsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsS0FDN0ksd0JBQXlCLFlBQWEsSUFBSUEsV0FBVyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxLQUM3SSwwQkFBMkIsYUFBYyxJQUFJQyxhQUFhLENBQUMsS0FBTSxtQkFBb0IsbUJBQW9CLEtBQU0sa0JBQW1CLGtCQUFtQixrQkFBbUIsS0FBTSxrQkFBbUIsSUFBSyxpQkFBa0Isa0JBQW1CLG1CQUFvQixrQkFBbUIsS0FBTSxLQUFNLGtCQUFtQixtQkFBb0IsS0FBTSxpQkFBa0Isa0JBQW1CLGtCQUFtQixrQkFBbUIsaUJBQWtCLGtCQUFtQixrQkFBbUIsa0JBQW1CLG1CQUFvQixrQkFBbUIscUJBQ3hnQiwwQkFBMkIsU0FBVSxJQUFJQSxhQUFhLENBQUMsa0JBQW1CLGtCQUFtQixrQkFBbUIsa0JBQW1CLGtCQUFtQixrQkFBbUIsSUFBSyxtQkFBb0Isa0JBQW1CLG1CQUFvQixrQkFBbUIsbUJBQW9CLG1CQUFvQixrQkFBbUIsa0JBQW1CLGtCQUFtQixrQkFBbUIsbUJBQW9CLG1CQUFvQixtQkFBb0IsSUFBSyxrQkFBbUIsa0JBQW1CLGtCQUFtQixtQkFBb0Isa0JBQW1CLGtCQUFtQixrQkFBbUIsa0JBQW1CLHFCQUMxa0IsMEJBQTJCLFFBQVMsSUFBSUEsYUFBYSxDQUFDLEtBQU0saUJBQWtCLGtCQUFtQixtQkFBb0Isa0JBQW1CLGtCQUFtQixHQUFJLGtCQUFtQixrQkFBbUIsaUJBQWtCLGtCQUFtQixrQkFBbUIsR0FBSSxpQkFBa0Isa0JBQW1CLGtCQUFtQixrQkFBbUIsaUJBQWtCLEdBQUksS0FBTSxpQkFBa0IsbUJBQW9CLGlCQUFrQixpQkFBa0IsS0FBTSxLQUFNLGlCQUFrQixrQkFBbUIsa0JBQW1CLG9CQUN0ZiwwQkFBMkIsU0FBVSxJQUFJQSxhQUFhLENBQUMsbUJBQW9CLGtCQUFtQixrQkFBbUIsR0FBSSxrQkFBbUIsbUJBQW9CLG1CQUFvQixtQkFBb0IsS0FBTSxrQkFBbUIsbUJBQW9CLGtCQUFtQixrQkFBbUIsa0JBQW1CLEtBQU0sS0FBTSxtQkFBb0Isa0JBQW1CLG1CQUFvQixtQkFBb0IsS0FBTSxLQUFNLEdBQUksR0FBSSxtQkFBb0Isa0JBQW1CLG1CQUFvQixrQkFBbUIsS0FBTSxRQUM3ZSx3QkFBeUIsY0FBZSxJQUFJRCxXQUFXLENBQUMsS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLFFBQ3RPLHdCQUF5QixXQUFZLElBQUlBLFdBQVcsQ0FBQyxJQUFLLElBQUssSUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUksSUFBSyxJQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUksSUFBSyxJQUFLLElBQUssT0FDM0wsd0JBQXlCLGFBQWMsSUFBSUEsV0FBVyxDQUFDLElBQUssSUFBSyxJQUFLLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssR0FBSSxJQUFLLElBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxPQUN4TCx3QkFBeUIsV0FBWSxJQUFJQSxXQUFXLENBQUMsSUFBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sSUFBTSxLQUFNLEtBQU0sS0FBTSxJQUFNLEtBQU0sSUFBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLFFBQ25PLHdCQUF5QixTQUFVLElBQUlBLFdBQVcsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksS0FDL0ksd0JBQXlCLFdBQVksSUFBSUEsV0FBVyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxNQUN6Syx3QkFBeUIsY0FBZSxJQUFJQSxXQUFXLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLE1BQzVLLHdCQUF5QixRQUFTLElBQUlBLFdBQVcsQ0FBQyxNQUFPLE1BQU8sTUFBTyxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxNQUFPLEtBQU0sTUFBTyxNQUFPLEtBQU0sS0FBTSxLQUFNLEtBQU0sTUFBTyxNQUFPLE1BQU8sS0FBTSxLQUFNLEtBQU0sS0FBTSxNQUFPLEtBQU0sTUFBTyxNQUFPLE1BQU8sVUFFclAsQ0FFTyxTQUFTZ0ksR0FBZ0NDLEVBQVFDLEVBQWN4TyxFQUFNeU8sRUFBY0MsRUFBZUMsRUFBSzFNLEVBQUsyTSxHQUMvRyxPQUFPLEVBQVVqUyxVQUFNLE9BQVEsR0FBUSxhSmZwQyxTQUFpQzhSLEVBQWNDLEVBQWVDLEVBQUsxTSxFQUFLMk0sR0FDM0UsR0FBSUQsR0FBTzFNLEVBQ1AsTUFBTSxJQUFJL0QsTUFBTThNLEdBQ3BCLEdBQUkwRCxFQUFnQmhFLEVBQ2hCLE1BQU0sSUFBSXhNLE1BQU0rTSxHQUNwQixHQUFJd0QsRUFBZWhFLEVBQ2YsTUFBTSxJQUFJdk0sTUFBTWdOLEdBQ3BCLEdBQUswRCxFQUFzQmpFLEdBQW9CaUUsRUFBc0JoRSxFQUNqRSxNQUFNLElBQUkxTSxNQUFNaU4sRUFDeEIsQ0lRUTBELENBQXdCSixFQUFjQyxFQUFlQyxFQUFLMU0sRUFBSzJNLEdBRS9ELE1BQU1FLEVBQWtCLGtCQUFtQixTQUFVLGVBQWdCTixHQUVyRSxJQUFJNUMsRUFDQUMsRUZZTEMsZUFBMkN5QyxFQUFRQyxFQUFjQyxFQUFjQyxFQUFlQyxFQUFLMU0sRUFBSzJNLEdBQzdHLE9BQU8sSUFBSTFQLFNBQVEsQ0FBQ0csRUFBU0MsS0FDM0IsTUFBTTBNLEVBQVMsSUFBSUMsT0FBTyxJQUFJQyxJQUFJLG1CQUNsQ0YsRUFBT0csWUFBWSxFQUFZQyxJQUFxQixnQkFBRXBELFVBQVUsQ0FBQ3VGLEVBQVFDLEVBQWNDLEVBQWNDLEVBQWVDLEVBQUsxTSxFQUFLMk0sS0FDOUg1QyxFQUFPSyxVQUFZLFNBQVN4UCxHQUMxQm1QLEVBQU9NLFlBQ1BqTixFQUFRLEVBQVUrTSxJQUFxQixnQkFBR3ZQLEVBQUV1TCxNQUM5QyxJQUVKLENFckJ1QjJHLENBQTRCUixFQUFRTyxFQUFpQkwsRUFBY0MsRUFBZUMsRUFBSzFNLEVBQUsyTSxTQUNyRy9DLEVBQVNoTSxNQUFLMk0sSUFBYVosRUFBVVksQ0FBTyxJQUFLQyxJQUFZLE1BQU0sSUFBSXZPLE1BQU0sVUFBVXVPLElBQVMsSUFFdEdiLEVBQVFzQyxHQUFzQmxPLEtBQU9vTyxHQUVyQyxJQUFLLE1BQU05RixLQUFPc0QsRUFBUXFDLEdBQ3RCM0YsRUFBSXRJLEtBQU9tTyxFQUFtQjdGLEVBQUl0SSxLQUV0QyxNQUFNZ1AsRUFBSyx3QkFBeUJwRCxFQUFRcUMsSUFHNUMsT0FGQWUsRUFBR2hQLEtBQU9BLEVBQ1ZnUCxFQUFHdEYsUUFBUTFGLElBQUk0SCxFQUFRc0MsSUFDaEJjLENBQ1gsR0FDSixDQzdEQSxJQUFJLEdBQXdDLFNBQVVqUSxFQUFTQyxFQUFZSSxFQUFHSCxHQUUxRSxPQUFPLElBQUtHLElBQU1BLEVBQUlGLFdBQVUsU0FBVUcsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVWhDLEdBQVMsSUFBTWlDLEVBQUtQLEVBQVVRLEtBQUtsQyxHQUFTLENBQUUsTUFBT1YsR0FBS3lDLEVBQU96QyxFQUFJLENBQUUsQ0FDMUYsU0FBUzZDLEVBQVNuQyxHQUFTLElBQU1pQyxFQUFLUCxFQUFpQixNQUFFMUIsR0FBUyxDQUFFLE1BQU9WLEdBQUt5QyxFQUFPekMsRUFBSSxDQUFFLENBQzdGLFNBQVMyQyxFQUFLRyxHQUpsQixJQUFlcEMsRUFJYW9DLEVBQU9DLEtBQU9QLEVBQVFNLEVBQU9wQyxRQUoxQ0EsRUFJeURvQyxFQUFPcEMsTUFKaERBLGFBQWlCNkIsRUFBSTdCLEVBQVEsSUFBSTZCLEdBQUUsU0FBVUMsR0FBV0EsRUFBUTlCLEVBQVEsS0FJakJzQyxLQUFLTixFQUFXRyxFQUFXLENBQzdHRixHQUFNUCxFQUFZQSxFQUFVYSxNQUFNZixFQUFTQyxHQUFjLEtBQUtTLE9BQ2xFLEdBQ0osRUFlTyxNQUFNd1AsR0FBUyxFQUNUQyxHQUFhLEVBQ2JDLEdBQU0sRUFDTkMsR0FBVSxFQUVqQkMsR0FBc0IsRUFDdEJDLEdBQXdCLEVBQ3hCQyxHQUFjLEVBQ2RDLEdBQWlCLEVBQ2pCQyxHQUFxQixFQUNyQkMsR0FBc0IsRUFDdEJDLEdBQXlCLEVBQ3pCQyxHQUFvQixFQUNwQkMsR0FBeUIsRUFDekJDLEdBQXNCLEVBQ3RCQyxHQUF1QixFQUN2QkMsR0FBdUIsRUFDdkJDLEdBQXNCLEVBRXRCQyxHQUFrQixFQUNsQkMsR0FBcUIsRUFDckJDLEdBQXFCLEVBQ3JCQyxHQUFzQixFQUN0QkMsR0FBc0IsRUFFdEJDLEdBQXNCLEVBQ3RCQyxHQUEwQixFQUMxQkMsR0FBNkIsRUFDN0JDLEdBQTZCLEVBRTdCQyxHQUFzQixtQ0FDdEJDLEdBQTBCLG1DQUMxQkMsR0FBNkIsK0JBQzdCQyxHQUE2QiwrQkFDN0JDLEdBQXVCLG9CQUV2QkMsR0FBUyxTQUNUQyxHQUFZLFlBQ1pDLEdBQWMsY0FDZEMsR0FBd0IsbUJBQ3hCQyxHQUFPLE9BQ1BDLEdBQVUsVUFDVkMsR0FBb0IsUUFDcEJDLEdBQXFCLFNBQ3JCQyxHQUFRLFFBQ1JDLEdBQVMsU0FDVEMsR0FBZ0IsZ0JBQ2hCQyxHQUFpQixpQkFDakJDLEdBQWlCLGlCQUNqQkMsR0FBc0IsaUJBQ3RCQyxHQUEyQixzQkFDM0JDLEdBQWMsZ0JBQ2RDLEdBQTBCLENBQUMsU0FBVSxhQUFjLE1BQU8sV0FDMURDLEdBQWdCLGVBQ2hCQyxHQUFnQixlQUNoQkMsR0FBMEIsMEJBQzFCQyxHQUEwQiwwQkFDMUJDLEdBQWMsY0FDZEMsR0FBYyxjQUNkQyxHQUFvQixvQkFDcEJDLEdBQTRCLDRCQUM1QkMsR0FBNEIsNEJBQzVCQyxHQUFZLGVBQ1pDLEdBQTZCLG1CQUM3QkMsR0FBeUIsZUFDekJDLEdBQXdCLHlCQUN4QkMsR0FBYSxhQUViQyxHQUFRLEVBQ1JDLEdBQWEsRUFDYkMsR0FBbUIsRUFDbkJDLEdBQXFCLEVBQ3JCQyxHQUFzQixFQUN0QkMsR0FBdUIsRUFFdkJDLEdBQWEsRUFDYkMsR0FBbUIsRUFpSWxCLFNBQVNDLEdBQWdCQyxFQUFpQnhFLEVBQUl5RSxHQUNqRCxPQUFPLEdBQVU5VyxVQUFNLE9BQVEsR0FBUSxZQUNuQyxJQUFJK00sRUFBVXNGLEVBQUd0RixRQUNieUQsRUFBU3pELEVBQVFnSyxPQUFPRCxHQUU1QixPQURBL0osRUFBUTNGLE9BQU8wUCxTQXZFdkIsU0FBOEJELEVBQWlCRyxFQUFTeEcsR0FDcEQsT0FBTyxHQUFVeFEsVUFBTSxPQUFRLEdBQVEsYUE1RDNDLFNBQThCNlcsR0FFMUIsR0FBSUEsRUFBZ0JJLE9BQVNyRCxHQUN6QixNQUFNLElBQUlyUyxNQUFNeVMsSUFFcEIsT0FBUTZDLEVBQWdCakYsUUFDcEIsS0FBS1UsR0FDRCxPQUNKLEtBQUtFLEdBQ0QsR0FBSXFFLEVBQWdCSyxPQUFTckQsR0FDekIsTUFBTSxJQUFJdFMsTUFBTTBTLElBQ3BCLE9BQ0osS0FBSzFCLEdBRUQsR0FBSXNFLEVBQWdCTSxRQUFVckQsR0FDMUIsTUFBTSxJQUFJdlMsTUFBTTJTLElBRXBCLEdBQUkyQyxFQUFnQk8sUUFBVXJELEdBQzFCLE1BQU0sSUFBSXhTLE1BQU00UyxJQUNwQixPQUNKLEtBQUsxQixHQUNELE9BQ0osUUFDSSxNQUFNLElBQUlsUixNQUFNNlMsSUFFNUIsQ0FxQ1FpRCxDQUFxQlIsR0FFckIsTUFBTVMsRUFBb0IsQ0FBQ1osR0FBWUEsSUFFdkMsT0FBUUcsRUFBZ0JqRixRQUNwQixLQUFLVSxHQUNELE1BQ0osS0FBS0UsR0FDRDhFLEVBQWtCL0QsSUFBbUJzRCxFQUFnQkssTUFDckQsTUFDSixLQUFLM0UsR0FDRCtFLEVBQWtCOUQsSUFBc0JxRCxFQUFnQk0sT0FDeERHLEVBQWtCN0QsSUFBc0JvRCxFQUFnQk8sT0FDeEQsTUFDSixLQUFLM0UsR0FDRDZFLEVBQWtCNUQsSUFBdUJtRCxFQUFnQlUsTUFDekRELEVBQWtCM0QsSUFBdUJrRCxFQUFnQlcsTUFDekQsTUFDSixRQUNJLE1BQU0sSUFBSWpXLE1BQU02UyxJQUl4QixJQU9JL0csRUFQQXdFLEVBQWUsa0JBQW1CLFNBQVVrRCxHQUFldUMsR0FFM0RHLEVBQVlULEVBQVFqTCxTQUNwQjJMLEVBQW1CRCxFQUFVLEdBQUdwVyxPQUFTc1YsR0FDekNnQixFQUEwQkYsRUFBVXBXLE9BQVNzVixHQUM3Q2lCLEVBQStCbEYsR0FHL0J4RCxFSDNFTEMsZUFBZ0Q4SCxFQUFPckYsRUFBUUMsRUFBYzZGLEVBQWtCQyxFQUF5QkMsRUFBOEJaLEVBQVN4RyxHQUNwSyxPQUFPLElBQUlqTyxTQUFRLENBQUNHLEVBQVNDLEtBQzNCLE1BQU0wTSxFQUFTLElBQUlDLE9BQU8sSUFBSUMsSUFBSSxtQkFDbENGLEVBQU9HLFlBQVksRUFBWUMsSUFBMEIscUJBQUVwRCxVQUFVLENBQUM0SyxFQUFPckYsRUFBUUMsRUFBYzZGLEVBQWtCQyxFQUF5QkMsRUFBOEJaLEVBQVN4RyxLQUNyTG5CLEVBQU9LLFVBQVksU0FBU3hQLEdBQzFCbVAsRUFBT00sWUFDUGpOLEVBQVEsRUFBVStNLElBQTBCLHFCQUFHdlAsRUFBRXVMLE1BQ25ELElBRUosQ0drRXVCb00sQ0FBaUNoQixFQUFnQkksTUFBT0osRUFBZ0JqRixPQUFRQyxFQUFjNkYsRUFBa0JDLEVBQXlCQyxFQUE4QlosRUFBU3hHLFNBQ3pMdEIsRUFBU2hNLE1BQUsyTSxJQUFheEMsRUFBU3dDLENBQU8sSUFBS0MsSUFBWSxNQUFNLElBQUl2TyxNQUFNLFVBQVV1TyxJQUFTLElBRXJHekMsRUFBT3VGLElBQWF2UCxLQUFPb1IsR0FDM0JwSCxFQUFPd0YsSUFBZ0J4UCxLQUFPcVIsR0FDOUJySCxFQUFPeUYsSUFBb0J6UCxLQUFPc1IsR0FDbEN0SCxFQUFPMEYsSUFBcUIxUCxLQUFPdVIsR0FDbkN2SCxFQUFPMkYsSUFBd0IzUCxLQUFPaVIsR0FDdENqSCxFQUFPNEYsSUFBbUI1UCxLQUFPa1IsR0FDakNsSCxFQUFPNkYsSUFBd0I3UCxLQUFPbVIsR0FFdEMsSUFBSXNELEVBQVEsQ0FDUkMsV0FBWWxCLEVBQWdCSSxNQUM1QmUsV0FBWW5CLEVBQWdCakYsT0FDNUJDLGFBQWNBLEVBQ2RvRyxZQUFhekgsRUFDYjBILG9CQUFxQix3QkFBeUI3SyxFQUFPc0YsS0FDckR3RixNQUFPOUssRUFBT3VGLElBQ2R3RixRQUFTL0ssRUFBT3dGLElBQ2hCd0YsWUFBYWhMLEVBQU95RixJQUNwQndGLGFBQWNqTCxFQUFPMEYsSUFDckJ3RixnQkFBaUJsTCxFQUFPMkYsSUFDeEJ3RixZQUFhbkwsRUFBTzRGLElBQ3BCd0YsZ0JBQWlCcEwsRUFBTzZGLElBQ3hCd0YsZ0JBQVkvTCxFQUNab0YsY0FBZTBGLEVBQVVwVyxPQUN6QnNYLGtCQUFtQmxCLEVBQVUsR0FBR3BXLFFBR3BDLE9BdEZSLFNBQTBCeVcsR0FDdEIsSUFBSXJNLEVBQU9xTSxFQUFNVyxnQkFBZ0I3TSxhQUU3QmdOLEVBQUtuTixFQUFLMEgsSUFDVjBGLEVBQUtwTixFQUFLNkgsSUFDVndGLEVBQUtyTixFQUFLNEgsSUFDVjBGLEVBQUt0TixFQUFLMkgsSUFDVjNRLEVBQUltVyxFQUFLRyxFQUNUQyxFQUFJRixFQUFLRCxFQUNUSSxFQUFNTCxFQUFLblcsRUFDWHlXLEVBQU1MLEVBQUtHLEVBQ1hHLEVBQU1QLEdBQU1BLEVBQUtFLEdBQ2pCTSxFQUFNUCxHQUFNQSxFQUFLRSxHQUNqQk0sR0FBT1QsRUFBS0MsSUFBT3BXLEVBQUl1VyxHQUN2Qk0sR0FBTUwsRUFBTUMsR0FBTyxFQUN2QnBCLEVBQU15QixZQUFjTixFQUNwQm5CLEVBQU0wQixZQUFjTixFQUNwQnBCLEVBQU0yQixpQkFBbUJILEVBQ3pCeEIsRUFBTTRCLHdCQUEwQlAsRUFDaENyQixFQUFNNkIsd0JBQTBCUCxFQUNoQ3RCLEVBQU1ZLFdBQXlCLEtBQVgsRUFBSVcsRUFDNUIsQ0FnRVFPLENBQWlCOUIsR0FDVkEsQ0FDWCxHQUNKLENBT3FCK0IsQ0FBcUJoRCxFQUFpQjlKLEVBQVN5RCxFQUNoRSxHQUNKLENBNkJPLFNBQVNzSixHQUFnQnpILEVBQUl5RixHQUNoQ3pGLEVBQUdoUCxLQUFPMFMsR0FDVjFELEVBQUd0RixRQUFRMUYsSUFBSXlRLEVBQU1HLGFBQ3JCNUYsRUFBR3RGLFFBQVExRixJQUFJeVEsRUFBTVMsaUJBQ3JCbEcsRUFBR3RGLFFBQVExRixJQUFJeVEsRUFBTVUsYUFDckIsSUFBSXVCLEVBQVMscUJBQXdCMUgsR0FDckMwSCxFQUFPQyxVQUFVLGNBakNyQixTQUFzQmxDLEdBQ2xCLElBQUlqRyxFQUFlaUcsRUFBTWpHLGFBQWFqRyxhQUN0QyxPQUFPLHdCQUF5QixDQUM1QixrQkFBbUIsU0FBVWlKLEdBQU8sQ0FBQ2lELEVBQU1DLGFBQzNDLHFCQUFzQmpELEdBQVEsQ0FBQ08sR0FBd0J5QyxFQUFNRSxjQUM3RCxrQkFBbUIsU0FBVWhELEdBQWdCLENBQUNuRCxFQUFhLEtBQzNELGtCQUFtQixTQUFVb0QsR0FBZ0IsQ0FBQ3BELEVBQWEsS0FDM0Qsa0JBQW1CLFNBQVVxRCxHQUFxQixDQUFDNEMsRUFBTS9GLGdCQUN6RCxrQkFBbUIsU0FBVW9ELEdBQTBCLENBQUMyQyxFQUFNYSxvQkFDOUQsa0JBQW1CLFNBQVV2RCxHQUFhLENBQUMwQyxFQUFNWSxhQUNqRCxrQkFBbUIsU0FBVTlDLEdBQW1CLENBQUNrQyxFQUFNMkIsbUJBQ3ZELGtCQUFtQixTQUFVL0QsR0FBYSxDQUFDb0MsRUFBTXlCLGNBQ2pELGtCQUFtQixTQUFVNUQsR0FBYSxDQUFDbUMsRUFBTTBCLGNBQ2pELGtCQUFtQixTQUFVM0QsR0FBMkIsQ0FBQ2lDLEVBQU00QiwwQkFDL0Qsa0JBQW1CLFNBQVU1RCxHQUEyQixDQUFDZ0MsRUFBTTZCLDJCQUV2RSxDQWlCb0NNLENBQWFuQyxLQUM3Q2lDLEVBQU9DLFVBQVUscUJBQXNCM0gsRUFBSSxDQUFFakMsTUFBTzRGLEdBQ2hEa0UsTUFBT3BDLEVBQU1TLGdCQUFnQmxWLFFBRWpDMFcsRUFBT0MsVUFBVSxxQkFBc0IzSCxFQUFJLENBQUVqQyxNQUFPNkYsR0FDaERpRSxNQUFPcEMsRUFBTUcsWUFBWTVVLFFBRTdCMFcsRUFBT0MsVUFBVSxjQXRCckIsU0FBOEJsQyxHQUMxQixJQUFJck0sRUFBT3FNLEVBQU1XLGdCQUFnQjdNLGFBQ2pDLE9BQU8sd0JBQXlCLENBQzVCLHFCQUFzQixHQUFJLENBQUMwSixHQUFlQyxLQUMxQyxrQkFBbUIsTUFBT0MsR0FBeUIsQ0FBQy9KLEVBQUswSCxJQUFzQjFILEVBQUs0SCxNQUNwRixrQkFBbUIsTUFBT29DLEdBQXlCLENBQUNoSyxFQUFLMkgsSUFBdUIzSCxFQUFLNkgsT0FFN0YsQ0Flb0M2RyxDQUFxQnJDLEtBQ3JEaUMsRUFBT0MsVUFBVSxxQkFBc0IzSCxFQUFJLENBQUVqQyxNQUFPOEYsR0FDaERnRSxNQUFPcEMsRUFBTVUsWUFBWW5WLE9BRWpDLENBRU8sU0FBUytXLEdBQWV0QyxHQUUzQixJQUFJdUMsRUFBV3ZDLEVBQU1JLG9CQUFvQm5MLFFBQ3JDK0UsRUFBZWdHLEVBQU1hLGtCQUNyQjVHLEVBQWdCK0YsRUFBTS9GLGNBUXRCL08sRUFBUyxJQUFJc1gsV0FKQWxFLElBQVNDLEdBQWFDLEdBQ25DeEUsRUFBZUMsRUFBZ0JBLEVBQWdCRCxFQUFlNkUsR0FDNUQ1RSxFQUFnQjRFLEdBQW1CNUUsRUFBZ0JELElBR3JEeUksRUFBU3ZYLEVBQU91WCxPQUNoQkMsRUFBUyxFQUVUQyxFQUFPLElBQUk5USxXQUFXNFEsRUFBUUMsRUFBUW5FLElBQzFDb0UsRUFBS2xFLElBQXNCdUIsRUFBTUUsV0FDakN5QyxFQUFLakUsSUFBdUIxRSxFQUM1QjJJLEVBQUtoRSxJQUF3QjFFLEVBQzdCeUksR0FBVW5FLEdBQWFELEdBRXZCLElBQUlzRSxFQUFTLElBQUk5USxhQUFhMlEsRUFBUUMsRUFBUWxFLElBQzlDb0UsRUFBT0MsSUFBSTdDLEVBQU1qRyxhQUFhakcsY0FDOUI0TyxHQUFVbEUsR0FBbUJGLEdBRTdCc0UsRUFBUyxJQUFJOVEsYUFBYTJRLEVBQVFDLEVBQVExSSxHQUMxQzRJLEVBQU9DLElBQUk3QyxFQUFNRyxZQUFZck0sY0FDN0I0TyxHQUFVMUksRUFBZXNFLEdBRXpCc0UsRUFBUyxJQUFJOVEsYUFBYTJRLEVBQVFDLEVBQVF6SSxHQUMxQzJJLEVBQU9DLElBQUk3QyxFQUFNSyxNQUFNdk0sY0FDdkI0TyxHQUFVekksRUFBZ0JxRSxHQUUxQnNFLEVBQVMsSUFBSTlRLGFBQWEyUSxFQUFRQyxFQUFRekksR0FDMUMySSxFQUFPQyxJQUFJN0MsRUFBTU0sUUFBUXhNLGNBQ3pCNE8sR0FBVXpJLEVBQWdCcUUsR0FFMUJzRSxFQUFTLElBQUk5USxhQUFhMlEsRUFBUUMsRUFBUTFJLEVBQWU2RSxJQUN6RCtELEVBQU9DLElBQUk3QyxFQUFNTyxZQUFZek0sY0FDN0I0TyxJQUFXMUksRUFBZTZFLElBQW9CUCxHQUU5Q3NFLEVBQVMsSUFBSTlRLGFBQWEyUSxFQUFRQyxFQUFRekksRUFBZ0I0RSxJQUMxRCtELEVBQU9DLElBQUk3QyxFQUFNUSxhQUFhMU0sY0FDOUI0TyxJQUFXekksRUFBZ0I0RSxJQUFvQlAsR0FFL0MsSUFBSyxNQUFNekssS0FBTzBPLEVBQ2RLLEVBQVMsSUFBSTlRLGFBQWEyUSxFQUFRQyxFQUFRekksR0FDMUMySSxFQUFPQyxJQUFJaFAsRUFBSUMsY0FDZjRPLEdBQVV6SSxFQUFnQnFFLEdBRTlCLE9BQU9wVCxDQUNYLENBK0NPLFNBQVM0WCxHQUFjdkksRUFBSXdJLEdBQzlCLE9BQU8sR0FBVTdhLFVBQU0sT0FBUSxHQUFRLFlBQ25DLElBQUk4WCxFQS9DWixTQUEwQitDLEdBQ3RCLElBQUlDLEVBQWFELEVBQVlOLE9BQ3pCQyxFQUFTLEVBRVRPLEVBQVMsSUFBSXBSLFdBQVdtUixFQUFZTixFQUFRbkUsSUFDaERtRSxHQUFVbkUsR0FBYUQsR0FDdkIsSUFBSXRFLEVBQWVpSixFQUFPdkUsSUFDdEJ6RSxFQUFnQmdKLEVBQU90RSxJQUUzQixNQUFNNUUsRUFBZSwwQkFBMkJrRCxHQUFlLElBQUluTCxhQUFha1IsRUFBWU4sRUFBUWxFLEtBQ3BHa0UsR0FBVWxFLEdBQW1CRixHQUU3QixNQUFNNkIsRUFBYywwQkFBMkI1RCxHQUFRLElBQUl6SyxhQUFha1IsRUFBWU4sRUFBUTFJLElBQzVGMEksR0FBVTFJLEVBQWVzRSxHQUV6QixNQUFNK0IsRUFBUSwwQkFBMkIxRCxHQUFNLElBQUk3SyxhQUFha1IsRUFBWU4sRUFBUXpJLElBQ3BGeUksR0FBVXpJLEVBQWdCcUUsR0FFMUIsTUFBTWdDLEVBQVUsMEJBQTJCMUQsR0FBUyxJQUFJOUssYUFBYWtSLEVBQVlOLEVBQVF6SSxJQUN6RnlJLEdBQVV6SSxFQUFnQnFFLEdBRTFCLE1BQU1pQyxFQUFjLDBCQUEyQjFELEdBQW1CLElBQUkvSyxhQUFha1IsRUFBWU4sRUFBUTFJLEVBQWU2RSxLQUN0SDZELElBQVcxSSxFQUFlNkUsSUFBb0JQLEdBRTlDLE1BQU1rQyxFQUFlLDBCQUEyQjFELEdBQW9CLElBQUloTCxhQUFha1IsRUFBWU4sRUFBUXpJLEVBQWdCNEUsS0FDekg2RCxJQUFXekksRUFBZ0I0RSxJQUFvQlAsR0FFL0MsSUFBSWlFLEVBQVcsR0FDZixJQUFLLElBQUkvWSxFQUFJLEVBQUdBLEVBQUl3USxFQUFjeFEsSUFDOUIrWSxFQUFTck8sS0FBSywwQkFBMkIxSyxFQUFFc0wsV0FBWSxJQUFJaEQsYUFBYWtSLEVBQVlOLEVBQVF6SSxLQUM1RnlJLEdBQVV6SSxFQUFnQnFFLEdBRTlCLE1BQU04QixFQUFzQix3QkFBeUJtQyxHQVVyRCxNQVRZLENBQUVyQyxXQUFZK0MsRUFBT3hFLElBQzdCMUUsYUFBY0EsRUFDZG9HLFlBQWFBLEVBQ2JFLE1BQU9BLEVBQ1BDLFFBQVNBLEVBQ1RDLFlBQWFBLEVBQ2JDLGFBQWNBLEVBQ2RKLG9CQUFxQkEsRUFHN0IsQ0FJb0I4QyxDQUFpQixJQUFJVixXQUFXTyxJQUN4Q0ksUUFoUVosU0FBaUJuRCxFQUFPZCxHQUNwQixPQUFPLEdBQVVoWCxVQUFNLE9BQVEsR0FBUSxZQUNuQyxJQUFJaVAsRUFDQUMsRUgzQkxDLGVBQTBDeUMsRUFBUUMsRUFBY3FKLEVBQWdCMUssRUFBUTJILEVBQU9DLEVBQVNDLEVBQWE4QyxFQUFvQkMsR0FDOUksT0FBTyxJQUFJN1ksU0FBUSxDQUFDRyxFQUFTQyxLQUMzQixNQUFNME0sRUFBUyxJQUFJQyxPQUFPLElBQUlDLElBQUksbUJBQ2xDRixFQUFPRyxZQUFZLEVBQVlDLElBQW9CLGVBQUVwRCxVQUFVLENBQUN1RixFQUFRQyxFQUFjcUosRUFBZ0IxSyxFQUFRMkgsRUFBT0MsRUFBU0MsRUFBYThDLEVBQW9CQyxLQUMvSi9MLEVBQU9LLFVBQVksU0FBU3hQLEdBQzFCbVAsRUFBT00sWUFDUGpOLEVBQVEsRUFBVStNLElBQW9CLGVBQUd2UCxFQUFFdUwsTUFDN0MsSUFFSixDR2tCdUI0UCxDQUEyQnZELEVBQU1FLFdBQVlGLEVBQU1qRyxhQUFjaUcsRUFBTUksb0JBQW9CbkwsUUFBUytLLEVBQU1HLFlBQWFILEVBQU1LLE1BQU9MLEVBQU1NLFFBQVNOLEVBQU1PLFlBQWFQLEVBQU1RLGFBQWN0QixHQUV6TSxhQURNOUgsRUFBU2hNLE1BQUsyTSxJQUFhWixFQUFVWSxDQUFPLElBQUtDLElBQVksTUFBTSxJQUFJdk8sTUFBTSxVQUFVdU8sSUFBUyxJQUMvRmIsQ0FDWCxHQUNKLENBeVB3QkQsQ0FBUThJLEVBQU96RixFQUFHdEYsU0FFbEMsT0FEQWtPLEVBQUk1WCxLQUFPOFMsR0FDSix3QkFBeUIsQ0FBQzhFLEdBQ3JDLEdBQ0osQ0NyWUEsSUFBSSxHQUF3QyxTQUFVN1ksRUFBU0MsRUFBWUksRUFBR0gsR0FFMUUsT0FBTyxJQUFLRyxJQUFNQSxFQUFJRixXQUFVLFNBQVVHLEVBQVNDLEdBQy9DLFNBQVNDLEVBQVVoQyxHQUFTLElBQU1pQyxFQUFLUCxFQUFVUSxLQUFLbEMsR0FBUyxDQUFFLE1BQU9WLEdBQUt5QyxFQUFPekMsRUFBSSxDQUFFLENBQzFGLFNBQVM2QyxFQUFTbkMsR0FBUyxJQUFNaUMsRUFBS1AsRUFBaUIsTUFBRTFCLEdBQVMsQ0FBRSxNQUFPVixHQUFLeUMsRUFBT3pDLEVBQUksQ0FBRSxDQUM3RixTQUFTMkMsRUFBS0csR0FKbEIsSUFBZXBDLEVBSWFvQyxFQUFPQyxLQUFPUCxFQUFRTSxFQUFPcEMsUUFKMUNBLEVBSXlEb0MsRUFBT3BDLE1BSmhEQSxhQUFpQjZCLEVBQUk3QixFQUFRLElBQUk2QixHQUFFLFNBQVVDLEdBQVdBLEVBQVE5QixFQUFRLEtBSWpCc0MsS0FBS04sRUFBV0csRUFBVyxDQUM3R0YsR0FBTVAsRUFBWUEsRUFBVWEsTUFBTWYsRUFBU0MsR0FBYyxLQUFLUyxPQUNsRSxHQUNKLEVBV08sTUFBTXdZLEdBQVcsSUFBSSxVQUVyQixTQUFTQyxLQUNaLGFBQWdCRCxHQUFTRSxRQUM3QixDQUVPLFNBQVNDLEtBQ1osT0FBTyxHQUFVemIsVUFBTSxPQUFRLEdBQVEsa0JKbkJwQ21QLHVCQUNDdU0sU0FDUixDSWtCY0MsRUFDVixHQUNKLENBVU8sU0FBU0MsR0FBSTdNLEVBQU9KLEVBQVVDLEVBQVlpTixFQUFRQyxHQUNyRCxPQUFPLEdBQVU5YixVQUFNLE9BQVEsR0FBUSxZQUNuQyxPSHJDRCxTQUEwQitiLEdBQzdCLElBQUssTUFBTXBRLEtBQU9vUSxFQUFTaFAsUUFBUWhCLFNBQy9CSixFQUFJdEksS0FBTyxNQUFRc0ksRUFBSXRJLEtBQzNCLE9BQU8wWSxDQUNYLENHaUNlQyxPTDVCUixTQUFvQmpOLEVBQU9KLEVBQVVDLEVBQVlpTixFQUFRQyxHQUM1RCxPQUFPLEVBQVU5YixVQUFNLE9BQVEsR0FBUSxZQUNuQzBPLEVBQWlCQyxFQUFVQyxHQUczQixJQUFJSyxFQUNBQyxFQ0pMQyxlQUFzREosRUFBT2hDLEVBQVNxQyxFQUFpQjZNLEVBQVdDLEdBQ3ZHLE9BQU8sSUFBSTNaLFNBQVEsQ0FBQ0csRUFBU0MsS0FDM0IsTUFBTTBNLEVBQVMsSUFBSUMsT0FBTyxJQUFJQyxJQUFJLG1CQUNsQ0YsRUFBT0csWUFBWSxFQUFZQyxJQUFnQywyQkFBRXBELFVBQVUsQ0FBQ1UsRUFBU3FDLEVBQWlCNk0sRUFBV0MsS0FDakg3TSxFQUFPSyxVQUFZLFNBQVN4UCxHQUMxQm1QLEVBQU9NLFlBQ1BqTixFQUFRLEVBQVUrTSxJQUFnQywyQkFBR3ZQLEVBQUV1TCxNQUN6RCxJQUVKLENETHVCMFEsQ0FBdUNwTixFQUFPSixFQUFVQyxFQUhyRGlOLEVBQVMsRUFBSSxFQUNkQyxFQUFRLEVBQUksR0FJN0IsYUFETTVNLEVBQVNoTSxNQUFLMk0sSUFBYVosRUFBVVksQ0FBTyxJQUFLQyxJQUFZLE1BQU0sSUFBSXZPLE1BQU0sVUFBVXVPLElBQVMsSUFDL0ZiLENBQ1gsR0FDSixDS2tCc0NtTixDQUFXck4sRUFBT0osRUFBVUMsRUFBWWlOLEVBQVFDLEdBQ2xGLEdBQ0osQ0FTTyxTQUFTTyxHQUFJdE4sRUFBT2xDLEVBQU84QixFQUFVSyxFQUFTSixHQUNqRCxPQUFPLEdBQVU1TyxVQUFNLE9BQVEsR0FBUSxZQUNuQyxNQUFNc2MsUUFBbUJ4TixFQUFXQyxFQUFPSixFQUFVSyxFQUFTSixJSHVCL0QsU0FBNkJHLEVBQU9pQixFQUFjckIsRUFBVUssRUFBU3VOLEdBQ3hFLElBQUlDLEVBQU8scUJBQXdCek4sRUFBTTFMLE1BRXpDbVosRUFBS3hDLFVBQVVqSyxFQUFvQ0MsRUFBY2hCLEVBQVN1TixFQUFVLEtBRXBGQyxFQUFLeEMsVUFBVXZKLEVBQStCOUIsRUFBVTROLEVBQVUsS0FFbEVDLEVBQUt4QyxVQTNCRixTQUE0QnJMLEVBQVU4TixHQUN6QyxJQUFJQyxFQUFjLEdBQ2RDLEVBQWdCLEdBQ3BCLElBQUssSUFBSWhSLEtBQU9nRCxFQUNaZ08sRUFBYzNRLEtBQUtMLEVBQUl0SSxNQUMzQnFaLEVBQVkxUSxLQUFLLHFCQUFzQixTQUFVMlEsSUFDakQsSUFBSyxJQUFJcmIsRUFBSSxFQUFHQSxFQUFJbWIsRUFBVXBiLE9BQVFDLElBQ2xDbWIsRUFBVW5iLEdBQUcrQixLQUFPLGNBQWMvQixFQUFJLElBQ3RDb2IsRUFBWTFRLEtBQUt5USxFQUFVbmIsSUFFL0IsSUFBSXNiLEVBQWEsd0JBQXlCRixHQUUxQyxPQURBRSxFQUFXdlosS0FBTyxXQUNYLHFCQUFzQnVaLEVBQVksQ0FBRXhNLE1BQU93TSxFQUFXdlosS0FDekRnTixFQUFHb00sRUFBVSxHQUFHcFosS0FDaEJpRixFQUFHbVUsRUFBVUEsRUFBVXBiLE9BQVMsR0FBR2dDLEtBQ25Da04sV0FBWSxTQUNaQyxPQUFRLFVBRWhCLENBU21CcU0sQ0FBbUJsTyxFQUFVNE4sRUFBVSxLQUV0REMsRUFBS3hDLFVBQVVoSixFQUFrQmhCLEVBQWN1TSxFQUFVLEdBQUlBLEVBQVUsSUFDM0UsQ0doQ1FPLENBQW9CL04sRUFBT2xDLEVBQU84QixFQUFVSyxFQUFTc04sRUFDekQsR0FDSixDQUtPLFNBQVNTLEtBQ1osT0FBTyxHQUFVL2MsVUFBTSxPQUFRLEdBQVEsWUFDbkMsTUFBTWdkLEVBQWEsSUFBSTFaLEVBQVcsbUNBQW9DLHNDQUNoRTJaLEVBQU92TCxLQUVQN0UsRUFBUW9RLEVBQUtsUSxRQUFRZ0ssT0FBTyxTQUM1Qi9ILEVBQVVpTyxFQUFLbFEsUUFBUWdLLE9BQU8sU0FDOUJwSSxFQUFXc08sRUFBS2xRLFFBQVEzRixPQUFPLFNBQVNBLE9BQU8sU0FDL0NtVixRQUFrQnpOLEVBQVdtTyxFQUFNdE8sRUFBVUssRUFKaEMsR0FLYmtPLEVBQWF4TCxLQUVuQixJQUFJOEssRUFDQVcsRUFGSkQsRUFBVzdaLEtBQU8sYUFHWjJaLEVBQ0RuYSxLQUFLLFFBQVEsSUFBTSxHQUFVN0MsVUFBTSxPQUFRLEdBQVEsWUFDcEQscUJBQXdCa2QsR0FDeEJWLEVBQU8scUJBQXdCVSxFQUFXN1osS0FDOUMsS0FBSSxDQUFFRyxZQUFhLG1FQUFvRXRCLE1BQU8sSUFDekZXLEtBQUssU0FBUyxJQUFNLEdBQVU3QyxVQUFNLE9BQVEsR0FBUSxZQUNyRG1kLEVBQVMsU0FBVSxDQUFFL00sTUFBTyxnQ0FDdkIvSSxJQUFJLGFBQWMsUUFBUzZWLElBQzNCN1YsSUFBSSxlQUFnQixXQUFZNFYsRUFBTXRPLEVBQVM1QyxPQUFRLENBQUVxUixlQUFXelEsRUFBVzBRLFFBQVMxTyxFQUFTOUIsV0FDakd4RixJQUFJLGNBQWUsUUFBUzRWLEVBQU1wUSxPQUFPRixJQUN6Q3RGLElBQUksY0FBZSxVQUFXNFYsRUFBTWpPLE9BQVNyQyxJQUM3Q3RGLElBQUksV0FBWSxhQXBCTixPQW9CZ0NzRixJQUMxQzJRLE1BQUssS0FDTixhQUFnQixvREFBb0QsSUFFbkVDLEtBQUssQ0FBRWxOLEVBQUcsSUFBSy9ILEVBQUcsS0FDM0IsS0FBSSxDQUFFOUUsWUFBYSwyQ0FBNEN0QixNQUFPLElBQ2pFVyxLQUFLLDRCQUE0QixJQUFNLEdBQVU3QyxVQUFNLE9BQVEsR0FBUSxZQUN4RW1kLEVBQU9LLFFBQ1BoQixFQUFLeEMsVUFBVXZKLEVBQStCOUIsRUFBVTROLEVBQVUsSUFDdEUsS0FBSSxDQUFFL1ksWUFBYSxtREFBb0R0QixNQUFPLElBQ3pFVyxLQUFLLFVBQVUsSUFBTSxHQUFVN0MsVUFBTSxPQUFRLEdBQVEsWUFBZXdjLEVBQUt4QyxVQUFVaEosRUFBa0JuRSxFQUFPMFAsRUFBVSxHQUFJQSxFQUFVLElBQU0sS0FBSSxDQUFFL1ksWUFBYSx3RUFBeUV0QixNQUFPLElBQzdPVyxLQUFLLGNBQWMsSUFBTSxHQUFVN0MsVUFBTSxPQUFRLEdBQVEsWUFBZXdjLEVBQUt4QyxVQUFVakssRUFBb0NsRCxFQUFPbUMsRUFBU3VOLEVBQVUsSUFBTSxLQUFJLENBQUUvWSxZQUFhLG9EQUFxRHRCLE1BQU8sSUFDMU91SCxPQUNULEdBQ0osQ0FVTyxTQUFTZ1UsR0FBd0JwYSxFQUFNeU8sRUFBY0MsRUFBZUMsRUFBSzFNLEVBQUsyTSxHQUNqRixPQUFPLEdBQVVqUyxVQUFNLE9BQVEsR0FBUSxZQUNuQyxhQUFhMlIsR0FBZ0NXLEdBQVEsQ0FBQyxFQUFHLEdBQUlqUCxFQUFNeU8sRUFBY0MsRUFBZUMsRUFBSzFNLEVBQUsyTSxFQUM5RyxHQUNKLENBV08sU0FBU3lMLEdBQTJCcmEsRUFBTTZULEVBQU9wRixFQUFjQyxFQUFlQyxFQUFLMU0sRUFBSzJNLEdBQzNGLE9BQU8sR0FBVWpTLFVBQU0sT0FBUSxHQUFRLFlBQ25DLGFBQWEyUixHQUFnQ2EsR0FBSyxDQUFDMEUsRUFBTyxHQUFJN1QsRUFBTXlPLEVBQWNDLEVBQWVDLEVBQUsxTSxFQUFLMk0sRUFDL0csR0FDSixDQVNPLFNBQVMwTCxHQUFxQnRMLEVBQUl5RSxFQUFnQkcsRUFBTzJHLEdBQzVELE9BQU8sR0FBVTVkLFVBQU0sT0FBUSxHQUFRLFlBQ25DLE1BQU02ZCxRQUFxQmpILEdBQWdCLENBQUVLLE1BQU9BLEVBQU9yRixPQUFRVSxJQUFVRCxFQUFJeUUsR0FHakYsT0FGSThHLEdBQ0E5RCxHQUFnQnpILEVBQUl3TCxHQUNqQnpELEdBQWV5RCxFQUMxQixHQUNKLENBT08sU0FBU0MsR0FBcUJ6TCxFQUFJeUYsR0FDckMsT0FBTyxHQUFVOVgsVUFBTSxPQUFRLEdBQVEsWUFDbkMsYUFBYTRhLEdBQWN2SSxFQUFJeUYsRUFDbkMsR0FDSixDQVVPLFNBQVNpRyxHQUFrQjFMLEVBQUl5RSxFQUFnQkcsRUFBT0MsRUFBTzBHLEdBQ2hFLE9BQU8sR0FBVTVkLFVBQU0sT0FBUSxHQUFRLFlBQ25DLE1BQU02ZCxRQUFxQmpILEdBQWdCLENBQUVLLE1BQU9BLEVBQU9yRixPQUFRWSxHQUFLMEUsTUFBT0EsR0FBUzdFLEVBQUl5RSxHQUc1RixPQUZJOEcsR0FDQTlELEdBQWdCekgsRUFBSXdMLEdBQ2pCekQsR0FBZXlELEVBQzFCLEdBQ0osQ0FPTyxTQUFTRyxHQUFrQjNMLEVBQUl5RixHQUNsQyxPQUFPLEdBQVU5WCxVQUFNLE9BQVEsR0FBUSxZQUNuQyxhQUFhNGEsR0FBY3ZJLEVBQUl5RixFQUNuQyxHQUNKLENBV08sU0FBU21HLEdBQXlCNUwsRUFBSXlFLEVBQWdCRyxFQUFPaUgsRUFBR0MsRUFBR1AsR0FDdEUsT0FBTyxHQUFVNWQsVUFBTSxPQUFRLEdBQVEsWUFDbkMsTUFBTTZkLFFBQXFCakgsR0FBZ0IsQ0FBRUssTUFBT0EsRUFBT3JGLE9BQVFXLEdBQVk0RSxPQUFRK0csRUFBRzlHLE9BQVErRyxHQUFLOUwsRUFBSXlFLEdBRzNHLE9BRkk4RyxHQUNBOUQsR0FBZ0J6SCxFQUFJd0wsR0FDakJ6RCxHQUFleUQsRUFDMUIsR0FDSixDQU9PLFNBQVNPLEdBQXlCL0wsRUFBSXlGLEdBQ3pDLE9BQU8sR0FBVTlYLFVBQU0sT0FBUSxHQUFRLFlBQ25DLGFBQWE0YSxHQUFjdkksRUFBSXlGLEVBQ25DLEdBQ0osQ0FXTyxTQUFTdUcsR0FBc0JoTSxFQUFJeUUsRUFBZ0JHLEVBQU9NLEVBQU9DLEVBQU9vRyxHQUMzRSxPQUFPLEdBQVU1ZCxVQUFNLE9BQVEsR0FBUSxZQUNuQyxNQUFNNmQsUUFBcUJqSCxHQUFnQixDQUFFSyxNQUFPQSxFQUFPckYsT0FBUWEsR0FBUzhFLE1BQU9BLEVBQU9DLE1BQU9BLEdBQVNuRixFQUFJeUUsR0FHOUcsT0FGSThHLEdBQ0E5RCxHQUFnQnpILEVBQUl3TCxHQUNqQnpELEdBQWV5RCxFQUMxQixHQUNKLENBT08sU0FBU1MsR0FBc0JqTSxFQUFJeUYsR0FDdEMsT0FBTyxHQUFVOVgsVUFBTSxPQUFRLEdBQVEsWUFDbkMsYUFBYTRhLEdBQWN2SSxFQUFJeUYsRUFDbkMsR0FDSixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJncm9rXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcInVpXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdHV0b3JpYWxzL3NyYy9kZW1vLXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL2NhbGxXYXNtLmpzIiwid2VicGFjazovL2VkYS8uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3V0aWxzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9FREF0b29scy50cyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL0VEQUFQSS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvRURBdWkudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL2RhdGFHZW5lcmF0b3JzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9zdm0udHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3BhY2thZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHNlbGYubG9jYXRpb24uaHJlZjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQzNTk6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbi8vIG5vIG9uIGNodW5rcyBsb2FkZWRcblxuLy8gbm8ganNvbnAgZnVuY3Rpb24iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gZ3JvazsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gdWk7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IERHOyIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuZXhwb3J0IGNvbnN0IHRlc3RzID0ge307XG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZCA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk7XG5leHBvcnQgdmFyIGFzc3VyZTtcbihmdW5jdGlvbiAoYXNzdXJlKSB7XG4gICAgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICB9XG4gICAgYXNzdXJlLm5vdE51bGwgPSBub3ROdWxsO1xufSkoYXNzdXJlIHx8IChhc3N1cmUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZCwgcmVwb3J0KSB7XG4gICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcG9ydCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSBjYXRjaFVuaGFuZGxlZDtcbiAgICAgICAgaWYgKHJlcG9ydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYSA9IG9wdGlvbnMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKG9wdGlvbnMudGltZW91dCA9IDMwMDAwKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50ZXN0ID0gKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgdGVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RFdmVudChldmVudCwgaGFuZGxlciwgdHJpZ2dlciwgbXMgPSAwKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHN1YjtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgICAgICAgICAgICByZWplY3QoJ3RpbWVvdXQnKTtcbiAgICAgICAgICAgIH0sIG1zKTtcbiAgICAgICAgICAgIHRyaWdnZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsLCBleHBlY3RlZCA9IHRydWUsIGVycm9yKSB7XG4gICAgaWYgKGVycm9yKVxuICAgICAgICBlcnJvciA9IGAke2Vycm9yfSwgYDtcbiAgICBlbHNlXG4gICAgICAgIGVycm9yID0gJyc7XG4gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvcn1FeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsLCBleHBlY3RlZCwgdG9sZXJhbmNlID0gMC4wMDEsIGVycm9yKSB7XG4gICAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgICAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAgICAgKGFjdHVhbCA9PT0gTnVtYmVyLk5hTiAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5hTikgfHwgKGlzTmFOKGFjdHVhbCkgJiYgaXNOYU4oZXhwZWN0ZWQpKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICAgIGV4cGVjdChhcmVFcXVhbCwgdHJ1ZSwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG4gICAgaWYgKCFhcmVFcXVhbClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdFRhYmxlKGFjdHVhbCwgZXhwZWN0ZWQsIGVycm9yKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRSb3dDb3VudCA9IGV4cGVjdGVkLnJvd0NvdW50O1xuICAgIGNvbnN0IGFjdHVhbFJvd0NvdW50ID0gYWN0dWFsLnJvd0NvdW50O1xuICAgIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9LCByb3cgY291bnRgKTtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbHVtbiA9IGFjdHVhbC5jb2x1bW5zLmJ5TmFtZShjb2x1bW4ubmFtZSk7XG4gICAgICAgIGlmIChhY3R1YWxDb2x1bW4gPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGApO1xuICAgICAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkUm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxDb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuRkxPQVQpXG4gICAgICAgICAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZS5pc1NhbWUodmFsdWUpLCB0cnVlLCBlcnJvcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLCB2YWx1ZSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgICAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgICAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChOdW1iZXIuaXNGaW5pdGUoYWN0dWFsVmFsdWUpICYmIE51bWJlci5pc0Zpbml0ZShleHBlY3RlZFZhbHVlKSlcbiAgICAgICAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICAgICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gICAgfVxufVxuLyogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnksIHRlc3RzKSB7XG4gICAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGVzdHMoKTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmUpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXIpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5mdW5jdGlvbiBhZGROYW1lc3BhY2UocywgZikge1xuICAgIHJldHVybiBzLnJlcGxhY2UobmV3IFJlZ0V4cChmLm5hbWUsICdnaScpLCBmLm5xTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5pdEF1dG9UZXN0cyhwYWNrYWdlSWQsIG1vZHVsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICh3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gICAgICAgIGlmIChtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZHVsZUF1dG9UZXN0cyA9IFtdO1xuICAgICAgICBjb25zdCBwYWNrRnVuY3Rpb25zID0geWllbGQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5maWx0ZXIoYHBhY2thZ2UuaWQgPSBcIiR7cGFja2FnZUlkfVwiYCkubGlzdCgpO1xuICAgICAgICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKC8uKlxcL1xcL1xccypza2lwWzpcXHNdKiguKikkLyk7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0cyA9IGYub3B0aW9uc1sndGVzdCddO1xuICAgICAgICAgICAgaWYgKCEodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwUmVhc29ucyA9IHRlc3RzW2ldLm1hdGNoKHJlZyk7XG4gICAgICAgICAgICAgICAgbGV0IHNraXBSZWFzb247XG4gICAgICAgICAgICAgICAgaWYgKHNraXBSZWFzb25zICYmIChza2lwUmVhc29ucyA9PT0gbnVsbCB8fCBza2lwUmVhc29ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2tpcFJlYXNvbnMubGVuZ3RoKSA+IDEpXG4gICAgICAgICAgICAgICAgICAgIHNraXBSZWFzb24gPSBza2lwUmVhc29uc1sxXTtcbiAgICAgICAgICAgICAgICBtb2R1bGVBdXRvVGVzdHMucHVzaChuZXcgVGVzdChhdXRvVGVzdHNDYXROYW1lLCB0ZXN0cy5sZW5ndGggPT09IDEgPyBmLm5hbWUgOiBgJHtmLm5hbWV9ICR7aSArIDF9YCwgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBncm9rLmZ1bmN0aW9ucy5ldmFsKGFkZE5hbWVzcGFjZSh0ZXN0c1tpXSwgZikpO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX1gO1xuICAgICAgICAgICAgICAgIH0pLCB7IHNraXBSZWFzb246IHNraXBSZWFzb24gfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgICAgIGlmICghbW9kdWxlQXV0b1Rlc3RzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVBdXRvVGVzdHMgfTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHZhciBfZTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwYWNrYWdlXyA9IChfYiA9IChfYSA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mdW5jKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFja2FnZTtcbiAgICAgICAgeWllbGQgaW5pdEF1dG9UZXN0cyhwYWNrYWdlXy5pZCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHNgKTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYyA9IChfZSA9IG9wdGlvbnMpLnRlc3RDb250ZXh0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAoX2UudGVzdENvbnRleHQgPSBuZXcgVGVzdENvbnRleHQoKSk7XG4gICAgICAgIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHtrZXl9IGNhdGVnb3J5YCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmJlZm9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0ID0gKF9kID0gdmFsdWUudGVzdHMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goeWllbGQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRlc3QpKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoeWllbGQgUHJvbWlzZS5hbGwocmVzKSkuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmFmdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7IGNhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5jYXRjaFVuaGFuZGxlZCkge1xuICAgICAgICAgICAgeWllbGQgZGVsYXkoMTAwMCk7XG4gICAgICAgICAgICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnVW5oYW5kbGVkIGV4Y2VwdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXhjZXB0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogZ3Jvay5zaGVsbC5sYXN0RXJyb3IsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5yZXBvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBERy5Mb2dnZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5zdWNjZXNzKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBza2lwcGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuc2tpcHBlZCkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+ICFyLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSAnUGFja2FnZSBAcGFja2FnZSB0ZXN0ZWQ6IEBzdWNjZXNzZnVsIHN1Y2Nlc3NmdWwsIEBza2lwcGVkIHNraXBwZWQsIEBmYWlsZWQgZmFpbGVkIHRlc3RzJztcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzZnVsOiBzdWNjZXNzZnVsLFxuICAgICAgICAgICAgICAgIHNraXBwZWQ6IHNraXBwZWQsXG4gICAgICAgICAgICAgICAgZmFpbGVkOiBmYWlsZWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHBhY2thZ2U6IHBhY2thZ2VfXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGZhaWxlZClcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgeyBbYCR7ci5jYXRlZ29yeX0gfCAke3IubmFtZX1gXTogci5yZXN1bHQgfSk7XG4gICAgICAgICAgICBsb2dnZXIubG9nKGRlc2NyaXB0aW9uLCBwYXJhbXMsICdwYWNrYWdlLXRlc3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZXhlY1Rlc3QodCwgcHJlZGljYXRlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKCF0Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIGNvbnN0IHNraXAgPSAoKF9hID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2tpcFJlYXNvbikgfHwgZmlsdGVyO1xuICAgICAgICBjb25zdCBza2lwUmVhc29uID0gZmlsdGVyID8gJ3NraXBwZWQnIDogKF9iID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2tpcFJlYXNvbjtcbiAgICAgICAgaWYgKCFza2lwKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX1gKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBza2lwUmVhc29uLCBtczogMCwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogKF9jID0geWllbGQgdC50ZXN0KCkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICdPSycsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3AgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHIubXMgPSBzdG9wIC0gc3RhcnQ7XG4gICAgICAgIGlmICghc2tpcClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuICAgICAgICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgICAgICAgci5uYW1lID0gdC5uYW1lO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9KTtcbn1cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF3YWl0Q2hlY2soY2hlY2tIYW5kbGVyLCBlcnJvciA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdCA9IDUwMCwgaW50ZXJ2YWwgPSA1MCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlKSB7XG4gICAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlhbG9ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdFZpZXdlcih2LCBkZiwgZGV0ZWN0U2VtYW50aWNUeXBlcyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKGRldGVjdFNlbWFudGljVHlwZXMpXG4gICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgICAgICBjb25zdCB2aWV3ZXJOYW1lID0gYFtuYW1lPXZpZXdlci0ke3YucmVwbGFjZSgvXFxzKy9nLCAnLScpfSBpXWA7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gYCR7dmlld2VyTmFtZX0gY2FudmFzLCR7dmlld2VyTmFtZX0gc3ZnLCR7dmlld2VyTmFtZX0gaW1nLFxuICAgICR7dmlld2VyTmFtZX0gaW5wdXQsJHt2aWV3ZXJOYW1lfSBoMSwke3ZpZXdlck5hbWV9IGFgO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB2aWV3ZXIgPSB0di5hZGRWaWV3ZXIodik7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyJywgMzAwMCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGRmLnJvdygwKS5jZWxscykuZm9yRWFjaCgoYykgPT4gYy52YWx1ZSA9IG51bGwpO1xuICAgICAgICAgICAgZGYucm93cy5zZWxlY3QoKHJvdykgPT4gcm93LmlkeCA+IDEgJiYgcm93LmlkeCA8IDcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDc7IGkgPCAxMjsgaSsrKVxuICAgICAgICAgICAgICAgIGRmLmZpbHRlci5zZXQoaSwgZmFsc2UpO1xuICAgICAgICAgICAgZGYuY3VycmVudFJvd0lkeCA9IDE7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKHRydWUpLmxvb2s7XG4gICAgICAgICAgICBjb25zdCBuZXdQcm9wcyA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcigoaykgPT4gdHlwZW9mIHByb3BzW2tdID09PSAnYm9vbGVhbicpLmZvckVhY2goKGspID0+IG5ld1Byb3BzW2tdID0gIXByb3BzW2tdKTtcbiAgICAgICAgICAgIHZpZXdlci5zZXRPcHRpb25zKG5ld1Byb3BzKTtcbiAgICAgICAgICAgIHlpZWxkIGRlbGF5KDI1MCk7XG4gICAgICAgICAgICBjb25zdCBsYXlvdXQgPSB0di5zYXZlTGF5b3V0KCk7XG4gICAgICAgICAgICBjb25zdCBvbGRQcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKCkubG9vaztcbiAgICAgICAgICAgIHR2LnJlc2V0TGF5b3V0KCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICB0di5sb2FkTGF5b3V0KGxheW91dCk7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyIGZyb20gbGF5b3V0JywgMzAwMCk7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSgyNTApO1xuICAgICAgICAgICAgcmVzLnB1c2goQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5sZW5ndGgpO1xuICAgICAgICAgICAgdmlld2VyID0gQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5maW5kKCh2KSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgICAgICAgICBleHBlY3RBcnJheShyZXMsIFsyLCAxLCAyXSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodmlld2VyLmdldE9wdGlvbnMoKS5sb29rKSwgSlNPTi5zdHJpbmdpZnkob2xkUHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHR2LmNsb3NlKCk7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmNsb3NlVGFibGUoZGYpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkR1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblJsYzNRdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN08wRkJRVUVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVU14UXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUzNSRExFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZMWkN4RlFVRkZMRU5CUVVNN1FVRkZVQ3hOUVVGTkxHZENRVUZuUWl4SFFVRkhMRmxCUVZrc1EwRkJRenRCUVVOMFF5eE5RVUZOTEdGQlFXRXNSMEZCTmtJc1JVRkJSU3hEUVVGRE8wRkJRMjVFTEUxQlFVMHNRMEZCUXl4SlFVRkpMR1ZCUVhWQ0xFTkJRVU03UVVGRmJrTXNUVUZCVFN4TFFVRlhMRTFCUVUwc1EwRkxkRUk3UVVGTVJDeFhRVUZwUWl4TlFVRk5PMGxCUTNKQ0xGTkJRV2RDTEU5QlFVOHNRMEZCUXl4TFFVRlZMRVZCUVVVc1NVRkJZVHRSUVVNdlF5eEpRVUZKTEV0QlFVc3NTVUZCU1N4SlFVRkpPMWxCUTJZc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVsQlFVa3NTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOd1JTeERRVUZETzBsQlNHVXNZMEZCVHl4VlFVZDBRaXhEUVVGQk8wRkJRMGdzUTBGQlF5eEZRVXhuUWl4TlFVRk5MRXRCUVU0c1RVRkJUU3hSUVV0MFFqdEJRVkZFTEUxQlFVMHNUMEZCVHl4WFFVRlhPMGxCU1hSQ0xGbEJRVmtzWTBGQmQwSXNSVUZCUlN4TlFVRm5RanRSUVVoMFJDeHRRa0ZCWXl4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOMFFpeFhRVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUjJJc1NVRkJTU3hqUVVGakxFdEJRVXNzVTBGQlV6dFpRVUZGTEVsQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1kwRkJZeXhEUVVGRE8xRkJRM1pGTEVsQlFVa3NUVUZCVFN4TFFVRkxMRk5CUVZNN1dVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0SlFVTnFSQ3hEUVVGRE8wbEJRVUVzUTBGQlF6dERRVU5JTzBGQlJVUXNUVUZCVFN4UFFVRlBMRWxCUVVrN1NVRk5aaXhaUVVGWkxGRkJRV2RDTEVWQlFVVXNTVUZCV1N4RlFVRkZMRWxCUVhkQ0xFVkJRVVVzVDBGQmNVSTdPMUZCUTNwR0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeE5RVUZCTEU5QlFVOHNRMEZCUXl4UFFVRlBMRzlEUVVGbUxFOUJRVThzUTBGQlF5eFBRVUZQTEVkQlFVc3NTMEZCU3l4RlFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUMEZCVHl4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCZFVJc1JVRkJSVHRaUVVOdVF5eFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVU4c1QwRkJUeXhGUVVGRkxFMUJRVTBzUlVGQlJTeEZRVUZGTzJkQ1FVTXpReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdaMEpCUTJoQ0xFbEJRVWs3YjBKQlEwWXNUVUZCVFN4SFFVRkhMRTFCUVUwc1NVRkJTU3hGUVVGRkxFTkJRVU03YVVKQlEzWkNPMmRDUVVGRExFOUJRVThzUTBGQlRTeEZRVUZGTzI5Q1FVTm1MRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEV0R0blFrRkRSQ3hQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYkVJc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUVN4RFFVRkRPMGxCUTBvc1EwRkJRenREUVVOR08wRkJSVVFzVFVGQlRTeFZRVUZuUWl4VFFVRlRMRU5CUVVrc1MwRkJiMElzUlVGRGNrUXNUMEZCTUVJc1JVRkJSU3hQUVVGdFFpeEZRVUZGTEV0QlFXRXNRMEZCUXpzN1VVRkRMMFFzU1VGQlNTeEhRVUZwUWl4RFFVRkRPMUZCUTNSQ0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUU3hGUVVGRkxFVkJRVVU3V1VGRGNrTXNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlR0blFrRkROMElzU1VGQlNUdHZRa0ZEUml4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YVVKQlEyWTdaMEpCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3YjBKQlExWXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU5ZTzJkQ1FVTkVMRWRCUVVjc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dG5Ra0ZEYkVJc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEyaENMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlR0blFrRkRaQ3hIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdaMEpCUTJ4Q0xIZEVRVUYzUkR0blFrRkRlRVFzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTNCQ0xFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMW9zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPME5CUVVFN1FVRkZSQ3hOUVVGTkxGVkJRVlVzU1VGQlNTeERRVUZETEVsQlFWa3NSVUZCUlN4SlFVRjNRaXhGUVVGRkxFOUJRWEZDTzBsQlEyaEdMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEZOQlFWTTdVVUZEY2tNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1UwRkJVenRSUVVNelF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU53UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0pHTEVOQlFVTTdRVUZGUkN4blJrRkJaMFk3UVVGRGFFWXNUVUZCVFN4VlFVRlZMRTFCUVUwc1EwRkJReXhOUVVGWExFVkJRVVVzVjBGQlowSXNTVUZCU1N4RlFVRkZMRXRCUVdNN1NVRkRkRVVzU1VGQlNTeExRVUZMTzFGQlExQXNTMEZCU3l4SFFVRkhMRWRCUVVjc1MwRkJTeXhKUVVGSkxFTkJRVU03TzFGQlEyeENMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGFFSXNTVUZCU1N4TlFVRk5MRXRCUVVzc1VVRkJVVHRSUVVOeVFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1MwRkJTeXhoUVVGaExGRkJRVkVzVjBGQlZ5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNaRkxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNWMEZCVnl4RFFVRkRMRTFCUVdNc1JVRkJSU3hSUVVGblFpeEZRVUZGTEZOQlFWTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1MwRkJZenRKUVVNM1JpeEpRVUZKTEVOQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4UlFVRlJMRXRCUVVzc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUXpsRkxFTkJRVU1zVFVGQlRTeExRVUZMTEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeFJRVUZSTEV0QlFVc3NUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFGQlF6bEZMRU5CUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NVVUZCVVN4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETVVZc1QwRkJUenRKUVVOVUxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXp0SlFVTjZSQ3hOUVVGTkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SFFVRkhMRXRCUVVzc1lVRkJUQ3hMUVVGTExHTkJRVXdzUzBGQlN5eEhRVUZKTEVWQlFVVXNhVUpCUVdsQ0xGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEY0VVc1NVRkJTU3hEUVVGRExGRkJRVkU3VVVGRFdDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hUUVVGVExFMUJRVTBzYVVKQlFXbENMRk5CUVZNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGRFWXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zVFVGQmFVSXNSVUZCUlN4UlFVRnRRaXhGUVVGRkxFdEJRV003U1VGRGFFWXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eFJRVUZSTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUXpORExFMUJRVTBzWTBGQll5eEhRVUZITEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNN1NVRkRka01zVFVGQlRTeERRVUZETEdOQlFXTXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeEhRVUZITEV0QlFVc3NZVUZCVEN4TFFVRkxMR05CUVV3c1MwRkJTeXhIUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdTVUZGZEVVc1MwRkJTeXhOUVVGTkxFMUJRVTBzU1VGQlNTeFJRVUZSTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUTNKRExFMUJRVTBzV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxGbEJRVmtzU1VGQlNTeEpRVUZKTzFsQlEzUkNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zVlVGQlZTeE5RVUZOTEVOQlFVTXNTVUZCU1N4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVOeVJDeEpRVUZKTEZsQlFWa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWs3V1VGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhWUVVGVkxFMUJRVTBzUTBGQlF5eEpRVUZKTEd0Q1FVRnJRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeFJRVUZSTEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBITEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU42UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzVjBGQlZ5eEhRVUZITEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3p0blFrRkRPVUlzVjBGQlZ5eERRVUZETEZkQlFWY3NSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzJsQ1FVTTFReXhKUVVGSkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVE8yZENRVU4yUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03TzJkQ1FVVXZReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRUUVVOeVF6dExRVU5HTzBGQlEwZ3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3haUVVGWkxFTkJRVU1zVFVGQk9FSXNSVUZCUlN4UlFVRm5RenRKUVVNelJpeExRVUZMTEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJZU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSVHRSUVVOdVJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhYUVVGWExFTkJRVU03V1VGRGNrTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXh6UWtGQmMwSXNWMEZCVnl4aFFVRmhMRU5CUVVNc1EwRkJRenRSUVVWc1JTeE5RVUZOTEZkQlFWY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRGVFTXNTVUZCU1N4WFFVRlhMRmxCUVZrc1MwRkJTeXhKUVVGSkxHRkJRV0VzV1VGQldTeExRVUZMTzFsQlEyaEZMRmRCUVZjc1EwRkJReXhYUVVGWExFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdZVUZEY2tNc1NVRkJTU3hYUVVGWExGbEJRVmtzVFVGQlRTeEpRVUZKTEdGQlFXRXNXVUZCV1N4TlFVRk5PMWxCUTNaRkxGbEJRVmtzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRkRU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUTNKRkxGZEJRVmNzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRja01zU1VGQlNTeFhRVUZYTEVsQlFVa3NZVUZCWVR0WlFVTnVReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdGQlFXRXNZVUZCWVN4alFVRmpMRmRCUVZjc1YwRkJWeXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEycEhPMEZCUTBnc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFhRVUZYTEVOQlFVTXNUVUZCYzBJc1JVRkJSU3hSUVVGM1FqdEpRVU14UlN4TlFVRk5MRmxCUVZrc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEyNURMRTFCUVUwc1kwRkJZeXhIUVVGSExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZGZGtNc1NVRkJTU3haUVVGWkxFbEJRVWtzWTBGQll5eEZRVUZGTzFGQlEyeERMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zTUVSQlFUQkVMRmxCUVZrc1IwRkJSenRaUVVOMlJpeG5RMEZCWjBNc1kwRkJZeXhGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU55UkR0SlFVVkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4WlFVRlpMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGNrTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzUzBGQlN5eEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hMUVVGTE8xbEJRelZFTEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRha01zU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1RVRkJUU3hKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4TlFVRk5PMWxCUTI1RkxGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEYkVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNdlFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhUUVVGVExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1MwRkRha1k3UVVGRFNDeERRVUZETzBGQlJVUXNNa0pCUVRKQ08wRkJRek5DTEUxQlFVMHNWVUZCVlN4UlFVRlJMRU5CUVVNc1VVRkJaMElzUlVGQlJTeExRVUZwUWp0SlFVTXhSQ3hsUVVGbExFZEJRVWNzVVVGQlVTeERRVUZETzBsQlF6TkNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wRkJRMVlzUTBGQlF6dEJRVVZFTEhWR1FVRjFSanRCUVVOMlJpeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRTFCUVRKQ08wbEJRMmhFTEVsQlFVa3NTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhKUVVGSkxGTkJRVk03VVVGRGNrTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU01UWl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTjZReXhEUVVGRE8wRkJSVVFzYzBaQlFYTkdPMEZCUTNSR0xFMUJRVTBzVlVGQlZTeExRVUZMTEVOQlFVTXNTMEZCTUVJN1NVRkRPVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzWkRMRU5CUVVNN1FVRkZSQ3hUUVVGVExGbEJRVmtzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVlR0SlFVTjZReXhQUVVGUExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGRrUXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJaMElzWVVGQllTeERRVUZETEZOQlFXbENMRVZCUVVVc1RVRkJXVHM3VVVGRGFrVXNTVUZCU1N4aFFVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRVVVzVDBGQlR6dFJRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU5zUkN4SlFVRkpMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSVHRaUVVNdlF5eGhRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRMmhETEU5QlFVODdVMEZEVWp0UlFVTkVMRTFCUVUwc1pVRkJaU3hIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU16UWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU0zUml4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhEUVVGRE8xRkJRMjVFTEV0QlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1lVRkJZU3hGUVVGRk8xbEJRemRDTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0blFrRkJSU3hUUVVGVE8xbEJReTlFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZaTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU53UkN4SlFVRkpMRlZCUVZVc1EwRkJRenRuUWtGRFppeEpRVUZKTEZkQlFWY3NTVUZCU1N4RFFVRkJMRmRCUVZjc1lVRkJXQ3hYUVVGWExIVkNRVUZZTEZkQlFWY3NRMEZCUlN4TlFVRk5MRWxCUVVjc1EwRkJRenR2UWtGQlJTeFZRVUZWTEVkQlFVY3NWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU40UlN4bFFVRmxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVZNc1JVRkJSVHR2UWtGRE4wY3NUVUZCVFN4SFFVRkhMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMnBGTERSRFFVRTBRenR2UWtGRE5VTXNTVUZCU1N4SFFVRkhMRXRCUVVzc1NVRkJTVHQzUWtGQlJTeE5RVUZOTEZkQlFWY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03WjBKQlEyaEVMRU5CUVVNc1EwRkJRU3hGUVVGRkxFVkJRVU1zVlVGQlZTeEZRVUZGTEZWQlFWVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVNdlFqdFRRVU5HTzFGQlEwUXNZVUZCWVN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFMUJRVTA3V1VGQlJTeFBRVUZQTzFGQlEzQkRMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRVZCUVVNc1MwRkJTeXhGUVVGRkxHVkJRV1VzUlVGQlF5eERRVUZETzBsQlF6TkVMRU5CUVVNN1EwRkJRVHRCUVVWRUxFMUJRVTBzVlVGQlowSXNVVUZCVVN4RFFVRkRMRTlCUVhWRk96czdPMUZCUTNCSExFMUJRVTBzVVVGQlVTeEhRVUZITEUxQlFVRXNUVUZCUVN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExHTkJRV01zUlVGQlJTd3dRMEZCUlN4SlFVRkpMREJEUVVGRkxFOUJRVThzUTBGQlF6dFJRVU5vUlN4TlFVRk5MR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYWtNc1RVRkJUU3hQUVVGUExFZEJRM1ZFTEVWQlFVVXNRMEZCUXp0UlFVTjJSU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMUZCUXpkQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeFpRVUZCTEU5QlFWRXNSVUZCUXl4WFFVRlhMSFZEUVVGWUxGZEJRVmNzUjBGQlN5eEpRVUZKTEZkQlFWY3NSVUZCUlN4RlFVRkRPMUZCUXpORExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNeFFpeExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVOb1JDeEpRVUZKTEVOQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEZGQlFWRXNTMEZCU1N4VFFVRlRMRVZCUVVVN1owSkJRMnhETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN2IwSkJRMmhGTEZOQlFWTTdZVUZEV2p0WlFVTkVMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRPMWxCUTNaRExFbEJRVWs3WjBKQlEwWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRoUVVONFFqdFpRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMmRDUVVObUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yRkJRMjVETzFsQlEwUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJRU3hMUVVGTExFTkJRVU1zUzBGQlN5eHRRMEZCU1N4RlFVRkZMRU5CUVVNN1dVRkROVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTXZRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTm9SQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVNelJTeEpRVUZKTzJkQ1FVTkdMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXM3YjBKQlEySXNUVUZCVFN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03WVVGRGRrSTdXVUZCUXl4UFFVRlBMRU5CUVUwc1JVRkJSVHRuUWtGRFppeExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dGhRVU5zUXp0WlFVTkVMRWxCUVVrc1MwRkJTeXhEUVVGRExGZEJRVmM3WjBKQlEyNUNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6ZEhMRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVms3WjBKQlEzQkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WlFVRlpMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6bEhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTjJRanRSUVVORUxFbEJRVWtzVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4alFVRmpMRVZCUVVVN1dVRkRkRU1zVFVGQlRTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRiRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzJkQ1FVTnVReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVTllMRkZCUVZFc1JVRkJSU3h6UWtGQmMwSTdiMEpCUTJoRExFbEJRVWtzUlVGQlJTeFpRVUZaTzI5Q1FVTnNRaXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTE8ybENRVU53UlN4RFFVRkRMRU5CUVVNN1lVRkRTanRUUVVOR08xRkJRMFFzU1VGQlNTeFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1JVRkJSVHRaUVVNNVFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU12UWl4TlFVRk5MRlZCUVZVc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUXpORUxFMUJRVTBzVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03V1VGRGVFUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEYWtRc1RVRkJUU3hYUVVGWExFZEJRVWNzZVVaQlFYbEdMRU5CUVVNN1dVRkRPVWNzVFVGQlRTeE5RVUZOTEVkQlFVYzdaMEpCUTJJc1ZVRkJWU3hGUVVGRkxGVkJRVlU3WjBKQlEzUkNMRTlCUVU4c1JVRkJSU3hQUVVGUE8yZENRVU5vUWl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFMUJRVTA3WjBKQlEzSkNMRTlCUVU4c1JVRkJSU3hSUVVGUk8yRkJRMnhDTEVOQlFVTTdXVUZEUml4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFMUJRVTA3WjBKQlFVVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42Uml4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJTeE5RVUZOTEVWQlFVVXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dFRRVU51UkR0UlFVTkVMRTlCUVU4c1QwRkJUeXhEUVVGRE96dERRVU5vUWp0QlFVVkVMRk5CUVdVc1VVRkJVU3hEUVVGRExFTkJRVThzUlVGQlJTeFRRVUUyUWpzN08xRkJRelZFTEVsQlFVa3NRMEZCZFVjc1EwRkJRenRSUVVNMVJ5eE5RVUZOTEUxQlFVMHNSMEZCUnl4VFFVRlRMRWxCUVVrc1UwRkJVeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFRRVUZUTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pITEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVFc1RVRkJRU3hEUVVGRExFTkJRVU1zVDBGQlR5d3dRMEZCUlN4VlFVRlZMRXRCUVVrc1RVRkJUU3hEUVVGRE8xRkJRemRETEUxQlFVMHNWVUZCVlN4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRkJMRU5CUVVNc1EwRkJReXhQUVVGUExEQkRRVUZGTEZWQlFWVXNRMEZCUXp0UlFVTTVSQ3hKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBFTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVrSXNTVUZCU1R0WlFVTkdMRWxCUVVrc1NVRkJTVHRuUWtGRFRpeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeFZRVUZYTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTTdPMmRDUVVVdlJDeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZCTEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3h0UTBGQlNTeEpRVUZKTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTTdVMEZET1VVN1VVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdFpRVU5tTEVOQlFVTXNSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJRenRUUVVOdVJUdFJRVU5FTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVFSXNZVUZCWVR0UlFVTmlMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTndRaXhKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYWtVc1EwRkJReXhEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTNoQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOb1FpeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1EwRkRWanRCUVVWRUxEWkNRVUUyUWp0QlFVTTNRaXhOUVVGTkxGVkJRV2RDTEV0QlFVc3NRMEZCUXl4RlFVRlZPenRSUVVOd1F5eE5RVUZOTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE9VTXNRMEZCUXp0RFFVRkJPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNXVUZCTWtJc1JVRkRNVVFzVVVGQlowSXNhMEpCUVd0Q0xFVkJRVVVzVDBGQlpTeEhRVUZITEVWQlFVVXNWMEZCYlVJc1JVRkJSVHM3VVVGRE4wVXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0WlFVTnlReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTmtMR0ZCUVdFc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZETVVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNMElzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTFRc1lVRkJZVHRaUVVOaUxFMUJRVTBzVlVGQlZTeEhRVUZaTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVN1owSkJRek5ETEVsQlFVa3NXVUZCV1N4RlFVRkZMRVZCUVVVN2IwSkJRMnhDTEdGQlFXRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenR2UWtGRE1VSXNUMEZCVHl4RlFVRkZMRU5CUVVNN2FVSkJRMWc3V1VGRFNDeERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRaaXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5NTEVOQlFVTTdRMEZCUVR0QlFVVkVMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zVjBGQmJVSTdTVUZEYWtRc1RVRkJUU3hQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRKUVVNelF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOMlF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVjBGQlZ6dFpRVU5xUXl4UFFVRlBMRWxCUVVrc1EwRkJRenRMUVVObU8wbEJRMFFzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVdkQ0xFVkJRVVVzYzBKQlFTdENMRXRCUVVzN08xRkJRMmhITEVsQlFVa3NiVUpCUVcxQ08xbEJRVVVzVFVGQlRTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJwRkxFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEzWkRMRTFCUVUwc1ZVRkJWU3hIUVVGSExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUXk5RUxFMUJRVTBzVVVGQlVTeEhRVUZITEVkQlFVY3NWVUZCVlN4WFFVRlhMRlZCUVZVc1VVRkJVU3hWUVVGVk8wMUJRMnBGTEZWQlFWVXNWVUZCVlN4VlFVRlZMRTlCUVU4c1ZVRkJWU3hKUVVGSkxFTkJRVU03VVVGRGVFUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMllzU1VGQlNUdFpRVU5HTEVsQlFVa3NUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETjBJc1RVRkJUU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlF6bEVMRzlDUVVGdlFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpsQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRlRU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU16UkN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU53UkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGQlJTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEY2tRc1JVRkJSU3hEUVVGRExHRkJRV0VzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEY2tJc1RVRkJUU3hMUVVGTExFZEJRVWNzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE0wTXNUVUZCVFN4UlFVRlJMRWRCUVRSQ0xFVkJRVVVzUTBGQlF6dFpRVU0zUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU40Unl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRTFCUVUwc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhOUVVGTkxGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRekZETEVWQlFVVXNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRaUVVOcVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRM2hETEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGRFSXNUVUZCVFN4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRemxFTEdkRFFVRm5ReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF6RkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEZUVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVVXNRMEZCUXp0WlFVTm9SU3hYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE5VVTdaMEpCUVZNN1dVRkRVaXhGUVVGRkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEV0N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0VFFVTXpRanRKUVVOSUxFTkJRVU03UTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQXFJR0Z6SUdkeWIyc2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMmR5YjJzbk8xeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0I3VDJKelpYSjJZV0pzWlN3Z1UzVmljMk55YVhCMGFXOXVmU0JtY205dElDZHllR3B6Snp0Y2JtbHRjRzl5ZENCVWFXMWxiM1YwSUQwZ1RtOWtaVXBUTGxScGJXVnZkWFE3WEc1cGJYQnZjblFnZTBSaGRHRkdjbUZ0WlgwZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSFJsYzNSek9pQjdYRzRnSUZ0clpYazZJSE4wY21sdVoxMDZJSHRjYmlBZ0lDQjBaWE4wY3o4NklGUmxjM1JiWFN3Z1ltVm1iM0psUHpvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1Bpd2dZV1owWlhJL09pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStMRnh1SUNBZ0lHSmxabTl5WlZOMFlYUjFjejg2SUhOMGNtbHVaeXdnWVdaMFpYSlRkR0YwZFhNL09pQnpkSEpwYm1kY2JpQWdmVnh1ZlNBOUlIdDlPMXh1WEc1amIyNXpkQ0JoZFhSdlZHVnpkSE5EWVhST1lXMWxJRDBnSjBGMWRHOGdWR1Z6ZEhNbk8xeHVZMjl1YzNRZ2QyRnpVbVZuYVhOMFpYSmxaRG9nZTF0clpYazZJSE4wY21sdVoxMDZJR0p2YjJ4bFlXNTlJRDBnZTMwN1hHNWxlSEJ2Y25RZ2JHVjBJR04xY25KbGJuUkRZWFJsWjI5eWVUb2djM1J5YVc1bk8xeHVYRzVsZUhCdmNuUWdibUZ0WlhOd1lXTmxJR0Z6YzNWeVpTQjdYRzRnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNST2RXeHNLSFpoYkhWbE9pQmhibmtzSUc1aGJXVS9PaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ0pIdHVZVzFsSUQwOUlHNTFiR3dnUHlBblZtRnNkV1VuSURvZ2JtRnRaWDBnYm05MElHUmxabWx1WldSZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJsYzNSUGNIUnBiMjV6SUh0Y2JpQWdkR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkRDg2SUc1MWJXSmxjanRjYmlBZ2MydHBjRkpsWVhOdmJqODZJSE4wY21sdVp6dGNibjFjYmx4dVpYaHdiM0owSUdOc1lYTnpJRlJsYzNSRGIyNTBaWGgwSUh0Y2JpQWdZMkYwWTJoVmJtaGhibVJzWldRZ1BTQjBjblZsTzF4dUlDQnlaWEJ2Y25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2loallYUmphRlZ1YUdGdVpHeGxaRDg2SUdKdmIyeGxZVzRzSUhKbGNHOXlkRDg2SUdKdmIyeGxZVzRwSUh0Y2JpQWdJQ0JwWmlBb1kyRjBZMmhWYm1oaGJtUnNaV1FnSVQwOUlIVnVaR1ZtYVc1bFpDa2dkR2hwY3k1allYUmphRlZ1YUdGdVpHeGxaQ0E5SUdOaGRHTm9WVzVvWVc1a2JHVmtPMXh1SUNBZ0lHbG1JQ2h5WlhCdmNuUWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2RHaHBjeTV5WlhCdmNuUWdQU0J5WlhCdmNuUTdYRzRnSUgwN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlVaWE4wSUh0Y2JpQWdkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK08xeHVJQ0J1WVcxbE9pQnpkSEpwYm1jN1hHNGdJR05oZEdWbmIzSjVPaUJ6ZEhKcGJtYzdYRzRnSUc5d2RHbHZibk0vT2lCVVpYTjBUM0IwYVc5dWN6dGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQnVZVzFsT2lCemRISnBibWNzSUhSbGMzUTZJQ2dwSUQwK0lGQnliMjFwYzJVOFlXNTVQaXdnYjNCMGFXOXVjejg2SUZSbGMzUlBjSFJwYjI1ektTQjdYRzRnSUNBZ2RHaHBjeTVqWVhSbFoyOXllU0E5SUdOaGRHVm5iM0o1TzF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2IzQjBhVzl1Y3lBL1B6MGdlMzA3WEc0Z0lDQWdiM0IwYVc5dWN5NTBhVzFsYjNWMElEOC9QU0F6TURBd01EdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpPMXh1SUNBZ0lIUm9hWE11ZEdWemRDQTlJR0Z6ZVc1aklDZ3BPaUJRY205dGFYTmxQR0Z1ZVQ0Z1BUNGdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlDY25PMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RDQTlJR0YzWVdsMElIUmxjM1FvS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dZVzU1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvY21WemRXeDBLVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDA3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSFJsYzNSRmRtVnVkRHhVUGlobGRtVnVkRG9nVDJKelpYSjJZV0pzWlR4VVBpeGNiaUFnYUdGdVpHeGxjam9nS0dGeVozTTZJRlFwSUQwK0lIWnZhV1FzSUhSeWFXZG5aWEk2SUNncElEMCtJSFp2YVdRc0lHMXpPaUJ1ZFcxaVpYSWdQU0F3S1RvZ1VISnZiV2x6WlR4emRISnBibWMrSUh0Y2JpQWdiR1YwSUhOMVlqb2dVM1ZpYzJOeWFYQjBhVzl1TzF4dUlDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJSE4xWWlBOUlHVjJaVzUwTG5OMVluTmpjbWxpWlNnb1lYSm5jeWtnUFQ0Z2UxeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjaWhoY21kektUdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnY21WcVpXTjBLR1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0J5WlhOdmJIWmxLQ2RQU3ljcE8xeHVJQ0FnSUgwcE8xeHVJQ0FnSUhObGRGUnBiV1Z2ZFhRb0tDa2dQVDRnZTF4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnY0hKbFptVnlMWEJ5YjIxcGMyVXRjbVZxWldOMExXVnljbTl5YzF4dUlDQWdJQ0FnY21WcVpXTjBLQ2QwYVcxbGIzVjBKeWs3WEc0Z0lDQWdmU3dnYlhNcE8xeHVJQ0FnSUhSeWFXZG5aWElvS1R0Y2JpQWdmU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBaWE4wS0c1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wT2lCMmIybGtJSHRjYmlBZ2FXWWdLSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFNCN2ZUdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdWRHVnpkSE1nUFNCYlhUdGNiaUFnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lFdWNIVnphQ2h1WlhjZ1ZHVnpkQ2hqZFhKeVpXNTBRMkYwWldkdmNua3NJRzVoYldVc0lIUmxjM1FzSUc5d2RHbHZibk1wS1R0Y2JuMWNibHh1THlvZ1ZHVnpkSE1nZEhkdklHOWlhbVZqZEhNZ1ptOXlJR1Z4ZFdGc2FYUjVMQ0IwYUhKdmQzTWdZVzRnWlhoalpYQjBhVzl1SUdsbUlIUm9aWGtnWVhKbElHNXZkQ0JsY1hWaGJDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJsZUhCbFkzUW9ZV04wZFdGc09pQmhibmtzSUdWNGNHVmpkR1ZrT2lCaGJua2dQU0IwY25WbExDQmxjbkp2Y2o4NklITjBjbWx1WnlrNklIWnZhV1FnZTF4dUlDQnBaaUFvWlhKeWIzSXBYRzRnSUNBZ1pYSnliM0lnUFNCZ0pIdGxjbkp2Y24wc0lHQTdYRzRnSUdWc2MyVWdaWEp5YjNJZ1BTQW5KenRjYmlBZ2FXWWdLR0ZqZEhWaGJDQWhQVDBnWlhod1pXTjBaV1FwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQWtlMlZ5Y205eWZVVjRjR1ZqZEdWa0lGd2lKSHRsZUhCbFkzUmxaSDFjSWl3Z1oyOTBJRndpSkh0aFkzUjFZV3g5WENKZ0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWNGNHVmpkRVpzYjJGMEtHRmpkSFZoYkRvZ2JuVnRZbVZ5TENCbGVIQmxZM1JsWkRvZ2JuVnRZbVZ5TENCMGIyeGxjbUZ1WTJVZ1BTQXdMakF3TVN3Z1pYSnliM0kvT2lCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ2FXWWdLQ2hoWTNSMVlXd2dQVDA5SUU1MWJXSmxjaTVRVDFOSlZFbFdSVjlKVGtaSlRrbFVXU0FtSmlCbGVIQmxZM1JsWkNBOVBUMGdUblZ0WW1WeUxsQlBVMGxVU1ZaRlgwbE9Sa2xPU1ZSWktTQjhmRnh1SUNBZ0lDQWdLR0ZqZEhWaGJDQTlQVDBnVG5WdFltVnlMazVGUjBGVVNWWkZYMGxPUmtsT1NWUlpJQ1ltSUdWNGNHVmpkR1ZrSUQwOVBTQk9kVzFpWlhJdVRrVkhRVlJKVmtWZlNVNUdTVTVKVkZrcElIeDhYRzRnSUNBZ0lDQW9ZV04wZFdGc0lEMDlQU0JPZFcxaVpYSXVUbUZPSUNZbUlHVjRjR1ZqZEdWa0lEMDlQU0JPZFcxaVpYSXVUbUZPS1NCOGZDQW9hWE5PWVU0b1lXTjBkV0ZzS1NBbUppQnBjMDVoVGlobGVIQmxZM1JsWkNrcEtWeHVJQ0FnSUhKbGRIVnlianRjYmlBZ1kyOXVjM1FnWVhKbFJYRjFZV3dnUFNCTllYUm9MbUZpY3loaFkzUjFZV3dnTFNCbGVIQmxZM1JsWkNrZ1BDQjBiMnhsY21GdVkyVTdYRzRnSUdWNGNHVmpkQ2hoY21WRmNYVmhiQ3dnZEhKMVpTd2dZQ1I3WlhKeWIzSWdQejhnSnlkOUlDaDBiMnhsY21GdVkyVWdQU0FrZTNSdmJHVnlZVzVqWlgwcFlDazdYRzRnSUdsbUlDZ2hZWEpsUlhGMVlXd3BYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRmVIQmxZM1JsWkNBa2UyVjRjR1ZqZEdWa2ZTd2daMjkwSUNSN1lXTjBkV0ZzZlNBb2RHOXNaWEpoYm1ObElEMGdKSHQwYjJ4bGNtRnVZMlY5S1dBcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlhod1pXTjBWR0ZpYkdVb1lXTjBkV0ZzT2lCRVlYUmhSbkpoYldVc0lHVjRjR1ZqZEdWa09pQkVZWFJoUm5KaGJXVXNJR1Z5Y205eVB6b2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJR052Ym5OMElHVjRjR1ZqZEdWa1VtOTNRMjkxYm5RZ1BTQmxlSEJsWTNSbFpDNXliM2REYjNWdWREdGNiaUFnWTI5dWMzUWdZV04wZFdGc1VtOTNRMjkxYm5RZ1BTQmhZM1IxWVd3dWNtOTNRMjkxYm5RN1hHNGdJR1Y0Y0dWamRDaGhZM1IxWVd4U2IzZERiM1Z1ZEN3Z1pYaHdaV04wWldSU2IzZERiM1Z1ZEN3Z1lDUjdaWEp5YjNJZ1B6OGdKeWQ5TENCeWIzY2dZMjkxYm5SZ0tUdGNibHh1SUNCbWIzSWdLR052Ym5OMElHTnZiSFZ0YmlCdlppQmxlSEJsWTNSbFpDNWpiMngxYlc1ektTQjdYRzRnSUNBZ1kyOXVjM1FnWVdOMGRXRnNRMjlzZFcxdUlEMGdZV04wZFdGc0xtTnZiSFZ0Ym5NdVlubE9ZVzFsS0dOdmJIVnRiaTV1WVcxbEtUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1SUQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRU52YkhWdGJpQWtlMk52YkhWdGJpNXVZVzFsZlNCdWIzUWdabTkxYm1SZ0tUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1TG5SNWNHVWdJVDBnWTI5c2RXMXVMblI1Y0dVcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVOdmJIVnRiaUFrZTJOdmJIVnRiaTV1WVcxbGZTQjBlWEJsSUdWNGNHVmpkR1ZrSUNSN1kyOXNkVzF1TG5SNWNHVjlJR2R2ZENBa2UyRmpkSFZoYkVOdmJIVnRiaTUwZVhCbGZXQXBPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daWGh3WldOMFpXUlNiM2REYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpTQTlJR052YkhWdGJpNW5aWFFvYVNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JoWTNSMVlXeFdZV3gxWlNBOUlHRmpkSFZoYkVOdmJIVnRiaTVuWlhRb2FTazdYRzRnSUNBZ0lDQnBaaUFvWTI5c2RXMXVMblI1Y0dVZ1BUMGdSRWN1VkZsUVJTNUdURTlCVkNsY2JpQWdJQ0FnSUNBZ1pYaHdaV04wUm14dllYUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0F3TGpBd01ERXNJR1Z5Y205eUtUdGNiaUFnSUNBZ0lHVnNjMlVnYVdZZ0tHTnZiSFZ0Ymk1MGVYQmxJRDA5SUVSSExsUlpVRVV1UkVGVVJWOVVTVTFGS1Z4dUlDQWdJQ0FnSUNCbGVIQmxZM1FvWVdOMGRXRnNWbUZzZFdVdWFYTlRZVzFsS0haaGJIVmxLU3dnZEhKMVpTd2daWEp5YjNJcE8xeHVJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0JsZUhCbFkzUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0JsY25KdmNpazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNPaUI3SUZ0clpYazZJSE4wY21sdVoxMDZJR0Z1ZVNCOUxDQmxlSEJsWTNSbFpEb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQmhibmtnZlNrZ2UxeHVJQ0JtYjNJZ0tHTnZibk4wSUZ0bGVIQmxZM1JsWkV0bGVTd2daWGh3WldOMFpXUldZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb1pYaHdaV04wWldRcEtTQjdYRzRnSUNBZ2FXWWdLQ0ZoWTNSMVlXd3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYaHdaV04wWldSTFpYa3BLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkZlSEJsWTNSbFpDQndjbTl3WlhKMGVTQmNJaVI3Wlhod1pXTjBaV1JMWlhsOVhDSWdibTkwSUdadmRXNWtZQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRnRsZUhCbFkzUmxaRXRsZVYwN1hHNGdJQ0FnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JXWVd4MVpTQnBibk4wWVc1alpXOW1JRUZ5Y21GNUtWeHVJQ0FnSUNBZ1pYaHdaV04wUVhKeVlYa29ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnVDJKcVpXTjBJQ1ltSUdWNGNHVmpkR1ZrVm1Gc2RXVWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUXBYRzRnSUNBZ0lDQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLRTUxYldKbGNpNXBjMFpwYm1sMFpTaGhZM1IxWVd4V1lXeDFaU2tnSmlZZ1RuVnRZbVZ5TG1selJtbHVhWFJsS0dWNGNHVmpkR1ZrVm1Gc2RXVXBLVnh1SUNBZ0lDQWdaWGh3WldOMFJteHZZWFFvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUNFOUlHVjRjR1ZqZEdWa1ZtRnNkV1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ2drZTJWNGNHVmpkR1ZrVm1Gc2RXVjlLU0JtYjNJZ2EyVjVJQ2NrZTJWNGNHVmpkR1ZrUzJWNWZTY3NJR2R2ZENBb0pIdGhZM1IxWVd4V1lXeDFaWDBwWUNrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVGeWNtRjVLR0ZqZEhWaGJEb2dRWEp5WVhsTWFXdGxQR0Z1ZVQ0c0lHVjRjR1ZqZEdWa09pQkJjbkpoZVV4cGEyVThZVzU1UGlrZ2UxeHVJQ0JqYjI1emRDQmhZM1IxWVd4TVpXNW5kR2dnUFNCaFkzUjFZV3d1YkdWdVozUm9PMXh1SUNCamIyNXpkQ0JsZUhCbFkzUmxaRXhsYm1kMGFDQTlJR1Y0Y0dWamRHVmtMbXhsYm1kMGFEdGNibHh1SUNCcFppQW9ZV04wZFdGc1RHVnVaM1JvSUNFOUlHVjRjR1ZqZEdWa1RHVnVaM1JvS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JCY25KaGVYTWdZWEpsSUc5bUlHUnBabVpsY21WdWRDQnNaVzVuZEdnNklHRmpkSFZoYkNCaGNuSmhlU0JzWlc1bmRHZ2dhWE1nSkh0aFkzUjFZV3hNWlc1bmRHaDlJR0FnSzF4dUlDQWdJQ0FnWUdGdVpDQmxlSEJsWTNSbFpDQmhjbkpoZVNCc1pXNW5kR2dnYVhNZ0pIdGxlSEJsWTNSbFpFeGxibWQwYUgxZ0tUdGNiaUFnZlZ4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWVdOMGRXRnNUR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JwWmlBb1lXTjBkV0ZzVzJsZElHbHVjM1JoYm1ObGIyWWdRWEp5WVhrZ0ppWWdaWGh3WldOMFpXUmJhVjBnYVc1emRHRnVZMlZ2WmlCQmNuSmhlU2xjYmlBZ0lDQWdJR1Y0Y0dWamRFRnljbUY1S0dGamRIVmhiRnRwWFN3Z1pYaHdaV04wWldSYmFWMHBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZ0cFhTQnBibk4wWVc1alpXOW1JRTlpYW1WamRDQW1KaUJsZUhCbFkzUmxaRnRwWFNCcGJuTjBZVzVqWlc5bUlFOWlhbVZqZENsY2JpQWdJQ0FnSUdWNGNHVmpkRTlpYW1WamRDaGhZM1IxWVd4YmFWMHNJR1Y0Y0dWamRHVmtXMmxkS1R0Y2JpQWdJQ0JsYkhObElHbG1JQ2hoWTNSMVlXeGJhVjBnSVQwZ1pYaHdaV04wWldSYmFWMHBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFVjRjR1ZqZEdWa0lDUjdaWGh3WldOMFpXUmJhVjE5SUdGMElIQnZjMmwwYVc5dUlDUjdhWDBzSUdkdmRDQWtlMkZqZEhWaGJGdHBYWDFnS1R0Y2JpQWdmVnh1ZlZ4dVhHNHZLaUJFWldacGJtVnpJR0VnZEdWemRDQnpkV2wwWlM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmpZWFJsWjI5eWVTaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQjBaWE4wY3pvZ0tDa2dQVDRnZG05cFpDazZJSFp2YVdRZ2UxeHVJQ0JqZFhKeVpXNTBRMkYwWldkdmNua2dQU0JqWVhSbFoyOXllVHRjYmlBZ2RHVnpkSE1vS1R0Y2JuMWNibHh1THlvZ1JHVm1hVzVsY3lCaElHWjFibU4wYVc5dUlIUnZJR0psSUdWNFpXTjFkR1ZrSUdKbFptOXlaU0IwYUdVZ2RHVnpkSE1nYVc0Z2RHaHBjeUJqWVhSbFoyOXllU0JoY21VZ1pYaGxZM1YwWldRdUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZbVZtYjNKbEtHSmxabTl5WlRvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1KbFptOXlaU0E5SUdKbFptOXlaVHRjYm4xY2JseHVMeW9nUkdWbWFXNWxjeUJoSUdaMWJtTjBhVzl1SUhSdklHSmxJR1Y0WldOMWRHVmtJR0ZtZEdWeUlIUm9aU0IwWlhOMGN5QnBiaUIwYUdseklHTmhkR1ZuYjNKNUlHRnlaU0JsZUdWamRYUmxaQzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaFpuUmxjaWhoWm5SbGNqb2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaWs2SUhadmFXUWdlMXh1SUNCcFppQW9kR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOVBTQjFibVJsWm1sdVpXUXBYRzRnSUNBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5SUh0OU8xeHVJQ0IwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZExtRm1kR1Z5SUQwZ1lXWjBaWEk3WEc1OVhHNWNibVoxYm1OMGFXOXVJR0ZrWkU1aGJXVnpjR0ZqWlNoek9pQnpkSEpwYm1jc0lHWTZJRVJITGtaMWJtTXBPaUJ6ZEhKcGJtY2dlMXh1SUNCeVpYUjFjbTRnY3k1eVpYQnNZV05sS0c1bGR5QlNaV2RGZUhBb1ppNXVZVzFsTENBbloya25LU3dnWmk1dWNVNWhiV1VwTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2FXNXBkRUYxZEc5VVpYTjBjeWh3WVdOcllXZGxTV1E2SUhOMGNtbHVaeXdnYlc5a2RXeGxQem9nWVc1NUtTQjdYRzRnSUdsbUlDaDNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwcElISmxkSFZ5Ymp0Y2JpQWdZMjl1YzNRZ2JXOWtkV3hsVkdWemRITWdQU0J0YjJSMWJHVWdQeUJ0YjJSMWJHVXVkR1Z6ZEhNZ09pQjBaWE4wY3p0Y2JpQWdhV1lnS0cxdlpIVnNaVlJsYzNSelcyRjFkRzlVWlhOMGMwTmhkRTVoYldWZElDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0IzWVhOU1pXZHBjM1JsY21Wa1czQmhZMnRoWjJWSlpGMGdQU0IwY25WbE8xeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0JqYjI1emRDQnRiMlIxYkdWQmRYUnZWR1Z6ZEhNZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnY0dGamEwWjFibU4wYVc5dWN5QTlJR0YzWVdsMElHZHliMnN1WkdGd2FTNW1kVzVqZEdsdmJuTXVabWxzZEdWeUtHQndZV05yWVdkbExtbGtJRDBnWENJa2UzQmhZMnRoWjJWSlpIMWNJbUFwTG14cGMzUW9LVHRjYmlBZ1kyOXVjM1FnY21WbklEMGdibVYzSUZKbFowVjRjQ2d2TGlwY1hDOWNYQzljWEhNcWMydHBjRnM2WEZ4elhTb29MaW9wSkM4cE8xeHVJQ0JtYjNJZ0tHTnZibk4wSUdZZ2IyWWdjR0ZqYTBaMWJtTjBhVzl1Y3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFJsYzNSeklEMGdaaTV2Y0hScGIyNXpXeWQwWlhOMEoxMDdYRzRnSUNBZ2FXWWdLQ0VvZEdWemRITWdKaVlnUVhKeVlYa3VhWE5CY25KaGVTaDBaWE4wY3lrZ0ppWWdkR1Z6ZEhNdWJHVnVaM1JvS1NrZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMFpYTjBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzJ0cGNGSmxZWE52Ym5NZ1BTQW9kR1Z6ZEhOYmFWMGdZWE1nYzNSeWFXNW5LUzV0WVhSamFDaHlaV2NwTzF4dUlDQWdJQ0FnYkdWMElITnJhWEJTWldGemIyNDdYRzRnSUNBZ0lDQnBaaUFvYzJ0cGNGSmxZWE52Ym5NZ0ppWWdjMnRwY0ZKbFlYTnZibk0vTG14bGJtZDBhQ0ErSURFcElITnJhWEJTWldGemIyNGdQU0J6YTJsd1VtVmhjMjl1YzFzeFhUdGNiaUFnSUNBZ0lHMXZaSFZzWlVGMWRHOVVaWE4wY3k1d2RYTm9LRzVsZHlCVVpYTjBLR0YxZEc5VVpYTjBjME5oZEU1aGJXVXNJSFJsYzNSekxteGxibWQwYUNBOVBUMGdNU0EvSUdZdWJtRnRaU0E2SUdBa2UyWXVibUZ0WlgwZ0pIdHBJQ3NnTVgxZ0xDQmhjM2x1WXlBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsY3lBOUlHRjNZV2wwSUdkeWIyc3VablZ1WTNScGIyNXpMbVYyWVd3b1lXUmtUbUZ0WlhOd1lXTmxLSFJsYzNSelcybGRMQ0JtS1NrN1hHNGdJQ0FnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTEwYUhKdmR5MXNhWFJsY21Gc1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhNZ0lUMDlJSFJ5ZFdVcElIUm9jbTkzSUdCR1lXbHNaV1E2SUNSN2RHVnpkSE5iYVYxOVlEdGNiaUFnSUNBZ0lIMHNJSHR6YTJsd1VtVmhjMjl1T2lCemEybHdVbVZoYzI5dWZTa3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQjNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwZ1BTQjBjblZsTzF4dUlDQnBaaUFvSVcxdlpIVnNaVUYxZEc5VVpYTjBjeTVzWlc1bmRHZ3BJSEpsZEhWeWJqdGNiaUFnYlc5a2RXeGxWR1Z6ZEhOYllYVjBiMVJsYzNSelEyRjBUbUZ0WlYwZ1BTQjdkR1Z6ZEhNNklHMXZaSFZzWlVGMWRHOVVaWE4wYzMwN1hHNTlYRzVjYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQnlkVzVVWlhOMGN5aHZjSFJwYjI1elB6b2dlMk5oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0IwWlhOMFB6b2djM1J5YVc1bkxDQjBaWE4wUTI5dWRHVjRkRDg2SUZSbGMzUkRiMjUwWlhoMGZTa2dlMXh1SUNCamIyNXpkQ0J3WVdOcllXZGxYeUE5SUdkeWIyc3VablZ1WTNScGIyNXpMbWRsZEVOMWNuSmxiblJEWVd4c0tDay9MbVoxYm1NL0xuQmhZMnRoWjJVN1hHNGdJR0YzWVdsMElHbHVhWFJCZFhSdlZHVnpkSE1vY0dGamEyRm5aVjh1YVdRcE8xeHVJQ0JqYjI1emRDQnlaWE4xYkhSek9pQjdJR05oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0J1WVcxbFB6b2djM1J5YVc1bkxDQnpkV05qWlhOek9pQmliMjlzWldGdUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsYzNWc2REb2djM1J5YVc1bkxDQnRjem9nYm5WdFltVnlMQ0J6YTJsd2NHVmtPaUJpYjI5c1pXRnVJSDFiWFNBOUlGdGRPMXh1SUNCamIyNXpiMnhsTG14dlp5aGdVblZ1Ym1sdVp5QjBaWE4wYzJBcE8xeHVJQ0J2Y0hScGIyNXpJRDgvUFNCN2ZUdGNiaUFnYjNCMGFXOXVjeUV1ZEdWemRFTnZiblJsZUhRZ1B6ODlJRzVsZHlCVVpYTjBRMjl1ZEdWNGRDZ3BPMXh1SUNCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpQTlJQ2NuTzF4dUlDQm1iM0lnS0dOdmJuTjBJRnRyWlhrc0lIWmhiSFZsWFNCdlppQlBZbXBsWTNRdVpXNTBjbWxsY3loMFpYTjBjeWtwSUh0Y2JpQWdJQ0JwWmlBb2IzQjBhVzl1Y3o4dVkyRjBaV2R2Y25rZ0lUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lXdGxlUzUwYjB4dmQyVnlRMkZ6WlNncExuTjBZWEowYzFkcGRHZ29iM0IwYVc5dWN6OHVZMkYwWldkdmNua3VkRzlNYjNkbGNrTmhjMlVvS1NrcFhHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UydGxlWDBnWTJGMFpXZHZjbmxnS1R0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbExtSmxabTl5WlNsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZbVZtYjNKbEtDazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnSUNCMllXeDFaUzVpWldadmNtVlRkR0YwZFhNZ1BTQjRMblJ2VTNSeWFXNW5LQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUhRZ1BTQjJZV3gxWlM1MFpYTjBjeUEvUHlCYlhUdGNiaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFF1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCeVpYTXVjSFZ6YUNoaGQyRnBkQ0JsZUdWalZHVnpkQ2gwVzJsZExDQnZjSFJwYjI1elB5NTBaWE4wS1NrN1hHNGdJQ0FnWTI5dWMzUWdaR0YwWVNBOUlDaGhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaHlaWE1wS1M1bWFXeDBaWElvS0dRcElEMCtJR1F1Y21WemRXeDBJQ0U5SUNkemEybHdjR1ZrSnlrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTNWhablJsY2lsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZV1owWlhJb0tUdGNiaUFnSUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0FnSUhaaGJIVmxMbUZtZEdWeVUzUmhkSFZ6SUQwZ2VDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kbUZzZFdVdVlXWjBaWEpUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWhablJsY2xOMFlYUjFjeXdnYzNWalkyVnpjem9nWm1Gc2MyVXNJRzF6T2lBd0xDQnphMmx3Y0dWa09pQm1ZV3h6WlgwcE8xeHVJQ0FnSUdsbUlDaDJZV3gxWlM1aVpXWnZjbVZUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1zSUhOMVkyTmxjM002SUdaaGJITmxMQ0J0Y3pvZ01Dd2djMnRwY0hCbFpEb2dabUZzYzJWOUtUdGNiaUFnSUNCeVpYTjFiSFJ6TG5CMWMyZ29MaTR1WkdGMFlTazdYRzRnSUgxY2JpQWdhV1lnS0c5d2RHbHZibk11ZEdWemRFTnZiblJsZUhRdVkyRjBZMmhWYm1oaGJtUnNaV1FwSUh0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hoZVNneE1EQXdLVHRjYmlBZ0lDQnBaaUFvWjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNJdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdjbVZ6ZFd4MGN5NXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ1kyRjBaV2R2Y25rNklDZFZibWhoYm1Sc1pXUWdaWGhqWlhCMGFXOXVjeWNzWEc0Z0lDQWdJQ0FnSUc1aGJXVTZJQ2RsZUdObGNIUnBiMjV6Snl4Y2JpQWdJQ0FnSUNBZ2NtVnpkV3gwT2lCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpd2djM1ZqWTJWemN6b2dabUZzYzJVc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCbVlXeHpaVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJR2xtSUNodmNIUnBiMjV6TG5SbGMzUkRiMjUwWlhoMExuSmxjRzl5ZENrZ2UxeHVJQ0FnSUdOdmJuTjBJR3h2WjJkbGNpQTlJRzVsZHlCRVJ5NU1iMmRuWlhJb0tUdGNiaUFnSUNCamIyNXpkQ0J6ZFdOalpYTnpablZzSUQwZ2NtVnpkV3gwY3k1bWFXeDBaWElvS0hJcElEMCtJSEl1YzNWalkyVnpjeWt1YkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUhOcmFYQndaV1FnUFNCeVpYTjFiSFJ6TG1acGJIUmxjaWdvY2lrZ1BUNGdjaTV6YTJsd2NHVmtLUzVzWlc1bmRHZzdYRzRnSUNBZ1kyOXVjM1FnWm1GcGJHVmtJRDBnY21WemRXeDBjeTVtYVd4MFpYSW9LSElwSUQwK0lDRnlMbk4xWTJObGMzTXBPMXh1SUNBZ0lHTnZibk4wSUdSbGMyTnlhWEIwYVc5dUlEMGdKMUJoWTJ0aFoyVWdRSEJoWTJ0aFoyVWdkR1Z6ZEdWa09pQkFjM1ZqWTJWemMyWjFiQ0J6ZFdOalpYTnpablZzTENCQWMydHBjSEJsWkNCemEybHdjR1ZrTENCQVptRnBiR1ZrSUdaaGFXeGxaQ0IwWlhOMGN5YzdYRzRnSUNBZ1kyOXVjM1FnY0dGeVlXMXpJRDBnZTF4dUlDQWdJQ0FnYzNWalkyVnpjMloxYkRvZ2MzVmpZMlZ6YzJaMWJDeGNiaUFnSUNBZ0lITnJhWEJ3WldRNklITnJhWEJ3WldRc1hHNGdJQ0FnSUNCbVlXbHNaV1E2SUdaaGFXeGxaQzVzWlc1bmRHZ3NYRzRnSUNBZ0lDQndZV05yWVdkbE9pQndZV05yWVdkbFgxeHVJQ0FnSUgwN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCeUlHOW1JR1poYVd4bFpDa2dUMkpxWldOMExtRnpjMmxuYmlod1lYSmhiWE1zSUh0YllDUjdjaTVqWVhSbFoyOXllWDBnZkNBa2UzSXVibUZ0WlgxZ1hUb2djaTV5WlhOMWJIUjlLVHRjYmlBZ0lDQnNiMmRuWlhJdWJHOW5LR1JsYzJOeWFYQjBhVzl1TENCd1lYSmhiWE1zSUNkd1lXTnJZV2RsTFhSbGMzUmxaQ2NwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhOMWJIUnpPMXh1ZlZ4dVhHNWhjM2x1WXlCbWRXNWpkR2x2YmlCbGVHVmpWR1Z6ZENoME9pQlVaWE4wTENCd2NtVmthV05oZEdVNklITjBjbWx1WnlCOElIVnVaR1ZtYVc1bFpDa2dlMXh1SUNCc1pYUWdjam9nZXlCallYUmxaMjl5ZVQ4NklITjBjbWx1Wnl3Z2JtRnRaVDg2SUhOMGNtbHVaeXdnYzNWalkyVnpjem9nWW05dmJHVmhiaXdnY21WemRXeDBPaUJ6ZEhKcGJtY3NJRzF6T2lCdWRXMWlaWElzSUhOcmFYQndaV1E2SUdKdmIyeGxZVzRnZlR0Y2JpQWdZMjl1YzNRZ1ptbHNkR1Z5SUQwZ2NISmxaR2xqWVhSbElDRTlJSFZ1WkdWbWFXNWxaQ0FtSmlBb0lYUXVibUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BMbk4wWVhKMGMxZHBkR2dvY0hKbFpHbGpZWFJsTG5SdlRHOTNaWEpEWVhObEtDa3BLVHRjYmlBZ1kyOXVjM1FnYzJ0cGNDQTlJSFF1YjNCMGFXOXVjejh1YzJ0cGNGSmxZWE52YmlCOGZDQm1hV3gwWlhJN1hHNGdJR052Ym5OMElITnJhWEJTWldGemIyNGdQU0JtYVd4MFpYSWdQeUFuYzJ0cGNIQmxaQ2NnT2lCMExtOXdkR2x2Ym5NL0xuTnJhWEJTWldGemIyNDdYRzRnSUdsbUlDZ2hjMnRwY0NsY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UzUXVZMkYwWldkdmNubDlJQ1I3ZEM1dVlXMWxmV0FwTzF4dUlDQmpiMjV6ZENCemRHRnlkQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYVdZZ0tITnJhWEFwWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nYzJ0cGNGSmxZWE52YmlFc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCMGNuVmxmVHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nWVhkaGFYUWdkQzUwWlhOMEtDa2dQejhnSjA5TEp5d2diWE02SURBc0lITnJhWEJ3WldRNklHWmhiSE5sZlR0Y2JpQWdmU0JqWVhSamFDQW9lRG9nWVc1NUtTQjdYRzRnSUNBZ2NpQTlJSHR6ZFdOalpYTnpPaUJtWVd4elpTd2djbVZ6ZFd4ME9pQjRMblJ2VTNSeWFXNW5LQ2tzSUcxek9pQXdMQ0J6YTJsd2NHVmtPaUJtWVd4elpYMDdYRzRnSUgxY2JpQWdZMjl1YzNRZ2MzUnZjQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJQzh2SUVCMGN5MXBaMjV2Y21WY2JpQWdjaTV0Y3lBOUlITjBiM0FnTFNCemRHRnlkRHRjYmlBZ2FXWWdLQ0Z6YTJsd0tWeHVJQ0FnSUdOdmJuTnZiR1V1Ykc5bktHQkdhVzVwYzJobFpDQWtlM1F1WTJGMFpXZHZjbmw5SUNSN2RDNXVZVzFsZlNCbWIzSWdKSHR5TG0xemZTQnRjMkFwTzF4dUlDQnlMbU5oZEdWbmIzSjVJRDBnZEM1allYUmxaMjl5ZVR0Y2JpQWdjaTV1WVcxbElEMGdkQzV1WVcxbE8xeHVJQ0J5WlhSMWNtNGdjanRjYm4xY2JseHVMeW9nVjJGcGRITWdXMjF6WFNCdGFXeHNhWE5sWTI5dVpITWdLaTljYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQmtaV3hoZVNodGN6b2diblZ0WW1WeUtTQjdYRzRnSUdGM1lXbDBJRzVsZHlCUWNtOXRhWE5sS0NoeUtTQTlQaUJ6WlhSVWFXMWxiM1YwS0hJc0lHMXpLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCaGQyRnBkRU5vWldOcktHTm9aV05yU0dGdVpHeGxjam9nS0NrZ1BUNGdZbTl2YkdWaGJpeGNiaUFnWlhKeWIzSTZJSE4wY21sdVp5QTlJQ2RVYVcxbGIzVjBJR1Y0WTJWbFpHVmtKeXdnZDJGcGREb2diblZ0WW1WeUlEMGdOVEF3TENCcGJuUmxjblpoYkRvZ2JuVnRZbVZ5SUQwZ05UQXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUdOc1pXRnlTVzUwWlhKMllXd29hVzUwWlhKMllXeEpaQ2s3WEc0Z0lDQWdJQ0J5WldwbFkzUW9ibVYzSUVWeWNtOXlLR1Z5Y205eUtTazdYRzRnSUNBZ2ZTd2dkMkZwZENrN1hHNGdJQ0FnTHk4Z1FIUnpMV2xuYm05eVpWeHVJQ0FnSUdOdmJuTjBJR2x1ZEdWeWRtRnNTV1E2SUZScGJXVnZkWFFnUFNCelpYUkpiblJsY25aaGJDZ29LU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9ZMmhsWTJ0SVlXNWtiR1Z5S0NrcElIdGNiaUFnSUNBZ0lDQWdZMnhsWVhKSmJuUmxjblpoYkNocGJuUmxjblpoYkVsa0tUdGNiaUFnSUNBZ0lDQWdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHNJR2x1ZEdWeWRtRnNLVHRjYmlBZ2ZTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwUnBZV3h2WjFCeVpYTmxiblFvWkdsaGJHOW5WR2wwYkdVNklITjBjbWx1WnlrNklHSnZiMnhsWVc0Z2UxeHVJQ0JqYjI1emRDQmthV0ZzYjJkeklEMGdSRWN1UkdsaGJHOW5MbWRsZEU5d1pXNUVhV0ZzYjJkektDazdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pHbGhiRzluY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2hrYVdGc2IyZHpXMmxkTG5ScGRHeGxJRDA5SUdScFlXeHZaMVJwZEd4bEtWeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHWmhiSE5sTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2RHVnpkRlpwWlhkbGNpaDJPaUJ6ZEhKcGJtY3NJR1JtT2lCRVJ5NUVZWFJoUm5KaGJXVXNJR1JsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE02SUdKdmIyeGxZVzRnUFNCbVlXeHpaU2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNCcFppQW9aR1YwWldOMFUyVnRZVzUwYVdOVWVYQmxjeWtnWVhkaGFYUWdaM0p2YXk1a1lYUmhMbVJsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE1vWkdZcE8xeHVJQ0JqYjI1emRDQjBkaUE5SUdkeWIyc3VjMmhsYkd3dVlXUmtWR0ZpYkdWV2FXVjNLR1JtS1R0Y2JpQWdZMjl1YzNRZ2RtbGxkMlZ5VG1GdFpTQTlJR0JiYm1GdFpUMTJhV1YzWlhJdEpIdDJMbkpsY0d4aFkyVW9MMXhjY3lzdlp5d2dKeTBuS1gwZ2FWMWdPMXh1SUNCamIyNXpkQ0J6Wld4bFkzUnZjaUE5SUdBa2UzWnBaWGRsY2s1aGJXVjlJR05oYm5aaGN5d2tlM1pwWlhkbGNrNWhiV1Y5SUhOMlp5d2tlM1pwWlhkbGNrNWhiV1Y5SUdsdFp5eGNiaUFnSUNBa2UzWnBaWGRsY2s1aGJXVjlJR2x1Y0hWMExDUjdkbWxsZDJWeVRtRnRaWDBnYURFc0pIdDJhV1YzWlhKT1lXMWxmU0JoWUR0Y2JpQWdZMjl1YzNRZ2NtVnpJRDBnVzEwN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYkdWMElIWnBaWGRsY2lBOUlIUjJMbUZrWkZacFpYZGxjaWgyS1R0Y2JpQWdJQ0JoZDJGcGRDQmhkMkZwZEVOb1pXTnJLQ2dwSUQwK0lHUnZZM1Z0Wlc1MExuRjFaWEo1VTJWc1pXTjBiM0lvYzJWc1pXTjBiM0lwSUNFOVBTQnVkV3hzTEZ4dUlDQWdJQ0FnSjJOaGJtNXZkQ0JzYjJGa0lIWnBaWGRsY2ljc0lETXdNREFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0JCY25KaGVTNW1jbTl0S0dSbUxuSnZkeWd3S1M1alpXeHNjeWt1Wm05eVJXRmphQ2dvWXlrZ1BUNGdZeTUyWVd4MVpTQTlJRzUxYkd3cE8xeHVJQ0FnSUdSbUxuSnZkM011YzJWc1pXTjBLQ2h5YjNjcElEMCtJSEp2ZHk1cFpIZ2dQaUF4SUNZbUlISnZkeTVwWkhnZ1BDQTNLVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTnpzZ2FTQThJREV5T3lCcEt5c3BJR1JtTG1acGJIUmxjaTV6WlhRb2FTd2dabUZzYzJVcE8xeHVJQ0FnSUdSbUxtTjFjbkpsYm5SU2IzZEpaSGdnUFNBeE8xeHVJQ0FnSUdOdmJuTjBJSEJ5YjNCeklEMGdkbWxsZDJWeUxtZGxkRTl3ZEdsdmJuTW9kSEoxWlNrdWJHOXZhenRjYmlBZ0lDQmpiMjV6ZENCdVpYZFFjbTl3Y3pvZ1VtVmpiM0prUEhOMGNtbHVaeXdnWW05dmJHVmhiajRnUFNCN2ZUdGNiaUFnSUNCUFltcGxZM1F1YTJWNWN5aHdjbTl3Y3lrdVptbHNkR1Z5S0NocktTQTlQaUIwZVhCbGIyWWdjSEp2Y0hOYmExMGdQVDA5SUNkaWIyOXNaV0Z1SnlrdVptOXlSV0ZqYUNnb2F5a2dQVDRnYm1WM1VISnZjSE5iYTEwZ1BTQWhjSEp2Y0hOYmExMHBPMXh1SUNBZ0lIWnBaWGRsY2k1elpYUlBjSFJwYjI1ektHNWxkMUJ5YjNCektUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJR052Ym5OMElHeGhlVzkxZENBOUlIUjJMbk5oZG1WTVlYbHZkWFFvS1R0Y2JpQWdJQ0JqYjI1emRDQnZiR1JRY205d2N5QTlJSFpwWlhkbGNpNW5aWFJQY0hScGIyNXpLQ2t1Ykc5dmF6dGNiaUFnSUNCMGRpNXlaWE5sZEV4aGVXOTFkQ2dwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IwZGk1c2IyRmtUR0Y1YjNWMEtHeGhlVzkxZENrN1hHNGdJQ0FnWVhkaGFYUWdZWGRoYVhSRGFHVmpheWdvS1NBOVBpQmtiMk4xYldWdWRDNXhkV1Z5ZVZObGJHVmpkRzl5S0hObGJHVmpkRzl5S1NBaFBUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkallXNXViM1FnYkc5aFpDQjJhV1YzWlhJZ1puSnZiU0JzWVhsdmRYUW5MQ0F6TURBd0tUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IyYVdWM1pYSWdQU0JCY25KaGVTNW1jbTl0S0hSMkxuWnBaWGRsY25NcExtWnBibVFvS0hZcElEMCtJSFl1ZEhsd1pTQWhQVDBnSjBkeWFXUW5LU0U3WEc0Z0lDQWdaWGh3WldOMFFYSnlZWGtvY21WekxDQmJNaXdnTVN3Z01sMHBPMXh1SUNBZ0lHVjRjR1ZqZENoS1UwOU9Mbk4wY21sdVoybG1lU2gyYVdWM1pYSXVaMlYwVDNCMGFXOXVjeWdwTG14dmIyc3BMQ0JLVTA5T0xuTjBjbWx1WjJsbWVTaHZiR1JRY205d2N5a3BPMXh1SUNCOUlHWnBibUZzYkhrZ2UxeHVJQ0FnSUhSMkxtTnNiM05sS0NrN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1amJHOXpaVlJoWW14bEtHUm1LVHRjYmlBZ2ZWeHVmVnh1SWwxOSIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG4vKiogRGVtbyBzY3JpcHQgY2xhc3MuIENvdWxkIGJlIHVzZWQgZm9yIGNyZWF0aW5nIGRlbW8gc2NyaXB0cyB0byBzaG93IHRoZSBwbGF0Zm9ybSBjYXBhYmlsaXRpZXMgKi9cbmV4cG9ydCBjbGFzcyBEZW1vU2NyaXB0IHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjcmlwdGlvbiwgaXNBdXRvbWF0aWMgPSBmYWxzZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX2lzQXV0b21hdGljID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2F1dG9TdGFydEZpcnN0U3RlcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RlcCA9IDA7XG4gICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm9vdCA9IHVpLmRpdihbXSwgeyBpZDogJ2RlbW8tc2NyaXB0JyxcbiAgICAgICAgICAgIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBbXTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgyKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9zdG9wU3RhcnRCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdwYXVzZScpLCAoKSA9PiB0aGlzLl9jaGFuZ2VTdG9wU3RhdGUoKSwgJ1BsYXkgLyBwYXVzZScpO1xuICAgICAgICB0aGlzLl9yZXN0YXJ0QnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncmVkbycpLCAoKSA9PiB0aGlzLl9yZXN0YXJ0U2NyaXB0KCksICdSZXN0YXJ0Jyk7XG4gICAgICAgIHRoaXMuX25leHRTdGVwQnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncGxheScpLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU3RlcFByb2Nlc3NlZClcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICB9LCAnTmV4dCBzdGVwJyk7XG4gICAgICAgIHRoaXMuX2FjdGl2aXR5ID0gdWkucGFuZWwoW10sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0RpdiA9IHVpLmRpdlYoW10sICd0dXRvcmlhbHMtcm9vdC1wcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHVpLmVsZW1lbnQoJ3Byb2dyZXNzJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMgPSB1aS5kaXZUZXh0KCcnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdjaGV2cm9uLWxlZnQnKSwgKCkgPT4gdGhpcy5fY2xvc2VEb2NrKCksICdCYWNrIHRvIGRlbW8nKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLl9pc0F1dG9tYXRpYyA9IGlzQXV0b21hdGljO1xuICAgICAgICB0aGlzLl9hdXRvU3RhcnRGaXJzdFN0ZXAgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYXV0b1N0YXJ0Rmlyc3RTdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUgPSAxO1xuICAgICAgICBEZW1vU2NyaXB0LmN1cnJlbnRPYmplY3QgPSB0aGlzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBkZW1vIHNjcmlwdCBzdGVwcyAqL1xuICAgIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyB0aGUgYW1vdW50IG9mIGRlbW8gc2NyaXB0IHN0ZXBzICovXG4gICAgZ2V0IHN0ZXBOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKiBBZGRzIHNjcmlwdCBoZWFkZXIgKi9cbiAgICBfYWRkSGVhZGVyKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVIZWFkZXJEaXYoKTtcbiAgICAgICAgdGhpcy5fY3JlYXRlUHJvZ3Jlc3NEaXYoKTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlci5hcHBlbmQodGhpcy5faGVhZGVyRGl2LCB0aGlzLl9wcm9ncmVzc0Rpdik7XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNjcmlwdCBoZWFkZXIgZGl2ICovXG4gICAgX2NyZWF0ZUhlYWRlckRpdigpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyLmlubmVyVGV4dCA9IHRoaXMubmFtZTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9jbG9zZUJ0bik7XG4gICAgICAgIHRoaXMuX2hlYWRlckRpdi5hcHBlbmQodGhpcy5faGVhZGVyKTtcbiAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9pc0F1dG9tYXRpYyA/IHRoaXMuX3N0b3BTdGFydEJ0biA6IHRoaXMuX25leHRTdGVwQnRuKTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc2NyaXB0IHByb2dyZXNzIGRpdiAqL1xuICAgIF9jcmVhdGVQcm9ncmVzc0RpdigpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gdGhpcy5zdGVwTnVtYmVyO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0Rpdi5hcHBlbmQodGhpcy5fcHJvZ3Jlc3MpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dChgU3RlcDogJHt0aGlzLl9wcm9ncmVzcy52YWx1ZX0gb2YgJHt0aGlzLnN0ZXBOdW1iZXJ9YCk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzRGl2LmFwcGVuZCh0aGlzLl9wcm9ncmVzc1N0ZXBzKTtcbiAgICB9XG4gICAgLyoqIEFkZHMgZGVzY3JpcHRpb24gb2YgdGhlIHNjcmlwdCAqL1xuICAgIF9hZGREZXNjcmlwdGlvbigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eS5hcHBlbmQodWkuZGl2KHRoaXMuZGVzY3JpcHRpb24sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0ZXBOdW1iZXI7IGkrKykge1xuICAgICAgICAgICAgbGV0IGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjbG9jaycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdwbGF5JywgKCkgPT4gdGhpcy5fbmV4dFN0ZXAoKSwgJ05leHQgc3RlcCcpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbkluZGljYXRvci5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkRpdiA9IHVpLmRpdih0aGlzLl9zdGVwc1tpXS5uYW1lLCAnZ3Jvay10dXRvcmlhbC1lbnRyeS1pbnN0cnVjdGlvbicpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0ZXBEZXNjcmlwdGlvbiA9IHVpLmRpdigoX2EgPSB0aGlzLl9zdGVwc1tpXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVzY3JpcHRpb24sICdncm9rLXR1dG9yaWFsLXN0ZXAtZGVzY3JpcHRpb24gaGlkZGVuJyk7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHVpLmRpdkgoW1xuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yLFxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uRGl2LFxuICAgICAgICAgICAgXSwgJ2dyb2stdHV0b3JpYWwtZW50cnknKTtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2aXR5LmFwcGVuZChlbnRyeSwgY3VycmVudFN0ZXBEZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIEluaXRpYWxpemVzIHRoZSByb290IG9mIHRoZSBkZW1vIHNjcmlwdCAqL1xuICAgIF9pbml0Um9vdCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93Q29udGV4dFBhbmVsID0gdHJ1ZTtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dIZWxwID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNjcmlwdERvY2tOb2RlID0gQXJyYXkuZnJvbShncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLnJvb3ROb2RlLmNoaWxkcmVuKVswXTtcbiAgICAgICAgdGhpcy5fbm9kZSA9IGdyb2suc2hlbGwuZG9ja01hbmFnZXIuZG9jayh0aGlzLl9yb290LCBERy5ET0NLX1RZUEUuRklMTCwgc2NyaXB0RG9ja05vZGUsICcnKTtcbiAgICAgICAgaWYgKChfYiA9IChfYSA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxhc3RFbGVtZW50Q2hpbGQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jbGFzc0xpc3QuY29udGFpbnMoJ3RhYi1oYW5kbGUtbGlzdC1jb250YWluZXInKSlcbiAgICAgICAgICAgIChfYyA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxhc3RFbGVtZW50Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX25vZGUuY29udGFpbmVyLmNvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHV0b3JpYWxzLWRlbW8tc2NyaXB0LWNvbnRhaW5lcicpO1xuICAgICAgICB0aGlzLl9hZGRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5fcm9vdC5hcHBlbmQodGhpcy5fbWFpbkhlYWRlcik7XG4gICAgICAgIHRoaXMuX2FkZERlc2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuX3Jvb3QuYXBwZW5kKHRoaXMuX2FjdGl2aXR5KTtcbiAgICB9XG4gICAgLyoqIFByb2Nlc3NlcyBuZXh0IHN0ZXAgKi9cbiAgICBfbmV4dFN0ZXAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25leHRTdGVwQnRuLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc0xpc3QuYWRkKCdmYS1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLXR1dG9yaWFsLWVudHJ5JylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgY29uc3QgZW50cnlJbmRpY2F0b3IgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKVt0aGlzLl9jdXJyZW50U3RlcF07XG4gICAgICAgICAgICBjb25zdCBlbnRyeUluc3RydWN0aW9uID0gdGhpcy5fYWN0aXZpdHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay10dXRvcmlhbC1zdGVwLWRlc2NyaXB0aW9uJylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgZW50cnlJbmRpY2F0b3IuY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluJztcbiAgICAgICAgICAgIGVudHJ5SW5zdHJ1Y3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgICAgICBlbnRyeUluc3RydWN0aW9uLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gZW50cnk7XG4gICAgICAgICAgICBjb25zdCBzdGVwRGVsYXkgPSAoKF9hID0gdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWxheSkgP1xuICAgICAgICAgICAgICAgIChfYiA9IHRoaXMuX3N0ZXBzW3RoaXMuX2N1cnJlbnRTdGVwXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVsYXkgOiAyMDAwO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLmZ1bmMoKTtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Jvb3QsIGN1cnJlbnRTdGVwLm9mZnNldFRvcCAtIHRoaXMuX21haW5IZWFkZXIub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuX2NvdW50ZG93bihlbnRyeSwgZW50cnlJbmRpY2F0b3IsIHN0ZXBEZWxheSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZGVsYXkoc3RlcERlbGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld0VudHJ5SW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjaGVjaycpO1xuICAgICAgICAgICAgZW50cnlJbmRpY2F0b3IucmVwbGFjZVdpdGgobmV3RW50cnlJbmRpY2F0b3IpO1xuICAgICAgICAgICAgbmV3RW50cnlJbmRpY2F0b3IuY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtY2hlY2snO1xuICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUrKztcbiAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMuaW5uZXJUZXh0ID0gYFN0ZXA6ICR7dGhpcy5fcHJvZ3Jlc3MudmFsdWV9IG9mICR7dGhpcy5zdGVwTnVtYmVyfWA7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RlcCsrO1xuICAgICAgICAgICAgdGhpcy5faXNTdGVwUHJvY2Vzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0ZXAgPT09IHRoaXMuc3RlcE51bWJlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzQXV0b21hdGljID8gdGhpcy5fc3RvcFN0YXJ0QnRuLnJlcGxhY2VXaXRoKHRoaXMuX3Jlc3RhcnRCdG4pIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4ucmVwbGFjZVdpdGgodGhpcy5fcmVzdGFydEJ0bik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTdGVwRW50cnlJbmRpY2F0b3IgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKVt0aGlzLl9jdXJyZW50U3RlcF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnROZXh0U3RlcEljb24gPSB1aS5pY29uRkEoJ3BsYXknLCAoKSA9PiB0aGlzLl9uZXh0U3RlcCgpLCAnTmV4dCBzdGVwJyk7XG4gICAgICAgICAgICAgICAgc3RhcnROZXh0U3RlcEljb24uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXMgZmEtcGxheSc7XG4gICAgICAgICAgICAgICAgbmV4dFN0ZXBFbnRyeUluZGljYXRvci5yZXBsYWNlV2l0aChzdGFydE5leHRTdGVwSWNvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5maXJzdENoaWxkLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhLWRpc2FibGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKiogU3RhcnRzIHRoZSBkZW1vIHNjcmlwdCBhY3Rpb25zICovXG4gICAgX3N0YXJ0U2NyaXB0KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2N1cnJlbnRTdGVwOyBpIDwgdGhpcy5zdGVwTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNTdG9wcGVkIHx8IHRoaXMuX2lzQ2FuY2VsbGVkKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2Nyb2xscyB0byB0aGUgY3VycmVudCBzdGVwXG4gICAgICogQHBhcmFtIGVsZW1lbnQgLSBDdXJyZW50IHN0ZXAgZWxlbWVudCBpbiByb290XG4gICAgICogQHBhcmFtIHkgLSB5IGNvb3JkaW5hdGUgb2YgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBfc2Nyb2xsVG8oZWxlbWVudCwgeSkge1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0geTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBpbnRlcmFjdGl2ZSBkZWxheSBpbmRpY2F0b3JcbiAgICAgKiBAcGFyYW0gZWxlbWVudCAtIEN1cnJlbnQgc3RlcCBlbGVtZW50XG4gICAgICogQHBhcmFtIGluZGljYXRvciAtIEN1cnJlbnQgc3RlcCBpbmRpY2F0b3JcbiAgICAgKiBAcGFyYW0gdGltZSAtIEluZGljYXRvciBhbmltYXRpb24gdGltZVxuICAgICAqL1xuICAgIF9jb3VudGRvd24oZWxlbWVudCwgaW5kaWNhdG9yLCB0aW1lKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudGRvd25EaXYgPSB1aS5kaXYoW10sICdkZW1vLXNjcmlwdC1jb3VudGRvd24nKTtcbiAgICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgICAgIGxldCBjb3VudGRvd24gPSB0aW1lIC8gMTAwMDtcbiAgICAgICAgICAgIGNvbnN0IHN2ZyA9IHRoaXMuX2NyZWF0ZVNWR0luZGljYXRvcihjb3VudGRvd24pO1xuICAgICAgICAgICAgY291bnRkb3duRGl2LmFwcGVuZChzdmcpO1xuICAgICAgICAgICAgZWxlbWVudC5wcmVwZW5kKGNvdW50ZG93bkRpdik7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGRvd24tLTtcbiAgICAgICAgICAgICAgICBpZiAoY291bnRkb3duID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGRvd25EaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgU1ZHIHdpdGggY291bnRkb3duIGNpcmNsZVxuICAgICAqIEBwYXJhbSBjb3VudGRvd24gLSBjb3VudGRvd24gdGltZVxuICAgICAqIEByZXR1cm5zIFNWRyBjb3VudGRvd24gaW5kaWNhdG9yXG4gICAgICovXG4gICAgX2NyZWF0ZVNWR0luZGljYXRvcihjb3VudGRvd24pIHtcbiAgICAgICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnKTtcbiAgICAgICAgY29uc3QgY2lyY2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdjaXJjbGUnKTtcbiAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICc3Jyk7XG4gICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3knLCAnNycpO1xuICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3InLCAnNicpO1xuICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0eWxlJywgYGFuaW1hdGlvbjogY291bnRkb3duICR7Y291bnRkb3dufXMgbGluZWFyIGluZmluaXRlIGZvcndhcmRzYCk7XG4gICAgICAgIHN2Zy5hcHBlbmQoY2lyY2xlKTtcbiAgICAgICAgcmV0dXJuIHN2ZztcbiAgICB9XG4gICAgLyoqIENoYW5nZXMgdGhlIHN0YXRlIG9mIHRoZSBkZW1vIHNjcmlwdCAoc3RvcC9wbGF5KSAqL1xuICAgIF9jaGFuZ2VTdG9wU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9zdG9wU3RhcnRCdG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXMgZmEtcGxheSc7XG4gICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9ICF0aGlzLl9pc1N0b3BwZWQ7XG4gICAgICAgIGlmICghdGhpcy5faXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBpY29uWzBdLmNsYXNzTmFtZSA9ICdncm9rLWljb24gZmFsIGZhLXBhdXNlJztcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNTdGVwUHJvY2Vzc2VkKVxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2NyaXB0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIFJlc3RhcnRzIHRoZSBzY3JpcHQgKi9cbiAgICBfcmVzdGFydFNjcmlwdCgpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC5kb2NrTWFuYWdlci5jbG9zZSh0aGlzLl9ub2RlKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgICB0aGlzLl9jbGVhclJvb3QoKTtcbiAgICAgICAgdGhpcy5fc2V0SW5pdFBhcmFtcygpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICAgIC8qKiBDbGVhcnMgdGhlIHJvb3QgZWxlbWVudCAqL1xuICAgIF9jbGVhclJvb3QoKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB1aS5kaXYoW10sIHsgaWQ6ICdkZW1vLXNjcmlwdCcsIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgyKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eSA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLXJvb3QtZGVzY3JpcHRpb24nKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NEaXYgPSB1aS5kaXZWKFtdLCAndHV0b3JpYWxzLXJvb3QtcHJvZ3Jlc3MnKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB1aS5lbGVtZW50KCdwcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dCgnJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLm1heCA9IDA7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLnZhbHVlID0gMTtcbiAgICB9XG4gICAgLyoqIFNldHMgaW5pdGlhbCBwYXJhbWV0ZXJzICovXG4gICAgX3NldEluaXRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwID0gMDtcbiAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9zdG9wU3RhcnRCdG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYWwgZmEtcGF1c2UnO1xuICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xuICAgIH1cbiAgICAvKiogQ2xvc2VzIGRlbW8gc2NyaXB0IGRvY2sgKi9cbiAgICBfY2xvc2VEb2NrKCkge1xuICAgICAgICBncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLmNsb3NlKHRoaXMuX25vZGUpO1xuICAgICAgICB0aGlzLmNhbmNlbFNjcmlwdCgpO1xuICAgIH1cbiAgICAvKiogQ2FuY2VscyB0aGUgc2NyaXB0ICovXG4gICAgY2FuY2VsU2NyaXB0KCkge1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIERlbW9TY3JpcHQuY3VycmVudE9iamVjdCA9IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgc3RlcCB0byBzY3JpcHRcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFN0ZXAgbmFtZVxuICAgICAqIEBwYXJhbSBmdW5jIC0gU3RlcCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gU3RlcCBvcHRpb25zIChkZXNjcmlwdGlvbiBhbmQgZGVsYXkgYWZ0ZXIgc3RlcCBlbmRzKVxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGN1cnJlbnQgZGVtbyBzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgc3RlcChuYW1lLCBmdW5jLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBzW3RoaXMuc3RlcHMubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKiBTdGFydHMgdGhlIGRlbW8gc2NyaXB0ICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0Um9vdCgpO1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC5uZXdWaWV3KHRoaXMubmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNBdXRvbWF0aWMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFNjcmlwdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvU3RhcnRGaXJzdFN0ZXApXG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fbmV4dFN0ZXAoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuRGVtb1NjcmlwdC5jdXJyZW50T2JqZWN0ID0gbnVsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHVnRieTF6WTNKcGNIUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKa1pXMXZMWE5qY21sd2RDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdRVUZCUVN4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUTNSRExFOUJRVThzUzBGQlN5eEZRVUZGTEUxQlFVMHNhVUpCUVdsQ0xFTkJRVU03UVVGRGRFTXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhQUVVGUExFVkJRVU1zUzBGQlN5eEZRVUZETEUxQlFVMHNiME5CUVc5RExFTkJRVU03UVVGbGVrUXNiVWRCUVcxSE8wRkJRMjVITEUxQlFVMHNUMEZCVHl4VlFVRlZPMGxCZFVOeVFpeFpRVUZaTEVsQlFWa3NSVUZCUlN4WFFVRnRRaXhGUVVGRkxHTkJRWFZDTEV0QlFVc3NSVUZEZWtVc1QwRkJkME03TzFGQmRrTXhReXhUUVVGSkxFZEJRVmNzUlVGQlJTeERRVUZETzFGQlEyeENMR2RDUVVGWExFZEJRVmNzUlVGQlJTeERRVUZETzFGQlNXcENMR2xDUVVGWkxFZEJRVmtzUzBGQlN5eERRVUZETzFGQlF6bENMSGRDUVVGdFFpeEhRVUZaTEV0QlFVc3NRMEZCUXp0UlFVTnlReXhwUWtGQldTeEhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVTjZRaXhsUVVGVkxFZEJRVmtzUzBGQlN5eERRVUZETzFGQlF6VkNMR2xDUVVGWkxFZEJRVmtzUzBGQlN5eERRVUZETzFGQlF6bENMSEZDUVVGblFpeEhRVUZaTEV0QlFVc3NRMEZCUXp0UlFVVnNReXhWUVVGTExFZEJRVzFDTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZGTEdGQlFXRTdXVUZETTBRc1QwRkJUeXhGUVVGRkxHZEVRVUZuUkN4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVWMFJDeFhRVUZOTEVkQlFWY3NSVUZCUlN4RFFVRkRPMUZCUlhCQ0xHZENRVUZYTEVkQlFXMUNMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeEZRVUZGTEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGRGNFVXNXVUZCVHl4SFFVRjFRaXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNoRExHVkJRVlVzUjBGQmJVSXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFVkJRVVVzZFVKQlFYVkNMRU5CUVVNc1EwRkJRenRSUVVOc1JTeHJRa0ZCWVN4SFFVRnpRaXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRM0pGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNSVUZCUlN4RlFVRkZMR05CUVdNc1EwRkJReXhEUVVGRE8xRkJRM3BETEdkQ1FVRlhMRWRCUVhOQ0xFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEZEVjc2FVSkJRVmtzUjBGQmMwSXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSVHRaUVVNeFJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFqdG5Ra0ZEZUVJc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzFGQlEzSkNMRU5CUVVNc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dFJRVVZTTEdOQlFWTXNSMEZCYlVJc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVWQlFVVXNORUpCUVRSQ0xFTkJRVU1zUTBGQlF6dFJRVVYyUlN4cFFrRkJXU3hIUVVGdFFpeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUTNSRkxHTkJRVk1zUjBGQmQwSXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UkN4dFFrRkJZeXhIUVVGdFFpeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSMmhFTEdOQlFWTXNSMEZCYzBJc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hqUVVGakxFTkJRVU1zUTBGQlF6dFJRVXR1U0N4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5xUWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExGZEJRVmNzUTBGQlF6dFJRVU12UWl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExGZEJRVmNzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVkQlFVY3NUVUZCUVN4UFFVRlBMR0ZCUVZBc1QwRkJUeXgxUWtGQlVDeFBRVUZQTEVOQlFVVXNhMEpCUVd0Q0xHMURRVUZKTEV0QlFVc3NRMEZCUXp0UlFVVm9SU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka0lzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSWHBDTEZWQlFWVXNRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZGUkN4blEwRkJaME03U1VGRGFFTXNTVUZCU1N4TFFVRkxPMUZCUTFBc1QwRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEzSkNMRU5CUVVNN1NVRkZSQ3c0UTBGQk9FTTdTVUZET1VNc1NVRkJTU3hWUVVGVk8xRkJRMW9zVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVNMVFpeERRVUZETzBsQlIwUXNlVUpCUVhsQ08wbEJRMnBDTEZWQlFWVTdVVUZEYUVJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhGUVVGRkxFTkJRVU03VVVGRE1VSXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03U1VGRE9VUXNRMEZCUXp0SlFVVkVMR2REUVVGblF6dEpRVU40UWl4blFrRkJaMEk3VVVGRGRFSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTnVReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRGRrTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUlhCRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNWVUZCTUVJc1EwRkJReXhUUVVGVExFZEJRVWNzZFVKQlFYVkNMRU5CUVVNN1VVRkZiRVlzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMGxCUTNKR0xFTkJRVU03U1VGRlJDeHJRMEZCYTBNN1NVRkRNVUlzYTBKQlFXdENPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNwRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4UFFVRlBMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlJYaEdMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOb1JDeERRVUZETzBsQlJVUXNjVU5CUVhGRE8wbEJRemRDTEdWQlFXVTdPMUZCUTNKQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NSVUZCUlN3MFFrRkJORUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGT1VVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEZUVNc1NVRkJTU3h2UWtGQmIwSXNSMEZCUnl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlF6bERMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTzJkQ1FVTjBRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVTdiMEpCUTFnc2IwSkJRVzlDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZETzI5Q1FVTTVSU3h2UWtGQmIwSXNRMEZCUXl4VFFVRlRMRWRCUVVjc2RVSkJRWFZDTEVOQlFVTTdhVUpCUXpGRU8yRkJRMFk3V1VGRFJDeE5RVUZOTEdOQlFXTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxHbERRVUZwUXl4RFFVRkRMRU5CUVVNN1dVRkRkRVlzVFVGQlRTeHpRa0ZCYzBJc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVRXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTERCRFFVRkZMRmRCUVZjc1JVRkRka1VzZFVOQlFYVkRMRU5CUVVNc1EwRkJRenRaUVVNelF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU53UWl4dlFrRkJiMEk3WjBKQlEzQkNMR05CUVdNN1lVRkRaaXhGUVVGRkxIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNN1dVRkZNVUlzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxITkNRVUZ6UWl4RFFVRkRMRU5CUVVNN1UwRkRkRVE3U1VGRFNDeERRVUZETzBsQlJVUXNPRU5CUVRoRE8wbEJRM1JETEZOQlFWTTdPMUZCUTJZc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzU1VGQlNTeERRVUZETzFGQlF6TkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkZjRU1zVFVGQlRTeGpRVUZqTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGTDBVc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeGpRVUZqTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkZOVVlzU1VGQlNTeE5RVUZCTEUxQlFVRXNZMEZCWXl4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc2FVSkJRV2xDTERCRFFVRkZMR2RDUVVGblFpd3dRMEZEZEVZc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF5d3lRa0ZCTWtJc1EwRkJRenRaUVVNdlF5eE5RVUZCTEdOQlFXTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExHZENRVUZuUWl4RFFVRkRMR2xDUVVGcFFpd3dRMEZCUlN4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVVm9SeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMR2xEUVVGcFF5eERRVUZETEVOQlFVTTdVVUZGZGtZc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETzFGQlEyeENMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRSUVVWd1F5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1VVRkRka0lzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBsQlEzQkRMRU5CUVVNN1NVRkZSQ3d3UWtGQk1FSTdTVUZEV2l4VFFVRlRPenM3V1VGRGNrSXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTTNRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkRkRUlzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTXpReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZWQlFUQkNMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0aFFVTTFSVHRaUVVWRUxFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRPVVlzVFVGQlRTeGpRVUZqTEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdXVUZETjBZc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExITkNRVUZ6UWl4RFFVRkRMR2REUVVGblF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xbEJSWEJJTEdOQlFXTXNRMEZCUXl4VFFVRlRMRWRCUVVjc2QwTkJRWGRETEVOQlFVTTdXVUZEY0VVc1owSkJRV2RDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFpRVU0xUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJSVEZETEUxQlFVMHNWMEZCVnl4SFFVRkhMRXRCUVhWQ0xFTkJRVU03V1VGRE5VTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1EwRkJRU3hOUVVGQkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFOUJRVThzTUVOQlFVVXNTMEZCU3l4RlFVRkRMRU5CUVVNN1owSkJReTlFTEUxQlFVRXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNUMEZCVHl3d1EwRkJSU3hMUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVVjRSQ3hOUVVGTkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFsQlF6VkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4WFFVRlhMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRiRVlzU1VGQlNTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMmRDUVVOeVFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJiMElzUlVGQlJTeGpRVUUyUWl4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8yZENRVU4wUml4TlFVRk5MRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dGhRVU40UWp0WlFVVkVMRTFCUVUwc2FVSkJRV2xDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFpRVU0zUXl4alFVRmpMRU5CUVVNc1YwRkJWeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1dVRkRPVU1zYVVKQlFXbENMRU5CUVVNc1UwRkJVeXhIUVVGSExIZENRVUYzUWl4RFFVRkRPMWxCUlhaRUxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1dVRkRka0lzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4VFFVRlRMRWRCUVVjc1UwRkJVeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NUMEZCVHl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03V1VGRmRFWXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8xbEJRM0JDTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZGT1VJc1NVRkJTU3hKUVVGSkxFTkJRVU1zV1VGQldTeExRVUZMTEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVN1owSkJRM3BETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTndSU3hKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03WjBKQlEyeEVMRTlCUVU4N1lVRkRVanRaUVVWRUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMmRDUVVOMFFpeE5RVUZOTEhOQ1FVRnpRaXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8yZENRVU55Unl4TlFVRk5MR2xDUVVGcFFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dG5Ra0ZEYWtZc2FVSkJRV2xDTEVOQlFVTXNVMEZCVXl4SFFVRkhMSFZDUVVGMVFpeERRVUZETzJkQ1FVTjBSQ3h6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXp0blFrRkRkRVFzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTTVReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZWQlFUQkNMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0aFFVTXZSVHM3UzBGRFJqdEpRVVZFTEhGRFFVRnhRenRKUVVOMlFpeFpRVUZaT3p0WlFVTjRRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRM2hFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1NVRkJTU3hKUVVGSkxFTkJRVU1zV1VGQldUdHZRa0ZEZEVNc1RVRkJUVHRuUWtGRlVpeE5RVUZOTEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRoUVVONFFqdFJRVU5JTEVOQlFVTTdTMEZCUVR0SlFVVkVPenM3TzA5QlNVYzdTVUZEU3l4VFFVRlRMRU5CUVVNc1QwRkJkVUlzUlVGQlJTeERRVUZUTzFGQlEyeEVMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFJRVU5vUWl4UFFVRlBMRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU40UWl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRWeXhWUVVGVkxFTkJRVU1zVDBGQmIwSXNSVUZCUlN4VFFVRnpRaXhGUVVGRkxFbEJRVms3TzFsQlEycEdMRTFCUVUwc1dVRkJXU3hIUVVGdFFpeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1JVRkJSU3gxUWtGQmRVSXNRMEZCUXl4RFFVRkRPMWxCUlhwRkxGTkJRVk1zUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xbEJSV3hETEVsQlFVa3NVMEZCVXl4SFFVRkhMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU03V1VGRE5VSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJSV2hFTEZsQlFWa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVrSXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFpRVVU1UWl4TlFVRk5MRkZCUVZFc1IwRkJSeXhYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTm9ReXhUUVVGVExFVkJRVVVzUTBGQlF6dG5Ra0ZEV2l4SlFVRkpMRk5CUVZNc1MwRkJTeXhEUVVGRExFVkJRVVU3YjBKQlEyNUNMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dHZRa0ZEZUVJc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzI5Q1FVVjBRaXhUUVVGVExFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenR2UWtGRGNrTXNVMEZCVXl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdhVUpCUTNCRE8xbEJRMGdzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTFnc1EwRkJRenRMUVVGQk8wbEJSVVE3T3pzN1QwRkpSenRKUVVOTExHMUNRVUZ0UWl4RFFVRkRMRk5CUVdsQ08xRkJRek5ETEUxQlFVMHNSMEZCUnl4SFFVRkhMRkZCUVZFc1EwRkJReXhsUVVGbExFTkJRVU1zTkVKQlFUUkNMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRE1VVXNUVUZCVFN4TlFVRk5MRWRCUVVjc1VVRkJVU3hEUVVGRExHVkJRV1VzUTBGQlF5dzBRa0ZCTkVJc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU5vUml4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka01zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzWkRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMFF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hQUVVGUExFVkJRVVVzZDBKQlFYZENMRk5CUVZNc05FSkJRVFJDTEVOQlFVTXNRMEZCUXp0UlFVTndSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUlc1Q0xFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNRMEZCUXp0SlFVVkVMSFZFUVVGMVJEdEpRVU12UXl4blFrRkJaMEk3VVVGRGRFSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFJRVU53UlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEhWQ1FVRjFRaXhEUVVGRE8xRkJRelZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlJXNURMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTzFsQlEzQkNMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVkQlFVY3NkMEpCUVhkQ0xFTkJRVU03V1VGRE4wTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSTdaMEpCUTNoQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXp0VFFVTjJRanRKUVVOSUxFTkJRVU03U1VGRlJDd3dRa0ZCTUVJN1NVRkRiRUlzWTBGQll6dFJRVU53UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVUwc1EwRkJReXhEUVVGRE8xRkJRekZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03VVVGRGRFSXNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8xRkJRMnhDTEVsQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRSUVVOMFFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1NVRkRaaXhEUVVGRE8wbEJSVVFzT0VKQlFUaENPMGxCUTNSQ0xGVkJRVlU3VVVGRGFFSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJSU3hoUVVGaExFVkJRVVVzVDBGQlR5eEZRVUZGTEdkRVFVRm5SQ3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVVY0Unl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RlFVRkZMSFZDUVVGMVFpeERRVUZETEVOQlFVTTdVVUZEZWtRc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVVYyUkN4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RlFVRkZMRFJDUVVFMFFpeERRVUZETEVOQlFVTTdVVUZGTlVRc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUXpORUxFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkZja01zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM1pDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU16UWl4RFFVRkRPMGxCUlVRc09FSkJRVGhDTzBsQlEzUkNMR05CUVdNN1VVRkRjRUlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRUlzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkZNVUlzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRSUVVOd1JTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExIZENRVUYzUWl4RFFVRkRPMUZCUXpkRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dEpRVU5xUkN4RFFVRkRPMGxCUlVRc09FSkJRVGhDTzBsQlEzUkNMRlZCUVZVN1VVRkRhRUlzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXp0UlFVTXhReXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdTVUZEZEVJc1EwRkJRenRKUVVWRUxIbENRVUY1UWp0SlFVTjZRaXhaUVVGWk8xRkJRMVlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRla0lzVlVGQlZTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkRiRU1zUTBGQlF6dEpRVVZFT3pzN096czdUMEZOUnp0SlFVTklMRWxCUVVrc1EwRkJReXhKUVVGWkxFVkJRVVVzU1VGQmVVSXNSVUZCUlN4UFFVRm5SRHRSUVVNMVJpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVYzdXVUZETDBJc1NVRkJTU3hGUVVGRkxFbEJRVWs3V1VGRFZpeEpRVUZKTEVWQlFVVXNTVUZCU1R0WlFVTldMRTlCUVU4c1JVRkJSU3hQUVVGUE8xTkJRMnBDTEVOQlFVTTdVVUZEUml4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDdzJRa0ZCTmtJN1NVRkRka0lzUzBGQlN6czdXVUZEVkN4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03V1VGRGFrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUlRsQ0xFbEJRVWtzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkRja0lzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeFBRVUZQTzJGQlExSTdXVUZGUkN4SlFVRkpMRWxCUVVrc1EwRkJReXh0UWtGQmJVSTdaMEpCUXpGQ0xFMUJRVTBzU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMUZCUXpOQ0xFTkJRVU03UzBGQlFUczdRVUYwVmswc2QwSkJRV0VzUjBGQmMwSXNTVUZCU1N4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJQ29nWVhNZ1JFY2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMlJuSnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCbmNtOXJJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzluY205ckp6dGNibHh1YVcxd2IzSjBJSHRrWld4aGVYMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkR1Z6ZENjN1hHNWNibHh1THlvcUlGUjVjR1VnWm05eUlIdEFiR2x1YXlCRVpXMXZVMk55YVhCMGZTQnpkR1Z3SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JUZEdWd0lEMGdlMXh1SUNCdVlXMWxPaUJ6ZEhKcGJtYzdYRzRnSUdaMWJtTTZJQ2dwSUQwK0lGQnliMjFwYzJVOGRtOXBaRDQ3WEc1Y2JpQWdMeW9xSUZOMFpYQWdiM0IwYVc5dWN6b2daR1Z6WTNKcGNIUnBiMjRnWVc1a0lHUmxiR0Y1SUNocGJpQnRjeWtnWVdaMFpYSWdablZ1WTNScGIyNGdaVzVrY3lBcUwxeHVJQ0J2Y0hScGIyNXpQem9nZTF4dUlDQWdJR1JsYzJOeWFYQjBhVzl1UHpvZ2MzUnlhVzVuTzF4dUlDQWdJR1JsYkdGNVB6b2diblZ0WW1WeU8xeHVJQ0I5WEc1OU8xeHVYRzR2S2lvZ1JHVnRieUJ6WTNKcGNIUWdZMnhoYzNNdUlFTnZkV3hrSUdKbElIVnpaV1FnWm05eUlHTnlaV0YwYVc1bklHUmxiVzhnYzJOeWFYQjBjeUIwYnlCemFHOTNJSFJvWlNCd2JHRjBabTl5YlNCallYQmhZbWxzYVhScFpYTWdLaTljYm1WNGNHOXlkQ0JqYkdGemN5QkVaVzF2VTJOeWFYQjBJSHRjYmlBZ2JtRnRaVG9nYzNSeWFXNW5JRDBnSnljN1hHNGdJR1JsYzJOeWFYQjBhVzl1T2lCemRISnBibWNnUFNBbkp6dGNibHh1SUNCemRHRjBhV01nWTNWeWNtVnVkRTlpYW1WamREb2dSR1Z0YjFOamNtbHdkQ0I4SUc1MWJHd2dQU0J1ZFd4c08xeHVYRzRnSUhCeWFYWmhkR1VnWDJselFYVjBiMjFoZEdsak9pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNGdJSEJ5YVhaaGRHVWdYMkYxZEc5VGRHRnlkRVpwY25OMFUzUmxjRG9nWW05dmJHVmhiaUE5SUdaaGJITmxPMXh1SUNCd2NtbDJZWFJsSUY5amRYSnlaVzUwVTNSbGNEb2diblZ0WW1WeUlEMGdNRHRjYmlBZ2NISnBkbUYwWlNCZmFYTlRkRzl3Y0dWa09pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNGdJSEJ5YVhaaGRHVWdYMmx6UTJGdVkyVnNiR1ZrT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlU3WEc0Z0lIQnlhWFpoZEdVZ1gybHpVM1JsY0ZCeWIyTmxjM05sWkRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dVhHNGdJSEJ5YVhaaGRHVWdYM0p2YjNRNklFaFVUVXhFYVhaRmJHVnRaVzUwSUQwZ2RXa3VaR2wyS0Z0ZExDQjdhV1E2SUNka1pXMXZMWE5qY21sd2RDY3NYRzRnSUNBZ1kyeGhjM05sY3pvZ0ozUjFkRzl5YVdGc2N5MXliMjkwSUhSMWRHOXlhV0ZzY3kxMGNtRmpheUJrWlcxdkxXRndjQzF6WTNKcGNIUW5mU2s3WEc1Y2JpQWdjSEpwZG1GMFpTQmZjM1JsY0hNNklGTjBaWEJiWFNBOUlGdGRPMXh1WEc0Z0lIQnlhWFpoZEdVZ1gyMWhhVzVJWldGa1pYSTZJRWhVVFV4RWFYWkZiR1Z0Wlc1MElEMGdkV2t1Y0dGdVpXd29XMTBzSUNkMGRYUnZjbWxoYkhNdGJXRnBiaTFvWldGa1pYSW5LVHRjYmlBZ2NISnBkbUYwWlNCZmFHVmhaR1Z5T2lCSVZFMU1TR1ZoWkdsdVowVnNaVzFsYm5RZ1BTQjFhUzVvTWlnbkp5azdYRzRnSUhCeWFYWmhkR1VnWDJobFlXUmxja1JwZGpvZ1NGUk5URVJwZGtWc1pXMWxiblFnUFNCMWFTNWthWFpJS0Z0ZExDQW5kSFYwYjNKcFlXeHpMWEp2YjNRdGFHVmhaR1Z5SnlrN1hHNGdJSEJ5YVhaaGRHVWdYM04wYjNCVGRHRnlkRUowYmpvZ1NGUk5URUoxZEhSdmJrVnNaVzFsYm5RZ1BTQjFhUzVpZFhSMGIyNG9kV2t1YVdOdmJrWkJLQ2R3WVhWelpTY3BMRnh1SUNBZ0lDZ3BJRDArSUhSb2FYTXVYMk5vWVc1blpWTjBiM0JUZEdGMFpTZ3BMQ0FuVUd4aGVTQXZJSEJoZFhObEp5azdYRzRnSUhCeWFYWmhkR1VnWDNKbGMzUmhjblJDZEc0NklFaFVUVXhDZFhSMGIyNUZiR1Z0Wlc1MElEMGdkV2t1WW5WMGRHOXVLSFZwTG1samIyNUdRU2duY21Wa2J5Y3BMQ0FvS1NBOVBpQjBhR2x6TGw5eVpYTjBZWEowVTJOeWFYQjBLQ2tzSUNkU1pYTjBZWEowSnlrN1hHNGdJSEJ5YVhaaGRHVWdYMjVsZUhSVGRHVndRblJ1T2lCSVZFMU1RblYwZEc5dVJXeGxiV1Z1ZENBOUlIVnBMbUoxZEhSdmJpaDFhUzVwWTI5dVJrRW9KM0JzWVhrbktTd2dLQ2tnUFQ0Z2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1ZmFYTlRkR1Z3VUhKdlkyVnpjMlZrS1Z4dUlDQWdJQ0FnZEdocGN5NWZibVY0ZEZOMFpYQW9LVHRjYmlBZ2ZTd2dKMDVsZUhRZ2MzUmxjQ2NwTzF4dVhHNGdJSEJ5YVhaaGRHVWdYMkZqZEdsMmFYUjVPaUJJVkUxTVJHbDJSV3hsYldWdWRDQTlJSFZwTG5CaGJtVnNLRnRkTENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0WkdWelkzSnBjSFJwYjI0bktUdGNibHh1SUNCd2NtbDJZWFJsSUY5d2NtOW5jbVZ6YzBScGRqb2dTRlJOVEVScGRrVnNaVzFsYm5RZ1BTQjFhUzVrYVhaV0tGdGRMQ0FuZEhWMGIzSnBZV3h6TFhKdmIzUXRjSEp2WjNKbGMzTW5LVHRjYmlBZ2NISnBkbUYwWlNCZmNISnZaM0psYzNNNklFaFVUVXhRY205bmNtVnpjMFZzWlcxbGJuUWdQU0IxYVM1bGJHVnRaVzUwS0Nkd2NtOW5jbVZ6Y3ljcE8xeHVJQ0J3Y21sMllYUmxJRjl3Y205bmNtVnpjMU4wWlhCek9pQklWRTFNUkdsMlJXeGxiV1Z1ZENBOUlIVnBMbVJwZGxSbGVIUW9KeWNwTzF4dVhHNGdJSEJ5YVhaaGRHVWdYMjV2WkdVL09pQkVSeTVFYjJOclRtOWtaVHRjYmlBZ2NISnBkbUYwWlNCZlkyeHZjMlZDZEc0NklFaFVUVXhDZFhSMGIyNUZiR1Z0Wlc1MElEMGdkV2t1WW5WMGRHOXVLSFZwTG1samIyNUdRU2duWTJobGRuSnZiaTFzWldaMEp5a3NJQ2dwSUQwK0lIUm9hWE11WDJOc2IzTmxSRzlqYXlncExDQW5RbUZqYXlCMGJ5QmtaVzF2SnlrN1hHNWNibHh1SUNCamIyNXpkSEoxWTNSdmNpaHVZVzFsT2lCemRISnBibWNzSUdSbGMyTnlhWEIwYVc5dU9pQnpkSEpwYm1jc0lHbHpRWFYwYjIxaGRHbGpPaUJpYjI5c1pXRnVJRDBnWm1Gc2MyVXNYRzRnSUNBZ2IzQjBhVzl1Y3o4NklIdGhkWFJ2VTNSaGNuUkdhWEp6ZEZOMFpYQS9PaUJpYjI5c1pXRnVmU2tnZTF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2RHaHBjeTVrWlhOamNtbHdkR2x2YmlBOUlHUmxjMk55YVhCMGFXOXVPMXh1SUNBZ0lIUm9hWE11WDJselFYVjBiMjFoZEdsaklEMGdhWE5CZFhSdmJXRjBhV003WEc0Z0lDQWdkR2hwY3k1ZllYVjBiMU4wWVhKMFJtbHljM1JUZEdWd0lEMGdiM0IwYVc5dWN6OHVZWFYwYjFOMFlYSjBSbWx5YzNSVGRHVndJRDgvSUdaaGJITmxPMXh1WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWJXRjRJRDBnTUR0Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlNBOUlERTdYRzVjYmlBZ0lDQkVaVzF2VTJOeWFYQjBMbU4xY25KbGJuUlBZbXBsWTNRZ1BTQjBhR2x6TzF4dUlDQjlYRzVjYmlBZ0x5b3FJRkpsZEhWeWJuTWdaR1Z0YnlCelkzSnBjSFFnYzNSbGNITWdLaTljYmlBZ1oyVjBJSE4wWlhCektDazZJRk4wWlhCYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM04wWlhCek8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUZKbGRIVnlibk1nZEdobElHRnRiM1Z1ZENCdlppQmtaVzF2SUhOamNtbHdkQ0J6ZEdWd2N5QXFMMXh1SUNCblpYUWdjM1JsY0U1MWJXSmxjaWdwT2lCdWRXMWlaWElnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5emRHVndjeTVzWlc1bmRHZzdYRzRnSUgxY2JseHVYRzRnSUM4cUtpQkJaR1J6SUhOamNtbHdkQ0JvWldGa1pYSWdLaTljYmlBZ2NISnBkbUYwWlNCZllXUmtTR1ZoWkdWeUtDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYMk55WldGMFpVaGxZV1JsY2tScGRpZ3BPMXh1SUNBZ0lIUm9hWE11WDJOeVpXRjBaVkJ5YjJkeVpYTnpSR2wyS0NrN1hHNGdJQ0FnZEdocGN5NWZiV0ZwYmtobFlXUmxjaTVoY0hCbGJtUW9kR2hwY3k1ZmFHVmhaR1Z5UkdsMkxDQjBhR2x6TGw5d2NtOW5jbVZ6YzBScGRpazdYRzRnSUgxY2JseHVJQ0F2S2lvZ1EzSmxZWFJsY3lCelkzSnBjSFFnYUdWaFpHVnlJR1JwZGlBcUwxeHVJQ0J3Y21sMllYUmxJRjlqY21WaGRHVklaV0ZrWlhKRWFYWW9LVG9nZG05cFpDQjdYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlMbWx1Ym1WeVZHVjRkQ0E5SUhSb2FYTXVibUZ0WlR0Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWXVZWEJ3Wlc1a0tIUm9hWE11WDJOc2IzTmxRblJ1S1R0Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWXVZWEJ3Wlc1a0tIUm9hWE11WDJobFlXUmxjaWs3WEc1Y2JpQWdJQ0FvZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1Wm1seWMzUkRhR2xzWkNCaGN5QklWRTFNUld4bGJXVnVkQ2t1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZWE1nWm1FdGNHeGhlU2M3WEc1Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWXVZWEJ3Wlc1a0tIUm9hWE11WDJselFYVjBiMjFoZEdsaklEOGdkR2hwY3k1ZmMzUnZjRk4wWVhKMFFuUnVJRG9nZEdocGN5NWZibVY0ZEZOMFpYQkNkRzRwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRU55WldGMFpYTWdjMk55YVhCMElIQnliMmR5WlhOeklHUnBkaUFxTDF4dUlDQndjbWwyWVhSbElGOWpjbVZoZEdWUWNtOW5jbVZ6YzBScGRpZ3BPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjeTV0WVhnZ1BTQjBhR2x6TG5OMFpYQk9kVzFpWlhJN1hHNGdJQ0FnZEdocGN5NWZjSEp2WjNKbGMzTkVhWFl1WVhCd1pXNWtLSFJvYVhNdVgzQnliMmR5WlhOektUdGNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjMU4wWlhCeklEMGdkV2t1WkdsMlZHVjRkQ2hnVTNSbGNEb2dKSHQwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlgwZ2IyWWdKSHQwYUdsekxuTjBaWEJPZFcxaVpYSjlZQ2s3WEc1Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemMwUnBkaTVoY0hCbGJtUW9kR2hwY3k1ZmNISnZaM0psYzNOVGRHVndjeWs3WEc0Z0lIMWNibHh1SUNBdktpb2dRV1JrY3lCa1pYTmpjbWx3ZEdsdmJpQnZaaUIwYUdVZ2MyTnlhWEIwSUNvdlhHNGdJSEJ5YVhaaGRHVWdYMkZrWkVSbGMyTnlhWEIwYVc5dUtDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYMkZqZEdsMmFYUjVMbUZ3Y0dWdVpDaDFhUzVrYVhZb2RHaHBjeTVrWlhOamNtbHdkR2x2Yml3Z0ozUjFkRzl5YVdGc2N5MXliMjkwTFdSbGMyTnlhWEIwYVc5dUp5a3BPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwYUdsekxuTjBaWEJPZFcxaVpYSTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2JHVjBJR2x1YzNSeWRXTjBhVzl1U1c1a2FXTmhkRzl5SUQwZ2RXa3VhV052YmtaQktDZGpiRzlqYXljcE8xeHVJQ0FnSUNBZ2FXWWdLQ0YwYUdsekxsOXBjMEYxZEc5dFlYUnBZeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9hU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdsdWMzUnlkV04wYVc5dVNXNWthV05oZEc5eUlEMGdkV2t1YVdOdmJrWkJLQ2R3YkdGNUp5d2dLQ2tnUFQ0Z2RHaHBjeTVmYm1WNGRGTjBaWEFvS1N3Z0owNWxlSFFnYzNSbGNDY3BPMXh1SUNBZ0lDQWdJQ0FnSUdsdWMzUnlkV04wYVc5dVNXNWthV05oZEc5eUxtTnNZWE56VG1GdFpTQTlJQ2RuY205ckxXbGpiMjRnWm1GeklHWmhMWEJzWVhrbk8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiMjV6ZENCcGJuTjBjblZqZEdsdmJrUnBkaUE5SUhWcExtUnBkaWgwYUdsekxsOXpkR1Z3YzF0cFhTNXVZVzFsTENBblozSnZheTEwZFhSdmNtbGhiQzFsYm5SeWVTMXBibk4wY25WamRHbHZiaWNwTzF4dUlDQWdJQ0FnWTI5dWMzUWdZM1Z5Y21WdWRGTjBaWEJFWlhOamNtbHdkR2x2YmlBOUlIVnBMbVJwZGloMGFHbHpMbDl6ZEdWd2MxdHBYUzV2Y0hScGIyNXpQeTVrWlhOamNtbHdkR2x2Yml4Y2JpQWdJQ0FnSUNBZ0oyZHliMnN0ZEhWMGIzSnBZV3d0YzNSbGNDMWtaWE5qY21sd2RHbHZiaUJvYVdSa1pXNG5LVHRjYmlBZ0lDQWdJR052Ym5OMElHVnVkSEo1SUQwZ2RXa3VaR2wyU0NoYlhHNGdJQ0FnSUNBZ0lHbHVjM1J5ZFdOMGFXOXVTVzVrYVdOaGRHOXlMRnh1SUNBZ0lDQWdJQ0JwYm5OMGNuVmpkR2x2YmtScGRpeGNiaUFnSUNBZ0lGMHNJQ2RuY205ckxYUjFkRzl5YVdGc0xXVnVkSEo1SnlrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WDJGamRHbDJhWFI1TG1Gd2NHVnVaQ2hsYm5SeWVTd2dZM1Z5Y21WdWRGTjBaWEJFWlhOamNtbHdkR2x2YmlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FJRWx1YVhScFlXeHBlbVZ6SUhSb1pTQnliMjkwSUc5bUlIUm9aU0JrWlcxdklITmpjbWx3ZENBcUwxeHVJQ0J3Y21sMllYUmxJRjlwYm1sMFVtOXZkQ2dwT2lCMmIybGtJSHRjYmlBZ0lDQm5jbTlyTG5Ob1pXeHNMbmRwYm1SdmQzTXVjMmh2ZDBOdmJuUmxlSFJRWVc1bGJDQTlJSFJ5ZFdVN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1M2FXNWtiM2R6TG5Ob2IzZElaV3h3SUQwZ1ptRnNjMlU3WEc1Y2JpQWdJQ0JqYjI1emRDQnpZM0pwY0hSRWIyTnJUbTlrWlNBOUlFRnljbUY1TG1aeWIyMG9aM0p2YXk1emFHVnNiQzVrYjJOclRXRnVZV2RsY2k1eWIyOTBUbTlrWlM1amFHbHNaSEpsYmlsYk1GMDdYRzVjYmlBZ0lDQjBhR2x6TGw5dWIyUmxJRDBnWjNKdmF5NXphR1ZzYkM1a2IyTnJUV0Z1WVdkbGNpNWtiMk5yS0hSb2FYTXVYM0p2YjNRc0lFUkhMa1JQUTB0ZlZGbFFSUzVHU1V4TUxDQnpZM0pwY0hSRWIyTnJUbTlrWlN3Z0p5Y3BPMXh1WEc0Z0lDQWdhV1lnS0hOamNtbHdkRVJ2WTJ0T2IyUmxMbkJoY21WdWRDNWpiMjUwWVdsdVpYSXVZMjl1ZEdGcGJtVnlSV3hsYldWdWRDNW1hWEp6ZEVWc1pXMWxiblJEYUdsc1pEOHViR0Z6ZEVWc1pXMWxiblJEYUdsc1pEOHVYRzRnSUNBZ0lDQmpiR0Z6YzB4cGMzUXVZMjl1ZEdGcGJuTW9KM1JoWWkxb1lXNWtiR1V0YkdsemRDMWpiMjUwWVdsdVpYSW5LU2xjYmlBZ0lDQWdJSE5qY21sd2RFUnZZMnRPYjJSbExuQmhjbVZ1ZEM1amIyNTBZV2x1WlhJdVkyOXVkR0ZwYm1WeVJXeGxiV1Z1ZEM1bWFYSnpkRVZzWlcxbGJuUkRhR2xzWkQ4dWJHRnpkRVZzWlcxbGJuUkRhR2xzWkM1eVpXMXZkbVVvS1R0Y2JseHVJQ0FnSUhSb2FYTXVYMjV2WkdVdVkyOXVkR0ZwYm1WeUxtTnZiblJoYVc1bGNrVnNaVzFsYm5RdVkyeGhjM05NYVhOMExtRmtaQ2duZEhWMGIzSnBZV3h6TFdSbGJXOHRjMk55YVhCMExXTnZiblJoYVc1bGNpY3BPMXh1WEc0Z0lDQWdkR2hwY3k1ZllXUmtTR1ZoWkdWeUtDazdYRzRnSUNBZ2RHaHBjeTVmY205dmRDNWhjSEJsYm1Rb2RHaHBjeTVmYldGcGJraGxZV1JsY2lrN1hHNWNiaUFnSUNCMGFHbHpMbDloWkdSRVpYTmpjbWx3ZEdsdmJpZ3BPMXh1SUNBZ0lIUm9hWE11WDNKdmIzUXVZWEJ3Wlc1a0tIUm9hWE11WDJGamRHbDJhWFI1S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJRY205alpYTnpaWE1nYm1WNGRDQnpkR1Z3SUNvdlhHNGdJSEJ5YVhaaGRHVWdZWE41Ym1NZ1gyNWxlSFJUZEdWd0tDazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0FnSUhSb2FYTXVYMmx6VTNSbGNGQnliMk5sYzNObFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TGw5cGMwRjFkRzl0WVhScFl5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmJtVjRkRk4wWlhCQ2RHNHVZMnhoYzNOTWFYTjBMbUZrWkNnblpHbHpZV0pzWldRbktUdGNiaUFnSUNBZ0lDaDBhR2x6TGw5dVpYaDBVM1JsY0VKMGJpNW1hWEp6ZEVOb2FXeGtJR0Z6SUVoVVRVeEZiR1Z0Wlc1MEtTNWpiR0Z6YzB4cGMzUXVZV1JrS0NkbVlTMWthWE5oWW14bFpDY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHTnZibk4wSUdWdWRISjVJRDBnZEdocGN5NWZZV04wYVhacGRIa3VaMlYwUld4bGJXVnVkSE5DZVVOc1lYTnpUbUZ0WlNnblozSnZheTEwZFhSdmNtbGhiQzFsYm5SeWVTY3BXM1JvYVhNdVgyTjFjbkpsYm5SVGRHVndYVHRjYmlBZ0lDQmpiMjV6ZENCbGJuUnllVWx1WkdsallYUnZjaUE5SUhSb2FYTXVYMkZqZEdsMmFYUjVMbWRsZEVWc1pXMWxiblJ6UW5sRGJHRnpjMDVoYldVb0oyZHliMnN0YVdOdmJpY3BXM1JvYVhNdVgyTjFjbkpsYm5SVGRHVndYVHRjYmlBZ0lDQmpiMjV6ZENCbGJuUnllVWx1YzNSeWRXTjBhVzl1SUQwZ2RHaHBjeTVmWVdOMGFYWnBkSGt1WjJWMFJXeGxiV1Z1ZEhOQ2VVTnNZWE56VG1GdFpTZ25aM0p2YXkxMGRYUnZjbWxoYkMxemRHVndMV1JsYzJOeWFYQjBhVzl1SnlsYmRHaHBjeTVmWTNWeWNtVnVkRk4wWlhCZE8xeHVYRzRnSUNBZ1pXNTBjbmxKYm1ScFkyRjBiM0l1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZWElnWm1FdGMzQnBibTVsY2kxMGFHbHlaQ0JtWVMxemNHbHVKenRjYmlBZ0lDQmxiblJ5ZVVsdWMzUnlkV04wYVc5dUxtTnNZWE56VEdsemRDNXlaVzF2ZG1Vb0oyaHBaR1JsYmljcE8xeHVJQ0FnSUdWdWRISjVTVzV6ZEhKMVkzUnBiMjR1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25kbWx6YVdKc1pTY3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ1kzVnljbVZ1ZEZOMFpYQWdQU0JsYm5SeWVTQmhjeUJJVkUxTVJHbDJSV3hsYldWdWREdGNiaUFnSUNCamIyNXpkQ0J6ZEdWd1JHVnNZWGtnUFNCMGFHbHpMbDl6ZEdWd2MxdDBhR2x6TGw5amRYSnlaVzUwVTNSbGNGMHViM0IwYVc5dWN6OHVaR1ZzWVhrZ1AxeHVJQ0FnSUNBZ2RHaHBjeTVmYzNSbGNITmJkR2hwY3k1ZlkzVnljbVZ1ZEZOMFpYQmRMbTl3ZEdsdmJuTS9MbVJsYkdGNUlTQTZJREl3TURBN1hHNWNiaUFnSUNCaGQyRnBkQ0IwYUdsekxsOXpkR1Z3YzF0MGFHbHpMbDlqZFhKeVpXNTBVM1JsY0YwdVpuVnVZeWdwTzF4dUlDQWdJSFJvYVhNdVgzTmpjbTlzYkZSdktIUm9hWE11WDNKdmIzUXNJR04xY25KbGJuUlRkR1Z3TG05bVpuTmxkRlJ2Y0NBdElIUm9hWE11WDIxaGFXNUlaV0ZrWlhJdWIyWm1jMlYwU0dWcFoyaDBLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NWZhWE5CZFhSdmJXRjBhV01wSUh0Y2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdVgyTnZkVzUwWkc5M2JpaGxiblJ5ZVNCaGN5QklWRTFNUld4bGJXVnVkQ3dnWlc1MGNubEpibVJwWTJGMGIzSWdZWE1nU0ZSTlRFVnNaVzFsYm5Rc0lITjBaWEJFWld4aGVTazdYRzRnSUNBZ0lDQmhkMkZwZENCa1pXeGhlU2h6ZEdWd1JHVnNZWGtwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHNWxkMFZ1ZEhKNVNXNWthV05oZEc5eUlEMGdkV2t1YVdOdmJrWkJLQ2RqYUdWamF5Y3BPMXh1SUNBZ0lHVnVkSEo1U1c1a2FXTmhkRzl5TG5KbGNHeGhZMlZYYVhSb0tHNWxkMFZ1ZEhKNVNXNWthV05oZEc5eUtUdGNiaUFnSUNCdVpYZEZiblJ5ZVVsdVpHbGpZWFJ2Y2k1amJHRnpjMDVoYldVZ1BTQW5aM0p2YXkxcFkyOXVJR1poY2lCbVlTMWphR1ZqYXljN1hHNWNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjeTUyWVd4MVpTc3JPMXh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56VTNSbGNITXVhVzV1WlhKVVpYaDBJRDBnWUZOMFpYQTZJQ1I3ZEdocGN5NWZjSEp2WjNKbGMzTXVkbUZzZFdWOUlHOW1JQ1I3ZEdocGN5NXpkR1Z3VG5WdFltVnlmV0E3WEc1Y2JpQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFUzUmxjQ3NyTzF4dUlDQWdJSFJvYVhNdVgybHpVM1JsY0ZCeWIyTmxjM05sWkNBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11WDJOMWNuSmxiblJUZEdWd0lEMDlQU0IwYUdsekxuTjBaWEJPZFcxaVpYSXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVgybHpRWFYwYjIxaGRHbGpJRDhnZEdocGN5NWZjM1J2Y0ZOMFlYSjBRblJ1TG5KbGNHeGhZMlZYYVhSb0tIUm9hWE11WDNKbGMzUmhjblJDZEc0cElEcGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmJtVjRkRk4wWlhCQ2RHNHVjbVZ3YkdGalpWZHBkR2dvZEdocGN5NWZjbVZ6ZEdGeWRFSjBiaWs3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLQ0YwYUdsekxsOXBjMEYxZEc5dFlYUnBZeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdibVY0ZEZOMFpYQkZiblJ5ZVVsdVpHbGpZWFJ2Y2lBOUlIUm9hWE11WDJGamRHbDJhWFI1TG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVW9KMmR5YjJzdGFXTnZiaWNwVzNSb2FYTXVYMk4xY25KbGJuUlRkR1Z3WFR0Y2JpQWdJQ0FnSUdOdmJuTjBJSE4wWVhKMFRtVjRkRk4wWlhCSlkyOXVJRDBnZFdrdWFXTnZia1pCS0Nkd2JHRjVKeXdnS0NrZ1BUNGdkR2hwY3k1ZmJtVjRkRk4wWlhBb0tTd2dKMDVsZUhRZ2MzUmxjQ2NwTzF4dUlDQWdJQ0FnYzNSaGNuUk9aWGgwVTNSbGNFbGpiMjR1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZWE1nWm1FdGNHeGhlU2M3WEc0Z0lDQWdJQ0J1WlhoMFUzUmxjRVZ1ZEhKNVNXNWthV05oZEc5eUxuSmxjR3hoWTJWWGFYUm9LSE4wWVhKMFRtVjRkRk4wWlhCSlkyOXVLVHRjYmlBZ0lDQWdJSFJvYVhNdVgyNWxlSFJUZEdWd1FuUnVMbU5zWVhOelRHbHpkQzV5WlcxdmRtVW9KMlJwYzJGaWJHVmtKeWs3WEc0Z0lDQWdJQ0FvZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1Wm1seWMzUkRhR2xzWkNCaGN5QklWRTFNUld4bGJXVnVkQ2t1WTJ4aGMzTk1hWE4wTG5KbGJXOTJaU2duWm1FdFpHbHpZV0pzWldRbktUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaW9nVTNSaGNuUnpJSFJvWlNCa1pXMXZJSE5qY21sd2RDQmhZM1JwYjI1eklDb3ZYRzRnSUhCeWFYWmhkR1VnWVhONWJtTWdYM04wWVhKMFUyTnlhWEIwS0NrNklGQnliMjFwYzJVOGRtOXBaRDRnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCMGFHbHpMbDlqZFhKeVpXNTBVM1JsY0RzZ2FTQThJSFJvYVhNdWMzUmxjRTUxYldKbGNqc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1ZmFYTlRkRzl3Y0dWa0lIeDhJSFJvYVhNdVgybHpRMkZ1WTJWc2JHVmtLVnh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNibHh1SUNBZ0lDQWdZWGRoYVhRZ2RHaHBjeTVmYm1WNGRGTjBaWEFvS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1UyTnliMnhzY3lCMGJ5QjBhR1VnWTNWeWNtVnVkQ0J6ZEdWd1hHNGdJQ0FxSUVCd1lYSmhiU0JsYkdWdFpXNTBJQzBnUTNWeWNtVnVkQ0J6ZEdWd0lHVnNaVzFsYm5RZ2FXNGdjbTl2ZEZ4dUlDQWdLaUJBY0dGeVlXMGdlU0F0SUhrZ1kyOXZjbVJwYm1GMFpTQnZaaUIwYUdVZ1pXeGxiV1Z1ZEZ4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCZmMyTnliMnhzVkc4b1pXeGxiV1Z1ZERvZ1NGUk5URVJwZGtWc1pXMWxiblFzSUhrNklHNTFiV0psY2lrNklIWnZhV1FnZTF4dUlDQWdJR1ZzWlcxbGJuUXVabTlqZFhNb0tUdGNiaUFnSUNCbGJHVnRaVzUwTG5OamNtOXNiRlJ2Y0NBOUlIazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUVdSa2N5QmhiaUJwYm5SbGNtRmpkR2wyWlNCa1pXeGhlU0JwYm1ScFkyRjBiM0pjYmlBZ0lDb2dRSEJoY21GdElHVnNaVzFsYm5RZ0xTQkRkWEp5Wlc1MElITjBaWEFnWld4bGJXVnVkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2FXNWthV05oZEc5eUlDMGdRM1Z5Y21WdWRDQnpkR1Z3SUdsdVpHbGpZWFJ2Y2x4dUlDQWdLaUJBY0dGeVlXMGdkR2x0WlNBdElFbHVaR2xqWVhSdmNpQmhibWx0WVhScGIyNGdkR2x0WlZ4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCaGMzbHVZeUJmWTI5MWJuUmtiM2R1S0dWc1pXMWxiblE2SUVoVVRVeEZiR1Z0Wlc1MExDQnBibVJwWTJGMGIzSTZJRWhVVFV4RmJHVnRaVzUwTENCMGFXMWxPaUJ1ZFcxaVpYSXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnSUNCamIyNXpkQ0JqYjNWdWRHUnZkMjVFYVhZNklFaFVUVXhFYVhaRmJHVnRaVzUwSUQwZ2RXa3VaR2wyS0Z0ZExDQW5aR1Z0YnkxelkzSnBjSFF0WTI5MWJuUmtiM2R1SnlrN1hHNWNiaUFnSUNCcGJtUnBZMkYwYjNJdVkyeGhjM05NYVhOMExtRmtaQ2duYUdsa1pHVnVKeWs3WEc1Y2JpQWdJQ0JzWlhRZ1kyOTFiblJrYjNkdUlEMGdkR2x0WlNBdklERXdNREE3WEc0Z0lDQWdZMjl1YzNRZ2MzWm5JRDBnZEdocGN5NWZZM0psWVhSbFUxWkhTVzVrYVdOaGRHOXlLR052ZFc1MFpHOTNiaWs3WEc1Y2JpQWdJQ0JqYjNWdWRHUnZkMjVFYVhZdVlYQndaVzVrS0hOMlp5azdYRzRnSUNBZ1pXeGxiV1Z1ZEM1d2NtVndaVzVrS0dOdmRXNTBaRzkzYmtScGRpazdYRzVjYmlBZ0lDQmpiMjV6ZENCcGJuUmxjblpoYkNBOUlITmxkRWx1ZEdWeWRtRnNLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lHTnZkVzUwWkc5M2JpMHRPMXh1SUNBZ0lDQWdhV1lnS0dOdmRXNTBaRzkzYmlBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNCamJHVmhja2x1ZEdWeWRtRnNLR2x1ZEdWeWRtRnNLVHRjYmlBZ0lDQWdJQ0FnWTI5MWJuUmtiM2R1UkdsMkxuSmxiVzkyWlNncE8xeHVYRzRnSUNBZ0lDQWdJR2x1WkdsallYUnZjaTVqYkdGemMweHBjM1F1Y21WdGIzWmxLQ2RvYVdSa1pXNG5LVHRjYmlBZ0lDQWdJQ0FnYVc1a2FXTmhkRzl5TG1Oc1lYTnpUR2x6ZEM1aFpHUW9KM1pwYzJsaWJHVW5LVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlMQ0F4TURBd0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEY21WaGRHVnpJRk5XUnlCM2FYUm9JR052ZFc1MFpHOTNiaUJqYVhKamJHVmNiaUFnSUNvZ1FIQmhjbUZ0SUdOdmRXNTBaRzkzYmlBdElHTnZkVzUwWkc5M2JpQjBhVzFsWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRk5XUnlCamIzVnVkR1J2ZDI0Z2FXNWthV05oZEc5eVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElGOWpjbVZoZEdWVFZrZEpibVJwWTJGMGIzSW9ZMjkxYm5Sa2IzZHVPaUJ1ZFcxaVpYSXBPaUJUVmtkVFZrZEZiR1Z0Wlc1MElIdGNiaUFnSUNCamIyNXpkQ0J6ZG1jZ1BTQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwVGxNb0oyaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabkp5d2dKM04yWnljcE8xeHVJQ0FnSUdOdmJuTjBJR05wY21Oc1pTQTlJR1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5ST1V5Z25hSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY25MQ0FuWTJseVkyeGxKeWs3WEc0Z0lDQWdZMmx5WTJ4bExuTmxkRUYwZEhKcFluVjBaVTVUS0c1MWJHd3NJQ2RqZUNjc0lDYzNKeWs3WEc0Z0lDQWdZMmx5WTJ4bExuTmxkRUYwZEhKcFluVjBaVTVUS0c1MWJHd3NJQ2RqZVNjc0lDYzNKeWs3WEc0Z0lDQWdZMmx5WTJ4bExuTmxkRUYwZEhKcFluVjBaVTVUS0c1MWJHd3NJQ2R5Snl3Z0p6WW5LVHRjYmlBZ0lDQmphWEpqYkdVdWMyVjBRWFIwY21saWRYUmxUbE1vYm5Wc2JDd2dKM04wZVd4bEp5d2dZR0Z1YVcxaGRHbHZiam9nWTI5MWJuUmtiM2R1SUNSN1kyOTFiblJrYjNkdWZYTWdiR2x1WldGeUlHbHVabWx1YVhSbElHWnZjbmRoY21SellDazdYRzRnSUNBZ2MzWm5MbUZ3Y0dWdVpDaGphWEpqYkdVcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhOMlp6dGNiaUFnZlZ4dVhHNGdJQzhxS2lCRGFHRnVaMlZ6SUhSb1pTQnpkR0YwWlNCdlppQjBhR1VnWkdWdGJ5QnpZM0pwY0hRZ0tITjBiM0F2Y0d4aGVTa2dLaTljYmlBZ2NISnBkbUYwWlNCZlkyaGhibWRsVTNSdmNGTjBZWFJsS0NrNklIWnZhV1FnZTF4dUlDQWdJR052Ym5OMElHbGpiMjRnUFNCMGFHbHpMbDl6ZEc5d1UzUmhjblJDZEc0dVoyVjBSV3hsYldWdWRITkNlVU5zWVhOelRtRnRaU2duWjNKdmF5MXBZMjl1SnlrN1hHNGdJQ0FnYVdOdmJsc3dYUzVqYkdGemMwNWhiV1VnUFNBblozSnZheTFwWTI5dUlHWmhjeUJtWVMxd2JHRjVKenRjYmlBZ0lDQjBhR2x6TGw5cGMxTjBiM0J3WldRZ1BTQWhkR2hwY3k1ZmFYTlRkRzl3Y0dWa08xeHVYRzRnSUNBZ2FXWWdLQ0YwYUdsekxsOXBjMU4wYjNCd1pXUXBJSHRjYmlBZ0lDQWdJR2xqYjI1Yk1GMHVZMnhoYzNOT1lXMWxJRDBnSjJkeWIyc3RhV052YmlCbVlXd2dabUV0Y0dGMWMyVW5PMXh1SUNBZ0lDQWdhV1lnS0NGMGFHbHpMbDlwYzFOMFpYQlFjbTlqWlhOelpXUXBYRzRnSUNBZ0lDQWdJSFJvYVhNdVgzTjBZWEowVTJOeWFYQjBLQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHlvcUlGSmxjM1JoY25SeklIUm9aU0J6WTNKcGNIUWdLaTljYmlBZ2NISnBkbUYwWlNCZmNtVnpkR0Z5ZEZOamNtbHdkQ2dwT2lCMmIybGtJSHRjYmlBZ0lDQm5jbTlyTG5Ob1pXeHNMbVJ2WTJ0TllXNWhaMlZ5TG1Oc2IzTmxLSFJvYVhNdVgyNXZaR1VoS1R0Y2JpQWdJQ0JuY205ckxuTm9aV3hzTG1Oc2IzTmxRV3hzS0NrN1hHNGdJQ0FnZEdocGN5NWZZMnhsWVhKU2IyOTBLQ2s3WEc0Z0lDQWdkR2hwY3k1ZmMyVjBTVzVwZEZCaGNtRnRjeWdwTzF4dUlDQWdJSFJvYVhNdWMzUmhjblFvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJEYkdWaGNuTWdkR2hsSUhKdmIzUWdaV3hsYldWdWRDQXFMMXh1SUNCd2NtbDJZWFJsSUY5amJHVmhjbEp2YjNRb0tUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWZjbTl2ZENBOUlIVnBMbVJwZGloYlhTd2dlMmxrT2lBblpHVnRieTF6WTNKcGNIUW5MQ0JqYkdGemMyVnpPaUFuZEhWMGIzSnBZV3h6TFhKdmIzUWdkSFYwYjNKcFlXeHpMWFJ5WVdOcklHUmxiVzh0WVhCd0xYTmpjbWx3ZENkOUtUdGNibHh1SUNBZ0lIUm9hWE11WDIxaGFXNUlaV0ZrWlhJZ1BTQjFhUzV3WVc1bGJDaGJYU3dnSjNSMWRHOXlhV0ZzY3kxdFlXbHVMV2hsWVdSbGNpY3BPMXh1SUNBZ0lIUm9hWE11WDJobFlXUmxjaUE5SUhWcExtZ3lLQ2NuS1R0Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWWdQU0IxYVM1a2FYWklLRnRkTENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0YUdWaFpHVnlKeWs3WEc1Y2JpQWdJQ0IwYUdsekxsOWhZM1JwZG1sMGVTQTlJSFZwTG5CaGJtVnNLRnRkTENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0WkdWelkzSnBjSFJwYjI0bktUdGNibHh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56UkdsMklEMGdkV2t1WkdsMlZpaGJYU3dnSjNSMWRHOXlhV0ZzY3kxeWIyOTBMWEJ5YjJkeVpYTnpKeWs3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNZ1BTQjFhUzVsYkdWdFpXNTBLQ2R3Y205bmNtVnpjeWNwTzF4dUlDQWdJSFJvYVhNdVgzQnliMmR5WlhOelUzUmxjSE1nUFNCMWFTNWthWFpVWlhoMEtDY25LVHRjYmx4dUlDQWdJSFJvYVhNdVgzQnliMmR5WlhOekxtMWhlQ0E5SURBN1hHNGdJQ0FnZEdocGN5NWZjSEp2WjNKbGMzTXVkbUZzZFdVZ1BTQXhPMXh1SUNCOVhHNWNiaUFnTHlvcUlGTmxkSE1nYVc1cGRHbGhiQ0J3WVhKaGJXVjBaWEp6SUNvdlhHNGdJSEJ5YVhaaGRHVWdYM05sZEVsdWFYUlFZWEpoYlhNb0tUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWZZM1Z5Y21WdWRGTjBaWEFnUFNBd08xeHVJQ0FnSUhSb2FYTXVYMmx6VTNSdmNIQmxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lIUm9hWE11WDJselEyRnVZMlZzYkdWa0lEMGdabUZzYzJVN1hHNWNiaUFnSUNCamIyNXpkQ0JwWTI5dUlEMGdkR2hwY3k1ZmMzUnZjRk4wWVhKMFFuUnVMbWRsZEVWc1pXMWxiblJ6UW5sRGJHRnpjMDVoYldVb0oyZHliMnN0YVdOdmJpY3BPMXh1SUNBZ0lHbGpiMjViTUYwdVkyeGhjM05PWVcxbElEMGdKMmR5YjJzdGFXTnZiaUJtWVd3Z1ptRXRjR0YxYzJVbk8xeHVJQ0FnSUhSb2FYTXVYMjVsZUhSVGRHVndRblJ1TG1Oc1lYTnpUR2x6ZEM1eVpXMXZkbVVvSjJScGMyRmliR1ZrSnlrN1hHNGdJSDFjYmx4dUlDQXZLaW9nUTJ4dmMyVnpJR1JsYlc4Z2MyTnlhWEIwSUdSdlkyc2dLaTljYmlBZ2NISnBkbUYwWlNCZlkyeHZjMlZFYjJOcktDazZJSFp2YVdRZ2UxeHVJQ0FnSUdkeWIyc3VjMmhsYkd3dVpHOWphMDFoYm1GblpYSXVZMnh2YzJVb2RHaHBjeTVmYm05a1pTRXBPMXh1SUNBZ0lIUm9hWE11WTJGdVkyVnNVMk55YVhCMEtDazdYRzRnSUgxY2JseHVJQ0F2S2lvZ1EyRnVZMlZzY3lCMGFHVWdjMk55YVhCMElDb3ZYRzRnSUdOaGJtTmxiRk5qY21sd2RDZ3BPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbDlwYzBOaGJtTmxiR3hsWkNBOUlIUnlkV1U3WEc0Z0lDQWdSR1Z0YjFOamNtbHdkQzVqZFhKeVpXNTBUMkpxWldOMElEMGdiblZzYkR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkJaR1J6SUdFZ2JtVjNJSE4wWlhBZ2RHOGdjMk55YVhCMFhHNGdJQ0FxSUVCd1lYSmhiU0J1WVcxbElDMGdVM1JsY0NCdVlXMWxYRzRnSUNBcUlFQndZWEpoYlNCbWRXNWpJQzBnVTNSbGNDQm1kVzVqZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnYjNCMGFXOXVjeUF0SUZOMFpYQWdiM0IwYVc5dWN5QW9aR1Z6WTNKcGNIUnBiMjRnWVc1a0lHUmxiR0Y1SUdGbWRHVnlJSE4wWlhBZ1pXNWtjeWxjYmlBZ0lDb2dRSEpsZEhWeWJuTWdVbVYwZFhKdWN5QjBhR1VnWTNWeWNtVnVkQ0JrWlcxdklITmpjbWx3ZENCdlltcGxZM1JjYmlBZ0lDb3ZYRzRnSUhOMFpYQW9ibUZ0WlRvZ2MzUnlhVzVuTENCbWRXNWpPaUFvS1NBOVBpQlFjbTl0YVhObFBIWnZhV1ErTENCdmNIUnBiMjV6UHpvZ2UyUmxjMk55YVhCMGFXOXVQem9nYzNSeWFXNW5MQ0JrWld4aGVUODZJRzUxYldKbGNuMHBPaUIwYUdseklIdGNiaUFnSUNCMGFHbHpMbDl6ZEdWd2MxdDBhR2x6TG5OMFpYQnpMbXhsYm1kMGFGMGdQU0I3WEc0Z0lDQWdJQ0J1WVcxbE9pQnVZVzFsTEZ4dUlDQWdJQ0FnWm5WdVl6b2dablZ1WXl4Y2JpQWdJQ0FnSUc5d2RHbHZibk02SUc5d2RHbHZibk1zWEc0Z0lDQWdmVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4cUtpQlRkR0Z5ZEhNZ2RHaGxJR1JsYlc4Z2MyTnlhWEIwSUNvdlhHNGdJR0Z6ZVc1aklITjBZWEowS0NrNklGQnliMjFwYzJVOGRtOXBaRDRnZTF4dUlDQWdJSFJvYVhNdVgybHVhWFJTYjI5MEtDazdYRzRnSUNBZ1ozSnZheTV6YUdWc2JDNXVaWGRXYVdWM0tIUm9hWE11Ym1GdFpTazdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWZhWE5CZFhSdmJXRjBhV01wSUh0Y2JpQWdJQ0FnSUhSb2FYTXVYM04wWVhKMFUyTnlhWEIwS0NrN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMkYxZEc5VGRHRnlkRVpwY25OMFUzUmxjQ2xjYmlBZ0lDQWdJR0YzWVdsMElIUm9hWE11WDI1bGVIUlRkR1Z3S0NrN1hHNGdJSDFjYm4xY2JpSmRmUT09IiwiLy8gUnVudGltZSBzeXN0ZW0gZm9yIGV4cG9ydGVkIEMvQysrLWZ1bmN0aW9ucyBjYWxsLlxuLy8gSXQgd2FzIHByZXZpb3VzZWx5IGRldmVsb3BlZCBhbmQgZG9lcyBOT1QgcHJvdmlkZSBjYWxsIHdhc20tZnVuY3Rpb25zIGluIFdlYldvcmtlcnMuXG5cbi8vIHR5cGUtdG8taGVhcCBjb3JyZXNwb25kZW5jZVxuY29uc3QgaGVhcE1hcCA9IHtcImkzMlwiOiBcIkhFQVAzMlwiLCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgIFwiZjMyXCI6IFwiSEVBUEYzMlwiIC8vIEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgICAgIH07XG5cbi8vIHR5cGUgc2lnbmF0dXJlIHRvIHR5cGVkIGFycmF5ICxhcHBcbmNvbnN0IHR5cGVNYXAgPSB7XCJpMzJcIjogSW50MzJBcnJheSwgLy8gSW50MzJBcnJheVxuICAgICAgICAgICAgICAgICBcImYzMlwiOiBGbG9hdDMyQXJyYXkgLy8gRmxvYXQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTsgXG4gXG4vLyB0eXBlLXRvLXNoaWZ0IG1hcFxuY29uc3Qgc2hpZnRNYXAgPSB7XCJpMzJcIjogMiwgLy8gSW50MzJBcnJheVxuICAgICAgICAgICAgICAgICAgXCJmMzJcIjogMiAvLyBGbG9hdDMyQXJyYXlcbiAgICAgICAgICAgICAgICAgfTtcblxuLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbmNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7XCJpMzJcIjogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImYzMlwiOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheX07XG4gXG5cbi8vIENMQVNTRVMgVEhBVCBBUkUgVVNFRCBCWSBDUFAtV1JBUFBFUlxuXG4vLyBzaW1wbGUgYXJndW1lbnQ6IGEgbnVtYmVyIFxuY2xhc3MgQXJne1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOyAgICAgICAgXG4gICAgfVxuXG4gICAgY29tcGxlbWVudEFyck9mUGFyYW1zKGFyck9mUGFyYW1zKSB7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZUeXBlcyhhcnJPZlR5cGVzKSB7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7ICAgICAgICBcbiAgICB9XG5cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHt9XG59XG5cbi8vIGNvbHVtbiBhcmd1bWVudFxuY2xhc3MgQXJnQ29sdW1uIGV4dGVuZHMgQXJnIHtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHRhcmdldFR5cGUsIHRvVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMudHlwZSA9IHRhcmdldFR5cGU7XG4gICAgICAgIHRoaXMudG9VcGRhdGUgPSB0b1VwZGF0ZTtcbiAgICAgICAgdGhpcy5idWYgPSAwOyAgICBcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBkYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmJ1Zik7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZlJvd3MpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKHRoaXMubnVtT2ZSb3dzICogdHlwZU1hcFt0aGlzLnR5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gKHRoaXMuYnVmICE9IDApO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07ICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgYXJyYXkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZGF0YTtcblxuICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSBcbiAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09ICdmMzInKSkpXG4gICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgaWYoYXJyYXkpIFxuICAgICAgICAgICAgICBoZWFwLnNldChhcnJheSwgdGhpcy5idWYgPj4gc2hpZnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgbGV0IGJ1ZmZlciA9IHRoaXMuYnVmO1xuICAgICAgICAgICAgbGV0IGJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgIGxldCBhcnJheSA9IHRoaXMuZGF0YS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm51bU9mUm93czsgaSsrKVxuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaGVhcFtidWZmZXIgLyBieXRlcyArIGldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICAgICAgIHRoaXMuYnVmID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBuZXcgY29sdW1uIGFyZ3VtZW50OiBhIG5ldyBjb2x1bW4gaXMgY3JlYXRlZFxuY2xhc3MgQXJnTmV3Q29sdW1uIGV4dGVuZHMgQXJnQ29sdW1uIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRUeXBlLCBudW1PZlJvd3MpIHtcbiAgICAgICAgc3VwZXIoW10sIHRhcmdldFR5cGUsIHRydWUpO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgbGV0IGJ1ZiA9IHRoaXMuYnVmO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgY29sdW1uQ3JlYXRvciA9IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbdHlwZV07ICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXSh0aGlzLm51bU9mUm93cyk7ICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyW2ldID0gaGVhcFtidWYgLyBhcnIuQllURVNfUEVSX0VMRU1FTlQgKyBpXTtcblxuICAgICAgICAgICAgdGhpcy5kYXRhID0gY29sdW1uQ3JlYXRvcignbmFtZScsIGFycik7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYXJyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyBtaXN0YWtlLCB3aGVuIHRoaXMubnVtT2ZSb3dzID0gNSAoVE9ETzogaW52ZXN0aWdhdGUgd2h5KVxuICAgICAgICAgICAgLy90aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIHRoaXMuYnVmLCB0aGlzLm51bU9mUm93cykpO1xuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGF0YS5nZXRSYXdEYXRhKCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBhbiBhcnJheSBvZiBjb2x1bW5zIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW5zIGV4dGVuZHMgQXJnIHtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHRhcmdldFR5cGUsIHRvVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMudHlwZSA9IHRhcmdldFR5cGU7XG4gICAgICAgIHRoaXMudG9VcGRhdGUgPSB0b1VwZGF0ZTtcbiAgICAgICAgdGhpcy5idWYgPSAwOyAgICBcbiAgICAgICAgdGhpcy5udW1PZkNvbHVtbnMgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBkYXRhWzBdLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmJ1Zik7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZlJvd3MpO1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMubnVtT2ZDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZUeXBlcyhhcnJPZlR5cGVzKSB7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7ICAgICAgICBcbiAgICB9XG5cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgdGhpcy5idWYgPSBtb2R1bGUuX21hbGxvYyh0aGlzLm51bU9mUm93cyAqIHRoaXMubnVtT2ZDb2x1bW5zIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdHlwZU1hcFt0aGlzLnR5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gKHRoaXMuYnVmICE9IDApO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1dCBjb2x1bW5zIGRhdGEgdG8gYnVmZmVyXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1PZkNvbHVtbnM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZGF0YVtpXTtcblxuICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09ICdpMzInKSkgXG4gICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZGF0YSBhcnJheVxuICAgICAgICAgICAgICAgIGlmKGFycmF5ICE9IG51bGwpIFxuICAgICAgICAgICAgICAgICAgICBoZWFwLnNldChhcnJheSwgKHRoaXMuYnVmICsgaSAqIHRoaXMubnVtT2ZSb3dzICogbnVtT2ZCeXRlcykgPj4gc2hpZnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gdGhpcy5udW1PZlJvd3M7XG4gICAgICAgICAgICBsZXQgbnVtT2ZDb2xzID0gdGhpcy5udW1PZkNvbHVtbnM7ICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXShoZWFwLmJ1ZmZlciwgdGhpcy5idWYsIG51bU9mUm93cyAqIG51bU9mQ29scyk7XG4gICAgICAgXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY29sRGF0YSA9IHRoaXMuZGF0YVtpXS5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgY29sRGF0YVtqXSA9IGFycltqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZyZWVCdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICBtb2R1bGUuX2ZyZWUodGhpcy5idWYpO1xuICAgICAgICAgICB0aGlzLmJ1ZiA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuLy8gYW4gYXJyYXkgb2YgbmV3IGNvbHVtbnM6IG5ldyBjb2x1bW5zIGFyZSBjcmVhdGVkXG5jbGFzcyBBcmdOZXdDb2x1bW5zIGV4dGVuZHMgQXJnQ29sdW1ucyB7XG5cbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRUeXBlLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICBzdXBlcihbW11dLCB0YXJnZXRUeXBlLCB0cnVlKTsgIFxuICAgICAgICB0aGlzLmRhdGEgPSBbXTsgICAgICAgIFxuICAgICAgICB0aGlzLm51bU9mQ29sdW1ucyA9IG51bU9mQ29sdW1ucztcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBudW1PZlJvd3M7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkgeyB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gdGhpcy5udW1PZlJvd3M7XG4gICAgICAgICAgICBsZXQgbnVtT2ZDb2xzID0gdGhpcy5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTtcbiAgICAgICAgICAgIGxldCBidWYgPSB0aGlzLmJ1ZjtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG51bU9mQ29sczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKG51bU9mUm93cyk7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgYXJyKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBjb2x1bW5zOiBoZXJlLCBtYXkgYmUgYSBwcm9ibGVtIHdoZW4gbnVtT2ZSb3dzID0gNSAgICAgICAgICAgIFxuICAgICAgICAgICAgLypmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goY29sdW1uQ3JlYXRvcigoaSArIDEpLnRvU3RyaW5nKCksIG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYgKyBpICogbnVtT2ZSb3dzICogbnVtT2ZCeXRlcywgbnVtT2ZSb3dzKSkpOyovXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGEgd3JhcHBlciBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb24gY2FsbFxuZnVuY3Rpb24gY3BwRnVuY1dyYXBwZXIobW9kdWxlLCBjRnVuY05hbWUsIHJldHVyblR5cGUsIGFyZ3MpXG57XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVyc1xuICAgIGZvcihsZXQgYXJnIG9mIGFyZ3MpICAgICAgICAgXG4gICAgICAgIGFyZy5hbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpO1xuICAgIFxuICAgIGxldCBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkID0gdHJ1ZTtcblxuICAgIC8vIGNoZWNrIG1lbW9yeSBhbGxvY2F0aW9uXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncylcbiAgICAgICAgaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCAmPSBhcmcuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKTsgIFxuICAgIFxuICAgIC8vIHJ1biBleHBvcnRlZCBmdW5jdGlvbiBpZiBlbm91Z2ggb2YgbWVtb3J5IGlzIGFsbG9jYXRlZFxuICAgIGlmKGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQpIHtcblxuICAgICAgICBsZXQgcGFyYW1zID0gW107IC8vIGFyZ3VtZW50cyB0aGF0IGFyZSBwdXQgdG8gdGhlIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGxldCB0eXBlcyA9IFtdOyAvLyB0aGVpciB0eXBlc1xuXG4gICAgICAgIC8vIHByZXBhcmUgZGF0YSB0aGF0IGlzIHB1dCB0byBleHBvcnRlZCBmdW5jdGlvblxuICAgICAgICBmb3IobGV0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICBhcmcuY29tcGxlbWVudEFyck9mUGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICBhcmcuY29tcGxlbWVudEFyck9mVHlwZXModHlwZXMpO1xuICAgICAgICAgICAgYXJnLnB1dERhdGFUb0J1ZmZlcihtb2R1bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4dGVuZGVkVHlwZU9mUmV0dXJuID0gKHJldHVyblR5cGUgPT0gJ251bScpID8gJ251bWJlcicgOiBudWxsOyAgIFxuICAgICAgICBcbiAgICAgICAgLy8gY2FsbCBleHBvcnRlZCBmdW5jdGlvblxuICAgICAgICBpZihleHRlbmRlZFR5cGVPZlJldHVybilcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vZHVsZS5jY2FsbChjRnVuY05hbWUsIGV4dGVuZGVkVHlwZU9mUmV0dXJuLCB0eXBlcywgcGFyYW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgLy8gdXBkYXRlIGFuZCBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgaWYgcmVxdWlyZWRcbiAgICAgICAgZm9yKGxldCBhcmcgb2YgYXJncylcbiAgICAgICAgICAgIGFyZy5nZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpOyAgICAgICBcbiAgICB9XG5cbiAgICAvLyBjbGVhciBidWZmZXJzXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncykgICAgICAgICBcbiAgICAgICAgYXJnLmZyZWVCdWZmZXIobW9kdWxlKTtcblxuICAgIGlmKHJlc3VsdCAhPSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiByZXN1bHQ7ICAgIFxufSAvLyBjcHBGdW5jV3JhcHBlclxuXG5cbi8vIEEgTEFZRVIgQkVUV0VFTiBKUyBBTkQgQ1BQLVdSQVBQRVJcblxuLy8gUGFyYW1ldGVycyBjcmVhdG9yXG5sZXQgUGFyYW0gPSB7XG4gICAgaW50Q29sdW1uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdDb2x1bW4oY29sdW1uLCAnaTMyJyk7XG4gICAgfSxcbiAgICBcbiAgICBuZXdJbnRDb2x1bW4gKG51bU9mUm93cykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbignaTMyJywgbnVtT2ZSb3dzKTtcbiAgICB9LFxuXG4gICAgaW50Q29sdW1ucyhjb2x1bW5zKXtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdDb2x1bW5zKGNvbHVtbnMudG9MaXN0KCksICdpMzInKTtcbiAgICB9LFxuXG4gICAgbmV3SW50Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbnMoJ2kzMicsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKTtcbiAgICB9LFxuXG4gICAgZmxvYXRDb2x1bW4gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdmMzInKTtcbiAgICB9LFxuXG4gICAgbmV3RmxvYXRDb2x1bW4gKG51bU9mUm93cykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbignZjMyJywgbnVtT2ZSb3dzKTtcbiAgICB9LFxuXG4gICAgZmxvYXRDb2x1bW5zKGNvbHVtbnMpe1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2YzMicpO1xuICAgIH0sXG5cbiAgICBuZXdGbG9hdENvbHVtbnMobnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdOZXdDb2x1bW5zKCdmMzInLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucyk7XG4gICAgfSxcblxuICAgIGludChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmcobnVtYmVyKTtcbiAgICB9LFxuXG4gICAgbnVtKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB2YWx1ZSBjcmVhdG9yXG5sZXQgUmV0dXJuID0ge1xuICAgIHRhYmxlRnJvbUNvbHVtbnMoYXJnQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGFyZ0NvbHVtbnMuZGF0YSk7XG4gICAgfSxcblxuICAgIG51bShudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgaW50KG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG5cbiAgICBkb3VibGUobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcblxuICAgIGNvbHVtbihhcmdDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGFyZ0NvbHVtbi5kYXRhO1xuICAgIH1cbn07XG5cbi8vIFRoZSBtYWluIHRvb2wgdGhhdCBjb21iaW5lcyBhbGwgdG9nZXRoZXJcbmV4cG9ydCBmdW5jdGlvbiBjYWxsV2FzbShtb2R1bGUsIGZ1bmNOYW1lLCBpbnB1dHMpIHtcbiAgICAvLyBnZXQgc3BlY2lmaWNhdGlvbiBvZiBleHBvcnRlZCBDL0MrKy1mdW5jdGlvblxuICAgIGxldCBmdW5jU3BlY2lmaWNhdGlvbiA9IG1vZHVsZVtmdW5jTmFtZV07XG5cbiAgICAvLyBnZXQgYXJndW1uZXRzXG4gICAgbGV0IGFyZ3MgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHM7IFxuXG4gICAgLy8gYXJyYXkgb2YgYXJndW1lbnRzIHRoYXQgZnVydGhlciBhcmUgdXNlZCBieSBjcHAtd3JhcHBlclxuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGxldCBrZXkgaW4gYXJncyl7XG4gICAgICAgIGxldCBhcmcgPSBhcmdzW2tleV07IFxuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PSAnX2NhbGxSZXN1bHQnKSAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhbiBhcmd1bWVudFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpe1xuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgICAgICBjYXNlICdudW0nOlxuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnaW50Q29sdW1uJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKGlucHV0c1tpXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ25ld0ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGxldCB2YWwyID0gYXJnc1sgYXJnWydudW1PZkNvbHVtbnMnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbDEsIHZhbDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnbmV3SW50Q29sdW1uJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIHN3aXRjaFxuXG4gICAgICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZ3Nba2V5XS5kYXRhKTtcblxuICAgIH0gLy8gZm9yIGtleSAgICBcblxuICAgIC8vIENBTEwgRVhQT1JURUQgQ1BQLUZVTkNUSU9OXG4gICAgbGV0IGNhbGxSZXN1bHQgPSBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGZ1bmNOYW1lLCAnbnVtJywgY3BwRnVuY0lucHV0KTtcblxuICAgIC8vIHN0b3JlIHJlc3VsdCB0aGF0IGlzIHJldHVybmVkIGJ5IGV4cG9ydGVkIGNwcC1mdW5jdGlvblxuICAgIGFyZ3MuX2NhbGxSZXN1bHQgPSBQYXJhbS5udW0oY2FsbFJlc3VsdCk7XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0XG4gICAgbGV0IG91dHB1dCA9IGZ1bmNTcGVjaWZpY2F0aW9uLm91dHB1dDtcblxuICAgIC8vIGlmIGEgc2luZ2xlIG9iamVjdCBtdXN0IGJlIHJldHVybmVkXG4gICAgaWYob3V0cHV0Wyd0eXBlJ10gIT0gJ29iamVjdHMnKVxuICAgICAgcmV0dXJuIFJldHVybltvdXRwdXRbJ3R5cGUnXV0oYXJnc1tvdXRwdXRbJ3NvdXJjZSddXS5kYXRhKTtcblxuICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG5cbiAgICAvLyBwdXNoIGRhdGEgb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50c1xuICAgIGZvcihsZXQgbmFtZSBvZiBvdXRwdXRbJ3NvdXJjZSddKVxuICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ3NbbmFtZV0uZGF0YS5kYXRhKTtcblxuICAgIHJldHVybiBhcnJheVRvUmV0dXJuO1xuICB9IC8vIGNhbGxXYXNtIiwiLy8gVXRpbGl0aWVzIGZvciBjYWxsaW5nIHdhc20tZnVuY3Rpb25zIHZpYSB3ZWJ3b3JrZXIuXG5cbi8vIFdlIHVzZSBhbiBhcHByb2FjaCB0aGF0IGlzIHdlbGwgZGVzY3JpYmVkIGhlcmU6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG4vLyBJdCBoYXMgYmVlbiBtb2RpZmllZCBmb3IgdXNhZ2UgaW4gREFUQUdST0suXG5cbi8vIENvbnN0YW50cyBmb3Igd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VycyBydW50aW1lIHN5c3RlbVxuY29uc3QgVFlQRSA9ICd0eXBlJztcbmNvbnN0IE5VTV9UWVBFID0gJ251bSc7XG5jb25zdCBGTE9BVF9DT0xVTU5fVFlQRSA9ICdmbG9hdENvbHVtbic7XG5jb25zdCBJTlRfQ09MVU1OX1RZUEUgPSAnaW50Q29sdW1uJztcbmNvbnN0IEZMT0FUX0NPTFVNTlNfVFlQRSA9ICdmbG9hdENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSA9ICduZXdGbG9hdENvbHVtbnMnO1xuY29uc3QgSU5UX0NPTFVNTlNfVFlQRSA9ICdpbnRDb2x1bW5zJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OU19UWVBFID0gJ25ld0ludENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFID0gJ25ld0Zsb2F0Q29sdW1uJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OX1RZUEUgPSAnbmV3SW50Q29sdW1uJztcbmNvbnN0IENPTFVNTiA9ICdjb2x1bW4nO1xuY29uc3QgQ0FMTF9SRVNVTFQgPSAnX2NhbGxSZXN1bHQnO1xuY29uc3QgTlVNX09GX1JPV1MgPSAnbnVtT2ZSb3dzJztcbmNvbnN0IE5VTV9PRl9DT0xVTU5TID0gJ251bU9mQ29sdW1ucyc7XG5jb25zdCBSRUYgPSAncmVmJztcbmNvbnN0IFZBTFVFID0gJ3ZhbHVlJztcbmNvbnN0IFRBQkxFX09GX0NPTFVNTlMgPSAndGFibGVGcm9tQ29sdW1ucyc7XG5jb25zdCBPQkpFQ1RTID0gJ29iamVjdHMnO1xuY29uc3QgSU5UX1RZUEUgPSAnaW50JztcbmNvbnN0IERPVUJMRV9UWVBFID0gJ2RvdWJsZSc7XG5jb25zdCBOVU1CRVIgPSAnbnVtYmVyJztcblxuLy8gVHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlLlxuLy8gSXQgaXMgcmVxdWlyZWQgZm9yIEpTLW1vZHVsZSBnZW5lcmF0ZWQgYnkgRW1zY3JpcHRlbixcbi8vIGFuZCBpdCBpcyB1c2VkLCB3aGVuIHBhc3NpbmcgYXJyYXkgZGF0YSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG5jb25zdCBoZWFwTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IFwiSEVBUDMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBcIkhFQVAzMlwiXG4gICAgICAgICAgICAgICAgfTtcblxuLy8gVHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBtYW5pcHVsYXRpbmcgY29sdW1uKHMpLlxuY29uc3QgdHlwZU1hcCA9IHtcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbic6IEludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbic6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiBJbnQzMkFycmF5LCAgXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogSW50MzJBcnJheVxuICAgICAgICAgICAgICAgIH07IFxuXG4vLyBUeXBlLXRvLXNoaWZ0IG1hcC5cbi8vIEl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3IFxuY29uc3Qgc2hpZnRNYXAgPSB7J2ludENvbHVtbic6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogMiwgIFxuICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAyLFxuICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IDJcbiAgICAgICAgICAgICAgICAgfTsgICAgICAgICBcblxuLy8gR2V0IGlucHV0IGZvciBDKystZnVuY3Rpb24uXG4vLyBUaGlzIGZ1bmN0aW9uIHRha2VzIHNwZWNpZmljYXRpb24gb2YgYXJndW1lbnRzIChhcmdzU3BlY2lmaWNhdGlvbikgJiBpbnB1dCBkYXRhIChpbnB1dFZhbHMpXG4vLyBhbmQgcmV0dXJucyBpbnB1dCB0aGF0IHdpbGwgYmUgZnVydGhlciB1c2VkIGluIGNwcC93YXNtLWZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENwcElucHV0KGFyZ3NTcGVjaWZpY2F0aW9uLCBpbnB1dFZhbHMpIHtcbiAgICBsZXQgY3BwRnVuY0lucHV0ID0gW107XG4gICAgbGV0IHJlZjtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGNvbnN0IGtleSBpbiBhcmdzU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcmcgPSBhcmdzU3BlY2lmaWNhdGlvbltrZXldOyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PT0gQ0FMTF9SRVNVTFQpICAgICAgICAgICAgIFxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gaGVyZSwgd2UgY29uc2lkZXIgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgICAgIHN3aXRjaCh0eXBlKSB7ICAgICAgICAgICBcbiBcbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSBpbnB1dFZhbHNbaV07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcblxuICAgICAgICAgICAgICAgIGxldCBhcnJheTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW4gYW5kIHRhcmdldCB0eXBlIGNvaW5zaWRlXG4gICAgICAgICAgICAgICAgLy9hcnJheSA9IGlucHV0VmFsc1tpXS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29sID0gaW5wdXRWYWxzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSwgd2UgY2hlY2sgdHlwZXMgYW5kIHBlcmZvcm0gYW4gYXBwcm9wcmlhdGUgdHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgaWYoICggKGNvbC50eXBlID09PSBJTlRfVFlQRSkgJiYgKHR5cGUgPT09IElOVF9DT0xVTU5fVFlQRSkgKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8qaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSBGTE9BVF9DT0xVTU5fVFlQRSkpKVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpOyovXG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayB0eXBlc1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXknOiBhcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bU9mUm93cyc6IGFycmF5Lmxlbmd0aH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbiBcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSAwOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfUk9XU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzU3BlY2lmaWNhdGlvbltyZWZdLnR5cGUgPT09IE5VTV9UWVBFKVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyBvciBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIE9LIGlmIHR5cGUgb2YgY29sdW1ucyBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2ZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAvLyAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLypmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09IElOVF9DT0xVTU5fVFlQRSkpIFxuICAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7Ki9cblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXlzJzogYXJyYXlzLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IGFycmF5cy5sZW5ndGh9O1xuXG4gICAgICAgICAgICAgICAgaSsrOyAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zIG9yIG5ldyBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgdmFsMSA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHZhbDIgPSAwO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwxID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfUk9XU11bVkFMVUVdXTtcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfQ09MVU1OU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1JlZjonKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJlZik7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwyID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfQ09MVU1OU11bVkFMVUVdXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsMSxcbiAgICAgICAgICAgICAgICAgICdudW1PZkNvbHVtbnMnOiB2YWwyfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUT0RPOiBzcGVjaWZ5IGJlaGF2aW91ciAgICAgICAgICAgXG4gICAgICAgICAgICB9IC8vIHN3aXRjaCAgICAgICAgXG5cbiAgICAgICAgY3BwRnVuY0lucHV0LnB1c2goYXJnKTtcbiAgICB9IC8vIGZvciBrZXlcblxuICAgIC8vY29uc29sZS5sb2coJ2NwcEZ1bmNJbnB1dDonKTtcbiAgICAvL2NvbnNvbGUubG9nKGNwcEZ1bmNJbnB1dCk7XG5cbiAgICByZXR1cm4gY3BwRnVuY0lucHV0O1xufSAvLyBnZXRDcHBJbnB1dFxuXG4vLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlcnMgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHsgXG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2godHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YS5idWYgPSBtb2R1bGUuX21hbGxvYyhhcmcuZGF0YS5udW1PZlJvd3MgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOiAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogLy8gYWxsb2NhdGlvbiBtZW1vcnkgZm9yIGNvbHVtbnMgdGhhdCBhcmUgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIGFyZy5kYXRhLm51bU9mQ29sdW1ucyBcbiAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7IFxuICAgICAgICB9ICBcbiAgICB9XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygnaW5wdXRzIGFmdGVyIG1lbW9yeSBhbGxvY2F0aW9uOicpO1xuICAgIC8vY29uc29sZS5sb2coaW5wdXRzKTtcbn0gLy8gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXJcblxuLy8gR2V0IGFycmF5IG9mIHZhbHVlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVBhcmFtcyhpbnB1dHMpIHtcbiAgICBsZXQgcGFyYW1zID0gW107XG5cbiAgICAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcblxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uICYgbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZkNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn0gLy8gZ2V0QXJyT2ZXYXNtUGFyYW1zXG5cbi8vIEdldCBhcnJheSBvZiB0eXBlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVR5cGVzKGlucHV0cykge1xuICAgIGxldCB0eXBlcyA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufSAvLyBnZXRBcnJPZldhc21UeXBlc1xuXG4vLyBQdXQgYXJyYXkgZGF0YSB0byBidWZmZXJcbmZ1bmN0aW9uIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGxldCBzaGlmdDtcbiAgICBsZXQgaGVhcDsgICAgXG4gICAgXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgIFxuICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFyZy5kYXRhLmFycmF5LCBhcmcuZGF0YS5idWYgPj4gc2hpZnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgICAgIGxldCBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQ29sdW1ucyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBhcmcuZGF0YS5hcnJheXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2x1bW5zOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5c1tpXSwgKGJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn0gLy8gcHV0RGF0YVRvQnVmZmVyXG5cbi8vIEdldCBhcnJheSBkYXRhIGZyb20gYnVmZmVyLlxuZnVuY3Rpb24gZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcblxuICAgIGxldCBoZWFwO1xuICAgIGxldCBudW1PZlJvd3M7XG4gICAgbGV0IG51bU9mQ29scztcbiAgICBsZXQgbnVtT2ZCeXRlczsgICAgXG4gICAgbGV0IGJ1ZjtcblxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHsgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UOyAgICBcbiAgICAgICAgICAgICAgICBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqXTtcblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheSA9IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiBcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgICAgIG51bU9mUm93cyA9IGFyZy5kYXRhLm51bU9mUm93cztcbiAgICAgICAgICAgICAgICBudW1PZkNvbHMgPSBhcmcuZGF0YS5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goYXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhcmcuYXJyYXlzID0gYXJyYXlzO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSAgICAgICAgICAgIFxufSAvLyBnZXREYXRhRnJvbUJ1ZmZlclxuXG4vLyBDbGVhciBtZW1vcnkgYWxsb2NhdGVkIGZvciBhcnJheSBkYXRhXG5mdW5jdGlvbiBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSBcbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKSB7IC8vIHByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBlYWNoIG5vbi1udW1iZXIgY2FzZVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIG1vZHVsZS5fZnJlZShhcmcuZGF0YS5idWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gICAgXG59IC8vIGNsZWFyTWVtb3J5Rm9yQnVmZmVyXG5cbi8vIEV4dHJhY3QgbmV3bHkgY3JlYXRlZCBkYXRhOiBuZXcgY29sdW1uKHMpIGFyZSBjcmVhdGVkXG5mdW5jdGlvbiBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MsIGFyZ3NBZnRlcldhc21DYWxsKSB7XG4gICAgLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbiAgICBjb25zdCB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5fTtcblxuICAgIGxldCBpID0gMDtcblxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSBcbiAgICB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaChhcmcudHlwZSl7IC8vIFByb2Nlc3MgZWFjaCB0eXBlXG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgbmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWUgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gKDApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBcbiAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBhcmcubmFtZTtcblxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzQWZ0ZXJXYXNtQ2FsbFtpXS5hcnJheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgbGV0IGxlbmd0aCA9IGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5cy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBsZXQgbmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWVzID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBrID0gMTsgayA8PSBsZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goKGspLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGVsc2UgbmFtZXMgPSBhcmcubmFtZXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5c1tqXSkpO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGkrKztcbiAgICB9XG59IC8vIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhXG5cbi8vIEdldCBvdXRwdXQgZGF0YTogb3ZlcmFsbCBvdXRwdXQgaXMgY3JlYXRlZFxuZnVuY3Rpb24gZ2V0T3V0cHV0KGZ1bmNTcGVjaWZpY2F0aW9uKSB7ICBcbiAgICBsZXQgb3V0cHV0ID0gZnVuY1NwZWNpZmljYXRpb24ub3V0cHV0O1xuICAgIFxuICAgIGNvbnN0IHR5cGVUb0RhdGFGaWVsZE1hcCA9IHsnbmV3RmxvYXRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiAnY29sdW1uJ307XG5cbiAgICBzd2l0Y2gob3V0cHV0LnR5cGUpIHtcblxuICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ09MVU1OOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW47XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRBQkxFX09GX0NPTFVNTlM6XG4gICAgICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW5zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgT0JKRUNUUzpcbiAgICAgICAgICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgICAgICAgICBmb3IobGV0IG5hbWUgb2Ygb3V0cHV0LnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGxldCBhcmcgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHNbbmFtZV07XG4gICAgICAgICAgICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ1t0eXBlVG9EYXRhRmllbGRNYXBbYXJnLnR5cGVdXSk7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlUb1JldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbn0gLy8gZ2V0T3V0cHV0XG5cbi8vIENsZWFyIG5ld2x5IGNyZWF0ZWQgZGF0YSBmaWVsZHMgKG5ldyBjb2x1bW4ocykpXG5mdW5jdGlvbiBjbGVhck5ld2x5Q3JlYXRlZERhdGEoZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7IFxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1uID0gbnVsbDsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBjbGVhck5ld2x5Q3JlYXRlZERhdGFcblxuLy8gVEhFIE1BSU4gRlVOQ1RJT046IGEgd3JhcHBlciBmb3IgQysrLWZ1bmN0aW9uIGNhbGxcbmV4cG9ydCBmdW5jdGlvbiBjcHBXcmFwcGVyKG1vZHVsZSwgYXJncywgY3BwRnVuY05hbWUsIHJldHVyblR5cGUpIHtcbiAgICAvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFycmF5cyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIHB1dCBkYXRhIChqdXN0IGNvbHVtbihzKSkgdG8gYWxsb2NhdGVkIGJ1ZmZlcnNcbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgcGFyYW1zID0gZ2V0QXJyT2ZXYXNtUGFyYW1zKGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygncGFyYW1zOicpO1xuICAgIC8vY29uc29sZS5sb2cocGFyYW1zKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzJyB0eXBlcyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgbGV0IHR5cGVzID0gZ2V0QXJyT2ZXYXNtVHlwZXMoYXJncyk7XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygndHlwZXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyh0eXBlcyk7XG5cbiAgICAvLyBjYWxsIHdhc20tZnVuY3Rpb25cbiAgICBsZXQgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNwcEZ1bmNOYW1lLCByZXR1cm5UeXBlLCB0eXBlcywgcGFyYW1zKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgICAvLyBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgKGp1c3QgY29sdW1uKHMpKVxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSwgYXJncyk7ICAgICAgICBcblxuICAgIC8vIGNsZWFyIG1lbW9yeSB0aGF0IHdhcyBwcmV2aW91c2VseSBhbGxvY2F0ZWRcbiAgICBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnZG9uZScpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0IHRoZSByZXF1aXJlZCBvdXRwdXQuXG4vLyBJdCB0YWtlcyBhIHNwZWNpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBjb21wdXRlZFxuLy8gYW5kIGV4dHJhY3RzIHRoZSByZXF1aXJlZCByZXN1bHRzLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3VsdChmdW5jU3BlY2lmaWNhdGlvbiwgZGF0YUZyb21XZWJXb3JrZXIpIHtcbiAgICBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMuX2NhbGxSZXN1bHQgPSBkYXRhRnJvbVdlYldvcmtlci5jYWxsUmVzdWx0OyAgXG5cbiAgICBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMsIGRhdGFGcm9tV2ViV29ya2VyLmFyZ3MpOyAgICBcblxuICAgIGxldCBvdXRQdXQgPSBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pO1xuXG4gICAgLy8gQmVsb3csIHdlIHJlbW92ZSBuZXdseSBjcmVhdGVkIGNvbHVtbihzKSwgd2hpY2ggYXJlIGNyZWF0ZWQgYXQgdGhlIGV4dHJhY3Rpb24tc3RlcC5cbiAgICAvLyBJdCBpcyBlc3BlY2lhbGx5IHJlcXVpcmVkLCB3aGVuIG11bHRpcGxlIGNhbGwgb2Ygd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VyLlxuICAgIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIG91dFB1dDtcbn0iLCIvLyBJbnB1dHMgY29ycmVjdG5lc3MgY2hlY2sgdG9vbHNcbi8vTGltaXRhdGlvbiBjb25zdGFudHNcbmNvbnN0IENPTVBfTUlOID0gMTtcbmNvbnN0IFNBTVBMRVNfQ09VTlRfTUlOID0gMTtcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX01JTiA9IDE7XG5jb25zdCBQRVJDRU5UQUdFX01JTiA9IDA7XG5jb25zdCBQRVJDRU5UQUdFX01BWCA9IDEwMDtcbmNvbnN0IE1BWF9FTEVNRU5UU19DT1VOVCA9IDEwMDAwMDAwMDtcbi8vIEVycm9yIG1lc3NhZ2VzXG5jb25zdCBDT01QX1BPU0lUVkVfTUVTID0gJ2NvbXBvbmVudHMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgQ09NUF9FWENFU1MgPSAnY29tcG9uZW50cyBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gZmVhdXR1cmVzIGNvdW50Lic7XG5jb25zdCBJTkNPUkVSUkVDVF9NSU5fTUFYX01FUyA9ICdtaW4gbXVzdCBiZSBsZXNzIHRoYW4gbWF4Lic7XG5jb25zdCBJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMgPSAnZmVhdHVyZXMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgSU5DT1JFUlJFQ1RfU0FNUExFU19NRVMgPSAnc2FtcGxlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUkVSUkVDVF9QRVJDRU5UQUdFX01FUyA9ICd2aW9sYXRvcnMgcGVyY2VudGFnZSBtdXN0IGJlIGZyb20gdGhlIHJhbmdlIGZyb20gMCB0byAxMDAuJztcbmNvbnN0IERBVEFGUkFNRV9JU19UT09fQklHX01FUyA9ICdkYXRhZnJhbWUgaXMgdG9vIGJpZy4nO1xuLy8gQ2hlY2sgY29tcG9uZW50cyBjb3VudCAoUENBLCBQTFMpXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cykge1xuICAgIGlmIChjb21wb25lbnRzIDwgQ09NUF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihDT01QX1BPU0lUVkVfTUVTKTtcbiAgICBpZiAoY29tcG9uZW50cyA+IGZlYXR1cmVzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPTVBfRVhDRVNTKTtcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoICogZmVhdHVyZXMuYnlJbmRleCgwKS5sZW5ndGggPiBNQVhfRUxFTUVOVFNfQ09VTlQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihEQVRBRlJBTUVfSVNfVE9PX0JJR19NRVMpO1xufVxuLy8gQ2hlY2sgaW5wdXRzIG9mIGRhdGEgZm9yIFNWTSB0ZXN0aW5nIGdlbmVyYXRvclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICBpZiAobWluID49IG1heClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX01JTl9NQVhfTUVTKTtcbiAgICBpZiAoZmVhdHVyZXNDb3VudCA8IEZFQVRVUkVTX0NPVU5UX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX0ZFQVRVUkVTX01FUyk7XG4gICAgaWYgKHNhbXBsZXNDb3VudCA8IFNBTVBMRVNfQ09VTlRfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfU0FNUExFU19NRVMpO1xuICAgIGlmICgodmlvbGF0b3JzUGVyY2VudGFnZSA8IFBFUkNFTlRBR0VfTUlOKSB8fCAodmlvbGF0b3JzUGVyY2VudGFnZSA+IFBFUkNFTlRBR0VfTUFYKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTKTtcbn1cbiIsIi8vIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzSW5XZWJXb3JrZXIsIF9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjaGVja0NvbXBvbmVuZXRzIH0gZnJvbSAnLi91dGlscyc7XG4vLyBQcmluY2lwYWwgY29tcG9uZW50cyBhbmFseXNpcyAoUENBKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGNlbnRlck51bSA9IGNlbnRlciA/IDEgOiAwO1xuICAgICAgICBjb25zdCBzY2FsZU51bSA9IHNjYWxlID8gMSA6IDA7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlck51bSwgc2NhbGVOdW0pO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBfb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICByZXR1cm4gX291dHB1dDtcbiAgICB9KTtcbn1cbi8vIFBhcnRpYWwgbGVhc3Qgc3F1YXJlIHJlZ3Jlc3Npb24gKFBMUylcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlUExTKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNoZWNrQ29tcG9uZW5ldHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpO1xuICAgICAgICBsZXQgX291dHB1dDtcbiAgICAgICAgbGV0IF9wcm9taXNlID0gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBfb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICByZXR1cm4gX291dHB1dDtcbiAgICB9KTtcbn1cbiIsIi8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbi8vIEphdmFTY3JpcHQgQVBJIGZvciBjYWxsIHdhc20tZnVuY3Rpb25zIGZyb20gdGhlIG1vZHVsZSBFREFcblxuLy8gSW1wb3J0cyBmb3IgY2FsbCB3YXNtIHJ1bnRpbWUtc3lzdGVtOiBpbiB0aGUgbWFpbiBzdHJlYW0gYW5kIGluIHdlYndvcmtlcnNcbmltcG9ydCB7Y2FsbFdhc219IGZyb20gJy4uL3dhc20vY2FsbFdhc20nO1xuaW1wb3J0IHtnZXRDcHBJbnB1dCwgZ2V0UmVzdWx0fSBmcm9tICcuLi93YXNtL2NhbGxXYXNtRm9yV2ViV29ya2VyJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9pbml0RURBQVBJKCkge1xuICBhd2FpdCBpbml0RURBKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXModGFibGUsIGNvbHVtbnMsIGNvbXBvbmVudHNDb3VudCwgY2VudGVyTnVtLCBzY2FsZU51bSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnLCBbY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlcih0YWJsZSwgY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyddLmFyZ3VtZW50cyxbY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZXJyb3IoZGYsIGNvbDEsIGNvbDIpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2Vycm9yJywgW2NvbDEsIGNvbDJdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9lcnJvckluV2ViV29ya2VyKGRmLCBjb2wxLCBjb2wyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvZXJyb3JXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydlcnJvciddLmFyZ3VtZW50cyxbY29sMSwgY29sMl0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydlcnJvciddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24odGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnQpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nLCBbZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudF0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uJ10uYXJndW1lbnRzLFtmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50XSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9nZW5lcmF0ZURhdGFzZXQoa2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2dlbmVyYXRlRGF0YXNldCcsIFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyKGtlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvZ2VuZXJhdGVEYXRhc2V0V29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnZ2VuZXJhdGVEYXRhc2V0J10uYXJndW1lbnRzLFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydnZW5lcmF0ZURhdGFzZXQnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9ub3JtYWxpemVEYXRhc2V0KGRhdGEpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ25vcm1hbGl6ZURhdGFzZXQnLCBbZGF0YV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX25vcm1hbGl6ZURhdGFzZXRJbldlYldvcmtlcihkYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvbm9ybWFsaXplRGF0YXNldFdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ25vcm1hbGl6ZURhdGFzZXQnXS5hcmd1bWVudHMsW2RhdGFdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsnbm9ybWFsaXplRGF0YXNldCddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3RyYWluTFNTVk0oZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICd0cmFpbkxTU1ZNJywgW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RyYWluTFNTVk1JbldlYldvcmtlcihnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy90cmFpbkxTU1ZNV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsndHJhaW5MU1NWTSddLmFyZ3VtZW50cyxbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3RyYWluTFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmVkaWN0QnlMU1NWTShrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGEpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3ByZWRpY3RCeUxTU1ZNJywgW2tlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcHJlZGljdEJ5TFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwcmVkaWN0QnlMU1NWTSddLmFyZ3VtZW50cyxba2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3ByZWRpY3RCeUxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdHJhaW5BbmRBbmFseXplTFNTVk0oZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICd0cmFpbkFuZEFuYWx5emVMU1NWTScsIFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3RyYWluQW5kQW5hbHl6ZUxTU1ZNV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsndHJhaW5BbmRBbmFseXplTFNTVk0nXS5hcmd1bWVudHMsW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWyd0cmFpbkFuZEFuYWx5emVMU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG4iLCIvLyBDdXN0b20gVUkgZm9yIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vIFJlbmFtZSBQQ0EgY29sdW1uc1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZVBDQWNvbHVtbnMocGNhVGFibGUpIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBwY2FUYWJsZS5jb2x1bW5zLnRvTGlzdCgpKVxuICAgICAgICBjb2wubmFtZSA9ICdQQ0EnICsgY29sLm5hbWU7XG4gICAgcmV0dXJuIHBjYVRhYmxlO1xufVxuLy8gUHJlZGljdGVkIHZzIFJlZmVyZW5jZSBzY2F0dGVyIHBsb3RcbmV4cG9ydCBmdW5jdGlvbiBwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdChzYW1wbGVzTmFtZXMsIHJlZmVyZW5jZSwgcHJlZGljdGlvbikge1xuICAgIHByZWRpY3Rpb24ubmFtZSA9IHJlZmVyZW5jZS5uYW1lICsgJyhwcmVkaWN0ZWQpJztcbiAgICBsZXQgZGZSZWZlcmVuY2VQcmVkaWN0aW9uID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtzYW1wbGVzTmFtZXMsIHJlZmVyZW5jZSwgcHJlZGljdGlvbl0pO1xuICAgIGRmUmVmZXJlbmNlUHJlZGljdGlvbi5uYW1lID0gJ1JlZmVyZW5jZSB2cy4gUHJlZGljdGVkJztcbiAgICByZXR1cm4gREcuVmlld2VyLnNjYXR0ZXJQbG90KGRmUmVmZXJlbmNlUHJlZGljdGlvbiwgeyB0aXRsZTogZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHg6IHJlZmVyZW5jZS5uYW1lLFxuICAgICAgICB5OiBwcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHNob3dSZWdyZXNzaW9uTGluZTogdHJ1ZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZScsXG4gICAgICAgIGxhYmVsczogc2FtcGxlc05hbWVzLm5hbWVcbiAgICB9KTtcbn1cbi8vIFJlZ3Jlc3Npb24gQ29lZmZpY2llbnRzIEJhciBDaGFydFxuZXhwb3J0IGZ1bmN0aW9uIHJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydChmZWF0dXJlcywgcmVncmVzc2lvbkNvZWZmcykge1xuICAgIHJlZ3Jlc3Npb25Db2VmZnMubmFtZSA9ICdyZWdyZXNzaW9uIGNvZWZmaWNpZW50JztcbiAgICBsZXQgbmFtZXNPZlByZWRpY3RvcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbmFtZXNPZlByZWRpY3RvcnMucHVzaChjb2wubmFtZSk7XG4gICAgbGV0IHByZWRpY3Rvck5hbWVzQ29sdW1uID0gREcuQ29sdW1uLmZyb21TdHJpbmdzKCdmZWF0dXJlJywgbmFtZXNPZlByZWRpY3RvcnMpO1xuICAgIGxldCBkZlJlZ3JDb2VmcyA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbcHJlZGljdG9yTmFtZXNDb2x1bW4sIHJlZ3Jlc3Npb25Db2VmZnNdKTtcbiAgICBkZlJlZ3JDb2Vmcy5uYW1lID0gJ1JlZ3Jlc3Npb24gQ29lZmZpY2llbnRzJztcbiAgICByZXR1cm4gREcuVmlld2VyLmJhckNoYXJ0KGRmUmVnckNvZWZzLCB7IHRpdGxlOiBkZlJlZ3JDb2Vmcy5uYW1lLCBzcGxpdDogJ2ZlYXR1cmUnLFxuICAgICAgICB2YWx1ZTogJ3JlZ3Jlc3Npb24gY29lZmZpY2llbnQnLCB2YWx1ZUFnZ3JUeXBlOiAnYXZnJyB9KTtcbn1cbi8vIFNjb3JlcyBTY2F0dGVyIFBsb3RcbmV4cG9ydCBmdW5jdGlvbiBzY29yZXNTY2F0dGVyUGxvdChzYW1wbGVzTmFtZXMsIHhTY29yZXMsIHlTY29yZXMpIHtcbiAgICBsZXQgc2NvcmVzQ29sdW1ucyA9IFtzYW1wbGVzTmFtZXNdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeFNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB4U2NvcmVzW2ldLm5hbWUgPSBgeC5zY29yZS50JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeFNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB5U2NvcmVzW2ldLm5hbWUgPSBgeS5zY29yZS51JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeVNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGxldCBzY29yZXMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoc2NvcmVzQ29sdW1ucyk7XG4gICAgc2NvcmVzLm5hbWUgPSAnU2NvcmVzJztcbiAgICAvL2dyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNjb3Jlcyk7XG4gICAgY29uc3QgaW5kZXggPSB4U2NvcmVzLmxlbmd0aCA+IDEgPyAxIDogMDtcbiAgICByZXR1cm4gREcuVmlld2VyLnNjYXR0ZXJQbG90KHNjb3JlcywgeyB0aXRsZTogc2NvcmVzLm5hbWUsXG4gICAgICAgIHg6IHhTY29yZXNbMF0ubmFtZSxcbiAgICAgICAgeTogeFNjb3Jlc1tpbmRleF0ubmFtZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZScsXG4gICAgICAgIGxhYmVsczogc2FtcGxlc05hbWVzLm5hbWVcbiAgICB9KTtcbn1cbi8vIExvYWRpbmcgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gbG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCB4TG9hZGluZ3MpIHtcbiAgICBsZXQgbG9hZGluZ0NvbHMgPSBbXTtcbiAgICBsZXQgbG9hZGluZ0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbG9hZGluZ0xhYmVscy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsb2FkaW5nQ29scy5wdXNoKERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbGFiZWxzJywgbG9hZGluZ0xhYmVscykpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeExvYWRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhMb2FkaW5nc1tpXS5uYW1lID0gYHgubG9hZGluZy5wJHtpICsgMX1gO1xuICAgICAgICBsb2FkaW5nQ29scy5wdXNoKHhMb2FkaW5nc1tpXSk7XG4gICAgfVxuICAgIGxldCBkZkxvYWRpbmdzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGxvYWRpbmdDb2xzKTtcbiAgICBkZkxvYWRpbmdzLm5hbWUgPSAnTG9hZGluZ3MnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGZMb2FkaW5ncywgeyB0aXRsZTogZGZMb2FkaW5ncy5uYW1lLFxuICAgICAgICB4OiB4TG9hZGluZ3NbMF0ubmFtZSxcbiAgICAgICAgeTogeExvYWRpbmdzW3hMb2FkaW5ncy5sZW5ndGggLSAxXS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiAnbGFiZWxzJ1xuICAgIH0pO1xufVxuLy8gQWRkIFBMUyB2aXN1YWxpemF0aW9uXG5leHBvcnQgZnVuY3Rpb24gYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgc2FtcGxlc05hbWVzLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzT3V0cHV0KSB7XG4gICAgbGV0IHZpZXcgPSBncm9rLnNoZWxsLmdldFRhYmxlVmlldyh0YWJsZS5uYW1lKTtcbiAgICAvLyAxLiBQcmVkaWN0ZWQgdnMgUmVmZXJlbmNlIHNjYXR0ZXIgcGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcHJlZGljdCwgcGxzT3V0cHV0WzBdKSk7XG4gICAgLy8gMi4gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG4gICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAvLyAzLiBMb2FkaW5nIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKGxvYWRpbmdTY2F0dGVyUGxvdChmZWF0dXJlcywgcGxzT3V0cHV0WzRdKSk7XG4gICAgLy8gNC4gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHNjb3Jlc1NjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTtcbn1cbiIsIi8vIFRlc3QgZGF0YSBnZW5lcmF0aW9uIHRvb2xzXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBjaGVja0dlbmVyYXRvclNWTWlucHV0cyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIH0gZnJvbSAnLi4vd2FzbS9FREFBUEknO1xuY29uc3QgU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCA9IDA7XG5jb25zdCBTVk1fR0VOX0xBQkVMU19JTkRFWCA9IDE7XG5jb25zdCBTVk1fRkVBVFVSRV9OQU1FID0gJ0ZlYXR1cmUgIyc7XG5jb25zdCBTVk1fTEFCRUxfTkFNRSA9ICdMYWJlbCc7XG4vLyBSZXR1cm5zIHRoZSBkYXRhZnJhbWUgXCJjYXJzXCJcbmV4cG9ydCBmdW5jdGlvbiBjYXJzRGF0YWZyYW1lKCkge1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ21vZGVsJywgWydhbGZhcm9tZW8nLCAnYXVkaScsICdibXcnLCAnY2hldnJvbGV0JywgJ2RvZGdlMScsICdkb2RnZTInLCAnaG9uZGExJywgJ2hvbmRhMicsICdpc3V6dScsICdqYWd1YXInLCAnbWF6ZGEnLCAnbWVyY2VkZXMnLCAnbWVyY3VyeScsICdtaXRzdWJpc2hpJywgJ25pc3NhbjEnLCAnbmlzc2FuMicsICdwZXVnb3QnLCAncGx5bW91dGgnLCAncG9yc2NoZScsICdzYWFiJywgJ3N1YmFydScsICd0b3lvdGExJywgJ3RveW90YTInLCAndG95b3RhMycsICd0b3lvdGE0JywgJ3ZvbGtzd2FnZW4xJywgJ3ZvbGtzd2FnZW4yJywgJ3ZvbHZvMScsICd2b2x2bzInLCAndm9sdm8zJ10pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2RpZXNlbCcsIG5ldyBJbnQzMkFycmF5KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAxXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3R1cmJvJywgbmV3IEludDMyQXJyYXkoWzAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgndHdvLmRvb3JzJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnaGF0Y2hiYWNrJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd3aGVlbC5iYXNlJywgbmV3IEZsb2F0MzJBcnJheShbOTQuNSwgMTA1LjgwMDAwMzA1MTc1NzgxLCAxMDEuMTk5OTk2OTQ4MjQyMTksIDk0LjUsIDkzLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDk2LjUsIDk0LjMwMDAwMzA1MTc1NzgxLCAxMTMsIDkzLjA5OTk5ODQ3NDEyMTEsIDExNS41OTk5OTg0NzQxMjExLCAxMDIuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5NC41LCA5NC41LCA5My42OTk5OTY5NDgyNDIxOSwgMTE0LjE5OTk5Njk0ODI0MjE5LCA4OS41LCA5OS4wOTk5OTg0NzQxMjExLCA5Ny4xOTk5OTY5NDgyNDIxOSwgOTUuNjk5OTk2OTQ4MjQyMTksIDk1LjY5OTk5Njk0ODI0MjE5LCA5OC40MDAwMDE1MjU4Nzg5LCAxMDIuNDAwMDAxNTI1ODc4OSwgOTcuMzAwMDAzMDUxNzU3ODEsIDEwMC40MDAwMDE1MjU4Nzg5LCAxMDQuMzAwMDAzMDUxNzU3ODEsIDEwOS4wOTk5OTg0NzQxMjExLCAxMDkuMDk5OTk4NDc0MTIxMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2xlbmd0aCcsIG5ldyBGbG9hdDMyQXJyYXkoWzE3MS4xOTk5OTY5NDgyNDIyLCAxOTIuNjk5OTk2OTQ4MjQyMiwgMTc2LjgwMDAwMzA1MTc1NzgsIDE1OC44MDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE1MCwgMTc1LjM5OTk5Mzg5NjQ4NDM4LCAxNzAuNjk5OTk2OTQ4MjQyMiwgMTk5LjYwMDAwNjEwMzUxNTYyLCAxNjYuODAwMDAzMDUxNzU3OCwgMjAyLjYwMDAwNjEwMzUxNTYyLCAxNzguMzk5OTkzODk2NDg0MzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNzAuMTk5OTk2OTQ4MjQyMiwgMTY1LjMwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxOTguODk5OTkzODk2NDg0MzgsIDE2OC44OTk5OTM4OTY0ODQzOCwgMTg2LjYwMDAwNjEwMzUxNTYyLCAxNzIsIDE1OC42OTk5OTY5NDgyNDIyLCAxNjYuMzAwMDAzMDUxNzU3OCwgMTc2LjE5OTk5Njk0ODI0MjIsIDE3NS42MDAwMDYxMDM1MTU2MiwgMTcxLjY5OTk5Njk0ODI0MjIsIDE4MC4xOTk5OTY5NDgyNDIyLCAxODguODAwMDAzMDUxNzU3OCwgMTg4LjgwMDAwMzA1MTc1NzgsIDE4OC44MDAwMDMwNTE3NTc4XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnd2lkdGgnLCBuZXcgRmxvYXQzMkFycmF5KFs2NS41LCA3MS40MDAwMDE1MjU4Nzg5LCA2NC44MDAwMDMwNTE3NTc4MSwgNjMuNTk5OTk4NDc0MTIxMDk0LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY0LCA2NS4xOTk5OTY5NDgyNDIxOSwgNjEuNzk5OTk5MjM3MDYwNTUsIDY5LjU5OTk5ODQ3NDEyMTEsIDY0LjE5OTk5Njk0ODI0MjE5LCA3MS42OTk5OTY5NDgyNDIxOSwgNjgsIDY0LjQwMDAwMTUyNTg3ODksIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY4LjQwMDAwMTUyNTg3ODksIDY1LCA2Ni41LCA2NS40MDAwMDE1MjU4Nzg5LCA2My41OTk5OTg0NzQxMjEwOTQsIDY0LjQwMDAwMTUyNTg3ODksIDY1LjU5OTk5ODQ3NDEyMTEsIDY2LjUsIDY1LjUsIDY2LjkwMDAwMTUyNTg3ODksIDY3LjE5OTk5Njk0ODI0MjE5LCA2OC44MDAwMDMwNTE3NTc4MSwgNjguOTAwMDAxNTI1ODc4OV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2hlaWdodCcsIG5ldyBGbG9hdDMyQXJyYXkoWzUyLjQwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU0LjI5OTk5OTIzNzA2MDU1LCA1MiwgNTAuNzk5OTk5MjM3MDYwNTUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTIuNTk5OTk4NDc0MTIxMDk0LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDUzLjUsIDUyLjc5OTk5OTIzNzA2MDU1LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDU2LjI5OTk5OTIzNzA2MDU1LCA1NC43OTk5OTkyMzcwNjA1NSwgNTAuNzk5OTk5MjM3MDYwNTUsIDUzLjUsIDU0LjUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTguNzAwMDAwNzYyOTM5NDUsIDUxLjU5OTk5ODQ3NDEyMTA5NCwgNTYuMDk5OTk4NDc0MTIxMDk0LCA1Mi41LCA1NC41LCA1MywgNTIsIDU0LjkwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU1LjA5OTk5ODQ3NDEyMTA5NCwgNTYuMjAwMDAwNzYyOTM5NDUsIDU1LjUsIDU1LjVdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY3VyYi53ZWlnaHQnLCBuZXcgSW50MzJBcnJheShbMjgyMywgMjg0NCwgMjM5NSwgMTkwOSwgMjEyOCwgMTk2NywgMTk1NiwgMjMwNCwgMjMzNywgNDA2NiwgMTk1MCwgMzc3MCwgMjkxMCwgMTkxOCwgMjAyNCwgMTk1MSwgMTk2NywgMzQzMCwgMjgwMCwgMjY5NSwgMjE5MCwgMTk4NSwgMjI3NSwgMjU1MSwgMjQ4MCwgMjI2MSwgMjY2MSwgMjkxMiwgMzA0OSwgMzIxN10pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdlbmcuc2l6ZScsIG5ldyBJbnQzMkFycmF5KFsxNTIsIDEzNiwgMTA4LCA5MCwgOTgsIDkwLCA5MiwgMTEwLCAxMTEsIDI1OCwgOTEsIDE4MywgMTQwLCA5MiwgOTcsIDk3LCA5MCwgMTUyLCAxOTQsIDEyMSwgMTA4LCA5MiwgMTEwLCAxNDYsIDExMCwgOTcsIDEzNiwgMTQxLCAxNDEsIDE0NV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdob3JzZXBvd2VyJywgbmV3IEludDMyQXJyYXkoWzE1NCwgMTEwLCAxMDEsIDcwLCAxMDIsIDY4LCA3NiwgODYsIDc4LCAxNzYsIDY4LCAxMjMsIDE3NSwgNjgsIDY5LCA2OSwgNjgsIDk1LCAyMDcsIDExMCwgODIsIDYyLCA1NiwgMTE2LCA3MywgNTIsIDExMCwgMTE0LCAxNjAsIDEwNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdwZWFrLnJwbScsIG5ldyBJbnQzMkFycmF5KFs1MDAwLCA1NTAwLCA1ODAwLCA1NDAwLCA1NTAwLCA1NTAwLCA2MDAwLCA1ODAwLCA0ODAwLCA0NzUwLCA1MDAwLCA0MzUwLCA1MDAwLCA1NTAwLCA1MjAwLCA1MjAwLCA1NTAwLCA0MTUwLCA1OTAwLCA1MjUwLCA0NDAwLCA0ODAwLCA0NTAwLCA0ODAwLCA0NTAwLCA0ODAwLCA1NTAwLCA1NDAwLCA1MzAwLCA0ODAwXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3N5bWJvbCcsIG5ldyBJbnQzMkFycmF5KFsxLCAxLCAyLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAtMSwgMSwgMiwgMSwgMSwgMSwgMCwgMywgMiwgMCwgMSwgMCwgMiwgLTEsIDIsIDAsIC0yLCAtMSwgLTFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY2l0eS5tcGcnLCBuZXcgSW50MzJBcnJheShbMTksIDE5LCAyMywgMzgsIDI0LCAzMSwgMzAsIDI3LCAyNCwgMTUsIDMxLCAyMiwgMTksIDM3LCAzMSwgMzEsIDMxLCAyNSwgMTcsIDIxLCAyOCwgMzUsIDM0LCAyNCwgMzAsIDM3LCAxOSwgMjMsIDE5LCAyNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdoaWdod2F5Lm1wZycsIG5ldyBJbnQzMkFycmF5KFsyNiwgMjUsIDI5LCA0MywgMzAsIDM4LCAzNCwgMzMsIDI5LCAxOSwgMzgsIDI1LCAyNCwgNDEsIDM3LCAzNywgMzgsIDI1LCAyNSwgMjgsIDMzLCAzOSwgMzYsIDMwLCAzMywgNDYsIDI0LCAyOCwgMjUsIDI3XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3ByaWNlJywgbmV3IEludDMyQXJyYXkoWzE2NTAwLCAxNzcxMCwgMTY0MzAsIDY1NzUsIDc5NTcsIDYyMjksIDcxMjksIDg4NDUsIDY3ODUsIDM1NTUwLCA3Mzk1LCAzMTYwMCwgMTY1MDMsIDUzODksIDczNDksIDcyOTksIDYyMjksIDEzODYwLCAzNzAyOCwgMTIxNzAsIDc3NzUsIDUzNDgsIDc4OTgsIDk5ODksIDEwNjk4LCA3Nzc1LCAxMzI5NSwgMTI5NDAsIDE5MDQ1LCAyMjQ3MF0pKSxcbiAgICBdKTtcbn0gLy8gY2Fyc0RhdGFmcmFtZVxuLy8gR2VuZXJhdGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmllcnNcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKGtlcm5lbCwga2VybmVsUGFyYW1zLCBuYW1lLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgaW5wdXRzXG4gICAgICAgIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpO1xuICAgICAgICAvLyBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNDb2wgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsICdrZXJuZWxQYXJhbXMnLCBrZXJuZWxQYXJhbXMpO1xuICAgICAgICAvLyBDQUxMIFdBU00tQ09NUFVUQVRJT05TICBcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtc0NvbCwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIFJlbmFtZSBsYWJlbHMgY29sdW1uXG4gICAgICAgIF9vdXRwdXRbU1ZNX0dFTl9MQUJFTFNfSU5ERVhdLm5hbWUgPSBTVk1fTEFCRUxfTkFNRTtcbiAgICAgICAgLy8gUmVuYW1lIGZlYXR1cmUgY29sdW1uc1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBfb3V0cHV0W1NWTV9HRU5fRkVBVFVSRVNfSU5ERVhdKVxuICAgICAgICAgICAgY29sLm5hbWUgPSBTVk1fRkVBVFVSRV9OQU1FICsgY29sLm5hbWU7XG4gICAgICAgIC8vIENyZWF0ZSBkYXRhZnJhbWVcbiAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoX291dHB1dFtTVk1fR0VOX0ZFQVRVUkVTX0lOREVYXSk7XG4gICAgICAgIGRmLm5hbWUgPSBuYW1lO1xuICAgICAgICBkZi5jb2x1bW5zLmFkZChfb3V0cHV0W1NWTV9HRU5fTEFCRUxTX0lOREVYXSk7XG4gICAgICAgIHJldHVybiBkZjtcbiAgICB9KTtcbn0gLy8gdGVzdERhdGFGb3JNYWNoaW5lTGVhcm5pbmdcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyogU3VwcG9ydCB2ZWN0b3IgbWFjaGluZSAoU1ZNKSB0b29scy5cbiAgIEl0J3MgZGV2ZWxvcGVkIGZvciBhcHBseWluZyBpbiBjb21iaW5hdGlvbiB3aXRoIERBVEFHUk9LIHByZWRpY3RpdmUgdG9vbHMuXG5cbiAgIFRyYWluaW5nICYgcHJlZGljdGluZyBhcmUgcHJvdmlkZWQgYnkgd2FzbS1jb21wdXRhdGlvbnMuXG5cbiAgIExlYXN0IHNxdWFyZSBzdXBwb3J0IHZlY3RvciBtYWNoaW5lIChMUy1TVk0pIGlzIGltcGxlbWVudGVkOlxuICAgICBbMV0gU3V5a2VucywgSi4sIFZhbmRld2FsbGUsIEouIFwiTGVhc3QgU3F1YXJlcyBTdXBwb3J0IFZlY3RvciBNYWNoaW5lIENsYXNzaWZpZXJzXCIsXG4gICAgICAgICAgIE5ldXJhbCBQcm9jZXNzaW5nIExldHRlcnMgOSwgMjkzLTMwMCAoMTk5OSkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDIzL0E6MTAxODYyODYwOTc0MlxuKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyLCBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbi8vIDEuIENPTlNUQU5UU1xuLy8ga2VybmVsIHR5cGVzXG5leHBvcnQgY29uc3QgTElORUFSID0gMDtcbmV4cG9ydCBjb25zdCBQT0xZTk9NSUFMID0gMTtcbmV4cG9ydCBjb25zdCBSQkYgPSAyO1xuZXhwb3J0IGNvbnN0IFNJR01PSUQgPSAzO1xuLy8gb3V0cHV0LXJlbGF0ZWRcbmNvbnN0IENPTkZVU0lPTl9NQVRSX1NJWkUgPSA0O1xuY29uc3QgTk9STUFMSVpFRF9EQVRBX0lOREVYID0gMDtcbmNvbnN0IE1FQU5TX0lOREVYID0gMTtcbmNvbnN0IFNURF9ERVZTX0lOREVYID0gMjtcbmNvbnN0IE1PREVMX1BBUkFNU19JTkRFWCA9IDM7XG5jb25zdCBNT0RFTF9XRUlHSFRTX0lOREVYID0gNDtcbmNvbnN0IFBSRURJQ1RFRF9MQUJFTFNfSU5ERVggPSA1O1xuY29uc3QgQ09SUkVDVE5FU1NfSU5ERVggPSA2O1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9JTkRFWCA9IDc7XG5jb25zdCBUUlVFX1BPU0lUSVZFX0lOREVYID0gMDtcbmNvbnN0IEZBTFNFX05FR0FUSVZFX0lOREVYID0gMTtcbmNvbnN0IEZBTFNFX1BPU0lUSVZFX0lOREVYID0gMjtcbmNvbnN0IFRSVUVfTkVHQVRJVkVfSU5ERVggPSAzO1xuLy8ga2VybmVsIHBhcmFtZXRlcnMgaW5kZWNlc1xuY29uc3QgUkJGX1NJR01BX0lOREVYID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfQ19JTkRFWCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0RfSU5ERVggPSAxO1xuY29uc3QgU0lHTU9JRF9LQVBQQV9JTkRFWCA9IDA7XG5jb25zdCBTSUdNT0lEX1RIRVRBX0lOREVYID0gMTtcbi8vIGh5cGVycGFyYW1ldGVycyBsaW1pdHNcbmNvbnN0IEdBTU1BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUkJGX1NJR01BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQgPSAwO1xuLy8gZXJyb3IgbWVzc2FnZXNcbmNvbnN0IFdST05HX0dBTU1BX01FU1NBR0UgPSAnZ2FtbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUkJGX1NJR01BX01FU1NBR0UgPSAnc2lnbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UgPSAnYyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSA9ICdkIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX0tFUk5FTF9NRVNTQUdFID0gJ2luY29ycmVjdCBrZXJuZWwuJztcbi8vIG5hbWVzXG5jb25zdCBMQUJFTFMgPSAnTGFiZWxzJztcbmNvbnN0IFBSRURJQ1RFRCA9ICdwcmVkaWN0ZWQnO1xuY29uc3QgQ09SUkVDVE5FU1MgPSAnY29ycmVjdG5lc3MnO1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9OQU1FID0gJ0NvbmZ1c2lvbiBtYXRyaXgnO1xuY29uc3QgTUVBTiA9ICdtZWFuJztcbmNvbnN0IFNURF9ERVYgPSAnc3RkIGRldic7XG5jb25zdCBNT0RFTF9QQVJBTVNfTkFNRSA9ICdhbHBoYSc7XG5jb25zdCBNT0RFTF9XRUlHSFRTX05BTUUgPSAnd2VpZ2h0JztcbmNvbnN0IEdBTU1BID0gJ2dhbW1hJztcbmNvbnN0IEtFUk5FTCA9ICdrZXJuZWwnO1xuY29uc3QgS0VSTkVMX1BBUkFNUyA9ICdrZXJuZWwgcGFyYW1zJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8xID0gJ2tlcm5lbCBwYXJhbSAxJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8yID0gJ2tlcm5lbCBwYXJhbSAyJztcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX05BTUUgPSAnZmVhdHVyZXMgY291bnQnO1xuY29uc3QgVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FID0gJ3RyYWluIHNhbXBsZXMgY291bnQnO1xuY29uc3QgVFJBSU5fRVJST1IgPSAnVHJhaW4gZXJyb3IsJSc7XG5jb25zdCBLRVJORUxfVFlQRV9UT19OQU1FX01BUCA9IFsnbGluZWFyJywgJ3BvbHlub21pYWwnLCAnUkJGJywgJ3NpZ21vaWQnXTtcbmNvbnN0IFBPU0lUSVZFX05BTUUgPSAncG9zaXRpdmUgKFApJztcbmNvbnN0IE5FR0FUSVZFX05BTUUgPSAnbmVnYXRpdmUgKE4pJztcbmNvbnN0IFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBwb3NpdGl2ZSAoUFApJztcbmNvbnN0IFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBuZWdhdGl2ZSAoUE4pJztcbmNvbnN0IFNFTlNJVElWSVRZID0gJ1NlbnNpdGl2aXR5JztcbmNvbnN0IFNQRUNJRklDSVRZID0gJ1NwZWNpZmljaXR5JztcbmNvbnN0IEJBTEFOQ0VEX0FDQ1VSQUNZID0gJ0JhbGFuY2VkIGFjY3VyYWN5JztcbmNvbnN0IFBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUgPSAnUG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZSc7XG5jb25zdCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFID0gJ05lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWUnO1xuY29uc3QgTUxfUkVQT1JUID0gJ01vZGVsIHJlcG9ydCc7XG5jb25zdCBNTF9SRVBPUlRfUFJFRElDVEVEX0xBQkVMUyA9ICdQcmVkaWN0ZWQgbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMgPSAnVHJhaW4gbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyA9ICdQcmVkaWN0aW9uIGNvcnJlY3RuZXNzJztcbmNvbnN0IFBSRURJQ1RJT04gPSAncHJlZGljdGlvbic7XG4vLyBQYWNrL3VucGFjayBjb25zdGFudHNcbmNvbnN0IEJZVEVTID0gNDtcbmNvbnN0IElOVFNfQ09VTlQgPSAzO1xuY29uc3QgS0VSX1BBUkFNU19DT1VOVCA9IDI7XG5jb25zdCBNT0RFTF9LRVJORUxfSU5ERVggPSAwO1xuY29uc3QgU0FNUExFU19DT1VOVF9JTkRFWCA9IDE7XG5jb25zdCBGRUFUVVJFU19DT1VOVF9JTkRFWCA9IDI7XG4vLyBtaXNjXG5jb25zdCBJTklUX1ZBTFVFID0gMDsgLy8gYW55IG51bWJlciBjYW4gYmUgdXNlZFxuY29uc3QgTFNfU1ZNX0FERF9DT05TVCA9IDE7IC8vIHNlZSBbMV0gZm9yIG1vcmUgZGV0YWlsc1xuLy8gMi4gVE9PTFNcbi8vIENoZWNrIExTLVNWTSBsZWFybmluZyBoeXBlcnBhcmFtZXRlcnNcbmZ1bmN0aW9uIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycykge1xuICAgIC8vIGNoZWNrIGdhbW1hXG4gICAgaWYgKGh5cGVycGFyYW1ldGVycy5nYW1tYSA8PSBHQU1NQV9JTkZJTVVNX0xJTUlUKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfR0FNTUFfTUVTU0FHRSk7XG4gICAgLy8gY2hlY2sga2VybmVsICYgaXRzIHBhcmFtZXRlcnNcbiAgICBzd2l0Y2ggKGh5cGVycGFyYW1ldGVycy5rZXJuZWwpIHtcbiAgICAgICAgY2FzZSBMSU5FQVI6IC8vIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBSQkY6IC8vIHRoZSBjYXNlIG9mIFJCRiBrZXJuZWxcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuc2lnbWEgPD0gUkJGX1NJR01BX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1JCRl9TSUdNQV9NRVNTQUdFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBQT0xZTk9NSUFMOiAvLyB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgLy8gY2hlY2sgY1xuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5jUGFyYW0gPD0gUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGRcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuZFBhcmFtIDw9IFBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgU0lHTU9JRDogLy8gdGhlIGNhc2Ugb2YgcG9seW5vbWlhbCBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICB9IC8vIHN3aXRjaCAgICBcbn0gLy8gY2hlY2tIeXBlcnBhcmFtZXRlcnNcbi8vIFJldHVybmVzIGxhYmVscyBwcmVkaWN0ZWQgYnkgdGhlIG1vZGVsIHNwZWNpZmllZFxuZnVuY3Rpb24gcHJlZGljdChtb2RlbCwgZGF0YXNldCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihtb2RlbC5rZXJuZWxUeXBlLCBtb2RlbC5rZXJuZWxQYXJhbXMsIG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucywgbW9kZWwudHJhaW5MYWJlbHMsIG1vZGVsLm1lYW5zLCBtb2RlbC5zdGREZXZzLCBtb2RlbC5tb2RlbFBhcmFtcywgbW9kZWwubW9kZWxXZWlnaHRzLCBkYXRhc2V0KTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgX291dHB1dCA9IF9yZXN1bHQ7IH0sIF9lcnJvciA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgcmV0dXJuIF9vdXRwdXQ7XG4gICAgfSk7XG59IC8vIHByZWRpY3Rcbi8vIEV2YWx1YXRlIGFjY3VyYWN5IG9mIHRoZSBtb2RlbFxuZnVuY3Rpb24gZXZhbHVhdGVBY2N1cmFjeShtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICAvLyBoZXJlLCB0aGUgY2xhc3NpYyBub3RhdGlvbiBpcyB1c2VkIChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2Vuc2l0aXZpdHlfYW5kX3NwZWNpZmljaXR5KVxuICAgIGxldCBUUCA9IGRhdGFbVFJVRV9QT1NJVElWRV9JTkRFWF07IC8vIHRydWUgcG9zaXRpdmVcbiAgICBsZXQgVE4gPSBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdOyAvLyB0cnVlIG5lZ2F0aXZlXG4gICAgbGV0IEZQID0gZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF07IC8vIGZhbHNlIHBvc2l0aXZlXG4gICAgbGV0IEZOID0gZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF07IC8vIGZhbHNlIG5lZ2F0aXZlXG4gICAgbGV0IFAgPSBUUCArIEZOOyAvLyBwb3NpdGl2ZVxuICAgIGxldCBOID0gRlAgKyBUTjsgLy8gbmVnYXRpdmVcbiAgICBsZXQgVFBSID0gVFAgLyBQOyAvLyB0cnVlIHBvc2l0aXZlIHJhdGVcbiAgICBsZXQgVE5SID0gVE4gLyBOOyAvLyB0cnVlIG5lZ2F0aXZlIHJhdGVcbiAgICBsZXQgUFBWID0gVFAgLyAoVFAgKyBGUCk7IC8vIHBvc2l0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgTlBWID0gVE4gLyAoVE4gKyBGTik7IC8vIG5lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgQUNDID0gKFRQICsgVE4pIC8gKFAgKyBOKTsgLy8gYWNjdXJhY3lcbiAgICBsZXQgQkEgPSAoVFBSICsgVE5SKSAvIDI7IC8vIGJhbGFuY2VkIGFjY3VyYWN5XG4gICAgbW9kZWwuc2Vuc2l0aXZpdHkgPSBUUFI7XG4gICAgbW9kZWwuc3BlY2lmaWNpdHkgPSBUTlI7XG4gICAgbW9kZWwuYmFsYW5jZWRBY2N1cmFjeSA9IEJBO1xuICAgIG1vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlID0gUFBWO1xuICAgIG1vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlID0gTlBWO1xuICAgIG1vZGVsLnRyYWluRXJyb3IgPSAoMSAtIEFDQykgKiAxMDA7IC8vIHRyYWluIGVycm9yLCAlXG59IC8vIGV2YWx1YXRlQWNjdXJhY3lcbi8vIFJldHVybnMgdHJhaW5lZCBMUy1TVk0gbW9kZWwuXG5mdW5jdGlvbiB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGRhdGFzZXQsIGxhYmVscykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGNvcnJlY3RuZXNzIG9mIGh5cGVycGFyYW1ldGVyIGdhbW1hXG4gICAgICAgIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycyk7XG4gICAgICAgIC8vIGNyZWF0ZSBkZWZhdWx0IGtlcm5lbCBwYXJhbXMgYXJyYXlcbiAgICAgICAgY29uc3Qga2VybmVsUGFyYW1zQXJyYXkgPSBbSU5JVF9WQUxVRSwgSU5JVF9WQUxVRV07XG4gICAgICAgIC8vIGZpbGwga2VybmVsUGFyYW1zXG4gICAgICAgIHN3aXRjaCAoaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCkge1xuICAgICAgICAgICAgY2FzZSBMSU5FQVI6IC8vIG5vIGtlcm5lbCBwYXJhbWV0ZXJzIGluIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUkJGOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2YgUkJGLWtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1JCRl9TSUdNQV9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuc2lnbWE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBPTFlOT01JQUw6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfQ19JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuY1BhcmFtO1xuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfRF9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuZFBhcmFtO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTSUdNT0lEOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2Ygc2lnbW9pZCBrZXJuZWxcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX0tBUFBBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5rYXBwYTtcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX1RIRVRBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy50aGV0YTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGluY29ycmVjdCBrZXJuZWwgXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIC8vIGNyZWF0ZSBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBsZXQga2VybmVsUGFyYW1zID0gREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1TLCBrZXJuZWxQYXJhbXNBcnJheSk7XG4gICAgICAgIC8vIGNvbXB1dGUgc2l6ZSBvZiBtb2RlbCBwYXJhbXMgJiBwcmVjb21wdXRlZCB3ZWlndGhzXG4gICAgICAgIGxldCB0cmFpbkNvbHMgPSBkYXRhc2V0LnRvTGlzdCgpO1xuICAgICAgICBsZXQgbW9kZWxQYXJhbXNDb3VudCA9IHRyYWluQ29sc1swXS5sZW5ndGggKyBMU19TVk1fQUREX0NPTlNUO1xuICAgICAgICBsZXQgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQgPSB0cmFpbkNvbHMubGVuZ3RoICsgTFNfU1ZNX0FERF9DT05TVDtcbiAgICAgICAgbGV0IGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQgPSBDT05GVVNJT05fTUFUUl9TSVpFO1xuICAgICAgICAvLyBjYWxsIHdlYmFzc2VtYmx5IHRyYWluaW5nIGZ1bmN0aW9uXG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGh5cGVycGFyYW1ldGVycy5nYW1tYSwgaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICAvLyByZW5hbWUgb3V0cHV0IGNvbHVtbnNcbiAgICAgICAgb3V0cHV0W01FQU5TX0lOREVYXS5uYW1lID0gTUVBTjtcbiAgICAgICAgb3V0cHV0W1NURF9ERVZTX0lOREVYXS5uYW1lID0gU1REX0RFVjtcbiAgICAgICAgb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0ubmFtZSA9IE1PREVMX1BBUkFNU19OQU1FO1xuICAgICAgICBvdXRwdXRbTU9ERUxfV0VJR0hUU19JTkRFWF0ubmFtZSA9IE1PREVMX1dFSUdIVFNfTkFNRTtcbiAgICAgICAgb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLm5hbWUgPSBQUkVESUNURUQ7XG4gICAgICAgIG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0ubmFtZSA9IENPUlJFQ1RORVNTO1xuICAgICAgICBvdXRwdXRbQ09ORlVTSU9OX01BVFJJWF9JTkRFWF0ubmFtZSA9IENPTkZVU0lPTl9NQVRSSVhfTkFNRTtcbiAgICAgICAgLy8gY29tcGxldGUgbW9kZWxcbiAgICAgICAgbGV0IG1vZGVsID0ge1xuICAgICAgICAgICAgdHJhaW5HYW1tYTogaHlwZXJwYXJhbWV0ZXJzLmdhbW1hLFxuICAgICAgICAgICAga2VybmVsVHlwZTogaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCxcbiAgICAgICAgICAgIGtlcm5lbFBhcmFtczoga2VybmVsUGFyYW1zLFxuICAgICAgICAgICAgdHJhaW5MYWJlbHM6IGxhYmVscyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRUcmFpbkRhdGE6IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhvdXRwdXRbTk9STUFMSVpFRF9EQVRBX0lOREVYXSksXG4gICAgICAgICAgICBtZWFuczogb3V0cHV0W01FQU5TX0lOREVYXSxcbiAgICAgICAgICAgIHN0ZERldnM6IG91dHB1dFtTVERfREVWU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFBhcmFtczogb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFdlaWdodHM6IG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXSxcbiAgICAgICAgICAgIHByZWRpY3RlZExhYmVsczogb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLFxuICAgICAgICAgICAgY29ycmVjdG5lc3M6IG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0sXG4gICAgICAgICAgICBjb25mdXNpb25NYXRyaXg6IG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXSxcbiAgICAgICAgICAgIHRyYWluRXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZlYXR1cmVzQ291bnQ6IHRyYWluQ29scy5sZW5ndGgsXG4gICAgICAgICAgICB0cmFpblNhbXBsZXNDb3VudDogdHJhaW5Db2xzWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICBldmFsdWF0ZUFjY3VyYWN5KG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pO1xufSAvLyB0cmFpbkFuZEFuYWx5emVNb2RlbFxuLy8gV3JhcHBlciBmb3IgY29tYmluaW5nIHRoZSBmdW5jdGlvbiBcInRyYWluQW5kQW5hbHl6ZU1vZGVsXCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhaW5lZE1vZGVsKGh5cGVycGFyYW1ldGVycywgZGYsIHByZWRpY3RfY29sdW1uKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBkZi5jb2x1bW5zO1xuICAgICAgICBsZXQgbGFiZWxzID0gY29sdW1ucy5ieU5hbWUocHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBjb2x1bW5zLnJlbW92ZShwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIHJldHVybiB5aWVsZCB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGNvbHVtbnMsIGxhYmVscyk7XG4gICAgfSk7XG59XG4vLyBSZXR1cm5zIGRhdGFmcmFtZSB3aXRoIHNob3J0IGluZm8gYWJvdXQgbW9kZWxcbmZ1bmN0aW9uIGdldE1vZGVsSW5mbyhtb2RlbCkge1xuICAgIGxldCBrZXJuZWxQYXJhbXMgPSBtb2RlbC5rZXJuZWxQYXJhbXMuZ2V0UmF3RGF0YSgpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEdBTU1BLCBbbW9kZWwudHJhaW5HYW1tYV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoS0VSTkVMLCBbS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVBbbW9kZWwua2VybmVsVHlwZV1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1fMSwgW2tlcm5lbFBhcmFtc1swXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTV8yLCBba2VybmVsUGFyYW1zWzFdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgRkVBVFVSRVNfQ09VTlRfTkFNRSwgW21vZGVsLmZlYXR1cmVzQ291bnRdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBUUkFJTl9TQU1QTEVTX0NPVU5UX05BTUUsIFttb2RlbC50cmFpblNhbXBsZXNDb3VudF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFRSQUlOX0VSUk9SLCBbbW9kZWwudHJhaW5FcnJvcl0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEJBTEFOQ0VEX0FDQ1VSQUNZLCBbbW9kZWwuYmFsYW5jZWRBY2N1cmFjeV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFNFTlNJVElWSVRZLCBbbW9kZWwuc2Vuc2l0aXZpdHldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBTUEVDSUZJQ0lUWSwgW21vZGVsLnNwZWNpZmljaXR5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgUE9TSVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlXSlcbiAgICBdKTtcbn1cbi8vIEdldCBkYXRhZnJhbWUgd2l0aCBjb25mdXNpb24gbWF0cml4XG5mdW5jdGlvbiBnZXRDb25mdXNpb25NYXRyaXhERihtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKCcnLCBbUE9TSVRJVkVfTkFNRSwgTkVHQVRJVkVfTkFNRV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2ludCcsIFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FLCBbZGF0YVtUUlVFX1BPU0lUSVZFX0lOREVYXSwgZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdpbnQnLCBQUkVESUNURURfTkVHQVRJVkVfTkFNRSwgW2RhdGFbRkFMU0VfTkVHQVRJVkVfSU5ERVhdLCBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdXSlcbiAgICBdKTtcbn1cbi8vIFNob3cgdHJhaW5pbmcgcmVwb3J0XG5leHBvcnQgZnVuY3Rpb24gc2hvd1RyYWluUmVwb3J0KGRmLCBtb2RlbCkge1xuICAgIGRmLm5hbWUgPSBNTF9SRVBPUlQ7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwudHJhaW5MYWJlbHMpO1xuICAgIGRmLmNvbHVtbnMuYWRkKG1vZGVsLnByZWRpY3RlZExhYmVscyk7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwuY29ycmVjdG5lc3MpO1xuICAgIGxldCBkZlZpZXcgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuZm9ybShnZXRNb2RlbEluZm8obW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTLFxuICAgICAgICBjb2xvcjogbW9kZWwucHJlZGljdGVkTGFiZWxzLm5hbWVcbiAgICB9KSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMsXG4gICAgICAgIGNvbG9yOiBtb2RlbC50cmFpbkxhYmVscy5uYW1lXG4gICAgfSkpO1xuICAgIGRmVmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmdyaWQoZ2V0Q29uZnVzaW9uTWF0cml4REYobW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLmNvcnJlY3RuZXNzLm5hbWVcbiAgICB9KSk7XG59IC8vIHNob3dUcmFpblJlcG9ydFxuLy8gUmV0dXJucyB0cmFpbmVkIG1vZGVsIHBhY2tlZCBpbnRvIFVJbnQ4QXJyYXlcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrZWRNb2RlbChtb2RlbCkge1xuICAgIC8vIGdldCBwcmluY2lwYWwgZGF0YVxuICAgIGxldCBkYXRhQ29scyA9IG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucztcbiAgICBsZXQgc2FtcGxlc0NvdW50ID0gbW9kZWwudHJhaW5TYW1wbGVzQ291bnQ7XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBtb2RlbC5mZWF0dXJlc0NvdW50O1xuICAgIC8qbGV0IGJ1ZmZlclNpemUgPSBCWVRFUyAqICg3ICsgZmVhdHVyZXNDb3VudCAqIHNhbXBsZXNDb3VudFxuICAgICAgKyAzICogZmVhdHVyZXNDb3VudCArIDIgKiBzYW1wbGVzQ291bnQpOyovXG4gICAgLy8gY29tcHV0ZSBzaXplIG9mIHBhY2tlZCBtb2RlbFxuICAgIGxldCBidWZmZXJTaXplID0gQllURVMgKiAoSU5UU19DT1VOVCArIEtFUl9QQVJBTVNfQ09VTlQgK1xuICAgICAgICBzYW1wbGVzQ291bnQgKyBmZWF0dXJlc0NvdW50ICsgZmVhdHVyZXNDb3VudCArIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1RcbiAgICAgICAgKyBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCArIGZlYXR1cmVzQ291bnQgKiBzYW1wbGVzQ291bnQpO1xuICAgIC8vIHBhY2tlZCBtb2RlbFxuICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheShidWZmZXJTaXplKTtcbiAgICBsZXQgYnVmZmVyID0gcmVzdWx0LmJ1ZmZlcjtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAvLyBwYWNrIGtlcm5lbCB0eXBlIGFuZCBzaXplc1xuICAgIGxldCBpbnRzID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIGludHNbTU9ERUxfS0VSTkVMX0lOREVYXSA9IG1vZGVsLmtlcm5lbFR5cGU7XG4gICAgaW50c1tTQU1QTEVTX0NPVU5UX0lOREVYXSA9IHNhbXBsZXNDb3VudDtcbiAgICBpbnRzW0ZFQVRVUkVTX0NPVU5UX0lOREVYXSA9IGZlYXR1cmVzQ291bnQ7XG4gICAgb2Zmc2V0ICs9IElOVFNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIGtlcm5lbCBwYXJhbWV0ZXJzXG4gICAgbGV0IGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIEtFUl9QQVJBTVNfQ09VTlQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwua2VybmVsUGFyYW1zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IEtFUl9QQVJBTVNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIHBhY2sgbGFiZWxzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzYW1wbGVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwudHJhaW5MYWJlbHMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gc2FtcGxlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBtZWFuIHZhbHVlcyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tZWFucy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLnN0ZERldnMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbW9kZWwgcGFyYW10ZXJzXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tb2RlbFBhcmFtcy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1vZGVsJ3MgcHJlY29tcHV0ZWQgd2VpZ2h0c1xuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1vZGVsV2VpZ2h0cy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gcGFjayB0cmFpbmluZyBkYXRhc2V0XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUNvbHMpIHtcbiAgICAgICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgICAgIGZsb2F0cy5zZXQoY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59IC8vIGdldFBhY2tlZE1vZGVsXG4vLyBSZXR1cm5zIHVucGFja2VkIG1vZGVsXG5mdW5jdGlvbiBnZXRVbnBhY2tlZE1vZGVsKHBhY2tlZE1vZGVsKSB7XG4gICAgbGV0IG1vZGVsQnl0ZXMgPSBwYWNrZWRNb2RlbC5idWZmZXI7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgLy8gZXh0cmFjdCBrZXJuZWwgdHlwZSBhbmQgc2l6ZXNcbiAgICBsZXQgaGVhZGVyID0gbmV3IEludDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBJTlRTX0NPVU5UKTtcbiAgICBvZmZzZXQgKz0gSU5UU19DT1VOVCAqIEJZVEVTO1xuICAgIGxldCBzYW1wbGVzQ291bnQgPSBoZWFkZXJbU0FNUExFU19DT1VOVF9JTkRFWF07XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBoZWFkZXJbRkVBVFVSRVNfQ09VTlRfSU5ERVhdO1xuICAgIC8vIGV4dHJhY3QgcGFyYW1ldGVycyBvZiBrZXJuZWxcbiAgICBjb25zdCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShLRVJORUxfUEFSQU1TLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgS0VSX1BBUkFNU19DT1VOVCkpO1xuICAgIG9mZnNldCArPSBLRVJfUEFSQU1TX0NPVU5UICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBsYWJlbHNcbiAgICBjb25zdCB0cmFpbkxhYmVscyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KExBQkVMUywgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBzYW1wbGVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1lYW4gdmFsdWVzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBjb25zdCBtZWFucyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1FQU4sIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IHN0ZERldnMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShTVERfREVWLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIG1vZGVsXG4gICAgY29uc3QgbW9kZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9QQVJBTVNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpKTtcbiAgICBvZmZzZXQgKz0gKHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBtb2RlbCdzIHByZWNvbXB1dGVkIHdlaWdodHNcbiAgICBjb25zdCBtb2RlbFdlaWdodHMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9XRUlHSFRTX05BTUUsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBkYXRhIGNvbHVtbnNcbiAgICBsZXQgZGF0YUNvbHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZXNDb3VudDsgaSsrKSB7XG4gICAgICAgIGRhdGFDb2xzLnB1c2goREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoaS50b1N0cmluZygpLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpKTtcbiAgICAgICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZFRyYWluRGF0YSA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhkYXRhQ29scyk7XG4gICAgbGV0IG1vZGVsID0geyBrZXJuZWxUeXBlOiBoZWFkZXJbTU9ERUxfS0VSTkVMX0lOREVYXSxcbiAgICAgICAga2VybmVsUGFyYW1zOiBrZXJuZWxQYXJhbXMsXG4gICAgICAgIHRyYWluTGFiZWxzOiB0cmFpbkxhYmVscyxcbiAgICAgICAgbWVhbnM6IG1lYW5zLFxuICAgICAgICBzdGREZXZzOiBzdGREZXZzLFxuICAgICAgICBtb2RlbFBhcmFtczogbW9kZWxQYXJhbXMsXG4gICAgICAgIG1vZGVsV2VpZ2h0czogbW9kZWxXZWlnaHRzLFxuICAgICAgICBub3JtYWxpemVkVHJhaW5EYXRhOiBub3JtYWxpemVkVHJhaW5EYXRhXG4gICAgfTtcbiAgICByZXR1cm4gbW9kZWw7XG59IC8vIGdldFVucGFja2VkTW9kZWxcbi8vIFdyYXBwZXIgZm9yIGNvbWJpbmluZyB0aGUgZnVuY3Rpb24gXCJwcmVkaWN0XCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlZGljdGlvbihkZiwgcGFja2VkTW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgbW9kZWwgPSBnZXRVbnBhY2tlZE1vZGVsKG5ldyBVaW50OEFycmF5KHBhY2tlZE1vZGVsKSk7XG4gICAgICAgIGxldCByZXMgPSB5aWVsZCBwcmVkaWN0KG1vZGVsLCBkZi5jb2x1bW5zKTtcbiAgICAgICAgcmVzLm5hbWUgPSBQUkVESUNUSU9OO1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtyZXNdKTtcbiAgICB9KTtcbn0gLy8gZ2V0UHJlZGljdGlvblxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBEbyBub3QgY2hhbmdlIHRoZXNlIGltcG9ydCBsaW5lcyB0byBtYXRjaCBleHRlcm5hbCBtb2R1bGVzIGluIHdlYnBhY2sgY29uZmlndXJhdGlvbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IERlbW9TY3JpcHQgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3R1dG9yaWFscy9zcmMvZGVtby1zY3JpcHQnO1xuaW1wb3J0IHsgX2luaXRFREFBUEkgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjb21wdXRlUENBLCBjb21wdXRlUExTIH0gZnJvbSAnLi9FREF0b29scyc7XG5pbXBvcnQgeyByZW5hbWVQQ0Fjb2x1bW5zLCBhZGRQTFN2aXN1YWxpemF0aW9uLCByZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQsIHNjb3Jlc1NjYXR0ZXJQbG90LCBwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdCB9IGZyb20gJy4vRURBdWknO1xuaW1wb3J0IHsgY2Fyc0RhdGFmcmFtZSwgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbiB9IGZyb20gJy4vZGF0YUdlbmVyYXRvcnMnO1xuaW1wb3J0IHsgTElORUFSLCBSQkYsIFBPTFlOT01JQUwsIFNJR01PSUQsIGdldFRyYWluZWRNb2RlbCwgZ2V0UHJlZGljdGlvbiwgc2hvd1RyYWluUmVwb3J0LCBnZXRQYWNrZWRNb2RlbCB9IGZyb20gJy4vc3ZtJztcbmV4cG9ydCBjb25zdCBfcGFja2FnZSA9IG5ldyBERy5QYWNrYWdlKCk7XG4vL25hbWU6IGluZm9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKCkge1xuICAgIGdyb2suc2hlbGwuaW5mbyhfcGFja2FnZS53ZWJSb290KTtcbn1cbi8vdGFnczogaW5pdFxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX2luaXRFREFBUEkoKTtcbiAgICB9KTtcbn1cbi8vdG9wLW1lbnU6IFRvb2xzIHwgRGF0YSBTY2llbmNlIHwgUHJpbmNpcGFsIENvbXBvbmVudCBBbmFseXNpcy4uLlxuLy9uYW1lOiBQQ0Fcbi8vZGVzY3JpcHRpb246IFByaW5jaXBhbCBjb21wb25lbnQgYW5hbHlzaXMgKFBDQSkuXG4vL2lucHV0OiBkYXRhZnJhbWUgdGFibGVcbi8vaW5wdXQ6IGNvbHVtbl9saXN0IGZlYXR1cmVzIHt0eXBlOiBudW1lcmljYWx9XG4vL2lucHV0OiBpbnQgY29tcG9uZW50cyA9IDJcbi8vaW5wdXQ6IGJvb2wgY2VudGVyID0gdHJ1ZVxuLy9pbnB1dDogYm9vbCBzY2FsZSA9IHRydWVcbi8vb3V0cHV0OiBkYXRhZnJhbWUgcmVzdWx0IHthY3Rpb246am9pbih0YWJsZSl9XG5leHBvcnQgZnVuY3Rpb24gUENBKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyLCBzY2FsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiByZW5hbWVQQ0Fjb2x1bW5zKHlpZWxkIGNvbXB1dGVQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBNTCB8IE11bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKS4uLlxuLy9uYW1lOiBNdWx0aXZhcmlhdGUgQW5hbHlzaXMgKFBMUylcbi8vZGVzY3JpcHRpb246IE11bHRpZGltZW5zaW9uYWwgZGF0YSBhbmFseXNpcyB1c2luZyBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbi4gSXQgcmVkdWNlcyB0aGUgcHJlZGljdG9ycyB0byBhIHNtYWxsZXIgc2V0IG9mIHVuY29ycmVsYXRlZCBjb21wb25lbnRzIGFuZCBwZXJmb3JtcyBsZWFzdCBzcXVhcmVzIHJlZ3Jlc3Npb24gb24gdGhlbS5cbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uIG5hbWVzXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlcyB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogY29sdW1uIHByZWRpY3Qge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gM1xuZXhwb3J0IGZ1bmN0aW9uIFBMUyh0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcGxzUmVzdWx0cyA9IHlpZWxkIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKTtcbiAgICAgICAgYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBwbHNSZXN1bHRzKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogTVZBIGRlbW9cbi8vZGVzY3JpcHRpb246IE11bHRpZGltZW5zaW9uYWwgZGF0YSBhbmFseXNpcyB1c2luZyBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbi4gSXQgcmVkdWNlcyB0aGUgcHJlZGljdG9ycyB0byBhIHNtYWxsZXIgc2V0IG9mIHVuY29ycmVsYXRlZCBjb21wb25lbnRzIGFuZCBwZXJmb3JtcyBsZWFzdCBzcXVhcmVzIHJlZ3Jlc3Npb24gb24gdGhlbS5cbi8vbWV0YS5kZW1vUGF0aDogQ29tcHV0ZSB8IE11bHRpdmFyaWF0ZSBhbmFseXNpc1xuLy9tZXRhLmlzRGVtb1NjcmlwdDogVHJ1ZVxuZXhwb3J0IGZ1bmN0aW9uIGRlbW9NdWx0aXZhcmlhdGVBbmFseXNpcygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZW1vU2NyaXB0ID0gbmV3IERlbW9TY3JpcHQoJ1BhcnRpYWwgbGVhc3Qgc3F1YXJlcyByZWdyZXNzaW9uJywgJ0FuYWx5c2lzIG9mIG11bHRpZGltZW5zaW9uYWwgZGF0YS4nKTtcbiAgICAgICAgY29uc3QgY2FycyA9IGNhcnNEYXRhZnJhbWUoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IDM7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gY2Fycy5jb2x1bW5zLmJ5TmFtZSgnbW9kZWwnKTtcbiAgICAgICAgY29uc3QgcHJlZGljdCA9IGNhcnMuY29sdW1ucy5ieU5hbWUoJ3ByaWNlJyk7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gY2Fycy5jb2x1bW5zLnJlbW92ZSgncHJpY2UnKS5yZW1vdmUoJ21vZGVsJyk7XG4gICAgICAgIGNvbnN0IHBsc091dHB1dCA9IHlpZWxkIGNvbXB1dGVQTFMoY2FycywgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBzb3VyY2VDYXJzID0gY2Fyc0RhdGFmcmFtZSgpO1xuICAgICAgICBzb3VyY2VDYXJzLm5hbWUgPSAnQ2Fycyc7XG4gICAgICAgIGxldCB2aWV3O1xuICAgICAgICBsZXQgZGlhbG9nO1xuICAgICAgICB5aWVsZCBkZW1vU2NyaXB0XG4gICAgICAgICAgICAuc3RlcCgnRGF0YScsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNvdXJjZUNhcnMpO1xuICAgICAgICAgICAgdmlldyA9IGdyb2suc2hlbGwuZ2V0VGFibGVWaWV3KHNvdXJjZUNhcnMubmFtZSk7XG4gICAgICAgIH0pLCB7IGRlc2NyaXB0aW9uOiAnRWFjaCBjYXIgaGFzIG1hbnkgZmVhdHVyZXMgLSBwYXR0ZXJucyBleHRyYWN0aW9uIGlzIGNvbXBsaWNhdGVkLicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnTW9kZWwnLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBkaWFsb2cgPSB1aS5kaWFsb2coeyB0aXRsZTogJ011bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKScgfSlcbiAgICAgICAgICAgICAgICAuYWRkKHVpLnRhYmxlSW5wdXQoJ1RhYmxlJywgc291cmNlQ2FycykpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5zSW5wdXQoJ0ZlYXR1cmVzJywgY2FycywgZmVhdHVyZXMudG9MaXN0LCB7IGF2YWlsYWJsZTogdW5kZWZpbmVkLCBjaGVja2VkOiBmZWF0dXJlcy5uYW1lcygpIH0pKVxuICAgICAgICAgICAgICAgIC5hZGQodWkuY29sdW1uSW5wdXQoJ05hbWVzJywgY2FycywgbmFtZXMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5JbnB1dCgnUHJlZGljdCcsIGNhcnMsIHByZWRpY3QsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5pbnRJbnB1dCgnQ29tcG9uZW50cycsIGNvbXBvbmVudHMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLm9uT0soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuaW5mbygnTXVsdGl2YXJpYXRlIGFuYWx5c2lzIGhhcyBiZWVuIGFscmVhZHkgcGVyZm9ybWVkLicpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc2hvdyh7IHg6IDQwMCwgeTogMTQwIH0pO1xuICAgICAgICB9KSwgeyBkZXNjcmlwdGlvbjogJ1ByZWRpY3QgY2FyIHByaWNlIGJ5IGl0cyBvdGhlciBmZWF0dXJlcy4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1JlZ3Jlc3Npb24gY29lZmZjaWNpZW50cycsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAgICAgfSksIHsgZGVzY3JpcHRpb246ICdUaGUgZmVhdHVyZSBcImRpZXNlbFwiIGFmZmVjdHMgdGhlIHByaWNlIHRoZSBtb3N0LicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnU2NvcmVzJywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB2aWV3LmFkZFZpZXdlcihzY29yZXNTY2F0dGVyUGxvdChuYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTsgfSksIHsgZGVzY3JpcHRpb246ICdTaW1pbGFyaXRpZXMgJiBkaXNzaW1pbGFyaXRpZXM6IGFsZmFyb21lbyBhbmQgbWVyY2VkZXMgYXJlIGRpZmZlcmVudC4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1ByZWRpY3Rpb24nLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KG5hbWVzLCBwcmVkaWN0LCBwbHNPdXRwdXRbMF0pKTsgfSksIHsgZGVzY3JpcHRpb246ICdDbG9zZXIgdG8gdGhlIGxpbmUgbWVhbnMgYmV0dGVyIHByaWNlIHByZWRpY3Rpb24uJywgZGVsYXk6IDAgfSlcbiAgICAgICAgICAgIC5zdGFydCgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZW5lcmF0ZSBsaW5lYXIgc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnMuXG4vL2lucHV0OiBzdHJpbmcgbmFtZSA9ICdEYXRhJyB7Y2FwdGlvbjogbmFtZTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL2lucHV0OiBpbnQgc2FtcGxlc0NvdW50ID0gMTAwMCB7Y2FwdGlvbjogc2FtcGxlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBpbnQgZmVhdHVyZXNDb3VudCA9IDIge2NhcHRpb246IGZlYXR1cmVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGRvdWJsZSBtaW4gPSAtMzkge2NhcHRpb246IG1pbjsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIG1heCA9IDE3MyB7Y2FwdGlvbjogbWF4OyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgdmlvbGF0b3JzUGVyY2VudGFnZSA9IDUge2NhcHRpb246IHZpb2xhdG9yczsgdW5pdHM6ICU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhTGluZWFyU2VwYXJhYmxlKG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihMSU5FQVIsIFswLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IEdlbmVyYXRlIGxpbmVhciBub24tc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgbm9uLXNlcGFyYmxlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpY2F0b3JzLlxuLy9pbnB1dDogc3RyaW5nIG5hbWUgPSAnRGF0YScge2NhcHRpb246IG5hbWU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9pbnB1dDogZG91YmxlIHNpZ21hID0gOTAgIHtjYXB0aW9uOiBzaWdtYTsgY2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc30gW1JCRi1rZXJuZWwgcGFyYW1hdGVyXVxuLy9pbnB1dDogaW50IHNhbXBsZXNDb3VudCA9IDEwMDAge2NhcHRpb246IHNhbXBsZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogaW50IGZlYXR1cmVzQ291bnQgPSAyIHtjYXB0aW9uOiBmZWF0dXJlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBkb3VibGUgbWluID0gLTM5IHtjYXB0aW9uOiBtaW47IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSBtYXggPSAxNzMge2NhcHRpb246IG1heDsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIHZpb2xhdG9yc1BlcmNlbnRhZ2UgPSA1IHtjYXB0aW9uOiB2aW9sYXRvcnM7IHVuaXRzOiAlOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vb3V0cHV0OiBkYXRhZnJhbWUgZGZcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUxpbmVhck5vblNlcGFyYWJsZShuYW1lLCBzaWdtYSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKFJCRiwgW3NpZ21hLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluTGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5MaW5lYXJLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IExJTkVBUiB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlMaW5lYXJLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IGxpbmVhciBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaW5lYXJLZXJuZWxTVk0oZGYsIG1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGdldFByZWRpY3Rpb24oZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5SQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDEuNSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGJvb2wgdG9TaG93UmVwb3J0ID0gZmFsc2Uge2NhcHRpb246IHRvIHNob3cgcmVwb3J0OyBjYXRlZ29yeTogUmVwb3J0fVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblJCRmtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBzaWdtYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IFJCRiwgc2lnbWE6IHNpZ21hIH0sIGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGlmICh0b1Nob3dSZXBvcnQpXG4gICAgICAgICAgICBzaG93VHJhaW5SZXBvcnQoZGYsIHRyYWluZWRNb2RlbCk7XG4gICAgICAgIHJldHVybiBnZXRQYWNrZWRNb2RlbCh0cmFpbmVkTW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBhcHBseVJCRmtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogUkJGLWtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGFwcGx5XG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGR5bmFtaWMgbW9kZWxcbi8vb3V0cHV0OiBkYXRhZnJhbWUgdGFibGVcbmV4cG9ydCBmdW5jdGlvbiBhcHBseVJCRmtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpblBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgYyA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgZCA9IDIge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbiwgZ2FtbWEsIGMsIGQsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBQT0xZTk9NSUFMLCBjUGFyYW06IGMsIGRQYXJhbTogZCB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogcG9seW5vbWlhbCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBrYXBwYSA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgdGhldGEgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluU2lnbW9pZEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBrYXBwYSwgdGhldGEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBTSUdNT0lELCBrYXBwYToga2FwcGEsIHRoZXRhOiB0aGV0YSB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5TaWdtb2lkS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5U2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTaWdtb2lkS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnIiwiZ2xvYmFsVGhpcyIsInRoaXMiLCJGdW5jdGlvbiIsImUiLCJ3aW5kb3ciLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJpIiwiRXJyb3IiLCJyZXBsYWNlIiwicCIsImIiLCJiYXNlVVJJIiwic2VsZiIsImhyZWYiLCJncm9rIiwidWkiLCJERyIsImFzc3VyZSIsImRlbGF5IiwibXMiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiUCIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm5vdE51bGwiLCJuYW1lIiwiRGVtb1NjcmlwdCIsImNvbnN0cnVjdG9yIiwiZGVzY3JpcHRpb24iLCJpc0F1dG9tYXRpYyIsIm9wdGlvbnMiLCJfYSIsIl9pc0F1dG9tYXRpYyIsIl9hdXRvU3RhcnRGaXJzdFN0ZXAiLCJfY3VycmVudFN0ZXAiLCJfaXNTdG9wcGVkIiwiX2lzQ2FuY2VsbGVkIiwiX2lzU3RlcFByb2Nlc3NlZCIsIl9yb290IiwiaWQiLCJjbGFzc2VzIiwiX3N0ZXBzIiwiX21haW5IZWFkZXIiLCJfaGVhZGVyIiwiX2hlYWRlckRpdiIsIl9zdG9wU3RhcnRCdG4iLCJfY2hhbmdlU3RvcFN0YXRlIiwiX3Jlc3RhcnRCdG4iLCJfcmVzdGFydFNjcmlwdCIsIl9uZXh0U3RlcEJ0biIsIl9uZXh0U3RlcCIsIl9hY3Rpdml0eSIsIl9wcm9ncmVzc0RpdiIsIl9wcm9ncmVzcyIsIl9wcm9ncmVzc1N0ZXBzIiwiX2Nsb3NlQnRuIiwiX2Nsb3NlRG9jayIsImF1dG9TdGFydEZpcnN0U3RlcCIsIm1heCIsImN1cnJlbnRPYmplY3QiLCJzdGVwcyIsInN0ZXBOdW1iZXIiLCJfYWRkSGVhZGVyIiwiX2NyZWF0ZUhlYWRlckRpdiIsIl9jcmVhdGVQcm9ncmVzc0RpdiIsImFwcGVuZCIsImlubmVyVGV4dCIsImZpcnN0Q2hpbGQiLCJjbGFzc05hbWUiLCJfYWRkRGVzY3JpcHRpb24iLCJpbnN0cnVjdGlvbkluZGljYXRvciIsImluc3RydWN0aW9uRGl2IiwiY3VycmVudFN0ZXBEZXNjcmlwdGlvbiIsImVudHJ5IiwiX2luaXRSb290IiwiX2IiLCJfYyIsInNjcmlwdERvY2tOb2RlIiwiQXJyYXkiLCJmcm9tIiwiX25vZGUiLCJwYXJlbnQiLCJjb250YWluZXIiLCJjb250YWluZXJFbGVtZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJyZW1vdmUiLCJhZGQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiZW50cnlJbmRpY2F0b3IiLCJlbnRyeUluc3RydWN0aW9uIiwiY3VycmVudFN0ZXAiLCJzdGVwRGVsYXkiLCJmdW5jIiwiX3Njcm9sbFRvIiwib2Zmc2V0VG9wIiwib2Zmc2V0SGVpZ2h0IiwiX2NvdW50ZG93biIsIm5ld0VudHJ5SW5kaWNhdG9yIiwicmVwbGFjZVdpdGgiLCJuZXh0U3RlcEVudHJ5SW5kaWNhdG9yIiwic3RhcnROZXh0U3RlcEljb24iLCJfc3RhcnRTY3JpcHQiLCJlbGVtZW50IiwieSIsImZvY3VzIiwic2Nyb2xsVG9wIiwiaW5kaWNhdG9yIiwidGltZSIsImNvdW50ZG93bkRpdiIsImNvdW50ZG93biIsInN2ZyIsIl9jcmVhdGVTVkdJbmRpY2F0b3IiLCJwcmVwZW5kIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjcmVhdGVFbGVtZW50TlMiLCJjaXJjbGUiLCJzZXRBdHRyaWJ1dGVOUyIsImljb24iLCJfY2xlYXJSb290IiwiX3NldEluaXRQYXJhbXMiLCJzdGFydCIsImNhbmNlbFNjcmlwdCIsIkludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJDb2x1bW4iLCJmcm9tSW50MzJBcnJheSIsImZyb21GbG9hdDMyQXJyYXkiLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwiYXJnIiwidHlwZSIsImRhdGEiLCJhcnJheSIsImNvbCIsImdldFJhd0RhdGEiLCJ2YWwiLCJhcnJheXMiLCJ0b0xpc3QiLCJwdXNoIiwidmFsMSIsInZhbDIiLCJmdW5jU3BlY2lmaWNhdGlvbiIsImRhdGFGcm9tV2ViV29ya2VyIiwiYXJndW1lbnRzIiwiX2NhbGxSZXN1bHQiLCJjYWxsUmVzdWx0IiwiZnVuY1NwZWNpZmljYXRpb25BcmdzIiwiYXJnc0FmdGVyV2FzbUNhbGwiLCJ0eXBlVG9Db2x1bW5DcmVhdG9yTWFwIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJuYW1lcyIsImNvbHVtbiIsImNvbHVtbnMiLCJrIiwiaiIsImV4dHJhY3ROZXdseUNyZWF0ZWREYXRhIiwiYXJncyIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsIkRhdGFGcmFtZSIsImZyb21Db2x1bW5zIiwiYXJyYXlUb1JldHVybiIsImdldE91dHB1dCIsImNsZWFyTmV3bHlDcmVhdGVkRGF0YSIsIkNPTVBfTUlOIiwiU0FNUExFU19DT1VOVF9NSU4iLCJGRUFUVVJFU19DT1VOVF9NSU4iLCJQRVJDRU5UQUdFX01JTiIsIlBFUkNFTlRBR0VfTUFYIiwiTUFYX0VMRU1FTlRTX0NPVU5UIiwiQ09NUF9QT1NJVFZFX01FUyIsIkNPTVBfRVhDRVNTIiwiSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMiLCJJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMiLCJJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyIsIklOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTIiwiREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTIiwiY2hlY2tDb21wb25lbmV0cyIsImZlYXR1cmVzIiwiY29tcG9uZW50cyIsImJ5SW5kZXgiLCJjb21wdXRlUExTIiwidGFibGUiLCJwcmVkaWN0IiwiX291dHB1dCIsIl9wcm9taXNlIiwiYXN5bmMiLCJjb21wb25lbnRzQ291bnQiLCJ3b3JrZXIiLCJXb3JrZXIiLCJVUkwiLCJwb3N0TWVzc2FnZSIsIkVEQSIsIm9ubWVzc2FnZSIsInRlcm1pbmF0ZSIsIl9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIiLCJfcmVzdWx0IiwiX2Vycm9yIiwicHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3QiLCJzYW1wbGVzTmFtZXMiLCJyZWZlcmVuY2UiLCJwcmVkaWN0aW9uIiwiZGZSZWZlcmVuY2VQcmVkaWN0aW9uIiwidGl0bGUiLCJ4Iiwic2hvd1JlZ3Jlc3Npb25MaW5lIiwibWFya2VyVHlwZSIsImxhYmVscyIsInJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydCIsInJlZ3Jlc3Npb25Db2VmZnMiLCJuYW1lc09mUHJlZGljdG9ycyIsInByZWRpY3Rvck5hbWVzQ29sdW1uIiwiZGZSZWdyQ29lZnMiLCJzcGxpdCIsInZhbHVlQWdnclR5cGUiLCJzY29yZXNTY2F0dGVyUGxvdCIsInhTY29yZXMiLCJ5U2NvcmVzIiwic2NvcmVzQ29sdW1ucyIsInNjb3JlcyIsImluZGV4IiwiU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCIsIlNWTV9HRU5fTEFCRUxTX0lOREVYIiwiU1ZNX0ZFQVRVUkVfTkFNRSIsIlNWTV9MQUJFTF9OQU1FIiwiY2Fyc0RhdGFmcmFtZSIsInRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24iLCJrZXJuZWwiLCJrZXJuZWxQYXJhbXMiLCJzYW1wbGVzQ291bnQiLCJmZWF0dXJlc0NvdW50IiwibWluIiwidmlvbGF0b3JzUGVyY2VudGFnZSIsImNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzIiwia2VybmVsUGFyYW1zQ29sIiwiX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIiwiZGYiLCJMSU5FQVIiLCJQT0xZTk9NSUFMIiwiUkJGIiwiU0lHTU9JRCIsIkNPTkZVU0lPTl9NQVRSX1NJWkUiLCJOT1JNQUxJWkVEX0RBVEFfSU5ERVgiLCJNRUFOU19JTkRFWCIsIlNURF9ERVZTX0lOREVYIiwiTU9ERUxfUEFSQU1TX0lOREVYIiwiTU9ERUxfV0VJR0hUU19JTkRFWCIsIlBSRURJQ1RFRF9MQUJFTFNfSU5ERVgiLCJDT1JSRUNUTkVTU19JTkRFWCIsIkNPTkZVU0lPTl9NQVRSSVhfSU5ERVgiLCJUUlVFX1BPU0lUSVZFX0lOREVYIiwiRkFMU0VfTkVHQVRJVkVfSU5ERVgiLCJGQUxTRV9QT1NJVElWRV9JTkRFWCIsIlRSVUVfTkVHQVRJVkVfSU5ERVgiLCJSQkZfU0lHTUFfSU5ERVgiLCJQT0xZTk9NSUFMX0NfSU5ERVgiLCJQT0xZTk9NSUFMX0RfSU5ERVgiLCJTSUdNT0lEX0tBUFBBX0lOREVYIiwiU0lHTU9JRF9USEVUQV9JTkRFWCIsIkdBTU1BX0lORklNVU1fTElNSVQiLCJSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVCIsIlBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUIiwiUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQiLCJXUk9OR19HQU1NQV9NRVNTQUdFIiwiV1JPTkdfUkJGX1NJR01BX01FU1NBR0UiLCJXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSIsIldST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFIiwiV1JPTkdfS0VSTkVMX01FU1NBR0UiLCJMQUJFTFMiLCJQUkVESUNURUQiLCJDT1JSRUNUTkVTUyIsIkNPTkZVU0lPTl9NQVRSSVhfTkFNRSIsIk1FQU4iLCJTVERfREVWIiwiTU9ERUxfUEFSQU1TX05BTUUiLCJNT0RFTF9XRUlHSFRTX05BTUUiLCJHQU1NQSIsIktFUk5FTCIsIktFUk5FTF9QQVJBTVMiLCJLRVJORUxfUEFSQU1fMSIsIktFUk5FTF9QQVJBTV8yIiwiRkVBVFVSRVNfQ09VTlRfTkFNRSIsIlRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSIsIlRSQUlOX0VSUk9SIiwiS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVAiLCJQT1NJVElWRV9OQU1FIiwiTkVHQVRJVkVfTkFNRSIsIlBSRURJQ1RFRF9QT1NJVElWRV9OQU1FIiwiUFJFRElDVEVEX05FR0FUSVZFX05BTUUiLCJTRU5TSVRJVklUWSIsIlNQRUNJRklDSVRZIiwiQkFMQU5DRURfQUNDVVJBQ1kiLCJQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFIiwiTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSIsIk1MX1JFUE9SVCIsIk1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTIiwiTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyIsIk1MX1JFUE9SVF9DT1JSRUNUTkVTUyIsIlBSRURJQ1RJT04iLCJCWVRFUyIsIklOVFNfQ09VTlQiLCJLRVJfUEFSQU1TX0NPVU5UIiwiTU9ERUxfS0VSTkVMX0lOREVYIiwiU0FNUExFU19DT1VOVF9JTkRFWCIsIkZFQVRVUkVTX0NPVU5UX0lOREVYIiwiSU5JVF9WQUxVRSIsIkxTX1NWTV9BRERfQ09OU1QiLCJnZXRUcmFpbmVkTW9kZWwiLCJoeXBlcnBhcmFtZXRlcnMiLCJwcmVkaWN0X2NvbHVtbiIsImJ5TmFtZSIsImRhdGFzZXQiLCJnYW1tYSIsInNpZ21hIiwiY1BhcmFtIiwiZFBhcmFtIiwiY2hlY2tIeXBlcnBhcmFtZXRlcnMiLCJrZXJuZWxQYXJhbXNBcnJheSIsImthcHBhIiwidGhldGEiLCJ0cmFpbkNvbHMiLCJtb2RlbFBhcmFtc0NvdW50IiwicHJlY29tcHV0ZWRXZWlnaHRzQ291bnQiLCJjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50IiwiX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIiLCJtb2RlbCIsInRyYWluR2FtbWEiLCJrZXJuZWxUeXBlIiwidHJhaW5MYWJlbHMiLCJub3JtYWxpemVkVHJhaW5EYXRhIiwibWVhbnMiLCJzdGREZXZzIiwibW9kZWxQYXJhbXMiLCJtb2RlbFdlaWdodHMiLCJwcmVkaWN0ZWRMYWJlbHMiLCJjb3JyZWN0bmVzcyIsImNvbmZ1c2lvbk1hdHJpeCIsInRyYWluRXJyb3IiLCJ0cmFpblNhbXBsZXNDb3VudCIsIlRQIiwiVE4iLCJGUCIsIkZOIiwiTiIsIlRQUiIsIlROUiIsIlBQViIsIk5QViIsIkFDQyIsIkJBIiwic2Vuc2l0aXZpdHkiLCJzcGVjaWZpY2l0eSIsImJhbGFuY2VkQWNjdXJhY3kiLCJwb3NpdGl2ZVByZWRpY2l0dmVWYWx1ZSIsIm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlIiwiZXZhbHVhdGVBY2N1cmFjeSIsInRyYWluQW5kQW5hbHl6ZU1vZGVsIiwic2hvd1RyYWluUmVwb3J0IiwiZGZWaWV3IiwiYWRkVmlld2VyIiwiZ2V0TW9kZWxJbmZvIiwiY29sb3IiLCJnZXRDb25mdXNpb25NYXRyaXhERiIsImdldFBhY2tlZE1vZGVsIiwiZGF0YUNvbHMiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwib2Zmc2V0IiwiaW50cyIsImZsb2F0cyIsInNldCIsImdldFByZWRpY3Rpb24iLCJwYWNrZWRNb2RlbCIsIm1vZGVsQnl0ZXMiLCJoZWFkZXIiLCJnZXRVbnBhY2tlZE1vZGVsIiwicmVzIiwibm9ybWFsaXplZERhdGEiLCJwcmVjb21wdXRlZFdlaWdodHMiLCJ0YXJnZXREYXRhIiwiX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIiLCJfcGFja2FnZSIsImluZm8iLCJ3ZWJSb290IiwiaW5pdCIsImluaXRFREEiLCJfaW5pdEVEQUFQSSIsIlBDQSIsImNlbnRlciIsInNjYWxlIiwicGNhVGFibGUiLCJyZW5hbWVQQ0Fjb2x1bW5zIiwiY2VudGVyTnVtIiwic2NhbGVOdW0iLCJfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciIsImNvbXB1dGVQQ0EiLCJQTFMiLCJwbHNSZXN1bHRzIiwicGxzT3V0cHV0IiwidmlldyIsInhMb2FkaW5ncyIsImxvYWRpbmdDb2xzIiwibG9hZGluZ0xhYmVscyIsImRmTG9hZGluZ3MiLCJsb2FkaW5nU2NhdHRlclBsb3QiLCJhZGRQTFN2aXN1YWxpemF0aW9uIiwiZGVtb011bHRpdmFyaWF0ZUFuYWx5c2lzIiwiZGVtb1NjcmlwdCIsImNhcnMiLCJzb3VyY2VDYXJzIiwiZGlhbG9nIiwiYXZhaWxhYmxlIiwiY2hlY2tlZCIsIm9uT0siLCJzaG93IiwiY2xvc2UiLCJ0ZXN0RGF0YUxpbmVhclNlcGFyYWJsZSIsInRlc3REYXRhTGluZWFyTm9uU2VwYXJhYmxlIiwidHJhaW5MaW5lYXJLZXJuZWxTVk0iLCJ0b1Nob3dSZXBvcnQiLCJ0cmFpbmVkTW9kZWwiLCJhcHBseUxpbmVhcktlcm5lbFNWTSIsInRyYWluUkJGa2VybmVsU1ZNIiwiYXBwbHlSQkZrZXJuZWxTVk0iLCJ0cmFpblBvbHlub21pYWxLZXJuZWxTVk0iLCJjIiwiZCIsImFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTSIsInRyYWluU2lnbW9pZEtlcm5lbFNWTSIsImFwcGx5U2lnbW9pZEtlcm5lbFNWTSJdLCJzb3VyY2VSb290IjoiIn0=
|