@expo/serve-sim 0.1.50 → 0.1.51
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/dist/middleware.js +7 -7
- package/dist/native/serve-sim-native.node +0 -0
- package/dist/serve-sim.js +18 -18
- package/package.json +1 -1
package/dist/serve-sim.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as W7}from"node:module";var e5=Object.create;var{getPrototypeOf:$7,defineProperty:u$,getOwnPropertyNames:Q7}=Object;var Z7=Object.prototype.hasOwnProperty;function J7($){return this[$]}var Y7,X7,a8=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?Y7??=new WeakMap:X7??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?e5($7($)):{};let G=Q||!$||!$.__esModule?u$(Z,"default",{value:$,enumerable:!0}):Z;for(let W of Q7($))if(!Z7.call(G,W))u$(G,W,{get:J7.bind($,W),enumerable:!0});if(J)Y.set($,G);return G};var
|
|
2
|
+
import{createRequire as W7}from"node:module";var e5=Object.create;var{getPrototypeOf:$7,defineProperty:u$,getOwnPropertyNames:Q7}=Object;var Z7=Object.prototype.hasOwnProperty;function J7($){return this[$]}var Y7,X7,a8=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?Y7??=new WeakMap:X7??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?e5($7($)):{};let G=Q||!$||!$.__esModule?u$(Z,"default",{value:$,enumerable:!0}):Z;for(let W of Q7($))if(!Z7.call(G,W))u$(G,W,{get:J7.bind($,W),enumerable:!0});if(J)Y.set($,G);return G};var W0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports);var G7=($)=>$;function K7($,Q){this[$]=G7.bind(null,Q)}var r8=($,Q)=>{for(var Z in Q)u$($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:K7.bind(Q,Z)})};var d=($,Q)=>()=>($&&(Q=$($=0)),Q);var N0=W7(import.meta.url);var F4=W0((z7)=>{class m$ extends Error{constructor($,Q,Z){super(Z);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=Q,this.exitCode=$,this.nestedError=void 0}}class t8 extends m${constructor($){super(1,"commander.invalidArgument",$);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}z7.CommanderError=m$;z7.InvalidArgumentError=t8});var l4=W0((U7)=>{var{InvalidArgumentError:L7}=F4();class s8{constructor($,Q){switch(this.description=Q||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,$[0]){case"<":this.required=!0,this._name=$.slice(1,-1);break;case"[":this.required=!1,this._name=$.slice(1,-1);break;default:this.required=!0,this._name=$;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue($,Q){if(Q===this.defaultValue||!Array.isArray(Q))return[$];return Q.push($),Q}default($,Q){return this.defaultValue=$,this.defaultValueDescription=Q,this}argParser($){return this.parseArg=$,this}choices($){return this.argChoices=$.slice(),this.parseArg=(Q,Z)=>{if(!this.argChoices.includes(Q))throw new L7(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(Q,Z);return Q},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function M7($){let Q=$.name()+($.variadic===!0?"...":"");return $.required?"<"+Q+">":"["+Q+"]"}U7.Argument=s8;U7.humanReadableArgName=M7});var c$=W0((N7)=>{var{humanReadableArgName:R7}=l4();class e8{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext($){this.helpWidth=this.helpWidth??$.helpWidth??80}visibleCommands($){let Q=$.commands.filter((J)=>!J._hidden),Z=$._getHelpCommand();if(Z&&!Z._hidden)Q.push(Z);if(this.sortSubcommands)Q.sort((J,Y)=>{return J.name().localeCompare(Y.name())});return Q}compareOptions($,Q){let Z=(J)=>{return J.short?J.short.replace(/^-/,""):J.long.replace(/^--/,"")};return Z($).localeCompare(Z(Q))}visibleOptions($){let Q=$.options.filter((J)=>!J.hidden),Z=$._getHelpOption();if(Z&&!Z.hidden){let J=Z.short&&$._findOption(Z.short),Y=Z.long&&$._findOption(Z.long);if(!J&&!Y)Q.push(Z);else if(Z.long&&!Y)Q.push($.createOption(Z.long,Z.description));else if(Z.short&&!J)Q.push($.createOption(Z.short,Z.description))}if(this.sortOptions)Q.sort(this.compareOptions);return Q}visibleGlobalOptions($){if(!this.showGlobalOptions)return[];let Q=[];for(let Z=$.parent;Z;Z=Z.parent){let J=Z.options.filter((Y)=>!Y.hidden);Q.push(...J)}if(this.sortOptions)Q.sort(this.compareOptions);return Q}visibleArguments($){if($._argsDescription)$.registeredArguments.forEach((Q)=>{Q.description=Q.description||$._argsDescription[Q.name()]||""});if($.registeredArguments.find((Q)=>Q.description))return $.registeredArguments;return[]}subcommandTerm($){let Q=$.registeredArguments.map((Z)=>R7(Z)).join(" ");return $._name+($._aliases[0]?"|"+$._aliases[0]:"")+($.options.length?" [options]":"")+(Q?" "+Q:"")}optionTerm($){return $.flags}argumentTerm($){return $.name()}longestSubcommandTermLength($,Q){return Q.visibleCommands($).reduce((Z,J)=>{return Math.max(Z,this.displayWidth(Q.styleSubcommandTerm(Q.subcommandTerm(J))))},0)}longestOptionTermLength($,Q){return Q.visibleOptions($).reduce((Z,J)=>{return Math.max(Z,this.displayWidth(Q.styleOptionTerm(Q.optionTerm(J))))},0)}longestGlobalOptionTermLength($,Q){return Q.visibleGlobalOptions($).reduce((Z,J)=>{return Math.max(Z,this.displayWidth(Q.styleOptionTerm(Q.optionTerm(J))))},0)}longestArgumentTermLength($,Q){return Q.visibleArguments($).reduce((Z,J)=>{return Math.max(Z,this.displayWidth(Q.styleArgumentTerm(Q.argumentTerm(J))))},0)}commandUsage($){let Q=$._name;if($._aliases[0])Q=Q+"|"+$._aliases[0];let Z="";for(let J=$.parent;J;J=J.parent)Z=J.name()+" "+Z;return Z+Q+" "+$.usage()}commandDescription($){return $.description()}subcommandDescription($){return $.summary()||$.description()}optionDescription($){let Q=[];if($.argChoices)Q.push(`choices: ${$.argChoices.map((Z)=>JSON.stringify(Z)).join(", ")}`);if($.defaultValue!==void 0){if($.required||$.optional||$.isBoolean()&&typeof $.defaultValue==="boolean")Q.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`)}if($.presetArg!==void 0&&$.optional)Q.push(`preset: ${JSON.stringify($.presetArg)}`);if($.envVar!==void 0)Q.push(`env: ${$.envVar}`);if(Q.length>0){let Z=`(${Q.join(", ")})`;if($.description)return`${$.description} ${Z}`;return Z}return $.description}argumentDescription($){let Q=[];if($.argChoices)Q.push(`choices: ${$.argChoices.map((Z)=>JSON.stringify(Z)).join(", ")}`);if($.defaultValue!==void 0)Q.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`);if(Q.length>0){let Z=`(${Q.join(", ")})`;if($.description)return`${$.description} ${Z}`;return Z}return $.description}formatItemList($,Q,Z){if(Q.length===0)return[];return[Z.styleTitle($),...Q,""]}groupItems($,Q,Z){let J=new Map;return $.forEach((Y)=>{let X=Z(Y);if(!J.has(X))J.set(X,[])}),Q.forEach((Y)=>{let X=Z(Y);if(!J.has(X))J.set(X,[]);J.get(X).push(Y)}),J}formatHelp($,Q){let Z=Q.padWidth($,Q),J=Q.helpWidth??80;function Y(V,H){return Q.formatItem(V,Z,H,Q)}let X=[`${Q.styleTitle("Usage:")} ${Q.styleUsage(Q.commandUsage($))}`,""],G=Q.commandDescription($);if(G.length>0)X=X.concat([Q.boxWrap(Q.styleCommandDescription(G),J),""]);let W=Q.visibleArguments($).map((V)=>{return Y(Q.styleArgumentTerm(Q.argumentTerm(V)),Q.styleArgumentDescription(Q.argumentDescription(V)))});if(X=X.concat(this.formatItemList("Arguments:",W,Q)),this.groupItems($.options,Q.visibleOptions($),(V)=>V.helpGroupHeading??"Options:").forEach((V,H)=>{let B=V.map((N)=>{return Y(Q.styleOptionTerm(Q.optionTerm(N)),Q.styleOptionDescription(Q.optionDescription(N)))});X=X.concat(this.formatItemList(H,B,Q))}),Q.showGlobalOptions){let V=Q.visibleGlobalOptions($).map((H)=>{return Y(Q.styleOptionTerm(Q.optionTerm(H)),Q.styleOptionDescription(Q.optionDescription(H)))});X=X.concat(this.formatItemList("Global Options:",V,Q))}return this.groupItems($.commands,Q.visibleCommands($),(V)=>V.helpGroup()||"Commands:").forEach((V,H)=>{let B=V.map((N)=>{return Y(Q.styleSubcommandTerm(Q.subcommandTerm(N)),Q.styleSubcommandDescription(Q.subcommandDescription(N)))});X=X.concat(this.formatItemList(H,B,Q))}),X.join(`
|
|
3
3
|
`)}displayWidth($){return $9($).length}styleTitle($){return $}styleUsage($){return $.split(" ").map((Q)=>{if(Q==="[options]")return this.styleOptionText(Q);if(Q==="[command]")return this.styleSubcommandText(Q);if(Q[0]==="["||Q[0]==="<")return this.styleArgumentText(Q);return this.styleCommandText(Q)}).join(" ")}styleCommandDescription($){return this.styleDescriptionText($)}styleOptionDescription($){return this.styleDescriptionText($)}styleSubcommandDescription($){return this.styleDescriptionText($)}styleArgumentDescription($){return this.styleDescriptionText($)}styleDescriptionText($){return $}styleOptionTerm($){return this.styleOptionText($)}styleSubcommandTerm($){return $.split(" ").map((Q)=>{if(Q==="[options]")return this.styleOptionText(Q);if(Q[0]==="["||Q[0]==="<")return this.styleArgumentText(Q);return this.styleSubcommandText(Q)}).join(" ")}styleArgumentTerm($){return this.styleArgumentText($)}styleOptionText($){return $}styleArgumentText($){return $}styleSubcommandText($){return $}styleCommandText($){return $}padWidth($,Q){return Math.max(Q.longestOptionTermLength($,Q),Q.longestGlobalOptionTermLength($,Q),Q.longestSubcommandTermLength($,Q),Q.longestArgumentTermLength($,Q))}preformatted($){return/\n[^\S\r\n]/.test($)}formatItem($,Q,Z,J){let X=" ".repeat(2);if(!Z)return X+$;let G=$.padEnd(Q+$.length-J.displayWidth($)),W=2,z=(this.helpWidth??80)-Q-W-2,V;if(z<this.minWidthToWrap||J.preformatted(Z))V=Z;else V=J.boxWrap(Z,z).replace(/\n/g,`
|
|
4
4
|
`+" ".repeat(Q+W));return X+G+" ".repeat(W)+V.replace(/\n/g,`
|
|
5
5
|
${X}`)}boxWrap($,Q){if(Q<this.minWidthToWrap)return $;let Z=$.split(/\r\n|\n/),J=/[\s]*[^\s]+/g,Y=[];return Z.forEach((X)=>{let G=X.match(J);if(G===null){Y.push("");return}let W=[G.shift()],K=this.displayWidth(W[0]);G.forEach((z)=>{let V=this.displayWidth(z);if(K+V<=Q){W.push(z),K+=V;return}Y.push(W.join(""));let H=z.trimStart();W=[H],K=this.displayWidth(H)}),Y.push(W.join(""))}),Y.join(`
|
|
6
|
-
`)}}function $9($){let Q=/\x1b\[\d*(;\d*)*m/g;return $.replace(Q,"")}N7.Help=e8;N7.stripColor=$9});var p$=
|
|
6
|
+
`)}}function $9($){let Q=/\x1b\[\d*(;\d*)*m/g;return $.replace(Q,"")}N7.Help=e8;N7.stripColor=$9});var p$=W0((A7)=>{var{InvalidArgumentError:T7}=F4();class Z9{constructor($,Q){this.flags=$,this.description=Q||"",this.required=$.includes("<"),this.optional=$.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test($),this.mandatory=!1;let Z=O7($);if(this.short=Z.shortFlag,this.long=Z.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default($,Q){return this.defaultValue=$,this.defaultValueDescription=Q,this}preset($){return this.presetArg=$,this}conflicts($){return this.conflictsWith=this.conflictsWith.concat($),this}implies($){let Q=$;if(typeof $==="string")Q={[$]:!0};return this.implied=Object.assign(this.implied||{},Q),this}env($){return this.envVar=$,this}argParser($){return this.parseArg=$,this}makeOptionMandatory($=!0){return this.mandatory=!!$,this}hideHelp($=!0){return this.hidden=!!$,this}_collectValue($,Q){if(Q===this.defaultValue||!Array.isArray(Q))return[$];return Q.push($),Q}choices($){return this.argChoices=$.slice(),this.parseArg=(Q,Z)=>{if(!this.argChoices.includes(Q))throw new T7(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(Q,Z);return Q},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return Q9(this.name().replace(/^no-/,""));return Q9(this.name())}helpGroup($){return this.helpGroupHeading=$,this}is($){return this.short===$||this.long===$}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class J9{constructor($){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,$.forEach((Q)=>{if(Q.negate)this.negativeOptions.set(Q.attributeName(),Q);else this.positiveOptions.set(Q.attributeName(),Q)}),this.negativeOptions.forEach((Q,Z)=>{if(this.positiveOptions.has(Z))this.dualOptions.add(Z)})}valueFromOption($,Q){let Z=Q.attributeName();if(!this.dualOptions.has(Z))return!0;let J=this.negativeOptions.get(Z).presetArg,Y=J!==void 0?J:!1;return Q.negate===(Y===$)}}function Q9($){return $.split("-").reduce((Q,Z)=>{return Q+Z[0].toUpperCase()+Z.slice(1)})}function O7($){let Q,Z,J=/^-[^-]$/,Y=/^--[^-]/,X=$.split(/[ |,]+/).concat("guard");if(J.test(X[0]))Q=X.shift();if(Y.test(X[0]))Z=X.shift();if(!Q&&J.test(X[0]))Q=X.shift();if(!Q&&Y.test(X[0]))Q=Z,Z=X.shift();if(X[0].startsWith("-")){let G=X[0],W=`option creation failed due to '${G}' in option flags '${$}'`;if(/^-[^-][^-]/.test(G))throw Error(`${W}
|
|
7
7
|
- a short flag is a single dash and a single character
|
|
8
8
|
- either use a single dash and a single character (for a short flag)
|
|
9
9
|
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(J.test(G))throw Error(`${W}
|
|
10
10
|
- too many short flags`);if(Y.test(G))throw Error(`${W}
|
|
11
11
|
- too many long flags`);throw Error(`${W}
|
|
12
|
-
- unrecognised flag format`)}if(Q===void 0&&Z===void 0)throw Error(`option creation failed due to no flags found in '${$}'.`);return{shortFlag:Q,longFlag:Z}}A7.Option=Z9;A7.DualOptions=J9});var Y9=
|
|
12
|
+
- unrecognised flag format`)}if(Q===void 0&&Z===void 0)throw Error(`option creation failed due to no flags found in '${$}'.`);return{shortFlag:Q,longFlag:Z}}A7.Option=Z9;A7.DualOptions=J9});var Y9=W0((q7)=>{function C7($,Q){if(Math.abs($.length-Q.length)>3)return Math.max($.length,Q.length);let Z=[];for(let J=0;J<=$.length;J++)Z[J]=[J];for(let J=0;J<=Q.length;J++)Z[0][J]=J;for(let J=1;J<=Q.length;J++)for(let Y=1;Y<=$.length;Y++){let X=1;if($[Y-1]===Q[J-1])X=0;else X=1;if(Z[Y][J]=Math.min(Z[Y-1][J]+1,Z[Y][J-1]+1,Z[Y-1][J-1]+X),Y>1&&J>1&&$[Y-1]===Q[J-2]&&$[Y-2]===Q[J-1])Z[Y][J]=Math.min(Z[Y][J],Z[Y-2][J-2]+1)}return Z[$.length][Q.length]}function P7($,Q){if(!Q||Q.length===0)return"";Q=Array.from(new Set(Q));let Z=$.startsWith("--");if(Z)$=$.slice(2),Q=Q.map((G)=>G.slice(2));let J=[],Y=3,X=0.4;if(Q.forEach((G)=>{if(G.length<=1)return;let W=C7($,G),K=Math.max($.length,G.length);if((K-W)/K>X){if(W<Y)Y=W,J=[G];else if(W===Y)J.push(G)}}),J.sort((G,W)=>G.localeCompare(W)),Z)J=J.map((G)=>`--${G}`);if(J.length>1)return`
|
|
13
13
|
(Did you mean one of ${J.join(", ")}?)`;if(J.length===1)return`
|
|
14
|
-
(Did you mean ${J[0]}?)`;return""}q7.suggestSimilar=P7});var W9=
|
|
14
|
+
(Did you mean ${J[0]}?)`;return""}q7.suggestSimilar=P7});var W9=W0((b7)=>{var x7=N0("node:events").EventEmitter,l$=N0("node:child_process"),F0=N0("node:path"),n4=N0("node:fs"),m=N0("node:process"),{Argument:S7,humanReadableArgName:w7}=l4(),{CommanderError:n$}=F4(),{Help:k7,stripColor:y7}=c$(),{Option:X9,DualOptions:f7}=p$(),{suggestSimilar:G9}=Y9();class i$ extends x7{constructor($){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=$||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:(Q)=>m.stdout.write(Q),writeErr:(Q)=>m.stderr.write(Q),outputError:(Q,Z)=>Z(Q),getOutHelpWidth:()=>m.stdout.isTTY?m.stdout.columns:void 0,getErrHelpWidth:()=>m.stderr.isTTY?m.stderr.columns:void 0,getOutHasColors:()=>d$()??(m.stdout.isTTY&&m.stdout.hasColors?.()),getErrHasColors:()=>d$()??(m.stderr.isTTY&&m.stderr.hasColors?.()),stripColor:(Q)=>y7(Q)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings($){return this._outputConfiguration=$._outputConfiguration,this._helpOption=$._helpOption,this._helpCommand=$._helpCommand,this._helpConfiguration=$._helpConfiguration,this._exitCallback=$._exitCallback,this._storeOptionsAsProperties=$._storeOptionsAsProperties,this._combineFlagAndOptionalValue=$._combineFlagAndOptionalValue,this._allowExcessArguments=$._allowExcessArguments,this._enablePositionalOptions=$._enablePositionalOptions,this._showHelpAfterError=$._showHelpAfterError,this._showSuggestionAfterError=$._showSuggestionAfterError,this}_getCommandAndAncestors(){let $=[];for(let Q=this;Q;Q=Q.parent)$.push(Q);return $}command($,Q,Z){let J=Q,Y=Z;if(typeof J==="object"&&J!==null)Y=J,J=null;Y=Y||{};let[,X,G]=$.match(/([^ ]+) *(.*)/),W=this.createCommand(X);if(J)W.description(J),W._executableHandler=!0;if(Y.isDefault)this._defaultCommandName=W._name;if(W._hidden=!!(Y.noHelp||Y.hidden),W._executableFile=Y.executableFile||null,G)W.arguments(G);if(this._registerCommand(W),W.parent=this,W.copyInheritedSettings(this),J)return this;return W}createCommand($){return new i$($)}createHelp(){return Object.assign(new k7,this.configureHelp())}configureHelp($){if($===void 0)return this._helpConfiguration;return this._helpConfiguration=$,this}configureOutput($){if($===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...$},this}showHelpAfterError($=!0){if(typeof $!=="string")$=!!$;return this._showHelpAfterError=$,this}showSuggestionAfterError($=!0){return this._showSuggestionAfterError=!!$,this}addCommand($,Q){if(!$._name)throw Error(`Command passed to .addCommand() must have a name
|
|
15
15
|
- specify the name in Command constructor or using .name()`);if(Q=Q||{},Q.isDefault)this._defaultCommandName=$._name;if(Q.noHelp||Q.hidden)$._hidden=!0;return this._registerCommand($),$.parent=this,$._checkForBrokenPassThrough(),this}createArgument($,Q){return new S7($,Q)}argument($,Q,Z,J){let Y=this.createArgument($,Q);if(typeof Z==="function")Y.default(J).argParser(Z);else Y.default(Z);return this.addArgument(Y),this}arguments($){return $.trim().split(/ +/).forEach((Q)=>{this.argument(Q)}),this}addArgument($){let Q=this.registeredArguments.slice(-1)[0];if(Q?.variadic)throw Error(`only the last argument can be variadic '${Q.name()}'`);if($.required&&$.defaultValue!==void 0&&$.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${$.name()}'`);return this.registeredArguments.push($),this}helpCommand($,Q){if(typeof $==="boolean"){if(this._addImplicitHelpCommand=$,$&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let Z=$??"help [command]",[,J,Y]=Z.match(/([^ ]+) *(.*)/),X=Q??"display help for command",G=this.createCommand(J);if(G.helpOption(!1),Y)G.arguments(Y);if(X)G.description(X);if(this._addImplicitHelpCommand=!0,this._helpCommand=G,$||Q)this._initCommandGroup(G);return this}addHelpCommand($,Q){if(typeof $!=="object")return this.helpCommand($,Q),this;return this._addImplicitHelpCommand=!0,this._helpCommand=$,this._initCommandGroup($),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook($,Q){let Z=["preSubcommand","preAction","postAction"];if(!Z.includes($))throw Error(`Unexpected value for event passed to hook : '${$}'.
|
|
16
16
|
Expecting one of '${Z.join("', '")}'`);if(this._lifeCycleHooks[$])this._lifeCycleHooks[$].push(Q);else this._lifeCycleHooks[$]=[Q];return this}exitOverride($){if($)this._exitCallback=$;else this._exitCallback=(Q)=>{if(Q.code!=="commander.executeSubCommandAsync")throw Q};return this}_exit($,Q,Z){if(this._exitCallback)this._exitCallback(new n$($,Q,Z));m.exit($)}action($){let Q=(Z)=>{let J=this.registeredArguments.length,Y=Z.slice(0,J);if(this._storeOptionsAsProperties)Y[J]=this;else Y[J]=this.opts();return Y.push(this),$.apply(this,Y)};return this._actionHandler=Q,this}createOption($,Q){return new X9($,Q)}_callParseArg($,Q,Z,J){try{return $.parseArg(Q,Z)}catch(Y){if(Y.code==="commander.invalidArgument"){let X=`${J} ${Y.message}`;this.error(X,{exitCode:Y.exitCode,code:Y.code})}throw Y}}_registerOption($){let Q=$.short&&this._findOption($.short)||$.long&&this._findOption($.long);if(Q){let Z=$.long&&this._findOption($.long)?$.long:$.short;throw Error(`Cannot add option '${$.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${Z}'
|
|
17
17
|
- already used by option '${Q.flags}'`)}this._initOptionGroup($),this.options.push($)}_registerCommand($){let Q=(J)=>{return[J.name()].concat(J.aliases())},Z=Q($).find((J)=>this._findCommand(J));if(Z){let J=Q(this._findCommand(Z)).join("|"),Y=Q($).join("|");throw Error(`cannot add command '${Y}' as already have command '${J}'`)}this._initCommandGroup($),this.commands.push($)}addOption($){this._registerOption($);let Q=$.name(),Z=$.attributeName();if($.negate){let Y=$.long.replace(/^--no-/,"--");if(!this._findOption(Y))this.setOptionValueWithSource(Z,$.defaultValue===void 0?!0:$.defaultValue,"default")}else if($.defaultValue!==void 0)this.setOptionValueWithSource(Z,$.defaultValue,"default");let J=(Y,X,G)=>{if(Y==null&&$.presetArg!==void 0)Y=$.presetArg;let W=this.getOptionValue(Z);if(Y!==null&&$.parseArg)Y=this._callParseArg($,Y,W,X);else if(Y!==null&&$.variadic)Y=$._collectValue(Y,W);if(Y==null)if($.negate)Y=!1;else if($.isBoolean()||$.optional)Y=!0;else Y="";this.setOptionValueWithSource(Z,Y,G)};if(this.on("option:"+Q,(Y)=>{let X=`error: option '${$.flags}' argument '${Y}' is invalid.`;J(Y,X,"cli")}),$.envVar)this.on("optionEnv:"+Q,(Y)=>{let X=`error: option '${$.flags}' value '${Y}' from env '${$.envVar}' is invalid.`;J(Y,X,"env")});return this}_optionEx($,Q,Z,J,Y){if(typeof Q==="object"&&Q instanceof X9)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let X=this.createOption(Q,Z);if(X.makeOptionMandatory(!!$.mandatory),typeof J==="function")X.default(Y).argParser(J);else if(J instanceof RegExp){let G=J;J=(W,K)=>{let z=G.exec(W);return z?z[0]:K},X.default(Y).argParser(J)}else X.default(J);return this.addOption(X)}option($,Q,Z,J){return this._optionEx({},$,Q,Z,J)}requiredOption($,Q,Z,J){return this._optionEx({mandatory:!0},$,Q,Z,J)}combineFlagAndOptionalValue($=!0){return this._combineFlagAndOptionalValue=!!$,this}allowUnknownOption($=!0){return this._allowUnknownOption=!!$,this}allowExcessArguments($=!0){return this._allowExcessArguments=!!$,this}enablePositionalOptions($=!0){return this._enablePositionalOptions=!!$,this}passThroughOptions($=!0){return this._passThroughOptions=!!$,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties($=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!$,this}getOptionValue($){if(this._storeOptionsAsProperties)return this[$];return this._optionValues[$]}setOptionValue($,Q){return this.setOptionValueWithSource($,Q,void 0)}setOptionValueWithSource($,Q,Z){if(this._storeOptionsAsProperties)this[$]=Q;else this._optionValues[$]=Q;return this._optionValueSources[$]=Z,this}getOptionValueSource($){return this._optionValueSources[$]}getOptionValueSourceWithGlobals($){let Q;return this._getCommandAndAncestors().forEach((Z)=>{if(Z.getOptionValueSource($)!==void 0)Q=Z.getOptionValueSource($)}),Q}_prepareUserArgs($,Q){if($!==void 0&&!Array.isArray($))throw Error("first parameter to parse must be array or undefined");if(Q=Q||{},$===void 0&&Q.from===void 0){if(m.versions?.electron)Q.from="electron";let J=m.execArgv??[];if(J.includes("-e")||J.includes("--eval")||J.includes("-p")||J.includes("--print"))Q.from="eval"}if($===void 0)$=m.argv;this.rawArgs=$.slice();let Z;switch(Q.from){case void 0:case"node":this._scriptPath=$[1],Z=$.slice(2);break;case"electron":if(m.defaultApp)this._scriptPath=$[1],Z=$.slice(2);else Z=$.slice(1);break;case"user":Z=$.slice(0);break;case"eval":Z=$.slice(1);break;default:throw Error(`unexpected parse option { from: '${Q.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",Z}parse($,Q){this._prepareForParse();let Z=this._prepareUserArgs($,Q);return this._parseCommand([],Z),this}async parseAsync($,Q){this._prepareForParse();let Z=this._prepareUserArgs($,Q);return await this._parseCommand([],Z),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
@@ -24,7 +24,7 @@ Expecting one of '${Z.join("', '")}'`);if(this._lifeCycleHooks[$])this._lifeCycl
|
|
|
24
24
|
`),this.outputHelp({error:!0});let Z=Q||{},J=Z.exitCode||1,Y=Z.code||"commander.error";this._exit(J,Y,$)}_parseOptionsEnv(){this.options.forEach(($)=>{if($.envVar&&$.envVar in m.env){let Q=$.attributeName();if(this.getOptionValue(Q)===void 0||["default","config","env"].includes(this.getOptionValueSource(Q)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,m.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new f7(this.options),Q=(Z)=>{return this.getOptionValue(Z)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(Z))};this.options.filter((Z)=>Z.implied!==void 0&&Q(Z.attributeName())&&$.valueFromOption(this.getOptionValue(Z.attributeName()),Z)).forEach((Z)=>{Object.keys(Z.implied).filter((J)=>!Q(J)).forEach((J)=>{this.setOptionValueWithSource(J,Z.implied[J],"implied")})})}missingArgument($){let Q=`error: missing required argument '${$}'`;this.error(Q,{code:"commander.missingArgument"})}optionMissingArgument($){let Q=`error: option '${$.flags}' argument missing`;this.error(Q,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue($){let Q=`error: required option '${$.flags}' not specified`;this.error(Q,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption($,Q){let Z=(X)=>{let G=X.attributeName(),W=this.getOptionValue(G),K=this.options.find((V)=>V.negate&&G===V.attributeName()),z=this.options.find((V)=>!V.negate&&G===V.attributeName());if(K&&(K.presetArg===void 0&&W===!1||K.presetArg!==void 0&&W===K.presetArg))return K;return z||X},J=(X)=>{let G=Z(X),W=G.attributeName();if(this.getOptionValueSource(W)==="env")return`environment variable '${G.envVar}'`;return`option '${G.flags}'`},Y=`error: ${J($)} cannot be used with ${J(Q)}`;this.error(Y,{code:"commander.conflictingOption"})}unknownOption($){if(this._allowUnknownOption)return;let Q="";if($.startsWith("--")&&this._showSuggestionAfterError){let J=[],Y=this;do{let X=Y.createHelp().visibleOptions(Y).filter((G)=>G.long).map((G)=>G.long);J=J.concat(X),Y=Y.parent}while(Y&&!Y._enablePositionalOptions);Q=G9($,J)}let Z=`error: unknown option '${$}'${Q}`;this.error(Z,{code:"commander.unknownOption"})}_excessArguments($){if(this._allowExcessArguments)return;let Q=this.registeredArguments.length,Z=Q===1?"":"s",Y=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${Q} argument${Z} but got ${$.length}.`;this.error(Y,{code:"commander.excessArguments"})}unknownCommand(){let $=this.args[0],Q="";if(this._showSuggestionAfterError){let J=[];this.createHelp().visibleCommands(this).forEach((Y)=>{if(J.push(Y.name()),Y.alias())J.push(Y.alias())}),Q=G9($,J)}let Z=`error: unknown command '${$}'${Q}`;this.error(Z,{code:"commander.unknownCommand"})}version($,Q,Z){if($===void 0)return this._version;this._version=$,Q=Q||"-V, --version",Z=Z||"output the version number";let J=this.createOption(Q,Z);return this._versionOptionName=J.attributeName(),this._registerOption(J),this.on("option:"+J.name(),()=>{this._outputConfiguration.writeOut(`${$}
|
|
25
25
|
`),this._exit(0,"commander.version",$)}),this}description($,Q){if($===void 0&&Q===void 0)return this._description;if(this._description=$,Q)this._argsDescription=Q;return this}summary($){if($===void 0)return this._summary;return this._summary=$,this}alias($){if($===void 0)return this._aliases[0];let Q=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)Q=this.commands[this.commands.length-1];if($===Q._name)throw Error("Command alias can't be the same as its name");let Z=this.parent?._findCommand($);if(Z){let J=[Z.name()].concat(Z.aliases()).join("|");throw Error(`cannot add alias '${$}' to command '${this.name()}' as already have command '${J}'`)}return Q._aliases.push($),this}aliases($){if($===void 0)return this._aliases;return $.forEach((Q)=>this.alias(Q)),this}usage($){if($===void 0){if(this._usage)return this._usage;let Q=this.registeredArguments.map((Z)=>{return w7(Z)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?Q:[]).join(" ")}return this._usage=$,this}name($){if($===void 0)return this._name;return this._name=$,this}helpGroup($){if($===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=$,this}commandsGroup($){if($===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=$,this}optionsGroup($){if($===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=$,this}_initOptionGroup($){if(this._defaultOptionGroup&&!$.helpGroupHeading)$.helpGroup(this._defaultOptionGroup)}_initCommandGroup($){if(this._defaultCommandGroup&&!$.helpGroup())$.helpGroup(this._defaultCommandGroup)}nameFromFilename($){return this._name=F0.basename($,F0.extname($)),this}executableDir($){if($===void 0)return this._executableDir;return this._executableDir=$,this}helpInformation($){let Q=this.createHelp(),Z=this._getOutputContext($);Q.prepareContext({error:Z.error,helpWidth:Z.helpWidth,outputHasColors:Z.hasColors});let J=Q.formatHelp(this,Q);if(Z.hasColors)return J;return this._outputConfiguration.stripColor(J)}_getOutputContext($){$=$||{};let Q=!!$.error,Z,J,Y;if(Q)Z=(G)=>this._outputConfiguration.writeErr(G),J=this._outputConfiguration.getErrHasColors(),Y=this._outputConfiguration.getErrHelpWidth();else Z=(G)=>this._outputConfiguration.writeOut(G),J=this._outputConfiguration.getOutHasColors(),Y=this._outputConfiguration.getOutHelpWidth();return{error:Q,write:(G)=>{if(!J)G=this._outputConfiguration.stripColor(G);return Z(G)},hasColors:J,helpWidth:Y}}outputHelp($){let Q;if(typeof $==="function")Q=$,$=void 0;let Z=this._getOutputContext($),J={error:Z.error,write:Z.write,command:this};this._getCommandAndAncestors().reverse().forEach((X)=>X.emit("beforeAllHelp",J)),this.emit("beforeHelp",J);let Y=this.helpInformation({error:Z.error});if(Q){if(Y=Q(Y),typeof Y!=="string"&&!Buffer.isBuffer(Y))throw Error("outputHelp callback must return a string or a Buffer")}if(Z.write(Y),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",J),this._getCommandAndAncestors().forEach((X)=>X.emit("afterAllHelp",J))}helpOption($,Q){if(typeof $==="boolean"){if($){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption($??"-h, --help",Q??"display help for command"),$||Q)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption($){return this._helpOption=$,this._initOptionGroup($),this}help($){this.outputHelp($);let Q=Number(m.exitCode??0);if(Q===0&&$&&typeof $!=="function"&&$.error)Q=1;this._exit(Q,"commander.help","(outputHelp)")}addHelpText($,Q){let Z=["beforeAll","before","after","afterAll"];if(!Z.includes($))throw Error(`Unexpected value for position to addHelpText.
|
|
26
26
|
Expecting one of '${Z.join("', '")}'`);let J=`${$}Help`;return this.on(J,(Y)=>{let X;if(typeof Q==="function")X=Q({error:Y.error,command:Y.command});else X=Q;if(X)Y.write(`${X}
|
|
27
|
-
`)}),this}_outputHelpIfRequested($){let Q=this._getHelpOption();if(Q&&$.find((J)=>Q.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function K9($){return $.map((Q)=>{if(!Q.startsWith("--inspect"))return Q;let Z,J="127.0.0.1",Y="9229",X;if((X=Q.match(/^(--inspect(-brk)?)$/))!==null)Z=X[1];else if((X=Q.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(Z=X[1],/^\d+$/.test(X[3]))Y=X[3];else J=X[3];else if((X=Q.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)Z=X[1],J=X[3],Y=X[4];if(Z&&Y!=="0")return`${Z}=${J}:${parseInt(Y)+1}`;return Q})}function d$(){if(m.env.NO_COLOR||m.env.FORCE_COLOR==="0"||m.env.FORCE_COLOR==="false")return!1;if(m.env.FORCE_COLOR||m.env.CLICOLOR_FORCE!==void 0)return!0;return}b7.Command=i$;b7.useColor=d$});var L9=
|
|
27
|
+
`)}),this}_outputHelpIfRequested($){let Q=this._getHelpOption();if(Q&&$.find((J)=>Q.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function K9($){return $.map((Q)=>{if(!Q.startsWith("--inspect"))return Q;let Z,J="127.0.0.1",Y="9229",X;if((X=Q.match(/^(--inspect(-brk)?)$/))!==null)Z=X[1];else if((X=Q.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(Z=X[1],/^\d+$/.test(X[3]))Y=X[3];else J=X[3];else if((X=Q.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)Z=X[1],J=X[3],Y=X[4];if(Z&&Y!=="0")return`${Z}=${J}:${parseInt(Y)+1}`;return Q})}function d$(){if(m.env.NO_COLOR||m.env.FORCE_COLOR==="0"||m.env.FORCE_COLOR==="false")return!1;if(m.env.FORCE_COLOR||m.env.CLICOLOR_FORCE!==void 0)return!0;return}b7.Command=i$;b7.useColor=d$});var L9=W0((m7)=>{var{Argument:z9}=l4(),{Command:o$}=W9(),{CommanderError:g7,InvalidArgumentError:V9}=F4(),{Help:u7}=c$(),{Option:H9}=p$();m7.program=new o$;m7.createCommand=($)=>new o$($);m7.createOption=($,Q)=>new H9($,Q);m7.createArgument=($,Q)=>new z9($,Q);m7.Command=o$;m7.Option=H9;m7.Argument=z9;m7.Help=u7;m7.CommanderError=g7;m7.InvalidArgumentError=V9;m7.InvalidOptionArgumentError=V9});import{tmpdir as e7}from"os";import{join as d4}from"path";import{readdirSync as $Z,mkdirSync as QZ,writeFileSync as ZZ,renameSync as JZ}from"fs";function i4($){return d4(L0,`server-${$}.json`)}function Q4($,Q,Z="/",J="127.0.0.1",Y){let X=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,G=Z.replace(/^\/+/,"").replace(/\/+$/,""),W=G===""?"":`/${G}`;return{pid:process.pid,port:Q,device:$,url:`http://${X}:${Q}`,streamUrl:`http://${X}:${Q}${W}/helper/${$}/stream.mjpeg`,wsUrl:`ws://${X}:${Q}${W}/helper/${$}/ws`,...Y?{streamSettings:Y}:{}}}function o4($){QZ(L0,{recursive:!0});let Q=i4($.device),Z=`${Q}.${process.pid}.tmp`;ZZ(Z,JSON.stringify($,null,2),{mode:384}),JZ(Z,Q)}function a4(){try{return $Z(L0).filter(($)=>$.startsWith("server-")&&$.endsWith(".json")).map(($)=>d4(L0,$))}catch{return[]}}var L0,_K;var r4=d(()=>{L0=d4(e7(),"serve-sim"),_K=d4(L0,"server.json")});function N9($){let Q=new TextDecoder;if(typeof $==="string")return $;if($ instanceof ArrayBuffer)return Q.decode(new Uint8Array($));if(ArrayBuffer.isView($))return Q.decode(new Uint8Array($.buffer,$.byteOffset,$.byteLength));return String($)}function F9($){return $.headers.get("host")??new URL($.url).host}var R9=4194304;import{once as j9}from"events";import{Readable as GZ}from"stream";function a$($,Q){let Z=new Headers;for(let[W,K]of Object.entries($.headers))if(Array.isArray(K))for(let z of K)Z.append(W,z);else if(K!==void 0)Z.set(W,K);let J=Z.get("host")??"127.0.0.1",Y=new URL($.url??"/",`http://${J}`),X=new AbortController;Q?.on("close",()=>X.abort());let G={method:$.method,headers:Z,signal:X.signal};if($.method!=="GET"&&$.method!=="HEAD")G.body=GZ.toWeb($),G.duplex="half";return new Request(Y,G)}async function T9($,Q,Z){if(!Z){if(!Q.headersSent)Q.statusCode=404;Q.end("Not found");return}let J={};if(Z.headers.forEach((W,K)=>{J[K]=W}),Q.writeHead(Z.status,J),$.method==="HEAD"||!Z.body){Q.end();return}let Y=Z.body.getReader(),X=!1,G=()=>{X=!0,Y.cancel().catch(()=>{})};Q.once("close",G);try{while(!X){let{done:W,value:K}=await Y.read();if(W)break;if(!Q.write(Buffer.from(K))){if(await Promise.race([j9(Q,"drain"),j9(Q,"close")]),X||Q.destroyed)break}}if(!Q.destroyed)Q.end()}catch(W){if(!Q.destroyed)Q.destroy(W instanceof Error?W:void 0)}finally{Q.off("close",G),Y.releaseLock()}}var O9=()=>{};import{fileURLToPath as KZ}from"url";import{dirname as WZ}from"path";import{createServer as zZ}from"http";import{createConnection as VZ,createServer as A9}from"net";import{WebSocketServer as HZ}from"ws";function s4($){return WZ(KZ($))}function v0($){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,$)}async function D9($){return new Promise((Q)=>{let Z=A9();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($)})}function LZ($){let Q=$.indexOf(`\r
|
|
28
28
|
\r
|
|
29
29
|
`);if(Q===-1)return null;let Z=$.subarray(0,Q).toString("latin1").split(`\r
|
|
30
30
|
`),[J,Y,X]=(Z.shift()??"").split(" ");if(!J||!Y||!X?.startsWith("HTTP/"))return null;let G={};for(let W of Z){let K=W.indexOf(":");if(K===-1)continue;let z=W.slice(0,K).trim().toLowerCase(),V=W.slice(K+1).trim(),H=G[z];if(Array.isArray(H))H.push(V);else if(H!=null)G[z]=[H,V];else G[z]=V}return{method:J,url:Y,httpVersion:X.slice(5),headers:G,headEnd:Q+4}}function MZ($){let{upgrade:Q,connection:Z}=$,J=Array.isArray(Q)?Q.join(","):Q??"",Y=Array.isArray(Z)?Z.join(","):Z??"";return/websocket/i.test(J)&&/upgrade/i.test(Y)}function E9($){let Q=new URL($,"http://serve-sim.local").pathname;return Q==="/exec-ws"||Q.endsWith("/exec-ws")}function UZ($,Q,Z){let J=VZ(Z,"127.0.0.1"),Y=()=>{$.destroy(),J.destroy()};$.on("error",Y),J.on("error",Y),J.on("connect",()=>{J.write(Q),$.pipe(J),J.pipe($)})}function _Z($,Q){return A9((Z)=>{let J=Buffer.alloc(0),Y=(X)=>{if(J=Buffer.concat([J,X]),J.length>65536){Z.destroy();return}let G=LZ(J);if(!G)return;if(Z.removeListener("data",Y),$.handleUpgrade&&MZ(G.headers)&&!E9(G.url)){let W=J.subarray(G.headEnd),K={method:G.method,url:G.url,headers:G.headers,httpVersion:G.httpVersion,socket:Z};$.handleUpgrade(K,Z,W);return}UZ(Z,J,Q)};Z.on("data",Y),Z.on("error",()=>Z.destroy())})}async function C9($){let Q=!!process.versions.bun,Z=new HZ({noServer:!0,maxPayload:R9}),J=zZ({highWaterMark:5242880},(W,K)=>{(async()=>{let z=a$(W,K),V=await $.middleware(z);await T9(W,K,V)})().catch((z)=>{if(console.error("Middleware error:",z),K.headersSent){if(!K.destroyed)K.destroy(z instanceof Error?z:void 0);return}K.writeHead(500,{"Content-Type":"text/plain; charset=utf-8"}),K.end(z instanceof Error?z.message:"Internal Server Error")})});J.on("upgrade",(W,K,z)=>{let V=a$(W);if($.middleware.handleWebSocket&&E9(W.url??"")){Z.handleUpgrade(W,K,z,(H)=>{if(!$.middleware.handleWebSocket?.(V,H))H.close()});return}if($.middleware.handleUpgrade){$.middleware.handleUpgrade(W,K,z);return}K.destroy()}),J.keepAliveTimeout=0,J.headersTimeout=0,J.requestTimeout=0,J.timeout=0,await new Promise((W,K)=>{let z=(H)=>{J.removeListener("listening",V),K(H)},V=()=>{J.removeListener("error",z),W()};if(J.once("error",z),J.once("listening",V),Q)J.listen(0,"127.0.0.1");else J.listen($.port,$.host??"127.0.0.1")});let Y=J.address();if(!Y||typeof Y==="string")throw J.close(),Error("Failed to bind preview HTTP server");let X,G=Y.port;if(Q){let W=_Z($.middleware,Y.port);X=W,await new Promise((z,V)=>{let H=(N)=>{W.removeListener("listening",B),J.close(()=>V(N))},B=()=>{W.removeListener("error",H),z()};W.once("error",H),W.once("listening",B),W.listen($.port,$.host??"127.0.0.1")});let K=W.address();if(K&&typeof K!=="string")G=K.port}return{port:G,stop:()=>{Z.close(),J.close(),X?.close()}}}var e4=d(()=>{O9()});import{execSync as q9}from"child_process";function X0(){try{let $=q9("xcrun simctl list devices booted -j",{encoding:"utf-8"}),Q=JSON.parse($),Z=null;for(let[J,Y]of Object.entries(Q.devices))for(let X of Y){if(X.state!=="Booted")continue;if(/iOS/i.test(J))return X.udid;Z??=X.udid}return Z}catch{}return null}function t($){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($))return $;try{let Q=q9("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse(Q);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.name.toLowerCase()===$.toLowerCase())return Y.udid}catch{}console.error(`Could not resolve device: ${$}`),process.exit(1)}var $$=()=>{};import{execFile as uZ}from"child_process";import{existsSync as m9}from"fs";import{join as Z6,resolve as mZ}from"path";function Y6($,Q){let Z=j0[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(lZ.has(J))return"on";if(nZ.has(J))return"off";return null}let Y=Z.aliases?.[J]??J;if(Z.values.includes(Y))return Y;if(Z.extraValues?.includes(Y))return Y;return null}function dZ($){let Q=[],Z,J=!1;for(let G=0;G<$.length;G++){let W=$[G];if(W==="-d"||W==="--device"){if(G+1>=$.length)return{command:"get",json:J,error:`${W} requires a value`};Z=$[++G]}else if(W==="--json")J=!0;else Q.push(W)}if(Q.length===0||Q[0]==="status")return{command:"status",json:J,...Z?{device:Z}:{}};let Y=Q[0].toLowerCase();if(!j0[Y])return{command:"get",json:J,error:`unknown option: ${Y}`};if(Q.length===1)return{command:"get",option:Y,json:J,...Z?{device:Z}:{}};let X=Y6(Y,Q[1]);if(X===null){let G=j0[Y],W=[...G.values,...G.extraValues??[]].join("|");return{command:"set",option:Y,json:J,error:`invalid value for ${Y}: ${Q[1]} (accepted: ${W})`}}return{command:"set",option:Y,value:X,json:J,...Z?{device:Z}:{}}}function g9(){let $=[Z6(J6,"..","dist","simax","serve-sim-ax-settings"),Z6(J6,"simax","serve-sim-ax-settings")];for(let Q of $)if(m9(Q))return mZ(Q);return null}function iZ(){return Q$??=(async()=>{let $=g9();if($)return $;let Q=Z6(J6,"..","Sources","SimAXSettings","build.sh");if(!m9(Q))throw Error("sim-ax-settings binary not found — this build of serve-sim does not "+"include the simulator settings helper. Reinstall from a recent release.");console.error("[serve-sim] building sim-ax-settings (one-time)…"),await X6("bash",[Q]);let Z=g9();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),Q$.catch(()=>{Q$=null}),Q$}function X6($,Q){return new Promise((Z,J)=>{uZ($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function p9($,Q,Z){let J=["simctl","ui",$,Q];if(Z!==void 0)J.push(Z);return X6("xcrun",J)}async function G6($,...Q){let Z=await iZ();return X6("xcrun",["simctl","spawn",$,Z,...Q])}function oZ($){return $==="enabled"?"on":"off"}function aZ($){return $==="on"?"enabled":"disabled"}async function l9($,Q){let Z=j0[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return G6($,"get",Q);let J=(await p9($,Z.via)).toLowerCase();return Z.toggle?oZ(J):J}async function K6($,Q,Z){let J=j0[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await G6($,"set",Q,Z);return}await p9($,J.via,J.toggle?aZ(Z):Z)}async function W6($){let Q=Object.entries(j0).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([G6($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>l9($,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(j0))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],G)=>{Y[X]=J[G]}),Y}async function n9($){if($.includes("-h")||$.includes("--help")){console.log(u9);return}let Q=dZ($);if(Q.error)console.error(Q.error),console.error(u9),process.exit(1);let Z=Q.device?t(Q.device):X0();if(!Z)console.error("No booted simulator found. Boot one or pass -d <udid>."),process.exit(1);if(Q.command==="status"){let J=await W6(Z);if(Q.json)console.log(JSON.stringify(J));else for(let[Y,X]of Object.entries(J))console.log(`${Y.padEnd(20)} ${X}`);return}if(Q.command==="get"){console.log(await l9(Z,Q.option));return}await K6(Z,Q.option,Q.value)}var J6,c9,cZ,pZ,T4,lZ,nZ,j0,Q$=null,u9;var z6=d(()=>{$$();e4();J6=s4(import.meta.url),c9=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],cZ=["none","grayscale","red-green","green-red","blue-yellow"],pZ={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},T4=["on","off"],lZ=new Set(["on","true","enabled","1","yes"]),nZ=new Set(["off","false","disabled","0","no"]),j0={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:cZ,aliases:pZ},"text-size":{via:"content_size",values:c9,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:T4,toggle:!0},"increase-contrast":{via:"increase_contrast",values:T4,toggle:!0},"show-borders":{via:"ax",values:T4,toggle:!0},"reduce-transparency":{via:"ax",values:T4,toggle:!0},voiceover:{via:"ax",values:T4,toggle:!0}};u9=`Usage: serve-sim ui [status] [--json] [-d udid]
|
|
@@ -42,13 +42,13 @@ Simulator-wide UI options:
|
|
|
42
42
|
increase-contrast on | off
|
|
43
43
|
show-borders on | off
|
|
44
44
|
reduce-transparency on | off
|
|
45
|
-
voiceover on | off`});var i9=
|
|
45
|
+
voiceover on | off`});var i9=W0((aK,d9)=>{var J4=1000,Y4=J4*60,X4=Y4*60,g0=X4*24,rZ=g0*7,tZ=g0*365.25;d9.exports=function($,Q){Q=Q||{};var Z=typeof $;if(Z==="string"&&$.length>0)return sZ($);else if(Z==="number"&&isFinite($))return Q.long?$1($):eZ($);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify($))};function sZ($){if($=String($),$.length>100)return;var Q=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec($);if(!Q)return;var Z=parseFloat(Q[1]),J=(Q[2]||"ms").toLowerCase();switch(J){case"years":case"year":case"yrs":case"yr":case"y":return Z*tZ;case"weeks":case"week":case"w":return Z*rZ;case"days":case"day":case"d":return Z*g0;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*X4;case"minutes":case"minute":case"mins":case"min":case"m":return Z*Y4;case"seconds":case"second":case"secs":case"sec":case"s":return Z*J4;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function eZ($){var Q=Math.abs($);if(Q>=g0)return Math.round($/g0)+"d";if(Q>=X4)return Math.round($/X4)+"h";if(Q>=Y4)return Math.round($/Y4)+"m";if(Q>=J4)return Math.round($/J4)+"s";return $+"ms"}function $1($){var Q=Math.abs($);if(Q>=g0)return Z$($,Q,g0,"day");if(Q>=X4)return Z$($,Q,X4,"hour");if(Q>=Y4)return Z$($,Q,Y4,"minute");if(Q>=J4)return Z$($,Q,J4,"second");return $+" ms"}function Z$($,Q,Z,J){var Y=Q>=Z*1.5;return Math.round($/Z)+" "+J+(Y?"s":"")}});var V6=W0((rK,o9)=>{function Q1($){Z.debug=Z,Z.default=Z,Z.coerce=K,Z.disable=G,Z.enable=Y,Z.enabled=W,Z.humanize=i9(),Z.destroy=z,Object.keys($).forEach((V)=>{Z[V]=$[V]}),Z.names=[],Z.skips=[],Z.formatters={};function Q(V){let H=0;for(let B=0;B<V.length;B++)H=(H<<5)-H+V.charCodeAt(B),H|=0;return Z.colors[Math.abs(H)%Z.colors.length]}Z.selectColor=Q;function Z(V){let H,B=null,N,M;function D(...q){if(!D.enabled)return;let C=D,j=Number(new Date),A=j-(H||j);if(C.diff=A,C.prev=H,C.curr=j,H=j,q[0]=Z.coerce(q[0]),typeof q[0]!=="string")q.unshift("%O");let E=0;q[0]=q[0].replace(/%([a-zA-Z%])/g,(R,L)=>{if(R==="%%")return"%";E++;let U=Z.formatters[L];if(typeof U==="function"){let _=q[E];R=U.call(C,_),q.splice(E,1),E--}return R}),Z.formatArgs.call(C,q),(C.log||Z.log).apply(C,q)}if(D.namespace=V,D.useColors=Z.useColors(),D.color=Z.selectColor(V),D.extend=J,D.destroy=Z.destroy,Object.defineProperty(D,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(B!==null)return B;if(N!==Z.namespaces)N=Z.namespaces,M=Z.enabled(V);return M},set:(q)=>{B=q}}),typeof Z.init==="function")Z.init(D);return D}function J(V,H){let B=Z(this.namespace+(typeof H>"u"?":":H)+V);return B.log=this.log,B}function Y(V){Z.save(V),Z.namespaces=V,Z.names=[],Z.skips=[];let H=(typeof V==="string"?V:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let B of H)if(B[0]==="-")Z.skips.push(B.slice(1));else Z.names.push(B)}function X(V,H){let B=0,N=0,M=-1,D=0;while(B<V.length)if(N<H.length&&(H[N]===V[B]||H[N]==="*"))if(H[N]==="*")M=N,D=B,N++;else B++,N++;else if(M!==-1)N=M+1,D++,B=D;else return!1;while(N<H.length&&H[N]==="*")N++;return N===H.length}function G(){let V=[...Z.names,...Z.skips.map((H)=>"-"+H)].join(",");return Z.enable(""),V}function W(V){for(let H of Z.skips)if(X(V,H))return!1;for(let H of Z.names)if(X(V,H))return!0;return!1}function K(V){if(V instanceof Error)return V.stack||V.message;return V}function z(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return Z.enable(Z.load()),Z}o9.exports=Q1});var r9=W0((a9,J$)=>{a9.formatArgs=J1;a9.save=Y1;a9.load=X1;a9.useColors=Z1;a9.storage=G1();a9.destroy=(()=>{let $=!1;return()=>{if(!$)$=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();a9.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Z1(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let $;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&($=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt($[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function J1($){if($[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+$[0]+(this.useColors?"%c ":" ")+"+"+J$.exports.humanize(this.diff),!this.useColors)return;let Q="color: "+this.color;$.splice(1,0,Q,"color: inherit");let Z=0,J=0;$[0].replace(/%[a-zA-Z%]/g,(Y)=>{if(Y==="%%")return;if(Z++,Y==="%c")J=Z}),$.splice(J,0,Q)}a9.log=console.debug||console.log||(()=>{});function Y1($){try{if($)a9.storage.setItem("debug",$);else a9.storage.removeItem("debug")}catch(Q){}}function X1(){let $;try{$=a9.storage.getItem("debug")||a9.storage.getItem("DEBUG")}catch(Q){}if(!$&&typeof process<"u"&&"env"in process)$=process.env.DEBUG;return $}function G1(){try{return localStorage}catch($){}}J$.exports=V6()(a9);var{formatters:K1}=J$.exports;K1.j=function($){try{return JSON.stringify($)}catch(Q){return"[UnexpectedJSONParseError]: "+Q.message}}});var $2=W0((s9,X$)=>{var _1=N0("tty"),Y$=N0("util");s9.init=O1;s9.log=F1;s9.formatArgs=R1;s9.save=j1;s9.load=T1;s9.useColors=B1;s9.destroy=Y$.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");s9.colors=[6,2,3,4,5,1];try{let $=(()=>{throw new Error("Cannot require module "+"supports-color");})();if($&&($.stderr||$).level>=2)s9.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch($){}s9.inspectOpts=Object.keys(process.env).filter(($)=>{return/^debug_/i.test($)}).reduce(($,Q)=>{let Z=Q.substring(6).toLowerCase().replace(/_([a-z])/g,(Y,X)=>{return X.toUpperCase()}),J=process.env[Q];if(/^(yes|on|true|enabled)$/i.test(J))J=!0;else if(/^(no|off|false|disabled)$/i.test(J))J=!1;else if(J==="null")J=null;else J=Number(J);return $[Z]=J,$},{});function B1(){return"colors"in s9.inspectOpts?Boolean(s9.inspectOpts.colors):_1.isatty(process.stderr.fd)}function R1($){let{namespace:Q,useColors:Z}=this;if(Z){let J=this.color,Y="\x1B[3"+(J<8?J:"8;5;"+J),X=` ${Y};1m${Q} \x1B[0m`;$[0]=X+$[0].split(`
|
|
46
46
|
`).join(`
|
|
47
47
|
`+X),$.push(Y+"m+"+X$.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=N1()+Q+" "+$[0]}function N1(){if(s9.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function F1(...$){return process.stderr.write(Y$.formatWithOptions(s9.inspectOpts,...$)+`
|
|
48
48
|
`)}function j1($){if($)process.env.DEBUG=$;else delete process.env.DEBUG}function T1(){return process.env.DEBUG}function O1($){$.inspectOpts={};let Q=Object.keys(s9.inspectOpts);for(let Z=0;Z<Q.length;Z++)$.inspectOpts[Q[Z]]=s9.inspectOpts[Q[Z]]}X$.exports=V6()(s9);var{formatters:t9}=X$.exports;t9.o=function($){return this.inspectOpts.colors=this.useColors,Y$.inspect($,this.inspectOpts).split(`
|
|
49
|
-
`).map((Q)=>Q.trim()).join(" ")};t9.O=function($){return this.inspectOpts.colors=this.useColors,Y$.inspect($,this.inspectOpts)}});var Q2=
|
|
49
|
+
`).map((Q)=>Q.trim()).join(" ")};t9.O=function($){return this.inspectOpts.colors=this.useColors,Y$.inspect($,this.inspectOpts)}});var Q2=W0((eK,H6)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)H6.exports=r9();else H6.exports=$2()});var A4,L6,M6,U0,D4;var U6=d(()=>{A4=a8(Q2(),1),L6=A4.default("serve-sim:cli"),M6=A4.default("serve-sim:helper"),U0=A4.default("serve-sim:state"),D4=A4.default("serve-sim:mw")});import{createHash as y1}from"crypto";import{existsSync as G2,readFileSync as K2}from"fs";import{join as B6}from"path";function E4($){return B6(C0,`${$}.pid`)}function K$($){return B6(C0,`${$}.bundles.json`)}function W$($){return`/tmp/serve-sim-cam-${y1("sha1").update($).digest("hex").slice(0,12)}.sock`}function b1($){try{return process.kill($,0),!0}catch{return!1}}function R6($){try{let Q=Number(K2(E4($),"utf-8").trim());return Number.isInteger(Q)&&Q>0?Q:null}catch{return null}}function v1($){if(!$||typeof $!=="object"||Array.isArray($))throw Error("invalid camera helper reply");return $}async function G4($,Q){let Z=W$($);if(!G2(Z))throw Error("camera helper socket not found");let J=await import("net");return new Promise((Y,X)=>{let G=J.createConnection(Z);G.setEncoding("utf8");let W="",K=!1,z,V=(H,B)=>{if(K)return;if(K=!0,z)clearTimeout(z);if(H)X(H);else Y(B??{})};G.on("data",(H)=>{W+=H;let B=W.indexOf(`
|
|
50
50
|
`);if(B<0)return;try{V(void 0,v1(JSON.parse(W.slice(0,B))))}catch(N){V(N)}G.end()}),G.on("error",V),G.on("close",()=>V(Error("socket closed"))),z=setTimeout(()=>{G.destroy(),V(Error("helper timeout"))},f1),G.write(JSON.stringify(Q)+`
|
|
51
|
-
`)})}function C4($){let Q=R6($);return Q!==null&&b1(Q)&&G2(W$($))}function z$($){let Q;try{let J=JSON.parse(K2(K$($),"utf-8"));if(!J||typeof J!=="object"||Array.isArray(J))return[];let Y=J;if(typeof Y.helperPid!=="number"||!Array.isArray(Y.bundleIds))return[];Q={helperPid:Y.helperPid,bundleIds:Y.bundleIds}}catch{return[]}let Z=R6($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function V$($){if(!C4($))return{udid:$,alive:!1};let Q=R6($),Z=z$($);try{return{...await G4($,{action:"status"}),udid:$,alive:!0,helperPid:Q,bundleIds:Z}}catch(J){return{udid:$,alive:!0,helperPid:Q,bundleIds:Z,error:J instanceof Error?J.message:String(J)}}}var C0,f1=3000;var N6=d(()=>{r4();C0=B6(
|
|
51
|
+
`)})}function C4($){let Q=R6($);return Q!==null&&b1(Q)&&G2(W$($))}function z$($){let Q;try{let J=JSON.parse(K2(K$($),"utf-8"));if(!J||typeof J!=="object"||Array.isArray(J))return[];let Y=J;if(typeof Y.helperPid!=="number"||!Array.isArray(Y.bundleIds))return[];Q={helperPid:Y.helperPid,bundleIds:Y.bundleIds}}catch{return[]}let Z=R6($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function V$($){if(!C4($))return{udid:$,alive:!1};let Q=R6($),Z=z$($);try{return{...await G4($,{action:"status"}),udid:$,alive:!0,helperPid:Q,bundleIds:Z}}catch(J){return{udid:$,alive:!0,helperPid:Q,bundleIds:Z,error:J instanceof Error?J.message:String(J)}}}var C0,f1=3000;var N6=d(()=>{r4();C0=B6(L0,"simcam")});function z2($){return typeof $==="number"&&Number.isFinite($)?$:null}function V2($,Q,Z,J){let Y=z2($);return Y==null?Q:Math.min(J,Math.max(Z,Y))}function H$($,Q,Z,J){return Math.round(V2($,Q,Z,J))}function g1($){if(!Array.isArray($)||$.length>16)return null;let Q=[];for(let Z of $){if(!Z||typeof Z!=="object")return null;let J=Z.urls;if(!Array.isArray(J)||J.length===0||J.length>16||!J.every((G)=>typeof G==="string"&&G.length<=2048&&/^(stun|stuns|turn|turns):/i.test(G)))return null;let{username:Y,credential:X}=Z;if(Y!==void 0&&typeof Y!=="string")return null;if(X!==void 0&&typeof X!=="string")return null;Q.push({urls:J,...typeof Y==="string"?{username:Y}:{},...typeof X==="string"?{credential:X}:{}})}return Q}function H2($,Q){if(!$||typeof $!=="object"||Array.isArray($))return null;let Z=$,J=Object.keys(Z),Y=Q==="webrtc"?m1:u1;if(J.length===0||J.some((X)=>!Y.has(X)))return null;for(let X of["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"])if(X in Z&&z2(Z[X])==null)return null;return Z}function W2($={},Q=h1){let J=Object.prototype.hasOwnProperty.call($,"iceServers")?g1($.iceServers):Q.iceServers,Y=J===null?Q.iceServers:J&&J.length>0?J:void 0;return{transport:$.transport==="http"||$.transport==="webrtc"?$.transport:Q.transport,httpCodec:$.httpCodec==="auto"||$.httpCodec==="mjpeg"||$.httpCodec==="h264"?$.httpCodec:Q.httpCodec,webRtcCodec:$.webRtcCodec==="vp8"||$.webRtcCodec==="vp9"||$.webRtcCodec==="h264"?$.webRtcCodec:Q.webRtcCodec,...Y?{iceServers:Y}:{},...K4($,Q)}}function K4($={},Q=L$){return{mjpegFps:H$($.mjpegFps,Q.mjpegFps,1,120),mjpegQuality:V2($.mjpegQuality,Q.mjpegQuality,0.05,1),maxDimension:H$($.maxDimension,Q.maxDimension,0,4096),h264Bitrate:H$($.h264Bitrate,Q.h264Bitrate,1e5,50000000),h264Fps:H$($.h264Fps,Q.h264Fps,1,140)}}function L2($){return{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}}function T6($,Q){if(Q==="webrtc")return{maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps};return{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}}function M2($){let Q=$?{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}:{};if($?.transport==="webrtc")return W2({transport:"webrtc",webRtcCodec:$.codec,iceServers:$.iceServers,...Q});return W2({transport:"http",httpCodec:$?.codec??"auto",...Q})}var F6=120,j6=140,L$,h1,u1,m1;var P4=d(()=>{L$={mjpegFps:60,mjpegQuality:0.7,maxDimension:0,h264Bitrate:6000000,h264Fps:60},h1={transport:"http",httpCodec:"auto",webRtcCodec:"h264",...L$};u1=new Set(["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"]),m1=new Set(["maxDimension","h264Bitrate","h264Fps"])});var D6="Accessibility unavailable on this simulator.";function U$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function M$($){return typeof $==="number"&&Number.isFinite($)?$:0}function G0($){return typeof $==="number"&&Number.isFinite($)?$:null}function q4($){return typeof $==="string"&&$.length>0?$:null}function l1($){if(!U$($))return{};let Q={};for(let[Z,J]of Object.entries($)){let Y=G0(J);if(Y!==null)Q[Z]=Y*1000}return Q}function n1($,Q){let Z=[q4($),q4(Q)];if(Z.some((J)=>J===null))return"unknown";return Z.includes("relay")?"relay":"direct"}function d1($){let Q=M$($.framesEncoded),Z=M$($.packetsSent),J=M$($.packetsLost),Y=G0($.totalEncodeTime),X=G0($.targetBitrate),G=G0($.roundTripTime);return{sessionId:q4($.sessionId)??"",sourceFrames:G0($.sourceFrames),sourceFps:G0($.sourceFramesPerSecond),sourceFramesDropped:G0($.sourceFramesDropped),codec:q4($.codec),connected:$.connected===!0,qualityLimitationReason:q4($.qualityLimitationReason),qualityLimitationMs:l1($.qualityLimitationDurations),framesEncoded:Q,framesSent:M$($.framesSent),reportedFps:G0($.framesPerSecond),targetKbps:X===null?null:X/1000,totalEncodeMs:Y===null?null:Y*1000,encodeMsPerFrame:Y===null||Q<=0?null:Y*1000/Q,width:G0($.frameWidth),height:G0($.frameHeight),packetsSent:Z,packetsLost:J,lossRatio:Z>0?Math.max(0,J)/Z:null,roundTripMs:G===null?null:G*1000,path:n1($.localCandidateType,$.remoteCandidateType)}}function B2($){if(!U$($)||!Array.isArray($.sessions))return{sessions:[]};return{sessions:$.sessions.filter(U$).map(d1),capture:i1($.capture)}}function i1($){if(!U$($))return null;let{screenFrames:Q,idleFrames:Z}=$;if(typeof Q!=="number"||typeof Z!=="number")return null;return{screenFrames:Q,idleFrames:Z,offeredFrames:typeof $.offeredFrames==="number"?$.offeredFrames:null,forwardedFrames:typeof $.forwardedFrames==="number"?$.forwardedFrames:null,pumpRestarts:typeof $.pumpRestarts==="number"?$.pumpRestarts:null,captureCpuCopies:G0($.captureCpuCopies),pollTicks:G0($.pollTicks),pollLateSumMs:G0($.pollLateSumMs)}}import{createRequire as o1}from"module";import{dirname as E6,join as C6}from"path";import{existsSync as a1}from"fs";import{fileURLToPath as R2}from"url";function QJ(){let $=[C6(E6(process.execPath),"native","serve-sim-native.node"),C6(E6(R2(import.meta.url)),"native","serve-sim-native.node"),C6(E6(R2(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let Q of $)if(a1(Q))return Q;throw Error(`serve-sim-native.node not found. Looked in:
|
|
52
52
|
${$.join(`
|
|
53
53
|
`)}
|
|
54
54
|
Run \`bun run build.ts\` to build the native addon.`)}function _$(){if(!P6)P6=r1(QJ());return P6}class q6{handle;constructor($){this.handle=new(_$()).SimHID($)}async guard($,Q,Z){try{return await Q()}catch(J){return console.error(`[hid] ${$} ignored bad input:`,J instanceof Error?J.message:J),Z}}touch($,Q,Z,J,Y,X=0){return this.guard("touch",()=>this.handle.touch($,Q,Z,J,Y,X),void 0)}multiTouch($,Q,Z,J,Y,X,G){return this.guard("multiTouch",()=>this.handle.multiTouch($,Q,Z,J,Y,X,G),void 0)}button($){return this.guard("button",()=>this.handle.button($),void 0)}buttonHid($,Q,Z="press"){return this.guard("buttonHid",()=>this.handle.buttonHid($,Q,Z),void 0)}key($,Q){return this.guard("key",()=>this.handle.key($,Q),void 0)}scroll($,Q,Z,J,Y,X){return this.guard("scroll",()=>this.handle.scroll($,Q,Y??NaN,X??NaN,Z,J),void 0)}digitalCrown($){return this.guard("digitalCrown",()=>this.handle.digitalCrown($),void 0)}orientation($){return this.guard("orientation",()=>this.handle.orientation($),!1)}memoryWarning(){return this.guard("memoryWarning",()=>this.handle.memoryWarning(),void 0)}softwareKeyboard(){return this.guard("softwareKeyboard",()=>this.handle.softwareKeyboard(),void 0)}caDebug($,Q){return this.guard("caDebug",()=>this.handle.caDebug($,Q),!1)}}class I6{handle;constructor($,Q=L$){this.handle=new(_$()).SimCapture($,Q.mjpegFps,Q.mjpegQuality,Q.maxDimension,Q.h264Fps,Q.h264Bitrate)}start(){return this.handle.start()}updateStreamSettings($){return this.handle.updateStreamSettings($.mjpegFps,$.mjpegQuality,$.maxDimension,$.h264Fps,$.h264Bitrate)}subscribeMjpeg($){return this.handle.subscribe(t1,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J})})}subscribeAvcc($){return this.handle.subscribe(s1,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J,isDescription:(Y&e1)!==0,isKeyframe:(Y&$J)!==0})})}async handleWebRTCOffer($){return JSON.parse(await this.handle.handleWebRTCOffer(JSON.stringify($)))}closeWebRTCSession($){return this.handle.closeWebRTCSession($)}async webRTCSenderStats($){return B2(JSON.parse(await this.handle.webRTCSenderStats($??"")))}screenSize(){return this.handle.screenSize()}stop(){return this.handle.stop()}}function B$($){return _$().axDescribe($)}function R$($){return _$().axFrontmost($)}var r1,t1=0,s1=1,e1=1,$J=2,I4,P6;var N$=d(()=>{P4();r1=o1(import.meta.url),I4={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4}});function YJ($){return $[0]?.frame??{x:0,y:0,width:1,height:1}}function XJ($,Q){return Math.abs($.x-Q.x)<0.5&&Math.abs($.y-Q.y)<0.5&&Math.abs($.width-Q.width)<0.5&&Math.abs($.height-Q.height)<0.5}function GJ($){let Q=YJ($),Z=[],J=(Y,X)=>{if(Z.length>=x6)return;let G=Y.frame;if(!XJ(G,Q))Z.push({id:Y.AXUniqueId??X,path:X,label:Y.AXLabel??"",value:Y.AXValue??"",role:Y.role_description,type:Y.type,enabled:Y.enabled!==!1,frame:G});for(let K=0;K<Y.children.length&&Z.length<x6;K++)J(Y.children[K],`${X}.${K}`)};for(let Y=0;Y<$.length&&Z.length<x6;Y++)J($[Y],String(Y));return{screen:{width:Q.width,height:Q.height},elements:Z}}async function KJ($){let Q;try{Q=JSON.parse(await B$($))}catch{return{screen:{width:1,height:1},elements:[],errors:[D6]}}return GJ(Q)}function WJ($){return $?.errors?.includes(D6)??!1}function zJ($){return $.elements.length>0&&$.screen.width>1&&$.screen.height>1}async function VJ($){let Q=[];try{let Z=await KJ($);if(Z.errors?.length)return Z;if(!zJ(Z))throw Error(`native AX returned ${Z.elements.length} elements in ${Z.screen.width}x${Z.screen.height} AX space`);return{...Z,errors:Q}}catch(Z){Q.push(Z.message||String(Z))}return{screen:{width:1,height:1},elements:[],errors:Q}}function HJ($){return`data: ${JSON.stringify($)}
|
|
@@ -64,7 +64,7 @@ Content-Type: image/jpeg\r
|
|
|
64
64
|
Content-Length: ${$}\r
|
|
65
65
|
\r
|
|
66
66
|
`,"ascii")}function p2($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=$3,Q.set($,5),Q}function m6($){if($.writableEnded||$.destroyed||!$.writableNeedDrain)return Promise.resolve();return new Promise((Q)=>{let Z=()=>{J(),Q()},J=()=>{$.off("drain",Z),$.off("close",Z),$.off("error",Z)};$.once("drain",Z),$.once("close",Z),$.once("error",Z)})}function X3($,Q){if($.writableEnded||$.destroyed)return Promise.resolve();return new Promise((Z)=>{let J=!1,Y=()=>{if(J)return;J=!0,$.off("close",Y),$.off("error",Y),Z()};$.once("close",Y),$.once("error",Y);try{$.write(Q,Y)}catch{Y()}})}function c6($,Q,Z=new l("WebRTC signaling body is too large",413,"body_too_large")){return new Promise((J,Y)=>{let X=[],G=0,W=!1,K=(z)=>{if(W)return;W=!0,Y(z)};$.on("data",(z)=>{if(W)return;let V=Buffer.isBuffer(z)?z:Buffer.from(z);if(G+=V.length,G>Q){K(Z);return}X.push(V)}),$.on("end",()=>{if(W)return;W=!0,J(Buffer.concat(X))}),$.on("aborted",()=>K(new l("Request aborted",400,"request_aborted"))),$.on("error",K)})}function l2($){let Q=$.headers["content-type"];return(Array.isArray(Q)?Q[0]:Q)?.split(";",1)[0]?.trim().toLowerCase()==="application/json"}function p6($,Q){try{return JSON.parse($.toString("utf8"))}catch{throw new l("Malformed JSON request body",400,Q)}}class n2{udid;capture;hid;captureStart;phase="unstarted";width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;touchGestureLog;transport;encoderSettings;streamSettingsUpdate=Promise.resolve();constructor($,Q){this.udid=$;let Z=M2(Q);this.transport=Z.transport,this.encoderSettings=L2(Z),this.hid=new q6($),this.capture=new I6($,this.encoderSettings)}start(){if(this.phase==="running")return this.captureStart??Promise.resolve();if(this.phase==="stopped")return Promise.reject(Error("Capture session is stopped"));return this.phase="running",this.captureStart=this.capture.start(),this.captureStart}close(){if(this.phase!=="running")return;for(let $ of this.hidSockets)$.close();this.hidSockets.clear(),this.capture.stop().catch(()=>{}),this.phase="stopped"}onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(this.updateScreenSize(Q,Z),!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let Y=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,Y*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length}async waitForCapture(){if(await this.captureStart,this.phase!=="running")throw Error("Capture session is stopped")}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}async writeMjpegFrame($,Q){if($.writableEnded||$.destroyed)return;let Z=J3(Q.length),J=Buffer.allocUnsafe(Z.length+Q.length+u2.length);Z.copy(J,0),J.set(Q,Z.length),u2.copy(J,Z.length+Q.length),$.write(J),await m6($)}handleMjpeg($,Q){if(this.transport==="webrtc"){this.sendTransportLocked(Q);return}let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...S4}),(async()=>{let J=()=>{},Y=!1,X=()=>{Y=!0,J()};$.once("aborted",X),Q.once("close",X),Q.once("error",X);try{if(await this.waitForCapture(),Y||Q.writableEnded||Q.destroyed)return;let G=this.latestJpeg();if(G)await this.writeMjpegFrame(Q,G);let W=await this.capture.subscribeMjpeg(async(z)=>{if(this.onSharedMjpegFrame(z),await m6(Q),!Q.writableEnded&&!Q.destroyed)await this.writeMjpegFrame(Q,z.data)}),K=!1;if(J=()=>{if(K)return;K=!0,W().catch(()=>{})},Y||Q.writableEnded||Q.destroyed)J()}catch{J(),Q.destroy()}})()}handleAvcc($,Q){if(this.transport==="webrtc"){this.sendTransportLocked(Q);return}Q.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...S4}),(async()=>{let Z=()=>{},J=!1,Y=()=>{J=!0,Z()};$.once("aborted",Y),Q.once("close",Y),Q.once("error",Y);try{if(await this.waitForCapture(),J||Q.writableEnded||Q.destroyed)return;let X=!1,G=!1,W,K=()=>{G=!0;let B=W;if(W=void 0,B)B().catch(()=>{})};Z=K;let z=this.latestJpeg();if(z)X=!0,Q.write(p2(z));else if(W=await this.capture.subscribeMjpeg(async(B)=>{if(X||Q.writableEnded||Q.destroyed){K();return}this.onSharedMjpegFrame(B),X=!0,Q.write(p2(B.data)),K()}),G)K();if(J||Q.writableEnded||Q.destroyed){K();return}let V=await this.capture.subscribeAvcc(async(B)=>{if(this.updateScreenSize(B.width,B.height),!X)X=!0,K();if(await m6(Q),!Q.writableEnded&&!Q.destroyed)await X3(Q,B.data)}),H=!1;if(Z=()=>{if(H)return;H=!0,K(),V().catch(()=>{})},J||Q.writableEnded||Q.destroyed)Z()}catch{Z(),Q.destroy()}})()}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}async handleStreamSettings($,Q){if($.method==="GET"){if(await this.streamSettingsUpdate,!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,T6(this.encoderSettings,this.transport));return}if($.method!=="PATCH"){this.sendJson(Q,405,{error:"method_not_allowed"});return}if(!l2($)){this.sendJson(Q,415,{error:"unsupported_media_type"});return}try{let Z=await c6($,16384,new l("Stream settings body is too large",413,"body_too_large")),J=H2(p6(Z,"invalid_stream_settings"),this.transport);if(!J)throw new l("Invalid stream settings",400,"invalid_stream_settings");let Y=await this.updateStreamSettings(J);if(!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,T6(Y,this.transport))}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof l?Z.status:500,Y=Z instanceof l?Z.code:"stream_settings_failed";this.sendJson(Q,J,{error:Y})}}updateStreamSettings($){let Q=this.streamSettingsUpdate.then(async()=>{let Z=K4({...this.encoderSettings,...$},this.encoderSettings);return await this.capture.updateStreamSettings(Z),this.encoderSettings=Z,Z});return this.streamSettingsUpdate=Q.then(()=>{},()=>{}),Q}async handleWebRTCOffer($,Q){let Z,J=!1,Y,X=()=>{if(!Z)return Promise.resolve();return Y??=this.capture.closeWebRTCSession(Z),Y},G=()=>{if(!Q.writableFinished)X()};Q.once("close",G);try{if($.method!=="POST")throw new l("WebRTC offers require POST",405,"method_not_allowed");if(!l2($))throw new l("WebRTC offers require application/json",415,"unsupported_media_type");let W=await c6($,f2),K=b2(p6(W,"invalid_offer"));if(Z=K.sessionId,await this.waitForCapture(),await this.refreshScreenSizeFromNative())this.broadcastConfig();let z=await this.capture.handleWebRTCOffer(K);if(J=!0,Q.writableEnded||Q.destroyed){await X();return}this.sendJson(Q,200,z)}catch(W){if(J)await X();if(Q.writableEnded||Q.destroyed)return;let K=W instanceof Error&&W.message.includes("WebRTC signaling already in progress"),z=W instanceof l?W.status:K?409:500,V=W instanceof l?W.code:K?"webrtc_session_busy":"webrtc_offer_failed";this.sendJson(Q,z,{error:V,message:W instanceof Error?W.message:String(W)})}finally{if(Q.writableFinished)Q.off("close",G)}}async handleWebRTCClose($,Q){try{if($.method!=="POST")throw new l("WebRTC close requires POST",405,"method_not_allowed");let Z=await c6($,4096),J=v2(p6(Z,"invalid_close_request"));if(await this.capture.closeWebRTCSession(J.sessionId),Q.writableEnded||Q.destroyed)return;Q.writeHead(204,S4),Q.end()}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof l?Z.status:400,Y=Z instanceof l?Z.code:"invalid_close_request";this.sendJson(Q,J,{error:Y,message:Z instanceof Error?Z.message:String(Z)})}}async handleWebRTCStats($,Q){if($.method!=="GET"){this.sendJson(Q,405,{error:"method_not_allowed"});return}try{let Z=h2(new URL($.url??"","http://x").searchParams.get("sessionId")),J=await this.capture.webRTCSenderStats(Z);if(Q.writableEnded||Q.destroyed)return;this.sendJson(Q,200,J)}catch(Z){if(Z instanceof l){if(Q.writableEnded||Q.destroyed)return;this.sendJson(Q,Z.status,{error:Z.code,message:Z.message});return}if(console.error(`WebRTC stats unavailable: ${Z instanceof Error?Z.message:String(Z)}`),Q.writableEnded||Q.destroyed)return;this.sendJson(Q,503,{error:"webrtc_stats_unavailable"})}}handleOptions($,Q){l6(Q)}handleAx($,Q){return this.serveAxJson(Q,()=>B$(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>R$(this.udid),"foreground_unavailable")}async serveAxJson($,Q,Z){try{let J=await Q();if($.writableEnded)return;this.sendJsonString($,200,J)}catch(J){if($.writableEnded)return;this.sendJson($,503,{error:Z,message:J instanceof Error?J.message:String(J)})}}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame();if(Q)$.send(Q);$.on("message",(Z)=>this.handleHidMessage(Buffer.isBuffer(Z)?Z:Buffer.from(Z))),$.on("close",()=>this.hidSockets.delete($)),$.on("error",()=>this.hidSockets.delete($))}async handleHidMessage($){if($.length<1)return;let Q=$[0],Z=$.length>1?$.subarray(1):null,J=()=>{if(!Z)return null;try{return JSON.parse(Z.toString("utf8"))}catch{return null}},Y=this.width,X=this.height;switch(Q){case 3:{let G=J();if(G)this.recordTouchEvent(G),this.hid.touch(G.type,G.x,G.y,Y,X,G.edge??0);break}case 4:{let G=J();if(!G)break;if(this.recordHidEvent(Q,G),G.page!=null&&G.usage!=null)this.hid.buttonHid(G.page,G.usage,G.phase??"press");else this.hid.button(G.button);break}case 5:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.multiTouch(G.type,G.x1,G.y1,G.x2,G.y2,Y,X);break}case 6:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.key(G.type,G.usage);break}case 7:{let G=J();if(!G)break;let W=Y3[G.orientation];if(W!=null&&await this.hid.orientation(W)){if(this.recordHidEvent(Q,G),G.orientation!==this.orientation)this.orientation=G.orientation,this.broadcastConfig()}break}case 8:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.caDebug(G.option,G.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.digitalCrown(G.delta);break}case 11:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.scroll(G.dx*Y,G.dy*X,Y,X,G.x,G.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break}}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=c2($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=c2($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(m2(Q))if(Q.eventId==null){let Z=P0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:j$(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else b6(Q.eventId,{kind:"drag",action:"drag",summary:j$(Q),details:this.touchGestureDetails(Q,"drag","move")},{notify:!1});return}if($.type==="end"){let Q=this.touchGestureLog;if(Q){if(Q.lastX=$.x,Q.lastY=$.y,$.edge!=null)Q.edge=$.edge;if(Q.moveCount>0&&m2(Q))if(Q.eventId==null)P0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:j$(Q),details:this.touchGestureDetails(Q,"drag","end")});else b6(Q.eventId,{kind:"drag",action:"drag",summary:j$(Q),details:this.touchGestureDetails(Q,"drag","end")});else P0({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${V4($.x,$.y)}`,details:this.touchGestureDetails(Q,"tap")});this.touchGestureLog=void 0;return}}this.recordHidEvent(3,$)}eventLogScreen(){return this.width>0&&this.height>0?{width:this.width,height:this.height}:void 0}touchGestureDetails($,Q,Z){return{type:Q,...Z?{phase:Z}:{},start:{x:$.startX,y:$.startY},current:{x:$.lastX,y:$.lastY},moveCount:$.moveCount,...$.edge!=null?{edge:$.edge}:{},...this.eventLogScreen()?{screen:this.eventLogScreen()}:{}}}recordHidEvent($,Q){let Z=S2(this.udid,$,Q,this.eventLogScreen());if(Z)P0(Z)}screenConfig(){return{width:this.width,height:this.height,orientation:this.orientation}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([Q3]),Buffer.from(JSON.stringify(this.screenConfig()))])}async refreshScreenSizeFromNative(){let{width:$,height:Q}=await this.capture.screenSize();if(!$||!Q||$===this.width&&Q===this.height)return!1;return this.width=$,this.height=Q,!0}updateScreenSize($,Q){if(!$||!Q||$===this.width&&Q===this.height)return;this.width=$,this.height=Q,this.broadcastConfig()}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}sendJson($,Q,Z){this.sendJsonString($,Q,JSON.stringify(Z))}sendTransportLocked($){this.sendJson($,409,{error:"stream_transport_locked",transport:this.transport})}sendJsonString($,Q,Z){let J=Buffer.from(Z,"utf8");$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-cache, no-store","Content-Length":String(J.length),...S4}),$.end(J)}}function d2($){return q0.get($)}function w4($,Q){let Z=q0.get($);if(!Z){let J=new n2($,Q);Z=J,q0.set($,J);try{J.start().catch(()=>{if(q0.get($)!==J)return;J.close(),q0.delete($)})}catch(Y){throw J.close(),q0.delete($),Y}}return Z}function n6($){let Q=q0.get($);if(Q)Q.close(),q0.delete($)}var S4,$3=4,Q3=130,u2,Z3=0.004,Y3,q0;var i2=d(()=>{N$();h6();g2();P4();S4={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PATCH, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};u2=Buffer.from(`\r
|
|
67
|
-
`,"ascii");Y3={portrait:I4.portrait,portrait_upside_down:I4.portraitUpsideDown,landscape_left:I4.landscapeLeft,landscape_right:I4.landscapeRight};q0=new Map});import{execFileSync as T$}from"child_process";import{createHash as $Q}from"crypto";import{existsSync as Q0,mkdirSync as QQ,readdirSync as G3,readFileSync as A0,renameSync as ZQ,statSync as JQ,unlinkSync as o2}from"fs";import{tmpdir as YQ}from"os";import{basename as XQ,dirname as e6,join as i}from"path";import{inflateSync as K3}from"zlib";function D$($){return $.startsWith(a2)?$.slice(a2.length):$}function Q8($){let Q=typeof $==="string"?$:$.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),X=Number(Z[3]),G=Number(Z[4]),W=Math.abs(X-J),K=Math.abs(G-Y);return W>0&&K>0?{width:W,height:K}:null}function z3($,Q){let Z=D3($);if(Z)return Z;let J=typeof $.framebufferMask==="string"?$.framebufferMask:null;if(!J)return null;let Y=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Y)return null;let X=i(Y,`${J}.pdf`);if(!Q0(X))return null;let G=Q8(A0(X));if(!G)return null;let W=E3(Q);return{width:G.width/W,height:G.height/W}}function KQ($){let Q=Z8($),Z=Q;if(o6.has(Z))return o6.get(Z)??null;let J=M3(Q);return o6.set(Z,J),J}function WQ($){let Q=Z8($);if(a6.has(Q))return a6.get(Q)??null;let Z=V3($);return a6.set(Q,Z),Z}function V3($){let Q=_3($),Z=Q?LQ(Q):null,J=B3(Z)??R3($.name);if(!J)return null;let Y=HQ(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function zQ($,Q){let Z=D$($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){H4(Q,400,"Invalid chrome asset request");return}let Y=_Q(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){H4(Q,404,"Chrome asset not found");return}let X=J8(Z,J);if(!Q0(X)){H4(Q,404,"Chrome asset not found");return}try{let G=BQ(Z,J,X),W=A0(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(W.byteLength)}),Q.end(W)}catch(G){H4(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function VQ($,Q){let Z=$.searchParams.get("name")??"";try{let J=HQ(Z);if(!J){H4(Q,404,"Placeholder asset not found");return}let Y=A0(J.pngPath);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),Q.end(Y)}catch(J){H4(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function HQ($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(t6.has($))return t6.get($)??null;let Q=H3($),Z=Q?C3($,Q):null;return t6.set($,Z),Z}function H3($){let Z=L3($)?.paths.find((Y)=>Q0(Y));if(Z)return Z;if(!UQ().some((Y)=>Y.iconName===$))return null;let J=i(I0,`${$}.icns`);return Q0(J)?J:null}function L3($){return Object.prototype.hasOwnProperty.call(s2,$)?s2[$]:null}function M3($){let Q=MQ($);if(!Q0(Q))return null;let Z=LQ(Q);if(!Z?.chromeIdentifier)return null;let J=_Q(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=s6(J.identifier,J.compositeImage);let X=J.compositeImage?I3(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?q3(Z.framebufferMaskSize,X):null)??Z.screenSize??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!G||G.width<=0||G.height<=0)return null;let W=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},K={x:J.devicePadding.left,y:J.devicePadding.top,width:W.width,height:W.height},z={width:W.width+J.devicePadding.left+J.devicePadding.right,height:W.height+J.devicePadding.top+J.devicePadding.bottom},V={x:K.x+(W.width-G.width)/2,y:K.y+(W.height-G.height)/2,width:G.width,height:G.height},H=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,B=J.slice?s6(J.identifier,J.slice.topLeft):null,N=J.identifier.startsWith("watch"),M=J.buttons.flatMap((D)=>{let q=s6(J.identifier,D.image);if(!q)return[];let C=T3(D,q,W,J.devicePadding),j={x:q.width>0?(D.rolloverOffset.x-D.normalOffset.x)/q.width:0,y:q.height>0?(D.rolloverOffset.y-D.normalOffset.y)/q.height:0};return[{name:D.name,image:D.image,imageDown:D.imageDown,onTop:D.onTop||N,frame:{...C,...q},hover:j,usagePage:D.usagePage,usage:D.usage}]});return{identifier:J.identifier,frame:z,body:K,screen:V,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:H,compositeImage:J.compositeImage,slice:J.slice,corner:B,buttons:M}}function LQ($){let Q=O$($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?D$(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?z3({...Q,__profileDir:e6($)},J):null,framebufferMaskSize:U3({...Q,__profileDir:e6($)})}}function U3($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=i(Z,`${Q}.pdf`);if(!Q0(J))return null;return Q8(A0(J))}function Z8($){return O3($.deviceTypeIdentifier)??$.name}function _3($){let Q=MQ(Z8($));return Q0(Q)?Q:null}function MQ($){return i($8,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function B3($){if(!$)return null;let Q=new Set;if($.modelIdentifier)Q.add($.modelIdentifier);if($.productClass)Q.add($.productClass),Q.add(`${$.productClass}AP`);if(Q.size===0)return null;for(let Z of UQ())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function R3($){let Q=$.toLowerCase();if(Q.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(Q))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(Q))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(Q))return"ipad-air-13-inch-m4";return null}function UQ(){if(r6)return r6;let $=O$(i(I0,"MobileDevices-Info.plist"))??O$(i(e6(I0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=W0(J),X=s(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=i(I0,X);if(!Q0(G))continue;let K=W0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],z=Array.isArray(K)?K.filter((V)=>typeof V==="string"&&V.length>0):[];if(z.length===0)continue;Z.push({description:s(Y.UTTypeDescription)??"",iconFile:X,iconName:XQ(X,".icns"),modelCodes:z})}return r6=Z,Z}function _Q($){let Q=D$($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(i6.has(Q))return i6.get(Q)??null;let Z=i(GQ,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(A0(Z,"utf-8"));J=N3(Y)}catch{J=null}return i6.set(Q,J),J}function N3($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=D$(Q),J=W0($.images),Y=W0(J.sizing),X=W0($.paths),G=O0(W0(X.simpleOutsideBorder).cornerRadiusX),W={top:O0(Y.topHeight),left:O0(Y.leftWidth),bottom:O0(Y.bottomHeight),right:O0(Y.rightWidth)},K=W0(J.devicePadding),z={top:O0(K.top),left:O0(K.left),bottom:O0(K.bottom),right:O0(K.right)},V=typeof J.composite==="string"?J.composite:null,H=F3(J),B=Array.isArray($.inputs)?$.inputs.flatMap((M)=>{let D=j3(W0(M));return D?[D]:[]}):[],N=new Set;for(let M of Object.values(J))if(typeof M==="string")N.add(M);for(let M of B)N.add(M.image);if(Array.isArray($.inputs))for(let M of $.inputs){let D=W0(M);if(typeof D.imageDown==="string")N.add(D.imageDown)}return{identifier:Z,insets:W,devicePadding:z,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(W.left,W.top),0),compositeImage:V,slice:H,buttons:B,allowedImages:N}}function F3($){let Q=s($.topLeft),Z=s($.top),J=s($.topRight),Y=s($.right),X=s($.bottomRight),G=s($.bottom),W=s($.bottomLeft),K=s($.left);if(!Q||!Z||!J||!Y||!X||!G||!W||!K)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:W,left:K}}function j3($){let Q=s($.name),Z=s($.image);if(!Q||!Z)return null;let J=s($.anchor),Y=s($.align),X=W0($.offsets),G=e2(W0(X.normal)),W=e2(W0(X.rollover));return{name:Q,image:Z,imageDown:s($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??W??{x:0,y:0},rolloverOffset:W??G??{x:0,y:0},usagePage:x0($.usagePage),usage:x0($.usage)}}function T3($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,W=2*$.normalOffset.y-$.rolloverOffset.y,K=$.align==="trailing"?Y+Z.width+G-Q.width:Y+G;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+G,y:X+W};case"top":return{x:K,y:X+W-Q.height};case"bottom":return{x:K,y:X+Z.height+W}}}function O3($){if(!$)return null;if(!d6)d6=A3();return d6.get($)??null}function A3(){let $=new Map;try{for(let Q of G3($8)){if(!Q.endsWith(".simdevicetype"))continue;let Z=i($8,Q),J=O$(i(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:XQ(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function O$($){try{let Q=T$("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function D3($){let Q=x0($.mainScreenWidth),Z=x0($.mainScreenHeight),J=x0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function E3($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function s6($,Q){let Z=J8($,Q);if(!Q0(Z))return null;return Q8(A0(Z))}function J8($,Q){return i(GQ,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function BQ($,Q,Z){QQ(r2,{recursive:!0});let J=JQ(Z),Y=$Q("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=i(r2,`${$}-${Y}.png`);if(Q0(X))return X;let G=`${X}.${process.pid}.tmp`;return T$("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),ZQ(G,X),X}function C3($,Q){QQ(t2,{recursive:!0});let Z=JQ(Q),J=$Q("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=i(t2,`${$}-${J}.png`);if(Q0(Y)){let W=A$(A0(Y));return{sourcePath:Q,pngPath:Y,width:W.width,height:W.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{T$("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let W=A0(G),K=P3(W)??{x:0,y:0,...A$(W)};return T$("sips",["-c",String(K.height),String(K.width),"--cropOffset",String(K.y),String(K.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),ZQ(X,Y),{sourcePath:Q,pngPath:Y,width:K.width,height:K.height}}finally{try{if(Q0(G))o2(G)}catch{}try{if(Q0(X))o2(X)}catch{}}}function A$($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function RQ($,Q){let{width:Z,height:J}=A$($),Y=8,X=0,G=0,W=[];while(Y<$.byteLength){let D=$.readUInt32BE(Y);Y+=4;let q=$.toString("ascii",Y,Y+4);Y+=4;let C=$.subarray(Y,Y+D);if(Y+=D+4,q==="IHDR")X=C[8]??0,G=C[9]??0;else if(q==="IDAT")W.push(C);else if(q==="IEND")break}let K=G===6?4:G===4?2:0;if(X!==8||K===0||W.length===0)return null;let z=G===6,V=K3(Buffer.concat(W)),H=Z*K,B=new Uint8Array(Z*J),N=Buffer.alloc(H),M=0;for(let D=0;D<J;D++){let q=V[M++]??0,C=Buffer.from(V.subarray(M,M+H));M+=H,S3(C,N,K,q);for(let j=0;j<Z;j++){let A=j*K,E=C[A]??0,P=z?C[A+1]??0:E,R=z?C[A+2]??0:E,L=C[A+K-1]??0;if(Q(E,P,R,L))B[D*Z+j]=1}N=C}return{width:Z,height:J,mask:B}}function P3($){let{width:Q,height:Z}=A$($),J=RQ($,(K,z,V,H)=>H>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,W=-1;for(let K=0;K<Z;K++)for(let z=0;z<Q;z++){if(!J.mask[K*Q+z])continue;if(z<Y)Y=z;if(K<X)X=K;if(z>G)G=z;if(K>W)W=K}if(G<Y||W<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:W-X+1}}function q3($,Q){if(Q.width<=0)return null;let Z=Math.max(1,Math.round($.width/Q.width));return{width:$.width/Z,height:$.height/Z}}function I3($,Q){let Z=x3($,Q);if(!Z)return null;let J=RQ(Z,(j,A,E,P)=>P>200&&j<30&&A<30&&E<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,W=Math.floor(Y/2),K=Math.floor(X/2),z=(j,A)=>j>=0&&A>=0&&j<Y&&A<X&&G[A*Y+j]===1;if(!z(W,K))return null;let V=W;while(V>0&&z(V-1,K))V--;let H=W;while(H<Y-1&&z(H+1,K))H++;let B=K;while(B>0&&z(W,B-1))B--;let N=K;while(N<X-1&&z(W,N+1))N++;let M=N-B,D=(j,A)=>{let E=0;while(E<M&&!z(j,A?B+E:N-E))E++;return E},q=[D(V,!0),D(H,!0),D(V,!1),D(H,!1)],C=q.reduce((j,A)=>j+A,0)/q.length;return{x:V,y:B,width:H-V+1,height:N-B+1,radius:C}}function x3($,Q){let Z=J8($,Q);if(!Q0(Z))return null;try{return A0(BQ($,Q,Z))}catch{return null}}function S3($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,W=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+G&255;break;case 3:$[Y]=$[Y]+Math.floor((X+G)/2)&255;break;case 4:$[Y]=$[Y]+w3(X,G,W)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function w3($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),G=Math.abs(J-Z);if(Y<=X&&Y<=G)return $;return X<=G?Q:Z}function H4($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function O0($){return x0($)??0}function x0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function s($){return typeof $==="string"&&$?$:null}function W0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function e2($){let Q=x0($.x),Z=x0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}var $8="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",GQ="/Library/Developer/DeviceKit/Chrome",a2="com.apple.dt.devicekit.chrome.",r2,t2,I0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",W3="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",s2,d6=null,i6,o6,a6,r6=null,t6;var NQ=d(()=>{r2=i(YQ(),"serve-sim-devicekit-chrome"),t2=i(YQ(),"serve-sim-device-placeholder-assets"),s2={"vision-pro":{paths:[i(I0,"com.apple.vision-pro.icns"),i(W3,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[i(I0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[i(I0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[i(I0,"com.apple.ipad-air-m3-1.icns")]}},i6=new Map,o6=new Map,a6=new Map,t6=new Map});import{exec as k3}from"child_process";import{createHash as FQ,timingSafeEqual as y3}from"crypto";function b3($,Q){let Z=FQ("sha256").update($).digest(),J=FQ("sha256").update(Q).digest();return y3(Z,J)}function v3($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(z)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(z))},W=setTimeout(()=>{if(!J)$.close()},f3);W.unref?.();let K=(z,V)=>{if(Y.has(z))return;let H=V.split("?")[0];if(!V.startsWith("/")||!X.some((C)=>H===C)){G({sub:z,end:!0,error:"path not allowed"});return}if(!Z.onSseRequest){G({sub:z,end:!0,error:"sse requests not supported"});return}let B=!0,N=!1,M=null,D=(C)=>{if(N)return;N=!0,G(C?{sub:z,end:!0,error:C}:{sub:z,end:!0})},q={destroy(){B=!1,M?.cancel().catch(()=>{})}};Y.set(z,q),(async()=>{try{let C=await Z.onSseRequest(V,Q);if(!B)return;if(!C?.body){D();return}let j=new TextDecoder;M=C.body.getReader();while(B){let{done:A,value:E}=await M.read();if(A)break;G({sub:z,data:j.decode(E,{stream:!0})})}if(B){let A=j.decode();if(A)G({sub:z,data:A})}}catch{if(B)D();return}finally{if(B=!1,M)try{M.releaseLock()}catch{}if(Y.get(z)===q)Y.delete(z),D()}})()};$.on("message",(z)=>{let V;try{V=JSON.parse(N9(z))}catch{return}if(!J){if(typeof V.token==="string"&&b3(V.token,Z.execToken))J=!0,clearTimeout(W),G({ready:!0});else $.close();return}if(typeof V.unsub==="number"){Y.get(V.unsub)?.destroy(),Y.delete(V.unsub);return}if(typeof V.sub==="number"&&typeof V.path==="string"){K(V.sub,V.path);return}if(typeof V.id==="number"&&V.ui!==void 0){let{id:N}=V;if(!Z.onUiRequest){G({id:N,error:"ui requests not supported"});return}Z.onUiRequest(V.ui).then((M)=>G({id:N,...M})).catch((M)=>G({id:N,error:M instanceof Error?M.message:String(M)}));return}if(typeof V.id!=="number"||typeof V.command!=="string"||!V.command)return;let{id:H,command:B}=V;k3(B,{maxBuffer:16777216},(N,M,D)=>{let q={id:H,stdout:M.toString(),stderr:D.toString(),exitCode:N?N.code??1:0};try{Z.onCommandResult?.(B,q)}catch{}G(q)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(W);for(let z of Y.values())z.destroy();Y.clear()})}function jQ($){return function(Z,J){let Y=new URL(Z.url);if(Y.pathname!==$.path&&Y.pathname!==`${$.path}/`)return!1;let X=Z.headers.get("origin");if(X)try{if(new URL(X).host!==F9(Z))return J.close(),!0}catch{return J.close(),!0}return v3(J,Z,$),!0}}var f3=1e4;var TQ=()=>{};import{EventEmitter as OQ}from"events";function h3($){let Q={};if($.headers.forEach((Z,J)=>{Q[J.toLowerCase()]=Z}),!Q.host)Q.host=new URL($.url).host;return Q}function AQ($,Q){let Z=new URL(Q.url),J=new OQ,Y=new OQ,X=new AbortController,G=null,W=!1,K=(x=!1)=>{if(W)return;if(W=!0,X.abort(),G?.cancel().catch(()=>{}),Q.signal.removeEventListener("abort",z),x)J.emit("aborted");J.emit("close")},z=()=>K(!0),V=Q.signal.aborted;Q.signal.addEventListener("abort",z,{once:!0});let H=Object.assign(J,{method:Q.method,url:`${Z.pathname}${Z.search}`,headers:h3(Q),socket:{localPort:Number(Z.port)||void 0},destroy(){K()}}),B=200,N=new Headers,M=!1,D=!1,q=!1,C=!1,j=!1,A=!1,E=null,P,R,L=!1,U=new TextEncoder,_=()=>{if(j)return;j=!0,Y.emit("close")},F=new ReadableStream({start(x){E=x},cancel(){C=!0,K(),_()},pull(){if(!A)return;A=!1,Y.emit("drain")}}),T=(x)=>{if(L)return;L=!0,P(x)},I=()=>B!==101&&B!==204&&B!==205&&B!==304,S=()=>{if(M)return;M=!0,T(new Response(I()?F:null,{status:B,headers:N}))},k=(x)=>{if(S(),!I()||!E||D)return!0;let g=typeof x==="string"?U.encode(x):new Uint8Array(x);try{E.enqueue(g)}catch{return!1}return A=(E.desiredSize??0)<=0,!A},y={get headersSent(){return M},get writableEnded(){return D},get writableFinished(){return q},get destroyed(){return C},get writableNeedDrain(){return A},get statusCode(){return B},set statusCode(x){B=x},writeHead(x,g){if(B=x,g){N=new Headers;for(let[r,R0]of Object.entries(g))if(Array.isArray(R0))for(let a0 of R0)N.append(r,a0);else N.set(r,String(R0))}S()},write(x,g,r){let R0=k(x);return(typeof g==="function"?g:r)?.(),R0},end(x){if(x!==void 0)k(x);S(),D=!0,q=!0;try{E?.close()}catch{}Y.emit("finish"),_(),K()},destroy(x){if(C)return y;S(),C=!0,D=!0;try{E?.error(x??Error("Response destroyed"))}catch{}if(x&&Y.listenerCount("error")>0)Y.emit("error",x);return _(),K(),y},on(x,g){return Y.on(x,g),y},once(x,g){return Y.once(x,g),y},off(x,g){return Y.off(x,g),y}},f=new Promise((x,g)=>{P=x,R=g}),u;try{u=Promise.resolve($(H,y,()=>T(void 0)))}catch(x){u=Promise.reject(x)}if(V)z();return u.then(()=>{if(!L&&D)T(new Response(null,{status:B,headers:N}))},(x)=>{if(L)y.destroy(x instanceof Error?x:void 0);else R(x)}),(async()=>{let x=null;try{if(x=Q.body?.getReader()??null,G=x,x)while(!X.signal.aborted){let{done:g,value:r}=await x.read();if(g)break;J.emit("data",Buffer.from(r))}if(!X.signal.aborted)J.emit("end")}catch{K(!0)}finally{if(G===x)G=null;if(x){if(X.signal.aborted)await x.cancel().catch(()=>{});try{x.releaseLock()}catch{}}}})(),f}var DQ=()=>{};var $5={};r8($5,{startCdpServer:()=>KX,startBunCdpServer:()=>MX,listTargets:()=>UX,listDevices:()=>sQ});import{createRequire as g3}from"node:module";import*as fQ from"node:net";import*as gQ from"node:net";import{spawnSync as WY}from"node:child_process";import*as cQ from"node:tls";import*as dQ from"node:http";function l3($){return this[$]}function CQ($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&":Q==="<"?"<":Q===">"?">":Q==="'"?"'":""")}function e3($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function $Y($){let Q=atob($.replace(/\s+/g,"")),Z=new Uint8Array(Q.length);for(let J=0;J<Q.length;J++)Z[J]=Q.charCodeAt(J);return Z}function z8($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${CQ($)}</string>`;if(typeof $==="number"){if(Number.isInteger($))return`${Q}<integer>${$}</integer>`;return`${Q}<real>${$}</real>`}if(typeof $==="bigint")return`${Q}<integer>${$.toString()}</integer>`;if($ instanceof Uint8Array)return`${Q}<data>${e3($)}</data>`;if($ instanceof Date)return`${Q}<date>${$.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray($)){if($.length===0)return`${Q}<array/>`;let Y=$.map((X)=>z8(X,Q+"\t")).join(`
|
|
67
|
+
`,"ascii");Y3={portrait:I4.portrait,portrait_upside_down:I4.portraitUpsideDown,landscape_left:I4.landscapeLeft,landscape_right:I4.landscapeRight};q0=new Map});import{execFileSync as T$}from"child_process";import{createHash as $Q}from"crypto";import{existsSync as Q0,mkdirSync as QQ,readdirSync as G3,readFileSync as A0,renameSync as ZQ,statSync as JQ,unlinkSync as o2}from"fs";import{tmpdir as YQ}from"os";import{basename as XQ,dirname as e6,join as i}from"path";import{inflateSync as K3}from"zlib";function D$($){return $.startsWith(a2)?$.slice(a2.length):$}function Q8($){let Q=typeof $==="string"?$:$.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),X=Number(Z[3]),G=Number(Z[4]),W=Math.abs(X-J),K=Math.abs(G-Y);return W>0&&K>0?{width:W,height:K}:null}function z3($,Q){let Z=D3($);if(Z)return Z;let J=typeof $.framebufferMask==="string"?$.framebufferMask:null;if(!J)return null;let Y=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Y)return null;let X=i(Y,`${J}.pdf`);if(!Q0(X))return null;let G=Q8(A0(X));if(!G)return null;let W=E3(Q);return{width:G.width/W,height:G.height/W}}function KQ($){let Q=Z8($),Z=Q;if(o6.has(Z))return o6.get(Z)??null;let J=M3(Q);return o6.set(Z,J),J}function WQ($){let Q=Z8($);if(a6.has(Q))return a6.get(Q)??null;let Z=V3($);return a6.set(Q,Z),Z}function V3($){let Q=_3($),Z=Q?LQ(Q):null,J=B3(Z)??R3($.name);if(!J)return null;let Y=HQ(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function zQ($,Q){let Z=D$($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){H4(Q,400,"Invalid chrome asset request");return}let Y=_Q(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){H4(Q,404,"Chrome asset not found");return}let X=J8(Z,J);if(!Q0(X)){H4(Q,404,"Chrome asset not found");return}try{let G=BQ(Z,J,X),W=A0(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(W.byteLength)}),Q.end(W)}catch(G){H4(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function VQ($,Q){let Z=$.searchParams.get("name")??"";try{let J=HQ(Z);if(!J){H4(Q,404,"Placeholder asset not found");return}let Y=A0(J.pngPath);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),Q.end(Y)}catch(J){H4(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function HQ($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(t6.has($))return t6.get($)??null;let Q=H3($),Z=Q?C3($,Q):null;return t6.set($,Z),Z}function H3($){let Z=L3($)?.paths.find((Y)=>Q0(Y));if(Z)return Z;if(!UQ().some((Y)=>Y.iconName===$))return null;let J=i(I0,`${$}.icns`);return Q0(J)?J:null}function L3($){return Object.prototype.hasOwnProperty.call(s2,$)?s2[$]:null}function M3($){let Q=MQ($);if(!Q0(Q))return null;let Z=LQ(Q);if(!Z?.chromeIdentifier)return null;let J=_Q(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=s6(J.identifier,J.compositeImage);let X=J.compositeImage?I3(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?q3(Z.framebufferMaskSize,X):null)??Z.screenSize??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!G||G.width<=0||G.height<=0)return null;let W=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},K={x:J.devicePadding.left,y:J.devicePadding.top,width:W.width,height:W.height},z={width:W.width+J.devicePadding.left+J.devicePadding.right,height:W.height+J.devicePadding.top+J.devicePadding.bottom},V={x:K.x+(W.width-G.width)/2,y:K.y+(W.height-G.height)/2,width:G.width,height:G.height},H=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,B=J.slice?s6(J.identifier,J.slice.topLeft):null,N=J.identifier.startsWith("watch"),M=J.buttons.flatMap((D)=>{let q=s6(J.identifier,D.image);if(!q)return[];let C=T3(D,q,W,J.devicePadding),j={x:q.width>0?(D.rolloverOffset.x-D.normalOffset.x)/q.width:0,y:q.height>0?(D.rolloverOffset.y-D.normalOffset.y)/q.height:0};return[{name:D.name,image:D.image,imageDown:D.imageDown,onTop:D.onTop||N,frame:{...C,...q},hover:j,usagePage:D.usagePage,usage:D.usage}]});return{identifier:J.identifier,frame:z,body:K,screen:V,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:H,compositeImage:J.compositeImage,slice:J.slice,corner:B,buttons:M}}function LQ($){let Q=O$($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?D$(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?z3({...Q,__profileDir:e6($)},J):null,framebufferMaskSize:U3({...Q,__profileDir:e6($)})}}function U3($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=i(Z,`${Q}.pdf`);if(!Q0(J))return null;return Q8(A0(J))}function Z8($){return O3($.deviceTypeIdentifier)??$.name}function _3($){let Q=MQ(Z8($));return Q0(Q)?Q:null}function MQ($){return i($8,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function B3($){if(!$)return null;let Q=new Set;if($.modelIdentifier)Q.add($.modelIdentifier);if($.productClass)Q.add($.productClass),Q.add(`${$.productClass}AP`);if(Q.size===0)return null;for(let Z of UQ())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function R3($){let Q=$.toLowerCase();if(Q.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(Q))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(Q))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(Q))return"ipad-air-13-inch-m4";return null}function UQ(){if(r6)return r6;let $=O$(i(I0,"MobileDevices-Info.plist"))??O$(i(e6(I0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=z0(J),X=s(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=i(I0,X);if(!Q0(G))continue;let K=z0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],z=Array.isArray(K)?K.filter((V)=>typeof V==="string"&&V.length>0):[];if(z.length===0)continue;Z.push({description:s(Y.UTTypeDescription)??"",iconFile:X,iconName:XQ(X,".icns"),modelCodes:z})}return r6=Z,Z}function _Q($){let Q=D$($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(i6.has(Q))return i6.get(Q)??null;let Z=i(GQ,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(A0(Z,"utf-8"));J=N3(Y)}catch{J=null}return i6.set(Q,J),J}function N3($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=D$(Q),J=z0($.images),Y=z0(J.sizing),X=z0($.paths),G=O0(z0(X.simpleOutsideBorder).cornerRadiusX),W={top:O0(Y.topHeight),left:O0(Y.leftWidth),bottom:O0(Y.bottomHeight),right:O0(Y.rightWidth)},K=z0(J.devicePadding),z={top:O0(K.top),left:O0(K.left),bottom:O0(K.bottom),right:O0(K.right)},V=typeof J.composite==="string"?J.composite:null,H=F3(J),B=Array.isArray($.inputs)?$.inputs.flatMap((M)=>{let D=j3(z0(M));return D?[D]:[]}):[],N=new Set;for(let M of Object.values(J))if(typeof M==="string")N.add(M);for(let M of B)N.add(M.image);if(Array.isArray($.inputs))for(let M of $.inputs){let D=z0(M);if(typeof D.imageDown==="string")N.add(D.imageDown)}return{identifier:Z,insets:W,devicePadding:z,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(W.left,W.top),0),compositeImage:V,slice:H,buttons:B,allowedImages:N}}function F3($){let Q=s($.topLeft),Z=s($.top),J=s($.topRight),Y=s($.right),X=s($.bottomRight),G=s($.bottom),W=s($.bottomLeft),K=s($.left);if(!Q||!Z||!J||!Y||!X||!G||!W||!K)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:W,left:K}}function j3($){let Q=s($.name),Z=s($.image);if(!Q||!Z)return null;let J=s($.anchor),Y=s($.align),X=z0($.offsets),G=e2(z0(X.normal)),W=e2(z0(X.rollover));return{name:Q,image:Z,imageDown:s($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??W??{x:0,y:0},rolloverOffset:W??G??{x:0,y:0},usagePage:x0($.usagePage),usage:x0($.usage)}}function T3($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,W=2*$.normalOffset.y-$.rolloverOffset.y,K=$.align==="trailing"?Y+Z.width+G-Q.width:Y+G;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+G,y:X+W};case"top":return{x:K,y:X+W-Q.height};case"bottom":return{x:K,y:X+Z.height+W}}}function O3($){if(!$)return null;if(!d6)d6=A3();return d6.get($)??null}function A3(){let $=new Map;try{for(let Q of G3($8)){if(!Q.endsWith(".simdevicetype"))continue;let Z=i($8,Q),J=O$(i(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:XQ(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function O$($){try{let Q=T$("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function D3($){let Q=x0($.mainScreenWidth),Z=x0($.mainScreenHeight),J=x0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function E3($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function s6($,Q){let Z=J8($,Q);if(!Q0(Z))return null;return Q8(A0(Z))}function J8($,Q){return i(GQ,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function BQ($,Q,Z){QQ(r2,{recursive:!0});let J=JQ(Z),Y=$Q("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=i(r2,`${$}-${Y}.png`);if(Q0(X))return X;let G=`${X}.${process.pid}.tmp`;return T$("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),ZQ(G,X),X}function C3($,Q){QQ(t2,{recursive:!0});let Z=JQ(Q),J=$Q("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=i(t2,`${$}-${J}.png`);if(Q0(Y)){let W=A$(A0(Y));return{sourcePath:Q,pngPath:Y,width:W.width,height:W.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{T$("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let W=A0(G),K=P3(W)??{x:0,y:0,...A$(W)};return T$("sips",["-c",String(K.height),String(K.width),"--cropOffset",String(K.y),String(K.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),ZQ(X,Y),{sourcePath:Q,pngPath:Y,width:K.width,height:K.height}}finally{try{if(Q0(G))o2(G)}catch{}try{if(Q0(X))o2(X)}catch{}}}function A$($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function RQ($,Q){let{width:Z,height:J}=A$($),Y=8,X=0,G=0,W=[];while(Y<$.byteLength){let D=$.readUInt32BE(Y);Y+=4;let q=$.toString("ascii",Y,Y+4);Y+=4;let C=$.subarray(Y,Y+D);if(Y+=D+4,q==="IHDR")X=C[8]??0,G=C[9]??0;else if(q==="IDAT")W.push(C);else if(q==="IEND")break}let K=G===6?4:G===4?2:0;if(X!==8||K===0||W.length===0)return null;let z=G===6,V=K3(Buffer.concat(W)),H=Z*K,B=new Uint8Array(Z*J),N=Buffer.alloc(H),M=0;for(let D=0;D<J;D++){let q=V[M++]??0,C=Buffer.from(V.subarray(M,M+H));M+=H,S3(C,N,K,q);for(let j=0;j<Z;j++){let A=j*K,E=C[A]??0,P=z?C[A+1]??0:E,R=z?C[A+2]??0:E,L=C[A+K-1]??0;if(Q(E,P,R,L))B[D*Z+j]=1}N=C}return{width:Z,height:J,mask:B}}function P3($){let{width:Q,height:Z}=A$($),J=RQ($,(K,z,V,H)=>H>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,W=-1;for(let K=0;K<Z;K++)for(let z=0;z<Q;z++){if(!J.mask[K*Q+z])continue;if(z<Y)Y=z;if(K<X)X=K;if(z>G)G=z;if(K>W)W=K}if(G<Y||W<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:W-X+1}}function q3($,Q){if(Q.width<=0)return null;let Z=Math.max(1,Math.round($.width/Q.width));return{width:$.width/Z,height:$.height/Z}}function I3($,Q){let Z=x3($,Q);if(!Z)return null;let J=RQ(Z,(j,A,E,P)=>P>200&&j<30&&A<30&&E<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,W=Math.floor(Y/2),K=Math.floor(X/2),z=(j,A)=>j>=0&&A>=0&&j<Y&&A<X&&G[A*Y+j]===1;if(!z(W,K))return null;let V=W;while(V>0&&z(V-1,K))V--;let H=W;while(H<Y-1&&z(H+1,K))H++;let B=K;while(B>0&&z(W,B-1))B--;let N=K;while(N<X-1&&z(W,N+1))N++;let M=N-B,D=(j,A)=>{let E=0;while(E<M&&!z(j,A?B+E:N-E))E++;return E},q=[D(V,!0),D(H,!0),D(V,!1),D(H,!1)],C=q.reduce((j,A)=>j+A,0)/q.length;return{x:V,y:B,width:H-V+1,height:N-B+1,radius:C}}function x3($,Q){let Z=J8($,Q);if(!Q0(Z))return null;try{return A0(BQ($,Q,Z))}catch{return null}}function S3($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,W=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+G&255;break;case 3:$[Y]=$[Y]+Math.floor((X+G)/2)&255;break;case 4:$[Y]=$[Y]+w3(X,G,W)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function w3($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),G=Math.abs(J-Z);if(Y<=X&&Y<=G)return $;return X<=G?Q:Z}function H4($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function O0($){return x0($)??0}function x0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function s($){return typeof $==="string"&&$?$:null}function z0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function e2($){let Q=x0($.x),Z=x0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}var $8="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",GQ="/Library/Developer/DeviceKit/Chrome",a2="com.apple.dt.devicekit.chrome.",r2,t2,I0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",W3="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",s2,d6=null,i6,o6,a6,r6=null,t6;var NQ=d(()=>{r2=i(YQ(),"serve-sim-devicekit-chrome"),t2=i(YQ(),"serve-sim-device-placeholder-assets"),s2={"vision-pro":{paths:[i(I0,"com.apple.vision-pro.icns"),i(W3,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[i(I0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[i(I0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[i(I0,"com.apple.ipad-air-m3-1.icns")]}},i6=new Map,o6=new Map,a6=new Map,t6=new Map});import{exec as k3}from"child_process";import{createHash as FQ,timingSafeEqual as y3}from"crypto";function b3($,Q){let Z=FQ("sha256").update($).digest(),J=FQ("sha256").update(Q).digest();return y3(Z,J)}function v3($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(z)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(z))},W=setTimeout(()=>{if(!J)$.close()},f3);W.unref?.();let K=(z,V)=>{if(Y.has(z))return;let H=V.split("?")[0];if(!V.startsWith("/")||!X.some((C)=>H===C)){G({sub:z,end:!0,error:"path not allowed"});return}if(!Z.onSseRequest){G({sub:z,end:!0,error:"sse requests not supported"});return}let B=!0,N=!1,M=null,D=(C)=>{if(N)return;N=!0,G(C?{sub:z,end:!0,error:C}:{sub:z,end:!0})},q={destroy(){B=!1,M?.cancel().catch(()=>{})}};Y.set(z,q),(async()=>{try{let C=await Z.onSseRequest(V,Q);if(!B)return;if(!C?.body){D();return}let j=new TextDecoder;M=C.body.getReader();while(B){let{done:A,value:E}=await M.read();if(A)break;G({sub:z,data:j.decode(E,{stream:!0})})}if(B){let A=j.decode();if(A)G({sub:z,data:A})}}catch{if(B)D();return}finally{if(B=!1,M)try{M.releaseLock()}catch{}if(Y.get(z)===q)Y.delete(z),D()}})()};$.on("message",(z)=>{let V;try{V=JSON.parse(N9(z))}catch{return}if(!J){if(typeof V.token==="string"&&b3(V.token,Z.execToken))J=!0,clearTimeout(W),G({ready:!0});else $.close();return}if(typeof V.unsub==="number"){Y.get(V.unsub)?.destroy(),Y.delete(V.unsub);return}if(typeof V.sub==="number"&&typeof V.path==="string"){K(V.sub,V.path);return}if(typeof V.id==="number"&&V.ui!==void 0){let{id:N}=V;if(!Z.onUiRequest){G({id:N,error:"ui requests not supported"});return}Z.onUiRequest(V.ui).then((M)=>G({id:N,...M})).catch((M)=>G({id:N,error:M instanceof Error?M.message:String(M)}));return}if(typeof V.id!=="number"||typeof V.command!=="string"||!V.command)return;let{id:H,command:B}=V;k3(B,{maxBuffer:16777216},(N,M,D)=>{let q={id:H,stdout:M.toString(),stderr:D.toString(),exitCode:N?N.code??1:0};try{Z.onCommandResult?.(B,q)}catch{}G(q)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(W);for(let z of Y.values())z.destroy();Y.clear()})}function jQ($){return function(Z,J){let Y=new URL(Z.url);if(Y.pathname!==$.path&&Y.pathname!==`${$.path}/`)return!1;let X=Z.headers.get("origin");if(X)try{if(new URL(X).host!==F9(Z))return J.close(),!0}catch{return J.close(),!0}return v3(J,Z,$),!0}}var f3=1e4;var TQ=()=>{};import{EventEmitter as OQ}from"events";function h3($){let Q={};if($.headers.forEach((Z,J)=>{Q[J.toLowerCase()]=Z}),!Q.host)Q.host=new URL($.url).host;return Q}function AQ($,Q){let Z=new URL(Q.url),J=new OQ,Y=new OQ,X=new AbortController,G=null,W=!1,K=(x=!1)=>{if(W)return;if(W=!0,X.abort(),G?.cancel().catch(()=>{}),Q.signal.removeEventListener("abort",z),x)J.emit("aborted");J.emit("close")},z=()=>K(!0),V=Q.signal.aborted;Q.signal.addEventListener("abort",z,{once:!0});let H=Object.assign(J,{method:Q.method,url:`${Z.pathname}${Z.search}`,headers:h3(Q),socket:{localPort:Number(Z.port)||void 0},destroy(){K()}}),B=200,N=new Headers,M=!1,D=!1,q=!1,C=!1,j=!1,A=!1,E=null,P,R,L=!1,U=new TextEncoder,_=()=>{if(j)return;j=!0,Y.emit("close")},F=new ReadableStream({start(x){E=x},cancel(){C=!0,K(),_()},pull(){if(!A)return;A=!1,Y.emit("drain")}}),T=(x)=>{if(L)return;L=!0,P(x)},I=()=>B!==101&&B!==204&&B!==205&&B!==304,S=()=>{if(M)return;M=!0,T(new Response(I()?F:null,{status:B,headers:N}))},k=(x)=>{if(S(),!I()||!E||D)return!0;let g=typeof x==="string"?U.encode(x):new Uint8Array(x);try{E.enqueue(g)}catch{return!1}return A=(E.desiredSize??0)<=0,!A},y={get headersSent(){return M},get writableEnded(){return D},get writableFinished(){return q},get destroyed(){return C},get writableNeedDrain(){return A},get statusCode(){return B},set statusCode(x){B=x},writeHead(x,g){if(B=x,g){N=new Headers;for(let[r,R0]of Object.entries(g))if(Array.isArray(R0))for(let a0 of R0)N.append(r,a0);else N.set(r,String(R0))}S()},write(x,g,r){let R0=k(x);return(typeof g==="function"?g:r)?.(),R0},end(x){if(x!==void 0)k(x);S(),D=!0,q=!0;try{E?.close()}catch{}Y.emit("finish"),_(),K()},destroy(x){if(C)return y;S(),C=!0,D=!0;try{E?.error(x??Error("Response destroyed"))}catch{}if(x&&Y.listenerCount("error")>0)Y.emit("error",x);return _(),K(),y},on(x,g){return Y.on(x,g),y},once(x,g){return Y.once(x,g),y},off(x,g){return Y.off(x,g),y}},f=new Promise((x,g)=>{P=x,R=g}),u;try{u=Promise.resolve($(H,y,()=>T(void 0)))}catch(x){u=Promise.reject(x)}if(V)z();return u.then(()=>{if(!L&&D)T(new Response(null,{status:B,headers:N}))},(x)=>{if(L)y.destroy(x instanceof Error?x:void 0);else R(x)}),(async()=>{let x=null;try{if(x=Q.body?.getReader()??null,G=x,x)while(!X.signal.aborted){let{done:g,value:r}=await x.read();if(g)break;J.emit("data",Buffer.from(r))}if(!X.signal.aborted)J.emit("end")}catch{K(!0)}finally{if(G===x)G=null;if(x){if(X.signal.aborted)await x.cancel().catch(()=>{});try{x.releaseLock()}catch{}}}})(),f}var DQ=()=>{};var $5={};r8($5,{startCdpServer:()=>KX,startBunCdpServer:()=>MX,listTargets:()=>UX,listDevices:()=>sQ});import{createRequire as g3}from"node:module";import*as fQ from"node:net";import*as gQ from"node:net";import{spawnSync as WY}from"node:child_process";import*as cQ from"node:tls";import*as dQ from"node:http";function l3($){return this[$]}function CQ($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&":Q==="<"?"<":Q===">"?">":Q==="'"?"'":""")}function e3($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function $Y($){let Q=atob($.replace(/\s+/g,"")),Z=new Uint8Array(Q.length);for(let J=0;J<Q.length;J++)Z[J]=Q.charCodeAt(J);return Z}function z8($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${CQ($)}</string>`;if(typeof $==="number"){if(Number.isInteger($))return`${Q}<integer>${$}</integer>`;return`${Q}<real>${$}</real>`}if(typeof $==="bigint")return`${Q}<integer>${$.toString()}</integer>`;if($ instanceof Uint8Array)return`${Q}<data>${e3($)}</data>`;if($ instanceof Date)return`${Q}<date>${$.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray($)){if($.length===0)return`${Q}<array/>`;let Y=$.map((X)=>z8(X,Q+"\t")).join(`
|
|
68
68
|
`);return`${Q}<array>
|
|
69
69
|
${Y}
|
|
70
70
|
${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${CQ(Y)}</key>
|
|
@@ -73,12 +73,12 @@ ${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.m
|
|
|
73
73
|
${J}
|
|
74
74
|
${Q}</dict>`}function R8($){let Q=z8($,"");return new TextEncoder().encode(t3+Q+s3)}class bQ{src;pos=0;constructor($){this.src=$}skip(){while(this.pos<this.src.length){let $=this.src[this.pos];if($===" "||$==="\t"||$===`
|
|
75
75
|
`||$==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let Q=this.src.indexOf("-->",this.pos+4);if(Q<0)throw Error("unterminated comment");this.pos=Q+3}else if(this.src.startsWith("<?",this.pos)){let Q=this.src.indexOf("?>",this.pos+2);if(Q<0)throw Error("unterminated processing instruction");this.pos=Q+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let Q=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")Q++;else if(Z==="]")Q--;else if(Z===">"&&Q===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let $=this.src.indexOf(">",this.pos);if($<0)throw Error("unterminated tag");let Q=this.src.slice(this.pos+1,$);this.pos=$+1;let Z=Q.startsWith("/"),J=Q.endsWith("/");return{name:Q.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let $=this.src.indexOf("<",this.pos),Q=$<0?this.src.slice(this.pos):this.src.slice(this.pos,$);return this.pos=$<0?this.src.length:$,Q.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}}function V8($,Q){let Z=(J)=>{let Y=$.nextTag();if(!Y||!Y.isClose||Y.name!==J)throw Error(`expected </${J}>`)};switch(Q){case"true":case"false":throw Error(`<${Q}> must be self-closing`);case"string":case"key":{let J=$.readText();return Z(Q),J}case"integer":{let J=$.readText().trim();if(Z("integer"),/^-?\d+$/.test(J)&&Math.abs(Number(J))<=Number.MAX_SAFE_INTEGER)return Number(J);return BigInt(J)}case"real":{let J=Number($.readText().trim());return Z("real"),J}case"data":{let J=$Y($.readText());return Z("data"),J}case"date":{let J=new Date($.readText().trim());return Z("date"),J}case"array":{let J=[];while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <array>");if(Y.isClose&&Y.name==="array")return J;J.push(Y.selfClose?H8(Y.name):V8($,Y.name))}}case"dict":{let J={};while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <dict>");if(Y.isClose&&Y.name==="dict")return J;if(Y.name!=="key")throw Error(`expected <key>, got <${Y.name}>`);let X=$.readText();Z("key");let G=$.nextTag();if(!G)throw Error("unterminated <dict>");J[X]=G.selfClose?H8(G.name):V8($,G.name)}}default:throw Error(`unknown plist tag <${Q}>`)}}function H8($){if($==="true")return!0;if($==="false")return!1;if($==="string")return"";if($==="data")return new Uint8Array(0);if($==="array")return[];if($==="dict")return{};throw Error(`self-closing <${$}/> not supported`)}function P$($){let Q=typeof $==="string"?$:new TextDecoder().decode($),Z=new bQ(Q);while(!0){let Y=Z.nextTag();if(!Y)throw Error("no <plist> root");if(Y.name==="plist"&&!Y.isClose)break}let J=Z.nextTag();if(!J)throw Error("empty plist");return J.selfClose?H8(J.name):V8(Z,J.name)}function c0($,Q,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+$[Q+Y];return J}function QY($){if($.length<41)throw Error("bplist too short");let Q=new TextDecoder().decode($.slice(0,8));if(Q!=="bplist00")throw Error(`bad magic: ${Q}`);let Z=$.length-32,J=$[Z+6],Y=$[Z+7],X=c0($,Z+8,8),G=c0($,Z+16,8),W=c0($,Z+24,8),K=Array(X);for(let H=0;H<X;H++)K[H]=c0($,W+H*J,J);function z(H){return c0($,H,Y)}function V(H){let B=K[H],N=$[B],M=N>>4,D=N&15;function q(C){if(D!==15)return{len:D,next:C};let j=$[C];if((j&240)!==16)throw Error("expected int marker for length");let A=1<<(j&15);return{len:c0($,C+1,A),next:C+1+A}}switch(M){case 0:if(D===0)return null;if(D===8)return!1;if(D===9)return!0;if(D===15)return null;throw Error(`unknown singleton ${D}`);case 1:{let C=1<<D,j=c0($,B+1,C);if(C===8&&j>Number.MAX_SAFE_INTEGER)return BigInt(j);return j}case 2:{let C=1<<D,j=new DataView($.buffer,$.byteOffset+B+1,C);return C===4?j.getFloat32(0,!1):j.getFloat64(0,!1)}case 3:{let j=new DataView($.buffer,$.byteOffset+B+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+j*1000)}case 4:{let{len:C,next:j}=q(B+1);return $.slice(j,j+C)}case 5:{let{len:C,next:j}=q(B+1);return new TextDecoder("ascii").decode($.slice(j,j+C))}case 6:{let{len:C,next:j}=q(B+1),A=$.slice(j,j+C*2),E=new Uint8Array(A.length);for(let P=0;P<A.length;P+=2)E[P]=A[P+1],E[P+1]=A[P];return new TextDecoder("utf-16le").decode(E)}case 10:{let{len:C,next:j}=q(B+1),A=[];for(let E=0;E<C;E++)A.push(V(z(j+E*Y)));return A}case 13:{let{len:C,next:j}=q(B+1),A={};for(let E=0;E<C;E++){let P=V(z(j+E*Y)),R=V(z(j+(C+E)*Y));if(typeof P!=="string")throw Error(`non-string dict key: ${typeof P}`);A[P]=R}return A}default:throw Error(`unknown bplist marker 0x${N.toString(16)} at ${B}`)}}return V(G)}function ZY($){if($.length>=8){if(new TextDecoder().decode($.slice(0,8))==="bplist00")return QY($)}return P$($)}class q${chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push($){if($.length===0)return;this.chunks.push($),this.size+=$.length,this.drain()}close($){this.closed=!0,this.closeErr=$??null;for(let Q of this.waiters)Q.reject($??Error("stream closed"));this.waiters=[]}read($){return new Promise((Q,Z)=>{if(this.closed&&this.size<$){Z(this.closeErr??Error("stream closed"));return}this.waiters.push({n:$,resolve:Q,reject:Z}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let $=this.waiters.shift(),Q=new Uint8Array($.n),Z=0;while(Z<$.n){let J=this.chunks[0],Y=$.n-Z;if(J.length<=Y)Q.set(J,Z),Z+=J.length,this.chunks.shift();else Q.set(J.subarray(0,Y),Z),this.chunks[0]=J.subarray(Y),Z+=Y}this.size-=$.n,$.resolve(Q)}}}function N8($,Q){let Z=(X)=>{Q.push(new Uint8Array(X.buffer,X.byteOffset,X.byteLength))},J=()=>Q.close(),Y=(X)=>Q.close(X);return $.on("data",Z),$.on("close",J),$.on("error",Y),()=>{$.off("data",Z),$.off("close",J),$.off("error",Y)}}async function F8(){let $=new q$;return new Promise((Q,Z)=>{let J=fQ.createConnection({path:XY}),Y=(X)=>{$.close(X),Z(X)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let X=N8(J,$);Q({socket:J,stream:$,detach:X})})})}async function GY($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!0);return(await $.read(Z-4)).slice(12)}function KY($,Q,Z){let J=16+Z.length,Y=new Uint8Array(16),X=new DataView(Y.buffer);X.setUint32(0,J,!0),X.setUint32(4,JY,!0),X.setUint32(8,YY,!0),X.setUint32(12,Q,!0),$.write(Y),$.write(Z)}async function j8($,Q,Z,J){let Y=R8({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});KY($,Z,Y);let X=await GY(Q);return P$(X)}async function vQ(){let{socket:$,stream:Q}=await F8();try{return(await j8($,Q,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{$.end()}}async function hQ($){let{socket:Q,stream:Z}=await F8();try{let Y=(await j8(Q,Z,1,{MessageType:"ReadPairRecord",PairRecordID:$})).PairRecordData;if(!Y)throw Error(`no pair record for ${$} — pair the device first (open Finder/iTunes, tap "Trust")`);return P$(Y)}finally{Q.end()}}async function PQ($,Q){let{socket:Z,stream:J,detach:Y}=await F8(),X=(Q&255)<<8|Q>>8&255,G=await j8(Z,J,1,{MessageType:"Connect",DeviceID:$,PortNumber:X});if(G.MessageType!=="Result"||G.Number!==0){Z.end();let W=G.Number??"?";throw Error(`Connect to device ${$} port ${Q} failed (code ${W})`)}return{socket:Z,stream:J,detach:Y}}async function uQ(){let $=WY("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if($.status!==0||!$.stdout)return[];let Q=$.stdout.toString("utf8"),Z=new Map;for(let J of Q.split(`
|
|
76
|
-
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),X=Number(Y[1]),G=Y[Y.length-1];if(G)Z.set(G,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function mQ($){let Q=new q$;return new Promise((Z,J)=>{let Y=gQ.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),N8(Y,Q),Z({socket:Y,stream:Q})})})}async function Y8($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return P$(J)}function X8($,Q){let Z=R8({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function G8($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function IQ($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new q$,W=cQ.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),K=(z)=>{z0(`${J} tls error:`,z),G.close(z),X(z)};W.once("error",K),W.once("secureConnect",()=>{z0(`${J} tls handshake complete`),W.off("error",K);let z=N8(W,G);Y({socket:W,stream:G,detach:z})})})}class I${socket;stream;pair;udid;deviceID;detach;constructor($,Q,Z,J,Y,X){this.socket=$,this.stream=Q,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=X}static async open($,Q){z0("connecting usbmux tunnel to lockdown port",qQ);let{socket:Z,stream:J,detach:Y}=await PQ($.DeviceID,qQ),X=new I$(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);z0("sending QueryType"),X8(Z,{Request:"QueryType"});let G=await Y8(J);if(z0("QueryType reply:",G),G8(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){z0("StartSession with HostID",this.pair.HostID),X8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await Y8(this.stream);if(z0("StartSession reply:",$),G8($,"StartSession"),$.EnableSessionSSL){z0("upgrading to TLS");let Q=await IQ(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,z0("TLS upgrade complete")}}async startService($){z0("StartService",$),X8(this.socket,{Request:"StartService",Service:$});let Q=await Y8(this.stream);return z0("StartService reply:",Q),G8(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){z0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await PQ(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await IQ(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function zY($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return ZY(J)}function VY($,Q){let Z=R8(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function HY(){let $=crypto.getRandomValues(new Uint8Array(16));$[6]=$[6]&15|64,$[8]=$[8]&63|128;let Q=Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${Q.slice(0,8)}-${Q.slice(8,12)}-${Q.slice(12,16)}-${Q.slice(16,20)}-${Q.slice(20)}`}class f4{socket;stream;connectionId=HY();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await zY(Q);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe($){return this.subscribers.add($),()=>this.subscribers.delete($)}waitFor($,Q=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{X(),J(Error(`timeout waiting for ${$} after ${Q}ms`))},Q),X=this.subscribe((G)=>{if(G.__selector===$)clearTimeout(Y),X(),Z(G)})})}send($,Q){VY(this.socket,{__selector:$,__argument:{WIRConnectionIdentifierKey:this.connectionId,...Q}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let $=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!$)return[];let Z=$.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,X]of Object.entries(Z)){let G=X;J.push({appId:Y,bundleId:G.WIRApplicationBundleIdentifierKey,name:G.WIRApplicationNameKey,isProxy:Boolean(G.WIRIsApplicationProxyKey),isActive:Boolean(G.WIRIsApplicationActiveKey),hostAppId:G.WIRHostApplicationIdentifierKey})}return J}async getListing($){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$});let Q=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!Q)return[];let J=Q.__argument.WIRListingKey??{},Y=[];for(let X of Object.values(J)){let G=X;Y.push({pageId:Number(G.WIRPageIdentifierKey??0),title:G.WIRTitleKey??"",url:G.WIRURLKey??"",type:G.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup($,Q,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData($,Q,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose($,Q,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z})}onMessage($){return this.subscribe($)}close(){this.socket.end()}}class E${ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor($,Q,Z,J,Y){this.ws=$,this.wi=Q,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter($,Q){let Z=this.filters.get($);if(!Z)this.filters.set($,Z=[]);Z.push(Q)}callTarget($,Q={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:$,params:Q}))})}fireEventToTools($,Q){this.sendToTools(JSON.stringify({method:$,params:Q}))}fireResultToTools($,Q){this.sendToTools(JSON.stringify({id:$,result:Q}))}fireErrorToTools($,Q){this.sendToTools(JSON.stringify({id:$,error:{code:Q.code??-32000,message:Q.message}}))}replyEmpty($){if(typeof $.id==="number")this.fireResultToTools($.id,{});return Promise.resolve(null)}async onMessageFromTools($){let Q;try{Q=JSON.parse($)}catch{return}if(typeof Q.method==="string"&&typeof Q.id==="number")this.toolRequestMap.set(Q.id,Q.method);let Z=`tools::${Q.method}`,J=this.filters.get(Z),Y=Q;if(J)for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget($){let Q;try{Q=JSON.parse($)}catch{return}if(Q.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let X=Q.params?.targetInfo;if(X?.type==="page"&&!this.innerTargetId)this.innerTargetId=X.targetId,this.flushQueue();return}if(Q.method==="Target.didCommitProvisionalTarget"){let X=Q.params?.newTargetId;if(typeof X==="string")this.innerTargetId=X;return}if(Q.method==="Target.targetDestroyed")return;if(Q.method==="Target.dispatchMessageFromTarget"){let X=Q.params?.message;if(typeof X==="string")return this.onMessageFromTarget(X);return}if(typeof Q.id==="number"&&this.wrappedAckIds.has(Q.id)){this.wrappedAckIds.delete(Q.id);return}if(typeof Q.id==="number"){let X=this.adapterRequestMap.get(Q.id);if(X){if(this.adapterRequestMap.delete(Q.id),"error"in Q&&Q.error)X.reject(Q.error);else X.resolve(Q.result??{});return}let G=this.toolRequestMap.get(Q.id);if(G){this.toolRequestMap.delete(Q.id);let W=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))W="target::error";let K=this.filters.get(W);if(!K)return this.sendToTools($);let z=Q;for(let V of K){if(!z)break;z=await V(z)}if(z)this.sendToTools(JSON.stringify(z));return}return this.sendToTools($)}let Z=`target::${Q.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools($);let Y=Q;for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw($){let Q=null;try{Q=JSON.parse($)}catch{}let Z=Q&&typeof Q.method==="string"&&Q.method.startsWith("Target.");if(this.innerTargetId&&Q&&!Z){if(typeof Q.id==="number")this.wrappedAckIds.add(Q.id);let J={id:Q.id,method:"Target.sendMessageToTarget",params:{id:Q.id,message:$,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&Q&&!Z){if(this.outgoingQueue.push($),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame($)}flushQueue(){if(this.outgoingQueue.length===0)return;let $=this.outgoingQueue;this.outgoingQueue=[];for(let Q of $)this.sendRaw(Q)}writeFrame($){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode($))}sendToTools($){if(this.ws.readyState===1)this.ws.send($)}}function MY(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function v($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function UY($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>v($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>v($,Z,{})),$.addMessageFilter("target::Debugger.enable",(Z)=>{return $.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),$.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)Q.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])$.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));$.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let X of Y.scopeChain)if(!X.object&&X.value)X.object=X.value}}return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function _Y($,Q){$.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),X=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!Q.pageExecCtx.id||X&&!Q.pageExecCtx.isPage)Q.pageExecCtx.id=Y,Q.pageExecCtx.isPage=X}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return v($,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:Q.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:Q.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((X)=>X.isOwn||X.nativeGetter).map((X)=>({...X,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((X)=>({name:X.name,value:X.value}));return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.compileScript",(Z)=>v($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>v($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>v($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>v($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),$.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return $.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function BY($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.enable",(Z)=>{return $.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},X=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((K)=>({functionName:K.functionName??"",scriptId:K.scriptId??"",url:K.url??"",lineNumber:Number(K.lineNumber??0),columnNumber:Number(K.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,W=Date.now();if(J.source==="console-api"){let K=J.type==="log"?J.level??"log":J.type??"log",z=RY(K),V=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],H={type:z,args:V,executionContextId:Q.pageExecCtx.id||1,timestamp:W,stackTrace:G};return Q.lastConsoleApiCalled.value=H,$.fireEventToTools("Runtime.consoleAPICalled",H),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:W,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:Q.lastScriptEval.value,url:J.url,stackTrace:G,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:NY(J.level??J.type??"log"),text:String(J.text??""),timestamp:W,url:J.url,lineNumber:J.line,stackTrace:G,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),$.addMessageFilter("target::Console.messagesCleared",()=>{return $.fireEventToTools("Log.entriesCleared",{}),$.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:Q.pageExecCtx.id||1,timestamp:Date.now()}),Q.lastConsoleApiCalled.value=null,Promise.resolve(null)}),$.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=Q.lastConsoleApiCalled.value;if(Z)$.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),$.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function RY($){switch($){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return $;default:return"log"}}function NY($){switch($){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function FY($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>v($,Z,{})),$.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),$.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")Q.add(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")Q.delete(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((X)=>$.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:X}).then((G)=>G.nodeId).catch(()=>X)));return $.fireResultToTools(Z.id,{nodeIds:Y}),null}),$.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{return $.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),$.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await $.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return $.fireResultToTools(Z.id,{nodeId:0}),null;let X=await $.callTarget("DOM.requestNode",{objectId:Y});$.fireResultToTools(Z.id,{nodeId:X.nodeId,backendNodeId:X.nodeId})}catch(J){$.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),$.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function jY($){$.addMessageFilter("tools::DOMDebugger.getEventListeners",async(Q)=>{try{let Z=await $.callTarget("DOM.requestNode",{objectId:Q.params?.objectId}),Y=((await $.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((X)=>({type:X.type,useCapture:!!X.useCapture,passive:!!X.passive,once:!!X.once,location:X.location,handler:X.handler}));$.fireResultToTools(Q.id,{listeners:Y})}catch(Z){$.fireErrorToTools(Q.id,{message:Z?.message??String(Z)})}return null}),$.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>v($,Q,{}))}function TY($,Q){$.addMessageFilter("tools::Page.setOverlayMessage",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.configureOverlay",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.getNavigationHistory",async(X)=>{try{let G=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),W=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:W.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return lQ(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return L8(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let G=await $.callTarget("Page.getResourceTree",{}),W=nQ(G?.frameTree);L8(W),$.fireResultToTools(X.id,{frameTree:W})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return v($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>v($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>v($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.captureScreenshot",(X)=>{return $.fireErrorToTools(X.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),$.addMessageFilter("tools::Page.startScreencast",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>v($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let G=X.params?.frame;if(G)Y=G.id??Y,J=G.loaderId??J,$.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(X)}),$.addMessageFilter("target::Page.domContentEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:X.params?.timestamp??0}),Promise.resolve(X)}),$.addMessageFilter("target::Page.loadEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(X)})}function lQ($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function L8($){if(!$)return;if(lQ($.frame),Array.isArray($.childFrames))$.childFrames.forEach(L8)}function nQ($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(nQ);return Q}function OY($){$.addMessageFilter("tools::Overlay.enable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Overlay.highlightNode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.highlightNode",Q.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightFrame",(Q)=>{return Q.method="DOM.highlightFrame",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightQuad",(Q)=>{return Q.method="DOM.highlightQuad",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightRect",(Q)=>{return Q.method="DOM.highlightRect",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.hideHighlight",(Q)=>{return Q.method="DOM.hideHighlight",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setInspectMode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.setInspectModeEnabled",Q.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve(Q)})}function AY($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>v($,Q,{result:!0})),$.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(Q)=>{return Q.method="Page.setTouchEmulationEnabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(Q)=>{return Q.method="Page.setScriptExecutionDisabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setEmulatedMedia",(Q)=>{return Q.method="Page.setEmulatedMedia",Promise.resolve(Q)}),$.addMessageFilter("tools::Rendering.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.setUserAgentOverride",(Q)=>{let Z=Q.params?.userAgent??"";return Q.method="Page.overrideUserAgent",Q.params={value:Z},Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>v($,Q,{}))}function K8($){switch($){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return $;case"StyleSheet":return"Stylesheet";default:return"Other"}}function SY($){if(!$)return $;return{...IY,...$,hasPostData:$.postData!=null}}function wY($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...xY,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function kY($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function yY($){let Q=typeof $.size==="number"?$.size:($.name?.length??0)+($.value?.length??0);return{name:$.name,value:$.value,domain:$.domain,path:$.path,expires:$.expires??-1,size:Q,httpOnly:!!$.httpOnly,secure:!!$.secure,session:!!$.session,...$.sameSite?{sameSite:$.sameSite}:{}}}function fY($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),W=(z)=>{let V=G.then(z,z);return G=V.catch(()=>{}),V};for(let[z,V]of Object.entries(DY))$.addMessageFilter(`tools::${z}`,(H)=>{return H.method=V,Promise.resolve(H)});$.addMessageFilter("tools::Network.setCacheDisabled",(z)=>{if(z.params&&"cacheDisabled"in z.params)z.params={disabled:!!z.params.cacheDisabled};return Promise.resolve(z)});let K=async(z)=>{try{let V=await $.callTarget("Page.getCookies",{}),H=Array.isArray(V?.cookies)?V.cookies.map(yY):[];$.fireResultToTools(z.id,{cookies:H})}catch(V){$.fireErrorToTools(z.id,{message:V?.message??String(V)})}return null};$.addMessageFilter("tools::Network.getCookies",K),$.addMessageFilter("tools::Network.getAllCookies",K),$.addMessageFilter("tools::Network.setCookie",(z)=>{let V=z.params??{};return z.method="Page.setCookie",z.params={cookie:{name:V.name,value:V.value,domain:V.domain??"",path:V.path??"/",expires:V.expires??-1,session:!1,httpOnly:!!V.httpOnly,secure:!!V.secure,sameSite:V.sameSite??"None"}},Promise.resolve(z)}),$.addMessageFilter("tools::Network.setCookies",async(z)=>{let V=Array.isArray(z.params?.cookies)?z.params.cookies:[];try{await Promise.all(V.map((H)=>$.callTarget("Page.setCookie",{cookie:H}))),$.fireResultToTools(z.id,{})}catch(H){$.fireErrorToTools(z.id,{message:H?.message??String(H)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(z)=>{let V=z.params??{},H=V.url??`https://${(V.domain??"").replace(/^\./,"")}${V.path??"/"}`;return z.method="Page.deleteCookie",z.params={cookieName:V.name,url:H},Promise.resolve(z)}),$.addMessageFilter("tools::Network.deleteCookie",(z)=>{return z.method="Page.deleteCookie",Promise.resolve(z)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(z)=>{try{let V=await $.callTarget("Page.getCookies",{}),H=Array.isArray(V?.cookies)?V.cookies:[];await Promise.all(H.map((B)=>$.callTarget("Page.deleteCookie",{cookieName:B.name,url:`${B.secure?"https":"http"}://${(B.domain??"").replace(/^\./,"")}${B.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(z.id,{})}catch(V){$.fireErrorToTools(z.id,{message:V?.message??String(V)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(z)=>v($,z,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(z)=>v($,z,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(z)=>v($,z,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(z)=>v($,z,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(z)=>v($,z,{})),$.addMessageFilter("tools::Network.getResponseBody",async(z)=>{let V=z.params?.requestId,H=typeof V==="string"?Z.get(V):void 0;if(!H)return $.fireErrorToTools(z.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(H.method&&H.method.toUpperCase()!=="GET")return $.fireErrorToTools(z.id,{message:`Network.getResponseBody: cannot recover ${H.method} response body (bridge re-fetch is GET-only)`}),null;if(H.bytes===0)return $.fireResultToTools(z.id,{body:"",base64Encoded:!1}),null;return W(async()=>{try{let B={};for(let[P,R]of Object.entries(H.headers??{})){let L=P.toLowerCase();if(L==="if-none-match"||L==="if-modified-since"||L==="host"||L==="connection")continue;B[P]=String(R)}let N=new AbortController,M=setTimeout(()=>N.abort(),1e4),D;try{D=await fetch(H.url,{headers:B,redirect:"follow",signal:N.signal})}finally{clearTimeout(M)}let q=Number(D.headers.get("content-length")??"");if(Number.isFinite(q)&&q>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${q} bytes > ${"4194304"}) — skipped re-fetch`});try{await D.arrayBuffer()}catch{}return}let C=Buffer.from(await D.arrayBuffer());if(C.byteLength>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${C.byteLength} bytes > 4194304)`});return}let j=((D.headers.get("content-type")??"").split(";")[0]??"").trim(),A=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(j),E=A?C.toString("utf8"):C.toString("base64");$.fireResultToTools(z.id,{body:E,base64Encoded:!A})}catch(B){$.fireErrorToTools(z.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[z,V]of Object.entries(EY))$.addMessageFilter(`target::${z}`,(H)=>{return kY(H.params,V),Promise.resolve(H)});$.addMessageFilter("target::Network.requestWillBeSent",(z)=>{let V=z.params;if(V){if(Object.assign(V,{...CY,...V}),V.request=SY(V.request),V.type=K8(V.type),typeof V.requestId==="string"&&typeof V.request?.url==="string"){if(Z.size>=1024){let H=Z.keys().next().value;if(H!==void 0)Z.delete(H)}Z.set(V.requestId,{url:V.request.url,method:V.request.method,headers:V.request.headers,frameId:V.frameId,bytes:0})}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.responseReceived",(z)=>{let V=z.params;if(V)Object.assign(V,{...PY,...V}),V.response=wY(V.response),V.type=K8(V.type);return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFinished",(z)=>{let V=z.params;if(V){let H=V.metrics?.responseBodyBytesReceived;if(typeof H==="number"&&V.encodedDataLength==null)V.encodedDataLength=H;if(Object.assign(V,{...qY,...V}),typeof V.requestId==="string"&&typeof H==="number"){let B=Z.get(V.requestId);if(B&&H>B.bytes)B.bytes=H}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.dataReceived",(z)=>{let V=z.params;if(V&&typeof V.requestId==="string"){let H=Z.get(V.requestId);if(H){let B=Number(V.dataLength)||0;H.bytes+=B}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFailed",(z)=>{let V=z.params;if(V){if(V.type=K8(V.type),!("canceled"in V))V.canceled=!1}return Promise.resolve(z)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(z)=>{if(z.method="Network.requestServedFromCache",z.params)z.params={requestId:z.params.requestId};return Promise.resolve(z)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(z)=>{let V=z.params??{};if(!Q)return $.fireResultToTools(z.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let H=await $.callTarget("Network.loadResource",{frameId:V.frameId,url:V.url}),B=!!H?.content&&(H?.status??0)>=200&&(H?.status??0)<300,N;if(B)N=`network-resource:${V.frameId??""}:${V.url}`,Q.set(N,String(H.content));$.fireResultToTools(z.id,{resource:{success:B,stream:N,httpStatusCode:H?.status,headers:H?.headers,mimeType:H?.mimeType}})}catch(H){$.fireResultToTools(z.id,{resource:{success:!1,netError:2,netErrorName:H?.message??"ERR_FAILED"}})}return null})}function bY($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>v($,Z,{}))}function vY($){$.addMessageFilter("target::Inspector.inspect",async(Q)=>{let Z=Q.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await $.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")$.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),$.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function gY($){if(!$)return $;let Q=$.origin==="inspector";return{styleSheetId:$.styleSheetId,frameId:$.frameId,sourceURL:$.sourceURL??"",origin:$.origin==="author"?"regular":$.origin,title:$.title??"",disabled:!!$.disabled,isInline:!!$.isInline,startLine:$.startLine??0,startColumn:$.startColumn??0,isMutable:Q,isConstructed:Q,length:$.length??0,endLine:$.endLine??0,endColumn:$.endColumn??0,hasSourceURL:!!$.sourceURL}}function M8($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:p0($.style),selectorList:cY($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:mY[Z.type]}));return Q}function nY($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let G=Z.get(Y);if(!G)try{if(G=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,G)Z.set(Y,G)}catch{}let W=G?.rules??[];for(let K=0;K<W.length;K++)if(hY(W[K]?.style?.range,X))return{styleSheetId:Y,ordinal:K};return{styleSheetId:Y,ordinal:0}}$.addMessageFilter("tools::CSS.enable",(Y)=>{return $.fireResultToTools(Y.id,{}),Promise.resolve(null)}),$.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=gY(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:p0(X.inlineStyle),attributesStyle:p0(X.attributesStyle)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")Q.lastNodeId=Y.params.nodeId;try{let[X,G]=await Promise.all([$.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),$.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);$.fireResultToTools(Y.id,{inlineStyle:p0(X?.inlineStyle),attributesStyle:p0(X?.attributesStyle),matchedCSSRules:T8(G?.matchedCSSRules),pseudoElements:pY(G?.pseudoElements),inherited:lY(G?.inherited),cssKeyframesRules:[]})}catch(X){$.fireErrorToTools(Y.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let X=Y.params?.edits??[],G=[];for(let W of X)try{let K=await J(W.styleSheetId,W.range),z=await $.callTarget("CSS.setStyleText",{styleId:K,text:W.text});G.push(p0(z?.style)),Z.delete(W.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:W.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:W}=Y.params??{};try{let K=await J(X,G);Y.params={ruleId:K,selector:W}}catch(K){return $.fireErrorToTools(Y.id,{message:K?.message??String(K)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:M8(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},G=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let W=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:M8(W?.rule)})}catch(W){$.fireErrorToTools(Y.id,{message:W?.message??String(W)})}return null})}function iY($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>v($,Q,dY)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>v($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>v($,Q,{}))}function aY($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function rY($){let Q=async(Z)=>{let J=Z.params??{},Y=aY(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let W={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},K=`(${oY}, __sd_simulate(${JSON.stringify(W)}))`;await $.callTarget("Runtime.evaluate",{expression:K})}$.fireResultToTools(Z.id,{})}catch(G){$.fireErrorToTools(Z.id,{message:G?.message??String(G)})}return null};$.addMessageFilter("tools::Input.dispatchMouseEvent",Q),$.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",Q),$.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return $.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function sY($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||tY,X=Number(Z.params?.offset)||0,G=Q.get(J);if(G===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let W=G.slice(X,X+Y),K=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:W,eof:K,base64Encoded:!1}),Promise.resolve(null)}),$.addMessageFilter("tools::IO.close",(Z)=>{return Q.delete(String(Z.params?.handle??"")),$.fireResultToTools(Z.id,{}),Promise.resolve(null)}),Q}function eY($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Accessibility.getPartialAXTree",async(Q)=>{let Z=Q.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return $.fireResultToTools(Q.id,{nodes:[]}),null;try{let X=(await $.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},G={nodeId:String(J),ignored:Boolean(X.ignored),role:X.role?{type:"role",value:String(X.role)}:void 0,name:X.label?{type:"computedString",value:String(X.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};$.fireResultToTools(Q.id,{nodes:[G]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function ZX($){for(let[Z,J]of Object.entries(QX))$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J));for(let Z of $X)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>v($,Y,{}));let Q=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of Q)$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J))}function U8($){let Q=MY();ZX($);let Z=sY($);UY($,Q),_Y($,Q),BY($,Q),FY($),jY($),TY($,Q),OY($),AY($),fY($,Z),bY($),vY($),nY($),iY($),rY($),eY($)}function iQ($){let Q=`${$.reqHost}/devtools/page/${$.id}`;return{description:$.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${Q}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${Q}`,id:$.id,title:$.title,type:$.type,url:$.url,webSocketDebuggerUrl:`ws://${Q}`,faviconUrl:""}}function L4($){return $.replace(/[&<>"']/g,(Q)=>JX[Q])}function oQ($){return dQ.createServer((Q,Z)=>{let J=new URL(Q.url??"/","http://placeholder"),Y=Q.headers.host??"";if(J.pathname==="/json/version"){let X=typeof $.version==="function"?$.version(Y):$.version;return W8(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return W8(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return W8(Z,{});if(J.pathname==="/")return YX(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function W8($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function YX($,Q,Z){let J=Q.listTargets(Z),Y=J.map((K)=>`<li><strong>${L4(K.title||K.url||K.id)}</strong><br><small>${L4(K.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${L4(K.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,G=Q.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${L4(Z)}</code>.</p>`,W=`<!doctype html><meta charset=utf-8><title>${L4(X)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${L4(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+G+`<ul>${Y}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';$.writeHead(200,{"content-type":"text/html; charset=utf-8"}),$.end(W)}function aQ($,Q,Z){return new Promise((J,Y)=>{$.once("error",(G)=>{if(G.port==null)G.port=Z;if(G.host==null)G.host=Q;Y(G)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function rQ($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(K,z)=>Q?`\x1B[${K}m${z}\x1B[0m`:z,J=(K)=>Z("1",K),Y=(K)=>Z("2",K),X=(K)=>Z("36",K),G=(K)=>Z("32",K),W=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(W)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function XX($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,W=new Map,K=null;function z(A){if($.readyState!==1)return;let E=JSON.stringify(A);if(Z)console.error(`[browser] tools<< ${E.slice(0,240)}`);$.send(E)}function V(A,E){let P={method:A,params:E};if(K)P.sessionId=K;z(P)}function H(A,E){return{targetId:A.targetId,type:A.type==="page"?"page":A.type||"other",title:A.title||"",url:A.url||"",attached:E,canAccessOpener:!1,browserContextId:"default"}}function B(A){for(let E of J.values())if(E.targetId===A)return!0;return!1}function N(A,E){let P=Q.listEntries().find((_)=>_.targetId===A);if(!P)return null;let R=crypto.randomUUID(),L=(_)=>{let F;try{F=JSON.parse(_)}catch{return}F.sessionId=R,z(F)},U=Q.createPageSession(A,L);if(!U)return null;return J.set(R,{handle:U,targetId:A}),V("Target.attachedToTarget",{sessionId:R,targetInfo:H(P,!0),waitingForDebugger:E}),{sessionId:R,entry:P}}function M(A){let E=J.get(A);if(!E)return!1;try{E.handle.close()}catch{}return J.delete(A),V("Target.detachedFromTarget",{sessionId:A,targetId:E.targetId}),!0}function D(){let A=Q.listEntries(),E=new Set;for(let P of A){E.add(P.targetId);let R=W.get(P.targetId);if(!R){if(W.set(P.targetId,P),Y)V("Target.targetCreated",{targetInfo:H(P,B(P.targetId))});if(X&&!B(P.targetId))N(P.targetId,G)}else if(R.title!==P.title||R.url!==P.url){if(W.set(P.targetId,P),Y)V("Target.targetInfoChanged",{targetInfo:H(P,B(P.targetId))})}}for(let P of[...W.keys()]){if(E.has(P))continue;W.delete(P);for(let[R,L]of J)if(L.targetId===P)M(R);if(Y)V("Target.targetDestroyed",{targetId:P})}}let q=setInterval(D,Q.refreshMs??1000);function C(A,E){if(A)E.sessionId=A;z(E)}function j(A,E){let{id:P,method:R}=A,L=A.params??{};switch(R){case"Browser.getVersion":return C(E,{id:P,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!K)K=crypto.randomUUID();return C(E,{id:P,result:{sessionId:K}})}case"Target.setDiscoverTargets":{if(Y=!!L.discover,Y)for(let U of Q.listEntries())W.set(U.targetId,U),V("Target.targetCreated",{targetInfo:H(U,B(U.targetId))});if(typeof P==="number")C(E,{id:P,result:{}});return}case"Target.getTargets":{let U=Q.listEntries().map((_)=>H(_,B(_.targetId)));return C(E,{id:P,result:{targetInfos:U}})}case"Target.setAutoAttach":{if(X=!!L.autoAttach,G=!!L.waitForDebuggerOnStart,X){for(let U of Q.listEntries())if(!B(U.targetId))N(U.targetId,G)}if(typeof P==="number")C(E,{id:P,result:{}});return}case"Target.attachToTarget":{for(let[_,F]of J)if(F.targetId===L.targetId){if(typeof P==="number")C(E,{id:P,result:{sessionId:_}});return}let U=N(L.targetId,!1);if(!U){if(typeof P==="number")C(E,{id:P,error:{code:-32000,message:"No target with given id found"}});return}if(typeof P==="number")C(E,{id:P,result:{sessionId:U.sessionId}});return}case"Target.detachFromTarget":{if(M(L.sessionId),typeof P==="number")C(E,{id:P,result:{}});return}case"Target.sendMessageToTarget":{let U=J.get(L.sessionId);if(U)U.handle.onMessageFromTools(L.message);if(typeof P==="number")C(E,{id:P,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof P==="number")C(E,{id:P,result:{}});return;case"Target.getBrowserContexts":{if(typeof P==="number")C(E,{id:P,result:{browserContextIds:["default"]}});return}}if(typeof P==="number")C(E,{id:P,error:{code:-32601,message:`Browser-level method '${R??"?"}' not implemented`}})}$.on("message",(A,E)=>{let P=E?new TextDecoder().decode(A):A.toString();if(Z)console.error(`[browser] tools>> ${P.slice(0,240)}`);let R;try{R=JSON.parse(P)}catch{return}if(typeof R.sessionId==="string"){if(R.sessionId===K){let _={...R};return delete _.sessionId,j(_,R.sessionId)}let L=J.get(R.sessionId);if(!L){if(typeof R.id==="number")z({id:R.id,sessionId:R.sessionId,error:{code:-32000,message:`Session ${R.sessionId} not found`}});return}let U={...R};delete U.sessionId,L.handle.onMessageFromTools(JSON.stringify(U));return}j(R,void 0)}),$.on("close",()=>{clearInterval(q);for(let[,A]of J)try{A.handle.close()}catch{}J.clear()})}async function KX($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await WX();if(J.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let Y=new Map,X=new WeakMap,G=new Map;for(let R of J)G.set(R,[]),X.set(R,new Set),R.wi.subscribe((L)=>{let{__selector:U,__argument:_}=L;if(!U||!_)return;if(U==="_rpc_reportConnectedApplicationList:"){let F=_.WIRApplicationDictionaryKey??{},T=Object.entries(F).map(([S,k])=>({appId:S,bundleId:k.WIRApplicationBundleIdentifierKey,name:k.WIRApplicationNameKey??k.WIRApplicationBundleIdentifierKey??S,isProxy:Boolean(k.WIRIsApplicationProxyKey)}));G.set(R,T);let I=X.get(R);for(let S of T){if(S.isProxy||I.has(S.appId))continue;I.add(S.appId),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:S.appId})}}else if(U==="_rpc_applicationConnected:"){let F=_,T=G.get(R)??[];if(!T.find((I)=>I.appId===F.WIRApplicationIdentifierKey))T.push({appId:F.WIRApplicationIdentifierKey,bundleId:F.WIRApplicationBundleIdentifierKey,name:F.WIRApplicationNameKey??F.WIRApplicationBundleIdentifierKey,isProxy:Boolean(F.WIRIsApplicationProxyKey)}),G.set(R,T);if(!F.WIRIsApplicationProxyKey){let I=X.get(R);if(!I.has(F.WIRApplicationIdentifierKey))I.add(F.WIRApplicationIdentifierKey),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:F.WIRApplicationIdentifierKey})}}else if(U==="_rpc_applicationDisconnected:"){let F=G.get(R)??[];G.set(R,F.filter((T)=>T.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${R.id}:${_.WIRApplicationIdentifierKey}`)}else if(U==="_rpc_applicationSentListing:"){let F=_.WIRApplicationIdentifierKey,T=_.WIRListingKey??{},I=new Map;for(let[S,k]of Object.entries(T))I.set(S,{pageId:Number(k.WIRPageIdentifierKey??0),title:k.WIRTitleKey??"",url:k.WIRURLKey??"",type:k.WIRTypeKey??"",connectionId:typeof k.WIRConnectionIdentifierKey==="string"?k.WIRConnectionIdentifierKey:null});Y.set(`${R.id}:${F}`,I)}}),R.wi.send("_rpc_reportIdentifier:",{}),R.wi.send("_rpc_getConnectedApplications:",{});let W=setInterval(()=>{for(let R of J){let L=G.get(R)??[];for(let U of L){if(U.isProxy)continue;R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:U.appId})}}},GX),K=new Map;function z(){let R=[];for(let L of J){let U=G.get(L)??[];for(let _ of U){if(_.isProxy)continue;let F=Y.get(`${L.id}:${_.appId}`);if(!F)continue;for(let T of F.values()){let I=!!T.connectionId&&T.connectionId!==L.wi.connection;R.push({targetId:`${L.id}:${_.appId}:${T.pageId}`,source:L,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:T.pageId,title:T.title,url:T.url,type:T.type,inUseByOtherInspector:I})}}}return R}let V=crypto.randomUUID(),H=oQ({brand:"",version:(R)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${R}/devtools/browser/${V}`}),listTargets:(R)=>z().map((L)=>iQ({reqHost:R,id:L.targetId,description:`${L.source.label}${L.bundleId?` (${L.bundleId})`:""}`,title:L.title||L.appName,url:/^https?:/i.test(L.url)?L.url:"about:blank",type:SQ(L.type)}))}),B=new pQ.default({noServer:!0}),N=`/devtools/browser/${V}`;H.on("upgrade",(R,L,U)=>{let _=new URL(R.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===N){B.handleUpgrade(R,L,U,(T)=>{XX(T,{listEntries:()=>z().map((I)=>({targetId:I.targetId,type:SQ(I.type),title:I.title||I.appName,url:I.url})),createPageSession:(I,S)=>{let k=z().find((y)=>y.targetId===I);if(!k)return null;return M(k,S)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),L.destroy();return}let F=decodeURIComponent(_.pathname.slice(15));B.handleUpgrade(R,L,U,(T)=>{P(T,F)})});function M(R,L){let U=crypto.randomUUID(),F=new E$({readyState:1,send:(S)=>L(S)},R.source.wi,R.appId,R.pageId,U);U8(F),K.set(U,F);let T=!!process.env.INSPECT_WEBKIT_DEBUG,I=R.source.wi.subscribe((S)=>{if(S.__selector!=="_rpc_applicationSentData:")return;let k=S.__argument;if(!k)return;if(k.WIRDestinationKey&&k.WIRDestinationKey!==U)return;if(k.WIRApplicationIdentifierKey!==R.appId)return;if(k.WIRPageIdentifierKey!==void 0&&Number(k.WIRPageIdentifierKey)!==R.pageId)return;let y=k.WIRMessageDataKey??k.WIRSocketDataKey;if(!y)return;let f=typeof y==="string"?y:new TextDecoder().decode(y);if(T)console.error(`[cdp] target>> ${f.slice(0,240)}`);F.onMessageFromTarget(f)});return R.source.wi.forwardSocketSetup(R.appId,R.pageId,U),console.error(`# devtools attached: ${R.source.label} :: ${R.appName} :: ${R.title||R.url}`),{onMessageFromTools(S){if(T)console.error(`[cdp] tools>> ${S.slice(0,300)}`);F.onMessageFromTools(S)},close(){I();try{F.wi.forwardDidClose(F.appId,F.pageId,F.senderKey)}catch{}K.delete(F.senderKey)}}}let D=new Map,q=8000;function C(R){let L=D.get(R);if(L)return L;let U=z().find((y)=>y.targetId===R);if(!U)return null;let _=crypto.randomUUID(),T=new E$({readyState:1,send:()=>{}},U.source.wi,U.appId,U.pageId,_);U8(T),K.set(_,T);let I=U.source.wi.subscribe((y)=>{if(y.__selector!=="_rpc_applicationSentData:")return;let f=y.__argument;if(!f)return;if(f.WIRDestinationKey&&f.WIRDestinationKey!==_)return;if(f.WIRApplicationIdentifierKey!==U.appId)return;if(f.WIRPageIdentifierKey!==void 0&&Number(f.WIRPageIdentifierKey)!==U.pageId)return;let u=f.WIRMessageDataKey??f.WIRSocketDataKey;if(!u)return;let x=typeof u==="string"?u:new TextDecoder().decode(u);T.onMessageFromTarget(x)});U.source.wi.forwardSocketSetup(U.appId,U.pageId,_);let S=Promise.race([T.callTarget("DOM.getDocument",{depth:0}).then((y)=>y?.root?.nodeId),new Promise((y,f)=>setTimeout(()=>f(Error("DOM.getDocument timeout")),5000))]),k={cdp:T,rootNodeIdPromise:S,idleTimer:null,close(){if(k.idleTimer)clearTimeout(k.idleTimer);I();try{T.wi.forwardDidClose(T.appId,T.pageId,T.senderKey)}catch{}K.delete(_),D.delete(R)}};return D.set(R,k),S.catch(()=>k.close()),k}function j(R){if(R.idleTimer)clearTimeout(R.idleTimer);R.idleTimer=setTimeout(()=>R.close(),q)}function A(R){if(R){D.get(R)?.close();return}for(let L of D.values())L.close()}async function E(R,L){let U=C(R);if(!U)return;j(U);try{if(L){let _=await U.rootNodeIdPromise;if(!_)return;await U.cdp.callTarget("DOM.highlightNode",{nodeId:_,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await U.cdp.callTarget("DOM.hideHighlight",{})}catch{U.close()}}function P(R,L){let U=z().find((I)=>I.targetId===L);if(!U){console.error(`# ws closed: unknown target ${L} (known: ${z().map((I)=>I.targetId).join(", ")||"none"})`),R.close(1011,`unknown target ${L}`);return}let _=M(U,(I)=>{if(R.readyState===1)R.send(I)}),F=!0;R.on("pong",()=>{F=!0});let T=setInterval(()=>{if(!F){try{R.terminate()}catch{}return}F=!1;try{R.ping()}catch{}},15000);R.on("message",(I,S)=>{let k=S?new TextDecoder().decode(I):I.toString();_.onMessageFromTools(k)}),R.on("close",()=>{clearInterval(T),_.close()})}return await aQ(H,Z,Q),rQ({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(W);for(let R of D.values())R.close();B.close(),H.close();for(let R of J)try{R.wi.close(),R.lockdown?.close()}catch{}},getTargets(){return z()},highlightTarget(R,L){return E(R,L)},releaseHighlight(R){A(R)}}}async function WX(){let[$,Q]=await Promise.all([zX(),HX()]);return[...$,...Q]}async function zX(){let $=[];try{$=await vQ()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(VX))).filter((Z)=>Z!==null)}async function VX($){try{let Q=await hQ($.Properties.SerialNumber),Z=await I$.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new f4(Y,X);return await G.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:G,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function HX(){let $=[];try{$=await uQ()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(LX))).filter((Z)=>Z!==null)}async function LX($){try{let{socket:Q,stream:Z}=await mQ($.socketPath),J=new f4(Q,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${$.pid}`,label:`sim:${$.pid}`,wi:J}}catch(Q){return console.error(`warn: simulator ${$.socketPath}: ${Q.message}`),null}}function SQ($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class tQ{url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new xQ($),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((Q,Z)=>{this.ws.once("open",()=>Q()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",(Q,Z)=>{let J=Z?new TextDecoder().decode(Q):Q.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame($){return this.handlers.add($),()=>this.handlers.delete($)}forwardSocketData($,Q,Z,J){if(this.ws.readyState!==xQ.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function MX($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=oQ({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(W)=>J.map((K)=>iQ({reqHost:W,id:encodeURIComponent(K.url),description:K.label??"bun",title:K.label??K.url,url:K.url,type:"node"}))}),X=new pQ.default({noServer:!0});Y.on("upgrade",(W,K,z)=>{let V=new URL(W.url??"/","http://placeholder");if(!V.pathname.startsWith("/devtools/page/")){K.destroy();return}let H=decodeURIComponent(V.pathname.slice(15)),B=J.find((N)=>N.url===H);if(!B){K.destroy();return}X.handleUpgrade(W,K,z,(N)=>{G(N,B).catch((M)=>{console.error(`# bun attach failed: ${M.message}`);try{N.close(1011,M.message)}catch{}})})});async function G(W,K){let z=!!process.env.INSPECT_WEBKIT_DEBUG,V=new tQ(K.url);await V.ready();let H=crypto.randomUUID(),B=new E$(W,V,"bun",0,H);U8(B);let N=V.onFrame((M)=>{if(z)console.error(`[bun] target>> ${M.slice(0,240)}`);B.onMessageFromTarget(M)});W.on("message",(M,D)=>{let q=D?new TextDecoder().decode(M):M.toString();if(z)console.error(`[bun] tools>> ${q.slice(0,300)}`);B.onMessageFromTools(q)}),W.on("close",()=>{N(),V.close()}),console.error(`# devtools attached: ${K.label??K.url}`)}return await aQ(Y,Z,Q),rQ({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function sQ(){return vQ()}async function UX(){let[$,Q]=await Promise.all([_X(),BX()]);return[...$.flat(),...Q.flat()]}async function _X(){let $=await sQ();return Promise.all($.map(RX))}async function BX(){let $=await uQ();return Promise.all($.map(NX))}async function RX($){let Q=null;try{return Q=await FX($),await eQ(Q.client,{source:"device",udid:$.Properties.SerialNumber,deviceID:$.DeviceID})}catch(Z){return console.error(`warn: ${$.Properties.SerialNumber}: ${Z.message}`),[]}finally{Q?.client.close(),Q?.lockdown.close()}}async function NX($){let Q=null;try{let{socket:Z,stream:J}=await mQ($.socketPath);return Q=new f4(Z,J),await Q.reportIdentifier(),await eQ(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function FX($){let Q=await hQ($.Properties.SerialNumber),Z=await I$.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new f4(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function eQ($,Q){let Z=(await $.listApplications()).filter((X)=>!X.isProxy),J=await Promise.all(Z.map((X)=>$.getListing(X.appId))),Y=[];for(let X=0;X<Z.length;X++){let G=Z[X];for(let W of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:W.pageId,title:W.title,url:W.url,type:W.type})}return Y}var u3,m3,EQ,c3,p3,n3,d3,S0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?n3??=new WeakMap:d3??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?u3(m3($)):{};let G=Q||!$||!$.__esModule?EQ(Z,"default",{value:$,enumerable:!0}):Z;for(let W of c3($))if(!p3.call(G,W))EQ(G,W,{get:l3.bind($,W),enumerable:!0});if(J)Y.set($,G);return G},G0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),a,w0,C$,i3,k4,y4,wQ,kQ,o3,_8,B8,a3,yQ,r3,t3=`<?xml version="1.0" encoding="UTF-8"?>
|
|
76
|
+
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),X=Number(Y[1]),G=Y[Y.length-1];if(G)Z.set(G,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function mQ($){let Q=new q$;return new Promise((Z,J)=>{let Y=gQ.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),N8(Y,Q),Z({socket:Y,stream:Q})})})}async function Y8($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return P$(J)}function X8($,Q){let Z=R8({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function G8($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function IQ($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new q$,W=cQ.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),K=(z)=>{V0(`${J} tls error:`,z),G.close(z),X(z)};W.once("error",K),W.once("secureConnect",()=>{V0(`${J} tls handshake complete`),W.off("error",K);let z=N8(W,G);Y({socket:W,stream:G,detach:z})})})}class I${socket;stream;pair;udid;deviceID;detach;constructor($,Q,Z,J,Y,X){this.socket=$,this.stream=Q,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=X}static async open($,Q){V0("connecting usbmux tunnel to lockdown port",qQ);let{socket:Z,stream:J,detach:Y}=await PQ($.DeviceID,qQ),X=new I$(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);V0("sending QueryType"),X8(Z,{Request:"QueryType"});let G=await Y8(J);if(V0("QueryType reply:",G),G8(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){V0("StartSession with HostID",this.pair.HostID),X8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await Y8(this.stream);if(V0("StartSession reply:",$),G8($,"StartSession"),$.EnableSessionSSL){V0("upgrading to TLS");let Q=await IQ(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,V0("TLS upgrade complete")}}async startService($){V0("StartService",$),X8(this.socket,{Request:"StartService",Service:$});let Q=await Y8(this.stream);return V0("StartService reply:",Q),G8(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){V0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await PQ(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await IQ(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function zY($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return ZY(J)}function VY($,Q){let Z=R8(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function HY(){let $=crypto.getRandomValues(new Uint8Array(16));$[6]=$[6]&15|64,$[8]=$[8]&63|128;let Q=Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${Q.slice(0,8)}-${Q.slice(8,12)}-${Q.slice(12,16)}-${Q.slice(16,20)}-${Q.slice(20)}`}class f4{socket;stream;connectionId=HY();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await zY(Q);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe($){return this.subscribers.add($),()=>this.subscribers.delete($)}waitFor($,Q=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{X(),J(Error(`timeout waiting for ${$} after ${Q}ms`))},Q),X=this.subscribe((G)=>{if(G.__selector===$)clearTimeout(Y),X(),Z(G)})})}send($,Q){VY(this.socket,{__selector:$,__argument:{WIRConnectionIdentifierKey:this.connectionId,...Q}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let $=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!$)return[];let Z=$.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,X]of Object.entries(Z)){let G=X;J.push({appId:Y,bundleId:G.WIRApplicationBundleIdentifierKey,name:G.WIRApplicationNameKey,isProxy:Boolean(G.WIRIsApplicationProxyKey),isActive:Boolean(G.WIRIsApplicationActiveKey),hostAppId:G.WIRHostApplicationIdentifierKey})}return J}async getListing($){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$});let Q=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!Q)return[];let J=Q.__argument.WIRListingKey??{},Y=[];for(let X of Object.values(J)){let G=X;Y.push({pageId:Number(G.WIRPageIdentifierKey??0),title:G.WIRTitleKey??"",url:G.WIRURLKey??"",type:G.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup($,Q,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData($,Q,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose($,Q,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z})}onMessage($){return this.subscribe($)}close(){this.socket.end()}}class E${ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor($,Q,Z,J,Y){this.ws=$,this.wi=Q,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter($,Q){let Z=this.filters.get($);if(!Z)this.filters.set($,Z=[]);Z.push(Q)}callTarget($,Q={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:$,params:Q}))})}fireEventToTools($,Q){this.sendToTools(JSON.stringify({method:$,params:Q}))}fireResultToTools($,Q){this.sendToTools(JSON.stringify({id:$,result:Q}))}fireErrorToTools($,Q){this.sendToTools(JSON.stringify({id:$,error:{code:Q.code??-32000,message:Q.message}}))}replyEmpty($){if(typeof $.id==="number")this.fireResultToTools($.id,{});return Promise.resolve(null)}async onMessageFromTools($){let Q;try{Q=JSON.parse($)}catch{return}if(typeof Q.method==="string"&&typeof Q.id==="number")this.toolRequestMap.set(Q.id,Q.method);let Z=`tools::${Q.method}`,J=this.filters.get(Z),Y=Q;if(J)for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget($){let Q;try{Q=JSON.parse($)}catch{return}if(Q.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let X=Q.params?.targetInfo;if(X?.type==="page"&&!this.innerTargetId)this.innerTargetId=X.targetId,this.flushQueue();return}if(Q.method==="Target.didCommitProvisionalTarget"){let X=Q.params?.newTargetId;if(typeof X==="string")this.innerTargetId=X;return}if(Q.method==="Target.targetDestroyed")return;if(Q.method==="Target.dispatchMessageFromTarget"){let X=Q.params?.message;if(typeof X==="string")return this.onMessageFromTarget(X);return}if(typeof Q.id==="number"&&this.wrappedAckIds.has(Q.id)){this.wrappedAckIds.delete(Q.id);return}if(typeof Q.id==="number"){let X=this.adapterRequestMap.get(Q.id);if(X){if(this.adapterRequestMap.delete(Q.id),"error"in Q&&Q.error)X.reject(Q.error);else X.resolve(Q.result??{});return}let G=this.toolRequestMap.get(Q.id);if(G){this.toolRequestMap.delete(Q.id);let W=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))W="target::error";let K=this.filters.get(W);if(!K)return this.sendToTools($);let z=Q;for(let V of K){if(!z)break;z=await V(z)}if(z)this.sendToTools(JSON.stringify(z));return}return this.sendToTools($)}let Z=`target::${Q.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools($);let Y=Q;for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw($){let Q=null;try{Q=JSON.parse($)}catch{}let Z=Q&&typeof Q.method==="string"&&Q.method.startsWith("Target.");if(this.innerTargetId&&Q&&!Z){if(typeof Q.id==="number")this.wrappedAckIds.add(Q.id);let J={id:Q.id,method:"Target.sendMessageToTarget",params:{id:Q.id,message:$,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&Q&&!Z){if(this.outgoingQueue.push($),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame($)}flushQueue(){if(this.outgoingQueue.length===0)return;let $=this.outgoingQueue;this.outgoingQueue=[];for(let Q of $)this.sendRaw(Q)}writeFrame($){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode($))}sendToTools($){if(this.ws.readyState===1)this.ws.send($)}}function MY(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function v($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function UY($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>v($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>v($,Z,{})),$.addMessageFilter("target::Debugger.enable",(Z)=>{return $.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),$.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)Q.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])$.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));$.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let X of Y.scopeChain)if(!X.object&&X.value)X.object=X.value}}return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function _Y($,Q){$.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),X=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!Q.pageExecCtx.id||X&&!Q.pageExecCtx.isPage)Q.pageExecCtx.id=Y,Q.pageExecCtx.isPage=X}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return v($,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:Q.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:Q.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((X)=>X.isOwn||X.nativeGetter).map((X)=>({...X,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((X)=>({name:X.name,value:X.value}));return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.compileScript",(Z)=>v($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>v($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>v($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>v($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),$.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return $.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function BY($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.enable",(Z)=>{return $.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},X=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((K)=>({functionName:K.functionName??"",scriptId:K.scriptId??"",url:K.url??"",lineNumber:Number(K.lineNumber??0),columnNumber:Number(K.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,W=Date.now();if(J.source==="console-api"){let K=J.type==="log"?J.level??"log":J.type??"log",z=RY(K),V=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],H={type:z,args:V,executionContextId:Q.pageExecCtx.id||1,timestamp:W,stackTrace:G};return Q.lastConsoleApiCalled.value=H,$.fireEventToTools("Runtime.consoleAPICalled",H),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:W,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:Q.lastScriptEval.value,url:J.url,stackTrace:G,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:NY(J.level??J.type??"log"),text:String(J.text??""),timestamp:W,url:J.url,lineNumber:J.line,stackTrace:G,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),$.addMessageFilter("target::Console.messagesCleared",()=>{return $.fireEventToTools("Log.entriesCleared",{}),$.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:Q.pageExecCtx.id||1,timestamp:Date.now()}),Q.lastConsoleApiCalled.value=null,Promise.resolve(null)}),$.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=Q.lastConsoleApiCalled.value;if(Z)$.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),$.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function RY($){switch($){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return $;default:return"log"}}function NY($){switch($){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function FY($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>v($,Z,{})),$.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),$.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")Q.add(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")Q.delete(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((X)=>$.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:X}).then((G)=>G.nodeId).catch(()=>X)));return $.fireResultToTools(Z.id,{nodeIds:Y}),null}),$.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{return $.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),$.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await $.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return $.fireResultToTools(Z.id,{nodeId:0}),null;let X=await $.callTarget("DOM.requestNode",{objectId:Y});$.fireResultToTools(Z.id,{nodeId:X.nodeId,backendNodeId:X.nodeId})}catch(J){$.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),$.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function jY($){$.addMessageFilter("tools::DOMDebugger.getEventListeners",async(Q)=>{try{let Z=await $.callTarget("DOM.requestNode",{objectId:Q.params?.objectId}),Y=((await $.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((X)=>({type:X.type,useCapture:!!X.useCapture,passive:!!X.passive,once:!!X.once,location:X.location,handler:X.handler}));$.fireResultToTools(Q.id,{listeners:Y})}catch(Z){$.fireErrorToTools(Q.id,{message:Z?.message??String(Z)})}return null}),$.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>v($,Q,{}))}function TY($,Q){$.addMessageFilter("tools::Page.setOverlayMessage",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.configureOverlay",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.getNavigationHistory",async(X)=>{try{let G=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),W=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:W.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return lQ(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return L8(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let G=await $.callTarget("Page.getResourceTree",{}),W=nQ(G?.frameTree);L8(W),$.fireResultToTools(X.id,{frameTree:W})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return v($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>v($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>v($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.captureScreenshot",(X)=>{return $.fireErrorToTools(X.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),$.addMessageFilter("tools::Page.startScreencast",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>v($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let G=X.params?.frame;if(G)Y=G.id??Y,J=G.loaderId??J,$.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(X)}),$.addMessageFilter("target::Page.domContentEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:X.params?.timestamp??0}),Promise.resolve(X)}),$.addMessageFilter("target::Page.loadEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(X)})}function lQ($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function L8($){if(!$)return;if(lQ($.frame),Array.isArray($.childFrames))$.childFrames.forEach(L8)}function nQ($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(nQ);return Q}function OY($){$.addMessageFilter("tools::Overlay.enable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Overlay.highlightNode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.highlightNode",Q.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightFrame",(Q)=>{return Q.method="DOM.highlightFrame",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightQuad",(Q)=>{return Q.method="DOM.highlightQuad",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightRect",(Q)=>{return Q.method="DOM.highlightRect",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.hideHighlight",(Q)=>{return Q.method="DOM.hideHighlight",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setInspectMode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.setInspectModeEnabled",Q.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve(Q)})}function AY($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>v($,Q,{result:!0})),$.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(Q)=>{return Q.method="Page.setTouchEmulationEnabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(Q)=>{return Q.method="Page.setScriptExecutionDisabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setEmulatedMedia",(Q)=>{return Q.method="Page.setEmulatedMedia",Promise.resolve(Q)}),$.addMessageFilter("tools::Rendering.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.setUserAgentOverride",(Q)=>{let Z=Q.params?.userAgent??"";return Q.method="Page.overrideUserAgent",Q.params={value:Z},Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>v($,Q,{}))}function K8($){switch($){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return $;case"StyleSheet":return"Stylesheet";default:return"Other"}}function SY($){if(!$)return $;return{...IY,...$,hasPostData:$.postData!=null}}function wY($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...xY,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function kY($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function yY($){let Q=typeof $.size==="number"?$.size:($.name?.length??0)+($.value?.length??0);return{name:$.name,value:$.value,domain:$.domain,path:$.path,expires:$.expires??-1,size:Q,httpOnly:!!$.httpOnly,secure:!!$.secure,session:!!$.session,...$.sameSite?{sameSite:$.sameSite}:{}}}function fY($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),W=(z)=>{let V=G.then(z,z);return G=V.catch(()=>{}),V};for(let[z,V]of Object.entries(DY))$.addMessageFilter(`tools::${z}`,(H)=>{return H.method=V,Promise.resolve(H)});$.addMessageFilter("tools::Network.setCacheDisabled",(z)=>{if(z.params&&"cacheDisabled"in z.params)z.params={disabled:!!z.params.cacheDisabled};return Promise.resolve(z)});let K=async(z)=>{try{let V=await $.callTarget("Page.getCookies",{}),H=Array.isArray(V?.cookies)?V.cookies.map(yY):[];$.fireResultToTools(z.id,{cookies:H})}catch(V){$.fireErrorToTools(z.id,{message:V?.message??String(V)})}return null};$.addMessageFilter("tools::Network.getCookies",K),$.addMessageFilter("tools::Network.getAllCookies",K),$.addMessageFilter("tools::Network.setCookie",(z)=>{let V=z.params??{};return z.method="Page.setCookie",z.params={cookie:{name:V.name,value:V.value,domain:V.domain??"",path:V.path??"/",expires:V.expires??-1,session:!1,httpOnly:!!V.httpOnly,secure:!!V.secure,sameSite:V.sameSite??"None"}},Promise.resolve(z)}),$.addMessageFilter("tools::Network.setCookies",async(z)=>{let V=Array.isArray(z.params?.cookies)?z.params.cookies:[];try{await Promise.all(V.map((H)=>$.callTarget("Page.setCookie",{cookie:H}))),$.fireResultToTools(z.id,{})}catch(H){$.fireErrorToTools(z.id,{message:H?.message??String(H)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(z)=>{let V=z.params??{},H=V.url??`https://${(V.domain??"").replace(/^\./,"")}${V.path??"/"}`;return z.method="Page.deleteCookie",z.params={cookieName:V.name,url:H},Promise.resolve(z)}),$.addMessageFilter("tools::Network.deleteCookie",(z)=>{return z.method="Page.deleteCookie",Promise.resolve(z)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(z)=>{try{let V=await $.callTarget("Page.getCookies",{}),H=Array.isArray(V?.cookies)?V.cookies:[];await Promise.all(H.map((B)=>$.callTarget("Page.deleteCookie",{cookieName:B.name,url:`${B.secure?"https":"http"}://${(B.domain??"").replace(/^\./,"")}${B.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(z.id,{})}catch(V){$.fireErrorToTools(z.id,{message:V?.message??String(V)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(z)=>v($,z,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(z)=>v($,z,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(z)=>v($,z,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(z)=>v($,z,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(z)=>v($,z,{})),$.addMessageFilter("tools::Network.getResponseBody",async(z)=>{let V=z.params?.requestId,H=typeof V==="string"?Z.get(V):void 0;if(!H)return $.fireErrorToTools(z.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(H.method&&H.method.toUpperCase()!=="GET")return $.fireErrorToTools(z.id,{message:`Network.getResponseBody: cannot recover ${H.method} response body (bridge re-fetch is GET-only)`}),null;if(H.bytes===0)return $.fireResultToTools(z.id,{body:"",base64Encoded:!1}),null;return W(async()=>{try{let B={};for(let[P,R]of Object.entries(H.headers??{})){let L=P.toLowerCase();if(L==="if-none-match"||L==="if-modified-since"||L==="host"||L==="connection")continue;B[P]=String(R)}let N=new AbortController,M=setTimeout(()=>N.abort(),1e4),D;try{D=await fetch(H.url,{headers:B,redirect:"follow",signal:N.signal})}finally{clearTimeout(M)}let q=Number(D.headers.get("content-length")??"");if(Number.isFinite(q)&&q>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${q} bytes > ${"4194304"}) — skipped re-fetch`});try{await D.arrayBuffer()}catch{}return}let C=Buffer.from(await D.arrayBuffer());if(C.byteLength>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${C.byteLength} bytes > 4194304)`});return}let j=((D.headers.get("content-type")??"").split(";")[0]??"").trim(),A=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(j),E=A?C.toString("utf8"):C.toString("base64");$.fireResultToTools(z.id,{body:E,base64Encoded:!A})}catch(B){$.fireErrorToTools(z.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[z,V]of Object.entries(EY))$.addMessageFilter(`target::${z}`,(H)=>{return kY(H.params,V),Promise.resolve(H)});$.addMessageFilter("target::Network.requestWillBeSent",(z)=>{let V=z.params;if(V){if(Object.assign(V,{...CY,...V}),V.request=SY(V.request),V.type=K8(V.type),typeof V.requestId==="string"&&typeof V.request?.url==="string"){if(Z.size>=1024){let H=Z.keys().next().value;if(H!==void 0)Z.delete(H)}Z.set(V.requestId,{url:V.request.url,method:V.request.method,headers:V.request.headers,frameId:V.frameId,bytes:0})}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.responseReceived",(z)=>{let V=z.params;if(V)Object.assign(V,{...PY,...V}),V.response=wY(V.response),V.type=K8(V.type);return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFinished",(z)=>{let V=z.params;if(V){let H=V.metrics?.responseBodyBytesReceived;if(typeof H==="number"&&V.encodedDataLength==null)V.encodedDataLength=H;if(Object.assign(V,{...qY,...V}),typeof V.requestId==="string"&&typeof H==="number"){let B=Z.get(V.requestId);if(B&&H>B.bytes)B.bytes=H}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.dataReceived",(z)=>{let V=z.params;if(V&&typeof V.requestId==="string"){let H=Z.get(V.requestId);if(H){let B=Number(V.dataLength)||0;H.bytes+=B}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFailed",(z)=>{let V=z.params;if(V){if(V.type=K8(V.type),!("canceled"in V))V.canceled=!1}return Promise.resolve(z)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(z)=>{if(z.method="Network.requestServedFromCache",z.params)z.params={requestId:z.params.requestId};return Promise.resolve(z)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(z)=>{let V=z.params??{};if(!Q)return $.fireResultToTools(z.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let H=await $.callTarget("Network.loadResource",{frameId:V.frameId,url:V.url}),B=!!H?.content&&(H?.status??0)>=200&&(H?.status??0)<300,N;if(B)N=`network-resource:${V.frameId??""}:${V.url}`,Q.set(N,String(H.content));$.fireResultToTools(z.id,{resource:{success:B,stream:N,httpStatusCode:H?.status,headers:H?.headers,mimeType:H?.mimeType}})}catch(H){$.fireResultToTools(z.id,{resource:{success:!1,netError:2,netErrorName:H?.message??"ERR_FAILED"}})}return null})}function bY($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>v($,Z,{}))}function vY($){$.addMessageFilter("target::Inspector.inspect",async(Q)=>{let Z=Q.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await $.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")$.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),$.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function gY($){if(!$)return $;let Q=$.origin==="inspector";return{styleSheetId:$.styleSheetId,frameId:$.frameId,sourceURL:$.sourceURL??"",origin:$.origin==="author"?"regular":$.origin,title:$.title??"",disabled:!!$.disabled,isInline:!!$.isInline,startLine:$.startLine??0,startColumn:$.startColumn??0,isMutable:Q,isConstructed:Q,length:$.length??0,endLine:$.endLine??0,endColumn:$.endColumn??0,hasSourceURL:!!$.sourceURL}}function M8($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:p0($.style),selectorList:cY($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:mY[Z.type]}));return Q}function nY($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let G=Z.get(Y);if(!G)try{if(G=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,G)Z.set(Y,G)}catch{}let W=G?.rules??[];for(let K=0;K<W.length;K++)if(hY(W[K]?.style?.range,X))return{styleSheetId:Y,ordinal:K};return{styleSheetId:Y,ordinal:0}}$.addMessageFilter("tools::CSS.enable",(Y)=>{return $.fireResultToTools(Y.id,{}),Promise.resolve(null)}),$.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=gY(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:p0(X.inlineStyle),attributesStyle:p0(X.attributesStyle)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")Q.lastNodeId=Y.params.nodeId;try{let[X,G]=await Promise.all([$.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),$.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);$.fireResultToTools(Y.id,{inlineStyle:p0(X?.inlineStyle),attributesStyle:p0(X?.attributesStyle),matchedCSSRules:T8(G?.matchedCSSRules),pseudoElements:pY(G?.pseudoElements),inherited:lY(G?.inherited),cssKeyframesRules:[]})}catch(X){$.fireErrorToTools(Y.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let X=Y.params?.edits??[],G=[];for(let W of X)try{let K=await J(W.styleSheetId,W.range),z=await $.callTarget("CSS.setStyleText",{styleId:K,text:W.text});G.push(p0(z?.style)),Z.delete(W.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:W.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:W}=Y.params??{};try{let K=await J(X,G);Y.params={ruleId:K,selector:W}}catch(K){return $.fireErrorToTools(Y.id,{message:K?.message??String(K)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:M8(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},G=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let W=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:M8(W?.rule)})}catch(W){$.fireErrorToTools(Y.id,{message:W?.message??String(W)})}return null})}function iY($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>v($,Q,dY)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>v($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>v($,Q,{}))}function aY($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function rY($){let Q=async(Z)=>{let J=Z.params??{},Y=aY(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let W={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},K=`(${oY}, __sd_simulate(${JSON.stringify(W)}))`;await $.callTarget("Runtime.evaluate",{expression:K})}$.fireResultToTools(Z.id,{})}catch(G){$.fireErrorToTools(Z.id,{message:G?.message??String(G)})}return null};$.addMessageFilter("tools::Input.dispatchMouseEvent",Q),$.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",Q),$.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return $.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function sY($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||tY,X=Number(Z.params?.offset)||0,G=Q.get(J);if(G===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let W=G.slice(X,X+Y),K=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:W,eof:K,base64Encoded:!1}),Promise.resolve(null)}),$.addMessageFilter("tools::IO.close",(Z)=>{return Q.delete(String(Z.params?.handle??"")),$.fireResultToTools(Z.id,{}),Promise.resolve(null)}),Q}function eY($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Accessibility.getPartialAXTree",async(Q)=>{let Z=Q.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return $.fireResultToTools(Q.id,{nodes:[]}),null;try{let X=(await $.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},G={nodeId:String(J),ignored:Boolean(X.ignored),role:X.role?{type:"role",value:String(X.role)}:void 0,name:X.label?{type:"computedString",value:String(X.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};$.fireResultToTools(Q.id,{nodes:[G]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function ZX($){for(let[Z,J]of Object.entries(QX))$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J));for(let Z of $X)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>v($,Y,{}));let Q=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of Q)$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J))}function U8($){let Q=MY();ZX($);let Z=sY($);UY($,Q),_Y($,Q),BY($,Q),FY($),jY($),TY($,Q),OY($),AY($),fY($,Z),bY($),vY($),nY($),iY($),rY($),eY($)}function iQ($){let Q=`${$.reqHost}/devtools/page/${$.id}`;return{description:$.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${Q}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${Q}`,id:$.id,title:$.title,type:$.type,url:$.url,webSocketDebuggerUrl:`ws://${Q}`,faviconUrl:""}}function L4($){return $.replace(/[&<>"']/g,(Q)=>JX[Q])}function oQ($){return dQ.createServer((Q,Z)=>{let J=new URL(Q.url??"/","http://placeholder"),Y=Q.headers.host??"";if(J.pathname==="/json/version"){let X=typeof $.version==="function"?$.version(Y):$.version;return W8(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return W8(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return W8(Z,{});if(J.pathname==="/")return YX(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function W8($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function YX($,Q,Z){let J=Q.listTargets(Z),Y=J.map((K)=>`<li><strong>${L4(K.title||K.url||K.id)}</strong><br><small>${L4(K.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${L4(K.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,G=Q.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${L4(Z)}</code>.</p>`,W=`<!doctype html><meta charset=utf-8><title>${L4(X)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${L4(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+G+`<ul>${Y}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';$.writeHead(200,{"content-type":"text/html; charset=utf-8"}),$.end(W)}function aQ($,Q,Z){return new Promise((J,Y)=>{$.once("error",(G)=>{if(G.port==null)G.port=Z;if(G.host==null)G.host=Q;Y(G)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function rQ($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(K,z)=>Q?`\x1B[${K}m${z}\x1B[0m`:z,J=(K)=>Z("1",K),Y=(K)=>Z("2",K),X=(K)=>Z("36",K),G=(K)=>Z("32",K),W=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(W)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function XX($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,W=new Map,K=null;function z(A){if($.readyState!==1)return;let E=JSON.stringify(A);if(Z)console.error(`[browser] tools<< ${E.slice(0,240)}`);$.send(E)}function V(A,E){let P={method:A,params:E};if(K)P.sessionId=K;z(P)}function H(A,E){return{targetId:A.targetId,type:A.type==="page"?"page":A.type||"other",title:A.title||"",url:A.url||"",attached:E,canAccessOpener:!1,browserContextId:"default"}}function B(A){for(let E of J.values())if(E.targetId===A)return!0;return!1}function N(A,E){let P=Q.listEntries().find((_)=>_.targetId===A);if(!P)return null;let R=crypto.randomUUID(),L=(_)=>{let F;try{F=JSON.parse(_)}catch{return}F.sessionId=R,z(F)},U=Q.createPageSession(A,L);if(!U)return null;return J.set(R,{handle:U,targetId:A}),V("Target.attachedToTarget",{sessionId:R,targetInfo:H(P,!0),waitingForDebugger:E}),{sessionId:R,entry:P}}function M(A){let E=J.get(A);if(!E)return!1;try{E.handle.close()}catch{}return J.delete(A),V("Target.detachedFromTarget",{sessionId:A,targetId:E.targetId}),!0}function D(){let A=Q.listEntries(),E=new Set;for(let P of A){E.add(P.targetId);let R=W.get(P.targetId);if(!R){if(W.set(P.targetId,P),Y)V("Target.targetCreated",{targetInfo:H(P,B(P.targetId))});if(X&&!B(P.targetId))N(P.targetId,G)}else if(R.title!==P.title||R.url!==P.url){if(W.set(P.targetId,P),Y)V("Target.targetInfoChanged",{targetInfo:H(P,B(P.targetId))})}}for(let P of[...W.keys()]){if(E.has(P))continue;W.delete(P);for(let[R,L]of J)if(L.targetId===P)M(R);if(Y)V("Target.targetDestroyed",{targetId:P})}}let q=setInterval(D,Q.refreshMs??1000);function C(A,E){if(A)E.sessionId=A;z(E)}function j(A,E){let{id:P,method:R}=A,L=A.params??{};switch(R){case"Browser.getVersion":return C(E,{id:P,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!K)K=crypto.randomUUID();return C(E,{id:P,result:{sessionId:K}})}case"Target.setDiscoverTargets":{if(Y=!!L.discover,Y)for(let U of Q.listEntries())W.set(U.targetId,U),V("Target.targetCreated",{targetInfo:H(U,B(U.targetId))});if(typeof P==="number")C(E,{id:P,result:{}});return}case"Target.getTargets":{let U=Q.listEntries().map((_)=>H(_,B(_.targetId)));return C(E,{id:P,result:{targetInfos:U}})}case"Target.setAutoAttach":{if(X=!!L.autoAttach,G=!!L.waitForDebuggerOnStart,X){for(let U of Q.listEntries())if(!B(U.targetId))N(U.targetId,G)}if(typeof P==="number")C(E,{id:P,result:{}});return}case"Target.attachToTarget":{for(let[_,F]of J)if(F.targetId===L.targetId){if(typeof P==="number")C(E,{id:P,result:{sessionId:_}});return}let U=N(L.targetId,!1);if(!U){if(typeof P==="number")C(E,{id:P,error:{code:-32000,message:"No target with given id found"}});return}if(typeof P==="number")C(E,{id:P,result:{sessionId:U.sessionId}});return}case"Target.detachFromTarget":{if(M(L.sessionId),typeof P==="number")C(E,{id:P,result:{}});return}case"Target.sendMessageToTarget":{let U=J.get(L.sessionId);if(U)U.handle.onMessageFromTools(L.message);if(typeof P==="number")C(E,{id:P,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof P==="number")C(E,{id:P,result:{}});return;case"Target.getBrowserContexts":{if(typeof P==="number")C(E,{id:P,result:{browserContextIds:["default"]}});return}}if(typeof P==="number")C(E,{id:P,error:{code:-32601,message:`Browser-level method '${R??"?"}' not implemented`}})}$.on("message",(A,E)=>{let P=E?new TextDecoder().decode(A):A.toString();if(Z)console.error(`[browser] tools>> ${P.slice(0,240)}`);let R;try{R=JSON.parse(P)}catch{return}if(typeof R.sessionId==="string"){if(R.sessionId===K){let _={...R};return delete _.sessionId,j(_,R.sessionId)}let L=J.get(R.sessionId);if(!L){if(typeof R.id==="number")z({id:R.id,sessionId:R.sessionId,error:{code:-32000,message:`Session ${R.sessionId} not found`}});return}let U={...R};delete U.sessionId,L.handle.onMessageFromTools(JSON.stringify(U));return}j(R,void 0)}),$.on("close",()=>{clearInterval(q);for(let[,A]of J)try{A.handle.close()}catch{}J.clear()})}async function KX($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await WX();if(J.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let Y=new Map,X=new WeakMap,G=new Map;for(let R of J)G.set(R,[]),X.set(R,new Set),R.wi.subscribe((L)=>{let{__selector:U,__argument:_}=L;if(!U||!_)return;if(U==="_rpc_reportConnectedApplicationList:"){let F=_.WIRApplicationDictionaryKey??{},T=Object.entries(F).map(([S,k])=>({appId:S,bundleId:k.WIRApplicationBundleIdentifierKey,name:k.WIRApplicationNameKey??k.WIRApplicationBundleIdentifierKey??S,isProxy:Boolean(k.WIRIsApplicationProxyKey)}));G.set(R,T);let I=X.get(R);for(let S of T){if(S.isProxy||I.has(S.appId))continue;I.add(S.appId),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:S.appId})}}else if(U==="_rpc_applicationConnected:"){let F=_,T=G.get(R)??[];if(!T.find((I)=>I.appId===F.WIRApplicationIdentifierKey))T.push({appId:F.WIRApplicationIdentifierKey,bundleId:F.WIRApplicationBundleIdentifierKey,name:F.WIRApplicationNameKey??F.WIRApplicationBundleIdentifierKey,isProxy:Boolean(F.WIRIsApplicationProxyKey)}),G.set(R,T);if(!F.WIRIsApplicationProxyKey){let I=X.get(R);if(!I.has(F.WIRApplicationIdentifierKey))I.add(F.WIRApplicationIdentifierKey),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:F.WIRApplicationIdentifierKey})}}else if(U==="_rpc_applicationDisconnected:"){let F=G.get(R)??[];G.set(R,F.filter((T)=>T.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${R.id}:${_.WIRApplicationIdentifierKey}`)}else if(U==="_rpc_applicationSentListing:"){let F=_.WIRApplicationIdentifierKey,T=_.WIRListingKey??{},I=new Map;for(let[S,k]of Object.entries(T))I.set(S,{pageId:Number(k.WIRPageIdentifierKey??0),title:k.WIRTitleKey??"",url:k.WIRURLKey??"",type:k.WIRTypeKey??"",connectionId:typeof k.WIRConnectionIdentifierKey==="string"?k.WIRConnectionIdentifierKey:null});Y.set(`${R.id}:${F}`,I)}}),R.wi.send("_rpc_reportIdentifier:",{}),R.wi.send("_rpc_getConnectedApplications:",{});let W=setInterval(()=>{for(let R of J){let L=G.get(R)??[];for(let U of L){if(U.isProxy)continue;R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:U.appId})}}},GX),K=new Map;function z(){let R=[];for(let L of J){let U=G.get(L)??[];for(let _ of U){if(_.isProxy)continue;let F=Y.get(`${L.id}:${_.appId}`);if(!F)continue;for(let T of F.values()){let I=!!T.connectionId&&T.connectionId!==L.wi.connection;R.push({targetId:`${L.id}:${_.appId}:${T.pageId}`,source:L,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:T.pageId,title:T.title,url:T.url,type:T.type,inUseByOtherInspector:I})}}}return R}let V=crypto.randomUUID(),H=oQ({brand:"",version:(R)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${R}/devtools/browser/${V}`}),listTargets:(R)=>z().map((L)=>iQ({reqHost:R,id:L.targetId,description:`${L.source.label}${L.bundleId?` (${L.bundleId})`:""}`,title:L.title||L.appName,url:/^https?:/i.test(L.url)?L.url:"about:blank",type:SQ(L.type)}))}),B=new pQ.default({noServer:!0}),N=`/devtools/browser/${V}`;H.on("upgrade",(R,L,U)=>{let _=new URL(R.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===N){B.handleUpgrade(R,L,U,(T)=>{XX(T,{listEntries:()=>z().map((I)=>({targetId:I.targetId,type:SQ(I.type),title:I.title||I.appName,url:I.url})),createPageSession:(I,S)=>{let k=z().find((y)=>y.targetId===I);if(!k)return null;return M(k,S)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),L.destroy();return}let F=decodeURIComponent(_.pathname.slice(15));B.handleUpgrade(R,L,U,(T)=>{P(T,F)})});function M(R,L){let U=crypto.randomUUID(),F=new E$({readyState:1,send:(S)=>L(S)},R.source.wi,R.appId,R.pageId,U);U8(F),K.set(U,F);let T=!!process.env.INSPECT_WEBKIT_DEBUG,I=R.source.wi.subscribe((S)=>{if(S.__selector!=="_rpc_applicationSentData:")return;let k=S.__argument;if(!k)return;if(k.WIRDestinationKey&&k.WIRDestinationKey!==U)return;if(k.WIRApplicationIdentifierKey!==R.appId)return;if(k.WIRPageIdentifierKey!==void 0&&Number(k.WIRPageIdentifierKey)!==R.pageId)return;let y=k.WIRMessageDataKey??k.WIRSocketDataKey;if(!y)return;let f=typeof y==="string"?y:new TextDecoder().decode(y);if(T)console.error(`[cdp] target>> ${f.slice(0,240)}`);F.onMessageFromTarget(f)});return R.source.wi.forwardSocketSetup(R.appId,R.pageId,U),console.error(`# devtools attached: ${R.source.label} :: ${R.appName} :: ${R.title||R.url}`),{onMessageFromTools(S){if(T)console.error(`[cdp] tools>> ${S.slice(0,300)}`);F.onMessageFromTools(S)},close(){I();try{F.wi.forwardDidClose(F.appId,F.pageId,F.senderKey)}catch{}K.delete(F.senderKey)}}}let D=new Map,q=8000;function C(R){let L=D.get(R);if(L)return L;let U=z().find((y)=>y.targetId===R);if(!U)return null;let _=crypto.randomUUID(),T=new E$({readyState:1,send:()=>{}},U.source.wi,U.appId,U.pageId,_);U8(T),K.set(_,T);let I=U.source.wi.subscribe((y)=>{if(y.__selector!=="_rpc_applicationSentData:")return;let f=y.__argument;if(!f)return;if(f.WIRDestinationKey&&f.WIRDestinationKey!==_)return;if(f.WIRApplicationIdentifierKey!==U.appId)return;if(f.WIRPageIdentifierKey!==void 0&&Number(f.WIRPageIdentifierKey)!==U.pageId)return;let u=f.WIRMessageDataKey??f.WIRSocketDataKey;if(!u)return;let x=typeof u==="string"?u:new TextDecoder().decode(u);T.onMessageFromTarget(x)});U.source.wi.forwardSocketSetup(U.appId,U.pageId,_);let S=Promise.race([T.callTarget("DOM.getDocument",{depth:0}).then((y)=>y?.root?.nodeId),new Promise((y,f)=>setTimeout(()=>f(Error("DOM.getDocument timeout")),5000))]),k={cdp:T,rootNodeIdPromise:S,idleTimer:null,close(){if(k.idleTimer)clearTimeout(k.idleTimer);I();try{T.wi.forwardDidClose(T.appId,T.pageId,T.senderKey)}catch{}K.delete(_),D.delete(R)}};return D.set(R,k),S.catch(()=>k.close()),k}function j(R){if(R.idleTimer)clearTimeout(R.idleTimer);R.idleTimer=setTimeout(()=>R.close(),q)}function A(R){if(R){D.get(R)?.close();return}for(let L of D.values())L.close()}async function E(R,L){let U=C(R);if(!U)return;j(U);try{if(L){let _=await U.rootNodeIdPromise;if(!_)return;await U.cdp.callTarget("DOM.highlightNode",{nodeId:_,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await U.cdp.callTarget("DOM.hideHighlight",{})}catch{U.close()}}function P(R,L){let U=z().find((I)=>I.targetId===L);if(!U){console.error(`# ws closed: unknown target ${L} (known: ${z().map((I)=>I.targetId).join(", ")||"none"})`),R.close(1011,`unknown target ${L}`);return}let _=M(U,(I)=>{if(R.readyState===1)R.send(I)}),F=!0;R.on("pong",()=>{F=!0});let T=setInterval(()=>{if(!F){try{R.terminate()}catch{}return}F=!1;try{R.ping()}catch{}},15000);R.on("message",(I,S)=>{let k=S?new TextDecoder().decode(I):I.toString();_.onMessageFromTools(k)}),R.on("close",()=>{clearInterval(T),_.close()})}return await aQ(H,Z,Q),rQ({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(W);for(let R of D.values())R.close();B.close(),H.close();for(let R of J)try{R.wi.close(),R.lockdown?.close()}catch{}},getTargets(){return z()},highlightTarget(R,L){return E(R,L)},releaseHighlight(R){A(R)}}}async function WX(){let[$,Q]=await Promise.all([zX(),HX()]);return[...$,...Q]}async function zX(){let $=[];try{$=await vQ()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(VX))).filter((Z)=>Z!==null)}async function VX($){try{let Q=await hQ($.Properties.SerialNumber),Z=await I$.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new f4(Y,X);return await G.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:G,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function HX(){let $=[];try{$=await uQ()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(LX))).filter((Z)=>Z!==null)}async function LX($){try{let{socket:Q,stream:Z}=await mQ($.socketPath),J=new f4(Q,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${$.pid}`,label:`sim:${$.pid}`,wi:J}}catch(Q){return console.error(`warn: simulator ${$.socketPath}: ${Q.message}`),null}}function SQ($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class tQ{url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new xQ($),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((Q,Z)=>{this.ws.once("open",()=>Q()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",(Q,Z)=>{let J=Z?new TextDecoder().decode(Q):Q.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame($){return this.handlers.add($),()=>this.handlers.delete($)}forwardSocketData($,Q,Z,J){if(this.ws.readyState!==xQ.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function MX($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=oQ({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(W)=>J.map((K)=>iQ({reqHost:W,id:encodeURIComponent(K.url),description:K.label??"bun",title:K.label??K.url,url:K.url,type:"node"}))}),X=new pQ.default({noServer:!0});Y.on("upgrade",(W,K,z)=>{let V=new URL(W.url??"/","http://placeholder");if(!V.pathname.startsWith("/devtools/page/")){K.destroy();return}let H=decodeURIComponent(V.pathname.slice(15)),B=J.find((N)=>N.url===H);if(!B){K.destroy();return}X.handleUpgrade(W,K,z,(N)=>{G(N,B).catch((M)=>{console.error(`# bun attach failed: ${M.message}`);try{N.close(1011,M.message)}catch{}})})});async function G(W,K){let z=!!process.env.INSPECT_WEBKIT_DEBUG,V=new tQ(K.url);await V.ready();let H=crypto.randomUUID(),B=new E$(W,V,"bun",0,H);U8(B);let N=V.onFrame((M)=>{if(z)console.error(`[bun] target>> ${M.slice(0,240)}`);B.onMessageFromTarget(M)});W.on("message",(M,D)=>{let q=D?new TextDecoder().decode(M):M.toString();if(z)console.error(`[bun] tools>> ${q.slice(0,300)}`);B.onMessageFromTools(q)}),W.on("close",()=>{N(),V.close()}),console.error(`# devtools attached: ${K.label??K.url}`)}return await aQ(Y,Z,Q),rQ({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function sQ(){return vQ()}async function UX(){let[$,Q]=await Promise.all([_X(),BX()]);return[...$.flat(),...Q.flat()]}async function _X(){let $=await sQ();return Promise.all($.map(RX))}async function BX(){let $=await uQ();return Promise.all($.map(NX))}async function RX($){let Q=null;try{return Q=await FX($),await eQ(Q.client,{source:"device",udid:$.Properties.SerialNumber,deviceID:$.DeviceID})}catch(Z){return console.error(`warn: ${$.Properties.SerialNumber}: ${Z.message}`),[]}finally{Q?.client.close(),Q?.lockdown.close()}}async function NX($){let Q=null;try{let{socket:Z,stream:J}=await mQ($.socketPath);return Q=new f4(Z,J),await Q.reportIdentifier(),await eQ(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function FX($){let Q=await hQ($.Properties.SerialNumber),Z=await I$.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new f4(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function eQ($,Q){let Z=(await $.listApplications()).filter((X)=>!X.isProxy),J=await Promise.all(Z.map((X)=>$.getListing(X.appId))),Y=[];for(let X=0;X<Z.length;X++){let G=Z[X];for(let W of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:W.pageId,title:W.title,url:W.url,type:W.type})}return Y}var u3,m3,EQ,c3,p3,n3,d3,S0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?n3??=new WeakMap:d3??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?u3(m3($)):{};let G=Q||!$||!$.__esModule?EQ(Z,"default",{value:$,enumerable:!0}):Z;for(let W of c3($))if(!p3.call(G,W))EQ(G,W,{get:l3.bind($,W),enumerable:!0});if(J)Y.set($,G);return G},K0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),a,w0,C$,i3,k4,y4,wQ,kQ,o3,_8,B8,a3,yQ,r3,t3=`<?xml version="1.0" encoding="UTF-8"?>
|
|
77
77
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
78
78
|
<plist version="1.0">
|
|
79
79
|
`,s3=`
|
|
80
80
|
</plist>
|
|
81
|
-
`,JY=1,YY=8,XY="/var/run/usbmuxd",qQ=62078,
|
|
81
|
+
`,JY=1,YY=8,XY="/var/run/usbmuxd",qQ=62078,V0=(...$)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...$)},eW,$z,Qz,Zz,Jz,Yz,LY,pQ,xQ,DY,EY,CY,PY,qY,IY,xY,hY=($,Q)=>!!$&&!!Q&&$.startLine===Q.startLine&&$.endLine===Q.endLine&&$.startColumn===Q.startColumn&&$.endColumn===Q.endColumn,uY=($)=>$&&{name:$.name,value:$.value,text:$.text,implicit:$.implicit,parsedOk:$.parsedOk!==!1,important:!!$.priority,disabled:$.status==="disabled",range:$.range},p0=($)=>$&&{styleSheetId:$.styleId?.styleSheetId,cssText:$.cssText,range:$.range,shorthandEntries:$.shorthandEntries??[],cssProperties:Array.isArray($.cssProperties)?$.cssProperties.map(uY):[]},mY,cY=($)=>$&&{text:$.text,selectors:Array.isArray($.selectors)?$.selectors.map((Q)=>({text:Q.text,range:Q.range??$.range})):[]},T8=($)=>Array.isArray($)?$.map((Q)=>({matchingSelectors:Q.matchingSelectors,rule:M8(Q.rule)})):[],pY=($)=>Array.isArray($)?$.map((Q)=>({pseudoType:Q.pseudoId,matches:T8(Q.matches)})):[],lY=($)=>Array.isArray($)?$.map((Q)=>({inlineStyle:p0(Q.inlineStyle),matchedCSSRules:T8(Q.matchedCSSRules)})):[],dY,oY=`
|
|
82
82
|
function __sd_simulate(p){
|
|
83
83
|
var el = document.elementFromPoint(p.x, p.y);
|
|
84
84
|
if (!el) return false;
|
|
@@ -93,7 +93,7 @@ function __sd_simulate(p){
|
|
|
93
93
|
});
|
|
94
94
|
el.dispatchEvent(ev);
|
|
95
95
|
return true;
|
|
96
|
-
}`,tY=65536,$X,QX,JX,GX=1500;var Q5=d(()=>{u3=Object.create,m3=Object.getPrototypeOf,EQ=Object.defineProperty,c3=Object.getOwnPropertyNames,p3=Object.prototype.hasOwnProperty;a=g3(import.meta.url),w0=G0(($,Q)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");Q.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),C$=G0(($,Q)=>{var{EMPTY_BUFFER:Z}=w0(),J=Buffer[Symbol.species];function Y(z,V){if(z.length===0)return Z;if(z.length===1)return z[0];let H=Buffer.allocUnsafe(V),B=0;for(let N=0;N<z.length;N++){let M=z[N];H.set(M,B),B+=M.length}if(B<V)return new J(H.buffer,H.byteOffset,B);return H}function X(z,V,H,B,N){for(let M=0;M<N;M++)H[B+M]=z[M]^V[M&3]}function G(z,V){for(let H=0;H<z.length;H++)z[H]^=V[H&3]}function W(z){if(z.length===z.buffer.byteLength)return z.buffer;return z.buffer.slice(z.byteOffset,z.byteOffset+z.length)}function K(z){if(K.readOnly=!0,Buffer.isBuffer(z))return z;let V;if(z instanceof ArrayBuffer)V=new J(z);else if(ArrayBuffer.isView(z))V=new J(z.buffer,z.byteOffset,z.byteLength);else V=Buffer.from(z),K.readOnly=!1;return V}if(Q.exports={concat:Y,mask:X,toArrayBuffer:W,toBuffer:K,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let z=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(V,H,B,N,M){if(M<48)X(V,H,B,N,M);else z.mask(V,H,B,N,M)},Q.exports.unmask=function(V,H){if(V.length<32)G(V,H);else z.unmask(V,H)}}catch(z){}}),i3=G0(($,Q)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(X){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=X||1/0,this.jobs=[],this.pending=0}add(X){this.jobs.push(X),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let X=this.jobs.shift();this.pending++,X(this[Z])}}}Q.exports=Y}),k4=G0(($,Q)=>{var Z=a("zlib"),J=C$(),Y=i3(),{kStatusCode:X}=w0(),G=Buffer[Symbol.species],W=Buffer.from([0,0,255,255]),K=Symbol("permessage-deflate"),z=Symbol("total-length"),V=Symbol("callback"),H=Symbol("buffers"),B=Symbol("error"),N;class M{constructor(j){if(this._options=j||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!N){let A=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;N=new Y(A)}}static get extensionName(){return"permessage-deflate"}offer(){let j={};if(this._options.serverNoContextTakeover)j.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)j.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)j.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)j.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)j.client_max_window_bits=!0;return j}accept(j){return j=this.normalizeParams(j),this.params=this._isServer?this.acceptAsServer(j):this.acceptAsClient(j),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let j=this._deflate[V];if(this._deflate.close(),this._deflate=null,j)j(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(j){let A=this._options,E=j.find((P)=>{if(A.serverNoContextTakeover===!1&&P.server_no_context_takeover||P.server_max_window_bits&&(A.serverMaxWindowBits===!1||typeof A.serverMaxWindowBits==="number"&&A.serverMaxWindowBits>P.server_max_window_bits)||typeof A.clientMaxWindowBits==="number"&&!P.client_max_window_bits)return!1;return!0});if(!E)throw Error("None of the extension offers can be accepted");if(A.serverNoContextTakeover)E.server_no_context_takeover=!0;if(A.clientNoContextTakeover)E.client_no_context_takeover=!0;if(typeof A.serverMaxWindowBits==="number")E.server_max_window_bits=A.serverMaxWindowBits;if(typeof A.clientMaxWindowBits==="number")E.client_max_window_bits=A.clientMaxWindowBits;else if(E.client_max_window_bits===!0||A.clientMaxWindowBits===!1)delete E.client_max_window_bits;return E}acceptAsClient(j){let A=j[0];if(this._options.clientNoContextTakeover===!1&&A.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!A.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")A.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&A.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return A}normalizeParams(j){return j.forEach((A)=>{Object.keys(A).forEach((E)=>{let P=A[E];if(P.length>1)throw Error(`Parameter "${E}" must have only a single value`);if(P=P[0],E==="client_max_window_bits"){if(P!==!0){let R=+P;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${E}": ${P}`);P=R}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${E}": ${P}`)}else if(E==="server_max_window_bits"){let R=+P;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${E}": ${P}`);P=R}else if(E==="client_no_context_takeover"||E==="server_no_context_takeover"){if(P!==!0)throw TypeError(`Invalid value for parameter "${E}": ${P}`)}else throw Error(`Unknown parameter "${E}"`);A[E]=P})}),j}decompress(j,A,E){N.add((P)=>{this._decompress(j,A,(R,L)=>{P(),E(R,L)})})}compress(j,A,E){N.add((P)=>{this._compress(j,A,(R,L)=>{P(),E(R,L)})})}_decompress(j,A,E){let P=this._isServer?"client":"server";if(!this._inflate){let R=`${P}_max_window_bits`,L=typeof this.params[R]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[R];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:L}),this._inflate[K]=this,this._inflate[z]=0,this._inflate[H]=[],this._inflate.on("error",C),this._inflate.on("data",q)}if(this._inflate[V]=E,this._inflate.write(j),A)this._inflate.write(W);this._inflate.flush(()=>{let R=this._inflate[B];if(R){this._inflate.close(),this._inflate=null,E(R);return}let L=J.concat(this._inflate[H],this._inflate[z]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[z]=0,this._inflate[H]=[],A&&this.params[`${P}_no_context_takeover`])this._inflate.reset();E(null,L)})}_compress(j,A,E){let P=this._isServer?"server":"client";if(!this._deflate){let R=`${P}_max_window_bits`,L=typeof this.params[R]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[R];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:L}),this._deflate[z]=0,this._deflate[H]=[],this._deflate.on("data",D)}this._deflate[V]=E,this._deflate.write(j),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let R=J.concat(this._deflate[H],this._deflate[z]);if(A)R=new G(R.buffer,R.byteOffset,R.length-4);if(this._deflate[V]=null,this._deflate[z]=0,this._deflate[H]=[],A&&this.params[`${P}_no_context_takeover`])this._deflate.reset();E(null,R)})}}Q.exports=M;function D(j){this[H].push(j),this[z]+=j.length}function q(j){if(this[z]+=j.length,this[K]._maxPayload<1||this[z]<=this[K]._maxPayload){this[H].push(j);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][X]=1009,this.removeListener("data",q),this.reset()}function C(j){if(this[K]._inflate=null,this[B]){this[V](this[B]);return}j[X]=1007,this[V](j)}}),y4=G0(($,Q)=>{var{isUtf8:Z}=a("buffer"),{hasBlob:J}=w0(),Y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function X(K){return K>=1000&&K<=1014&&K!==1004&&K!==1005&&K!==1006||K>=3000&&K<=4999}function G(K){let z=K.length,V=0;while(V<z)if((K[V]&128)===0)V++;else if((K[V]&224)===192){if(V+1===z||(K[V+1]&192)!==128||(K[V]&254)===192)return!1;V+=2}else if((K[V]&240)===224){if(V+2>=z||(K[V+1]&192)!==128||(K[V+2]&192)!==128||K[V]===224&&(K[V+1]&224)===128||K[V]===237&&(K[V+1]&224)===160)return!1;V+=3}else if((K[V]&248)===240){if(V+3>=z||(K[V+1]&192)!==128||(K[V+2]&192)!==128||(K[V+3]&192)!==128||K[V]===240&&(K[V+1]&240)===128||K[V]===244&&K[V+1]>143||K[V]>244)return!1;V+=4}else return!1;return!0}function W(K){return J&&typeof K==="object"&&typeof K.arrayBuffer==="function"&&typeof K.type==="string"&&typeof K.stream==="function"&&(K[Symbol.toStringTag]==="Blob"||K[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:W,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(K){return K.length<24?G(K):Z(K)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let K=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(z){return z.length<32?G(z):K(z)}}catch(K){}}),wQ=G0(($,Q)=>{var{Writable:Z}=a("stream"),J=k4(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:W}=w0(),{concat:K,toArrayBuffer:z,unmask:V}=C$(),{isValidStatusCode:H,isValidUTF8:B}=y4(),N=Buffer[Symbol.species],M=0,D=1,q=2,C=3,j=4,A=5,E=6;class P extends Z{constructor(R={}){super();this._allowSynchronousEvents=R.allowSynchronousEvents!==void 0?R.allowSynchronousEvents:!0,this._binaryType=R.binaryType||Y[0],this._extensions=R.extensions||{},this._isServer=!!R.isServer,this._maxPayload=R.maxPayload|0,this._skipUTF8Validation=!!R.skipUTF8Validation,this[W]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=M}_write(R,L,U){if(this._opcode===8&&this._state==M)return U();this._bufferedBytes+=R.length,this._buffers.push(R),this.startLoop(U)}consume(R){if(this._bufferedBytes-=R,R===this._buffers[0].length)return this._buffers.shift();if(R<this._buffers[0].length){let U=this._buffers[0];return this._buffers[0]=new N(U.buffer,U.byteOffset+R,U.length-R),new N(U.buffer,U.byteOffset,R)}let L=Buffer.allocUnsafe(R);do{let U=this._buffers[0],_=L.length-R;if(R>=U.length)L.set(this._buffers.shift(),_);else L.set(new Uint8Array(U.buffer,U.byteOffset,R),_),this._buffers[0]=new N(U.buffer,U.byteOffset+R,U.length-R);R-=U.length}while(R>0);return L}startLoop(R){this._loop=!0;do switch(this._state){case M:this.getInfo(R);break;case D:this.getPayloadLength16(R);break;case q:this.getPayloadLength64(R);break;case C:this.getMask();break;case j:this.getData(R);break;case A:case E:this._loop=!1;return}while(this._loop);if(!this._errored)R()}getInfo(R){if(this._bufferedBytes<2){this._loop=!1;return}let L=this.consume(2);if((L[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");R(_);return}let U=(L[0]&64)===64;if(U&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(_);return}if(this._fin=(L[0]&128)===128,this._opcode=L[0]&15,this._payloadLength=L[1]&127,this._opcode===0){if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");R(_);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(_);return}this._compressed=U}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let _=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");R(_);return}if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(_);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let _=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");R(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(L[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");R(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");R(_);return}if(this._payloadLength===126)this._state=D;else if(this._payloadLength===127)this._state=q;else this.haveLength(R)}getPayloadLength16(R){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(R)}getPayloadLength64(R){if(this._bufferedBytes<8){this._loop=!1;return}let L=this.consume(8),U=L.readUInt32BE(0);if(U>Math.pow(2,21)-1){let _=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");R(_);return}this._payloadLength=U*Math.pow(2,32)+L.readUInt32BE(4),this.haveLength(R)}haveLength(R){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let L=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");R(L);return}}if(this._masked)this._state=C;else this._state=j}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=j}getData(R){let L=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(L=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)V(L,this._mask)}if(this._opcode>7){this.controlMessage(L,R);return}if(this._compressed){this._state=A,this.decompress(L,R);return}if(L.length)this._messageLength=this._totalPayloadLength,this._fragments.push(L);this.dataMessage(R)}decompress(R,L){this._extensions[J.extensionName].decompress(R,this._fin,(_,F)=>{if(_)return L(_);if(F.length){if(this._messageLength+=F.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let T=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");L(T);return}this._fragments.push(F)}if(this.dataMessage(L),this._state===M)this.startLoop(L)})}dataMessage(R){if(!this._fin){this._state=M;return}let L=this._messageLength,U=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let _;if(this._binaryType==="nodebuffer")_=K(U,L);else if(this._binaryType==="arraybuffer")_=z(K(U,L));else if(this._binaryType==="blob")_=new Blob(U);else _=U;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=M;else this._state=E,setImmediate(()=>{this.emit("message",_,!0),this._state=M,this.startLoop(R)})}else{let _=K(U,L);if(!this._skipUTF8Validation&&!B(_)){let F=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");R(F);return}if(this._state===A||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=M;else this._state=E,setImmediate(()=>{this.emit("message",_,!1),this._state=M,this.startLoop(R)})}}controlMessage(R,L){if(this._opcode===8){if(R.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let U=R.readUInt16BE(0);if(!H(U)){let F=this.createError(RangeError,`invalid status code ${U}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");L(F);return}let _=new N(R.buffer,R.byteOffset+2,R.length-2);if(!this._skipUTF8Validation&&!B(_)){let F=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");L(F);return}this._loop=!1,this.emit("conclude",U,_),this.end()}this._state=M;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",R),this._state=M;else this._state=E,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",R),this._state=M,this.startLoop(L)})}createError(R,L,U,_,F){this._loop=!1,this._errored=!0;let T=new R(U?`Invalid WebSocket frame: ${L}`:L);return Error.captureStackTrace(T,this.createError),T.code=F,T[G]=_,T}}Q.exports=P}),kQ=G0(($,Q)=>{var{Duplex:Z}=a("stream"),{randomFillSync:J}=a("crypto"),Y=k4(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:W}=w0(),{isBlob:K,isValidStatusCode:z}=y4(),{mask:V,toBuffer:H}=C$(),B=Symbol("kByteLength"),N=Buffer.alloc(4),M=8192,D,q=M,C=0,j=1,A=2;class E{constructor(L,U,_){if(this._extensions=U||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=L,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=C,this.onerror=W,this[G]=void 0}static frame(L,U){let _,F=!1,T=2,I=!1;if(U.mask){if(_=U.maskBuffer||N,U.generateMask)U.generateMask(_);else{if(q===M){if(D===void 0)D=Buffer.alloc(M);J(D,0,M),q=0}_[0]=D[q++],_[1]=D[q++],_[2]=D[q++],_[3]=D[q++]}I=(_[0]|_[1]|_[2]|_[3])===0,T=6}let S;if(typeof L==="string")if((!U.mask||I)&&U[B]!==void 0)S=U[B];else L=Buffer.from(L),S=L.length;else S=L.length,F=U.mask&&U.readOnly&&!I;let k=S;if(S>=65536)T+=8,k=127;else if(S>125)T+=2,k=126;let y=Buffer.allocUnsafe(F?S+T:T);if(y[0]=U.fin?U.opcode|128:U.opcode,U.rsv1)y[0]|=64;if(y[1]=k,k===126)y.writeUInt16BE(S,2);else if(k===127)y[2]=y[3]=0,y.writeUIntBE(S,4,6);if(!U.mask)return[y,L];if(y[1]|=128,y[T-4]=_[0],y[T-3]=_[1],y[T-2]=_[2],y[T-1]=_[3],I)return[y,L];if(F)return V(L,_,y,T,S),[y];return V(L,_,L,0,S),[y,L]}close(L,U,_,F){let T;if(L===void 0)T=X;else if(typeof L!=="number"||!z(L))throw TypeError("First argument must be a valid error code number");else if(U===void 0||!U.length)T=Buffer.allocUnsafe(2),T.writeUInt16BE(L,0);else{let S=Buffer.byteLength(U);if(S>123)throw RangeError("The message must not be greater than 123 bytes");if(T=Buffer.allocUnsafe(2+S),T.writeUInt16BE(L,0),typeof U==="string")T.write(U,2);else T.set(U,2)}let I={[B]:T.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==C)this.enqueue([this.dispatch,T,!1,I,F]);else this.sendFrame(E.frame(T,I),F)}ping(L,U,_){let F,T;if(typeof L==="string")F=Buffer.byteLength(L),T=!1;else if(K(L))F=L.size,T=!1;else L=H(L),F=L.length,T=H.readOnly;if(F>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[B]:F,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:9,readOnly:T,rsv1:!1};if(K(L))if(this._state!==C)this.enqueue([this.getBlobData,L,!1,I,_]);else this.getBlobData(L,!1,I,_);else if(this._state!==C)this.enqueue([this.dispatch,L,!1,I,_]);else this.sendFrame(E.frame(L,I),_)}pong(L,U,_){let F,T;if(typeof L==="string")F=Buffer.byteLength(L),T=!1;else if(K(L))F=L.size,T=!1;else L=H(L),F=L.length,T=H.readOnly;if(F>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[B]:F,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:10,readOnly:T,rsv1:!1};if(K(L))if(this._state!==C)this.enqueue([this.getBlobData,L,!1,I,_]);else this.getBlobData(L,!1,I,_);else if(this._state!==C)this.enqueue([this.dispatch,L,!1,I,_]);else this.sendFrame(E.frame(L,I),_)}send(L,U,_){let F=this._extensions[Y.extensionName],T=U.binary?2:1,I=U.compress,S,k;if(typeof L==="string")S=Buffer.byteLength(L),k=!1;else if(K(L))S=L.size,k=!1;else L=H(L),S=L.length,k=H.readOnly;if(this._firstFragment){if(this._firstFragment=!1,I&&F&&F.params[F._isServer?"server_no_context_takeover":"client_no_context_takeover"])I=S>=F._threshold;this._compress=I}else I=!1,T=0;if(U.fin)this._firstFragment=!0;let y={[B]:S,fin:U.fin,generateMask:this._generateMask,mask:U.mask,maskBuffer:this._maskBuffer,opcode:T,readOnly:k,rsv1:I};if(K(L))if(this._state!==C)this.enqueue([this.getBlobData,L,this._compress,y,_]);else this.getBlobData(L,this._compress,y,_);else if(this._state!==C)this.enqueue([this.dispatch,L,this._compress,y,_]);else this.dispatch(L,this._compress,y,_)}getBlobData(L,U,_,F){this._bufferedBytes+=_[B],this._state=A,L.arrayBuffer().then((T)=>{if(this._socket.destroyed){let S=Error("The socket was closed while the blob was being read");process.nextTick(P,this,S,F);return}this._bufferedBytes-=_[B];let I=H(T);if(!U)this._state=C,this.sendFrame(E.frame(I,_),F),this.dequeue();else this.dispatch(I,U,_,F)}).catch((T)=>{process.nextTick(R,this,T,F)})}dispatch(L,U,_,F){if(!U){this.sendFrame(E.frame(L,_),F);return}let T=this._extensions[Y.extensionName];this._bufferedBytes+=_[B],this._state=j,T.compress(L,_.fin,(I,S)=>{if(this._socket.destroyed){let k=Error("The socket was closed while data was being compressed");P(this,k,F);return}this._bufferedBytes-=_[B],this._state=C,_.readOnly=!1,this.sendFrame(E.frame(S,_),F),this.dequeue()})}dequeue(){while(this._state===C&&this._queue.length){let L=this._queue.shift();this._bufferedBytes-=L[3][B],Reflect.apply(L[0],this,L.slice(1))}}enqueue(L){this._bufferedBytes+=L[3][B],this._queue.push(L)}sendFrame(L,U){if(L.length===2)this._socket.cork(),this._socket.write(L[0]),this._socket.write(L[1],U),this._socket.uncork();else this._socket.write(L[0],U)}}Q.exports=E;function P(L,U,_){if(typeof _==="function")_(U);for(let F=0;F<L._queue.length;F++){let T=L._queue[F],I=T[T.length-1];if(typeof I==="function")I(U)}}function R(L,U,_){P(L,U,_),L.onerror(U)}}),o3=G0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=w0(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),W=Symbol("kMessage"),K=Symbol("kReason"),z=Symbol("kTarget"),V=Symbol("kType"),H=Symbol("kWasClean");class B{constructor(j){this[z]=null,this[V]=j}get target(){return this[z]}get type(){return this[V]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class N extends B{constructor(j,A={}){super(j);this[Y]=A.code===void 0?0:A.code,this[K]=A.reason===void 0?"":A.reason,this[H]=A.wasClean===void 0?!1:A.wasClean}get code(){return this[Y]}get reason(){return this[K]}get wasClean(){return this[H]}}Object.defineProperty(N.prototype,"code",{enumerable:!0}),Object.defineProperty(N.prototype,"reason",{enumerable:!0}),Object.defineProperty(N.prototype,"wasClean",{enumerable:!0});class M extends B{constructor(j,A={}){super(j);this[G]=A.error===void 0?null:A.error,this[W]=A.message===void 0?"":A.message}get error(){return this[G]}get message(){return this[W]}}Object.defineProperty(M.prototype,"error",{enumerable:!0}),Object.defineProperty(M.prototype,"message",{enumerable:!0});class D extends B{constructor(j,A={}){super(j);this[X]=A.data===void 0?null:A.data}get data(){return this[X]}}Object.defineProperty(D.prototype,"data",{enumerable:!0});var q={addEventListener(j,A,E={}){for(let R of this.listeners(j))if(!E[Z]&&R[J]===A&&!R[Z])return;let P;if(j==="message")P=function(L,U){let _=new D("message",{data:U?L:L.toString()});_[z]=this,C(A,this,_)};else if(j==="close")P=function(L,U){let _=new N("close",{code:L,reason:U.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[z]=this,C(A,this,_)};else if(j==="error")P=function(L){let U=new M("error",{error:L,message:L.message});U[z]=this,C(A,this,U)};else if(j==="open")P=function(){let L=new B("open");L[z]=this,C(A,this,L)};else return;if(P[Z]=!!E[Z],P[J]=A,E.once)this.once(j,P);else this.on(j,P)},removeEventListener(j,A){for(let E of this.listeners(j))if(E[J]===A&&!E[Z]){this.removeListener(j,E);break}}};Q.exports={CloseEvent:N,ErrorEvent:M,Event:B,EventTarget:q,MessageEvent:D};function C(j,A,E){if(typeof j==="object"&&j.handleEvent)j.handleEvent.call(j,E);else j.call(A,E)}}),_8=G0(($,Q)=>{var{tokenChars:Z}=y4();function J(G,W,K){if(G[W]===void 0)G[W]=[K];else G[W].push(K)}function Y(G){let W=Object.create(null),K=Object.create(null),z=!1,V=!1,H=!1,B,N,M=-1,D=-1,q=-1,C=0;for(;C<G.length;C++)if(D=G.charCodeAt(C),B===void 0)if(q===-1&&Z[D]===1){if(M===-1)M=C}else if(C!==0&&(D===32||D===9)){if(q===-1&&M!==-1)q=C}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${C}`);if(q===-1)q=C;let A=G.slice(M,q);if(D===44)J(W,A,K),K=Object.create(null);else B=A;M=q=-1}else throw SyntaxError(`Unexpected character at index ${C}`);else if(N===void 0)if(q===-1&&Z[D]===1){if(M===-1)M=C}else if(D===32||D===9){if(q===-1&&M!==-1)q=C}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${C}`);if(q===-1)q=C;if(J(K,G.slice(M,q),!0),D===44)J(W,B,K),K=Object.create(null),B=void 0;M=q=-1}else if(D===61&&M!==-1&&q===-1)N=G.slice(M,C),M=q=-1;else throw SyntaxError(`Unexpected character at index ${C}`);else if(V){if(Z[D]!==1)throw SyntaxError(`Unexpected character at index ${C}`);if(M===-1)M=C;else if(!z)z=!0;V=!1}else if(H)if(Z[D]===1){if(M===-1)M=C}else if(D===34&&M!==-1)H=!1,q=C;else if(D===92)V=!0;else throw SyntaxError(`Unexpected character at index ${C}`);else if(D===34&&G.charCodeAt(C-1)===61)H=!0;else if(q===-1&&Z[D]===1){if(M===-1)M=C}else if(M!==-1&&(D===32||D===9)){if(q===-1)q=C}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${C}`);if(q===-1)q=C;let A=G.slice(M,q);if(z)A=A.replace(/\\/g,""),z=!1;if(J(K,N,A),D===44)J(W,B,K),K=Object.create(null),B=void 0;N=void 0,M=q=-1}else throw SyntaxError(`Unexpected character at index ${C}`);if(M===-1||H||D===32||D===9)throw SyntaxError("Unexpected end of input");if(q===-1)q=C;let j=G.slice(M,q);if(B===void 0)J(W,j,K);else{if(N===void 0)J(K,j,!0);else if(z)J(K,N,j.replace(/\\/g,""));else J(K,N,j);J(W,B,K)}return W}function X(G){return Object.keys(G).map((W)=>{let K=G[W];if(!Array.isArray(K))K=[K];return K.map((z)=>{return[W].concat(Object.keys(z).map((V)=>{let H=z[V];if(!Array.isArray(H))H=[H];return H.map((B)=>B===!0?V:`${V}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),B8=G0(($,Q)=>{var Z=a("events"),J=a("https"),Y=a("http"),X=a("net"),G=a("tls"),{randomBytes:W,createHash:K}=a("crypto"),{Duplex:z,Readable:V}=a("stream"),{URL:H}=a("url"),B=k4(),N=wQ(),M=kQ(),{isBlob:D}=y4(),{BINARY_TYPES:q,CLOSE_TIMEOUT:C,EMPTY_BUFFER:j,GUID:A,kForOnEventAttribute:E,kListener:P,kStatusCode:R,kWebSocket:L,NOOP:U}=w0(),{EventTarget:{addEventListener:_,removeEventListener:F}}=o3(),{format:T,parse:I}=_8(),{toBuffer:S}=C$(),k=Symbol("kAborted"),y=[8,13],f=["CONNECTING","OPEN","CLOSING","CLOSED"],u=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class x extends Z{constructor(O,w,h){super();if(this._binaryType=q[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=j,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=x.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,O!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,w===void 0)w=[];else if(!Array.isArray(w))if(typeof w==="object"&&w!==null)h=w,w=[];else w=[w];g(this,O,w,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(O){if(!q.includes(O))return;if(this._binaryType=O,this._receiver)this._receiver._binaryType=O}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(O,w,h){let c=new N({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),b=new M(O,this._extensions,h.generateMask);if(this._receiver=c,this._sender=b,this._socket=O,c[L]=this,b[L]=this,O[L]=this,c.on("conclude",n5),c.on("drain",d5),c.on("error",i5),c.on("message",o5),c.on("ping",a5),c.on("pong",r5),b.onerror=t5,O.setTimeout)O.setTimeout(0);if(O.setNoDelay)O.setNoDelay();if(w.length>0)O.unshift(w);O.on("close",u8),O.on("data",p4),O.on("end",m8),O.on("error",c8),this._readyState=x.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=x.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=x.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(O,w){if(this.readyState===x.CLOSED)return;if(this.readyState===x.CONNECTING){Y0(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===x.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=x.CLOSING,this._sender.close(O,w,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),g8(this)}pause(){if(this.readyState===x.CONNECTING||this.readyState===x.CLOSED)return;this._paused=!0,this._socket.pause()}ping(O,w,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==x.OPEN){v$(this,O,h);return}if(w===void 0)w=!this._isServer;this._sender.ping(O||j,w,h)}pong(O,w,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==x.OPEN){v$(this,O,h);return}if(w===void 0)w=!this._isServer;this._sender.pong(O||j,w,h)}resume(){if(this.readyState===x.CONNECTING||this.readyState===x.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(O,w,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof w==="function")h=w,w={};if(typeof O==="number")O=O.toString();if(this.readyState!==x.OPEN){v$(this,O,h);return}let c={binary:typeof O!=="string",mask:!this._isServer,compress:!0,fin:!0,...w};if(!this._extensions[B.extensionName])c.compress=!1;this._sender.send(O||j,c,h)}terminate(){if(this.readyState===x.CLOSED)return;if(this.readyState===x.CONNECTING){Y0(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=x.CLOSING,this._socket.destroy()}}Object.defineProperty(x,"CONNECTING",{enumerable:!0,value:f.indexOf("CONNECTING")}),Object.defineProperty(x.prototype,"CONNECTING",{enumerable:!0,value:f.indexOf("CONNECTING")}),Object.defineProperty(x,"OPEN",{enumerable:!0,value:f.indexOf("OPEN")}),Object.defineProperty(x.prototype,"OPEN",{enumerable:!0,value:f.indexOf("OPEN")}),Object.defineProperty(x,"CLOSING",{enumerable:!0,value:f.indexOf("CLOSING")}),Object.defineProperty(x.prototype,"CLOSING",{enumerable:!0,value:f.indexOf("CLOSING")}),Object.defineProperty(x,"CLOSED",{enumerable:!0,value:f.indexOf("CLOSED")}),Object.defineProperty(x.prototype,"CLOSED",{enumerable:!0,value:f.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((O)=>{Object.defineProperty(x.prototype,O,{enumerable:!0})}),["open","error","close","message"].forEach((O)=>{Object.defineProperty(x.prototype,`on${O}`,{enumerable:!0,get(){for(let w of this.listeners(O))if(w[E])return w[P];return null},set(w){for(let h of this.listeners(O))if(h[E]){this.removeListener(O,h);break}if(typeof w!=="function")return;this.addEventListener(O,w,{[E]:!0})}})}),x.prototype.addEventListener=_,x.prototype.removeEventListener=F,Q.exports=x;function g(O,w,h,c){let b={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:C,protocolVersion:y[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...c,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(O._autoPong=b.autoPong,O._closeTimeout=b.closeTimeout,!y.includes(b.protocolVersion))throw RangeError(`Unsupported protocol version: ${b.protocolVersion} (supported versions: ${y.join(", ")})`);let n;if(w instanceof H)n=w;else try{n=new H(w)}catch{throw SyntaxError(`Invalid URL: ${w}`)}if(n.protocol==="http:")n.protocol="ws:";else if(n.protocol==="https:")n.protocol="wss:";O._url=n.href;let r0=n.protocol==="wss:",t0=n.protocol==="ws+unix:",U4;if(n.protocol!=="ws:"&&!r0&&!t0)U4=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(t0&&!n.pathname)U4="The URL's pathname is empty";else if(n.hash)U4="The URL contains a fragment identifier";if(U4){let p=SyntaxError(U4);if(O._redirects===0)throw p;else{r(O,p);return}}let p8=r0?443:80,l8=W(16).toString("base64"),n8=r0?J.request:Y.request,_4=new Set,B4;if(b.createConnection=b.createConnection||(r0?a0:R0),b.defaultPort=b.defaultPort||p8,b.port=n.port||p8,b.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,b.headers={...b.headers,"Sec-WebSocket-Version":b.protocolVersion,"Sec-WebSocket-Key":l8,Connection:"Upgrade",Upgrade:"websocket"},b.path=n.pathname+n.search,b.timeout=b.handshakeTimeout,b.perMessageDeflate)B4=new B({...b.perMessageDeflate,isServer:!1,maxPayload:b.maxPayload}),b.headers["Sec-WebSocket-Extensions"]=T({[B.extensionName]:B4.offer()});if(h.length){for(let p of h){if(typeof p!=="string"||!u.test(p)||_4.has(p))throw SyntaxError("An invalid or duplicated subprotocol was specified");_4.add(p)}b.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(b.origin)if(b.protocolVersion<13)b.headers["Sec-WebSocket-Origin"]=b.origin;else b.headers.Origin=b.origin;if(n.username||n.password)b.auth=`${n.username}:${n.password}`;if(t0){let p=b.path.split(":");b.socketPath=p[0],b.path=p[1]}let o;if(b.followRedirects){if(O._redirects===0){O._originalIpc=t0,O._originalSecure=r0,O._originalHostOrSocketPath=t0?b.socketPath:n.host;let p=c&&c.headers;if(c={...c,headers:{}},p)for(let[$0,s0]of Object.entries(p))c.headers[$0.toLowerCase()]=s0}else if(O.listenerCount("redirect")===0){let p=t0?O._originalIpc?b.socketPath===O._originalHostOrSocketPath:!1:O._originalIpc?!1:n.host===O._originalHostOrSocketPath;if(!p||O._originalSecure&&!r0){if(delete b.headers.authorization,delete b.headers.cookie,!p)delete b.headers.host;b.auth=void 0}}if(b.auth&&!c.headers.authorization)c.headers.authorization="Basic "+Buffer.from(b.auth).toString("base64");if(o=O._req=n8(b),O._redirects)O.emit("redirect",O.url,o)}else o=O._req=n8(b);if(b.timeout)o.on("timeout",()=>{Y0(O,o,"Opening handshake has timed out")});if(o.on("error",(p)=>{if(o===null||o[k])return;o=O._req=null,r(O,p)}),o.on("response",(p)=>{let $0=p.headers.location,s0=p.statusCode;if($0&&b.followRedirects&&s0>=300&&s0<400){if(++O._redirects>b.maxRedirects){Y0(O,o,"Maximum redirects exceeded");return}o.abort();let R4;try{R4=new H($0,w)}catch(d8){let e0=SyntaxError(`Invalid URL: ${$0}`);r(O,e0);return}g(O,R4,h,c)}else if(!O.emit("unexpected-response",o,p))Y0(O,o,`Unexpected server response: ${p.statusCode}`)}),o.on("upgrade",(p,$0,s0)=>{if(O.emit("upgrade",p),O.readyState!==x.CONNECTING)return;o=O._req=null;let R4=p.headers.upgrade;if(R4===void 0||R4.toLowerCase()!=="websocket"){Y0(O,$0,"Invalid Upgrade header");return}let d8=K("sha1").update(l8+A).digest("base64");if(p.headers["sec-websocket-accept"]!==d8){Y0(O,$0,"Invalid Sec-WebSocket-Accept header");return}let e0=p.headers["sec-websocket-protocol"],N4;if(e0!==void 0){if(!_4.size)N4="Server sent a subprotocol but none was requested";else if(!_4.has(e0))N4="Server sent an invalid subprotocol"}else if(_4.size)N4="Server sent no subprotocol";if(N4){Y0(O,$0,N4);return}if(e0)O._protocol=e0;let i8=p.headers["sec-websocket-extensions"];if(i8!==void 0){if(!B4){Y0(O,$0,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let h$;try{h$=I(i8)}catch(g$){Y0(O,$0,"Invalid Sec-WebSocket-Extensions header");return}let o8=Object.keys(h$);if(o8.length!==1||o8[0]!==B.extensionName){Y0(O,$0,"Server indicated an extension that was not requested");return}try{B4.accept(h$[B.extensionName])}catch(g$){Y0(O,$0,"Invalid Sec-WebSocket-Extensions header");return}O._extensions[B.extensionName]=B4}O.setSocket($0,s0,{allowSynchronousEvents:b.allowSynchronousEvents,generateMask:b.generateMask,maxPayload:b.maxPayload,skipUTF8Validation:b.skipUTF8Validation})}),b.finishRequest)b.finishRequest(o,O);else o.end()}function r(O,w){O._readyState=x.CLOSING,O._errorEmitted=!0,O.emit("error",w),O.emitClose()}function R0(O){return O.path=O.socketPath,X.connect(O)}function a0(O){if(O.path=void 0,!O.servername&&O.servername!=="")O.servername=X.isIP(O.host)?"":O.host;return G.connect(O)}function Y0(O,w,h){O._readyState=x.CLOSING;let c=Error(h);if(Error.captureStackTrace(c,Y0),w.setHeader){if(w[k]=!0,w.abort(),w.socket&&!w.socket.destroyed)w.socket.destroy();process.nextTick(r,O,c)}else w.destroy(c),w.once("error",O.emit.bind(O,"error")),w.once("close",O.emitClose.bind(O))}function v$(O,w,h){if(w){let c=D(w)?w.size:S(w).length;if(O._socket)O._sender._bufferedBytes+=c;else O._bufferedAmount+=c}if(h){let c=Error(`WebSocket is not open: readyState ${O.readyState} (${f[O.readyState]})`);process.nextTick(h,c)}}function n5(O,w){let h=this[L];if(h._closeFrameReceived=!0,h._closeMessage=w,h._closeCode=O,h._socket[L]===void 0)return;if(h._socket.removeListener("data",p4),process.nextTick(h8,h._socket),O===1005)h.close();else h.close(O,w)}function d5(){let O=this[L];if(!O.isPaused)O._socket.resume()}function i5(O){let w=this[L];if(w._socket[L]!==void 0)w._socket.removeListener("data",p4),process.nextTick(h8,w._socket),w.close(O[R]);if(!w._errorEmitted)w._errorEmitted=!0,w.emit("error",O)}function v8(){this[L].emitClose()}function o5(O,w){this[L].emit("message",O,w)}function a5(O){let w=this[L];if(w._autoPong)w.pong(O,!this._isServer,U);w.emit("ping",O)}function r5(O){this[L].emit("pong",O)}function h8(O){O.resume()}function t5(O){let w=this[L];if(w.readyState===x.CLOSED)return;if(w.readyState===x.OPEN)w._readyState=x.CLOSING,g8(w);if(this._socket.end(),!w._errorEmitted)w._errorEmitted=!0,w.emit("error",O)}function g8(O){O._closeTimer=setTimeout(O._socket.destroy.bind(O._socket),O._closeTimeout)}function u8(){let O=this[L];if(this.removeListener("close",u8),this.removeListener("data",p4),this.removeListener("end",m8),O._readyState=x.CLOSING,!this._readableState.endEmitted&&!O._closeFrameReceived&&!O._receiver._writableState.errorEmitted&&this._readableState.length!==0){let w=this.read(this._readableState.length);O._receiver.write(w)}if(O._receiver.end(),this[L]=void 0,clearTimeout(O._closeTimer),O._receiver._writableState.finished||O._receiver._writableState.errorEmitted)O.emitClose();else O._receiver.on("error",v8),O._receiver.on("finish",v8)}function p4(O){if(!this[L]._receiver.write(O))this.pause()}function m8(){let O=this[L];O._readyState=x.CLOSING,O._receiver.end(),this.end()}function c8(){let O=this[L];if(this.removeListener("error",c8),this.on("error",U),O)O._readyState=x.CLOSING,this.destroy()}}),a3=G0(($,Q)=>{var Z=B8(),{Duplex:J}=a("stream");function Y(K){K.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(K){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",K)}function W(K,z){let V=!0,H=new J({...z,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return K.on("message",function(N,M){let D=!M&&H._readableState.objectMode?N.toString():N;if(!H.push(D))K.pause()}),K.once("error",function(N){if(H.destroyed)return;V=!1,H.destroy(N)}),K.once("close",function(){if(H.destroyed)return;H.push(null)}),H._destroy=function(B,N){if(K.readyState===K.CLOSED){N(B),process.nextTick(Y,H);return}let M=!1;if(K.once("error",function(q){M=!0,N(q)}),K.once("close",function(){if(!M)N(B);process.nextTick(Y,H)}),V)K.terminate()},H._final=function(B){if(K.readyState===K.CONNECTING){K.once("open",function(){H._final(B)});return}if(K._socket===null)return;if(K._socket._writableState.finished){if(B(),H._readableState.endEmitted)H.destroy()}else K._socket.once("finish",function(){B()}),K.close()},H._read=function(){if(K.isPaused)K.resume()},H._write=function(B,N,M){if(K.readyState===K.CONNECTING){K.once("open",function(){H._write(B,N,M)});return}K.send(B,M)},H.on("end",X),H.on("error",G),H}Q.exports=W}),yQ=G0(($,Q)=>{var{tokenChars:Z}=y4();function J(Y){let X=new Set,G=-1,W=-1,K=0;for(K;K<Y.length;K++){let V=Y.charCodeAt(K);if(W===-1&&Z[V]===1){if(G===-1)G=K}else if(K!==0&&(V===32||V===9)){if(W===-1&&G!==-1)W=K}else if(V===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${K}`);if(W===-1)W=K;let H=Y.slice(G,W);if(X.has(H))throw SyntaxError(`The "${H}" subprotocol is duplicated`);X.add(H),G=W=-1}else throw SyntaxError(`Unexpected character at index ${K}`)}if(G===-1||W!==-1)throw SyntaxError("Unexpected end of input");let z=Y.slice(G,K);if(X.has(z))throw SyntaxError(`The "${z}" subprotocol is duplicated`);return X.add(z),X}Q.exports={parse:J}}),r3=G0(($,Q)=>{var Z=a("events"),J=a("http"),{Duplex:Y}=a("stream"),{createHash:X}=a("crypto"),G=_8(),W=k4(),K=yQ(),z=B8(),{CLOSE_TIMEOUT:V,GUID:H,kWebSocket:B}=w0(),N=/^[+/0-9A-Za-z]{22}==$/,M=0,D=1,q=2;class C extends Z{constructor(L,U){super();if(L={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:V,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:z,...L},L.port==null&&!L.server&&!L.noServer||L.port!=null&&(L.server||L.noServer)||L.server&&L.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(L.port!=null)this._server=J.createServer((_,F)=>{let T=J.STATUS_CODES[426];F.writeHead(426,{"Content-Length":T.length,"Content-Type":"text/plain"}),F.end(T)}),this._server.listen(L.port,L.host,L.backlog,U);else if(L.server)this._server=L.server;if(this._server){let _=this.emit.bind(this,"connection");this._removeListeners=j(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(F,T,I)=>{this.handleUpgrade(F,T,I,_)}})}if(L.perMessageDeflate===!0)L.perMessageDeflate={};if(L.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=L,this._state=M}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(L){if(this._state===q){if(L)this.once("close",()=>{L(Error("The server is not running"))});process.nextTick(A,this);return}if(L)this.once("close",L);if(this._state===D)return;if(this._state=D,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(A,this);else this._shouldEmitClose=!0;else process.nextTick(A,this)}else{let U=this._server;this._removeListeners(),this._removeListeners=this._server=null,U.close(()=>{A(this)})}}shouldHandle(L){if(this.options.path){let U=L.url.indexOf("?");if((U!==-1?L.url.slice(0,U):L.url)!==this.options.path)return!1}return!0}handleUpgrade(L,U,_,F){U.on("error",E);let T=L.headers["sec-websocket-key"],I=L.headers.upgrade,S=+L.headers["sec-websocket-version"];if(L.method!=="GET"){R(this,L,U,405,"Invalid HTTP method");return}if(I===void 0||I.toLowerCase()!=="websocket"){R(this,L,U,400,"Invalid Upgrade header");return}if(T===void 0||!N.test(T)){R(this,L,U,400,"Missing or invalid Sec-WebSocket-Key header");return}if(S!==13&&S!==8){R(this,L,U,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(L)){P(U,400);return}let k=L.headers["sec-websocket-protocol"],y=new Set;if(k!==void 0)try{y=K.parse(k)}catch(x){R(this,L,U,400,"Invalid Sec-WebSocket-Protocol header");return}let f=L.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&f!==void 0){let x=new W({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=G.parse(f);if(g[W.extensionName])x.accept(g[W.extensionName]),u[W.extensionName]=x}catch(g){R(this,L,U,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let x={origin:L.headers[`${S===8?"sec-websocket-origin":"origin"}`],secure:!!(L.socket.authorized||L.socket.encrypted),req:L};if(this.options.verifyClient.length===2){this.options.verifyClient(x,(g,r,R0,a0)=>{if(!g)return P(U,r||401,R0,a0);this.completeUpgrade(u,T,y,L,U,_,F)});return}if(!this.options.verifyClient(x))return P(U,401)}this.completeUpgrade(u,T,y,L,U,_,F)}completeUpgrade(L,U,_,F,T,I,S){if(!T.readable||!T.writable)return T.destroy();if(T[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>M)return P(T,503);let y=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(U+H).digest("base64")}`],f=new this.options.WebSocket(null,void 0,this.options);if(_.size){let u=this.options.handleProtocols?this.options.handleProtocols(_,F):_.values().next().value;if(u)y.push(`Sec-WebSocket-Protocol: ${u}`),f._protocol=u}if(L[W.extensionName]){let u=L[W.extensionName].params,x=G.format({[W.extensionName]:[u]});y.push(`Sec-WebSocket-Extensions: ${x}`),f._extensions=L}if(this.emit("headers",y,F),T.write(y.concat(`\r
|
|
96
|
+
}`,tY=65536,$X,QX,JX,GX=1500;var Q5=d(()=>{u3=Object.create,m3=Object.getPrototypeOf,EQ=Object.defineProperty,c3=Object.getOwnPropertyNames,p3=Object.prototype.hasOwnProperty;a=g3(import.meta.url),w0=K0(($,Q)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");Q.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),C$=K0(($,Q)=>{var{EMPTY_BUFFER:Z}=w0(),J=Buffer[Symbol.species];function Y(z,V){if(z.length===0)return Z;if(z.length===1)return z[0];let H=Buffer.allocUnsafe(V),B=0;for(let N=0;N<z.length;N++){let M=z[N];H.set(M,B),B+=M.length}if(B<V)return new J(H.buffer,H.byteOffset,B);return H}function X(z,V,H,B,N){for(let M=0;M<N;M++)H[B+M]=z[M]^V[M&3]}function G(z,V){for(let H=0;H<z.length;H++)z[H]^=V[H&3]}function W(z){if(z.length===z.buffer.byteLength)return z.buffer;return z.buffer.slice(z.byteOffset,z.byteOffset+z.length)}function K(z){if(K.readOnly=!0,Buffer.isBuffer(z))return z;let V;if(z instanceof ArrayBuffer)V=new J(z);else if(ArrayBuffer.isView(z))V=new J(z.buffer,z.byteOffset,z.byteLength);else V=Buffer.from(z),K.readOnly=!1;return V}if(Q.exports={concat:Y,mask:X,toArrayBuffer:W,toBuffer:K,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let z=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(V,H,B,N,M){if(M<48)X(V,H,B,N,M);else z.mask(V,H,B,N,M)},Q.exports.unmask=function(V,H){if(V.length<32)G(V,H);else z.unmask(V,H)}}catch(z){}}),i3=K0(($,Q)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(X){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=X||1/0,this.jobs=[],this.pending=0}add(X){this.jobs.push(X),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let X=this.jobs.shift();this.pending++,X(this[Z])}}}Q.exports=Y}),k4=K0(($,Q)=>{var Z=a("zlib"),J=C$(),Y=i3(),{kStatusCode:X}=w0(),G=Buffer[Symbol.species],W=Buffer.from([0,0,255,255]),K=Symbol("permessage-deflate"),z=Symbol("total-length"),V=Symbol("callback"),H=Symbol("buffers"),B=Symbol("error"),N;class M{constructor(j){if(this._options=j||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!N){let A=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;N=new Y(A)}}static get extensionName(){return"permessage-deflate"}offer(){let j={};if(this._options.serverNoContextTakeover)j.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)j.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)j.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)j.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)j.client_max_window_bits=!0;return j}accept(j){return j=this.normalizeParams(j),this.params=this._isServer?this.acceptAsServer(j):this.acceptAsClient(j),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let j=this._deflate[V];if(this._deflate.close(),this._deflate=null,j)j(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(j){let A=this._options,E=j.find((P)=>{if(A.serverNoContextTakeover===!1&&P.server_no_context_takeover||P.server_max_window_bits&&(A.serverMaxWindowBits===!1||typeof A.serverMaxWindowBits==="number"&&A.serverMaxWindowBits>P.server_max_window_bits)||typeof A.clientMaxWindowBits==="number"&&!P.client_max_window_bits)return!1;return!0});if(!E)throw Error("None of the extension offers can be accepted");if(A.serverNoContextTakeover)E.server_no_context_takeover=!0;if(A.clientNoContextTakeover)E.client_no_context_takeover=!0;if(typeof A.serverMaxWindowBits==="number")E.server_max_window_bits=A.serverMaxWindowBits;if(typeof A.clientMaxWindowBits==="number")E.client_max_window_bits=A.clientMaxWindowBits;else if(E.client_max_window_bits===!0||A.clientMaxWindowBits===!1)delete E.client_max_window_bits;return E}acceptAsClient(j){let A=j[0];if(this._options.clientNoContextTakeover===!1&&A.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!A.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")A.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&A.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return A}normalizeParams(j){return j.forEach((A)=>{Object.keys(A).forEach((E)=>{let P=A[E];if(P.length>1)throw Error(`Parameter "${E}" must have only a single value`);if(P=P[0],E==="client_max_window_bits"){if(P!==!0){let R=+P;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${E}": ${P}`);P=R}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${E}": ${P}`)}else if(E==="server_max_window_bits"){let R=+P;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${E}": ${P}`);P=R}else if(E==="client_no_context_takeover"||E==="server_no_context_takeover"){if(P!==!0)throw TypeError(`Invalid value for parameter "${E}": ${P}`)}else throw Error(`Unknown parameter "${E}"`);A[E]=P})}),j}decompress(j,A,E){N.add((P)=>{this._decompress(j,A,(R,L)=>{P(),E(R,L)})})}compress(j,A,E){N.add((P)=>{this._compress(j,A,(R,L)=>{P(),E(R,L)})})}_decompress(j,A,E){let P=this._isServer?"client":"server";if(!this._inflate){let R=`${P}_max_window_bits`,L=typeof this.params[R]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[R];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:L}),this._inflate[K]=this,this._inflate[z]=0,this._inflate[H]=[],this._inflate.on("error",C),this._inflate.on("data",q)}if(this._inflate[V]=E,this._inflate.write(j),A)this._inflate.write(W);this._inflate.flush(()=>{let R=this._inflate[B];if(R){this._inflate.close(),this._inflate=null,E(R);return}let L=J.concat(this._inflate[H],this._inflate[z]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[z]=0,this._inflate[H]=[],A&&this.params[`${P}_no_context_takeover`])this._inflate.reset();E(null,L)})}_compress(j,A,E){let P=this._isServer?"server":"client";if(!this._deflate){let R=`${P}_max_window_bits`,L=typeof this.params[R]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[R];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:L}),this._deflate[z]=0,this._deflate[H]=[],this._deflate.on("data",D)}this._deflate[V]=E,this._deflate.write(j),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let R=J.concat(this._deflate[H],this._deflate[z]);if(A)R=new G(R.buffer,R.byteOffset,R.length-4);if(this._deflate[V]=null,this._deflate[z]=0,this._deflate[H]=[],A&&this.params[`${P}_no_context_takeover`])this._deflate.reset();E(null,R)})}}Q.exports=M;function D(j){this[H].push(j),this[z]+=j.length}function q(j){if(this[z]+=j.length,this[K]._maxPayload<1||this[z]<=this[K]._maxPayload){this[H].push(j);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][X]=1009,this.removeListener("data",q),this.reset()}function C(j){if(this[K]._inflate=null,this[B]){this[V](this[B]);return}j[X]=1007,this[V](j)}}),y4=K0(($,Q)=>{var{isUtf8:Z}=a("buffer"),{hasBlob:J}=w0(),Y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function X(K){return K>=1000&&K<=1014&&K!==1004&&K!==1005&&K!==1006||K>=3000&&K<=4999}function G(K){let z=K.length,V=0;while(V<z)if((K[V]&128)===0)V++;else if((K[V]&224)===192){if(V+1===z||(K[V+1]&192)!==128||(K[V]&254)===192)return!1;V+=2}else if((K[V]&240)===224){if(V+2>=z||(K[V+1]&192)!==128||(K[V+2]&192)!==128||K[V]===224&&(K[V+1]&224)===128||K[V]===237&&(K[V+1]&224)===160)return!1;V+=3}else if((K[V]&248)===240){if(V+3>=z||(K[V+1]&192)!==128||(K[V+2]&192)!==128||(K[V+3]&192)!==128||K[V]===240&&(K[V+1]&240)===128||K[V]===244&&K[V+1]>143||K[V]>244)return!1;V+=4}else return!1;return!0}function W(K){return J&&typeof K==="object"&&typeof K.arrayBuffer==="function"&&typeof K.type==="string"&&typeof K.stream==="function"&&(K[Symbol.toStringTag]==="Blob"||K[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:W,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(K){return K.length<24?G(K):Z(K)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let K=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(z){return z.length<32?G(z):K(z)}}catch(K){}}),wQ=K0(($,Q)=>{var{Writable:Z}=a("stream"),J=k4(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:W}=w0(),{concat:K,toArrayBuffer:z,unmask:V}=C$(),{isValidStatusCode:H,isValidUTF8:B}=y4(),N=Buffer[Symbol.species],M=0,D=1,q=2,C=3,j=4,A=5,E=6;class P extends Z{constructor(R={}){super();this._allowSynchronousEvents=R.allowSynchronousEvents!==void 0?R.allowSynchronousEvents:!0,this._binaryType=R.binaryType||Y[0],this._extensions=R.extensions||{},this._isServer=!!R.isServer,this._maxPayload=R.maxPayload|0,this._skipUTF8Validation=!!R.skipUTF8Validation,this[W]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=M}_write(R,L,U){if(this._opcode===8&&this._state==M)return U();this._bufferedBytes+=R.length,this._buffers.push(R),this.startLoop(U)}consume(R){if(this._bufferedBytes-=R,R===this._buffers[0].length)return this._buffers.shift();if(R<this._buffers[0].length){let U=this._buffers[0];return this._buffers[0]=new N(U.buffer,U.byteOffset+R,U.length-R),new N(U.buffer,U.byteOffset,R)}let L=Buffer.allocUnsafe(R);do{let U=this._buffers[0],_=L.length-R;if(R>=U.length)L.set(this._buffers.shift(),_);else L.set(new Uint8Array(U.buffer,U.byteOffset,R),_),this._buffers[0]=new N(U.buffer,U.byteOffset+R,U.length-R);R-=U.length}while(R>0);return L}startLoop(R){this._loop=!0;do switch(this._state){case M:this.getInfo(R);break;case D:this.getPayloadLength16(R);break;case q:this.getPayloadLength64(R);break;case C:this.getMask();break;case j:this.getData(R);break;case A:case E:this._loop=!1;return}while(this._loop);if(!this._errored)R()}getInfo(R){if(this._bufferedBytes<2){this._loop=!1;return}let L=this.consume(2);if((L[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");R(_);return}let U=(L[0]&64)===64;if(U&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(_);return}if(this._fin=(L[0]&128)===128,this._opcode=L[0]&15,this._payloadLength=L[1]&127,this._opcode===0){if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");R(_);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(_);return}this._compressed=U}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let _=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");R(_);return}if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(_);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let _=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");R(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(L[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");R(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");R(_);return}if(this._payloadLength===126)this._state=D;else if(this._payloadLength===127)this._state=q;else this.haveLength(R)}getPayloadLength16(R){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(R)}getPayloadLength64(R){if(this._bufferedBytes<8){this._loop=!1;return}let L=this.consume(8),U=L.readUInt32BE(0);if(U>Math.pow(2,21)-1){let _=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");R(_);return}this._payloadLength=U*Math.pow(2,32)+L.readUInt32BE(4),this.haveLength(R)}haveLength(R){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let L=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");R(L);return}}if(this._masked)this._state=C;else this._state=j}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=j}getData(R){let L=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(L=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)V(L,this._mask)}if(this._opcode>7){this.controlMessage(L,R);return}if(this._compressed){this._state=A,this.decompress(L,R);return}if(L.length)this._messageLength=this._totalPayloadLength,this._fragments.push(L);this.dataMessage(R)}decompress(R,L){this._extensions[J.extensionName].decompress(R,this._fin,(_,F)=>{if(_)return L(_);if(F.length){if(this._messageLength+=F.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let T=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");L(T);return}this._fragments.push(F)}if(this.dataMessage(L),this._state===M)this.startLoop(L)})}dataMessage(R){if(!this._fin){this._state=M;return}let L=this._messageLength,U=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let _;if(this._binaryType==="nodebuffer")_=K(U,L);else if(this._binaryType==="arraybuffer")_=z(K(U,L));else if(this._binaryType==="blob")_=new Blob(U);else _=U;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=M;else this._state=E,setImmediate(()=>{this.emit("message",_,!0),this._state=M,this.startLoop(R)})}else{let _=K(U,L);if(!this._skipUTF8Validation&&!B(_)){let F=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");R(F);return}if(this._state===A||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=M;else this._state=E,setImmediate(()=>{this.emit("message",_,!1),this._state=M,this.startLoop(R)})}}controlMessage(R,L){if(this._opcode===8){if(R.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let U=R.readUInt16BE(0);if(!H(U)){let F=this.createError(RangeError,`invalid status code ${U}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");L(F);return}let _=new N(R.buffer,R.byteOffset+2,R.length-2);if(!this._skipUTF8Validation&&!B(_)){let F=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");L(F);return}this._loop=!1,this.emit("conclude",U,_),this.end()}this._state=M;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",R),this._state=M;else this._state=E,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",R),this._state=M,this.startLoop(L)})}createError(R,L,U,_,F){this._loop=!1,this._errored=!0;let T=new R(U?`Invalid WebSocket frame: ${L}`:L);return Error.captureStackTrace(T,this.createError),T.code=F,T[G]=_,T}}Q.exports=P}),kQ=K0(($,Q)=>{var{Duplex:Z}=a("stream"),{randomFillSync:J}=a("crypto"),Y=k4(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:W}=w0(),{isBlob:K,isValidStatusCode:z}=y4(),{mask:V,toBuffer:H}=C$(),B=Symbol("kByteLength"),N=Buffer.alloc(4),M=8192,D,q=M,C=0,j=1,A=2;class E{constructor(L,U,_){if(this._extensions=U||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=L,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=C,this.onerror=W,this[G]=void 0}static frame(L,U){let _,F=!1,T=2,I=!1;if(U.mask){if(_=U.maskBuffer||N,U.generateMask)U.generateMask(_);else{if(q===M){if(D===void 0)D=Buffer.alloc(M);J(D,0,M),q=0}_[0]=D[q++],_[1]=D[q++],_[2]=D[q++],_[3]=D[q++]}I=(_[0]|_[1]|_[2]|_[3])===0,T=6}let S;if(typeof L==="string")if((!U.mask||I)&&U[B]!==void 0)S=U[B];else L=Buffer.from(L),S=L.length;else S=L.length,F=U.mask&&U.readOnly&&!I;let k=S;if(S>=65536)T+=8,k=127;else if(S>125)T+=2,k=126;let y=Buffer.allocUnsafe(F?S+T:T);if(y[0]=U.fin?U.opcode|128:U.opcode,U.rsv1)y[0]|=64;if(y[1]=k,k===126)y.writeUInt16BE(S,2);else if(k===127)y[2]=y[3]=0,y.writeUIntBE(S,4,6);if(!U.mask)return[y,L];if(y[1]|=128,y[T-4]=_[0],y[T-3]=_[1],y[T-2]=_[2],y[T-1]=_[3],I)return[y,L];if(F)return V(L,_,y,T,S),[y];return V(L,_,L,0,S),[y,L]}close(L,U,_,F){let T;if(L===void 0)T=X;else if(typeof L!=="number"||!z(L))throw TypeError("First argument must be a valid error code number");else if(U===void 0||!U.length)T=Buffer.allocUnsafe(2),T.writeUInt16BE(L,0);else{let S=Buffer.byteLength(U);if(S>123)throw RangeError("The message must not be greater than 123 bytes");if(T=Buffer.allocUnsafe(2+S),T.writeUInt16BE(L,0),typeof U==="string")T.write(U,2);else T.set(U,2)}let I={[B]:T.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==C)this.enqueue([this.dispatch,T,!1,I,F]);else this.sendFrame(E.frame(T,I),F)}ping(L,U,_){let F,T;if(typeof L==="string")F=Buffer.byteLength(L),T=!1;else if(K(L))F=L.size,T=!1;else L=H(L),F=L.length,T=H.readOnly;if(F>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[B]:F,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:9,readOnly:T,rsv1:!1};if(K(L))if(this._state!==C)this.enqueue([this.getBlobData,L,!1,I,_]);else this.getBlobData(L,!1,I,_);else if(this._state!==C)this.enqueue([this.dispatch,L,!1,I,_]);else this.sendFrame(E.frame(L,I),_)}pong(L,U,_){let F,T;if(typeof L==="string")F=Buffer.byteLength(L),T=!1;else if(K(L))F=L.size,T=!1;else L=H(L),F=L.length,T=H.readOnly;if(F>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[B]:F,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:10,readOnly:T,rsv1:!1};if(K(L))if(this._state!==C)this.enqueue([this.getBlobData,L,!1,I,_]);else this.getBlobData(L,!1,I,_);else if(this._state!==C)this.enqueue([this.dispatch,L,!1,I,_]);else this.sendFrame(E.frame(L,I),_)}send(L,U,_){let F=this._extensions[Y.extensionName],T=U.binary?2:1,I=U.compress,S,k;if(typeof L==="string")S=Buffer.byteLength(L),k=!1;else if(K(L))S=L.size,k=!1;else L=H(L),S=L.length,k=H.readOnly;if(this._firstFragment){if(this._firstFragment=!1,I&&F&&F.params[F._isServer?"server_no_context_takeover":"client_no_context_takeover"])I=S>=F._threshold;this._compress=I}else I=!1,T=0;if(U.fin)this._firstFragment=!0;let y={[B]:S,fin:U.fin,generateMask:this._generateMask,mask:U.mask,maskBuffer:this._maskBuffer,opcode:T,readOnly:k,rsv1:I};if(K(L))if(this._state!==C)this.enqueue([this.getBlobData,L,this._compress,y,_]);else this.getBlobData(L,this._compress,y,_);else if(this._state!==C)this.enqueue([this.dispatch,L,this._compress,y,_]);else this.dispatch(L,this._compress,y,_)}getBlobData(L,U,_,F){this._bufferedBytes+=_[B],this._state=A,L.arrayBuffer().then((T)=>{if(this._socket.destroyed){let S=Error("The socket was closed while the blob was being read");process.nextTick(P,this,S,F);return}this._bufferedBytes-=_[B];let I=H(T);if(!U)this._state=C,this.sendFrame(E.frame(I,_),F),this.dequeue();else this.dispatch(I,U,_,F)}).catch((T)=>{process.nextTick(R,this,T,F)})}dispatch(L,U,_,F){if(!U){this.sendFrame(E.frame(L,_),F);return}let T=this._extensions[Y.extensionName];this._bufferedBytes+=_[B],this._state=j,T.compress(L,_.fin,(I,S)=>{if(this._socket.destroyed){let k=Error("The socket was closed while data was being compressed");P(this,k,F);return}this._bufferedBytes-=_[B],this._state=C,_.readOnly=!1,this.sendFrame(E.frame(S,_),F),this.dequeue()})}dequeue(){while(this._state===C&&this._queue.length){let L=this._queue.shift();this._bufferedBytes-=L[3][B],Reflect.apply(L[0],this,L.slice(1))}}enqueue(L){this._bufferedBytes+=L[3][B],this._queue.push(L)}sendFrame(L,U){if(L.length===2)this._socket.cork(),this._socket.write(L[0]),this._socket.write(L[1],U),this._socket.uncork();else this._socket.write(L[0],U)}}Q.exports=E;function P(L,U,_){if(typeof _==="function")_(U);for(let F=0;F<L._queue.length;F++){let T=L._queue[F],I=T[T.length-1];if(typeof I==="function")I(U)}}function R(L,U,_){P(L,U,_),L.onerror(U)}}),o3=K0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=w0(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),W=Symbol("kMessage"),K=Symbol("kReason"),z=Symbol("kTarget"),V=Symbol("kType"),H=Symbol("kWasClean");class B{constructor(j){this[z]=null,this[V]=j}get target(){return this[z]}get type(){return this[V]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class N extends B{constructor(j,A={}){super(j);this[Y]=A.code===void 0?0:A.code,this[K]=A.reason===void 0?"":A.reason,this[H]=A.wasClean===void 0?!1:A.wasClean}get code(){return this[Y]}get reason(){return this[K]}get wasClean(){return this[H]}}Object.defineProperty(N.prototype,"code",{enumerable:!0}),Object.defineProperty(N.prototype,"reason",{enumerable:!0}),Object.defineProperty(N.prototype,"wasClean",{enumerable:!0});class M extends B{constructor(j,A={}){super(j);this[G]=A.error===void 0?null:A.error,this[W]=A.message===void 0?"":A.message}get error(){return this[G]}get message(){return this[W]}}Object.defineProperty(M.prototype,"error",{enumerable:!0}),Object.defineProperty(M.prototype,"message",{enumerable:!0});class D extends B{constructor(j,A={}){super(j);this[X]=A.data===void 0?null:A.data}get data(){return this[X]}}Object.defineProperty(D.prototype,"data",{enumerable:!0});var q={addEventListener(j,A,E={}){for(let R of this.listeners(j))if(!E[Z]&&R[J]===A&&!R[Z])return;let P;if(j==="message")P=function(L,U){let _=new D("message",{data:U?L:L.toString()});_[z]=this,C(A,this,_)};else if(j==="close")P=function(L,U){let _=new N("close",{code:L,reason:U.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[z]=this,C(A,this,_)};else if(j==="error")P=function(L){let U=new M("error",{error:L,message:L.message});U[z]=this,C(A,this,U)};else if(j==="open")P=function(){let L=new B("open");L[z]=this,C(A,this,L)};else return;if(P[Z]=!!E[Z],P[J]=A,E.once)this.once(j,P);else this.on(j,P)},removeEventListener(j,A){for(let E of this.listeners(j))if(E[J]===A&&!E[Z]){this.removeListener(j,E);break}}};Q.exports={CloseEvent:N,ErrorEvent:M,Event:B,EventTarget:q,MessageEvent:D};function C(j,A,E){if(typeof j==="object"&&j.handleEvent)j.handleEvent.call(j,E);else j.call(A,E)}}),_8=K0(($,Q)=>{var{tokenChars:Z}=y4();function J(G,W,K){if(G[W]===void 0)G[W]=[K];else G[W].push(K)}function Y(G){let W=Object.create(null),K=Object.create(null),z=!1,V=!1,H=!1,B,N,M=-1,D=-1,q=-1,C=0;for(;C<G.length;C++)if(D=G.charCodeAt(C),B===void 0)if(q===-1&&Z[D]===1){if(M===-1)M=C}else if(C!==0&&(D===32||D===9)){if(q===-1&&M!==-1)q=C}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${C}`);if(q===-1)q=C;let A=G.slice(M,q);if(D===44)J(W,A,K),K=Object.create(null);else B=A;M=q=-1}else throw SyntaxError(`Unexpected character at index ${C}`);else if(N===void 0)if(q===-1&&Z[D]===1){if(M===-1)M=C}else if(D===32||D===9){if(q===-1&&M!==-1)q=C}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${C}`);if(q===-1)q=C;if(J(K,G.slice(M,q),!0),D===44)J(W,B,K),K=Object.create(null),B=void 0;M=q=-1}else if(D===61&&M!==-1&&q===-1)N=G.slice(M,C),M=q=-1;else throw SyntaxError(`Unexpected character at index ${C}`);else if(V){if(Z[D]!==1)throw SyntaxError(`Unexpected character at index ${C}`);if(M===-1)M=C;else if(!z)z=!0;V=!1}else if(H)if(Z[D]===1){if(M===-1)M=C}else if(D===34&&M!==-1)H=!1,q=C;else if(D===92)V=!0;else throw SyntaxError(`Unexpected character at index ${C}`);else if(D===34&&G.charCodeAt(C-1)===61)H=!0;else if(q===-1&&Z[D]===1){if(M===-1)M=C}else if(M!==-1&&(D===32||D===9)){if(q===-1)q=C}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${C}`);if(q===-1)q=C;let A=G.slice(M,q);if(z)A=A.replace(/\\/g,""),z=!1;if(J(K,N,A),D===44)J(W,B,K),K=Object.create(null),B=void 0;N=void 0,M=q=-1}else throw SyntaxError(`Unexpected character at index ${C}`);if(M===-1||H||D===32||D===9)throw SyntaxError("Unexpected end of input");if(q===-1)q=C;let j=G.slice(M,q);if(B===void 0)J(W,j,K);else{if(N===void 0)J(K,j,!0);else if(z)J(K,N,j.replace(/\\/g,""));else J(K,N,j);J(W,B,K)}return W}function X(G){return Object.keys(G).map((W)=>{let K=G[W];if(!Array.isArray(K))K=[K];return K.map((z)=>{return[W].concat(Object.keys(z).map((V)=>{let H=z[V];if(!Array.isArray(H))H=[H];return H.map((B)=>B===!0?V:`${V}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),B8=K0(($,Q)=>{var Z=a("events"),J=a("https"),Y=a("http"),X=a("net"),G=a("tls"),{randomBytes:W,createHash:K}=a("crypto"),{Duplex:z,Readable:V}=a("stream"),{URL:H}=a("url"),B=k4(),N=wQ(),M=kQ(),{isBlob:D}=y4(),{BINARY_TYPES:q,CLOSE_TIMEOUT:C,EMPTY_BUFFER:j,GUID:A,kForOnEventAttribute:E,kListener:P,kStatusCode:R,kWebSocket:L,NOOP:U}=w0(),{EventTarget:{addEventListener:_,removeEventListener:F}}=o3(),{format:T,parse:I}=_8(),{toBuffer:S}=C$(),k=Symbol("kAborted"),y=[8,13],f=["CONNECTING","OPEN","CLOSING","CLOSED"],u=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class x extends Z{constructor(O,w,h){super();if(this._binaryType=q[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=j,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=x.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,O!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,w===void 0)w=[];else if(!Array.isArray(w))if(typeof w==="object"&&w!==null)h=w,w=[];else w=[w];g(this,O,w,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(O){if(!q.includes(O))return;if(this._binaryType=O,this._receiver)this._receiver._binaryType=O}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(O,w,h){let c=new N({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),b=new M(O,this._extensions,h.generateMask);if(this._receiver=c,this._sender=b,this._socket=O,c[L]=this,b[L]=this,O[L]=this,c.on("conclude",n5),c.on("drain",d5),c.on("error",i5),c.on("message",o5),c.on("ping",a5),c.on("pong",r5),b.onerror=t5,O.setTimeout)O.setTimeout(0);if(O.setNoDelay)O.setNoDelay();if(w.length>0)O.unshift(w);O.on("close",u8),O.on("data",p4),O.on("end",m8),O.on("error",c8),this._readyState=x.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=x.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=x.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(O,w){if(this.readyState===x.CLOSED)return;if(this.readyState===x.CONNECTING){Y0(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===x.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=x.CLOSING,this._sender.close(O,w,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),g8(this)}pause(){if(this.readyState===x.CONNECTING||this.readyState===x.CLOSED)return;this._paused=!0,this._socket.pause()}ping(O,w,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==x.OPEN){v$(this,O,h);return}if(w===void 0)w=!this._isServer;this._sender.ping(O||j,w,h)}pong(O,w,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==x.OPEN){v$(this,O,h);return}if(w===void 0)w=!this._isServer;this._sender.pong(O||j,w,h)}resume(){if(this.readyState===x.CONNECTING||this.readyState===x.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(O,w,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof w==="function")h=w,w={};if(typeof O==="number")O=O.toString();if(this.readyState!==x.OPEN){v$(this,O,h);return}let c={binary:typeof O!=="string",mask:!this._isServer,compress:!0,fin:!0,...w};if(!this._extensions[B.extensionName])c.compress=!1;this._sender.send(O||j,c,h)}terminate(){if(this.readyState===x.CLOSED)return;if(this.readyState===x.CONNECTING){Y0(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=x.CLOSING,this._socket.destroy()}}Object.defineProperty(x,"CONNECTING",{enumerable:!0,value:f.indexOf("CONNECTING")}),Object.defineProperty(x.prototype,"CONNECTING",{enumerable:!0,value:f.indexOf("CONNECTING")}),Object.defineProperty(x,"OPEN",{enumerable:!0,value:f.indexOf("OPEN")}),Object.defineProperty(x.prototype,"OPEN",{enumerable:!0,value:f.indexOf("OPEN")}),Object.defineProperty(x,"CLOSING",{enumerable:!0,value:f.indexOf("CLOSING")}),Object.defineProperty(x.prototype,"CLOSING",{enumerable:!0,value:f.indexOf("CLOSING")}),Object.defineProperty(x,"CLOSED",{enumerable:!0,value:f.indexOf("CLOSED")}),Object.defineProperty(x.prototype,"CLOSED",{enumerable:!0,value:f.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((O)=>{Object.defineProperty(x.prototype,O,{enumerable:!0})}),["open","error","close","message"].forEach((O)=>{Object.defineProperty(x.prototype,`on${O}`,{enumerable:!0,get(){for(let w of this.listeners(O))if(w[E])return w[P];return null},set(w){for(let h of this.listeners(O))if(h[E]){this.removeListener(O,h);break}if(typeof w!=="function")return;this.addEventListener(O,w,{[E]:!0})}})}),x.prototype.addEventListener=_,x.prototype.removeEventListener=F,Q.exports=x;function g(O,w,h,c){let b={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:C,protocolVersion:y[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...c,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(O._autoPong=b.autoPong,O._closeTimeout=b.closeTimeout,!y.includes(b.protocolVersion))throw RangeError(`Unsupported protocol version: ${b.protocolVersion} (supported versions: ${y.join(", ")})`);let n;if(w instanceof H)n=w;else try{n=new H(w)}catch{throw SyntaxError(`Invalid URL: ${w}`)}if(n.protocol==="http:")n.protocol="ws:";else if(n.protocol==="https:")n.protocol="wss:";O._url=n.href;let r0=n.protocol==="wss:",t0=n.protocol==="ws+unix:",U4;if(n.protocol!=="ws:"&&!r0&&!t0)U4=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(t0&&!n.pathname)U4="The URL's pathname is empty";else if(n.hash)U4="The URL contains a fragment identifier";if(U4){let p=SyntaxError(U4);if(O._redirects===0)throw p;else{r(O,p);return}}let p8=r0?443:80,l8=W(16).toString("base64"),n8=r0?J.request:Y.request,_4=new Set,B4;if(b.createConnection=b.createConnection||(r0?a0:R0),b.defaultPort=b.defaultPort||p8,b.port=n.port||p8,b.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,b.headers={...b.headers,"Sec-WebSocket-Version":b.protocolVersion,"Sec-WebSocket-Key":l8,Connection:"Upgrade",Upgrade:"websocket"},b.path=n.pathname+n.search,b.timeout=b.handshakeTimeout,b.perMessageDeflate)B4=new B({...b.perMessageDeflate,isServer:!1,maxPayload:b.maxPayload}),b.headers["Sec-WebSocket-Extensions"]=T({[B.extensionName]:B4.offer()});if(h.length){for(let p of h){if(typeof p!=="string"||!u.test(p)||_4.has(p))throw SyntaxError("An invalid or duplicated subprotocol was specified");_4.add(p)}b.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(b.origin)if(b.protocolVersion<13)b.headers["Sec-WebSocket-Origin"]=b.origin;else b.headers.Origin=b.origin;if(n.username||n.password)b.auth=`${n.username}:${n.password}`;if(t0){let p=b.path.split(":");b.socketPath=p[0],b.path=p[1]}let o;if(b.followRedirects){if(O._redirects===0){O._originalIpc=t0,O._originalSecure=r0,O._originalHostOrSocketPath=t0?b.socketPath:n.host;let p=c&&c.headers;if(c={...c,headers:{}},p)for(let[$0,s0]of Object.entries(p))c.headers[$0.toLowerCase()]=s0}else if(O.listenerCount("redirect")===0){let p=t0?O._originalIpc?b.socketPath===O._originalHostOrSocketPath:!1:O._originalIpc?!1:n.host===O._originalHostOrSocketPath;if(!p||O._originalSecure&&!r0){if(delete b.headers.authorization,delete b.headers.cookie,!p)delete b.headers.host;b.auth=void 0}}if(b.auth&&!c.headers.authorization)c.headers.authorization="Basic "+Buffer.from(b.auth).toString("base64");if(o=O._req=n8(b),O._redirects)O.emit("redirect",O.url,o)}else o=O._req=n8(b);if(b.timeout)o.on("timeout",()=>{Y0(O,o,"Opening handshake has timed out")});if(o.on("error",(p)=>{if(o===null||o[k])return;o=O._req=null,r(O,p)}),o.on("response",(p)=>{let $0=p.headers.location,s0=p.statusCode;if($0&&b.followRedirects&&s0>=300&&s0<400){if(++O._redirects>b.maxRedirects){Y0(O,o,"Maximum redirects exceeded");return}o.abort();let R4;try{R4=new H($0,w)}catch(d8){let e0=SyntaxError(`Invalid URL: ${$0}`);r(O,e0);return}g(O,R4,h,c)}else if(!O.emit("unexpected-response",o,p))Y0(O,o,`Unexpected server response: ${p.statusCode}`)}),o.on("upgrade",(p,$0,s0)=>{if(O.emit("upgrade",p),O.readyState!==x.CONNECTING)return;o=O._req=null;let R4=p.headers.upgrade;if(R4===void 0||R4.toLowerCase()!=="websocket"){Y0(O,$0,"Invalid Upgrade header");return}let d8=K("sha1").update(l8+A).digest("base64");if(p.headers["sec-websocket-accept"]!==d8){Y0(O,$0,"Invalid Sec-WebSocket-Accept header");return}let e0=p.headers["sec-websocket-protocol"],N4;if(e0!==void 0){if(!_4.size)N4="Server sent a subprotocol but none was requested";else if(!_4.has(e0))N4="Server sent an invalid subprotocol"}else if(_4.size)N4="Server sent no subprotocol";if(N4){Y0(O,$0,N4);return}if(e0)O._protocol=e0;let i8=p.headers["sec-websocket-extensions"];if(i8!==void 0){if(!B4){Y0(O,$0,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let h$;try{h$=I(i8)}catch(g$){Y0(O,$0,"Invalid Sec-WebSocket-Extensions header");return}let o8=Object.keys(h$);if(o8.length!==1||o8[0]!==B.extensionName){Y0(O,$0,"Server indicated an extension that was not requested");return}try{B4.accept(h$[B.extensionName])}catch(g$){Y0(O,$0,"Invalid Sec-WebSocket-Extensions header");return}O._extensions[B.extensionName]=B4}O.setSocket($0,s0,{allowSynchronousEvents:b.allowSynchronousEvents,generateMask:b.generateMask,maxPayload:b.maxPayload,skipUTF8Validation:b.skipUTF8Validation})}),b.finishRequest)b.finishRequest(o,O);else o.end()}function r(O,w){O._readyState=x.CLOSING,O._errorEmitted=!0,O.emit("error",w),O.emitClose()}function R0(O){return O.path=O.socketPath,X.connect(O)}function a0(O){if(O.path=void 0,!O.servername&&O.servername!=="")O.servername=X.isIP(O.host)?"":O.host;return G.connect(O)}function Y0(O,w,h){O._readyState=x.CLOSING;let c=Error(h);if(Error.captureStackTrace(c,Y0),w.setHeader){if(w[k]=!0,w.abort(),w.socket&&!w.socket.destroyed)w.socket.destroy();process.nextTick(r,O,c)}else w.destroy(c),w.once("error",O.emit.bind(O,"error")),w.once("close",O.emitClose.bind(O))}function v$(O,w,h){if(w){let c=D(w)?w.size:S(w).length;if(O._socket)O._sender._bufferedBytes+=c;else O._bufferedAmount+=c}if(h){let c=Error(`WebSocket is not open: readyState ${O.readyState} (${f[O.readyState]})`);process.nextTick(h,c)}}function n5(O,w){let h=this[L];if(h._closeFrameReceived=!0,h._closeMessage=w,h._closeCode=O,h._socket[L]===void 0)return;if(h._socket.removeListener("data",p4),process.nextTick(h8,h._socket),O===1005)h.close();else h.close(O,w)}function d5(){let O=this[L];if(!O.isPaused)O._socket.resume()}function i5(O){let w=this[L];if(w._socket[L]!==void 0)w._socket.removeListener("data",p4),process.nextTick(h8,w._socket),w.close(O[R]);if(!w._errorEmitted)w._errorEmitted=!0,w.emit("error",O)}function v8(){this[L].emitClose()}function o5(O,w){this[L].emit("message",O,w)}function a5(O){let w=this[L];if(w._autoPong)w.pong(O,!this._isServer,U);w.emit("ping",O)}function r5(O){this[L].emit("pong",O)}function h8(O){O.resume()}function t5(O){let w=this[L];if(w.readyState===x.CLOSED)return;if(w.readyState===x.OPEN)w._readyState=x.CLOSING,g8(w);if(this._socket.end(),!w._errorEmitted)w._errorEmitted=!0,w.emit("error",O)}function g8(O){O._closeTimer=setTimeout(O._socket.destroy.bind(O._socket),O._closeTimeout)}function u8(){let O=this[L];if(this.removeListener("close",u8),this.removeListener("data",p4),this.removeListener("end",m8),O._readyState=x.CLOSING,!this._readableState.endEmitted&&!O._closeFrameReceived&&!O._receiver._writableState.errorEmitted&&this._readableState.length!==0){let w=this.read(this._readableState.length);O._receiver.write(w)}if(O._receiver.end(),this[L]=void 0,clearTimeout(O._closeTimer),O._receiver._writableState.finished||O._receiver._writableState.errorEmitted)O.emitClose();else O._receiver.on("error",v8),O._receiver.on("finish",v8)}function p4(O){if(!this[L]._receiver.write(O))this.pause()}function m8(){let O=this[L];O._readyState=x.CLOSING,O._receiver.end(),this.end()}function c8(){let O=this[L];if(this.removeListener("error",c8),this.on("error",U),O)O._readyState=x.CLOSING,this.destroy()}}),a3=K0(($,Q)=>{var Z=B8(),{Duplex:J}=a("stream");function Y(K){K.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(K){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",K)}function W(K,z){let V=!0,H=new J({...z,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return K.on("message",function(N,M){let D=!M&&H._readableState.objectMode?N.toString():N;if(!H.push(D))K.pause()}),K.once("error",function(N){if(H.destroyed)return;V=!1,H.destroy(N)}),K.once("close",function(){if(H.destroyed)return;H.push(null)}),H._destroy=function(B,N){if(K.readyState===K.CLOSED){N(B),process.nextTick(Y,H);return}let M=!1;if(K.once("error",function(q){M=!0,N(q)}),K.once("close",function(){if(!M)N(B);process.nextTick(Y,H)}),V)K.terminate()},H._final=function(B){if(K.readyState===K.CONNECTING){K.once("open",function(){H._final(B)});return}if(K._socket===null)return;if(K._socket._writableState.finished){if(B(),H._readableState.endEmitted)H.destroy()}else K._socket.once("finish",function(){B()}),K.close()},H._read=function(){if(K.isPaused)K.resume()},H._write=function(B,N,M){if(K.readyState===K.CONNECTING){K.once("open",function(){H._write(B,N,M)});return}K.send(B,M)},H.on("end",X),H.on("error",G),H}Q.exports=W}),yQ=K0(($,Q)=>{var{tokenChars:Z}=y4();function J(Y){let X=new Set,G=-1,W=-1,K=0;for(K;K<Y.length;K++){let V=Y.charCodeAt(K);if(W===-1&&Z[V]===1){if(G===-1)G=K}else if(K!==0&&(V===32||V===9)){if(W===-1&&G!==-1)W=K}else if(V===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${K}`);if(W===-1)W=K;let H=Y.slice(G,W);if(X.has(H))throw SyntaxError(`The "${H}" subprotocol is duplicated`);X.add(H),G=W=-1}else throw SyntaxError(`Unexpected character at index ${K}`)}if(G===-1||W!==-1)throw SyntaxError("Unexpected end of input");let z=Y.slice(G,K);if(X.has(z))throw SyntaxError(`The "${z}" subprotocol is duplicated`);return X.add(z),X}Q.exports={parse:J}}),r3=K0(($,Q)=>{var Z=a("events"),J=a("http"),{Duplex:Y}=a("stream"),{createHash:X}=a("crypto"),G=_8(),W=k4(),K=yQ(),z=B8(),{CLOSE_TIMEOUT:V,GUID:H,kWebSocket:B}=w0(),N=/^[+/0-9A-Za-z]{22}==$/,M=0,D=1,q=2;class C extends Z{constructor(L,U){super();if(L={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:V,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:z,...L},L.port==null&&!L.server&&!L.noServer||L.port!=null&&(L.server||L.noServer)||L.server&&L.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(L.port!=null)this._server=J.createServer((_,F)=>{let T=J.STATUS_CODES[426];F.writeHead(426,{"Content-Length":T.length,"Content-Type":"text/plain"}),F.end(T)}),this._server.listen(L.port,L.host,L.backlog,U);else if(L.server)this._server=L.server;if(this._server){let _=this.emit.bind(this,"connection");this._removeListeners=j(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(F,T,I)=>{this.handleUpgrade(F,T,I,_)}})}if(L.perMessageDeflate===!0)L.perMessageDeflate={};if(L.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=L,this._state=M}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(L){if(this._state===q){if(L)this.once("close",()=>{L(Error("The server is not running"))});process.nextTick(A,this);return}if(L)this.once("close",L);if(this._state===D)return;if(this._state=D,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(A,this);else this._shouldEmitClose=!0;else process.nextTick(A,this)}else{let U=this._server;this._removeListeners(),this._removeListeners=this._server=null,U.close(()=>{A(this)})}}shouldHandle(L){if(this.options.path){let U=L.url.indexOf("?");if((U!==-1?L.url.slice(0,U):L.url)!==this.options.path)return!1}return!0}handleUpgrade(L,U,_,F){U.on("error",E);let T=L.headers["sec-websocket-key"],I=L.headers.upgrade,S=+L.headers["sec-websocket-version"];if(L.method!=="GET"){R(this,L,U,405,"Invalid HTTP method");return}if(I===void 0||I.toLowerCase()!=="websocket"){R(this,L,U,400,"Invalid Upgrade header");return}if(T===void 0||!N.test(T)){R(this,L,U,400,"Missing or invalid Sec-WebSocket-Key header");return}if(S!==13&&S!==8){R(this,L,U,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(L)){P(U,400);return}let k=L.headers["sec-websocket-protocol"],y=new Set;if(k!==void 0)try{y=K.parse(k)}catch(x){R(this,L,U,400,"Invalid Sec-WebSocket-Protocol header");return}let f=L.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&f!==void 0){let x=new W({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let g=G.parse(f);if(g[W.extensionName])x.accept(g[W.extensionName]),u[W.extensionName]=x}catch(g){R(this,L,U,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let x={origin:L.headers[`${S===8?"sec-websocket-origin":"origin"}`],secure:!!(L.socket.authorized||L.socket.encrypted),req:L};if(this.options.verifyClient.length===2){this.options.verifyClient(x,(g,r,R0,a0)=>{if(!g)return P(U,r||401,R0,a0);this.completeUpgrade(u,T,y,L,U,_,F)});return}if(!this.options.verifyClient(x))return P(U,401)}this.completeUpgrade(u,T,y,L,U,_,F)}completeUpgrade(L,U,_,F,T,I,S){if(!T.readable||!T.writable)return T.destroy();if(T[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>M)return P(T,503);let y=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(U+H).digest("base64")}`],f=new this.options.WebSocket(null,void 0,this.options);if(_.size){let u=this.options.handleProtocols?this.options.handleProtocols(_,F):_.values().next().value;if(u)y.push(`Sec-WebSocket-Protocol: ${u}`),f._protocol=u}if(L[W.extensionName]){let u=L[W.extensionName].params,x=G.format({[W.extensionName]:[u]});y.push(`Sec-WebSocket-Extensions: ${x}`),f._extensions=L}if(this.emit("headers",y,F),T.write(y.concat(`\r
|
|
97
97
|
`).join(`\r
|
|
98
98
|
`)),T.removeListener("error",E),f.setSocket(T,I,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(f),f.on("close",()=>{if(this.clients.delete(f),this._shouldEmitClose&&!this.clients.size)process.nextTick(A,this)});S(f,F)}}Q.exports=C;function j(L,U){for(let _ of Object.keys(U))L.on(_,U[_]);return function(){for(let F of Object.keys(U))L.removeListener(F,U[F])}}function A(L){L._state=q,L.emit("close")}function E(){this.destroy()}function P(L,U,_,F){_=_||J.STATUS_CODES[U],F={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(_),...F},L.once("finish",L.destroy),L.end(`HTTP/1.1 ${U} ${J.STATUS_CODES[U]}\r
|
|
99
99
|
`+Object.keys(F).map((T)=>`${T}: ${F[T]}`).join(`\r
|
|
@@ -106,7 +106,7 @@ Upgrade: websocket\r
|
|
|
106
106
|
Connection: Upgrade\r
|
|
107
107
|
Sec-WebSocket-Accept: ${J}\r
|
|
108
108
|
\r
|
|
109
|
-
`),Q.resume(),!0}function cX($,Q,Z,J){if(!E5($,Q))return;let Y=new X5(J);Y.binaryType="arraybuffer";let X=!1,G=!1,W=[],K=Buffer.from(Z),z=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(I8(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},V=(B)=>{if(X&&Y.readyState===X5.OPEN){Y.send(B.opcode===1?B.payload.toString("utf8"):M5(B.payload));return}W.push({opcode:B.opcode,payload:Buffer.from(B.payload)})},H=()=>{try{while(K.length>0){let B=D5(K);if(!B)break;if(K=K.subarray(B.consumed),B.opcode===8){u4(Q,8,B.payload),z();return}if(B.opcode===9){u4(Q,10,B.payload);continue}if(B.opcode===1||B.opcode===2)V({opcode:B.opcode,payload:B.payload})}}catch{z()}};Y.onopen=()=>{X=!0;for(let B of W)Y.send(B.opcode===1?B.payload.toString("utf8"):M5(B.payload));W=[]},Y.onmessage=(B)=>{let N=B.data,M=typeof N==="string"?Buffer.from(N):Buffer.from(N);u4(Q,typeof N==="string"?1:2,M)},Y.onerror=z,Y.onclose=z,Q.on("data",(B)=>{if(typeof B==="string")B=Buffer.from(B);K=Buffer.concat([K,B]),H()}),Q.on("error",z),Q.on("close",z),H()}async function pX($,Q,Z){if(!q8(Z)){Q.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"invalid_device"}));return}if($.method!=="GET"){Q.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await V$(Z);Q.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify(J))}catch(J){Q.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function lX($,Q,Z,J,Y){if(!Z)return!1;let X=J.split("?")[0];if(X==="/camera/status")return pX($,Q,Z),!0;if((X==="/webrtc/offer"||X==="/webrtc/close"||X==="/webrtc/stats"||X==="/stream-settings")&&$.method==="OPTIONS")return l6(Q),!0;if(X==="/webrtc/stats"){let W=d2(Z);if(!W)return!1;return W.handleWebRTCStats($,Q),!0}let G;try{G=w4(Z,Y)}catch{return!1}switch(X){case"/stream.mjpeg":return G.handleMjpeg($,Q),!0;case"/stream.avcc":return G.handleAvcc($,Q),!0;case"/stream-settings":return G.handleStreamSettings($,Q),!0;case"/config":return G.handleConfig($,Q),!0;case"/health":return G.handleHealth($,Q),!0;case"/webrtc/offer":return G.handleWebRTCOffer($,Q),!0;case"/webrtc/close":return G.handleWebRTCClose($,Q),!0;case"/ax":return G.handleAx($,Q),!0;case"/foreground":return G.handleForeground($,Q),!0;default:return!1}}async function C5($,Q,Z,J){if(await new Promise((X)=>k0("xcrun",["simctl","boot",$],()=>X())),!await new Promise((X)=>{k0("xcrun",["simctl","bootstatus",$,"-b"],{timeout:180000},(G)=>X(!G))})){if(!await new Promise((G)=>{k0("xcrun",["simctl","list","devices","-j"],(W,K)=>{if(W)return G(!1);try{let z=JSON.parse(K);G(Object.values(z.devices).flat().some((V)=>V.udid===$&&V.state==="Booted"))}catch{G(!1)}})}))return`Device ${$} failed to reach booted state`}return o4(Q4($,Q,Z,"127.0.0.1",J)),null}function nX($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let z of J)z()},W=()=>{G();try{$.end(I8(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},K=()=>{for(;;){let z;try{z=D5(Y)}catch{W();return}if(!z)return;if(Y=Y.subarray(z.consumed),z.opcode===8)return W();if(z.opcode===9){u4($,10,z.payload);continue}if(z.opcode===1||z.opcode===2)for(let V of Z)V(z.payload)}};if($.on("data",(z)=>{Y=Buffer.concat([Y,z]),K()}),$.on("close",G),$.on("error",G),Q.length)K();return{send(z){u4($,2,z)},on(z,V){if(z==="message")Z.push(V);else J.push(V)},close:W}}function dX($,Q,Z,J,Y){if(!J)return!1;let X;try{X=w4(J,Y)}catch{return!1}if(!E5($,Q))return!0;return X.attachHidSocket(nX(Q,Z)),!0}function S$($,Q,Z,J,Y,X=!1){let G=(Q===""?"":Q)+"/grid/api",W=typeof Y==="string"?Y:void 0,K=typeof Y==="object"?Y:q5(W);return{...$,basePath:Q,logsEndpoint:n0(Q,"/logs",$.device),appStateEndpoint:n0(Q,"/appstate",$.device),eventLogEndpoint:n0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:n0(Q,"/api/event-log/events",$.device),metricsEndpoint:n0(Q,"/metrics",$.device),axEndpoint:n0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:n0(Q,"/devtools",$.device),streamSettingsEndpoint:vX($.streamUrl),serveSimBin:Z,gridApiEndpoint:G,gridCatalogEndpoint:G+"/catalog",gridStatusEndpoint:G+"/status",gridStatusEventsEndpoint:G+"/status/events",gridStartEndpoint:G+"/start",gridShutdownEndpoint:G+"/shutdown",gridMemoryEndpoint:G+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,...W?{codec:W}:{},...K?{streamSettings:K}:{},...X?{proxyHelpers:!0}:{}}}async function iX($){return new Promise((Q)=>{let Z=CX();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function U5($){let Q=`http://127.0.0.1:${$}`;try{let Z=await fetch(`${Q}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:$,cdpUrl:Q,async listTargets(){return(await(await fetch(`${Q}/json/list`)).json()).filter((G)=>G.id.startsWith("sim:")).map((G)=>{let K=G.id.split(":")[1],z=G.description?.match(/\(([^)]+)\)/)?.[1];return{id:G.id,title:G.title||G.url||"Untitled",url:/^https?:/i.test(G.url)?G.url:"about:blank",type:G.type||"page",udid:K,bundleId:z}})}}}catch{return null}}async function oX(){if(l0)try{return await(await l0).listTargets(),l0}catch{l0=null}return l0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (Q5(),$5));for(let Q=x$;Q<x$+50;Q++){if(!await iX(Q)){let Z=await U5(Q);if(Z)return Z;continue}try{let Z=await $({host:"127.0.0.1",port:Q});return{port:Q,cdpUrl:`http://127.0.0.1:${Q}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await U5(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${x$}-${x$+49}`)})().catch(($)=>{throw l0=null,$}),l0}function aX($){return Array.isArray($)?$[0]:$}function P5($){return aX($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function rX($){return P5($)==="https"?"wss":"ws"}function w$($){return P5($)==="https"?"https":"http"}function tX($,Q,Z,J){let Y=new URL(`${$}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set(Q,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}function E8(){try{let $=process.argv;if($[1]&&N5($[1]))return $[1]}catch{}return"serve-sim"}function sX(){if(!D8)D8=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWFtYmVyLTQwMDpva2xjaCg4Mi44JSAuMTg5IDg0LjQyOSk7LS1jb2xvci1lbWVyYWxkLTQwMDpva2xjaCg3Ni41JSAuMTc3IDE2My4yMjMpOy0tY29sb3ItY3lhbi00MDA6b2tsY2goNzguOSUgLjE1NCAyMTEuNTMpOy0tY29sb3Itc2t5LTQwMDpva2xjaCg3NC42JSAuMTYgMjMyLjY2MSk7LS1jb2xvci12aW9sZXQtNDAwOm9rbGNoKDcwLjIlIC4xODMgMjkzLjU0MSk7LS1jb2xvci1ibGFjazojMDAwOy0tY29sb3Itd2hpdGU6I2ZmZjstLXNwYWNpbmc6LjI1cmVtOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tbGVhZGluZy1zbnVnOjEuMzc1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLXJhZGl1cy14bDouNzVyZW07LS1lYXNlLW91dDpjdWJpYy1iZXppZXIoMCwwLC4yLDEpOy0tYmx1ci1tZDoxMnB4Oy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1wYW5lbDojMWMxYzFlOy0tY29sb3ItcGFuZWwtYmc6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKTstLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudCk7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxODE4MThhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47Y2xpcC1wYXRoOmluc2V0KDUwJSk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnRvcC1mdWxse3RvcDoxMDAlfS5yaWdodC0we3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnJpZ2h0LTBcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LVxbOXB4XF17cmlnaHQ6OXB4fS5ib3R0b20tMHtib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0uYm90dG9tLTBcLjV7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ubGVmdC0we2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmxlZnQtM3tsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnotMXt6LWluZGV4OjF9LnotMTB7ei1pbmRleDoxMH0uei0yMHt6LWluZGV4OjIwfS56LTMwe3otaW5kZXg6MzB9LnotMzV7ei1pbmRleDozNX0uei0zNnt6LWluZGV4OjM2fS56LTQwe3otaW5kZXg6NDB9LnotNTB7ei1pbmRleDo1MH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo0OHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDhyZW19fUBtZWRpYSAobWluLXdpZHRoOjY0cmVtKXsuY29udGFpbmVye21heC13aWR0aDo2NHJlbX19QG1lZGlhIChtaW4td2lkdGg6ODByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjgwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NnJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6OTZyZW19fS5tLTB7bWFyZ2luOmNhbGModmFyKC0tc3BhY2luZykqMCl9Li1teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMSl9Lm14LTBcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubXgtMVwuNXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS4tbXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLS41KX0ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tdC0xe21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm10LVxbM3B4XF17bWFyZ2luLXRvcDozcHh9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubWwtMVwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uc2l6ZS0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5zaXplLTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnNpemUtNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uc2l6ZS05e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOSl9LnNpemUtXFsycHhcXXt3aWR0aDoycHg7aGVpZ2h0OjJweH0uc2l6ZS1cWzE0cHhcXXt3aWR0aDoxNHB4O2hlaWdodDoxNHB4fS5zaXplLVxbMThweFxde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9LnNpemUtXFsxOXB4XF17d2lkdGg6MTlweDtoZWlnaHQ6MTlweH0uc2l6ZS1mdWxse3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmgtMlwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5oLTN7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LmgtM1wuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5oLTR7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LmgtNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uaC01XC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LmgtNntoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0uaC03e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5oLTh7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOCl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzEzcHhcXXtoZWlnaHQ6MTNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzE2cHhcXXtoZWlnaHQ6MTZweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFsyNjBweFxde21heC1oZWlnaHQ6MjYwcHh9Lm1heC1oLVxbMzIwcHhcXXttYXgtaGVpZ2h0OjMyMHB4fS5tYXgtaC1mdWxse21heC1oZWlnaHQ6MTAwJX0ubWluLWgtMHttaW4taGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi1oLVxbMjJweFxde21pbi1oZWlnaHQ6MjJweH0ubWluLWgtXFszMHB4XF17bWluLWhlaWdodDozMHB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS53LTN7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0udy0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1tYXh7d2lkdGg6bWF4LWNvbnRlbnR9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzE1MHB4XF17bWF4LXdpZHRoOjE1MHB4fS5tYXgtdy1cWzIyMHB4XF17bWF4LXdpZHRoOjIyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy1cWzU2cHhcXXttaW4td2lkdGg6NTZweH0ubWluLXctXFsyMDBweFxde21pbi13aWR0aDoyMDBweH0ubWluLXctXFsyMjBweFxde21pbi13aWR0aDoyMjBweH0ubWluLXctcHh7bWluLXdpZHRoOjFweH0uZmxleC0xe2ZsZXg6MX0uc2hyaW5re2ZsZXgtc2hyaW5rOjF9LnNocmluay0we2ZsZXgtc2hyaW5rOjB9Lmdyb3d7ZmxleC1ncm93OjF9Li10cmFuc2xhdGUteC0xXC8yey0tdHctdHJhbnNsYXRlLXg6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNsYXRlLXgtMXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnZhcigtLXR3LXJvdGF0ZS14LCl2YXIoLS10dy1yb3RhdGUteSwpdmFyKC0tdHctcm90YXRlLXosKXZhcigtLXR3LXNrZXcteCwpdmFyKC0tdHctc2tldy15LCl9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuN3NfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5ncmlkLWNvbHMtMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9LmdyaWQtY29scy1cWzU2cHhfMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTZweCAxZnIgYXV0b30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXB9LnBsYWNlLWl0ZW1zLWNlbnRlcntwbGFjZS1pdGVtczogY2VudGVyfS5pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uaXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0fS5pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9Lmp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5nYXAtMFwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LmdhcC0xe2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5nYXAtMVwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5nYXAtMntnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0uZ2FwLTJcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uZ2FwLTN7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmdhcC01e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uZ2FwLXgtM3tjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmdhcC15LTBcLjV7cm93LWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uanVzdGlmeS1zZWxmLWVuZHtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs0cHhcXXtib3JkZXItcmFkaXVzOjRweH0ucm91bmRlZC1cWzVweFxde2JvcmRlci1yYWRpdXM6NXB4fS5yb3VuZGVkLVxbN3B4XF17Ym9yZGVyLXJhZGl1czo3cHh9LnJvdW5kZWQtXFs4cHhcXXtib3JkZXItcmFkaXVzOjhweH0ucm91bmRlZC1cWzlweFxde2JvcmRlci1yYWRpdXM6OXB4fS5yb3VuZGVkLVxbMTBweFxde2JvcmRlci1yYWRpdXM6MTBweH0ucm91bmRlZC1cWzE0cHhcXXtib3JkZXItcmFkaXVzOjE0cHh9LnJvdW5kZWQtZnVsbHtib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0ucm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1sZyl9LnJvdW5kZWQtbWR7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbWQpfS5yb3VuZGVkLW5vbmV7Ym9yZGVyLXJhZGl1czowfS5yb3VuZGVkLXhse2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXhsKX0ucm91bmRlZC14c3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14cyl9LnJvdW5kZWQtdC1cWzEwcHhcXXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjEwcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTBweH0uYm9yZGVye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoxcHh9LmJvcmRlci0we2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDowfS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ye2JvcmRlci1yaWdodC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmJvcmRlci1ie2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLWRhc2hlZHstLXR3LWJvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXN0eWxlOmRhc2hlZH0uYm9yZGVyLW5vbmV7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXCFib3JkZXItXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjZcKVxde2JvcmRlci1jb2xvcjojMGE4NGZmOTkhaW1wb3J0YW50fS5ib3JkZXItXFtcIzNiNWY5OVxde2JvcmRlci1jb2xvcjojM2I1Zjk5fS5ib3JkZXItXFtcIzVmNjI2OFxde2JvcmRlci1jb2xvcjojNWY2MjY4fS5ib3JkZXItXFtcIzIyMlxde2JvcmRlci1jb2xvcjojMjIyfS5ib3JkZXItXFtcI2ZmNDUzYVxdXC81MHtib3JkZXItY29sb3I6I2ZmNDUzYTgwO2JvcmRlci1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjUpO2JvcmRlci1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly41KX0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOiNmODcxNzE0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8zMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8yNXtib3JkZXItY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8zMHtib3JkZXItY29sb3I6I2ZmZmZmZjRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJvcmRlci10LVxbXCNmNGY0ZjVcXXtib3JkZXItdG9wLWNvbG9yOiNmNGY0ZjV9LmJvcmRlci10LXdoaXRle2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LlwhYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjA4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYxNCFpbXBvcnRhbnR9LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZiFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhMGEwY1xde2JhY2tncm91bmQtY29sb3I6IzBhMGEwY30uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtcIzFjMWMxY1xde2JhY2tncm91bmQtY29sb3I6IzFjMWMxY30uYmctXFtcIzZlNmU3Mlxde2JhY2tncm91bmQtY29sb3I6IzZlNmU3Mn0uYmctXFtcIzlhOWE5ZVxde2JhY2tncm91bmQtY29sb3I6IzlhOWE5ZX0uYmctXFtcIzIwMmIzYVxde2JhY2tncm91bmQtY29sb3I6IzIwMmIzYX0uYmctXFtcIzIyMlxde2JhY2tncm91bmQtY29sb3I6IzIyMn0uYmctXFtcIzI2MzY0Y1xde2JhY2tncm91bmQtY29sb3I6IzI2MzY0Y30uYmctXFtcIzEwMTAxMFxde2JhY2tncm91bmQtY29sb3I6IzEwMTAxMH0uYmctXFtcI2Y4NzE3MVxde2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MX0uYmctXFtcI2ZmNDUzYVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ1M2ExYTtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yKGRpc3BsYXktcDMgLjkyMjY3MyAuMzMzMTM0IC4yNzE1MS8uMSk7YmFja2dyb3VuZC1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly4xKX0uYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjIyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYzOH0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWJsYWNrXC85MHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDBlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1ibGFja1wvOTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItYmxhY2spOTAlLHRyYW5zcGFyZW50KX19LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0xXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHQtMlwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci0zXC41e3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLTF7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucGItMVwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnBiLTJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGItXFsycHhcXXtwYWRkaW5nLWJvdHRvbToycHh9LnBsLTJ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnBsLTJcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucGwtM3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucGwtN3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0ucGwtXFsyNnB4XF17cGFkZGluZy1sZWZ0OjI2cHh9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy1zbnVney0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXNudWcpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctc251Zyl9LmxlYWRpbmctdGlnaHR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctdGlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctdGlnaHQpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1zZW1pYm9sZHstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCl9LnRyYWNraW5nLVxbMFwuMWVtXF17LS10dy10cmFja2luZzouMWVtO2xldHRlci1zcGFjaW5nOi4xZW19LnRyYWNraW5nLVxbMFwuMDJlbVxdey0tdHctdHJhY2tpbmc6LjAyZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19LnRyYWNraW5nLVxbMFwuMDRlbVxdey0tdHctdHJhY2tpbmc6LjA0ZW07bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLVxbMFwuMDZlbVxdey0tdHctdHJhY2tpbmc6LjA2ZW07bGV0dGVyLXNwYWNpbmc6LjA2ZW19LnRyYWNraW5nLVxbMFwuMDhlbVxdey0tdHctdHJhY2tpbmc6LjA4ZW07bGV0dGVyLXNwYWNpbmc6LjA4ZW19LnRyYWNraW5nLXdpZGV7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlKTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy13aWRlKX0uYnJlYWstd29yZHN7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS50ZXh0LWVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0uXCF0ZXh0LXdoaXRle2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKSFpbXBvcnRhbnR9LnRleHQtXFtcIzBhMGEwY1xde2NvbG9yOiMwYTBhMGN9LnRleHQtXFtcIzhlOGU5M1xde2NvbG9yOiM4ZThlOTN9LnRleHQtXFtcIzM0ZDM5OVxde2NvbG9yOiMzNGQzOTl9LnRleHQtXFtcIzA2MjAxOFxde2NvbG9yOiMwNjIwMTh9LnRleHQtXFtcI2M4ZDdmZlxde2NvbG9yOiNjOGQ3ZmZ9LnRleHQtXFtcI2QyZTdmZlxde2NvbG9yOiNkMmU3ZmZ9LnRleHQtXFtcI2ZmYjNhZFxde2NvbG9yOiNmZmIzYWR9LnRleHQtYWNjZW50e2NvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LnRleHQtYW1iZXItNDAwe2NvbG9yOnZhcigtLWNvbG9yLWFtYmVyLTQwMCl9LnRleHQtY3lhbi00MDB7Y29sb3I6dmFyKC0tY29sb3ItY3lhbi00MDApfS50ZXh0LWRhbmdlcntjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS50ZXh0LWRhbmdlci1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0udGV4dC1lbWVyYWxkLTQwMHtjb2xvcjp2YXIoLS1jb2xvci1lbWVyYWxkLTQwMCl9LnRleHQtc2t5LTQwMHtjb2xvcjp2YXIoLS1jb2xvci1za3ktNDAwKX0udGV4dC12aW9sZXQtNDAwe2NvbG9yOnZhcigtLWNvbG9yLXZpb2xldC00MDApfS50ZXh0LXdhcm5pbmd7Y29sb3I6dmFyKC0tY29sb3Itd2FybmluZyl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC8zMHtjb2xvcjojZmZmZmZmNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTMwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC8zNXtjb2xvcjojZmZmZmZmNTl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTM1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS00MHtvcGFjaXR5Oi40fS5vcGFjaXR5LTUwe29wYWNpdHk6LjV9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5zaGFkb3d7LS10dy1zaGFkb3c6MCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMDZcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsI2ZmZmZmZjBmKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNFwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC41XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwODApO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzhweF8wXzMycHhfcmdiYVwoMFwsMFwsMFwsMFwuMzVcKVxdey0tdHctc2hhZG93OjhweCAwIDMycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA1OSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctbGd7LS10dy1zaGFkb3c6MCAxMHB4IDE1cHggLTNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDRweCA2cHggLTRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmcsLnJpbmctMXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmctMnstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCg3NFwsMjIyXCwxMjhcLDBcLjdcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjNGFkZTgwYjN9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCgyNDhcLDExM1wsMTEzXCwwXC41NVwpXF17Ym94LXNoYWRvdzowIDAgNnB4ICNmODcxNzE4Y30ucmluZy1cW1wjMWMxYzFlXF17LS10dy1yaW5nLWNvbG9yOiMxYzFjMWV9LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5ibHVyey0tdHctYmx1cjpibHVyKDhweCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5ncmF5c2NhbGV7LS10dy1ncmF5c2NhbGU6Z3JheXNjYWxlKDEwMCUpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1cnstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cig4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxMnB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMTJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzE4cHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLW1key0tdHctYmFja2Ryb3AtYmx1cjpibHVyKHZhcigtLWJsdXItbWQpKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1zYXR1cmF0ZS0xNTB7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTpzYXR1cmF0ZSgxNTAlKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1maWx0ZXJ7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sdHJhbnNsYXRlLHNjYWxlLHJvdGF0ZSxmaWx0ZXIsLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIsYmFja2Ryb3AtZmlsdGVyLGRpc3BsYXksY29udGVudC12aXNpYmlsaXR5LG92ZXJsYXkscG9pbnRlci1ldmVudHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW2JvcmRlci1jb2xvclwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW3dpZHRoXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTp3aWR0aCxiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG87dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xNTB7LS10dy1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwey0tdHctZHVyYXRpb246LjJzO3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5kdXJhdGlvbi0zMDB7LS10dy1kdXJhdGlvbjouM3M7dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59Llxbc3RyZWFtXDphdmNjXF17c3RyZWFtOmF2Y2N9Llxbc3RyZWFtXDpoMjY0XF17c3RyZWFtOmgyNjR9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmJsb2NrOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6YmxvY2t9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC84MDpob3Zlcntjb2xvcjojZmZmY31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvODA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvODU6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZm9jdXNcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjI0XClcXTpmb2N1c3tib3JkZXItY29sb3I6I2ZmZmZmZjNkfS5mb2N1c1w6Ymctd2hpdGVcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1c1w6Ymctd2hpdGVcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1c1w6b3V0bGluZS1ub25lOmZvY3Vzey0tdHctb3V0bGluZS1zdHlsZTpub25lO291dGxpbmUtc3R5bGU6bm9uZX0uZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzLXZpc2libGVcOm9wYWNpdHktMTAwOmZvY3VzLXZpc2libGV7b3BhY2l0eToxfS5mb2N1cy12aXNpYmxlXDpcW291dGxpbmVcOjFcLjVweF9zb2xpZF9yZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjU1XClcXTpmb2N1cy12aXNpYmxle291dGxpbmU6MS41cHggc29saWQgIzBhODRmZjhjfS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtMjpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtNDpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjRweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS13aGl0ZVwvNjA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LmFjdGl2ZVw6c2NhbGUtXFswXC45N1xdOmFjdGl2ZXtzY2FsZTouOTd9QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLVxbXCMyYTJhMmNcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJhMmEyY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjM4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06ZW5hYmxlZDpob3Zlcntjb2xvcjojMGEwYTBjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtd2hpdGU6ZW5hYmxlZDpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YnJpZ2h0bmVzcy1cWzFcLjA4XF06ZW5hYmxlZDpob3ZlcnstLXR3LWJyaWdodG5lc3M6YnJpZ2h0bmVzcygxLjA4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9fS5kaXNhYmxlZFw6Y3Vyc29yLWRlZmF1bHQ6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZGlzYWJsZWRcOm9wYWNpdHktNDA6ZGlzYWJsZWR7b3BhY2l0eTouNH0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX1AbWVkaWEgKG1heC13aWR0aDo4OTkuOTk5cHgpey5tYXgtXFs5MDBweFxdXDpoaWRkZW57ZGlzcGxheTpub25lfX0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXByb2dyZXNze2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6YmctXFt2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKVxdOjotbW96LXJhbmdlLXByb2dyZXNze2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LW1vei1yYW5nZS10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ym9yZGVyLW5vbmU6Oi1tb3otcmFuZ2UtdGh1bWJ7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLHJnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjIyXClfdmFyXCgtLXNsaWRlci1maWxsXClcKVxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil2YXIoLS1zbGlkZXItZmlsbCksI2ZmZmZmZjM4IHZhcigtLXNsaWRlci1maWxsKSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6LW10LVxbNFwuNXB4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie21hcmdpbi10b3A6LTQuNXB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6YXBwZWFyYW5jZS1ub25lOjotd2Via2l0LXNsaWRlci10aHVtYnthcHBlYXJhbmNlOm5vbmV9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2hhZG93LVxbMF8xcHhfM3B4X3JnYmFcKDBcLDBcLDBcLDBcLjQ1XClcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7LS10dy1zaGFkb3c6MCAxcHggM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNzMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX19OnJvb3R7LS1idW5jc3MtbGlnaHQ6IDstLWJ1bmNzcy1kYXJrOmluaXRpYWw7Y29sb3Itc2NoZW1lOmRhcms7LS1zZXJ2ZS1zaW0tcGFuZWwtYmc6IzE4MTgxODstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudDojMTgxODE4Yzc7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQ6IzE4MTgxODAwfUBzdXBwb3J0cyAoaW50ZXJwb2xhdGUtc2l6ZTogYWxsb3cta2V5d29yZHMpezpyb290e2ludGVycG9sYXRlLXNpemU6YWxsb3cta2V5d29yZHN9fWRldGFpbHMubGVtLXNlY3Rpb246OmRldGFpbHMtY29udGVudHtvdmVyZmxvdzpjbGlwO3RyYW5zaXRpb246aGVpZ2h0IC4yMnMgZWFzZSxjb250ZW50LXZpc2liaWxpdHkgLjIycyBhbGxvdy1kaXNjcmV0ZTtoZWlnaHQ6MH1kZXRhaWxzLmxlbS1zZWN0aW9uW29wZW5dOjpkZXRhaWxzLWNvbnRlbnR7aGVpZ2h0OmF1dG99ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5e2xpc3Qtc3R5bGU6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3Zlcntjb2xvcjojZmZmfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3ZlciAubGVtLWNoZXZyb257Y29sb3I6I2ZmZmZmZmQ5IWltcG9ydGFudH0ubGVtLWNoZXZyb257dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE2cyxjb2xvciAuMTJzfUBjb250YWluZXIgKHdpZHRoPD0yMTBweCl7W2RhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsXXtkaXNwbGF5Om5vbmV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3AtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEycHgpc2NhbGUoLjk2KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoOHB4KXNjYWxlKC45Nil9fS5zZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXthbmltYXRpb246c2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZX0uZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5ncmlkLXRpbGU6aG92ZXIgLmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MX0uZ3JpZC1zaHV0ZG93bi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM1YTFkMWQ7Ym9yZGVyLWNvbG9yOiNhMzN9LmdyaWQtdGlsZTpob3Zlcntib3JkZXItY29sb3I6IzU1NSFpbXBvcnRhbnR9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcm90YXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYm9yZGVyLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1sZWFkaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZm9udC13ZWlnaHR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFja2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9yZGluYWx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zbGFzaGVkLXplcm97c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZpZ3VyZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtc3BhY2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZnJhY3Rpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LW9yZGluYWw6aW5pdGlhbDstLXR3LXNsYXNoZWQtemVybzppbml0aWFsOy0tdHctbnVtZXJpYy1maWd1cmU6aW5pdGlhbDstLXR3LW51bWVyaWMtc3BhY2luZzppbml0aWFsOy0tdHctbnVtZXJpYy1mcmFjdGlvbjppbml0aWFsOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctc2hhZG93LWFscGhhOjEwMCU7LS10dy1pbnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LXJpbmctaW5zZXQ6aW5pdGlhbDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctb3V0bGluZS1zdHlsZTpzb2xpZDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1iYWNrZHJvcC1ibHVyOmluaXRpYWw7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1iYWNrZHJvcC1jb250cmFzdDppbml0aWFsOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1pbnZlcnQ6aW5pdGlhbDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1zZXBpYTppbml0aWFsOy0tdHctZHVyYXRpb246aW5pdGlhbDstLXR3LWVhc2U6aW5pdGlhbH19fQo8L3N0eWxlPgo8L2hlYWQ+PGJvZHk+CjxkaXYgaWQ9InJvb3QiPjwvZGl2Pgo8IS0tX19TSU1fUFJFVklFV19DT05GSUdfXy0tPgo8c2NyaXB0IHR5cGU9Im1vZHVsZSI+dmFyIEkyLGUsajgsZzcsaDAseTgsdjgsUjgsejMsTjUsUDIsaDgsTzMsTDMsSDMsZzgsejU9e30sTDU9W10sZjc9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSx3Mj1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIFQwKCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIEYzKCQpeyQmJiQucGFyZW50Tm9kZSYmJC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQpfWZ1bmN0aW9uIHUxKCQsSixRKXt2YXIgWCxLLFkscT17fTtmb3IoWSBpbiBKKVk9PSJrZXkiP1g9SltZXTpZPT0icmVmIj9LPUpbWV06cVtZXT1KW1ldO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKHEuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP0kyLmNhbGwoYXJndW1lbnRzLDIpOlEpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYkLmRlZmF1bHRQcm9wcyE9bnVsbClmb3IoWSBpbiAkLmRlZmF1bHRQcm9wcylxW1ldPT09dm9pZCAwJiYocVtZXT0kLmRlZmF1bHRQcm9wc1tZXSk7cmV0dXJuIFQyKCQscSxYLEssbnVsbCl9ZnVuY3Rpb24gVDIoJCxKLFEsWCxLKXt2YXIgWT17dHlwZTokLHByb3BzOkosa2V5OlEscmVmOlgsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oks9PW51bGw/KytqODpLLF9faTotMSxfX3U6MH07cmV0dXJuIEs9PW51bGwmJmUudm5vZGUhPW51bGwmJmUudm5vZGUoWSksWX1mdW5jdGlvbiBFMigpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIEoxKCQpe3JldHVybiAkLmNoaWxkcmVufWZ1bmN0aW9uIGQxKCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfWZ1bmN0aW9uIFoyKCQsSil7aWYoSj09bnVsbClyZXR1cm4gJC5fXz9aMigkLl9fLCQuX19pKzEpOm51bGw7Zm9yKHZhciBRO0o8JC5fX2subGVuZ3RoO0orKylpZigoUT0kLl9fa1tKXSkhPW51bGwmJlEuX19lIT1udWxsKXJldHVybiBRLl9fZTtyZXR1cm4gdHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIj9aMigkKTpudWxsfWZ1bmN0aW9uIG03KCQpe2lmKCQuX19QJiYkLl9fZCl7dmFyIEo9JC5fX3YsUT1KLl9fZSxYPVtdLEs9W10sWT1UMCh7fSxKKTtZLl9fdj1KLl9fdisxLGUudm5vZGUmJmUudm5vZGUoWSksQTMoJC5fX1AsWSxKLCQuX19uLCQuX19QLm5hbWVzcGFjZVVSSSwzMiZKLl9fdT9bUV06bnVsbCxYLFE9PW51bGw/WjIoSik6USwhISgzMiZKLl9fdSksSyksWS5fX3Y9Si5fX3YsWS5fXy5fX2tbWS5fX2ldPVksdTgoWCxZLEspLEouX19lPUouX189bnVsbCxZLl9fZSE9USYmZjgoWSl9fWZ1bmN0aW9uIGY4KCQpe2lmKCgkPSQuX18pIT1udWxsJiYkLl9fYyE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1udWxsLCQuX19rLnNvbWUoZnVuY3Rpb24oSil7aWYoSiE9bnVsbCYmSi5fX2UhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9Si5fX2V9KSxmOCgkKX1mdW5jdGlvbiBVMygkKXsoISQuX19kJiYoJC5fX2Q9ITApJiZoMC5wdXNoKCQpJiYhSDUuX19yKyt8fHk4IT1lLmRlYm91bmNlUmVuZGVyaW5nKSYmKCh5OD1lLmRlYm91bmNlUmVuZGVyaW5nKXx8djgpKEg1KX1mdW5jdGlvbiBINSgpe3RyeXtmb3IodmFyICQsSj0xO2gwLmxlbmd0aDspaDAubGVuZ3RoPkomJmgwLnNvcnQoUjgpLCQ9aDAuc2hpZnQoKSxKPWgwLmxlbmd0aCxtNygkKX1maW5hbGx5e2gwLmxlbmd0aD1INS5fX3I9MH19ZnVuY3Rpb24gbTgoJCxKLFEsWCxLLFkscSxHLEIsTix6KXt2YXIgVixILEMsQSxMLFUsRixXPVgmJlguX19rfHxMNSx3PUoubGVuZ3RoO2ZvcihCPXA3KFEsSixXLEIsdyksVj0wO1Y8dztWKyspKEM9US5fX2tbVl0pIT1udWxsJiYoSD1DLl9faSE9LTEmJldbQy5fX2ldfHx6NSxDLl9faT1WLFU9QTMoJCxDLEgsSyxZLHEsRyxCLE4seiksQT1DLl9fZSxDLnJlZiYmSC5yZWYhPUMucmVmJiYoSC5yZWYmJk0zKEgucmVmLG51bGwsQyksei5wdXNoKEMucmVmLEMuX19jfHxBLEMpKSxMPT1udWxsJiZBIT1udWxsJiYoTD1BKSwoRj0hISg0JkMuX191KSl8fEguX19rPT09Qy5fX2s/KEI9cDgoQyxCLCQsRiksRiYmSC5fX2UmJihILl9fZT1udWxsKSk6dHlwZW9mIEMudHlwZT09ImZ1bmN0aW9uIiYmVSE9PXZvaWQgMD9CPVU6QSYmKEI9QS5uZXh0U2libGluZyksQy5fX3UmPS03KTtyZXR1cm4gUS5fX2U9TCxCfWZ1bmN0aW9uIHA3KCQsSixRLFgsSyl7dmFyIFkscSxHLEIsTix6PVEubGVuZ3RoLFY9eixIPTA7Zm9yKCQuX19rPUFycmF5KEspLFk9MDtZPEs7WSsrKShxPUpbWV0pIT1udWxsJiZ0eXBlb2YgcSE9ImJvb2xlYW4iJiZ0eXBlb2YgcSE9ImZ1bmN0aW9uIj8odHlwZW9mIHE9PSJzdHJpbmcifHx0eXBlb2YgcT09Im51bWJlciJ8fHR5cGVvZiBxPT0iYmlnaW50Inx8cS5jb25zdHJ1Y3Rvcj09U3RyaW5nP3E9JC5fX2tbWV09VDIobnVsbCxxLG51bGwsbnVsbCxudWxsKTp3MihxKT9xPSQuX19rW1ldPVQyKEoxLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPVQyKHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsQj1ZK0gscS5fXz0kLHEuX19iPSQuX19iKzEsRz1udWxsLChOPXEuX19pPXU3KHEsUSxCLFYpKSE9LTEmJihWLS0sKEc9UVtOXSkmJihHLl9fdXw9MikpLEc9PW51bGx8fEcuX192PT1udWxsPyhOPT0tMSYmKEs+ej9ILS06Szx6JiZIKyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOk4hPUImJihOPT1CLTE/SC0tOk49PUIrMT9IKys6KE4+Qj9ILS06SCsrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoVilmb3IoWT0wO1k8ejtZKyspKEc9UVtZXSkhPW51bGwmJigyJkcuX191KT09MCYmKEcuX19lPT1YJiYoWD1aMihHKSksZDgoRyxHKSk7cmV0dXJuIFh9ZnVuY3Rpb24gcDgoJCxKLFEsWCl7dmFyIEssWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoSz0kLl9fayxZPTA7SyYmWTxLLmxlbmd0aDtZKyspS1tZXSYmKEtbWV0uX189JCxKPXA4KEtbWV0sSixRLFgpKTtyZXR1cm4gSn0kLl9fZSE9SiYmKFgmJihKJiYkLnR5cGUmJiFKLnBhcmVudE5vZGUmJihKPVoyKCQpKSxRLmluc2VydEJlZm9yZSgkLl9fZSxKfHxudWxsKSksSj0kLl9fZSk7ZG8gSj1KJiZKLm5leHRTaWJsaW5nO3doaWxlKEohPW51bGwmJkoubm9kZVR5cGU9PTgpO3JldHVybiBKfWZ1bmN0aW9uIFgwKCQsSil7cmV0dXJuIEo9Snx8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KHcyKCQpPyQuc29tZShmdW5jdGlvbihRKXtYMChRLEopfSk6Si5wdXNoKCQpKSxKfWZ1bmN0aW9uIHU3KCQsSixRLFgpe3ZhciBLLFkscSxHPSQua2V5LEI9JC50eXBlLE49SltRXSx6PU4hPW51bGwmJigyJk4uX191KT09MDtpZihOPT09bnVsbCYmRz09bnVsbHx8eiYmRz09Ti5rZXkmJkI9PU4udHlwZSlyZXR1cm4gUTtpZihYPih6PzE6MCkpe2ZvcihLPVEtMSxZPVErMTtLPj0wfHxZPEoubGVuZ3RoOylpZigoTj1KW3E9Sz49MD9LLS06WSsrXSkhPW51bGwmJigyJk4uX191KT09MCYmRz09Ti5rZXkmJkI9PU4udHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBTOCgkLEosUSl7SlswXT09Ii0iPyQuc2V0UHJvcGVydHkoSixRPT1udWxsPyIiOlEpOiRbSl09UT09bnVsbD8iIjp0eXBlb2YgUSE9Im51bWJlciJ8fGY3LnRlc3QoSik/UTpRKyJweCJ9ZnVuY3Rpb24gQjUoJCxKLFEsWCxLKXt2YXIgWSxxOyQ6aWYoSj09InN0eWxlIilpZih0eXBlb2YgUT09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PVE7ZWxzZXtpZih0eXBlb2YgWD09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9WD0iIiksWClmb3IoSiBpbiBYKVEmJkogaW4gUXx8UzgoJC5zdHlsZSxKLCIiKTtpZihRKWZvcihKIGluIFEpWCYmUVtKXT09WFtKXXx8UzgoJC5zdHlsZSxKLFFbSl0pfWVsc2UgaWYoSlswXT09Im8iJiZKWzFdPT0ibiIpWT1KIT0oSj1KLnJlcGxhY2UoaDgsIiQxIikpLHE9Si50b0xvd2VyQ2FzZSgpLEo9cSBpbiAkfHxKPT0ib25Gb2N1c091dCJ8fEo9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6Si5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtKK1ldPVEsUT9YP1FbUDJdPVhbUDJdOihRW1AyXT1PMywkLmFkZEV2ZW50TGlzdGVuZXIoSixZP0gzOkwzLFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoSixZP0gzOkwzLFkpO2Vsc2V7aWYoSz09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilKPUoucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoSiE9IndpZHRoIiYmSiE9ImhlaWdodCImJkohPSJocmVmIiYmSiE9Imxpc3QiJiZKIT0iZm9ybSImJkohPSJ0YWJJbmRleCImJkohPSJkb3dubG9hZCImJkohPSJyb3dTcGFuIiYmSiE9ImNvbFNwYW4iJiZKIT0icm9sZSImJkohPSJwb3BvdmVyIiYmSiBpbiAkKXRyeXskW0pdPVE9PW51bGw/IiI6UTticmVhayAkfWNhdGNoKEcpe310eXBlb2YgUT09ImZ1bmN0aW9uInx8KFE9PW51bGx8fFE9PT0hMSYmSls0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKEopOiQuc2V0QXR0cmlidXRlKEosSj09InBvcG92ZXIiJiZRPT0xPyIiOlEpKX19ZnVuY3Rpb24geDgoJCl7cmV0dXJuIGZ1bmN0aW9uKEope2lmKHRoaXMubCl7dmFyIFE9dGhpcy5sW0oudHlwZSskXTtpZihKW041XT09bnVsbClKW041XT1PMysrO2Vsc2UgaWYoSltONV08UVtQMl0pcmV0dXJuO3JldHVybiBRKGUuZXZlbnQ/ZS5ldmVudChKKTpKKX19fWZ1bmN0aW9uIEEzKCQsSixRLFgsSyxZLHEsRyxCLE4pe3ZhciB6LFYsSCxDLEEsTCxVLEYsVyx3LFAseCxELG4sUixkPUoudHlwZTtpZihKLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZRLl9fdSYmKEI9ISEoMzImUS5fX3UpLFk9W0c9Si5fX2U9US5fX2VdKSwoej1lLl9fYikmJnooSik7JDppZih0eXBlb2YgZD09ImZ1bmN0aW9uIil0cnl7aWYoRj1KLnByb3BzLFc9ZC5wcm90b3R5cGUmJmQucHJvdG90eXBlLnJlbmRlcix3PSh6PWQuY29udGV4dFR5cGUpJiZYW3ouX19jXSxQPXo/dz93LnByb3BzLnZhbHVlOnouX186WCxRLl9fYz9VPShWPUouX19jPVEuX19jKS5fXz1WLl9fRTooVz9KLl9fYz1WPW5ldyBkKEYsUCk6KEouX19jPVY9bmV3IGQxKEYsUCksVi5jb25zdHJ1Y3Rvcj1kLFYucmVuZGVyPWQ3KSx3JiZ3LnN1YihWKSxWLnN0YXRlfHwoVi5zdGF0ZT17fSksVi5fX249WCxIPVYuX19kPSEwLFYuX19oPVtdLFYuX3NiPVtdKSxXJiZWLl9fcz09bnVsbCYmKFYuX19zPVYuc3RhdGUpLFcmJmQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIT1udWxsJiYoVi5fX3M9PVYuc3RhdGUmJihWLl9fcz1UMCh7fSxWLl9fcykpLFQwKFYuX19zLGQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKEYsVi5fX3MpKSksQz1WLnByb3BzLEE9Vi5zdGF0ZSxWLl9fdj1KLEgpVyYmZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJlYuY29tcG9uZW50V2lsbE1vdW50IT1udWxsJiZWLmNvbXBvbmVudFdpbGxNb3VudCgpLFcmJlYuY29tcG9uZW50RGlkTW91bnQhPW51bGwmJlYuX19oLnB1c2goVi5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZihXJiZkLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmRiE9PUMmJlYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9bnVsbCYmVi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKEYsUCksSi5fX3Y9PVEuX192fHwhVi5fX2UmJlYuc2hvdWxkQ29tcG9uZW50VXBkYXRlIT1udWxsJiZWLnNob3VsZENvbXBvbmVudFVwZGF0ZShGLFYuX19zLFApPT09ITEpe0ouX192IT1RLl9fdiYmKFYucHJvcHM9RixWLnN0YXRlPVYuX19zLFYuX19kPSExKSxKLl9fZT1RLl9fZSxKLl9faz1RLl9fayxKLl9fay5zb21lKGZ1bmN0aW9uKGkpe2kmJihpLl9fPUopfSksTDUucHVzaC5hcHBseShWLl9faCxWLl9zYiksVi5fc2I9W10sVi5fX2gubGVuZ3RoJiZxLnB1c2goVik7YnJlYWsgJH1WLmNvbXBvbmVudFdpbGxVcGRhdGUhPW51bGwmJlYuY29tcG9uZW50V2lsbFVwZGF0ZShGLFYuX19zLFApLFcmJlYuY29tcG9uZW50RGlkVXBkYXRlIT1udWxsJiZWLl9faC5wdXNoKGZ1bmN0aW9uKCl7Vi5jb21wb25lbnREaWRVcGRhdGUoQyxBLEwpfSl9aWYoVi5jb250ZXh0PVAsVi5wcm9wcz1GLFYuX19QPSQsVi5fX2U9ITEseD1lLl9fcixEPTAsVylWLnN0YXRlPVYuX19zLFYuX19kPSExLHgmJngoSiksej1WLnJlbmRlcihWLnByb3BzLFYuc3RhdGUsVi5jb250ZXh0KSxMNS5wdXNoLmFwcGx5KFYuX19oLFYuX3NiKSxWLl9zYj1bXTtlbHNlIGRvIFYuX19kPSExLHgmJngoSiksej1WLnJlbmRlcihWLnByb3BzLFYuc3RhdGUsVi5jb250ZXh0KSxWLnN0YXRlPVYuX19zO3doaWxlKFYuX19kJiYrK0Q8MjUpO1Yuc3RhdGU9Vi5fX3MsVi5nZXRDaGlsZENvbnRleHQhPW51bGwmJihYPVQwKFQwKHt9LFgpLFYuZ2V0Q2hpbGRDb250ZXh0KCkpKSxXJiYhSCYmVi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKEw9Vi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShDLEEpKSxuPXohPW51bGwmJnoudHlwZT09PUoxJiZ6LmtleT09bnVsbD9sOCh6LnByb3BzLmNoaWxkcmVuKTp6LEc9bTgoJCx3MihuKT9uOltuXSxKLFEsWCxLLFkscSxHLEIsTiksVi5iYXNlPUouX19lLEouX191Jj0tMTYxLFYuX19oLmxlbmd0aCYmcS5wdXNoKFYpLFUmJihWLl9fRT1WLl9fPW51bGwpfWNhdGNoKGkpe2lmKEouX192PW51bGwsQnx8WSE9bnVsbClpZihpLnRoZW4pe2ZvcihKLl9fdXw9Qj8xNjA6MTI4O0cmJkcubm9kZVR5cGU9PTgmJkcubmV4dFNpYmxpbmc7KUc9Ry5uZXh0U2libGluZztZW1kuaW5kZXhPZihHKV09bnVsbCxKLl9fZT1HfWVsc2V7Zm9yKFI9WS5sZW5ndGg7Ui0tOylGMyhZW1JdKTtDMyhKKX1lbHNlIEouX19lPVEuX19lLEouX19rPVEuX19rLGkudGhlbnx8QzMoSik7ZS5fX2UoaSxKLFEpfWVsc2UgWT09bnVsbCYmSi5fX3Y9PVEuX192PyhKLl9faz1RLl9fayxKLl9fZT1RLl9fZSk6Rz1KLl9fZT1sNyhRLl9fZSxKLFEsWCxLLFkscSxCLE4pO3JldHVybih6PWUuZGlmZmVkKSYmeihKKSwxMjgmSi5fX3U/dm9pZCAwOkd9ZnVuY3Rpb24gQzMoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShDMykpfWZ1bmN0aW9uIHU4KCQsSixRKXtmb3IodmFyIFg9MDtYPFEubGVuZ3RoO1grKylNMyhRW1hdLFFbKytYXSxRWysrWF0pO2UuX19jJiZlLl9fYyhKLCQpLCQuc29tZShmdW5jdGlvbihLKXt0cnl7JD1LLl9faCxLLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKEspfSl9Y2F0Y2goWSl7ZS5fX2UoWSxLLl9fdil9fSl9ZnVuY3Rpb24gbDgoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOncyKCQpPyQubWFwKGw4KTpUMCh7fSwkKX1mdW5jdGlvbiBsNygkLEosUSxYLEssWSxxLEcsQil7dmFyIE4seixWLEgsQyxBLEwsVT1RLnByb3BzfHx6NSxGPUoucHJvcHMsVz1KLnR5cGU7aWYoVz09InN2ZyI/Sz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOlc9PSJtYXRoIj9LPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpLfHwoSz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihOPTA7TjxZLmxlbmd0aDtOKyspaWYoKEM9WVtOXSkmJiJzZXRBdHRyaWJ1dGUiaW4gQz09ISFXJiYoVz9DLmxvY2FsTmFtZT09VzpDLm5vZGVUeXBlPT0zKSl7JD1DLFlbTl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoVz09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoRik7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoSyxXLEYuaXMmJkYpLEcmJihlLl9fbSYmZS5fX20oSixZKSxHPSExKSxZPW51bGx9aWYoVz09bnVsbClVPT09Rnx8RyYmJC5kYXRhPT1GfHwoJC5kYXRhPUYpO2Vsc2V7aWYoWT1ZJiZJMi5jYWxsKCQuY2hpbGROb2RlcyksIUcmJlkhPW51bGwpZm9yKFU9e30sTj0wO048JC5hdHRyaWJ1dGVzLmxlbmd0aDtOKyspVVsoQz0kLmF0dHJpYnV0ZXNbTl0pLm5hbWVdPUMudmFsdWU7Zm9yKE4gaW4gVSlDPVVbTl0sTj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9WPUM6Tj09ImNoaWxkcmVuInx8KE4gaW4gRil8fE49PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEYpfHxOPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gRil8fEI1KCQsTixudWxsLEMsSyk7Zm9yKE4gaW4gRilDPUZbTl0sTj09ImNoaWxkcmVuIj9IPUM6Tj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj96PUM6Tj09InZhbHVlIj9BPUM6Tj09ImNoZWNrZWQiP0w9QzpHJiZ0eXBlb2YgQyE9ImZ1bmN0aW9uInx8VVtOXT09PUN8fEI1KCQsTixDLFVbTl0sSyk7aWYoeilHfHxWJiYoei5fX2h0bWw9PVYuX19odG1sfHx6Ll9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9ei5fX2h0bWwpLEouX19rPVtdO2Vsc2UgaWYoViYmKCQuaW5uZXJIVE1MPSIiKSxtOChKLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsdzIoSCk/SDpbSF0sSixRLFgsVz09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpLLFkscSxZP1lbMF06US5fX2smJloyKFEsMCksRyxCKSxZIT1udWxsKWZvcihOPVkubGVuZ3RoO04tLTspRjMoWVtOXSk7R3x8KE49InZhbHVlIixXPT0icHJvZ3Jlc3MiJiZBPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOkEhPW51bGwmJihBIT09JFtOXXx8Vz09InByb2dyZXNzIiYmIUF8fFc9PSJvcHRpb24iJiZBIT1VW05dKSYmQjUoJCxOLEEsVVtOXSxLKSxOPSJjaGVja2VkIixMIT1udWxsJiZMIT0kW05dJiZCNSgkLE4sTCxVW05dLEspKX1yZXR1cm4gJH1mdW5jdGlvbiBNMygkLEosUSl7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWD10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WCYmJC5fX3UoKSxYJiZKPT1udWxsfHwoJC5fX3U9JChKKSl9ZWxzZSAkLmN1cnJlbnQ9Sn1jYXRjaChLKXtlLl9fZShLLFEpfX1mdW5jdGlvbiBkOCgkLEosUSl7dmFyIFgsSztpZihlLnVubW91bnQmJmUudW5tb3VudCgkKSwoWD0kLnJlZikmJihYLmN1cnJlbnQmJlguY3VycmVudCE9JC5fX2V8fE0zKFgsbnVsbCxKKSksKFg9JC5fX2MpIT1udWxsKXtpZihYLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtYLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7ZS5fX2UoWSxKKX1YLmJhc2U9WC5fX1A9bnVsbH1pZihYPSQuX19rKWZvcihLPTA7SzxYLmxlbmd0aDtLKyspWFtLXSYmZDgoWFtLXSxKLFF8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO1F8fEYzKCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBkNygkLEosUSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxRKX1mdW5jdGlvbiB4MCgkLEosUSl7dmFyIFgsSyxZLHE7Sj09ZG9jdW1lbnQmJihKPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksZS5fXyYmZS5fXygkLEopLEs9KFg9dHlwZW9mIFE9PSJmdW5jdGlvbiIpP251bGw6USYmUS5fX2t8fEouX19rLFk9W10scT1bXSxBMyhKLCQ9KCFYJiZRfHxKKS5fX2s9dTEoSjEsbnVsbCxbJF0pLEt8fHo1LHo1LEoubmFtZXNwYWNlVVJJLCFYJiZRP1tRXTpLP251bGw6Si5maXJzdENoaWxkP0kyLmNhbGwoSi5jaGlsZE5vZGVzKTpudWxsLFksIVgmJlE/UTpLP0suX19lOkouZmlyc3RDaGlsZCxYLHEpLHU4KFksJCxxKX1mdW5jdGlvbiBVNSgkLEope3gwKCQsSixVNSl9ZnVuY3Rpb24gazMoJCxKLFEpe3ZhciBYLEssWSxxLEc9VDAoe30sJC5wcm9wcyk7Zm9yKFkgaW4gJC50eXBlJiYkLnR5cGUuZGVmYXVsdFByb3BzJiYocT0kLnR5cGUuZGVmYXVsdFByb3BzKSxKKVk9PSJrZXkiP1g9SltZXTpZPT0icmVmIj9LPUpbWV06R1tZXT1KW1ldPT09dm9pZCAwJiZxIT1udWxsP3FbWV06SltZXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoRy5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/STIuY2FsbChhcmd1bWVudHMsMik6USksVDIoJC50eXBlLEcsWHx8JC5rZXksS3x8JC5yZWYsbnVsbCl9ZnVuY3Rpb24gTzAoJCl7ZnVuY3Rpb24gSihRKXt2YXIgWCxLO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFg9bmV3IFNldCwoSz17fSlbSi5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gS30sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1g9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWC5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLFUzKHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1guYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1gmJlguZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxRLmNoaWxkcmVufXJldHVybiBKLl9fYz0iX19jQyIrZzgrKyxKLl9fPSQsSi5Qcm92aWRlcj1KLl9fbD0oSi5Db25zdW1lcj1mdW5jdGlvbihRLFgpe3JldHVybiBRLmNoaWxkcmVuKFgpfSkuY29udGV4dFR5cGU9SixKfUkyPUw1LnNsaWNlLGU9e19fZTpmdW5jdGlvbigkLEosUSxYKXtmb3IodmFyIEssWSxxO0o9Si5fXzspaWYoKEs9Si5fX2MpJiYhSy5fXyl0cnl7aWYoKFk9Sy5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoSy5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1LLl9fZCksSy5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKEsuY29tcG9uZW50RGlkQ2F0Y2goJCxYfHx7fSkscT1LLl9fZCkscSlyZXR1cm4gSy5fX0U9S31jYXRjaChHKXskPUd9dGhyb3cgJH19LGo4PTAsZzc9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LGQxLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLEope3ZhciBRO1E9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPVQwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKFQwKHt9LFEpLHRoaXMucHJvcHMpKSwkJiZUMChRLCQpLCQhPW51bGwmJnRoaXMuX192JiYoSiYmdGhpcy5fc2IucHVzaChKKSxVMyh0aGlzKSl9LGQxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksVTModGhpcykpfSxkMS5wcm90b3R5cGUucmVuZGVyPUoxLGgwPVtdLHY4PXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxSOD1mdW5jdGlvbigkLEope3JldHVybiAkLl9fdi5fX2ItSi5fX3YuX19ifSxINS5fX3I9MCx6Mz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLE41PSJfX2QiK3ozLFAyPSJfX2EiK3ozLGg4PS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLE8zPTAsTDM9eDgoITEpLEgzPXg4KCEwKSxnOD0wO3ZhciBnMCxTMSxXMyxjOCxYMj0wLGU4PVtdLGcxPWUsbzg9ZzEuX19iLGk4PWcxLl9fcixuOD1nMS5kaWZmZWQscjg9ZzEuX19jLGE4PWcxLnVubW91bnQsczg9ZzEuX187ZnVuY3Rpb24gSzIoJCxKKXtnMS5fX2gmJmcxLl9faChTMSwkLFgyfHxKKSxYMj0wO3ZhciBRPVMxLl9fSHx8KFMxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PVEuX18ubGVuZ3RoJiZRLl9fLnB1c2goe30pLFEuX19bJF19ZnVuY3Rpb24gaygkKXtyZXR1cm4gWDI9MSxvMCgkOSwkKX1mdW5jdGlvbiBvMCgkLEosUSl7dmFyIFg9SzIoZzArKywyKTtpZihYLnQ9JCwhWC5fX2MmJihYLl9fPVtRP1EoSik6JDkodm9pZCAwLEopLGZ1bmN0aW9uKEcpe3ZhciBCPVguX19OP1guX19OWzBdOlguX19bMF0sTj1YLnQoQixHKTtCIT09TiYmKFguX19OPVtOLFguX19bMV1dLFguX19jLnNldFN0YXRlKHt9KSl9XSxYLl9fYz1TMSwhUzEuX19mKSl7dmFyIEs9ZnVuY3Rpb24oRyxCLE4pe2lmKCFYLl9fYy5fX0gpcmV0dXJuITA7dmFyIHo9WC5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihIKXtyZXR1cm4gSC5fX2N9KTtpZih6LmV2ZXJ5KGZ1bmN0aW9uKEgpe3JldHVybiFILl9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxHLEIsTik7dmFyIFY9WC5fX2MucHJvcHMhPT1HO3JldHVybiB6LnNvbWUoZnVuY3Rpb24oSCl7aWYoSC5fX04pe3ZhciBDPUguX19bMF07SC5fXz1ILl9fTixILl9fTj12b2lkIDAsQyE9PUguX19bMF0mJihWPSEwKX19KSxZJiZZLmNhbGwodGhpcyxHLEIsTil8fFZ9O1MxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT1TMTtTMS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKEcsQixOKXtpZih0aGlzLl9fZSl7dmFyIHo9WTtZPXZvaWQgMCxLKEcsQixOKSxZPXp9cSYmcS5jYWxsKHRoaXMsRyxCLE4pfSxTMS5zaG91bGRDb21wb25lbnRVcGRhdGU9S31yZXR1cm4gWC5fX058fFguX199ZnVuY3Rpb24geSgkLEope3ZhciBRPUsyKGcwKyssMyk7IWcxLl9fcyYmRDMoUS5fX0gsSikmJihRLl9fPSQsUS51PUosUzEuX19ILl9faC5wdXNoKFEpKX1mdW5jdGlvbiBJMCgkLEope3ZhciBRPUsyKGcwKyssNCk7IWcxLl9fcyYmRDMoUS5fX0gsSikmJihRLl9fPSQsUS51PUosUzEuX19oLnB1c2goUSkpfWZ1bmN0aW9uIFQoJCl7cmV0dXJuIFgyPTUsazEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIE81KCQsSixRKXtYMj02LEkwKGZ1bmN0aW9uKCl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBYPSQoSigpKTtyZXR1cm4gZnVuY3Rpb24oKXskKG51bGwpLFgmJnR5cGVvZiBYPT0iZnVuY3Rpb24iJiZYKCl9fWlmKCQpcmV0dXJuICQuY3VycmVudD1KKCksZnVuY3Rpb24oKXtyZXR1cm4gJC5jdXJyZW50PW51bGx9fSxRPT1udWxsP1E6US5jb25jYXQoJCkpfWZ1bmN0aW9uIGsxKCQsSil7dmFyIFE9SzIoZzArKyw3KTtyZXR1cm4gRDMoUS5fX0gsSikmJihRLl9fPSQoKSxRLl9fSD1KLFEuX19oPSQpLFEuX199ZnVuY3Rpb24gRSgkLEope3JldHVybiBYMj04LGsxKGZ1bmN0aW9uKCl7cmV0dXJuICR9LEopfWZ1bmN0aW9uIEYwKCQpe3ZhciBKPVMxLmNvbnRleHRbJC5fX2NdLFE9SzIoZzArKyw5KTtyZXR1cm4gUS5jPSQsSj8oUS5fXz09bnVsbCYmKFEuX189ITAsSi5zdWIoUzEpKSxKLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIEY1KCQsSil7ZzEudXNlRGVidWdWYWx1ZSYmZzEudXNlRGVidWdWYWx1ZShKP0ooJCk6JCl9ZnVuY3Rpb24gWTIoKXt2YXIgJD1LMihnMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBKPVMxLl9fdjtKIT09bnVsbCYmIUouX19tJiZKLl9fIT09bnVsbDspSj1KLl9fO3ZhciBRPUouX19tfHwoSi5fX209WzAsMF0pOyQuX189IlAiK1FbMF0rIi0iK1FbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiBjNygpe2Zvcih2YXIgJDskPWU4LnNoaWZ0KCk7KXt2YXIgSj0kLl9fSDtpZigkLl9fUCYmSil0cnl7Si5fX2guc29tZShDNSksSi5fX2guc29tZShfMyksSi5fX2g9W119Y2F0Y2goUSl7Si5fX2g9W10sZzEuX19lKFEsJC5fX3YpfX19ZzEuX19iPWZ1bmN0aW9uKCQpe1MxPW51bGwsbzgmJm84KCQpfSxnMS5fXz1mdW5jdGlvbigkLEopeyQmJkouX19rJiZKLl9fay5fX20mJigkLl9fbT1KLl9fay5fX20pLHM4JiZzOCgkLEopfSxnMS5fX3I9ZnVuY3Rpb24oJCl7aTgmJmk4KCQpLGcwPTA7dmFyIEo9KFMxPSQuX19jKS5fX0g7SiYmKFczPT09UzE/KEouX19oPVtdLFMxLl9faD1bXSxKLl9fLnNvbWUoZnVuY3Rpb24oUSl7US5fX04mJihRLl9fPVEuX19OKSxRLnU9US5fX049dm9pZCAwfSkpOihKLl9faC5zb21lKEM1KSxKLl9faC5zb21lKF8zKSxKLl9faD1bXSxnMD0wKSksVzM9UzF9LGcxLmRpZmZlZD1mdW5jdGlvbigkKXtuOCYmbjgoJCk7dmFyIEo9JC5fX2M7SiYmSi5fX0gmJihKLl9fSC5fX2gubGVuZ3RoJiYoZTgucHVzaChKKSE9PTEmJmM4PT09ZzEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKGM4PWcxLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fG83KShjNykpLEouX19ILl9fLnNvbWUoZnVuY3Rpb24oUSl7US51JiYoUS5fX0g9US51KSxRLnU9dm9pZCAwfSkpLFczPVMxPW51bGx9LGcxLl9fYz1mdW5jdGlvbigkLEope0ouc29tZShmdW5jdGlvbihRKXt0cnl7US5fX2guc29tZShDNSksUS5fX2g9US5fX2guZmlsdGVyKGZ1bmN0aW9uKFgpe3JldHVybiFYLl9ffHxfMyhYKX0pfWNhdGNoKFgpe0ouc29tZShmdW5jdGlvbihLKXtLLl9faCYmKEsuX19oPVtdKX0pLEo9W10sZzEuX19lKFgsUS5fX3YpfX0pLHI4JiZyOCgkLEopfSxnMS51bm1vdW50PWZ1bmN0aW9uKCQpe2E4JiZhOCgkKTt2YXIgSixRPSQuX19jO1EmJlEuX19IJiYoUS5fX0guX18uc29tZShmdW5jdGlvbihYKXt0cnl7QzUoWCl9Y2F0Y2goSyl7Sj1LfX0pLFEuX19IPXZvaWQgMCxKJiZnMS5fX2UoSixRLl9fdikpfTt2YXIgdDg9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBvNygkKXt2YXIgSixRPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFgpLHQ4JiZjYW5jZWxBbmltYXRpb25GcmFtZShKKSxzZXRUaW1lb3V0KCQpfSxYPXNldFRpbWVvdXQoUSwzNSk7dDgmJihKPXJlcXVlc3RBbmltYXRpb25GcmFtZShRKSl9ZnVuY3Rpb24gQzUoJCl7dmFyIEo9UzEsUT0kLl9fYzt0eXBlb2YgUT09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxRKCkpLFMxPUp9ZnVuY3Rpb24gXzMoJCl7dmFyIEo9UzE7JC5fX2M9JC5fXygpLFMxPUp9ZnVuY3Rpb24gRDMoJCxKKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1KLmxlbmd0aHx8Si5zb21lKGZ1bmN0aW9uKFEsWCl7cmV0dXJuIFEhPT0kW1hdfSl9ZnVuY3Rpb24gJDkoJCxKKXtyZXR1cm4gdHlwZW9mIEo9PSJmdW5jdGlvbiI/SigkKTpKfWZ1bmN0aW9uIGk3KCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIEo5KCQsSil7Zm9yKHZhciBRIGluICQpaWYoUSE9PSJfX3NvdXJjZSImJiEoUSBpbiBKKSlyZXR1cm4hMDtmb3IodmFyIFggaW4gSilpZihYIT09Il9fc291cmNlIiYmJFtYXSE9PUpbWF0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUTkoJCxKKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUp9KFE5LnByb3RvdHlwZT1uZXcgZDEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLFE5LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gSjkodGhpcy5wcm9wcywkKXx8SjkodGhpcy5zdGF0ZSxKKX07dmFyIFo5PWUuX19iO2UuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxaOSYmWjkoJCl9O3ZhciBuNz1lLl9fZTtlLl9fZT1mdW5jdGlvbigkLEosUSxYKXtpZigkLnRoZW4pe2Zvcih2YXIgSyxZPUo7WT1ZLl9fOylpZigoSz1ZLl9fYykmJksuX19jKXJldHVybiBKLl9fZT09bnVsbCYmKEouX19lPVEuX19lLEouX19rPVEuX19rKSxLLl9fYygkLEopfW43KCQsSixRLFgpfTt2YXIgWDk9ZS51bm1vdW50O2Z1bmN0aW9uIEI5KCQsSixRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9aTcoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SiksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIEI5KFgsSixRKX0pKSwkfWZ1bmN0aW9uIE45KCQsSixRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gTjkoWCxKLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUomJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBQMygpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiB6OSgkKXt2YXIgSj0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSiYmSi5fX2EmJkouX19hKCQpfWZ1bmN0aW9uIEE1KCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBKPSQuX19jO0omJihKLl9fej0hMCksSiYmSi5fX1ImJkouX19SKCksSiYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksWDkmJlg5KCQpfSwoUDMucHJvdG90eXBlPW5ldyBkMSkuX19jPWZ1bmN0aW9uKCQsSil7dmFyIFE9Si5fX2MsWD10aGlzO1gubz09bnVsbCYmKFgubz1bXSksWC5vLnB1c2goUSk7dmFyIEs9ejkoWC5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFguX196fHwoWT0hMCxRLl9fUj1udWxsLEs/SyhCKTpCKCkpfTtRLl9fUj1xO3ZhciBHPVEuX19QO1EuX19QPW51bGw7dmFyIEI9ZnVuY3Rpb24oKXtpZighLS1YLl9fdSl7aWYoWC5zdGF0ZS5fX2Epe3ZhciBOPVguc3RhdGUuX19hO1guX192Ll9fa1swXT1OOShOLE4uX19jLl9fUCxOLl9fYy5fX08pfXZhciB6O2ZvcihYLnNldFN0YXRlKHtfX2E6WC5fX2I9bnVsbH0pO3o9WC5vLnBvcCgpOyl6Ll9fUD1HLHouZm9yY2VVcGRhdGUoKX19O1guX191Kyt8fDMyJkouX191fHxYLnNldFN0YXRlKHtfX2E6WC5fX2I9WC5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LFAzLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sUDMucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEope2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFg9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09QjkodGhpcy5fX2IsUSxYLl9fTz1YLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgSz1KLl9fYSYmdTEoSjEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gSyYmKEsuX191Jj0tMzMpLFt1MShKMSxudWxsLEouX19hP251bGw6JC5jaGlsZHJlbiksS119O3ZhciBLOT1mdW5jdGlvbigkLEosUSl7aWYoKytRWzFdPT09UVswXSYmJC5sLmRlbGV0ZShKKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoUT0kLmk7UTspe2Zvcig7US5sZW5ndGg+MzspUS5wb3AoKSgpO2lmKFFbMV08UVswXSlicmVhazskLmk9UT1RWzJdfX07KEE1LnByb3RvdHlwZT1uZXcgZDEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9ejkoSi5fX3YpLFg9Si5sLmdldCgkKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKEspe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKEspLEs5KEosJCxYKSk6SygpfTtRP1EoWSk6WSgpfX0sQTUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1YMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LEE1LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9QTUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe0s5KCQsUSxKKX0pfTt2YXIgcjc9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsYTc9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLHM3PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sdDc9L1tBLVowLTldL2csZTc9dHlwZW9mIGRvY3VtZW50PCJ1IiwkJD1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIEw5KCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSx4MCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfWQxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShkMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpKfSl9fSl9KTt2YXIgWTk9ZS5ldmVudDtlLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBZOSYmKCQ9WTkoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBIOSxKJD17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0scTk9ZS52bm9kZTtlLnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihKKXt2YXJ7cHJvcHM6USx0eXBlOlh9PUosSz17fSxZPVguaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIHEgaW4gUSl7dmFyIEc9UVtxXTtpZighKHE9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBRKSYmRz09bnVsbHx8ZTcmJnE9PT0iY2hpbGRyZW4iJiZYPT09Im5vc2NyaXB0Inx8cT09PSJjbGFzcyJ8fHE9PT0iY2xhc3NOYW1lIikpe3ZhciBCPXEudG9Mb3dlckNhc2UoKTtxPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBRJiZRLnZhbHVlPT1udWxsP3E9InZhbHVlIjpxPT09ImRvd25sb2FkIiYmRz09PSEwP0c9IiI6Qj09PSJ0cmFuc2xhdGUiJiZHPT09Im5vIj9HPSExOkJbMF09PT0ibyImJkJbMV09PT0ibiI/Qj09PSJvbmRvdWJsZWNsaWNrIj9xPSJvbmRibGNsaWNrIjpCIT09Im9uY2hhbmdlInx8WCE9PSJpbnB1dCImJlghPT0idGV4dGFyZWEifHwkJChRLnR5cGUpP0I9PT0ib25mb2N1cyI/cT0ib25mb2N1c2luIjpCPT09Im9uYmx1ciI/cT0ib25mb2N1c291dCI6czcudGVzdChxKSYmKHE9Qik6Qj1xPSJvbmlucHV0IjpZJiZhNy50ZXN0KHEpP3E9cS5yZXBsYWNlKHQ3LCItJCYiKS50b0xvd2VyQ2FzZSgpOkc9PT1udWxsJiYoRz12b2lkIDApLEI9PT0ib25pbnB1dCImJktbcT1CXSYmKHE9Im9uaW5wdXRDYXB0dXJlIiksS1txXT1HfX1YPT0ic2VsZWN0IiYmKEsubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoSy52YWx1ZSkmJihLLnZhbHVlPVgwKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oTil7Ti5wcm9wcy5zZWxlY3RlZD1LLnZhbHVlLmluZGV4T2YoTi5wcm9wcy52YWx1ZSkhPS0xfSkpLEsuZGVmYXVsdFZhbHVlIT1udWxsJiYoSy52YWx1ZT1YMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe04ucHJvcHMuc2VsZWN0ZWQ9Sy5tdWx0aXBsZT9LLmRlZmF1bHRWYWx1ZS5pbmRleE9mKE4ucHJvcHMudmFsdWUpIT0tMTpLLmRlZmF1bHRWYWx1ZT09Ti5wcm9wcy52YWx1ZX0pKSksUS5jbGFzcyYmIVEuY2xhc3NOYW1lPyhLLmNsYXNzPVEuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KEssImNsYXNzTmFtZSIsSiQpKTpRLmNsYXNzTmFtZSYmKEsuY2xhc3M9Sy5jbGFzc05hbWU9US5jbGFzc05hbWUpLEoucHJvcHM9S30oJCksJC4kJHR5cGVvZj1yNyxxOSYmcTkoJCl9O3ZhciBHOT1lLl9fcjtlLl9fcj1mdW5jdGlvbigkKXtHOSYmRzkoJCksSDk9JC5fX2N9O3ZhciBWOT1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbigkKXtWOSYmVjkoJCk7dmFye3Byb3BzOkosX19lOlF9PSQ7USE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEomJkoudmFsdWUhPT1RLnZhbHVlJiYoUS52YWx1ZT1KLnZhbHVlPT1udWxsPyIiOkoudmFsdWUpLEg5PW51bGx9O2Z1bmN0aW9uIFU5KCQpe3JldHVybiEhJC5fX2smJih4MChudWxsLCQpLCEwKX1mdW5jdGlvbiBDOSgkKXtyZXR1cm57cmVuZGVyOmZ1bmN0aW9uKEope0w5KEosJCl9LHVubW91bnQ6ZnVuY3Rpb24oKXtVOSgkKX19fWZ1bmN0aW9uIFA5KCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIEkzKCQsSil7Zm9yKHZhciBRIGluICQpaWYoUSE9PSJfX3NvdXJjZSImJiEoUSBpbiBKKSlyZXR1cm4hMDtmb3IodmFyIFggaW4gSilpZihYIT09Il9fc291cmNlIiYmJFtYXSE9PUpbWF0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVDkoJCxKKXt2YXIgUT1KKCksWD1rKHt0OntfXzpRLHU6Sn19KSxLPVhbMF0udCxZPVhbMV07cmV0dXJuIEkwKGZ1bmN0aW9uKCl7Sy5fXz1RLEsudT1KLFQzKEspJiZZKHt0Okt9KX0sWyQsUSxKXSkseShmdW5jdGlvbigpe3JldHVybiBUMyhLKSYmWSh7dDpLfSksJChmdW5jdGlvbigpe1QzKEspJiZZKHt0Okt9KX0pfSxbJF0pLFF9ZnVuY3Rpb24gVDMoJCl7dHJ5e3JldHVybiEoKEo9JC5fXyk9PT0oUT0kLnUoKSkmJihKIT09MHx8MS9KPT0xL1EpfHxKIT1KJiZRIT1RKX1jYXRjaChYKXtyZXR1cm4hMH12YXIgSixRfWZ1bmN0aW9uIEk5KCQpeyQoKX1mdW5jdGlvbiB3OSgkKXtyZXR1cm4gJH1mdW5jdGlvbiBFOSgpe3JldHVyblshMSxJOV19dmFyIGI5PUkwO2Z1bmN0aW9uIHczKCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfWZ1bmN0aW9uIGkwKCQsSil7ZnVuY3Rpb24gUShLKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9Sy5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxKPyFKKHRoaXMucHJvcHMsSyl8fFkhPUsucmVmOkkzKHRoaXMucHJvcHMsSyl9ZnVuY3Rpb24gWChLKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9USx1MSgkLEspfXJldHVybiBYLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFguX19mPVgucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWC50eXBlPSQsWH0odzMucHJvdG90eXBlPW5ldyBkMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsdzMucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEope3JldHVybiBJMyh0aGlzLnByb3BzLCQpfHxJMyh0aGlzLnN0YXRlLEopfTt2YXIgTzk9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLE85JiZPOSgkKX07dmFyIFEkPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIEQwKCQpe2Z1bmN0aW9uIEooUSl7dmFyIFg9UDkoe30sUSk7cmV0dXJuIGRlbGV0ZSBYLnJlZiwkKFgsUS5yZWZ8fG51bGwpfXJldHVybiBKLiQkdHlwZW9mPVEkLEoucmVuZGVyPSQsSi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1KLl9fZj0hMCxKLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLEp9dmFyIEY5PWZ1bmN0aW9uKCQsSil7cmV0dXJuICQ9PW51bGw/bnVsbDpYMChYMCgkKS5tYXAoSikpfSxaJD17bWFwOkY5LGZvckVhY2g6RjksY291bnQ6ZnVuY3Rpb24oJCl7cmV0dXJuICQ/WDAoJCkubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24oJCl7dmFyIEo9WDAoJCk7aWYoSi5sZW5ndGghPT0xKXRocm93IkNoaWxkcmVuLm9ubHkiO3JldHVybiBKWzBdfSx0b0FycmF5OlgwfSxYJD1lLl9fZTtlLl9fZT1mdW5jdGlvbigkLEosUSxYKXtpZigkLnRoZW4pe2Zvcih2YXIgSyxZPUo7WT1ZLl9fOylpZigoSz1ZLl9fYykmJksuX19jKXJldHVybiBKLl9fZT09bnVsbCYmKEouX19lPVEuX19lLEouX19rPVEuX19rKSxLLl9fYygkLEopfVgkKCQsSixRLFgpfTt2YXIgQTk9ZS51bm1vdW50O2Z1bmN0aW9uIHk5KCQsSixRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9UDkoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SiksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIHk5KFgsSixRKX0pKSwkfWZ1bmN0aW9uIFM5KCQsSixRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gUzkoWCxKLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUomJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBNNSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiB4OSgkKXt2YXIgSj0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSiYmSi5fX2EmJkouX19hKCQpfWZ1bmN0aW9uIEskKCQpe3ZhciBKLFEsWCxLPW51bGw7ZnVuY3Rpb24gWShxKXtpZihKfHwoSj0kKCkpLnRoZW4oZnVuY3Rpb24oRyl7RyYmKEs9Ry5kZWZhdWx0fHxHKSxYPSEwfSxmdW5jdGlvbihHKXtRPUcsWD0hMH0pLFEpdGhyb3cgUTtpZighWCl0aHJvdyBKO3JldHVybiBLP3UxKEsscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiBiMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfWUudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSj0kLl9fYztKJiYoSi5fX3o9ITApLEomJkouX19SJiZKLl9fUigpLEomJjMyJiQuX191JiYoJC50eXBlPW51bGwpLEE5JiZBOSgkKX0sKE01LnByb3RvdHlwZT1uZXcgZDEpLl9fYz1mdW5jdGlvbigkLEope3ZhciBRPUouX19jLFg9dGhpcztYLm89PW51bGwmJihYLm89W10pLFguby5wdXNoKFEpO3ZhciBLPXg5KFguX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxYLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxLP0soQik6QigpKX07US5fX1I9cTt2YXIgRz1RLl9fUDtRLl9fUD1udWxsO3ZhciBCPWZ1bmN0aW9uKCl7aWYoIS0tWC5fX3Upe2lmKFguc3RhdGUuX19hKXt2YXIgTj1YLnN0YXRlLl9fYTtYLl9fdi5fX2tbMF09UzkoTixOLl9fYy5fX1AsTi5fX2MuX19PKX12YXIgejtmb3IoWC5zZXRTdGF0ZSh7X19hOlguX19iPW51bGx9KTt6PVguby5wb3AoKTspei5fX1A9Ryx6LmZvcmNlVXBkYXRlKCl9fTtYLl9fdSsrfHwzMiZKLl9fdXx8WC5zZXRTdGF0ZSh7X19hOlguX19iPVguX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxNNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LE01LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxKKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxYPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPXk5KHRoaXMuX19iLFEsWC5fX089WC5fX1ApfXRoaXMuX19iPW51bGx9dmFyIEs9Si5fX2EmJnUxKEoxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIEsmJihLLl9fdSY9LTMzKSxbdTEoSjEsbnVsbCxKLl9fYT9udWxsOiQuY2hpbGRyZW4pLEtdfTt2YXIgTTk9ZnVuY3Rpb24oJCxKLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSiksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19O2Z1bmN0aW9uIFkkKCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gcSQoJCl7dmFyIEo9dGhpcyxRPSQuaDtpZihKLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7eDAobnVsbCxKLnYpLEoudj1udWxsLEouaD1udWxsfSxKLmgmJkouaCE9PVEmJkouY29tcG9uZW50V2lsbFVubW91bnQoKSwhSi52KXtmb3IodmFyIFg9Si5fX3Y7WCE9PW51bGwmJiFYLl9fbSYmWC5fXyE9PW51bGw7KVg9WC5fXztKLmg9USxKLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpRLGNoaWxkTm9kZXM6W10sX19rOntfX206WC5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpRLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oSyxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChLKSxKLmguaW5zZXJ0QmVmb3JlKEssWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKEspe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoSyk+Pj4xLDEpLEouaC5yZW1vdmVDaGlsZChLKX19fXgwKHUxKFkkLHtjb250ZXh0OkouY29udGV4dH0sJC5fX3YpLEoudil9ZnVuY3Rpb24gRTMoJCxKKXt2YXIgUT11MShxJCx7X192OiQsaDpKfSk7cmV0dXJuIFEuY29udGFpbmVySW5mbz1KLFF9KGIyLnByb3RvdHlwZT1uZXcgZDEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9eDkoSi5fX3YpLFg9Si5sLmdldCgkKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKEspe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKEspLE05KEosJCxYKSk6SygpfTtRP1EoWSk6WSgpfX0sYjIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1YMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LGIyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9YjIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe005KCQsUSxKKX0pfTt2YXIgajk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsRyQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLFYkPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sQiQ9L1tBLVowLTldL2csTiQ9dHlwZW9mIGRvY3VtZW50PCJ1Iix6JD1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIEwkKCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSx4MCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIEgkKCQsSixRKXtyZXR1cm4gVTUoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1kMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZDEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Sn0pfX0pfSk7dmFyIGs5PWUuZXZlbnQ7ZS5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gazkmJigkPWs5KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgYjMsVSQ9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LFc5PWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSil7dmFye3Byb3BzOlEsdHlwZTpYfT1KLEs9e30sWT1YLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBHPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJkc9PW51bGx8fE4kJiZxPT09ImNoaWxkcmVuIiYmWD09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgQj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJkc9PT0hMD9HPSIiOkI9PT0idHJhbnNsYXRlIiYmRz09PSJubyI/Rz0hMTpCWzBdPT09Im8iJiZCWzFdPT09Im4iP0I9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6QiE9PSJvbmNoYW5nZSJ8fFghPT0iaW5wdXQiJiZYIT09InRleHRhcmVhInx8eiQoUS50eXBlKT9CPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Qj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOlYkLnRlc3QocSkmJihxPUIpOkI9cT0ib25pbnB1dCI6WSYmRyQudGVzdChxKT9xPXEucmVwbGFjZShCJCwiLSQmIikudG9Mb3dlckNhc2UoKTpHPT09bnVsbCYmKEc9dm9pZCAwKSxCPT09Im9uaW5wdXQiJiZLW3E9Ql0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLEtbcV09R319WD09InNlbGVjdCImJihLLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KEsudmFsdWUpJiYoSy52YWx1ZT1YMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe04ucHJvcHMuc2VsZWN0ZWQ9Sy52YWx1ZS5pbmRleE9mKE4ucHJvcHMudmFsdWUpIT0tMX0pKSxLLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKEsudmFsdWU9WDAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihOKXtOLnByb3BzLnNlbGVjdGVkPUsubXVsdGlwbGU/Sy5kZWZhdWx0VmFsdWUuaW5kZXhPZihOLnByb3BzLnZhbHVlKSE9LTE6Sy5kZWZhdWx0VmFsdWU9PU4ucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oSy5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLCJjbGFzc05hbWUiLFUkKSk6US5jbGFzc05hbWUmJihLLmNsYXNzPUsuY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxKLnByb3BzPUt9KCQpLCQuJCR0eXBlb2Y9ajksVzkmJlc5KCQpfTt2YXIgXzk9ZS5fX3I7ZS5fX3I9ZnVuY3Rpb24oJCl7XzkmJl85KCQpLGIzPSQuX19jfTt2YXIgRDk9ZS5kaWZmZWQ7ZS5kaWZmZWQ9ZnVuY3Rpb24oJCl7RDkmJkQ5KCQpO3Zhcntwcm9wczpKLF9fZTpRfT0kO1EhPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlIT09US52YWx1ZSYmKFEudmFsdWU9Si52YWx1ZT09bnVsbD8iIjpKLnZhbHVlKSxiMz1udWxsfTt2YXIgQyQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKCQpe3JldHVybiBiMy5fX25bJC5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazpFLHVzZUNvbnRleHQ6RjAsdXNlRGVidWdWYWx1ZTpGNSx1c2VEZWZlcnJlZFZhbHVlOnc5LHVzZUVmZmVjdDp5LHVzZUlkOlkyLHVzZUltcGVyYXRpdmVIYW5kbGU6TzUsdXNlSW5zZXJ0aW9uRWZmZWN0OmI5LHVzZUxheW91dEVmZmVjdDpJMCx1c2VNZW1vOmsxLHVzZVJlZHVjZXI6bzAsdXNlUmVmOlQsdXNlU3RhdGU6ayx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpUOSx1c2VUcmFuc2l0aW9uOkU5fX19O2Z1bmN0aW9uIE8kKCQpe3JldHVybiB1MS5iaW5kKG51bGwsJCl9ZnVuY3Rpb24gazUoJCl7cmV0dXJuISEkJiYkLiQkdHlwZW9mPT09ajl9ZnVuY3Rpb24gRiQoJCl7cmV0dXJuIGs1KCQpJiYkLnR5cGU9PT1KMX1mdW5jdGlvbiBBJCgkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIE0kKCQpe3JldHVybiBrNSgkKT9rMy5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiBrJCgkKXtyZXR1cm4hISQuX19rJiYoeDAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gVyQoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgXyQ9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJChKKX0sRCQ9ZnVuY3Rpb24oJCxKKXt2YXIgUT1lLmRlYm91bmNlUmVuZGVyaW5nO2UuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oSyl7cmV0dXJuIEsoKX07dmFyIFg9JChKKTtyZXR1cm4gZS5kZWJvdW5jZVJlbmRlcmluZz1RLFh9LFAkPWs1LGY9e3VzZVN0YXRlOmssdXNlSWQ6WTIsdXNlUmVkdWNlcjpvMCx1c2VFZmZlY3Q6eSx1c2VMYXlvdXRFZmZlY3Q6STAsdXNlSW5zZXJ0aW9uRWZmZWN0OmI5LHVzZVRyYW5zaXRpb246RTksdXNlRGVmZXJyZWRWYWx1ZTp3OSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpUOSxzdGFydFRyYW5zaXRpb246STksdXNlUmVmOlQsdXNlSW1wZXJhdGl2ZUhhbmRsZTpPNSx1c2VNZW1vOmsxLHVzZUNhbGxiYWNrOkUsdXNlQ29udGV4dDpGMCx1c2VEZWJ1Z1ZhbHVlOkY1LHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46WiQscmVuZGVyOkwkLGh5ZHJhdGU6SCQsdW5tb3VudENvbXBvbmVudEF0Tm9kZTprJCxjcmVhdGVQb3J0YWw6RTMsY3JlYXRlRWxlbWVudDp1MSxjcmVhdGVDb250ZXh0Ok8wLGNyZWF0ZUZhY3Rvcnk6TyQsY2xvbmVFbGVtZW50Ok0kLGNyZWF0ZVJlZjpFMixGcmFnbWVudDpKMSxpc1ZhbGlkRWxlbWVudDprNSxpc0VsZW1lbnQ6UCQsaXNGcmFnbWVudDpGJCxpc01lbW86QSQsZmluZERPTU5vZGU6VyQsQ29tcG9uZW50OmQxLFB1cmVDb21wb25lbnQ6dzMsbWVtbzppMCxmb3J3YXJkUmVmOkQwLGZsdXNoU3luYzpEJCx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpfJCxTdHJpY3RNb2RlOkoxLFN1c3BlbnNlOk01LFN1c3BlbnNlTGlzdDpiMixsYXp5OkskLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOkMkfTt2YXIgeTI9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0seTM9e3BvcnRyYWl0OiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0In07dmFyIHEyPTM7ZnVuY3Rpb24gUzMoJCl7cmV0dXJuICQ+PTAuOTM/Mzp2b2lkIDB9ZnVuY3Rpb24geDMoJCl7cmV0dXJuICQ9PT0ibGFuZHNjYXBlX2xlZnQifHwkPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gZjAoJCl7cmV0dXJuISEkJiYoeDMoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQpfWZ1bmN0aW9uIEcyKCQpe2lmKCEkfHwkLndpZHRoPD0wfHwkLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgSj14MygkLm9yaWVudGF0aW9uKXx8JC53aWR0aD4kLmhlaWdodCxRPUo/TWF0aC5tYXgoJC53aWR0aCwkLmhlaWdodCk6TWF0aC5taW4oJC53aWR0aCwkLmhlaWdodCksWD1KP01hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpO2lmKFE9PT0kLndpZHRoJiZYPT09JC5oZWlnaHQpcmV0dXJuICQ7cmV0dXJuey4uLiQsd2lkdGg6USxoZWlnaHQ6WH19ZnVuY3Rpb24gVjIoJCl7bGV0IEo9RzIoJCksUT12OSgkPy5vcmllbnRhdGlvbiksWD1NYXRoLmFicyhRKT09PTkwLEs9ISEkJiYkLndpZHRoPiQuaGVpZ2h0LFk9UT09PTE4MHx8WCYmIUs7cmV0dXJue2Rpc3BsYXlDb25maWc6Sixyb3RhdGlvbkRlZ3JlZXM6WT9ROjAsbmVlZHNDc3NSb3RhdGlvbjpZLGlucHV0T3JpZW50YXRpb246WT8kPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIHY5KCQpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIEIyKCQsSixRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6USx5OjEtSn07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtUSx5Okp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtSix5OjEtUX07ZGVmYXVsdDpyZXR1cm57eDpKLHk6UX19fWZ1bmN0aW9uIFI5KCQsSixRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue2R4OlEsZHk6LUp9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57ZHg6LVEsZHk6Sn07Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJue2R4Oi1KLGR5Oi1RfTtkZWZhdWx0OnJldHVybntkeDpKLGR5OlF9fX1mdW5jdGlvbiBqMygkLEope3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEp9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChKKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gSn1jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEp9ZGVmYXVsdDpyZXR1cm4gSn19dmFyIGg5PTE2O2Z1bmN0aW9uIFMyKCQsSixRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiBudWxsO2xldCBYPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MSxLPUo9PT0xPyQqMTY6Sj09PTI/JCpYOiQsWT1NYXRoLm1heCgtMjAwLE1hdGgubWluKDIwMCxLKSk7cmV0dXJuIE1hdGguYWJzKFkpPDAuMDE/bnVsbDpZfWZ1bmN0aW9uIHYzKCQsSixRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAwO2xldCBYPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MTtpZihKPT09MSlyZXR1cm4gJCpoOTtpZihKPT09MilyZXR1cm4gJCpYO3JldHVybiAkfWZ1bmN0aW9uIGc5KCQsSixRKXtpZighSnx8Si53aWR0aDw9MHx8Si5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IFg9Si5vcmllbnRhdGlvbj09PXZvaWQgMCYmJD8ub3JpZW50YXRpb24/ey4uLkosb3JpZW50YXRpb246JC5vcmllbnRhdGlvbn06SjtpZigkJiYkLndpZHRoPT09WC53aWR0aCYmJC5oZWlnaHQ9PT1YLmhlaWdodCYmJC5vcmllbnRhdGlvbj09PVgub3JpZW50YXRpb24pcmV0dXJuIG51bGw7cmV0dXJue2NvbmZpZzpYLG5vdGlmeVBhcmVudDpRIT09ImV4dGVybmFsIn19ZnVuY3Rpb24gZjkoe3N0cmVhbU1vZGU6JCxhdmNjU3VwcG9ydGVkOkosaGFzRXh0ZXJuYWxJbnB1dDpRLGhhc0V4dGVybmFsRnJhbWVzOlh9KXtsZXQgSz0kPT09ImF2Y2MiJiYhSj8ibWpwZWciOiQsWT1LPT09IndlYnJ0YyIscT1LPT09ImF2Y2MiLEc9Sz09PSJtanBlZyImJlg7cmV0dXJue2VmZmVjdGl2ZVN0cmVhbU1vZGU6Syx1c2VXZWJSdGM6WSx1c2VBdmNjOnEsZXh0ZXJuYWxJbnB1dDpRLGV4dGVybmFsTWpwZWc6RyxvcGVuRGlyZWN0Q29udHJvbFNvY2tldDohUSxvcGVuRGlyZWN0TWpwZWc6Sz09PSJtanBlZyImJiFHfX12YXIgVCQ9e1sxXToiZGVzY3JpcHRpb24iLFsyXToia2V5ZnJhbWUiLFszXToiZGVsdGEiLFs0XToic2VlZCJ9O2NsYXNzIFc1e2J1ZmZlcj1uZXcgVWludDhBcnJheSg2NTUzNik7bGVuPTA7c3RhcnQ9MDthcHBlbmQoJCl7aWYodGhpcy5sZW4rJC5sZW5ndGg+dGhpcy5idWZmZXIubGVuZ3RoKXtpZih0aGlzLnN0YXJ0PjApdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pLHRoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MDtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2xldCBKPXRoaXMuYnVmZmVyLmxlbmd0aDt3aGlsZShKPHRoaXMubGVuKyQubGVuZ3RoKUoqPTI7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoSik7US5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkoMCx0aGlzLmxlbikpLHRoaXMuYnVmZmVyPVF9fXRoaXMuYnVmZmVyLnNldCgkLHRoaXMubGVuKSx0aGlzLmxlbis9JC5sZW5ndGh9cHVzaCgkKXtpZigkLmxlbmd0aD4wKXRoaXMuYXBwZW5kKCQpO2xldCBKPVtdLFE9dGhpcy5idWZmZXI7d2hpbGUodGhpcy5sZW4tdGhpcy5zdGFydD49NCl7bGV0IFg9dGhpcy5zdGFydCxLPShRW1hdPDwyNHxRW1grMV08PDE2fFFbWCsyXTw8OHxRW1grM10pPj4+MDtpZih0aGlzLmxlbi1YLTQ8SylicmVhaztpZihLPDEpe3RoaXMuc3RhcnQrPTQ7Y29udGludWV9bGV0IFk9UVtYKzRdLHE9VCRbWV07aWYocSlKLnB1c2goe3R5cGU6cSxwYXlsb2FkOlEuc2xpY2UoWCs1LFgrNCtLKX0pO3RoaXMuc3RhcnQrPTQrS31pZih0aGlzLnN0YXJ0PjApe2lmKHRoaXMuc3RhcnQ8dGhpcy5sZW4pdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pO3RoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MH1yZXR1cm4gSn1yZXNldCgpe3RoaXMubGVuPTAsdGhpcy5zdGFydD0wfX1mdW5jdGlvbiBSMygkKXtpZigkLmxlbmd0aDw0KXJldHVybiJhdmMxLjQyRTAxRSI7bGV0IEo9KFEpPT5RLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIik7cmV0dXJuImF2YzEuIitKKCRbMV0pK0ooJFsyXSkrSigkWzNdKX1mdW5jdGlvbiBuMCgpe3JldHVybiB0eXBlb2YgZ2xvYmFsVGhpczwidSImJnR5cGVvZiBnbG9iYWxUaGlzLlZpZGVvRGVjb2RlcjwidSJ9dmFyIEkkPTEwMDAsdyQ9MTY2Njc7ZnVuY3Rpb24gaDMoe3VybDokLGVuYWJsZWQ6SixjYW52YXNSZWY6USxvbkZpcnN0RnJhbWU6WCxvbkZyYW1lOkssb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30pe2xldCBCPVQoe29uRmlyc3RGcmFtZTpYLG9uRnJhbWU6SyxvbkRlY29kZWRGcmFtZTpZLG9uRXJyb3I6cSxvbkRlY29kZXJFcnJvcjpHfSk7Qi5jdXJyZW50PXtvbkZpcnN0RnJhbWU6WCxvbkZyYW1lOkssb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30seSgoKT0+e2lmKCFKfHwhJHx8IW4wKCkpcmV0dXJuO2xldCBOPW5ldyBBYm9ydENvbnRyb2xsZXIsej1uZXcgVzUsVj0hMSxIPSExLEM9ITEsQT0wLEw9bnVsbCxVPW51bGwsRj0oKT0+IVYmJiFOLnNpZ25hbC5hYm9ydGVkLFc9KHIpPT57aWYoQi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKUIuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgQi5jdXJyZW50Lm9uRXJyb3I/LihyKX0sdz0ocixvLGEsTDEpPT57aWYoIUYoKSlyZXR1cm47bGV0IGw9US5jdXJyZW50O2lmKCFsKXJldHVybjtpZihsLndpZHRoIT09b3x8bC5oZWlnaHQhPT1hKWwud2lkdGg9byxsLmhlaWdodD1hO2xldCBtPWwuZ2V0Q29udGV4dCgiMmQiKTtpZighbSlyZXR1cm47aWYobS5kcmF3SW1hZ2UociwwLDAsbyxhKSxCLmN1cnJlbnQub25GcmFtZT8uKCksTDEmJiFDKUM9ITAsQi5jdXJyZW50Lm9uRGVjb2RlZEZyYW1lPy4oKTtpZighSClIPSEwLEIuY3VycmVudC5vbkZpcnN0RnJhbWU/LigpfSxQPSgpPT5uZXcgVmlkZW9EZWNvZGVyKHtvdXRwdXQ6KHIpPT57dHJ5e2lmKEYoKSl3KHIsci5kaXNwbGF5V2lkdGgsci5kaXNwbGF5SGVpZ2h0LCEwKX1maW5hbGx5e3IuY2xvc2UoKX19LGVycm9yOihyKT0+VyhgZGVjb2RlcjogJHtyLm1lc3NhZ2V9YCl9KSx4PWFzeW5jKHIpPT57bGV0IG89YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEJsb2IoW3JdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTt0cnl7aWYoRigpKXcobyxvLndpZHRoLG8uaGVpZ2h0LCExKX1maW5hbGx5e28uY2xvc2UoKX19LEQ9KHIpPT57aWYoIVV8fFUuc3RhdGU9PT0iY2xvc2VkIilVPVAoKTt0cnl7VS5jb25maWd1cmUoe2NvZGVjOlIzKHIpLGRlc2NyaXB0aW9uOnIsb3B0aW1pemVGb3I6ImxhdGVuY3kiLGhhcmR3YXJlQWNjZWxlcmF0aW9uOiJwcmVmZXItaGFyZHdhcmUifSl9Y2F0Y2gobyl7VyhgY29uZmlnOiAke28ubWVzc2FnZX1gKX19LG49KHIsbyk9PntpZihVPy5zdGF0ZSE9PSJjb25maWd1cmVkIilyZXR1cm47dHJ5e1UuZGVjb2RlKG5ldyBFbmNvZGVkVmlkZW9DaHVuayh7dHlwZTpyPT09ImtleWZyYW1lIj8ia2V5IjoiZGVsdGEiLHRpbWVzdGFtcDpBLGRhdGE6b30pKSxBKz13JH1jYXRjaHt9fSxSPShyLG8pPT57c3dpdGNoKHIpe2Nhc2Uic2VlZCI6eChvKS5jYXRjaCgoKT0+e30pO3JldHVybjtjYXNlImRlc2NyaXB0aW9uIjpEKG8pO3JldHVybjtjYXNlImtleWZyYW1lIjpjYXNlImRlbHRhIjpuKHIsbyk7cmV0dXJufX0sZD0oKT0+e2lmKCFGKCl8fEwpcmV0dXJuO0w9c2V0VGltZW91dCgoKT0+e0w9bnVsbCxpKCl9LEkkKX0saT1hc3luYygpPT57ei5yZXNldCgpO3RyeXtsZXQgbz0oYXdhaXQgZmV0Y2goYCR7JH0vc3RyZWFtLmF2Y2NgLHtzaWduYWw6Ti5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIW8pcmV0dXJuO2Zvcig7Oyl7bGV0e2RvbmU6YSx2YWx1ZTpMMX09YXdhaXQgby5yZWFkKCk7aWYoYSlicmVhaztpZighTDEpY29udGludWU7Zm9yKGxldCBsIG9mIHoucHVzaChMMSkpUihsLnR5cGUsbC5wYXlsb2FkKX19Y2F0Y2h7fWZpbmFsbHl7aWYoRigpKWQoKX19O3JldHVybiBpKCksKCk9PntpZihWPSEwLEwpY2xlYXJUaW1lb3V0KEwpO2lmKE4uYWJvcnQoKSx6LnJlc2V0KCksVSYmVS5zdGF0ZSE9PSJjbG9zZWQiKXRyeXtVLmNsb3NlKCl9Y2F0Y2h7fVU9bnVsbH19LFskLEosUV0pfWZ1bmN0aW9uIG05KCQsSil7bGV0IFE9MCxYPTAsSz0oKT0+e2xldHt2aWRlb1dpZHRoOlksdmlkZW9IZWlnaHQ6cX09JDtpZihZPD0wfHxxPD0wfHxZPT09USYmcT09PVgpcmV0dXJuO1E9WSxYPXEsSih7d2lkdGg6WSxoZWlnaHQ6cX0pfTtyZXR1cm4gJC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsSyksJC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEspLEsoKSx7Y2hlY2s6SyxkaXNjb25uZWN0KCl7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsSyksJC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEspfX19dmFyIEUkPTA7ZnVuY3Rpb24gWigkLEosUSxYLEssWSl7Snx8KEo9e30pO3ZhciBxLEcsQj1KO2lmKCJyZWYiaW4gQilmb3IoRyBpbiBCPXt9LEopRz09InJlZiI/cT1KW0ddOkJbR109SltHXTt2YXIgTj17dHlwZTokLHByb3BzOkIsa2V5OlEscmVmOnEsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tRSQsX19pOi0xLF9fdTowLF9fc291cmNlOkssX19zZWxmOll9O2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYocT0kLmRlZmF1bHRQcm9wcykpZm9yKEcgaW4gcSlCW0ddPT09dm9pZCAwJiYoQltHXT1xW0ddKTtyZXR1cm4gZS52bm9kZSYmZS52bm9kZShOKSxOfXZhciBwOT1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLGIkPTEuMDA0LHkkPTMsUyQ9NCx4JD01LGokPTEwLHYkPTExO2Z1bmN0aW9uIF81KHt1cmw6JCx3c1VybDpKLHN0eWxlOlEsaW1hZ2VTdHlsZTpYLGNsYXNzTmFtZTpLLG9uSG9tZVByZXNzOlksb25TdHJlYW1Ub3VjaDpxLG9uU3RyZWFtTXVsdGlUb3VjaDpHLG9uU3RyZWFtQnV0dG9uOkIsb25TdHJlYW1EaWdpdGFsQ3Jvd246TixvblN0cmVhbVNjcm9sbDp6LGVuYWJsZURpZ2l0YWxDcm93bjpWLHN1YnNjcmliZUZyYW1lOkgsc3RyZWFtRnJhbWU6QyxzdHJlYW1Db25maWc6QSxvblNjcmVlbkNvbmZpZ0NoYW5nZTpMLGhpZGVDb250cm9sczpVLG9uU3RyZWFtaW5nQ2hhbmdlOkYsY29ubmVjdGlvblF1YWxpdHk6VyxzdHJlYW1Nb2RlOnc9ImF2Y2MiLHdlYlJ0Y1N0cmVhbTpQLG9uV2ViUnRjRnJhbWU6eCxzdHJlYW1FcnJvcjpELG9uQXZjY0Vycm9yOm4sb25BdmNjRGVjb2RlZEZyYW1lOlJ9KXtsZXR7dXNlV2ViUnRjOmQsdXNlQXZjYzppLGV4dGVybmFsSW5wdXQ6cixleHRlcm5hbE1qcGVnOm8sb3BlbkRpcmVjdENvbnRyb2xTb2NrZXQ6YSxvcGVuRGlyZWN0TWpwZWc6TDF9PWY5KHtzdHJlYW1Nb2RlOncsYXZjY1N1cHBvcnRlZDpuMCgpLGhhc0V4dGVybmFsSW5wdXQ6ISFxLGhhc0V4dGVybmFsRnJhbWVzOiEhSH0pLGw9VChudWxsKSxtPVQobnVsbCksWDE9VChudWxsKSxaMT1UKG51bGwpLEgxPVQobnVsbCksdD1UKG51bGwpLFExPVQobnVsbCksW3ExLGpdPWsoITEpLFtwLF9dPWsobnVsbCksW2gsZ109ayhudWxsKSx2PVQobnVsbCksWTE9VCghMSksRzE9VChMKTtHMS5jdXJyZW50PUw7bGV0IEUxPVQobnVsbCksW1cxLFQxXT1rKG51bGwpO3koKCk9PntsZXQgTz1FMS5jdXJyZW50O2lmKCFPfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgTT1uZXcgUmVzaXplT2JzZXJ2ZXIoKFMpPT57bGV0IGI9U1swXT8uY29udGVudFJlY3Q7aWYoYilUMSh7d2lkdGg6Yi53aWR0aCxoZWlnaHQ6Yi5oZWlnaHR9KX0pO3JldHVybiBNLm9ic2VydmUoTyksKCk9Pk0uZGlzY29ubmVjdCgpfSxbXSk7bGV0W18xLFIxXT1rKDApLE0xPVQoMCksW3IxLGoxXT1rKCExKSxGMT1FKChPLE09InJlcG9ydGVkIik9PntpZihNPT09Im1lZGlhIiYmWTEuY3VycmVudClyZXR1cm47aWYoTSE9PSJtZWRpYSImJk8mJk8ud2lkdGg+MCYmTy5oZWlnaHQ+MClZMS5jdXJyZW50PSEwO2xldCBTPWc5KHYuY3VycmVudCxPLE0pO2lmKCFTKXJldHVybjtpZih2LmN1cnJlbnQ9Uy5jb25maWcsZyhTLmNvbmZpZyksUy5ub3RpZnlQYXJlbnQpRzEuY3VycmVudD8uKFMuY29uZmlnKX0sW10pO3koKCk9PntpZighZClyZXR1cm47aWYoRClqKCExKSxfKEQpO2Vsc2UgXyhudWxsKX0sW0QsZF0pO2xldCBOMT1UKG51bGwpO3koKCk9PntpZihXPT09InBvb3IiKXtpZihqMSghMCksTjEuY3VycmVudCljbGVhclRpbWVvdXQoTjEuY3VycmVudCk7TjEuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57ajEoITEpLE4xLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZihqMSghMSksTjEuY3VycmVudCljbGVhclRpbWVvdXQoTjEuY3VycmVudCksTjEuY3VycmVudD1udWxsO3JldHVybigpPT57aWYoTjEuY3VycmVudCljbGVhclRpbWVvdXQoTjEuY3VycmVudCl9fSxbV10pO2xldCBhMT1gJHskfS9zdHJlYW0ubWpwZWdgO3koKCk9PntpZighZClyZXR1cm47bGV0IE89WDEuY3VycmVudDtpZighTylyZXR1cm47bGV0IE09ITEsUz0hMSxiPTAsYz1udWxsLCQxPSgpPT57aWYoU3x8TSlyZXR1cm47Yz8uY2hlY2soKSxNPSEwLHg/LigpLGooITApLF8obnVsbCl9LFUxPSgpPT57aWYoUylyZXR1cm47Yz8uY2hlY2soKSxlMS5jdXJyZW50PURhdGUubm93KCksTTEuY3VycmVudCsrLCQxKCksaighMCksYj1PLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soVTEpfSxBMT0oKT0+e2lmKFMpcmV0dXJuO2M/LmNoZWNrKCksZTEuY3VycmVudD1EYXRlLm5vdygpLCQxKCksaighMCl9O2lmKE8uc3JjT2JqZWN0PVA/P251bGwsUCl7aWYoYz1tOShPLChaMCk9PntGMShaMCwibWVkaWEiKX0pLGooITEpLE8uYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsJDEse29uY2U6ITB9KSx0eXBlb2YgTy5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrPT09ImZ1bmN0aW9uIiliPU8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhVMSk7ZWxzZSBPLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLEExKTtPLnBsYXkoKS5jYXRjaCgoKT0+e30pfWVsc2UgaighMSk7cmV0dXJuKCk9PntpZihTPSEwLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsJDEpLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZXVwZGF0ZSIsQTEpLGM/LmRpc2Nvbm5lY3QoKSxiJiZ0eXBlb2YgTy5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2s9PT0iZnVuY3Rpb24iKU8uY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrKGIpO08uc3JjT2JqZWN0PW51bGx9fSxbZCxQLHgsRjFdKSx5KCgpPT57WTEuY3VycmVudD0hMSx2LmN1cnJlbnQ9bnVsbCxnKG51bGwpfSxbJCxKXSk7bGV0IGYxPVQoRik7ZjEuY3VycmVudD1GLHkoKCk9PntmMS5jdXJyZW50Py4ocTEpfSxbcTFdKSx5KCgpPT57aWYoQSlGMShBLCJleHRlcm5hbCIpfSxbQSxGMSwkXSk7bGV0IGkxPVQoITEpO2kxLmN1cnJlbnQ9cTE7bGV0IHQxPVQobnVsbCkscTA9VChudWxsKTt5KCgpPT57aWYoIW98fCFIKXJldHVybjtsZXQgTT1zZXRUaW1lb3V0KCgpPT57aWYoIWkxLmN1cnJlbnQpXygiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLFM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGMoKXtsZXQgJDE9dDEuY3VycmVudDtpZigkMSl7dDEuY3VycmVudD1udWxsO2xldCBVMT1aMS5jdXJyZW50O2lmKFUxKXtpZihxMC5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwocTAuY3VycmVudCk7cTAuY3VycmVudD0kMSxVMS5zcmM9JDEsTTEuY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTCgkMSl9Uz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYyl9KSxiPUgoKGMpPT57aWYoZTEuY3VycmVudD1EYXRlLm5vdygpLHQxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTCh0MS5jdXJyZW50KTtpZih0MS5jdXJyZW50PWMsIWkxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE0pLGooITApLF8obnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChNKSxjYW5jZWxBbmltYXRpb25GcmFtZShTKSxiPy4oKSx0MS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwodDEuY3VycmVudCksdDEuY3VycmVudD1udWxsO2lmKHEwLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChxMC5jdXJyZW50KSxxMC5jdXJyZW50PW51bGx9fSxbbyxIXSk7bGV0IEcwPUUoKCk9PntlMS5jdXJyZW50PURhdGUubm93KCksaighMCksXyhudWxsKX0sW10pLGwwPUUoKCk9PntpZihNMS5jdXJyZW50KyssZTEuY3VycmVudD1EYXRlLm5vdygpLCFpMS5jdXJyZW50KWooITApLF8obnVsbCl9LFtdKTtoMyh7dXJsOiQsZW5hYmxlZDppLGNhbnZhc1JlZjptLG9uRmlyc3RGcmFtZTpHMCxvbkZyYW1lOmwwLG9uRGVjb2RlZEZyYW1lOlIsb25FcnJvcjpfLG9uRGVjb2RlckVycm9yOm59KTtsZXQgdjE9RSgoTyk9PntsZXQgTT1WMih2LmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sUz1CMihNLE8ueCxPLnkpLGI9Ty5lZGdlPT09dm9pZCAwP3ZvaWQgMDpqMyhNLE8uZWRnZSksYz1iPT09dm9pZCAwP3t0eXBlOk8udHlwZSwuLi5TfTp7dHlwZTpPLnR5cGUsLi4uUyxlZGdlOmJ9O2lmKHIpe3E/LihjKTtyZXR1cm59bGV0ICQxPVExLmN1cnJlbnQ7aWYoISQxfHwkMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBVMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoYykpLEExPW5ldyBVaW50OEFycmF5KDErVTEubGVuZ3RoKTtBMVswXT15JCxBMS5zZXQoVTEsMSksJDEuc2VuZChBMSl9LFtyLHFdKSxWMD1FKChPKT0+e2lmKHIpe0I/LihPKTtyZXR1cm59bGV0IE09UTEuY3VycmVudDtpZighTXx8TS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBTPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7YnV0dG9uOk99KSksYj1uZXcgVWludDhBcnJheSgxK1MubGVuZ3RoKTtiWzBdPVMkLGIuc2V0KFMsMSksTS5zZW5kKGIpfSxbcixCXSksSjA9RSgoTyk9PntpZighTnVtYmVyLmlzRmluaXRlKE8pfHxPPT09MClyZXR1cm47aWYocil7Tj8uKE8pO3JldHVybn1sZXQgTT1RMS5jdXJyZW50O2lmKCFNfHxNLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IFM9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtkZWx0YTpPfSkpLGI9bmV3IFVpbnQ4QXJyYXkoMStTLmxlbmd0aCk7YlswXT1qJCxiLnNldChTLDEpLE0uc2VuZChiKX0sW3IsTl0pLFAwPUUoKE8sTSxTLGIpPT57aWYoIU51bWJlci5pc0Zpbml0ZShPKXx8IU51bWJlci5pc0Zpbml0ZShNKXx8Tz09PTAmJk09PT0wKXJldHVybjtsZXQgYz1WMih2LmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sJDE9UjkoYyxPLE0pLFUxPUIyKGMsUyxiKSxBMT17ZHg6JDEuZHgsZHk6JDEuZHkseDpVMS54LHk6VTEueX07aWYocil7ej8uKEExKTtyZXR1cm59bGV0IG8xPVExLmN1cnJlbnQ7aWYoIW8xfHxvMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBaMD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQTEpKSxjMD1uZXcgVWludDhBcnJheSgxK1owLmxlbmd0aCk7YzBbMF09diQsYzAuc2V0KFowLDEpLG8xLnNlbmQoYzApfSxbcix6XSksbTE9RSgoTyk9PntsZXQgTT1WMih2LmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sUz1CMihNLE8ueDEsTy55MSksYj1CMihNLE8ueDIsTy55MiksYz17dHlwZTpPLnR5cGUseDE6Uy54LHkxOlMueSx4MjpiLngseTI6Yi55fTtpZihyKXtHPy4oYyk7cmV0dXJufWxldCAkMT1RMS5jdXJyZW50O2lmKCEkMXx8JDEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGMpKSxBMT1uZXcgVWludDhBcnJheSgxK1UxLmxlbmd0aCk7QTFbMF09eCQsQTEuc2V0KFUxLDEpLCQxLnNlbmQoQTEpfSxbcixHXSk7eSgoKT0+e2lmKCFhJiYhTDEmJiFpKXJldHVybjtsZXQgTz1udWxsO2lmKGEpe2xldCAkMT1KPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIjtPPW5ldyBXZWJTb2NrZXQoJDEpLE8uYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFExLmN1cnJlbnQ9TyxPLm9ubWVzc2FnZT0oVTEpPT57aWYoIShVMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgQTE9bmV3IFVpbnQ4QXJyYXkoVTEuZGF0YSk7aWYoQTEubGVuZ3RoPDF8fEExWzBdIT09MTMwKXJldHVybjt0cnl7RjEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoQTEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sTy5vbm9wZW49KCk9Pl8obnVsbCksTy5vbmNsb3NlPSgpPT5qKCExKSxPLm9uZXJyb3I9KCk9PntfKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSxqKCExKX19bGV0IE09aXx8TDE/c2V0SW50ZXJ2YWwoKCk9PntSMShNMS5jdXJyZW50KSxNMS5jdXJyZW50PTB9LDEwMDApOm51bGwsUz1MMT9uZXcgQWJvcnRDb250cm9sbGVyOm51bGwsYj0hMSxjPUwxP3NldFRpbWVvdXQoKCk9PntpZighYilfKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk6bnVsbDtpZihMMSYmUykoYXN5bmMoKT0+e3RyeXtsZXQgVTE9KGF3YWl0IGZldGNoKGExLHtzaWduYWw6Uy5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIVUxKXJldHVybjtsZXQgQTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOm8xLHZhbHVlOlowfT1hd2FpdCBVMS5yZWFkKCk7aWYobzEpYnJlYWs7aWYoWjApZm9yKGxldCBjMD0wO2MwPD1aMC5sZW5ndGgtQTEubGVuZ3RoO2MwKyspe2xldCBiOD0hMDtmb3IobGV0IFY1PTA7VjU8QTEubGVuZ3RoO1Y1KyspaWYoWjBbYzArVjVdIT09QTFbVjVdKXtiOD0hMTticmVha31pZihiOCl7aWYoTTEuY3VycmVudCsrLCFiKXtpZihiPSEwLGMpY2xlYXJUaW1lb3V0KGMpO2ooITApLF8obnVsbCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoUz8uYWJvcnQoKSxNKWNsZWFySW50ZXJ2YWwoTSk7aWYoYyljbGVhclRpbWVvdXQoYyk7aWYoTz8uY2xvc2UoKSxRMS5jdXJyZW50PT09TylRMS5jdXJyZW50PW51bGx9fSxbYSxMMSxhMSxGMSwkLGksSl0pLHkoKCk9PntpZighZClyZXR1cm47bGV0IE89c2V0SW50ZXJ2YWwoKCk9PntSMShNMS5jdXJyZW50KSxNMS5jdXJyZW50PTA7bGV0IE09ZTEuY3VycmVudDtpZighZG9jdW1lbnQuaGlkZGVuJiZNJiZEYXRlLm5vdygpLU0+MzAwMClqKCExKX0sMTAwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoTyl9LFtkXSk7bGV0IGUxPVQoMCk7eSgoKT0+e2lmKCFvKXJldHVybjtsZXQgTz0yMDAwLE09KCk9PntsZXQgYz1lMS5jdXJyZW50O2lmKCFjfHwhaTEuY3VycmVudClyZXR1cm47aWYoRGF0ZS5ub3coKS1jPk8paighMSl9LFM9c2V0SW50ZXJ2YWwoKCk9PntSMShNMS5jdXJyZW50KSxNMS5jdXJyZW50PTAsTSgpfSwxMDAwKSxiPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilNKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixiKSwoKT0+e2NsZWFySW50ZXJ2YWwoUyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsYil9fSxbb10pO2xldCBSMD1FKCgpPT57aWYoZClyZXR1cm4gWDEuY3VycmVudDtpZihpKXJldHVybiBtLmN1cnJlbnQ7cmV0dXJuIG8/WjEuY3VycmVudDpsLmN1cnJlbnR9LFtvLGksZF0pLHkxPUUoKCk9PntyZXR1cm4gSDEuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P1IwKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbUjBdKSxCMD1FKChPLE0pPT57bGV0IFM9eTEoKTtpZighUylyZXR1cm47bGV0IGI9KE0uY2xpZW50WC1TLmxlZnQpL1Mud2lkdGgsYz0oTS5jbGllbnRZLVMudG9wKS9TLmhlaWdodDt2MSh7dHlwZTpPLHg6Yix5OmN9KX0sW3kxLHYxXSksSDA9RSgoTyxNKT0+e2xldCBiPXkxKCk/LmhlaWdodHx8MSxjPVMyKE8sTSxiKTtpZihjPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gSjAoYyksITB9LFt5MSxKMF0pLEQxPVQoITEpLHcxPVQoITEpLFEwPVQoITEpLE4wPVQoe2R4OjAsZHk6MH0pLFUwPVQoITEpLFtrMCxLMV09ayghMSksST1UKHt4OjAuNSx5OjAuNX0pLFt1LHNdPWsobnVsbCk7eSgoKT0+e2xldCBPPShTKT0+e2lmKFMua2V5PT09IkFsdCIpSzEoITApfSxNPShTKT0+e2lmKFMua2V5PT09IkFsdCIpe2lmKEsxKCExKSwhdzEuY3VycmVudClzKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixPKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLE0pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsTSl9fSxbXSkseSgoKT0+e2lmKGswJiYhdzEuY3VycmVudCl7bGV0IE89SS5jdXJyZW50O3Moe3gxOk8ueCx5MTpPLnkseDI6MS1PLngseTI6MS1PLnl9KX1lbHNlIGlmKCFrMCYmIXcxLmN1cnJlbnQpcyhudWxsKX0sW2swXSk7bGV0IEMxPVQobnVsbCksVjE9VCghMSksQjE9VCgwKSxoMT1FKChPLE0pPT57VjEuY3VycmVudD0hMDtsZXQgUz1DMS5jdXJyZW50O2lmKFMpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksQjEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntTLnN0eWxlLmxlZnQ9YCR7TyoxMDB9JWAsUy5zdHlsZS50b3A9YCR7TSoxMDB9JWAsUy5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLGwxPUUoKE8sTSk9PntpZighVjEuY3VycmVudClyZXR1cm47bGV0IFM9QzEuY3VycmVudDtpZihTKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIxLmN1cnJlbnQpLEIxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Uy5zdHlsZS5sZWZ0PWAke08qMTAwfSVgLFMuc3R5bGUudG9wPWAke00qMTAwfSVgfSl9LFtdKSxwMT1FKCgpPT57VjEuY3VycmVudD0hMTtsZXQgTz1DMS5jdXJyZW50O2lmKE8pY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksTy5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLEMwPUUoKE8pPT57aWYoVjEuY3VycmVudHx8dzEuY3VycmVudClyZXR1cm4hMTtsZXQgTT15MSgpO2lmKCFNKXJldHVybiExO2xldCBTPXYzKE8uZGVsdGFYLE8uZGVsdGFNb2RlLE0ud2lkdGgpLGI9djMoTy5kZWx0YVksTy5kZWx0YU1vZGUsTS5oZWlnaHQpO2lmKFM9PT0wJiZiPT09MClyZXR1cm4hMTtsZXQgYz1NYXRoLm1pbihNYXRoLm1heCgoTy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCwwKSwxKSwkMT1NYXRoLm1pbihNYXRoLm1heCgoTy5jbGllbnRZLU0udG9wKS9NLmhlaWdodCwwKSwxKTtyZXR1cm4gUDAoUy9NLndpZHRoLGIvTS5oZWlnaHQsYywkMSksITB9LFt5MSxQMF0pO3koKCk9PntsZXQgTz10LmN1cnJlbnQ7aWYoIU8pcmV0dXJuO2xldCBNPShTKT0+e2lmKCEoVj9IMChTLmRlbHRhWSxTLmRlbHRhTW9kZSk6QzAoUykpKXJldHVybjtTLnByZXZlbnREZWZhdWx0KCksUy5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIE8uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLE0se3Bhc3NpdmU6ITF9KSwoKT0+Ty5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsTSl9LFtWLEgwLEMwXSk7bGV0IG4xPVQoMCksVzA9VChudWxsKSx6MD1FKCgpPT57bGV0IE89RGF0ZS5ub3coKSxNPU8tbjEuY3VycmVudDtpZihuMS5jdXJyZW50PU8sTTwzMDApe2lmKFcwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFcwLmN1cnJlbnQpLFcwLmN1cnJlbnQ9bnVsbDtpZihZKVkoKTtlbHNlIFYwKCJhcHBfc3dpdGNoZXIiKX1lbHNlIFcwLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2lmKFkpWSgpO2Vsc2UgVjAoImhvbWUiKTtXMC5jdXJyZW50PW51bGx9LDMwMCl9LFtWMCxZXSksUDE9VjIoaCksUzA9UDEuZGlzcGxheUNvbmZpZyxfMD0oKCk9PntpZighUzB8fCFXMSlyZXR1cm4gbnVsbDtpZihXMS53aWR0aD09PTB8fFcxLmhlaWdodD09PTApcmV0dXJuIG51bGw7bGV0IE89TWF0aC5taW4oVzEud2lkdGgvUzAud2lkdGgsVzEuaGVpZ2h0L1MwLmhlaWdodCk7cmV0dXJue3dpZHRoOlMwLndpZHRoKk8saGVpZ2h0OlMwLmhlaWdodCpPfX0pKCksUTI9UDEucm90YXRpb25EZWdyZWVzLEQyPVAxLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKFEyKT09PTkwLEIzPVgsZDA9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6RDImJl8wP2Ake18wLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpEMiYmXzA/YCR7XzAud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7UTI9PT0wPyIiOmAgcm90YXRlKCR7UTJ9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpwOSxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlgsLi4uUTI9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxOMz17Li4uZDAsdHJhbnNmb3JtOmAke2QwLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7YiR9KWB9O3JldHVybiBaKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uVT97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uUX0sY2xhc3NOYW1lOkssY2hpbGRyZW46W1ooImRpdiIse3JlZjpFMSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpaKCJkaXYiLHtyZWY6SDEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6XzA/YCR7XzAud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6XzA/YCR7XzAuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOkIzPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6QjM/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbZD9aKCJ2aWRlbyIse3JlZjpYMSxtdXRlZDohMCxwbGF5c0lubGluZTohMCxhdXRvUGxheTohMCxzdHlsZTpkMH0pOmk/WigiY2FudmFzIix7cmVmOm0sc3R5bGU6TjN9KTpaKCJpbWciLHtyZWY6bCxzcmM6bz92b2lkIDA6YTEsZHJhZ2dhYmxlOiExLG9uTG9hZDooTyk9PntsZXQgTT1PLmN1cnJlbnRUYXJnZXQ7aWYoTS5uYXR1cmFsV2lkdGg+MCYmTS5uYXR1cmFsSGVpZ2h0PjApRjEoe3dpZHRoOk0ubmF0dXJhbFdpZHRoLGhlaWdodDpNLm5hdHVyYWxIZWlnaHR9LCJtZWRpYSIpfSxzdHlsZTpvP3tkaXNwbGF5OiJub25lIn06ZDB9KSxvJiZaKCJpbWciLHtyZWY6WjEsZHJhZ2dhYmxlOiExLG9uTG9hZDooTyk9PntsZXQgTT1PLmN1cnJlbnRUYXJnZXQ7aWYoTS5uYXR1cmFsV2lkdGg+MCYmTS5uYXR1cmFsSGVpZ2h0PjApRjEoe3dpZHRoOk0ubmF0dXJhbFdpZHRoLGhlaWdodDpNLm5hdHVyYWxIZWlnaHR9LCJtZWRpYSIpfSxzdHlsZTpkMH0pLFooImRpdiIse3JlZjp0LHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsY3Vyc29yOnA5LHRvdWNoQWN0aW9uOiJub25lIn0sb25Nb3VzZURvd246KE8pPT57Ty5wcmV2ZW50RGVmYXVsdCgpO2xldCBNPXkxKCk7aWYoIU0pcmV0dXJuO2xldCBTPShPLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLGI9KE8uY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7aWYoTy5hbHRLZXkpe3cxLmN1cnJlbnQ9ITAsUTAuY3VycmVudD1PLnNoaWZ0S2V5O2xldCAkMT17eDE6Uyx5MTpiLHgyOjEtUyx5MjoxLWJ9O04wLmN1cnJlbnQ9e2R4OjEtUy1TLGR5OjEtYi1ifSxzKCQxKSxtMSh7dHlwZToiYmVnaW4iLC4uLiQxfSk7cmV0dXJufWgxKFMsYik7bGV0IGM9UzMoYik7aWYoYyE9PXZvaWQgMClEMS5jdXJyZW50PSEwLHYxKHt0eXBlOiJiZWdpbiIseDpTLHk6YixlZGdlOmN9KTtlbHNlIEQxLmN1cnJlbnQ9ITEsQjAoImJlZ2luIixPKX0sb25Nb3VzZU1vdmU6KE8pPT57bGV0IE09eTEoKTtpZighTSlyZXR1cm47bGV0IFM9KE8uY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsYj0oTy5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihJLmN1cnJlbnQ9e3g6Uyx5OmJ9LE8uYnV0dG9ucz09PTApe2lmKE8uYWx0S2V5KXMoe3gxOlMseTE6Yix4MjoxLVMseTI6MS1ifSk7cmV0dXJufWlmKHcxLmN1cnJlbnQpe2xldCBjO2lmKFEwLmN1cnJlbnQpe2xldCAkMT1OMC5jdXJyZW50O2M9e3gxOlMseTE6Yix4MjpTKyQxLmR4LHkyOmIrJDEuZHl9fWVsc2UgYz17eDE6Uyx5MTpiLHgyOjEtUyx5MjoxLWJ9O3MoYyksbTEoe3R5cGU6Im1vdmUiLC4uLmN9KTtyZXR1cm59aWYobDEoUyxiKSxEMS5jdXJyZW50KXYxKHt0eXBlOiJtb3ZlIix4OlMseTpiLGVkZ2U6cTJ9KTtlbHNlIEIwKCJtb3ZlIixPKX0sb25Nb3VzZVVwOihPKT0+e2lmKHcxLmN1cnJlbnQpe2xldCBNPXkxKCk7aWYoTSl7bGV0IFM9KE8uY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsYj0oTy5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihRMC5jdXJyZW50KXtsZXQgYz1OMC5jdXJyZW50O20xKHt0eXBlOiJlbmQiLHgxOlMseTE6Yix4MjpTK2MuZHgseTI6YitjLmR5fSl9ZWxzZSBtMSh7dHlwZToiZW5kIix4MTpTLHkxOmIseDI6MS1TLHkyOjEtYn0pfWlmKHcxLmN1cnJlbnQ9ITEsIU8uYWx0S2V5KXMobnVsbCk7cmV0dXJufWlmKHAxKCksRDEuY3VycmVudCl7bGV0IE09eTEoKTtpZihNKXtsZXQgUz0oTy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxiPShPLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O3YxKHt0eXBlOiJlbmQiLHg6Uyx5OmIsZWRnZTpxMn0pfUQxLmN1cnJlbnQ9ITE7cmV0dXJufUIwKCJlbmQiLE8pfSxvbk1vdXNlTGVhdmU6KE8pPT57aWYodzEuY3VycmVudCl7aWYodSltMSh7dHlwZToiZW5kIiwuLi51fSk7dzEuY3VycmVudD0hMSxzKG51bGwpO3JldHVybn1pZihwMSgpLEQxLmN1cnJlbnQpe2xldCBNPXkxKCk7aWYoTSl7bGV0IFM9KE8uY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsYj0oTy5jbGllbnRZLU0udG9wKS9NLmhlaWdodDt2MSh7dHlwZToiZW5kIix4OlMseTpiLGVkZ2U6cTJ9KX1EMS5jdXJyZW50PSExO3JldHVybn1pZihPLmJ1dHRvbnM+MClCMCgiZW5kIixPKTtzKG51bGwpfSxvblRvdWNoU3RhcnQ6KE8pPT57Ty5wcmV2ZW50RGVmYXVsdCgpO2xldCBNPXkxKCk7aWYoIU0pcmV0dXJuO2lmKE8udG91Y2hlcy5sZW5ndGg+PTIpe3AxKCk7bGV0IFUxPU8udG91Y2hlc1swXSxBMT1PLnRvdWNoZXNbMV0sbzE9e3gxOihVMS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MTooVTEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQseDI6KEExLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHkyOihBMS5jbGllbnRZLU0udG9wKS9NLmhlaWdodH07aWYoIVUwLmN1cnJlbnQmJiFEMS5jdXJyZW50KXYxKHt0eXBlOiJlbmQiLHg6bzEueDEseTpvMS55MX0pO1UwLmN1cnJlbnQ9ITAsdzEuY3VycmVudD0hMCxEMS5jdXJyZW50PSExLHMobzEpLG0xKHt0eXBlOiJiZWdpbiIsLi4ubzF9KTtyZXR1cm59bGV0IFM9Ty50b3VjaGVzWzBdO2lmKCFTKXJldHVybjtsZXQgYj0oUy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxjPShTLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2gxKGIsYyk7bGV0ICQxPVMzKGMpO2lmKCQxIT09dm9pZCAwKUQxLmN1cnJlbnQ9ITAsdjEoe3R5cGU6ImJlZ2luIix4OmIseTpjLGVkZ2U6JDF9KTtlbHNlIEQxLmN1cnJlbnQ9ITEsdjEoe3R5cGU6ImJlZ2luIix4OmIseTpjfSl9LG9uVG91Y2hNb3ZlOihPKT0+e08ucHJldmVudERlZmF1bHQoKTtsZXQgTT15MSgpO2lmKCFNKXJldHVybjtpZihVMC5jdXJyZW50JiZPLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgJDE9Ty50b3VjaGVzWzBdLFUxPU8udG91Y2hlc1sxXSxBMT17eDE6KCQxLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHkxOigkMS5jbGllbnRZLU0udG9wKS9NLmhlaWdodCx4MjooVTEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTI6KFUxLmNsaWVudFktTS50b3ApL00uaGVpZ2h0fTtzKEExKSxtMSh7dHlwZToibW92ZSIsLi4uQTF9KTtyZXR1cm59bGV0IFM9Ty50b3VjaGVzWzBdO2lmKCFTKXJldHVybjtsZXQgYj0oUy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxjPShTLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKGwxKGIsYyksRDEuY3VycmVudCl2MSh7dHlwZToibW92ZSIseDpiLHk6YyxlZGdlOnEyfSk7ZWxzZSB2MSh7dHlwZToibW92ZSIseDpiLHk6Y30pfSxvblRvdWNoRW5kOihPKT0+e08ucHJldmVudERlZmF1bHQoKTtsZXQgTT15MSgpO2lmKCFNKXJldHVybjtpZihVMC5jdXJyZW50KXtpZihPLnRvdWNoZXMubGVuZ3RoPDIpe2xldCAkMT1PLmNoYW5nZWRUb3VjaGVzWzBdLFUxPXU7aWYoJDEmJlUxKW0xKHt0eXBlOiJlbmQiLHgxOigkMS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MTooJDEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQseDI6VTEueDIseTI6VTEueTJ9KTtlbHNlIGlmKFUxKW0xKHt0eXBlOiJlbmQiLC4uLlUxfSk7VTAuY3VycmVudD0hMSx3MS5jdXJyZW50PSExLHMobnVsbCl9cmV0dXJufWxldCBTPU8uY2hhbmdlZFRvdWNoZXNbMF07aWYoIVMpcmV0dXJuO2xldCBiPShTLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLGM9KFMuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7aWYocDEoKSxEMS5jdXJyZW50KXYxKHt0eXBlOiJlbmQiLHg6Yix5OmMsZWRnZTpxMn0pLEQxLmN1cnJlbnQ9ITE7ZWxzZSB2MSh7dHlwZToiZW5kIix4OmIseTpjfSl9fSksWigiZGl2Iix7cmVmOkMxLCJkYXRhLXRlc3RpZCI6InRvdWNoLWluZGljYXRvciIsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSIsd2lkdGg6MjQsaGVpZ2h0OjI0LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDU5LDEzMCwyNDYsMC41KSIsYm94U2hhZG93OiIwIDAgOHB4IHJnYmEoNTksMTMwLDI0NiwwLjMpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksdSYmWihKMSx7Y2hpbGRyZW46W1ooImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOmQ5KHUueDEsdS55MSl9KSxaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpkOSh1LngyLHUueTIpfSldfSksIXExJiYhcCYmWigiZGl2Iix7c3R5bGU6ey4uLnU5LC4uLlh8fHt9fSxjaGlsZHJlbjpaKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxwJiZaKCJkaXYiLHtzdHlsZTp1OSxjaGlsZHJlbjpaKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46cH0pfSkscjEmJlooImRpdiIse3N0eWxlOlIkLGNoaWxkcmVuOlooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFVJiZaKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltaKCJidXR0b24iLHtvbkNsaWNrOnowLHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxaKCJzcGFuIix7c3R5bGU6e2NvbG9yOl8xPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOltXJiZaKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6Vz09PSJnb29kIj8iIzRhZGU4MCI6Vz09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSxfMSwiIGZwcyJdfSldfSldfSl9dmFyIFIkPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sdTk9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LGw5PTIwO2Z1bmN0aW9uIGQ5KCQsSil7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHskKjEwMH0lYCx0b3A6YCR7SioxMDB9JWAsd2lkdGg6bDksaGVpZ2h0Omw5LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIHcwKCQpe2lmKCEkKXJldHVybiJpcGhvbmUiO2xldCBKPSQudG9Mb3dlckNhc2UoKTtpZihKLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKEouaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihKLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgeDE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LENLPXgxLmlwaG9uZS53aWR0aCxPSz14MS5pcGhvbmUuaGVpZ2h0LEZLPXgxLmlwaG9uZS5iZXplbFgsQUs9eDEuaXBob25lLmJlemVsWSxNSz14MS5pcGhvbmUuaW5uZXJSYWRpdXMsYzk9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBENSgkLEope2xldCBRPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOkosWD1HMihRKTtpZihYKXJldHVybmAke1gud2lkdGh9IC8gJHtYLmhlaWdodH1gO3JldHVybmAke3gxLmlwaG9uZS53aWR0aC0yKngxLmlwaG9uZS5iZXplbFh9IC8gJHt4MS5pcGhvbmUuaGVpZ2h0LTIqeDEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIE4yKCQ9ImlwaG9uZSIsSil7bGV0IFE9Sj9jOVtKXTpudWxsO2lmKFEpcmV0dXJuIFE7bGV0IFg9eDFbJF07cmV0dXJue3dpZHRoOlgud2lkdGgtMipYLmJlemVsWCxoZWlnaHQ6WC5oZWlnaHQtMipYLmJlemVsWX19ZnVuY3Rpb24gejIoJD0iaXBob25lIixKKXtpZihmMChKKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIFA1KCQ9ImlwaG9uZSIsSil7bGV0IFE9eDFbJF0sWD1RLndpZHRoLTIqUS5iZXplbFgsSz1RLmhlaWdodC0yKlEuYmV6ZWxZO2lmKFg8SyYmZjAoSikpcmV0dXJuYCR7US5pbm5lclJhZGl1cy9LKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1gqMTAwfSVgO3JldHVybmAke1EuaW5uZXJSYWRpdXMvWCoxMDB9JSAvICR7US5pbm5lclJhZGl1cy9LKjEwMH0lYH1mdW5jdGlvbiBvOSgkKXtsZXQgSj14MVskLnR5cGVdLFE9Si53aWR0aC0yKkouYmV6ZWxYLFg9Si5oZWlnaHQtMipKLmJlemVsWSxLLFk7aWYoUTxYJiZmMCgkLmNvbmZpZz8/bnVsbCkpSz1KLmlubmVyUmFkaXVzL1gsWT1KLmlubmVyUmFkaXVzL1E7ZWxzZSBLPUouaW5uZXJSYWRpdXMvUSxZPUouaW5uZXJSYWRpdXMvWDtsZXQgcT1LKiQuY29udGFpbmVyV2lkdGgsRz1ZKiQuY29udGFpbmVySGVpZ2h0LEI9TWF0aC5zcXJ0KE1hdGgubWF4KHEqRywwKSk7cmV0dXJue3J4OnEscnk6RyxyR2VvbTpCfX12YXIgZyQ9MTMsZiQ9NjI7ZnVuY3Rpb24gZzMoJCl7bGV0e2NvbnRhaW5lcldpZHRoOkosY29udGFpbmVySGVpZ2h0OlF9PSQsWD0oVSk9PlUudG9GaXhlZCgzKSxLPShVLEYpPT57bGV0IFc9Rix3PUYsUD1mJC8yKihNYXRoLlBJLzE4MCkseD0yMjUqTWF0aC5QSS8xODAsRD14K1Asbj14LVAsUj1XK1UqTWF0aC5jb3MoRCksZD13K1UqTWF0aC5zaW4oRCksaT1XK1UqTWF0aC5jb3Mobikscj13K1UqTWF0aC5zaW4obiksbz1gTSAke1goUil9ICR7WChkKX0gQSAke1goVSl9ICR7WChVKX0gMCAwIDEgJHtYKGkpfSAke1gocil9YCxhPWBNICR7WChpKX0gJHtYKHIpfSBBICR7WChVKX0gJHtYKFUpfSAwIDAgMCAke1goUil9ICR7WChkKX1gO3JldHVybntkOm8sZEZpbGw6YX19O2lmKCEoSj4wKXx8IShRPjApKXtsZXQgVT1nJCxGPU1hdGguY2VpbChVKzE0KSx7ZDpXLGRGaWxsOnd9PUsoVSxGKTtyZXR1cm57ZDpXLGRGaWxsOncsdmlld0JveFNpemU6Rn19bGV0e3JHZW9tOll9PW85KCQpLHE9TWF0aC5tYXgoMi4yLE1hdGgubWluKDUuMiwwLjAxMSpNYXRoLm1pbihKLFEpKSksRz1ZKjAuMzQrcSxCPU1hdGgubWluKEosUSksTj1NYXRoLm1pbigyMixNYXRoLm1heCgxMixCKjAuMDUyKSk7Rz1NYXRoLm1pbigyNCxNYXRoLm1heCgxMixHLE4pKTtsZXQgQz1NYXRoLm1heCgyNixNYXRoLmNlaWwoRysxMykpLHtkOkEsZEZpbGw6TH09SyhHLEMpO3JldHVybntkOkEsZEZpbGw6TCx2aWV3Qm94U2l6ZTpDfX1mdW5jdGlvbiBUNSh7dHlwZTokPSJpcGhvbmUiLHN0cmVhbWluZzpKPSExfSl7c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIFoocCQse3N0cmVhbWluZzpKfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFoodSQse3N0cmVhbWluZzpKfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBaKGwkLHtzdHJlYW1pbmc6Sn0pO2RlZmF1bHQ6cmV0dXJuIFoobSQse3N0cmVhbWluZzpKfSl9fWZ1bmN0aW9uIG0kKHtzdHJlYW1pbmc6JD0hMX0pe3JldHVybiBaKCJzdmciLHt2aWV3Qm94OiIwIDAgNDI3IDg4MSIsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJkZWZzIix7Y2hpbGRyZW46W1ooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMCIseDoiLTAuMTY2OTkyIix5OiIwLjE2NjUwNCIsd2lkdGg6IjQyNyIsaGVpZ2h0OiI4ODAuNjY3IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pLFooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMSIseDoiNi4zMzIzNiIseToiNi4zMzM4MiIsd2lkdGg6IjQxNCIsaGVpZ2h0OiI4NjgiLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KV19KSxaKCJyZWN0Iix7eDoiMy44MzI2OCIseToiMy44MzM2NiIsd2lkdGg6IjQxOSIsaGVpZ2h0OiI4NzMiLHJ4OiI2Ni4xNjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0LjMzMzMzIn0pLFooInJlY3QiLHt4OiIwLjgzMzMzMyIseToiMC44MzMzMzMiLHdpZHRoOiI0MjUiLGhlaWdodDoiODc5IixyeDoiNjkuMTY2NyIsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KSxaKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS42NjYwMiIseToiMiIsd2lkdGg6IjQyMy4zMzMiLGhlaWdodDoiODc3IixyeDoiNjguNjY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KX0pLFooImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMSkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI3LjMzMjY4Iix5OiI3LjMzMzY2Iix3aWR0aDoiNDEyIixoZWlnaHQ6Ijg2NiIscng6IjYyLjY2NjciLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2NjY3In0pfSksWigicmVjdCIse3g6IjE1MS42NjYiLHk6IjMxLjY2NyIsd2lkdGg6IjEyMy4zMzMiLGhlaWdodDoiMzYiLHJ4OiIxOCIsZmlsbDoiYmxhY2siLHN0eWxlOntvcGFjaXR5OiQ/MDoxLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiBwJCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSj14MS5pcGFkLndpZHRoLFE9eDEuaXBhZC5oZWlnaHQsWD0zMCxLPTI2O3JldHVybiBaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkosaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Si0xMCxoZWlnaHQ6US0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImJsdXIifSldfSldfSksWigicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpKLTcsaGVpZ2h0OlEtNyxyeDoyNixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0In0pLFooInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkotMS42NjYsaGVpZ2h0OlEtMS42NjYscng6MzAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWigiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkotMyxoZWlnaHQ6US0zLHJ4OjI5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksWigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzEpIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Si0xMixoZWlnaHQ6US0xMixyeDoyNCxzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLFooImNpcmNsZSIse2N4OkovMixjeTp4MS5pcGFkLmJlemVsWS8yKzEscjoiMyIsZmlsbDoiIzFhMWExYSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuOCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSksWigicmVjdCIse3g6KEotMTIwKS8yLHk6US14MS5pcGFkLmJlemVsWS8yLTIuNSx3aWR0aDoiMTIwIixoZWlnaHQ6IjUiLHJ4OiIyLjUiLGZpbGw6IndoaXRlIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zNSxtaXhCbGVuZE1vZGU6ImRpZmZlcmVuY2UiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiB1JCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSj14MS53YXRjaC53aWR0aCxRPXgxLndhdGNoLmhlaWdodCxYPTg4LEs9ODIsWT04LHE9MzYsRz1RLzItMTgtMTYsQj0yMixOPVEvMi0xMSsxNjtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7Sn0gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWigiZGVmcyIse2NoaWxkcmVuOlooImZpbHRlciIse2lkOiJ3YXRjaC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SisxMixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pfSksWigicmVjdCIse3g6Si0yLHk6Ryx3aWR0aDo4LGhlaWdodDozNixyeDoiMyIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMSJ9KSxaKCJyZWN0Iix7eDpKLTEseTpOLHdpZHRoOjYsaGVpZ2h0OjIyLHJ4OiIyLjUiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjAuOCJ9KSxaKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkotNyxoZWlnaHQ6US03LHJ4OjgyLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMuNSJ9KSxaKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpKLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4Ojg4LHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLFooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN3YXRjaC1nbG93MCkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Si0zLGhlaWdodDpRLTMscng6ODcsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KV19KX1mdW5jdGlvbiBsJCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSj14MS52aXNpb24ud2lkdGgsUT14MS52aXNpb24uaGVpZ2h0LFg9NDAsSz0zNDtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7Sn0gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJkZWZzIix7Y2hpbGRyZW46W1ooImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkosaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpKLTEwLGhlaWdodDpRLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzU1NTU1OCIsc3RvcE9wYWNpdHk6IjAuMyJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMzYTNhM2QiLHN0b3BPcGFjaXR5OiIwLjEifSldfSldfSksWigicmVjdCIse3g6IjAiLHk6IjAiLHdpZHRoOkosaGVpZ2h0OlEscng6NDAsZmlsbDoidXJsKCN2aXNpb24tZ2xhc3MpIn0pLFooInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Si03LGhlaWdodDpRLTcscng6MzQsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMyJ9KSxaKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpKLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4OjQwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLFooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkotMyxoZWlnaHQ6US0zLHJ4OjM5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksWigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MSkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpKLTEyLGhlaWdodDpRLTEyLHJ4OjMyLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksWigiZWxsaXBzZSIse2N4OkovMixjeTpRLzIscng6Si8yLTMwLHJ5OlEvMi0yNCxzdHJva2U6IiM0YTRhNGQiLHN0cm9rZVdpZHRoOiIwLjUiLG9wYWNpdHk6IjAuMyIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMyx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9dmFyIGYzPU8wKG51bGwpO2Z1bmN0aW9uIEk1KCQpe2xldCBKPUYwKGYzKTtpZighSil0aHJvdyBFcnJvcihgPFNpbXVsYXRvclRvb2xiYXIuJHskfT4gbXVzdCBiZSByZW5kZXJlZCBpbnNpZGUgPFNpbXVsYXRvclRvb2xiYXI+YCk7cmV0dXJuIEp9dmFyIGMkPXtkaXNwbGF5OiJmbGV4IixmbGV4V3JhcDoid3JhcCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOiI0cHggMTJweCIscGFkZGluZzoiOHB4IDEycHgiLGJvcmRlclJhZGl1czoyNCxiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSkiLGJveFNoYWRvdzoiMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKSIsbWluV2lkdGg6MjQwLHdpZHRoOiIxMDAlIn07ZnVuY3Rpb24gbyQoe2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpYLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksc3RyZWFtaW5nOnE9ITEsZGlzYWJsZWQ6Rz0hMSxjaGlsZHJlbjpCLHN0eWxlOk4sLi4uen0pe2xldCBWPXcwKEspLEM9e2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpYLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksZGV2aWNlVHlwZTpWLHN0cmVhbWluZzpxLGRpc2FibGVkOkd8fCFYfHwhcX07cmV0dXJuIFooZjMuUHJvdmlkZXIse3ZhbHVlOkMsY2hpbGRyZW46WigiZGl2Iix7ImRhdGEtc2ltdWxhdG9yLXRvb2xiYXIiOiEwLHN0eWxlOnsuLi5jJCwuLi5OfSwuLi56LGNoaWxkcmVuOkJ9KX0pfXZhciBpJD17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0Iix0ZXh0QWxpZ246ImxlZnQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjZmZmIixwYWRkaW5nOiIycHggNHB4IixtYXJnaW46Ii0ycHggLTRweCIsYm9yZGVyUmFkaXVzOjYsY3Vyc29yOiJwb2ludGVyIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixsaW5lSGVpZ2h0OjEuMixmb250RmFtaWx5OiJpbmhlcml0In0sbiQ9RDAoZnVuY3Rpb24oe25hbWU6SixzdWJ0aXRsZTpRLGhpZGVDaGV2cm9uOlgsaGlkZVN1YnRpdGxlOkssc3R5bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6RywuLi5CfSxOKXtsZXQgej1JNSgiVGl0bGUiKSxbVixIXT1rKCExKSxDPUo/P3ouZGV2aWNlTmFtZT8/Ik5vIHNpbXVsYXRvciIsQT1RPz8oei5kZXZpY2VSdW50aW1lP3ouZGV2aWNlUnVudGltZS5yZXBsYWNlKC9cLi8sIiAiKToi4oCUIik7cmV0dXJuIFooImJ1dHRvbiIse3JlZjpOLHR5cGU6ImJ1dHRvbiIsImRhdGEtc2ltdWxhdG9yLXRvb2xiYXItdGl0bGUiOiEwLG9uTW91c2VFbnRlcjooTCk9PntIKCEwKSxxPy4oTCl9LG9uTW91c2VMZWF2ZTooTCk9PntIKCExKSxHPy4oTCl9LHN0eWxlOnsuLi5pJCxiYWNrZ3JvdW5kOlY/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IiwuLi5ZfSwuLi5CLGNoaWxkcmVuOltaKCJzcGFuIix7c3R5bGU6e2Rpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiIjZmZmIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46W0MsIVgmJlooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46WigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksIUsmJlooInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOkF9KV19KX0pLHIkPXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gYSQoe3N0eWxlOiQsLi4uSn0pe3JldHVybiBaKCJkaXYiLHtzdHlsZTp7Li4uciQsLi4uJH0sLi4uSn0pfXZhciBzJD17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czoxMixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIixwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sdzU9RDAoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6Six0b29sdGlwOlEsc3R5bGU6WCxkaXNhYmxlZDpLLHRpdGxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsb25Qb2ludGVyRG93bjpCLG9uRm9jdXM6TixvbkJsdXI6eixvbkNsaWNrOlYsY2hpbGRyZW46SCwiYXJpYS1sYWJlbCI6QywuLi5BfSxMKXtsZXQgVT1GMChmMyksRj1LfHxKfHxVPy5kaXNhYmxlZCxbVyx3XT1rKCExKSxbUCx4XT1rKCExKSxEPVQoITEpLG49WTIoKSxSPVE/P1k/Pyh0eXBlb2YgQz09PSJzdHJpbmciP0M6bnVsbCksZD0hIVImJiFGJiYoV3x8UCk7cmV0dXJuIFooImJ1dHRvbiIse3JlZjpMLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6RiwiYXJpYS1sYWJlbCI6QywiYXJpYS1kZXNjcmliZWRieSI6Uj9uOnZvaWQgMCxvblBvaW50ZXJEb3duOihpKT0+e0QuY3VycmVudD0hMCxCPy4oaSl9LG9uTW91c2VFbnRlcjooaSk9Pnt3KCEwKSxxPy4oaSl9LG9uTW91c2VMZWF2ZTooaSk9Pnt3KCExKSxHPy4oaSl9LG9uRm9jdXM6KGkpPT57eCghRC5jdXJyZW50KSxOPy4oaSl9LG9uQmx1cjooaSk9PntELmN1cnJlbnQ9ITEseCghMSksej8uKGkpfSxvbkNsaWNrOihpKT0+e3coITEpLHgoITEpLGkuY3VycmVudFRhcmdldC5ibHVyKCksVj8uKGkpfSxzdHlsZTp7Li4ucyQsY29sb3I6Rj8icmdiYSgyNTUsMjU1LDI1NSwwLjI1KSI6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsYmFja2dyb3VuZDpXJiYhRj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLGN1cnNvcjpGPyJub3QtYWxsb3dlZCI6InBvaW50ZXIiLC4uLlh9LC4uLkEsY2hpbGRyZW46W0gsUiYmWigic3BhbiIse2lkOm4scm9sZToidG9vbHRpcCIsImFyaWEtaGlkZGVuIjohZCxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiI1MCUiLGJvdHRvbToiY2FsYygxMDAlICsgOHB4KSIsdHJhbnNmb3JtOmB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoJHtkPzA6Mn1weClgLG9wYWNpdHk6ZD8xOjAscG9pbnRlckV2ZW50czoibm9uZSIsd2hpdGVTcGFjZToibm93cmFwIixwYWRkaW5nOiI0cHggN3B4Iixib3JkZXJSYWRpdXM6NixiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSIsZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGJveFNoYWRvdzoiMCA0cHggMTRweCByZ2JhKDAsMCwwLDAuMzIpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTJzIGVhc2UsIHRyYW5zZm9ybSAwLjEycyBlYXNlIix6SW5kZXg6MTAwfSxjaGlsZHJlbjpSfSldfSl9KTtmdW5jdGlvbiB0JCgkLEope2lmKCQ9PT0id2F0Y2giKXJldHVybiBlJCgpO2lmKEopcmV0dXJuYHhjcnVuIHNpbWN0bCBsYXVuY2ggJHtKfSBjb20uYXBwbGUuc3ByaW5nYm9hcmRgO3JldHVybiJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUifWZ1bmN0aW9uIGUkKCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChKKT0+YC1lICcke0p9J2ApLnJlZHVjZSgoSixRKT0+YCR7Sn0gJHtRfWAsIm9zYXNjcmlwdCIpfXZhciAkSj1aKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksSko9Wigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgNDQgNDQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46WigicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZmlsbDoiY3VycmVudENvbG9yIixkOiJNNDMuNjg3NSAxMi40Njg4VjguMjczNDRDNDMuNjg3NSA1LjcyNjU2IDQyLjk1MzEgMy43MTA5NCA0MS40ODQ0IDIuMjI2NTZDNDAuMDE1NiAwLjc0MjE4OCAzOCAwIDM1LjQzNzUgMEgzMS4xNDg0QzMwLjYwMTYgMCAzMC4xMzI4IDAuMTk1MzEyIDI5Ljc0MjIgMC41ODU5MzhDMjkuMzUxNiAwLjk3NjU2MiAyOS4xNTYyIDEuNDQ1MzEgMjkuMTU2MiAxLjk5MjE5QzI5LjE1NjIgMi41MjM0NCAyOS4zNTE2IDIuOTg0MzggMjkuNzQyMiAzLjM3NUMzMC4xMzI4IDMuNzY1NjIgMzAuNjAxNiAzLjk2MDk0IDMxLjE0ODQgMy45NjA5NEgzNS40Mzc1QzM2Ljc4MTIgMy45NjA5NCAzNy44MzU5IDQuMzQzNzUgMzguNjAxNiA1LjEwOTM4QzM5LjM1MTYgNS44NzUgMzkuNzI2NiA2LjkyOTY5IDM5LjcyNjYgOC4yNzM0NFYxMi40Njg4QzM5LjcyNjYgMTMgMzkuOTIxOSAxMy40NjA5IDQwLjMxMjUgMTMuODUxNkM0MC43MDMxIDE0LjI0MjIgNDEuMTcxOSAxNC40Mzc1IDQxLjcxODggMTQuNDM3NUM0Mi4yNSAxNC40Mzc1IDQyLjcxMDkgMTQuMjQyMiA0My4xMDE2IDEzLjg1MTZDNDMuNDkyMiAxMy40NjA5IDQzLjY4NzUgMTMgNDMuNjg3NSAxMi40Njg4Wk0wIDEyLjQ2ODhDMCAxMyAwLjE5NTMxMiAxMy40NjA5IDAuNTg1OTM4IDEzLjg1MTZDMC45NzY1NjIgMTQuMjQyMiAxLjQzNzUgMTQuNDM3NSAxLjk2ODc1IDE0LjQzNzVDMi41IDE0LjQzNzUgMi45NjA5NCAxNC4yNDIyIDMuMzUxNTYgMTMuODUxNkMzLjc0MjE5IDEzLjQ2MDkgMy45Mzc1IDEzIDMuOTM3NSAxMi40Njg4VjguMjczNDRDMy45Mzc1IDYuOTI5NjkgNC4zMjAzMSA1Ljg3NSA1LjA4NTk0IDUuMTA5MzhDNS44MzU5NCA0LjM0Mzc1IDYuODkwNjIgMy45NjA5NCA4LjI1IDMuOTYwOTRIMTIuNTM5MUMxMy4wODU5IDMuOTYwOTQgMTMuNTU0NyAzLjc2NTYyIDEzLjk0NTMgMy4zNzVDMTQuMzIwMyAyLjk4NDM4IDE0LjUwNzggMi41MjM0NCAxNC41MDc4IDEuOTkyMTlDMTQuNTA3OCAxLjQ0NTMxIDE0LjMyMDMgMC45NzY1NjIgMTMuOTQ1MyAwLjU4NTkzOEMxMy41NTQ3IDAuMTk1MzEyIDEzLjA4NTkgMCAxMi41MzkxIDBIOC4yNUM1LjY4NzUgMCAzLjY3MTg4IDAuNzQyMTg4IDIuMjAzMTIgMi4yMjY1NkMwLjczNDM3NSAzLjcxMDk0IDAgNS43MjY1NiAwIDguMjczNDRWMTIuNDY4OFpNNDMuNjg3NSAzMS4yNDIyQzQzLjY4NzUgMzAuNzEwOSA0My40OTIyIDMwLjI1IDQzLjEwMTYgMjkuODU5NEM0Mi43MTA5IDI5LjQ2ODggNDIuMjUgMjkuMjczNCA0MS43MTg4IDI5LjI3MzRDNDEuMTcxOSAyOS4yNzM0IDQwLjcwMzEgMjkuNDY4OCA0MC4zMTI1IDI5Ljg1OTRDMzkuOTIxOSAzMC4yNSAzOS43MjY2IDMwLjcxMDkgMzkuNzI2NiAzMS4yNDIyVjM1LjQzNzVDMzkuNzI2NiAzNi43ODEyIDM5LjM1MTYgMzcuODM1OSAzOC42MDE2IDM4LjYwMTZDMzcuODM1OSAzOS4zNjcyIDM2Ljc4MTIgMzkuNzUgMzUuNDM3NSAzOS43NUgzMS4xNDg0QzMwLjYwMTYgMzkuNzUgMzAuMTMyOCAzOS45NDUzIDI5Ljc0MjIgNDAuMzM1OUMyOS4zNTE2IDQwLjcyNjYgMjkuMTU2MiA0MS4xODc1IDI5LjE1NjIgNDEuNzE4OEMyOS4xNTYyIDQyLjI2NTYgMjkuMzUxNiA0Mi43MjY2IDI5Ljc0MjIgNDMuMTAxNkMzMC4xMzI4IDQzLjQ5MjIgMzAuNjAxNiA0My42ODc1IDMxLjE0ODQgNDMuNjg3NUgzNS40Mzc1QzM4IDQzLjY4NzUgNDAuMDE1NiA0Mi45NDUzIDQxLjQ4NDQgNDEuNDYwOUM0Mi45NTMxIDM5Ljk5MjIgNDMuNjg3NSAzNy45ODQ0IDQzLjY4NzUgMzUuNDM3NVYzMS4yNDIyWk0wIDMxLjI0MjJWMzUuNDM3NUMwIDM3Ljk4NDQgMC43MzQzNzUgMzkuOTkyMiAyLjIwMzEyIDQxLjQ2MDlDMy42NzE4OCA0Mi45NDUzIDUuNjg3NSA0My42ODc1IDguMjUgNDMuNjg3NUgxMi41MzkxQzEzLjA4NTkgNDMuNjg3NSAxMy41NTQ3IDQzLjQ5MjIgMTMuOTQ1MyA0My4xMDE2QzE0LjMyMDMgNDIuNzI2NiAxNC41MDc4IDQyLjI2NTYgMTQuNTA3OCA0MS43MTg4QzE0LjUwNzggNDEuMTg3NSAxNC4zMjAzIDQwLjcyNjYgMTMuOTQ1MyA0MC4zMzU5QzEzLjU1NDcgMzkuOTQ1MyAxMy4wODU5IDM5Ljc1IDEyLjUzOTEgMzkuNzVIOC4yNUM2Ljg5MDYyIDM5Ljc1IDUuODM1OTQgMzkuMzY3MiA1LjA4NTk0IDM4LjYwMTZDNC4zMjAzMSAzNy44MzU5IDMuOTM3NSAzNi43ODEyIDMuOTM3NSAzNS40Mzc1VjMxLjI0MjJDMy45Mzc1IDMwLjcxMDkgMy43NDIxOSAzMC4yNSAzLjM1MTU2IDI5Ljg1OTRDMi45NjA5NCAyOS40Njg4IDIuNSAyOS4yNzM0IDEuOTY4NzUgMjkuMjczNEMxLjQzNzUgMjkuMjczNCAwLjk3NjU2MiAyOS40Njg4IDAuNTg1OTM4IDI5Ljg1OTRDMC4xOTUzMTIgMzAuMjUgMCAzMC43MTA5IDAgMzEuMjQyMlpNMzEuNTkzOCAzMS44MDQ3QzMyLjc4MTIgMzEuODA0NyAzMy42NzE5IDMxLjUxNTYgMzQuMjY1NiAzMC45Mzc1QzM0Ljg1OTQgMzAuMzQzOCAzNS4xNTYyIDI5LjQ2ODggMzUuMTU2MiAyOC4zMTI1VjE2LjcxMDlDMzUuMTU2MiAxNS41MzkxIDM0Ljg1OTQgMTQuNjY0MSAzNC4yNjU2IDE0LjA4NTlDMzMuNjcxOSAxMy40OTIyIDMyLjc4MTIgMTMuMTk1MyAzMS41OTM4IDEzLjE5NTNIMjguODk4NEMyOC40NjA5IDEzLjE5NTMgMjguMTQ4NCAxMy4xNDA2IDI3Ljk2MDkgMTMuMDMxMkMyNy43NTc4IDEyLjkyMTkgMjcuNTIzNCAxMi43MjY2IDI3LjI1NzggMTIuNDQ1M0wyNi4zNjcyIDExLjUwNzhDMjYuMDg1OSAxMS4xOTUzIDI1Ljc4MTIgMTAuOTY4OCAyNS40NTMxIDEwLjgyODFDMjUuMTA5NCAxMC42NzE5IDI0LjY1NjIgMTAuNTkzOCAyNC4wOTM4IDEwLjU5MzhIMTkuNjE3MkMxOS4wNTQ3IDEwLjU5MzggMTguNjA5NCAxMC42NzE5IDE4LjI4MTIgMTAuODI4MUMxNy45Mzc1IDEwLjk2ODggMTcuNjI1IDExLjE5NTMgMTcuMzQzOCAxMS41MDc4TDE2LjQ3NjYgMTIuNDQ1M0MxNi4yMTA5IDEyLjc0MjIgMTUuOTc2NiAxMi45NDUzIDE1Ljc3MzQgMTMuMDU0N0MxNS41NTQ3IDEzLjE0ODQgMTUuMjM0NCAxMy4xOTUzIDE0LjgxMjUgMTMuMTk1M0gxMi4wNDY5QzEwLjg5MDYgMTMuMTk1MyAxMC4wMTU2IDEzLjQ5MjIgOS40MjE4OCAxNC4wODU5QzguODEyNSAxNC42NjQxIDguNTA3ODEgMTUuNTM5MSA4LjUwNzgxIDE2LjcxMDlWMjguMzEyNUM4LjUwNzgxIDI5LjQ2ODggOC44MTI1IDMwLjM0MzggOS40MjE4OCAzMC45Mzc1QzEwLjAxNTYgMzEuNTE1NiAxMC44OTA2IDMxLjgwNDcgMTIuMDQ2OSAzMS44MDQ3SDMxLjU5MzhaTTIxLjc5NjkgMjguOTQ1M0MyMC41OTM4IDI4Ljk0NTMgMTkuNSAyOC42NjQxIDE4LjUxNTYgMjguMTAxNkMxNy41MTU2IDI3LjUyMzQgMTYuNzI2NiAyNi43NDIyIDE2LjE0ODQgMjUuNzU3OEMxNS41NTQ3IDI0Ljc1NzggMTUuMjU3OCAyMy42MzI4IDE1LjI1NzggMjIuMzgyOEMxNS4yNTc4IDIxLjE3OTcgMTUuNTU0NyAyMC4wODU5IDE2LjE0ODQgMTkuMTAxNkMxNi43MjY2IDE4LjEwMTYgMTcuNTE1NiAxNy4zMTI1IDE4LjUxNTYgMTYuNzM0NEMxOS41IDE2LjE0MDYgMjAuNTkzOCAxNS44NDM4IDIxLjc5NjkgMTUuODQzOEMyMy4wMTU2IDE1Ljg0MzggMjQuMTI1IDE2LjE0MDYgMjUuMTI1IDE2LjczNDRDMjYuMTA5NCAxNy4zMTI1IDI2Ljg5ODQgMTguMTAxNiAyNy40OTIyIDE5LjEwMTZDMjguMDcwMyAyMC4wODU5IDI4LjM1OTQgMjEuMTc5NyAyOC4zNTk0IDIyLjM4MjhDMjguMzU5NCAyMy42MTcyIDI4LjA3MDMgMjQuNzI2NiAyNy40OTIyIDI1LjcxMDlDMjYuODk4NCAyNi42OTUzIDI2LjEwOTQgMjcuNDg0NCAyNS4xMjUgMjguMDc4MUMyNC4xMjUgMjguNjU2MiAyMy4wMTU2IDI4Ljk0NTMgMjEuNzk2OSAyOC45NDUzWk0yMS44MjAzIDI2LjkwNjJDMjIuNjQ4NCAyNi45MDYyIDIzLjQwNjIgMjYuNzEwOSAyNC4wOTM4IDI2LjMyMDNDMjQuNzgxMiAyNS45MTQxIDI1LjMyODEgMjUuMzY3MiAyNS43MzQ0IDI0LjY3OTdDMjYuMTI1IDIzLjk5MjIgMjYuMzIwMyAyMy4yMjY2IDI2LjMyMDMgMjIuMzgyOEMyNi4zMjAzIDIxLjU3MDMgMjYuMTI1IDIwLjgyMDMgMjUuNzM0NCAyMC4xMzI4QzI1LjMyODEgMTkuNDQ1MyAyNC43ODEyIDE4LjkwNjIgMjQuMDkzOCAxOC41MTU2QzIzLjQwNjIgMTguMTA5NCAyMi42NDg0IDE3LjkwNjIgMjEuODIwMyAxNy45MDYyQzIwLjk5MjIgMTcuOTA2MiAyMC4yNDIyIDE4LjEwOTQgMTkuNTcwMyAxOC41MTU2QzE4Ljg4MjggMTguOTA2MiAxOC4zMzU5IDE5LjQ0NTMgMTcuOTI5NyAyMC4xMzI4QzE3LjUyMzQgMjAuODIwMyAxNy4zMjAzIDIxLjU3MDMgMTcuMzIwMyAyMi4zODI4QzE3LjMyMDMgMjMuMjI2NiAxNy41MjM0IDIzLjk5MjIgMTcuOTI5NyAyNC42Nzk3QzE4LjMzNTkgMjUuMzY3MiAxOC44ODI4IDI1LjkxNDEgMTkuNTcwMyAyNi4zMjAzQzIwLjI0MjIgMjYuNzEwOSAyMC45OTIyIDI2LjkwNjIgMjEuODIwMyAyNi45MDYyWk0xMi42MzI4IDE4Ljk4NDRDMTIuMjEwOSAxOC45ODQ0IDExLjg1OTQgMTguODM1OSAxMS41NzgxIDE4LjUzOTFDMTEuMjgxMiAxOC4yNDIyIDExLjEzMjggMTcuODkwNiAxMS4xMzI4IDE3LjQ4NDRDMTEuMTMyOCAxNy4wNjI1IDExLjI4MTIgMTYuNzEwOSAxMS41NzgxIDE2LjQyOTdDMTEuODU5NCAxNi4xMzI4IDEyLjIxMDkgMTUuOTg0NCAxMi42MzI4IDE1Ljk4NDRDMTMuMDM5MSAxNS45ODQ0IDEzLjM5MDYgMTYuMTMyOCAxMy42ODc1IDE2LjQyOTdDMTMuOTg0NCAxNi43MTA5IDE0LjEzMjggMTcuMDYyNSAxNC4xMzI4IDE3LjQ4NDRDMTQuMTMyOCAxNy44OTA2IDEzLjk4NDQgMTguMjQyMiAxMy42ODc1IDE4LjUzOTFDMTMuMzkwNiAxOC44MzU5IDEzLjAzOTEgMTguOTg0NCAxMi42MzI4IDE4Ljk4NDRaIn0pfSksUUo9Wigic3ZnIix7d2lkdGg6IjIxIixoZWlnaHQ6IjIxIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIn0pLFooInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifSksWigicGF0aCIse2Q6Ik00IDE0djRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtMiJ9KV19KSxaSj1EMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFgpe2xldCBLPUk1KCJIb21lQnV0dG9uIik7cmV0dXJuIFoodzUse3JlZjpYLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtLLmV4ZWModCQoSy5kZXZpY2VUeXBlLEsuZGV2aWNlVWRpZCkpfSwuLi5RLGNoaWxkcmVuOiRKfSl9KSxYSj1EMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFgpe2xldCBLPUk1KCJTY3JlZW5zaG90QnV0dG9uIik7cmV0dXJuIFoodzUse3JlZjpYLCJhcmlhLWxhYmVsIjoiU2NyZWVuc2hvdCIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihLLmRldmljZVVkaWQpSy5leGVjKGB4Y3J1biBzaW1jdGwgaW8gJHtLLmRldmljZVVkaWR9IHNjcmVlbnNob3Qgfi9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSQoZGF0ZSArJXMpLnBuZ2ApfSwuLi5RLGNoaWxkcmVuOkpKfSl9KSxLSj1EMChmdW5jdGlvbih7b25DbGljazpKLGZvcmNlRGlzYWJsZWQ6USwuLi5YfSxLKXtsZXQgWT1JNSgiUm90YXRlQnV0dG9uIikscT1ZLmRldmljZVR5cGU9PT0id2F0Y2gifHxZLmRldmljZVR5cGU9PT0idmlzaW9uIixbRyxCXT1rKCJwb3J0cmFpdCIpO3JldHVybiB5KCgpPT57QihZLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiKX0sW1kuZGV2aWNlVWRpZCxZLm9yaWVudGF0aW9uXSksWih3NSx7cmVmOkssImFyaWEtbGFiZWwiOiJSb3RhdGUgZGV2aWNlIixmb3JjZURpc2FibGVkOlF8fHEsb25DbGljazooTik9PntpZihKPy4oTiksTi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZighWS5kZXZpY2VVZGlkfHxxKXJldHVybjtsZXQgej15MltZLm9yaWVudGF0aW9uPz9HXTtpZihCKHopLFkub25Sb3RhdGUpWS5vblJvdGF0ZSh6KTtlbHNlIFkuZXhlYyhgc2VydmUtc2ltIHJvdGF0ZSAke3p9IC1kICR7WS5kZXZpY2VVZGlkfWApfSwuLi5YLGNoaWxkcmVuOlFKfSl9KSxjMT1vJDtjMS5UaXRsZT1uJDtjMS5BY3Rpb25zPWEkO2MxLkJ1dHRvbj13NTtjMS5Ib21lQnV0dG9uPVpKO2MxLlNjcmVlbnNob3RCdXR0b249WEo7YzEuUm90YXRlQnV0dG9uPUtKO3ZhciBFNT0oLi4uJCk9PiQuZmlsdGVyKChKLFEsWCk9PntyZXR1cm4gQm9vbGVhbihKKSYmSi50cmltKCkhPT0iIiYmWC5pbmRleE9mKEopPT09UX0pLmpvaW4oIiAiKS50cmltKCk7dmFyIGk5PSgkKT0+JC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIG45PSgkKT0+JC5yZXBsYWNlKC9eKFtBLVpdKXxbXHMtX10rKFx3KS9nLChKLFEsWCk9Plg/WC50b1VwcGVyQ2FzZSgpOlEudG9Mb3dlckNhc2UoKSk7dmFyIG0zPSgkKT0+e2xldCBKPW45KCQpO3JldHVybiBKLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0ouc2xpY2UoMSl9O3ZhciBiNT17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07dmFyIHI5PSgkKT0+e2ZvcihsZXQgSiBpbiAkKWlmKEouc3RhcnRzV2l0aCgiYXJpYS0iKXx8Sj09PSJyb2xlInx8Sj09PSJ0aXRsZSIpcmV0dXJuITA7cmV0dXJuITF9O3ZhciBZSj1PMCh7fSk7dmFyIGE5PSgpPT5GMChZSik7dmFyIHM5PUQwKCh7Y29sb3I6JCxzaXplOkosc3Ryb2tlV2lkdGg6USxhYnNvbHV0ZVN0cm9rZVdpZHRoOlgsY2xhc3NOYW1lOks9IiIsY2hpbGRyZW46WSxpY29uTm9kZTpxLC4uLkd9LEIpPT57bGV0e3NpemU6Tj0yNCxzdHJva2VXaWR0aDp6PTIsYWJzb2x1dGVTdHJva2VXaWR0aDpWPSExLGNvbG9yOkg9ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOkM9IiJ9PWE5KCk/P3t9LEE9WD8/Vj9OdW1iZXIoUT8/eikqMjQvTnVtYmVyKEo/P04pOlE/P3o7cmV0dXJuIHUxKCJzdmciLHtyZWY6QiwuLi5iNSx3aWR0aDpKPz9OPz9iNS53aWR0aCxoZWlnaHQ6Sj8/Tj8/YjUuaGVpZ2h0LHN0cm9rZTokPz9ILHN0cm9rZVdpZHRoOkEsY2xhc3NOYW1lOkU1KCJsdWNpZGUiLEMsSyksLi4uIVkmJiFyOShHKSYmeyJhcmlhLWhpZGRlbiI6InRydWUifSwuLi5HfSxbLi4ucS5tYXAoKFtMLFVdKT0+dTEoTCxVKSksLi4uQXJyYXkuaXNBcnJheShZKT9ZOltZXV0pfSk7dmFyIHoxPSgkLEopPT57bGV0IFE9RDAoKHtjbGFzc05hbWU6WCwuLi5LfSxZKT0+dTEoczkse3JlZjpZLGljb25Ob2RlOkosY2xhc3NOYW1lOkU1KGBsdWNpZGUtJHtpOShtMygkKSl9YCxgbHVjaWRlLSR7JH1gLFgpLC4uLkt9KSk7cmV0dXJuIFEuZGlzcGxheU5hbWU9bTMoJCksUX07dmFyIHFKPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4IixrZXk6ImZoM2hxYSJ9XV0sRTA9ejEoInBhbmVsLWxlZnQiLHFKKTt2YXIgR0o9W1sicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIsa2V5OiJ4d256aXAifV0sWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IixrZXk6IjE0cnN2cSJ9XV0sbTA9ejEoInNxdWFyZS1tb3VzZS1wb2ludGVyIixHSik7dmFyIFZKPVtbInBhdGgiLHtkOiJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiLGtleToid21vZW5xIn1dLFsicGF0aCIse2Q6Ik0xMiA5djQiLGtleToianV6cHU3In1dLFsicGF0aCIse2Q6Ik0xMiAxN2guMDEiLGtleToicDMycDA1In1dXSxiMD16MSgidHJpYW5nbGUtYWxlcnQiLFZKKTt2YXIgQko9W1sicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNiIscng6IjIiLGtleToiaXp4bGFvIn1dLFsicGF0aCIse2Q6Ik0xMCA0djQiLGtleToicHA4dTgwIn1dLFsicGF0aCIse2Q6Ik0yIDhoMjAiLGtleToiZDExY3M3In1dLFsicGF0aCIse2Q6Ik02IDR2NCIsa2V5OiIxc3Z0ancifV1dLHgyPXoxKCJhcHAtd2luZG93IixCSik7dmFyIE5KPVtbInBhdGgiLHtkOiJNNyA3aDEwdjEwIixrZXk6IjF0aXZuOSJ9XSxbInBhdGgiLHtkOiJNNyAxNyAxNyA3IixrZXk6IjF2a2l6YSJ9XV0sajI9ejEoImFycm93LXVwLXJpZ2h0IixOSik7dmFyIHpKPVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSx2Mj16MSgiY2hlY2siLHpKKTt2YXIgTEo9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLFIyPXoxKCJjaGV2cm9uLWRvd24iLExKKTt2YXIgSEo9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSxoMj16MSgiY2hldnJvbi1yaWdodCIsSEopO3ZhciBVSj1bWyJwYXRoIix7ZDoiTTEyIDE1VjMiLGtleToibTlnMXgxIn1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XSxbInBhdGgiLHtkOiJtNyAxMCA1IDUgNS01IixrZXk6ImJyc243MCJ9XV0sZzI9ejEoImRvd25sb2FkIixVSik7dmFyIENKPVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0sZjI9ejEoImZhc3QtZm9yd2FyZCIsQ0opO3ZhciBPSj1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sbTI9ejEoImZsaXAtaG9yaXpvbnRhbC0yIixPSik7dmFyIEZKPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0scDI9ejEoImdsb2JlIixGSik7dmFyIEFKPVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLHUyPXoxKCJpbWFnZXMiLEFKKTt2YXIgTUo9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4IixrZXk6IjE0bnZwMCJ9XV0sbDI9ejEoInBhbmVsLXJpZ2h0IixNSik7dmFyIGtKPVtbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IixrZXk6IjEzNTdlMyJ9XSxbInBhdGgiLHtkOiJNMyAzdjVoNSIsa2V5OiIxeGhxOGEifV1dLGQyPXoxKCJyb3RhdGUtY2N3IixrSik7dmFyIFdKPVtbInBhdGgiLHtkOiJtMjEgMjEtNC4zNC00LjM0IixrZXk6IjE0ajdyaiJ9XSxbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4IixrZXk6IjRlajk3dSJ9XV0sYzI9ejEoInNlYXJjaCIsV0opO3ZhciBfSj1bWyJwYXRoIix7ZDoiTTEwIDVIMyIsa2V5OiIxcWdmYXcifV0sWyJwYXRoIix7ZDoiTTEyIDE5SDMiLGtleToieWhtbjFqIn1dLFsicGF0aCIse2Q6Ik0xNCAzdjQiLGtleToiMXN1YTAzIn1dLFsicGF0aCIse2Q6Ik0xNiAxN3Y0IixrZXk6IjFxMHIxNCJ9XSxbInBhdGgiLHtkOiJNMjEgMTJoLTkiLGtleToiMW80bHNxIn1dLFsicGF0aCIse2Q6Ik0yMSAxOWgtNSIsa2V5OiIxcmx0MXAifV0sWyJwYXRoIix7ZDoiTTIxIDVoLTciLGtleToiMW9zenoyIn1dLFsicGF0aCIse2Q6Ik04IDEwdjQiLGtleToidGdweHFrIn1dLFsicGF0aCIse2Q6Ik04IDEySDMiLGtleToiYTdzNGpiIn1dXSxqMD16MSgic2xpZGVycy1ob3Jpem9udGFsIixfSik7dmFyIERKPVtbInBhdGgiLHtkOiJNMTIgM3YxMiIsa2V5OiIxeDBqNXMifV0sWyJwYXRoIix7ZDoibTE3IDgtNS01LTUgNSIsa2V5OiI3cTk3cjgifV0sWyJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiLGtleToiaWg3bjNoIn1dXSxvMj16MSgidXBsb2FkIixESik7dmFyIFBKPVtbInBhdGgiLHtkOiJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41IixrZXk6ImZ0eW1lYyJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTQiLGhlaWdodDoiMTIiLHJ4OiIyIixrZXk6IjE1OHgwMSJ9XV0scjA9ejEoInZpZGVvIixQSik7dmFyIFRKPVtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0sTDA9ejEoIngiLFRKKTtmdW5jdGlvbiBpMih7b3BlbjokfSl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIixzdHlsZTp7dHJhbnNmb3JtOiQ/InJvdGF0ZSgxODBkZWcpIjoicm90YXRlKDBkZWcpIn0sY2hpbGRyZW46WigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24geTUoe2RpcjokfSl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9aKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6WigicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBuMigpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpaKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIHAzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltaKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksWigicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiByMigpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gdTMoKXtyZXR1cm4gWihmMix7c2l6ZToxMixzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9ZnVuY3Rpb24gbDMoKXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQgMiA5IDEzIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik02LjAwODUyIDE0LjgwNTRDNS44OTE4MSAxNC45MzUgNS43NTgxNSAxNC45OTk4IDUuNjA3NTYgMTQuOTk5OEM1LjQ1Njk2IDE1LjAwMzMgNS4zMjMzIDE0Ljk2MTMgNS4yMDY1OSAxNC44NzM3QzUuMDkzNjQgMTQuNzg2MSA1LjAyNTg3IDE0LjY3MjMgNS4wMDMyOCAxNC41MzIyQzQuOTg0NDYgMTQuMzkyMSA1LjA0NjU4IDE0LjI0NSA1LjE4OTY1IDE0LjA5MDlMNi45NDU5OSAxMi4xNTIyTDcuMjQ1MyAxMC44NzU1TDguMTk5NzEgMTEuOTg5M0w4LjA1ODUzIDEyLjM5MzlDOC4wMjA4OCAxMi40OTU1IDcuOTg2OTkgMTIuNTcwOCA3Ljk1Njg3IDEyLjYxOThDNy45MzA1MiAxMi42Njg4IDcuODc0MDQgMTIuNzQwNiA3Ljc4NzQ1IDEyLjgzNTJMNi4wMDg1MiAxNC44MDU0Wk0xMC4zNDU3IDE0LjY0MjVMOS4xMDMyOSAxMi4zMDQ2QzkuMDc2OTQgMTIuMjYyNSA5LjA1NDM1IDEyLjIyMjMgOS4wMzU1MyAxMi4xODM3QzkuMDE2NyAxMi4xNDUyIDguOTc3MTcgMTIuMDkwOSA4LjkxNjkzIDEyLjAyMDlMNy43MTk2OCAxMC42MTgxQzcuNDkzNzkgMTAuMzU1NCA3LjMzNzU0IDEwLjEyOTUgNy4yNTA5NSA5Ljk0MDM0QzcuMTY0MzUgOS43NDc3IDcuMTM0MjQgOS40OTkwMSA3LjE2MDU5IDkuMTk0MjlMNy4yNjIyNCA3Ljk4MDY1QzcuMjY5NzcgNy45MDcxIDcuMjMyMTIgNy44NTQ1NiA3LjE0OTI5IDcuODIzMDRDNy4wNjY0NyA3Ljc5MTUxIDYuOTg1NTIgNy44MDkwMyA2LjkwNjQ2IDcuODc1NTdMNi40NzE2MSA4LjI0MzM0TDYuMzQxNzIgOS42NzIzOUM2LjMyMjg5IDkuODQ3NTIgNi4yNjQ1NCA5Ljk3ODg3IDYuMTY2NjUgMTAuMDY2NEM2LjA2ODc2IDEwLjE1NCA1LjkzODg3IDEwLjE5MjUgNS43NzY5OCAxMC4xODJDNS42MTEzMiAxMC4xNzUgNS40ODMzMSAxMC4xMTkgNS4zOTI5NSAxMC4wMTM5QzUuMzA2MzYgOS45MDg4MiA1LjI2ODcxIDkuNzczOTcgNS4yODAwMSA5LjYwOTM1TDUuMzg3MzEgOC4zMDYzOUM1LjQwMjM3IDguMTI3NzYgNS40MzgxMyA3Ljk3NTQgNS40OTQ2MSA3Ljg0OTMxQzUuNTU0ODUgNy43MjMyMSA1LjY2MDI2IDcuNTkxODcgNS44MTA4NiA3LjQ1NTI3TDYuNzE0NDUgNi42MjUxNkM3LjAwNDM1IDYuMzYyNDcgNy4yNjk3NyA2LjE2MTA3IDcuNTEwNzMgNi4wMjA5NkM3Ljc1MTY4IDUuODc3MzYgOC4wMjg0MSA1LjgwNTU2IDguMzQwOSA1LjgwNTU2QzguNzU4OCA1LjgwNTU2IDkuMDc4ODIgNS45MzM0IDkuMzAwOTUgNi4xODkwOUM5LjUyNjg1IDYuNDQ0NzggOS42MjQ3NCA2Ljc2MTc2IDkuNTk0NjIgNy4xNDAwNEw5LjQ3NjAyIDguNzMxOTVDOS40NTM0MyA5LjAxNTY2IDkuNDE5NTUgOS4yNjI1OSA5LjM3NDM3IDkuNDcyNzVDOS4zMjkxOSA5LjY4MjkgOS4yNTM4OSA5LjkyOTgzIDkuMTQ4NDcgMTAuMjEzNUw5LjA5MiAxMC4zNjA2TDkuODY1NjkgMTEuMzc5OUM5LjkyMjE3IDExLjQ1MzQgOS45ODA1MiAxMS41MzQgMTAuMDQwOCAxMS42MjE2QzEwLjEwMSAxMS43MDkxIDEwLjE1MzcgMTEuNzk2NyAxMC4xOTg5IDExLjg4NDNMMTEuNDA3NCAxNC4xNjQ0QzExLjUwNTMgMTQuMzUwMSAxMS41MjQxIDE0LjUxMTIgMTEuNDYzOSAxNC42NDc4QzExLjQwMzcgMTQuNzg0NCAxMS4zMDIgMTQuODgyNSAxMS4xNTg5IDE0Ljk0MkMxMS4wMTk2IDE1LjAwMTUgMTAuODcwOSAxNS4wMTAzIDEwLjcxMjggMTQuOTY4M0MxMC41NTg0IDE0LjkyNjIgMTAuNDM2MSAxNC44MTc3IDEwLjM0NTcgMTQuNjQyNVpNMTIuNDA3IDcuOTY0ODlDMTIuNTg0IDcuOTY0ODkgMTIuNzI3IDguMDEwNDIgMTIuODM2MiA4LjEwMTQ5QzEyLjk0NTQgOC4xODkwNSAxMyA4LjMwNjM5IDEzIDguNDUzNUMxMyA4LjYxMTExIDEyLjk0NTQgOC43MzM3IDEyLjgzNjIgOC44MjEyN0MxMi43MzA4IDguOTA4ODMgMTIuNTg3NyA4Ljk1MjYxIDEyLjQwNyA4Ljk1MjYxSDExLjEzMDdDMTAuOTUzOCA4Ljk1MjYxIDEwLjgxNDUgOC45MzY4NSAxMC43MTI4IDguOTA1MzNDMTAuNjExMiA4Ljg3MDMgMTAuNTEzMyA4LjgwNzI2IDEwLjQxOTEgOC43MTYxOUwxMC4wNTIxIDguMzc5OTRMMTAuMTQyNCA3LjA0MDIxTDExLjAzNDcgNy45NjQ4OUgxMi40MDdaTTkuMDAxNjQgNS4zMTE2OUM4Ljc3MTk4IDUuMzExNjkgOC41NjMwMyA1LjI2MDkxIDguMzc0NzggNS4xNTkzM0M4LjE4NjUzIDUuMDU0MjYgOC4wMzU5NCA0LjkxNDE1IDcuOTIyOTkgNC43MzkwM0M3LjgxMzgxIDQuNTYzOSA3Ljc1OTIxIDQuMzY5NSA3Ljc1OTIxIDQuMTU1ODVDNy43NTkyMSAzLjk0MjE5IDcuODEzODEgMy43NDc4IDcuOTIyOTkgMy41NzI2N0M4LjAzNTk0IDMuMzk3NTQgOC4xODY1MyAzLjI1OTE5IDguMzc0NzggMy4xNTc2MkM4LjU2MzAzIDMuMDUyNTQgOC43NzE5OCAzIDkuMDAxNjQgM0M5LjIzMTMgMyA5LjQ0MDI2IDMuMDUyNTQgOS42Mjg1IDMuMTU3NjJDOS44MTY3NSAzLjI1OTE5IDkuOTY1NDYgMy4zOTc1NCAxMC4wNzQ2IDMuNTcyNjdDMTAuMTg3NiAzLjc0NzggMTAuMjQ0MSAzLjk0MjE5IDEwLjI0NDEgNC4xNTU4NUMxMC4yNDQxIDQuMzY5NSAxMC4xODc2IDQuNTYzOSAxMC4wNzQ2IDQuNzM5MDNDOS45NjU0NiA0LjkxNDE1IDkuODE2NzUgNS4wNTQyNiA5LjYyODUgNS4xNTkzM0M5LjQ0MDI2IDUuMjYwOTEgOS4yMzEzIDUuMzExNjkgOS4wMDE2NCA1LjMxMTY5WiJ9KX0pfWZ1bmN0aW9uIGQzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMjYgMSAxMiAxNCIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNMzMuMjQzNyA0LjU4NDU5QzMzLjAwMDggNC41ODQ1OSAzMi43ODE3IDQuNTI3MjggMzIuNTg2NiA0LjQxMjY4QzMyLjM5MTUgNC4yOTQxMiAzMi4yMzQyIDQuMTM4MDEgMzIuMTE0NyAzLjk0NDM3QzMxLjk5OTIgMy43NDY3NyAzMS45NDE0IDMuNTI5NDEgMzEuOTQxNCAzLjI5MjI5QzMxLjk0MTQgMy4wNTEyMiAzMS45OTkyIDIuODMzODcgMzIuMTE0NyAyLjY0MDIyQzMyLjIzNDIgMi40NDY1NyAzMi4zOTE1IDIuMjkyNDUgMzIuNTg2NiAyLjE3Nzg0QzMyLjc4MTcgMi4wNTkyOCAzMy4wMDA4IDIgMzMuMjQzNyAyQzMzLjQ4MjYgMiAzMy42OTk3IDIuMDU5MjggMzMuODk0OCAyLjE3Nzg0QzM0LjA5MzkgMi4yOTI0NSAzNC4yNTEyIDIuNDQ2NTcgMzQuMzY2NyAyLjY0MDIyQzM0LjQ4NjIgMi44MzM4NyAzNC41NDU5IDMuMDUxMjIgMzQuNTQ1OSAzLjI5MjI5QzM0LjU0NTkgMy41Mjk0MSAzNC40ODYyIDMuNzQ2NzcgMzQuMzY2NyAzLjk0NDM3QzM0LjI1MTIgNC4xMzgwMSAzNC4wOTM5IDQuMjk0MTIgMzMuODk0OCA0LjQxMjY4QzMzLjY5OTcgNC41MjcyOCAzMy40ODI2IDQuNTg0NTkgMzMuMjQzNyA0LjU4NDU5Wk0zMS4yMDA3IDkuNzQxOTFDMzEuMDczMyA5LjY3MDc3IDMwLjk0MTkgOS41OTU2OCAzMC44MDY1IDkuNTE2NjRDMzAuNjc1IDkuNDM3NiAzMC41NTk2IDkuMzQyNzYgMzAuNDYgOS4yMzIxQzMwLjM2MDQgOS4xMTc0OSAzMC4yOTI3IDguOTc3MiAzMC4yNTY5IDguODExMjJDMzAuMjI1IDguNjQxMjggMzAuMjQ0OSA4LjQyOTg1IDMwLjMxNjYgOC4xNzY5M0wzMC44MDY1IDYuNDgxNTNDMzAuODM4MyA2LjM2NjkyIDMwLjgxODQgNi4yNzk5OCAzMC43NDY3IDYuMjIwN0MzMC42NzkgNi4xNTc0NyAzMC41OTc0IDYuMTI5ODEgMzAuNTAxOCA2LjEzNzcxTDI5LjY1OTUgNi4xOTY5OUwyOS40MDI3IDcuOTIyMDJDMjkuMzc4OCA4LjEwNzc3IDI5LjMxNTEgOC4yNDYwOSAyOS4yMTE1IDguMzM2OThDMjkuMTA4IDguNDI3ODggMjguOTcyNiA4LjQ2NTQyIDI4LjgwNTMgOC40NDk2MUMyOC42NDIgOC40MzM4IDI4LjUxODYgOC4zNjY2MiAyOC40MzQ5IDguMjQ4MDZDMjguMzUxMyA4LjEyOTUgMjguMzIxNCA3Ljk3NzM1IDI4LjM0NTMgNy43OTE2MUwyOC42MjYxIDUuNjgxMjZDMjguNjUgNS41MTEzMiAyOC43MTU3IDUuMzc0OTggMjguODIzMiA1LjI3MjIzQzI4LjkzMDggNS4xNjk0OCAyOS4wNjgxIDUuMTEyMTcgMjkuMjM1NCA1LjEwMDMyTDMxLjMzMjEgNC45NTIxMkMzMS44ODE3IDQuOTEyNiAzMi4zMzU3IDQuOTY5OSAzMi42OTQxIDUuMTI0MDNDMzMuMDUyNSA1LjI3ODE2IDMzLjM2NzEgNS41Mzg5OSAzMy42Mzc5IDUuOTA2NTJMMzQuNjcxNCA3LjMyMzNMMzYuMTcwOCA2LjY2NTNDMzYuMzM4IDYuNTkwMjEgMzYuNDg5MyA2LjU3NDQgMzYuNjI0OCA2LjYxNzg3QzM2Ljc2MDIgNi42NTczOSAzNi44NjU3IDYuNzUyMjQgMzYuOTQxNCA2LjkwMjQyQzM3LjAxMyA3LjA1MjU5IDM3LjAxOSA3LjE5NDg2IDM2Ljk1OTMgNy4zMjkyM0MzNi45MDM1IDcuNDYzNiAzNi43OTIgNy41NjgzMiAzNi42MjQ4IDcuNjQzNDFMMzQuNzMxMSA4LjQ3OTI1QzM0LjYwMzcgOC41Mzg1MyAzNC40NzQzIDguNTUwMzkgMzQuMzQyOCA4LjUxNDgyQzM0LjIxNTQgOC40NzUzIDM0LjExMzggOC40MDAyMSAzNC4wMzgyIDguMjg5NTZMMzMuMzgxMSA3LjMzNTE2QzMzLjMxMzQgNy4yNDAzMSAzMy4yMjk4IDcuMTk4ODEgMzMuMTMwMiA3LjIxMDY3QzMzLjAzMDYgNy4yMjI1MyAzMi45NjQ5IDcuMjgzNzggMzIuOTMzMSA3LjM5NDQ0TDMyLjQ5MSA4LjkyOTc4TDM0LjczMTEgMTAuMzg4MUMzNC44NDI2IDEwLjQ1OTIgMzQuOTIyMyAxMC41NTYgMzQuOTcwMSAxMC42Nzg1QzM1LjAxNzkgMTAuODAxIDM1LjAyOTggMTAuOTI1NSAzNS4wMDU5IDExLjA1MkMzNC45ODYgMTEuMTc0NSAzNC45MjgyIDExLjI3NTMgMzQuODMyNyAxMS4zNTQzTDMyLjc3MTggMTMuMDk3MUMzMi42MDg1IDEzLjIzNTQgMzIuNDQ1MiAxMy4yOTg3IDMyLjI4MTkgMTMuMjg2OEMzMi4xMjI2IDEzLjI3NSAzMS45OTMyIDEzLjIxMzcgMzEuODkzNyAxMy4xMDMxQzMxLjc5ODEgMTIuOTk2NCAzMS43NTQzIDEyLjg2NTkgMzEuNzYyMiAxMi43MTE4QzMxLjc3MDIgMTIuNTUzNyAzMS44NTM4IDEyLjQwNzUgMzIuMDEzMSAxMi4yNzMxTDMzLjQ4ODYgMTEuMDE2NEwzMS4yMDA3IDkuNzQxOTFaTTI3LjIwNDQgMTQuODYzN0MyNy4wODQ5IDE0Ljc1NyAyNy4wMTcyIDE0LjYxODYgMjcuMDAxMyAxNC40NDg3QzI2Ljk4OTMgMTQuMjc4OCAyNy4wNjEgMTQuMTE2NyAyNy4yMTYzIDEzLjk2MjZMMjkuMjIzNSAxMS45NzY3TDI5LjkzNDMgOS40ODEwOEMzMC4wNDE4IDkuNjE1NDQgMzAuMTc1MyA5Ljc0NTg2IDMwLjMzNDUgOS44NzIzMkMzMC40OTc4IDkuOTk0ODMgMzAuNjkzIDEwLjExNzMgMzAuOTIgMTAuMjM5OUwzMS4xMTcxIDEwLjM0NjZMMzAuMzA0NyAxMi40MzMyQzMwLjI1MjkgMTIuNTU1NyAzMC4yMDkxIDEyLjY0MDcgMzAuMTczMyAxMi42ODgxQzMwLjE0MTQgMTIuNzM1NSAzMC4wODU2IDEyLjc5ODggMzAuMDA2IDEyLjg3NzhMMjguMDcwNiAxNC43ODA3QzI3LjkxOTIgMTQuOTI2OSAyNy43NjM5IDE1IDI3LjYwNDYgMTVDMjcuNDQ5MyAxNSAyNy4zMTU5IDE0Ljk1NDYgMjcuMjA0NCAxNC44NjM3WiJ9KX0pfWZ1bmN0aW9uIGMzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNDkgMyAxNiAxMiIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNNTcuMDAyOCAxMS45NDlDNTYuODQ4IDExLjk0OSA1Ni43MTcyIDExLjg5ODcgNTYuNjEwMyAxMS43OThDNTYuNTAzNSAxMS42OTM5IDU2LjQ1MDEgMTEuNTcwNyA1Ni40NTAxIDExLjQyODRWOS4wMjg2M0w1NC40MjE2IDcuMTA3NzZDNTQuMjIyNyA2LjkyMDM1IDU0LjA5NTUgNi42OTgyNSA1NC4wNDAzIDYuNDQxNDRDNTMuOTg1IDYuMTgxMTYgNTQuMDEwOCA1LjkyNzgyIDU0LjExNzYgNS42ODE0MkM1NC4yMjgyIDUuNDM4NDkgNTQuMzk3NyA1LjI0NDE0IDU0LjYyNjEgNS4wOTgzOUM1NC44NTgzIDQuOTQ5MTYgNTUuMTE2MiA0Ljg3NDU0IDU1LjM5OTkgNC44NzQ1NEg1OC4xMTM3QzU4LjQyMzIgNC44NzQ1NCA1OC42ODQ4IDQuOTc2OTIgNTguODk4NSA1LjE4MTY4QzU5LjExNTkgNS4zODI5NiA1OS4yMjQ2IDUuNjI5MzYgNTkuMjI0NiA1LjkyMDg3VjcuNzYzNjZINjAuODk5M0M2MS4wNTA0IDcuNzYzNjYgNjEuMTc5NCA3LjgxMzk5IDYxLjI4NjIgNy45MTQ2M0M2MS4zOTMxIDguMDE1MjcgNjEuNDQ2NSA4LjEzODQ3IDYxLjQ0NjUgOC4yODQyM0M2MS40NDY1IDguNDI2NTEgNjEuMzkzMSA4LjU0Nzk4IDYxLjI4NjIgOC42NDg2MkM2MS4xNzk0IDguNzQ5MjYgNjEuMDUwNCA4Ljc5OTU4IDYwLjg5OTMgOC43OTk1OEg1OC42NzE5QzU4LjUyMDkgOC43OTk1OCA1OC4zOTAxIDguNzQ5MjYgNTguMjc5NSA4LjY0ODYyQzU4LjE3MjcgOC41NDc5OCA1OC4xMTkyIDguNDI2NTEgNTguMTE5MiA4LjI4NDIzVjYuOTg4MDNDNTguMTE5MiA2LjkxODYyIDU4LjA5OSA2Ljg1NDQyIDU4LjA1ODQgNi43OTU0MkM1OC4wMTc5IDYuNzMyOTUgNTcuOTQ0MiA2LjcwMTcyIDU3LjgzNzMgNi43MDE3Mkg1Ni4wNjMyQzU1Ljk5MzIgNi43MDE3MiA1NS45NDUzIDYuNzI5NDggNTUuOTE5NSA2Ljc4NTAxQzU1Ljg5NzQgNi44MzcwNiA1NS45MDg0IDYuODg3MzkgNTUuOTUyNiA2LjkzNTk3TDU3LjQwMDcgOC40NTYwMUM1Ny41MDM5IDguNTYzNiA1Ny41NTU1IDguNjgxNTkgNTcuNTU1NSA4LjgwOTk5VjExLjQyODRDNTcuNTU1NSAxMS41NzA3IDU3LjUwMDIgMTEuNjkzOSA1Ny4zODk3IDExLjc5OEM1Ny4yODI4IDExLjg5ODcgNTcuMTUzOCAxMS45NDkgNTcuMDAyOCAxMS45NDlaTTUzLjAwMTIgMTRDNTIuNTg0OCAxNCA1Mi4xOTQyIDEzLjkyNzEgNTEuODI5NSAxMy43ODE0QzUxLjQ2ODQgMTMuNjM1NiA1MS4xNDk2IDEzLjQzMjYgNTAuODczMyAxMy4xNzIzQzUwLjYwMDYgMTIuOTEyIDUwLjM4NjkgMTIuNjExOCA1MC4yMzIxIDEyLjI3MTdDNTAuMDc3NCAxMS45MjgyIDUwIDExLjU2MDMgNTAgMTEuMTY4MUM1MCAxMC43NzYgNTAuMDc3NCAxMC40MDk5IDUwLjIzMjEgMTAuMDY5OEM1MC4zODY5IDkuNzI2MTggNTAuNjAwNiA5LjQyNDI2IDUwLjg3MzMgOS4xNjM5OEM1MS4xNDk2IDguOTAzNyA1MS40Njg0IDguNzAwNjggNTEuODI5NSA4LjU1NDkyQzUyLjE5NDIgOC40MDkxNiA1Mi41ODQ4IDguMzM2MjggNTMuMDAxMiA4LjMzNjI4QzUzLjQyMTIgOC4zMzYyOCA1My44MTE4IDguNDA5MTYgNTQuMTcyOSA4LjU1NDkyQzU0LjUzNzcgOC43MDA2OCA1NC44NTY0IDguOTAzNyA1NS4xMjkxIDkuMTYzOThDNTUuNDA1NCA5LjQyNDI2IDU1LjYyMSA5LjcyNjE4IDU1Ljc3NTggMTAuMDY5OEM1NS45MzA1IDEwLjQwOTkgNTYuMDA3OSAxMC43NzYgNTYuMDA3OSAxMS4xNjgxQzU2LjAwNzkgMTEuNTYwMyA1NS45MzA1IDExLjkyODIgNTUuNzc1OCAxMi4yNzE3QzU1LjYyMSAxMi42MTE4IDU1LjQwNTQgMTIuOTEyIDU1LjEyOTEgMTMuMTcyM0M1NC44NTY0IDEzLjQzMjYgNTQuNTM3NyAxMy42MzU2IDU0LjE3MjkgMTMuNzgxNEM1My44MTE4IDEzLjkyNzEgNTMuNDIxMiAxNCA1My4wMDEyIDE0Wk01My4wMDEyIDEzLjI2NkM1My40MTAyIDEzLjI2NiA1My43ODIzIDEzLjE3MDYgNTQuMTE3NiAxMi45Nzk3QzU0LjQ1NjYgMTIuNzkyMyA1NC43MjU2IDEyLjU0MDcgNTQuOTI0NiAxMi4yMjQ5QzU1LjEyNzMgMTEuOTA1NiA1NS4yMjg2IDExLjU1MzQgNTUuMjI4NiAxMS4xNjgxQzU1LjIyODYgMTAuNzgyOSA1NS4xMjczIDEwLjQzMjQgNTQuOTI0NiAxMC4xMTY2QzU0LjcyNTYgOS43OTczMyA1NC40NTY2IDkuNTQzOTkgNTQuMTE3NiA5LjM1NjU5QzUzLjc4MjMgOS4xNjU3MSA1My40MTAyIDkuMDcwMjggNTMuMDAxMiA5LjA3MDI4QzUyLjU5NTkgOS4wNzAyOCA1Mi4yMjM3IDkuMTY1NzEgNTEuODg0NyA5LjM1NjU5QzUxLjU0OTQgOS41NDM5OSA1MS4yODA0IDkuNzk3MzMgNTEuMDc3OCAxMC4xMTY2QzUwLjg3ODggMTAuNDMyNCA1MC43NzkzIDEwLjc4MjkgNTAuNzc5MyAxMS4xNjgxQzUwLjc3OTMgMTEuNTUzNCA1MC44Nzg4IDExLjkwNTYgNTEuMDc3OCAxMi4yMjQ5QzUxLjI4MDQgMTIuNTQwNyA1MS41NDk0IDEyLjc5MjMgNTEuODg0NyAxMi45Nzk3QzUyLjIyMzcgMTMuMTcwNiA1Mi41OTU5IDEzLjI2NiA1My4wMDEyIDEzLjI2NlpNNjIuNDgwMSA5LjYxMTY2QzYyLjM2MjIgOS41MTQ0OSA2Mi4zMDE0IDkuNDE1NTggNjIuMjk3NyA5LjMxNDk0QzYyLjI5NzcgOS4yMTA4MyA2Mi4zMzA4IDkuMTI0MDcgNjIuMzk3MiA5LjA1NDY2QzYyLjQ2NzIgOC45ODUyNSA2Mi41NTM4IDguOTQ1MzQgNjIuNjU2OSA4LjkzNDkzQzYyLjc2MzggOC45MjEwNSA2Mi44Njg4IDguOTU1NzUgNjIuOTcyIDkuMDM5MDRDNjMuMjg4OSA5LjMwMjc5IDYzLjUzOTQgOS42MTY4NyA2My43MjM2IDkuOTgxMjZDNjMuOTA3OSAxMC4zNDU3IDY0IDEwLjc0MTMgNjQgMTEuMTY4MUM2NCAxMS41NjAzIDYzLjkyMjYgMTEuOTI4MiA2My43Njc5IDEyLjI3MTdDNjMuNjEzMSAxMi42MTE4IDYzLjM5NzYgMTIuOTEyIDYzLjEyMTIgMTMuMTcyM0M2Mi44NDg1IDEzLjQzMjYgNjIuNTI5OCAxMy42MzU2IDYyLjE2NSAxMy43ODE0QzYxLjgwMzkgMTMuOTI3MSA2MS40MTUyIDE0IDYwLjk5ODggMTRDNjAuNTgyNCAxNCA2MC4xOTE5IDEzLjkyNzEgNTkuODI3MSAxMy43ODE0QzU5LjQ2MjMgMTMuNjM1NiA1OS4xNDE3IDEzLjQzMjYgNTguODY1NCAxMy4xNzIzQzU4LjU5MjcgMTIuOTEyIDU4LjM3OSAxMi42MTE4IDU4LjIyNDIgMTIuMjcxN0M1OC4wNjk1IDExLjkyODIgNTcuOTkyMSAxMS41NjAzIDU3Ljk5MjEgMTEuMTY4MUM1Ny45OTIxIDEwLjk2MzQgNTguMDE0MiAxMC43NjU2IDU4LjA1ODQgMTAuNTc0N0M1OC4xMDYzIDEwLjM4MDQgNTguMTcyNyAxMC4xOTMgNTguMjU3NCAxMC4wMTI1QzU4LjMwOSA5LjkwMTQ0IDU4LjM4MDggOS44MzAzIDU4LjQ3MyA5Ljc5OTA2QzU4LjU2ODggOS43NjQzNiA1OC42NjI3IDkuNzY0MzYgNTguNzU0OCA5Ljc5OTA2QzU4Ljg1MDYgOS44MzAzIDU4LjkyMjUgOS44OTI3NiA1OC45NzA0IDkuOTg2NDdDNTkuMDE4MyAxMC4wODAyIDU5LjAxMDkgMTAuMTk4MiA1OC45NDgzIDEwLjM0MDRDNTguODMwNCAxMC42MDA3IDU4Ljc3MTQgMTAuODc2NiA1OC43NzE0IDExLjE2ODFDNTguNzcxNCAxMS41NTM0IDU4Ljg3MDkgMTEuOTA1NiA1OS4wNjk5IDEyLjIyNDlDNTkuMjcyNSAxMi41NDA3IDU5LjU0MTUgMTIuNzkyMyA1OS44NzY4IDEyLjk3OTdDNjAuMjE1OCAxMy4xNzA2IDYwLjU4OTggMTMuMjY2IDYwLjk5ODggMTMuMjY2QzYxLjQwNzggMTMuMjY2IDYxLjc4IDEzLjE3MDYgNjIuMTE1MyAxMi45Nzk3QzYyLjQ1MDYgMTIuNzkyMyA2Mi43MTc3IDEyLjU0MDcgNjIuOTE2NyAxMi4yMjQ5QzYzLjExOTQgMTEuOTA1NiA2My4yMjA3IDExLjU1MzQgNjMuMjIwNyAxMS4xNjgxQzYzLjIyMDcgMTAuODU5MyA2My4xNTI1IDEwLjU3MTIgNjMuMDE2MiAxMC4zMDRDNjIuODgzNSAxMC4wMzMzIDYyLjcwNDggOS44MDI1MyA2Mi40ODAxIDkuNjExNjZaTTYwLjk5ODggNi4yNzQ4NkM2MC43NzQgNi4yNzQ4NiA2MC41Njk1IDYuMjI0NTQgNjAuMzg1MyA2LjEyMzg5QzYwLjIwMTEgNi4wMTk3OCA2MC4wNTM3IDUuODgyNyA1OS45NDMyIDUuNzEyNjVDNTkuODM2MyA1LjUzOTEzIDU5Ljc4MjkgNS4zNDY1MiA1OS43ODI5IDUuMTM0ODNDNTkuNzgyOSA0LjkyNjYgNTkuODM2MyA0LjczNzQ2IDU5Ljk0MzIgNC41Njc0MUM2MC4wNTM3IDQuMzkzODkgNjAuMjAxMSA0LjI1NjgxIDYwLjM4NTMgNC4xNTYxN0M2MC41Njk1IDQuMDUyMDYgNjAuNzc0IDQgNjAuOTk4OCA0QzYxLjIxOTkgNCA2MS40MjA3IDQuMDUyMDYgNjEuNjAxMyA0LjE1NjE3QzYxLjc4MTggNC4yNTY4MSA2MS45MjU1IDQuMzkzODkgNjIuMDMyNCA0LjU2NzQxQzYyLjE0MjkgNC43Mzc0NiA2Mi4xOTgyIDQuOTI2NiA2Mi4xOTgyIDUuMTM0ODNDNjIuMTk4MiA1LjM0NjUyIDYyLjE0MjkgNS41MzkxMyA2Mi4wMzI0IDUuNzEyNjVDNjEuOTI1NSA1Ljg4MjcgNjEuNzgxOCA2LjAxOTc4IDYxLjYwMTMgNi4xMjM4OUM2MS40MjA3IDYuMjI0NTQgNjEuMjE5OSA2LjI3NDg2IDYwLjk5ODggNi4yNzQ4NloifSl9KX1mdW5jdGlvbiBvMygpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTYiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjcwIDUgMTggOSIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNODUuNTcyIDEyLjEwMzhDODYuMDYgMTIuMTAzOCA4Ni40MjA3IDExLjk4OTIgODYuNjU0MiAxMS43NjAxQzg2Ljg4NDcgMTEuNTI4MSA4NyAxMS4xNjQxIDg3IDEwLjY2ODFWMTAuMTExMkM4NyA5Ljc2OTAxIDg2LjkyMDcgOS40NjMwMiA4Ni43NjIgOS4xOTMyOUM4Ni42MDMzIDguOTIwNjUgODYuMzc1OCA4LjY5NzMzIDg2LjA3OTQgOC41MjMzMUM4NS43ODAxIDguMzQ5MjkgODUuNDIyMyA4LjIzNzYyIDg1LjAwNjIgOC4xODgzMkw4My4wMTY4IDcuOTUzMzlMODEuMTk4MSA2Ljg0ODM1QzgwLjkyMjcgNi42ODAxMyA4MC42NjA4IDYuNTQyMzcgODAuNDEyMyA2LjQzNTA1QzgwLjE2MDggNi4zMjQ4NCA3OS44OTc0IDYuMjM3ODMgNzkuNjIxOSA2LjE3NDAyQzc5LjM0NjUgNi4xMTAyMSA3OS4wMzgyIDYuMDY1MjYgNzguNjk2OSA2LjAzOTE1Qzc4LjM1MjYgNi4wMTMwNSA3Ny45NTE0IDYgNzcuNDkzNCA2SDc2LjgxMDhDNzYuMzg4NyA2IDc1Ljk5NSA2LjA0OTMxIDc1LjYyOTggNi4xNDc5MkM3NS4yNjE2IDYuMjQzNjMgNzQuOTE4OCA2LjM3MTI1IDc0LjYwMTUgNi41MzA3NkM3NC4yODExIDYuNjkwMjggNzMuOTg2MiA2Ljg2NTc2IDczLjcxNjggNy4wNTcxOEM3My40NDQ0IDcuMjQ4NiA3My4xOTU5IDcuNDM3MTIgNzIuOTcxNCA3LjYyMjc1TDcyLjI1NzQgNy44NTMzM0M3MS44MzIzIDcuOTg2NzQgNzEuNTE2NCA4LjE4Mzk3IDcxLjMwOTkgOC40NDVDNzEuMTAzMyA4LjcwMzEzIDcxIDkuMDMzNzcgNzEgOS40MzY5MlYxMC42NDJDNzEgMTEuMTQ2NyA3MS4xMTUzIDExLjUxNjUgNzEuMzQ1OCAxMS43NTE0QzcxLjU3NjMgMTEuOTg2MyA3MS45MzcgMTIuMTAzOCA3Mi40MjggMTIuMTAzOEg3Mi43MTU0QzcyLjcwMDQgMTIuMDM3MSA3Mi42ODg1IDExLjk3MDQgNzIuNjc5NSAxMS45MDM3QzcyLjY3MDUgMTEuODM0MSA3Mi42NjYgMTEuNzY0NSA3Mi42NjYgMTEuNjk0OEM3Mi42NjYgMTEuMzU1NSA3Mi43NDk4IDExLjA0OTUgNzIuOTE3NSAxMC43NzY5QzczLjA4NTEgMTAuNTA0MiA3My4zMTEyIDEwLjI4ODIgNzMuNTk1NiAxMC4xMjg3QzczLjg3NyA5Ljk2NjIzIDc0LjE5MjggOS44ODUwMiA3NC41NDMxIDkuODg1MDJDNzQuODkwNCA5Ljg4NTAyIDc1LjIwNjIgOS45NjYyMyA3NS40OTA2IDEwLjEyODdDNzUuNzcyIDEwLjI4ODIgNzUuOTk2NSAxMC41MDQyIDc2LjE2NDIgMTAuNzc2OUM3Ni4zMzE4IDExLjA0OTUgNzYuNDE1NyAxMS4zNTU1IDc2LjQxNTcgMTEuNjk0OEM3Ni40MTU3IDExLjc2NDUgNzYuNDExMiAxMS44MzQxIDc2LjQwMjIgMTEuOTAzN0M3Ni4zOTMyIDExLjk3MDQgNzYuMzgyNyAxMi4wMzcxIDc2LjM3MDggMTIuMTAzOEg4MS42MzgyQzgxLjYyMDMgMTIuMDM3MSA4MS42MDgzIDExLjk3MDQgODEuNjAyMyAxMS45MDM3QzgxLjU5MzMgMTEuODM0MSA4MS41ODg4IDExLjc2NDUgODEuNTg4OCAxMS42OTQ4QzgxLjU4ODggMTEuMzU1NSA4MS42NzI3IDExLjA0OTUgODEuODQwMyAxMC43NzY5QzgyLjAwNSAxMC41MDQyIDgyLjIyOTUgMTAuMjg4MiA4Mi41MTM5IDEwLjEyODdDODIuNzk1MyA5Ljk2NjIzIDgzLjExMTEgOS44ODUwMiA4My40NjE0IDkuODg1MDJDODMuODExNyA5Ljg4NTAyIDg0LjEyOSA5Ljk2NjIzIDg0LjQxMzQgMTAuMTI4N0M4NC42OTQ4IDEwLjI4ODIgODQuOTE5NCAxMC41MDQyIDg1LjA4NyAxMC43NzY5Qzg1LjI1MTcgMTEuMDQ5NSA4NS4zMzQgMTEuMzU1NSA4NS4zMzQgMTEuNjk0OEM4NS4zMzQgMTEuNzY0NSA4NS4zMzEgMTEuODM0MSA4NS4zMjUgMTEuOTAzN0M4NS4zMTYgMTEuOTcwNCA4NS4zMDQxIDEyLjAzNzEgODUuMjg5MSAxMi4xMDM4SDg1LjU3MlpNODMuNDYxNCAxM0M4My43MTI5IDEzIDgzLjk0MDQgMTIuOTQyIDg0LjE0NCAxMi44MjZDODQuMzQ3NiAxMi43MSA4NC41MDkyIDEyLjU1MzMgODQuNjI5IDEyLjM1NjFDODQuNzQ4NyAxMi4xNTg5IDg0LjgwODYgMTEuOTM4NSA4NC44MDg2IDExLjY5NDhDODQuODA4NiAxMS40NTEyIDg0Ljc0ODcgMTEuMjMwOCA4NC42MjkgMTEuMDMzNkM4NC41MDkyIDEwLjgzNjMgODQuMzQ3NiAxMC42Nzk3IDg0LjE0NCAxMC41NjM3QzgzLjk0MDQgMTAuNDQ3NyA4My43MTI5IDEwLjM4OTcgODMuNDYxNCAxMC4zODk3QzgzLjIwNjkgMTAuMzg5NyA4Mi45Nzc5IDEwLjQ0NzcgODIuNzc0MyAxMC41NjM3QzgyLjU3MDggMTAuNjc5NyA4Mi40MDkxIDEwLjgzNjMgODIuMjg5NCAxMS4wMzM2QzgyLjE2OTYgMTEuMjMwOCA4Mi4xMDk3IDExLjQ1MTIgODIuMTA5NyAxMS42OTQ4QzgyLjEwOTcgMTEuOTM4NSA4Mi4xNjk2IDEyLjE1ODkgODIuMjg5NCAxMi4zNTYxQzgyLjQwOTEgMTIuNTUzMyA4Mi41NzA4IDEyLjcxIDgyLjc3NDMgMTIuODI2QzgyLjk3NzkgMTIuOTQyIDgzLjIwNjkgMTMgODMuNDYxNCAxM1pNNzQuNTQzMSAxM0M3NC43OTQ2IDEzIDc1LjAyMjEgMTIuOTQyIDc1LjIyNTcgMTIuODI2Qzc1LjQyOTIgMTIuNzEgNzUuNTkwOSAxMi41NTMzIDc1LjcxMDYgMTIuMzU2MUM3NS44MzA0IDEyLjE1ODkgNzUuODkwMyAxMS45Mzg1IDc1Ljg5MDMgMTEuNjk0OEM3NS44OTAzIDExLjQ1MTIgNzUuODMwNCAxMS4yMzA4IDc1LjcxMDYgMTEuMDMzNkM3NS41OTA5IDEwLjgzNjMgNzUuNDI5MiAxMC42Nzk3IDc1LjIyNTcgMTAuNTYzN0M3NS4wMjIxIDEwLjQ0NzcgNzQuNzk0NiAxMC4zODk3IDc0LjU0MzEgMTAuMzg5N0M3NC4yODg2IDEwLjM4OTcgNzQuMDU5NiAxMC40NDc3IDczLjg1NiAxMC41NjM3QzczLjY1MjQgMTAuNjc5NyA3My40OTA4IDEwLjgzNjMgNzMuMzcxIDExLjAzMzZDNzMuMjUxMyAxMS4yMzA4IDczLjE5MTQgMTEuNDUxMiA3My4xOTE0IDExLjY5NDhDNzMuMTkxNCAxMS45Mzg1IDczLjI1MTMgMTIuMTU4OSA3My4zNzEgMTIuMzU2MUM3My40OTA4IDEyLjU1MzMgNzMuNjUyNCAxMi43MSA3My44NTYgMTIuODI2Qzc0LjA1OTYgMTIuOTQyIDc0LjI4ODYgMTMgNzQuNTQzMSAxM1oifSl9KX1mdW5jdGlvbiBhMCh7c2l6ZTokPTE4LHN0cm9rZVdpZHRoOko9Mn0pe3JldHVybiBaKGQyLHtzaXplOiQsc3Ryb2tlV2lkdGg6Sn0pfXZhciB0OT0iQWNjZXNzaWJpbGl0eSB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4iO2Z1bmN0aW9uIFM1KCQpe3JldHVybiAkPy5lcnJvcnM/LmluY2x1ZGVzKHQ5KT8/ITF9ZnVuY3Rpb24geDUoJCxKKXtpZigkPT09SilyZXR1cm4hMDtpZigkLmlkIT09Si5pZHx8JC5wYXRoIT09Si5wYXRofHwkLmxhYmVsIT09Si5sYWJlbHx8JC52YWx1ZSE9PUoudmFsdWV8fCQucm9sZSE9PUoucm9sZXx8JC50eXBlIT09Si50eXBlfHwkLmVuYWJsZWQhPT1KLmVuYWJsZWQpcmV0dXJuITE7bGV0IFE9JC5mcmFtZSxYPUouZnJhbWU7cmV0dXJuIFE9PT1YfHxRLng9PT1YLngmJlEueT09PVgueSYmUS53aWR0aD09PVgud2lkdGgmJlEuaGVpZ2h0PT09WC5oZWlnaHR9ZnVuY3Rpb24gajUoJCxKKXtsZXQgUT0kLmxhYmVsfHwkLnJvbGV8fGBlbGVtZW50ICR7SisxfWAsWD0kLnJvbGV8fCQudHlwZTtyZXR1cm57aWQ6JC5pZCxwYXRoOiQucGF0aCxsYWJlbDpRLHZhbHVlOiQudmFsdWUscm9sZTpYLHR5cGU6JC50eXBlLGVuYWJsZWQ6JC5lbmFibGVkLGZyYW1lOiQuZnJhbWV9fWZ1bmN0aW9uIGU5KCQsSil7bGV0IFE9TWF0aC5tYXgoMCwkLngpLFg9TWF0aC5tYXgoMCwkLnkpLEs9TWF0aC5taW4oSi53aWR0aCwkLngrJC53aWR0aCksWT1NYXRoLm1pbihKLmhlaWdodCwkLnkrJC5oZWlnaHQpLHE9TWF0aC5tYXgoMCxLLVEpLEc9TWF0aC5tYXgoMCxZLVgpO3JldHVybiBxPjAmJkc+MD97eDpRLHk6WCx3aWR0aDpxLGhlaWdodDpHfTpudWxsfWZ1bmN0aW9uIHMwKCQpe3JldHVybiAkLmlkfWZ1bmN0aW9uIGkzKCQpe3JldHVybmAkeyQueH0sJHskLnl9ICR7JC53aWR0aH14JHskLmhlaWdodH1gfWZ1bmN0aW9uICQ2KCQpe3JldHVybltgQVggbGFiZWw6ICR7JC5sYWJlbHx8IlVubGFiZWxlZCJ9YCwkLnJvbGU/YHJvbGU6ICR7JC5yb2xlfWA6IiIsJC50eXBlP2B0eXBlOiAkeyQudHlwZX1gOiIiLCQudmFsdWU/YHZhbHVlOiAkeyQudmFsdWV9YDoiIiwkLmlkP2BpZDogJHskLmlkfWA6IiIsYHBhdGg6ICR7JC5wYXRofWAsYGZyYW1lOiAke2kzKCQuZnJhbWUpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCI7ICIpfWZ1bmN0aW9uIGEyKCQpe3JldHVybiAkJiZ0eXBlb2YgJC5kZXZpY2U9PT0ic3RyaW5nIiYmdHlwZW9mICQudXJsPT09InN0cmluZyI/JDpudWxsfWZ1bmN0aW9uIEo2KCQpe2xldCBKPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi9zdHJlYW0ubWpwZWciKSxKLnNlYXJjaD0iIixKLmhhc2g9IiIsSi50b1N0cmluZygpfWZ1bmN0aW9uIHY1KCQpe2xldCBKPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi93ZWJydGMvb2ZmZXIiKSxKLnNlYXJjaD0iIixKLmhhc2g9IiIsSi50b1N0cmluZygpfWZ1bmN0aW9uIFE2KCQpe2xldCBKPW5ldyBVUkwodjUoJCkpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9vZmZlciQvLCIvY2xvc2UiKSxKLnRvU3RyaW5nKCl9ZnVuY3Rpb24gWjYoJCl7bGV0IEo9bmV3IFVSTCh2NSgkKSk7cmV0dXJuIEoucGF0aG5hbWU9Si5wYXRobmFtZS5yZXBsYWNlKC9cL29mZmVyJC8sIi9zdGF0cyIpLEoudG9TdHJpbmcoKX1mdW5jdGlvbiBYNigkLEope2xldCBRPW5ldyBVUkwoJCk7cmV0dXJuIFEuc2VhcmNoUGFyYW1zLnNldCgic2Vzc2lvbklkIixKKSxRLnRvU3RyaW5nKCl9ZnVuY3Rpb24gYjEoJCl7bGV0IFE9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiBRPT09Ii8iP2AvJHskfWA6YCR7UX0vJHskfWB9dmFyIElKPTUwMDAsd0o9MjAwMCxzMj1udWxsLG4zPW51bGwsRUo9MSxiSj0xLEgyPW5ldyBNYXAsTDI9bmV3IE1hcDtmdW5jdGlvbiB5Sigpe2xldCAkPW5ldyBVUkwoYjEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gU0ooJCl7Zm9yKGxldCBKIG9mIEgyLnZhbHVlcygpKUoucmVqZWN0KCQpO0gyLmNsZWFyKCl9ZnVuY3Rpb24gSzYoKXtyZXR1cm4gczI/Pz1uZXcgUHJvbWlzZSgoJCxKKT0+e2xldCBRPSExLFg7dHJ5e1g9bmV3IFdlYlNvY2tldCh5SigpKX1jYXRjaChxKXtzMj1udWxsLEoocSk7cmV0dXJufWxldCBLPXNldFRpbWVvdXQoKCk9PntpZighUSlRPSEwLHMyPW51bGwsSihFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFguY2xvc2UoKX0sSUopO1gub25vcGVuPSgpPT57WC5zZW5kKEpTT04uc3RyaW5naWZ5KHt0b2tlbjp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4/PyIifSkpfSxYLm9ubWVzc2FnZT0ocSk9PntsZXQgRzt0cnl7Rz1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoRy5yZWFkeSl7aWYoIVEpUT0hMCxjbGVhclRpbWVvdXQoSyksbjM9WCwkKFgpO3JldHVybn1pZih0eXBlb2YgRy5zdWI9PT0ibnVtYmVyIil7bGV0IE49TDIuZ2V0KEcuc3ViKTtpZighTilyZXR1cm47aWYoRy5lbmQpTDIuZGVsZXRlKEcuc3ViKSxOLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgRy5kYXRhPT09InN0cmluZyIpTi5vbkRhdGEoRy5kYXRhKTtyZXR1cm59aWYodHlwZW9mIEcuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IEI9SDIuZ2V0KEcuaWQpO2lmKCFCKXJldHVybjtIMi5kZWxldGUoRy5pZCksQi5yZXNvbHZlKEcpfTtsZXQgWT0oKT0+e3MyPW51bGwsbjM9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO1NKKHEpO2xldCBHPVsuLi5MMi52YWx1ZXMoKV07TDIuY2xlYXIoKTtmb3IobGV0IEIgb2YgRylCLm9uRW5kKCk7aWYoIVEpUT0hMCxjbGVhclRpbWVvdXQoSyksSihxKX07WC5vbmVycm9yPVksWC5vbmNsb3NlPVl9KSxzMn1hc3luYyBmdW5jdGlvbiBZNigkLEope2xldCBRPWF3YWl0IEs2KCk7aWYoUS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChYLEspPT57bGV0IFk9RUorKyxxPSgpPT57SDIuZGVsZXRlKFkpLEsoSj8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoSil7aWYoSi5hYm9ydGVkKXtxKCk7cmV0dXJufUouYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX1IMi5zZXQoWSx7cmVzb2x2ZTooRyk9PntKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWChHKX0scmVqZWN0OihHKT0+e0o/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxLKEcpfX0pLFEuc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24gSTEoJCxKKXtsZXQgUT1hd2FpdCBZNih7Y29tbWFuZDokfSxKPy5zaWduYWwpO3JldHVybntzdGRvdXQ6US5zdGRvdXQ/PyIiLHN0ZGVycjpRLnN0ZGVycj8/IiIsZXhpdENvZGU6US5leGl0Q29kZT8/MX19YXN5bmMgZnVuY3Rpb24gcjMoJCxKKXtsZXQgUT1hd2FpdCBZNih7dWk6JH0sSj8uc2lnbmFsKTtpZihRLmVycm9yKXRocm93IEVycm9yKFEuZXJyb3IpO3JldHVybiBRLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiBBMCgkKXtsZXQgSj17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sUT0hMSxYPW51bGwsSz1udWxsLFk9IiIscT0oTik9PntZKz1OLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCB6O3doaWxlKCh6PVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IFY9WS5zbGljZSgwLHopO1k9WS5zbGljZSh6KzIpO2xldCBIPVYuc3BsaXQoYApgKS5maWx0ZXIoKEMpPT5DLnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoQyk9PkMuc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKEgpSi5vbm1lc3NhZ2U/Lih7ZGF0YTpIfSl9fSxHPSgpPT57aWYoUXx8SylyZXR1cm47Si5vbmVycm9yPy4oKSxLPXNldFRpbWVvdXQoKCk9PntLPW51bGwsQigpfSx3Sil9LEI9YXN5bmMoKT0+e2lmKFEpcmV0dXJuO3RyeXtsZXQgTj1hd2FpdCBLNigpO2lmKFEpcmV0dXJuO1k9IiIsWD1iSisrLEwyLnNldChYLHtvbkRhdGE6cSxvbkVuZDpHfSksTi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WCxwYXRoOiR9KSl9Y2F0Y2h7RygpfX07cmV0dXJuIEIoKSxKLmNsb3NlPSgpPT57aWYoUT0hMCxLKWNsZWFyVGltZW91dChLKTtpZihYIT09bnVsbCl7TDIuZGVsZXRlKFgpO3RyeXtuMz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6WH0pKX1jYXRjaHt9WD1udWxsfX0sSn1mdW5jdGlvbiBPMSgkKXtyZXR1cm5gJyR7JC5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9ZnVuY3Rpb24gcTYoJCl7bGV0W0osUV09ayhudWxsKSxbWCxLXT1rKCJBWCBvZmYiKTtyZXR1cm4geSgoKT0+e2lmKCEkKXtRKG51bGwpLEsoIkFYIG9mZiIpO3JldHVybn1RKG51bGwpLEsoIkFYIHdhaXRpbmciKTtsZXQgWT1BMCgkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBHPUpTT04ucGFyc2UocS5kYXRhKTtRKEcpLEsoUzUoRyk/IkFYIHVuYXZhaWxhYmxlIjpgJHtHLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtLKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57SygiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90Okosc3RhdHVzOlh9fXZhciBhMz1PMCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxzMz1PMChudWxsKTtmdW5jdGlvbiBVMigpe3JldHVybiBGMChhMyl9ZnVuY3Rpb24gUjUoKXtsZXQgJD1GMChzMyk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIEc2PWkwKGZ1bmN0aW9uKHtlbGVtZW50OkosaW5kZXg6USxzY3JlZW46WCxoaWdobGlnaHRlZDpLLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpHfSl7bGV0IEI9czAoSiksTj1qNShKLFEpLHo9ZTkoSi5mcmFtZSxYKTtpZigheilyZXR1cm4gbnVsbDtsZXQgVj0kNihOKTtyZXR1cm4gWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOkIsImRhdGEtYXgtaWQiOk4uaWQsImRhdGEtYXgtcGF0aCI6Ti5wYXRoLCJkYXRhLWF4LWxhYmVsIjpOLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpOLnZhbHVlLCJkYXRhLWF4LXJvbGUiOk4ucm9sZSwiZGF0YS1heC10eXBlIjpOLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKE4uZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOmkzKE4uZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOkoubGFiZWx8fFYsdGl0bGU6VixvbkNsaWNrOigpPT5HKEIpLG9uTW91c2VFbnRlcjooKT0+cShCKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHt6LngvWC53aWR0aCoxMDB9JWAsdG9wOmAke3oueS9YLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7ei53aWR0aC9YLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7ei5oZWlnaHQvWC5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOks/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6Sz8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsSik9PiQuaW5kZXg9PT1KLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09Si5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PUouc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1KLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09Si5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1KLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09Si5zY3JlZW4uaGVpZ2h0JiZ4NSgkLmVsZW1lbnQsSi5lbGVtZW50KSk7ZnVuY3Rpb24gVjYoKXtsZXR7c25hcHNob3Q6JH09VTIoKSx7aGlnaGxpZ2h0ZWRLZXk6SixzZWxlY3RlZEtleTpRLHNldEhpZ2hsaWdodGVkS2V5Olgsc2V0U2VsZWN0ZWRLZXk6S309UjUoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChZLHEpPT57bGV0IEc9czAoWSk7cmV0dXJuIFooRzYse2VsZW1lbnQ6WSxpbmRleDpxLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpHPT09SixzZWxlY3RlZDpHPT09USxvbkhpZ2hsaWdodDpYLG9uU2VsZWN0Okt9LEcpfSl9KX1mdW5jdGlvbiBCNih7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpKfSl7bGV0e3NuYXBzaG90OlEsc3RhdHVzOlh9PXE2KCQpLFtLLFldPWsobnVsbCksW3EsR109ayhudWxsKTt5KCgpPT57aWYoISQpWShudWxsKSxHKG51bGwpfSxbJF0pO2xldCBCPWsxKCgpPT4oe3NuYXBzaG90OlEsc3RhdHVzOlh9KSxbUSxYXSksTj1rMSgoKT0+KHtoaWdobGlnaHRlZEtleTpLLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpHfSksW0sscV0pO3JldHVybiBaKGEzLHt2YWx1ZTpCLGNoaWxkcmVuOlooczMse3ZhbHVlOk4sY2hpbGRyZW46Sn0pfSl9ZnVuY3Rpb24gTjYoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOkosb25Ub2dnbGVPdmVybGF5OlF9KXtsZXR7c3RhdHVzOlh9PVUyKCksW0ssWV09ayghMSkscT0kJiZKO3JldHVybiBaKGMxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6WCxvbkNsaWNrOlEsb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6Sz8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOloobTAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gaDUoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIFooImEiLHtocmVmOiJodHRwczovL2V4cG8uZGV2L3NlcnZpY2VzL3NpbXVsYXRvcnMiLHRhcmdldDoiX2JsYW5rIixyZWw6Im5vcmVmZXJyZXIiLGNsYXNzTmFtZTpgaW5saW5lLWZsZXggaC1bMzBweF0gbWluLXctMCBpdGVtcy1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCBweC0xLjUgZm9udC1tb25vIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS82NSBuby11bmRlcmxpbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZS84NSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS13aGl0ZS82MCAkeyR9YC50cmltKCksImFyaWEtbGFiZWwiOiJPcGVuIEVBUyBTaW11bGF0b3IiLHRpdGxlOiJPcGVuIEVBUyBTaW11bGF0b3IiLGNoaWxkcmVuOiJFQVMgU2ltdWxhdG9yIn0pfWZ1bmN0aW9uIHo2KHtvcGVuOiQsb25DbGljazpKfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgbGVmdC0zIHotMzAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcC0xIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gJHskPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W1ooImJ1dHRvbiIse29uQ2xpY2s6SixjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46WihFMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxaKGg1LHt9KV19KX1mdW5jdGlvbiBMNigkLEope2xldCBRPW5ldyBNYXAoJC5tYXAoKEspPT5bSy5kZXZpY2UsS10pKSxYPVtdO2ZvcihsZXQgSyBvZiBKKXtsZXQgWT1RLmdldChLLmRldmljZSk7aWYoIVkpY29udGludWU7WC5wdXNoKHsuLi5ZLHN0YXRlOksuc3RhdGUsaGVscGVyOksuaGVscGVyfSksUS5kZWxldGUoSy5kZXZpY2UpfWZvcihsZXQgSyBvZiBRLnZhbHVlcygpKVgucHVzaCh7Li4uSyxzdGF0ZToiU2h1dGRvd24iLGhlbHBlcjpudWxsfSk7cmV0dXJuIFh9ZnVuY3Rpb24gSDYoJCxKLFEpe2lmKCQubGVuZ3RoPT09MClyZXR1cm4hMTtsZXQgWD1uZXcgU2V0KCQubWFwKChLKT0+Sy5kZXZpY2UpKTtyZXR1cm4gSi5zbGljZSgwLE1hdGgubWluKFEsSi5sZW5ndGgpKS5zb21lKChLKT0+IVguaGFzKEsuZGV2aWNlKSl9ZnVuY3Rpb24gVTYoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKXx8JDw9MClyZXR1cm4iMCBCIjtsZXQgSj0kLzEwNzM3NDE4MjQ7aWYoSj49MSlyZXR1cm5gJHtKLnRvRml4ZWQoSj49MTA/MDoxKX0gR0JgO3JldHVybmAkeygkLzEwNDg1NzYpLnRvRml4ZWQoMCl9IE1CYH1mdW5jdGlvbiBnNSgkKXtsZXQgSj0kLm1hdGNoKC9eKFthLXpBLVpdKyktKC4rKSQvKTtpZighSilyZXR1cm57b3M6JCx2ZXJzaW9uOiIifTtyZXR1cm57b3M6SlsxXSx2ZXJzaW9uOkpbMl0ucmVwbGFjZSgvLS9nLCIuIil9fWZ1bmN0aW9uIEM2KCQpe3JldHVybiBnNSgkKS52ZXJzaW9ufHwkfWZ1bmN0aW9uIGY1KCQpe2xldHtvczpKLHZlcnNpb246UX09ZzUoJCk7cmV0dXJuIFE/YCR7Sn0gJHtRfWA6Sn1mdW5jdGlvbiBwNSh7Y2hyb21lOiQsc2NyZWVuOkosaW50ZXJhY3RpdmU6UT0hMSxvbkJ1dHRvbjpYLG9uQ3Jvd25XaGVlbDpLfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCIsY2hpbGRyZW46WyQuYnV0dG9ucy5tYXAoKFkpPT5aKGpKLHtjaHJvbWU6JCxidXR0b246WSxpbnRlcmFjdGl2ZTpRLG9uQnV0dG9uOlgsb25XaGVlbDpRJiZZLm5hbWU9PT0iZGlnaXRhbC1jcm93biI/Szp2b2lkIDB9LGBidXR0b24tJHtZLm5hbWV9YCkpLCQuY29tcG9zaXRlSW1hZ2U/WihGNix7Y2hyb21lOiQsaW1hZ2U6JC5jb21wb3NpdGVJbWFnZSxyZWN0OiQuYm9keSx6SW5kZXg6MX0pOiQuc2xpY2UmJiQuY29ybmVyP1oodkose2Nocm9tZTokfSk6bnVsbCxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIG92ZXJmbG93LWhpZGRlbiBiZy1ibGFjayIsc3R5bGU6ey4uLnQzKCQsJC5zY3JlZW4sMiksYm9yZGVyUmFkaXVzOnhKKCQpfSxjaGlsZHJlbjpKfSldfSl9ZnVuY3Rpb24geEooJCl7cmV0dXJuYCR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4ud2lkdGgqMTAwfSUgLyAkeyQuc2NyZWVuUmFkaXVzLyQuc2NyZWVuLmhlaWdodCoxMDB9JWB9ZnVuY3Rpb24gakooe2Nocm9tZTokLGJ1dHRvbjpKLGludGVyYWN0aXZlOlEsb25CdXR0b246WCxvbldoZWVsOkt9KXtsZXRbWSxxXT1rKCExKSxbRyxCXT1rKCExKSxOPVQobnVsbCksej1UKG51bGwpLFY9VChLKTtWLmN1cnJlbnQ9Syx5KCgpPT57bGV0IHg9ei5jdXJyZW50O2lmKCF4fHwhSylyZXR1cm47bGV0IEQ9KG4pPT57bi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcFByb3BhZ2F0aW9uKCksVi5jdXJyZW50Py4obi5kZWx0YVksbi5kZWx0YU1vZGUpfTtyZXR1cm4geC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsRCx7cGFzc2l2ZTohMX0pLCgpPT54LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixEKX0sWyEhS10pO2xldCBIPVEmJkoudXNhZ2VQYWdlIT1udWxsJiZKLnVzYWdlIT1udWxsLEM9RSgoKT0+e2lmKE4uY3VycmVudD09PW51bGwpcmV0dXJuO04uY3VycmVudD1udWxsLEIoITEpLFg/Lih7cGhhc2U6InVwIixidXR0b246Sn0pfSxbSixYXSksQT1FKCh4KT0+e2lmKHguYnV0dG9uIT09MCYmeC5wb2ludGVyVHlwZT09PSJtb3VzZSIpcmV0dXJuO3gucHJldmVudERlZmF1bHQoKSx4LnN0b3BQcm9wYWdhdGlvbigpLE4uY3VycmVudD14LnBvaW50ZXJJZDt0cnl7eC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKHgucG9pbnRlcklkKX1jYXRjaHt9QighMCksWD8uKHtwaGFzZToiZG93biIsYnV0dG9uOkp9KX0sW0osWF0pLEw9Si5vblRvcD81OjAsVT1IJiYoWXx8RyksRj0oVT9KLmhvdmVyLng6MCkqMTAwLFc9KFU/Si5ob3Zlci55OjApKjEwMCx3PUcmJkouaW1hZ2VEb3duP0ouaW1hZ2VEb3duOkouaW1hZ2UsUD1IP3tvblBvaW50ZXJEb3duOkEsb25Qb2ludGVyVXA6QyxvblBvaW50ZXJDYW5jZWw6QyxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PntxKCExKSxDKCl9fTp7fTtyZXR1cm4gWigiZGl2Iix7cmVmOnoscm9sZTpIPyJidXR0b24iOnZvaWQgMCwiYXJpYS1sYWJlbCI6SD9PNihKLm5hbWUpOnZvaWQgMCwiYXJpYS1oaWRkZW4iOkg/dm9pZCAwOiEwLHRpdGxlOkg/TzYoSi5uYW1lKTp2b2lkIDAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLnQzKCQsSi5mcmFtZSxMKSx0cmFuc2Zvcm06Rnx8Vz9gdHJhbnNsYXRlKCR7Rn0lLCAke1d9JSlgOnZvaWQgMCx0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsY3Vyc29yOkg/InBvaW50ZXIiOnZvaWQgMCxwb2ludGVyRXZlbnRzOkg/ImF1dG8iOiJub25lIix0b3VjaEFjdGlvbjoibm9uZSJ9LC4uLlAsY2hpbGRyZW46dyYmWigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpBNigkLmlkZW50aWZpZXIsdyksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBzZWxlY3Qtbm9uZSIsc3R5bGU6e29iamVjdEZpdDoiZmlsbCIsZmlsdGVyOkcmJiFKLmltYWdlRG93bj8iYnJpZ2h0bmVzcygxLjQpIjp2b2lkIDAsdHJhbnNpdGlvbjoiZmlsdGVyIDAuMTJzIGVhc2UiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX0pfWZ1bmN0aW9uIE82KCQpe3JldHVybiAkLnNwbGl0KCItIikubWFwKChKKT0+Si5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStKLnNsaWNlKDEpKS5qb2luKCIgIil9ZnVuY3Rpb24gdkooe2Nocm9tZTokfSl7aWYoISQuc2xpY2V8fCEkLmNvcm5lcilyZXR1cm4gbnVsbDtsZXR7Ym9keTpKLGNvcm5lcjpRLHNsaWNlOlh9PSQsSz1NYXRoLm1heChKLndpZHRoLVEud2lkdGgqMiwwKSxZPU1hdGgubWF4KEouaGVpZ2h0LVEuaGVpZ2h0KjIsMCkscT1be2tleToidG9wLWxlZnQiLGltYWdlOlgudG9wTGVmdCxyZWN0Ont4OkoueCx5OkoueSx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6InRvcC1yaWdodCIsaW1hZ2U6WC50b3BSaWdodCxyZWN0Ont4OkoueCtKLndpZHRoLVEud2lkdGgseTpKLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20tbGVmdCIsaW1hZ2U6WC5ib3R0b21MZWZ0LHJlY3Q6e3g6Si54LHk6Si55K0ouaGVpZ2h0LVEuaGVpZ2h0LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLXJpZ2h0IixpbWFnZTpYLmJvdHRvbVJpZ2h0LHJlY3Q6e3g6Si54K0oud2lkdGgtUS53aWR0aCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6InRvcCIsaW1hZ2U6WC50b3AscmVjdDp7eDpKLngrUS53aWR0aCx5OkoueSx3aWR0aDpLLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbSIsaW1hZ2U6WC5ib3R0b20scmVjdDp7eDpKLngrUS53aWR0aCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpLLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImxlZnQiLGltYWdlOlgubGVmdCxyZWN0Ont4OkoueCx5OkoueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX0se2tleToicmlnaHQiLGltYWdlOlgucmlnaHQscmVjdDp7eDpKLngrSi53aWR0aC1RLndpZHRoLHk6Si55K1EuaGVpZ2h0LHdpZHRoOlEud2lkdGgsaGVpZ2h0Oll9fV07cmV0dXJuIFooSjEse2NoaWxkcmVuOnEuZmlsdGVyKChHKT0+Ry5yZWN0LndpZHRoPjAmJkcucmVjdC5oZWlnaHQ+MCkubWFwKChHKT0+WihGNix7Y2hyb21lOiQsaW1hZ2U6Ry5pbWFnZSxyZWN0OkcucmVjdCx6SW5kZXg6MX0sRy5rZXkpKX0pfWZ1bmN0aW9uIEY2KHtjaHJvbWU6JCxpbWFnZTpKLHJlY3Q6USx6SW5kZXg6WH0pe3JldHVybiBaKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkE2KCQuaWRlbnRpZmllcixKKSxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4udDMoJCxRLFgpLG9iamVjdEZpdDoiZmlsbCIscG9pbnRlckV2ZW50czoibm9uZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIEE2KCQsSil7bGV0IFE9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChKKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOmIxKFEpfWZ1bmN0aW9uIHQzKCQsSixRKXtyZXR1cm57bGVmdDptNShKLngsJC5mcmFtZS53aWR0aCksdG9wOm01KEoueSwkLmZyYW1lLmhlaWdodCksd2lkdGg6bTUoSi53aWR0aCwkLmZyYW1lLndpZHRoKSxoZWlnaHQ6bTUoSi5oZWlnaHQsJC5mcmFtZS5oZWlnaHQpLHpJbmRleDpRfX1mdW5jdGlvbiBtNSgkLEope3JldHVybmAkeyQvSioxMDB9JWB9ZnVuY3Rpb24gTTYoe25hbWU6JCxydW50aW1lOkosY2hyb21lOlEscGxhY2Vob2xkZXJBc3NldDpYLGJ1c3k6SyxidXN5TGFiZWw6WT0iU3RhcnRpbmfigKYiLGVycm9yOnEsb25TdGFydDpHfSl7bGV0IEI9dzAoJCksTj14MVtCXSx6PVg/P251bGwsVj16P251bGw6UT8/bnVsbCxIPVY/e3dpZHRoOlYuc2NyZWVuLndpZHRoLGhlaWdodDpWLnNjcmVlbi5oZWlnaHR9Ok4yKEIsJCksQz16MihCLEgpLEE9ej9SSihCLHoubmFtZSk6Vj9DKlYuZnJhbWUud2lkdGgvVi5zY3JlZW4ud2lkdGg6QypOLndpZHRoLyhOLndpZHRoLTIqTi5iZXplbFgpLEw9ej97d2lkdGg6ei53aWR0aCxoZWlnaHQ6ei5oZWlnaHR9OlY/e3dpZHRoOlYuZnJhbWUud2lkdGgsaGVpZ2h0OlYuZnJhbWUuaGVpZ2h0fTp7d2lkdGg6Ti53aWR0aCxoZWlnaHQ6Ti5oZWlnaHR9LFU9YCR7TC53aWR0aH0gLyAke0wuaGVpZ2h0fWAsRj0oTC53aWR0aC9MLmhlaWdodCpoSihCKSkudG9GaXhlZCgyKSxXPUI9PT0idmlzaW9uIj9aKG1KLHt9KTpaKGdKLHt0eXBlOkJ9KTtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtNSBtaW4tdy0wIHctZnVsbCIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIixzdHlsZTp7d2lkdGg6YG1pbigxMDAlLCAke0F9cHgsICR7Rn1kdmgpYCxtYXhXaWR0aDpBLGFzcGVjdFJhdGlvOlV9LGNoaWxkcmVuOno/WihmSix7bmFtZTp6Lm5hbWUsZmFsbGJhY2s6V30pOlY/WigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOloocDUse2Nocm9tZTpWfSl9KTpXfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTdweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjokfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbZjUoSiksIiBTaW11bGF0b3IiXX0pXX0pLHEmJlooImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTJweF0gZm9udC1tb25vIG1heC13LTkwIHRleHQtY2VudGVyIixjaGlsZHJlbjpxfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcsZGlzYWJsZWQ6SyxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTUgcHktMiByb3VuZGVkLWZ1bGwgdGV4dC1bMTRweF0gZm9udC1tZWRpdW0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtLPyJiZy13aGl0ZS84IHRleHQtd2hpdGUvNTUgY3Vyc29yLWRlZmF1bHQiOiJiZy13aGl0ZS8xMiB0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzE4IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltLJiZaKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InNpemUtMy41IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOSkifX0pLEs/WToiU3RhcnQiXX0pXX0pfWZ1bmN0aW9uIFJKKCQsSil7aWYoJD09PSJ3YXRjaCIpe2lmKEouaW5jbHVkZXMoInVsdHJhIikpcmV0dXJuIDI1NTtpZihKLmluY2x1ZGVzKCJ3YXRjaC1zZS0iKXx8Si5pbmNsdWRlcygiYXBwbGUtd2F0Y2gtc2UtIikpcmV0dXJuIDIzODtyZXR1cm4gMjUwfWlmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzkwO2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDM0MDtyZXR1cm4gMjgwfWZ1bmN0aW9uIGhKKCQpe2lmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzQ7aWYoJD09PSJpcGFkIilyZXR1cm4gNTA7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIDU2O3JldHVybiA1Mn1mdW5jdGlvbiBnSih7dHlwZTokfSl7bGV0IEo9eDFbJF07cmV0dXJuIFooSjEse2NoaWxkcmVuOltaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKLndpZHRofSAke0ouaGVpZ2h0fWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpaKCJsaW5lYXJHcmFkaWVudCIse2lkOiJwbGFjZWhvbGRlci1zY3JlZW4iLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzZmYThlNiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiI1NSUiLHN0b3BDb2xvcjoiIzViOTNkNiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiM1MTg4Y2YifSldfSl9KSxaKCJyZWN0Iix7eDpKLmJlemVsWCx5OkouYmV6ZWxZLHdpZHRoOkoud2lkdGgtMipKLmJlemVsWCxoZWlnaHQ6Si5oZWlnaHQtMipKLmJlemVsWSxyeDpKLmlubmVyUmFkaXVzLGZpbGw6InVybCgjcGxhY2Vob2xkZXItc2NyZWVuKSJ9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46WihUNSx7dHlwZTokfSl9KV19KX1mdW5jdGlvbiBmSih7bmFtZTokLGZhbGxiYWNrOkp9KXtsZXRbUSxYXT1rKCJsb2FkaW5nIik7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W1EhPT0ibG9hZGVkIiYmSixRIT09ImVycm9yIiYmWigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpwSigkKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIG9iamVjdC1jb250YWluIixzdHlsZTp7V2Via2l0VXNlckRyYWc6Im5vbmUifSxvbkxvYWQ6KCk9PlgoImxvYWRlZCIpLG9uRXJyb3I6KCk9PlgoImVycm9yIil9KV19KX1mdW5jdGlvbiBtSigpe2xldHt3aWR0aDokLGhlaWdodDpKfT14MS52aXNpb247cmV0dXJuIFooInN2ZyIse3ZpZXdCb3g6YDAgMCAkeyR9ICR7Sn1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6ITAsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W1ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyODI4MmIifSksWigic3RvcCIse29mZnNldDoiNTQlIixzdG9wQ29sb3I6IiMxMjEyMTQifSksWigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDcwNzA4In0pXX0pLFooImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltaKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMzEzNTNhIn0pLFooInN0b3AiLHtvZmZzZXQ6IjQ4JSIsc3RvcENvbG9yOiIjMGEwYjBkIn0pLFooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KSxaKCJyYWRpYWxHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItbGVucyIsY3g6IjUwJSIsY3k6IjQ2JSIscjoiNjAlIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzIwMjgzMiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiI3MiUiLHN0b3BDb2xvcjoiIzA5MGEwZCJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSldfSksWigicGF0aCIse2Q6Ik05NSAxNzdDOTUgMTE5IDE0NyA4NiAyMTggOTFDMjU3IDk0IDI4NiAxMTEgMzIwIDExMUMzNTQgMTExIDM4MyA5NCA0MjIgOTFDNDkzIDg2IDU0NSAxMTkgNTQ1IDE3N1YyMjJDNTQ1IDI3OCA1MDEgMzExIDQ0MyAzMTBDMzk4IDMwOSAzNzEgMjg2IDM0NSAyNjhDMzI5IDI1NyAzMTEgMjU3IDI5NSAyNjhDMjY5IDI4NiAyNDIgMzA5IDE5NyAzMTBDMTM5IDMxMSA5NSAyNzggOTUgMjIyVjE3N1oiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsKSIsc3Ryb2tlOiIjM2QzZDQyIixzdHJva2VXaWR0aDoiNyJ9KSxaKCJwYXRoIix7ZDoiTTExNyAxODFDMTE3IDEzNCAxNTcgMTEyIDIyMCAxMTZDMjYwIDExOSAyODcgMTM2IDMyMCAxMzZDMzUzIDEzNiAzODAgMTE5IDQyMCAxMTZDNDgzIDExMiA1MjMgMTM0IDUyMyAxODFWMjE3QzUyMyAyNjMgNDg4IDI4NyA0MzkgMjg3QzM5OSAyODcgMzY5IDI2NCAzNDUgMjUwQzMyOSAyNDAgMzExIDI0MCAyOTUgMjUwQzI3MSAyNjQgMjQxIDI4NyAyMDEgMjg3QzE1MiAyODcgMTE3IDI2MyAxMTcgMjE3VjE4MVoiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzKSIsc3Ryb2tlOiIjMTcxODFiIixzdHJva2VXaWR0aDoiNSJ9KSxaKCJwYXRoIix7ZDoiTTE0MyAxODZDMTQ1IDE0OCAxNzYgMTM1IDIyNiAxMzhDMjY0IDE0MSAyODkgMTU2IDMyMCAxNTZDMzUxIDE1NiAzNzYgMTQxIDQxNCAxMzhDNDY0IDEzNSA0OTUgMTQ4IDQ5NyAxODZWMjEzQzQ5NyAyNTAgNDY5IDI2NiA0MzIgMjY2QzM5NCAyNjYgMzY5IDI0NiAzNDMgMjM1QzMyOCAyMjkgMzEyIDIyOSAyOTcgMjM1QzI3MSAyNDYgMjQ2IDI2NiAyMDggMjY2QzE3MSAyNjYgMTQzIDI1MCAxNDMgMjEzVjE4NloiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMpIixzdHJva2U6IiMyNjJhMmYiLHN0cm9rZVdpZHRoOiIyIn0pLFooInBhdGgiLHtkOiJNMTUxIDE3MUMxNzkgMTUwIDIxNyAxNDcgMjUxIDE1NE0zODkgMTU0QzQyMyAxNDcgNDYxIDE1MCA0ODkgMTcxIixzdHJva2U6IiM0ZTUzNWEiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KSxaKCJwYXRoIix7ZDoiTTI3NyAyMzNDMjg5IDIyNCAzMDQgMjE5IDMyMCAyMTlDMzM2IDIxOSAzNTEgMjI0IDM2MyAyMzMiLHN0cm9rZToiIzNiNDA0NiIsc3Ryb2tlV2lkdGg6IjQiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pfWZ1bmN0aW9uIHBKKCQpe2xldCBKPWBncmlkL2FwaS9kZXZpY2UtcGxhY2Vob2xkZXItYXNzZXQ/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7Sn1gOmIxKEopfWZ1bmN0aW9uIEMyKHtvcGVuOiQsd2lkdGg6SixjaGlsZHJlbjpRLHN0eWxlOlgsc2lkZTpLPSJyaWdodCJ9KXtyZXR1cm4gWigiYXNpZGUiLHtjbGFzc05hbWU6YGZpeGVkIHotMzUgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gYmctcGFuZWwtYmcgdGV4dC13aGl0ZS85MCBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wgJHtLPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCBsZWZ0LTAgcm91bmRlZC1ub25lIGJvcmRlci0wIGJvcmRlci1yIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzhweF8wXzMycHhfcmdiYSgwLDAsMCwwLjM1KV0iOiJ0b3AtMyBib3R0b20tMyByaWdodC0zIHJvdW5kZWQtWzE0cHhdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSJ9YCxzdHlsZTp7d2lkdGg6Six0cmFuc2Zvcm06JD8idHJhbnNsYXRlWCgwKSI6Sz09PSJsZWZ0Ij8idHJhbnNsYXRlWCgtMTAwJSkiOiJ0cmFuc2xhdGVYKGNhbGMoMTAwJSArIDI0cHgpKSIsb3BhY2l0eTokPzE6MCxwb2ludGVyRXZlbnRzOiQ/ImF1dG8iOiJub25lIiwuLi5YfSwiYXJpYS1oaWRkZW4iOiEkLGNoaWxkcmVuOlF9KX1mdW5jdGlvbiBPMih7Y2hpbGRyZW46JCxzdHlsZTpKfSl7cmV0dXJuIFooImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yLjUgcHgtMi41IHB5LTEuNSBwbC0zIixzdHlsZTpKLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBrNih7Y2hpbGRyZW46JH0pe3JldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gdTUoe29uQ2xpY2s6JCxhcmlhTGFiZWw6Sj0iQ2xvc2UgcGFuZWwiLHRpdGxlOlEsaWNvblNpemU6WD0xNn0pe3JldHVybiBaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6JCxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgcC0wIHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjpKLHRpdGxlOlEsY2hpbGRyZW46WihMMCx7c2l6ZTpYLHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIFc2KCQsSil7bGV0W1EsWF09ayhudWxsKTtyZXR1cm4geSgoKT0+e2lmKCFKfHwhJClyZXR1cm47bGV0IEs9ITEsWT1hc3luYygpPT57dHJ5e2xldCBCPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFLKVgoQil9Y2F0Y2h7fX07WSgpO2xldCBxPXNldEludGVydmFsKFksNTAwMCk7cmV0dXJuKCk9PntLPSEwLGNsZWFySW50ZXJ2YWwocSl9fSxbJCxKXSksUX1mdW5jdGlvbiBfNih7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPT09MClyZXR1cm4gbnVsbDtsZXR7ZXN0aW1hdGVkQWRkaXRpb25hbDpKLGF2YWlsYWJsZUJ5dGVzOlEsdG90YWxCeXRlczpYLHJ1bm5pbmdTaW11bGF0b3JzOkt9PSQsWT1NYXRoLm1heCgwLE1hdGgubWluKDEsMS1RL1gpKSxxPUsrSixHPUo9PT0wPyIjZTY2IjpKPD0xPyIjZTlhMTNiIjoiIzNiMyIsQj1ZPjAuOT8iI2U2NiI6WT4wLjc1PyIjZTlhMTNiIjoiIzNiMyI7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggbWF4LXctZnVsbCBtaW4tdy0wIGZsZXgtbm93cmFwIGl0ZW1zLWNlbnRlciBnYXAtMS41IG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6R319KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIHRydW5jYXRlIixjaGlsZHJlbjpbWigic3BhbiIse2NoaWxkcmVuOltLLCIvIixxLCIgc2ltcyJdfSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80MCIsY2hpbGRyZW46IiDCtyAifSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W1U2KFEpLCIgZnJlZSJdfSldfSksWigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gc2hyaW5rLTAgYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhZKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOkJ9fSl9KV19KX1mdW5jdGlvbiBENih7dHlwZTokLHNpemU6Sj0yMCxzY3JlZW5PbjpRPSExfSl7bGV0IFg9e3dpZHRoOkosaGVpZ2h0Okosdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS42LHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpbUSYmWigicmVjdCIse3g6IjUiLHk6IjMiLHdpZHRoOiIxNSIsaGVpZ2h0OiIxOSIscng6IjEuNjUiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxaKCJyZWN0Iix7eDoiNCIseToiMi41Iix3aWR0aDoiMTYiLGhlaWdodDoiMTkiLHJ4OiIyLjUifSksWigibGluZSIse3gxOiIxMiIseTE6IjE4LjUiLHgyOiIxMiIseTI6IjE4LjUifSldfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFooInN2ZyIsey4uLlgsY2hpbGRyZW46W1ooInJlY3QiLHt4OiI2LjUiLHk6IjciLHdpZHRoOiIxMSIsaGVpZ2h0OiIxMCIscng6IjMifSksWigicGF0aCIse2Q6Ik04LjUgN2wuNi0zLjJBMS41IDEuNSAwIDAgMSAxMC42IDIuNWgyLjhhMS41IDEuNSAwIDAgMSAxLjUgMS4zTDE1LjUgNyJ9KSxaKCJwYXRoIix7ZDoiTTguNSAxN2wuNiAzLjJhMS41IDEuNSAwIDAgMCAxLjUgMS4zaDIuOGExLjUgMS41IDAgMCAwIDEuNS0xLjNsLjYtMy4yIn0pXX0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTMgMTFhNCA0IDAgMCAxIDQtNGgxMGE0IDQgMCAwIDEgNCA0djIuNWEyLjUgMi41IDAgMCAxLTIuNSAyLjVjLTEuOCAwLTIuNS0xLjItMy41LTEuOC0uOS0uNS0xLjYtLjctMi41LS43cy0xLjYuMi0yLjUuN2MtMSAuNi0xLjcgMS44LTMuNSAxLjhBMi41IDIuNSAwIDAgMSAzIDEzLjV6In0pfSk7ZGVmYXVsdDpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpbUSYmWigicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxaKCJyZWN0Iix7eDoiNi41Iix5OiIyLjUiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIuOCJ9KSxaKCJsaW5lIix7eDE6IjEwLjUiLHkxOiI1Iix4MjoiMTMuNSIseTI6IjUifSldfSl9fWZ1bmN0aW9uIFA2KHtkZXZpY2U6JCxhY3RpdmU6SixzdGFydGluZzpRLHNodXR0aW5nRG93bjpYLG9uU2VsZWN0Okssb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsRz0kLnN0YXRlPT09IkJvb3RlZCIsQj13MCgkLm5hbWUpLE49QzYoJC5ydW50aW1lKSx6PXE/IlN0cmVhbWluZyI6UT9HPyJTdGFydGluZ+KApiI6IkJvb3RpbmfigKYiOlg/IlNodXR0aW5nIGRvd27igKYiOkc/IkJvb3RlZCI6bnVsbCxWPXE/IiMzNGQzOTkiOkc/IiNlOWExM2IiOm51bGwsSD1xfHxHLEM9cT9KPyJiZy1bIzI2MzY0Y10iOiJiZy1bIzIwMmIzYV0iOko/ImJnLXdoaXRlLzE1IjoiYmctd2hpdGUvNiIsQT1xPyJ0ZXh0LVsjZDJlN2ZmXSI6Sj8idGV4dC13aGl0ZS85MCI6InRleHQtd2hpdGUvNTUiO3JldHVybiBaKCJkaXYiLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjAsImFyaWEtcHJlc3NlZCI6SixvbkNsaWNrOkssb25LZXlEb3duOihMKT0+e2lmKEwua2V5PT09IkVudGVyInx8TC5rZXk9PT0iICIpTC5wcmV2ZW50RGVmYXVsdCgpLEsoKX0sY2xhc3NOYW1lOmBncm91cCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10gJHtKPyJiZy13aGl0ZS8xMCB0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS84In1gLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6YHJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiAke0N9YCxjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZTpBLGNoaWxkcmVuOlooRDYse3R5cGU6QixzY3JlZW5PbjpCb29sZWFuKHEpfSl9KSxWJiYhcSYmWigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAuNSByaWdodC0wLjUgc2l6ZS0xLjUgcm91bmRlZC1mdWxsIHJpbmctMiByaW5nLVsjMWMxYzFlXSIsc3R5bGU6e2JhY2tncm91bmQ6Vn19KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiQubmFtZX0pLHomJlooImRpdiIse2NsYXNzTmFtZTpgdHJ1bmNhdGUgdGV4dC1bMTFweF0gbGVhZGluZy10aWdodCAke3E/InRleHQtWyMzNGQzOTldIjpKPyJ0ZXh0LXdoaXRlLzc1IjoidGV4dC13aGl0ZS80NSJ9YCxjaGlsZHJlbjp6fSldfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy10cmFpbGluZy1zbG90IixjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIHctOCBoLTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0YWJ1bGFyLW51bXMgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEyc10gJHtKPyJ0ZXh0LXdoaXRlLzg1IjoidGV4dC13aGl0ZS80MCJ9ICR7SD8iZ3JvdXAtaG92ZXI6b3BhY2l0eS0wIGdyb3VwLWZvY3VzLXdpdGhpbjpvcGFjaXR5LTAiOiIifWAsY2hpbGRyZW46Tn0pLEgmJlooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsdGl0bGU6WD8iU2h1dHRpbmcgZG93buKApiI6IlNodXQgZG93biBzaW11bGF0b3IiLCJhcmlhLWxhYmVsIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsb25DbGljazooTCk9PntMLnByZXZlbnREZWZhdWx0KCksTC5zdG9wUHJvcGFnYXRpb24oKSxZKCl9LGRpc2FibGVkOlgsY2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTUgcm91bmRlZC1tZCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpvcGFjaXR5LTEwMCBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzLGJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdICR7Sj8idGV4dC13aGl0ZS84MCBob3ZlcjpiZy13aGl0ZS8yMCI6InRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMTIgaG92ZXI6dGV4dC13aGl0ZSJ9YCxjaGlsZHJlbjpaKEwwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjIuMn0pfSldfSldfSl9dmFyIEYyPSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpIixlMz0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50KSI7dmFyIHVKPTEyO2Z1bmN0aW9uIFQ2KHtvcGVuOiQsb25DbG9zZTpKLHdpZHRoOlEsc2lkZTpYPSJyaWdodCIsZGV2aWNlczpLLHRvdGFsOlk9MCxoYXNNb3JlOnE9ITEsb25Mb2FkTW9yZTpHLG9uTG9hZEFsbDpCLG9uUmVzZXRQYWdlOk4sc2VsZWN0ZWRVZGlkOnosb25TZWxlY3Q6VixzdGFydGluZzpILHNodXR0aW5nRG93bjpDLG9uU2h1dGRvd246QX0pe2xldCBVPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpiMSgiZ3JpZC9hcGkvbWVtb3J5IikpLEY9VzYoVSwkKSxbVyx3XT1rKCIiKSxQPWsxKCgpPT57bGV0IFI9Vy50cmltKCkudG9Mb3dlckNhc2UoKTtpZighUnx8IUspcmV0dXJuIEs7cmV0dXJuIEsuZmlsdGVyKChkKT0+ZC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoUil8fGY1KGQucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhSKSl9LFtLLFddKSx4PVQoITEpO3koKCk9PntsZXQgUj0hIVcudHJpbSgpO2lmKFImJnEpQj8uKCk7ZWxzZSBpZighUiYmeC5jdXJyZW50KU4/LigpO3guY3VycmVudD1SfSxbVyxxLEIsTl0pO2xldCBEPVQobnVsbCk7cmV0dXJuIFooQzIse29wZW46JCx3aWR0aDpRLHNpZGU6WCxzdHlsZTp7YmFja2dyb3VuZENvbG9yOkYyfSxjaGlsZHJlbjpbWihPMix7c3R5bGU6e2p1c3RpZnlDb250ZW50OiJmbGV4LXN0YXJ0IixwYWRkaW5nTGVmdDoxNixwYWRkaW5nVG9wOjE2LGdhcDo0fSxjaGlsZHJlbjpbWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkosY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiQ2xvc2UgZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjohMCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46WihFMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxaKGg1LHt9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6InB4LTQgcGItMiBwdC0wLjUgc2hyaW5rLTAiLGNoaWxkcmVuOlooImxhYmVsIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgaC04IHJvdW5kZWQtbGcgYmctd2hpdGUvNiBmb2N1cy13aXRoaW46Ymctd2hpdGUvMTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10iLGNoaWxkcmVuOltaKGMyLHtzaXplOjE0LHN0cm9rZVdpZHRoOjIsY2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIHNocmluay0wIn0pLFooImlucHV0Iix7dmFsdWU6VyxvbkNoYW5nZTooUik9PncoUi50YXJnZXQudmFsdWUpLHBsYWNlaG9sZGVyOiJTZWFyY2giLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgb3V0bGluZS1ub25lIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvOTAgcGxhY2Vob2xkZXI6dGV4dC13aGl0ZS80MCJ9KSxXJiZaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc2VhcmNoIixvbkNsaWNrOigpPT53KCIiKSxjbGFzc05hbWU6InNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNCByb3VuZGVkLWZ1bGwgYmctd2hpdGUvMTUgdGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8yNSIsY2hpbGRyZW46WihMMCx7c2l6ZTo5LHN0cm9rZVdpZHRoOjN9KX0pXX0pfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4LTEgbWluLWgtMCIsY2hpbGRyZW46W1ooImRpdiIse3JlZjpELG9uU2Nyb2xsOigpPT57aWYoVy50cmltKCl8fCFxfHwhRylyZXR1cm47bGV0IFI9RC5jdXJyZW50O2lmKCFSKXJldHVybjtpZihSLnNjcm9sbFRvcCtSLmNsaWVudEhlaWdodD49Ui5zY3JvbGxIZWlnaHQtMjQwKUcoKX0sY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcHgtNCBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOlA9PT1udWxsP1oobEose30pOlAubGVuZ3RoPT09MD9aKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktNiB0ZXh0LXdoaXRlLzQwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpXPyJObyBtYXRjaGluZyBzaW11bGF0b3JzLiI6Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6WihKMSx7Y2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicHQtMSBwYi0xIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIixjaGlsZHJlbjpQLm1hcCgoUik9PlooUDYse2RldmljZTpSLGFjdGl2ZTpSLmRldmljZT09PXosc3RhcnRpbmc6ISFIW1IuZGV2aWNlXSxzaHV0dGluZ0Rvd246ISFDW1IuZGV2aWNlXSxvblNlbGVjdDooKT0+VihSLmRldmljZSksb25TaHV0ZG93bjooKT0+QShSLmRldmljZSl9LFIuZGV2aWNlKSl9KSwhVyYmcSYmWigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTIgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zNSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Sz9gJHtLLmxlbmd0aH0gb2YgJHtZfWA6bnVsbH0pXX0pfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtdG9wLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICR7RjJ9IDAlLCAke2UzfSAxMDAlKWB9fSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byB0b3AsICR7RjJ9IDAlLCAke2UzfSAxMDAlKWB9fSldfSksWihjSix7cmVwb3J0OkZ9KV19KX1mdW5jdGlvbiBsSigpe3JldHVybiBaKEoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOnVKfSwoJCxKKT0+WihkSix7aW5kZXg6Sn0sSikpfSldfSl9ZnVuY3Rpb24gZEooe2luZGV4OiR9KXtsZXQgSj1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLFE9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxYPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7Sn1gfSksWigic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke1F9YH0pXX0pLFooInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtYfWB9KV19KX1mdW5jdGlvbiBjSih7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpaKF82LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gbDUoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOkosb25Qb2ludGVyRG93bjpRLGFyaWFMYWJlbDpYLHNpZGU6Sz0icmlnaHQifSl7bGV0W1kscV09ayghMSksW0csQl09ayghMSksTj1ZfHxHLHo9KEs9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBaKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpYLCJhcmlhLWhpZGRlbiI6IUosb25Qb2ludGVyRG93bjooSCk9PntCKCEwKSxRKEgpfSxvblBvaW50ZXJVcDooKT0+QighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5CKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtLPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7Sj8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOks9PT0ibGVmdCI/e2xlZnQ6en06e3JpZ2h0Onp9LGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Tj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLFooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Tj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIEk2KCl7bGV0WyQsSl09aygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgUT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWD0oKT0+SihRLm1hdGNoZXMpO3JldHVybiBYKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCl9LFtdKSwkfWZ1bmN0aW9uIGQ1KCl7bGV0WyQsSl09aygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4geSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFg9KCk9PkooUS5tYXRjaGVzKTtyZXR1cm4gWCgpLFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixYKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpfSxbXSksJH12YXIgdzY9MjgwO3ZhciAkOD0id2lkdGggNzBtcyBsaW5lYXIiLEo4PSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLEU2PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsYjY9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixvNT0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIseTY9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsUzY9IjAuMTZzIix4Nj0iMC4ycyIsajY9NSx2Nj17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxSNj17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSxoNj17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxnNj17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxjNT1udWxsO2Z1bmN0aW9uIGY2KCl7aWYoYzUhPW51bGwpcmV0dXJuIGM1O2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gYzU9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksYzV9dmFyIG9KPTQwLG02PTE0LHA2PTI0MCx1Nj0zMCxsNj0wLjE1LGlKPTgwLGQ2PTE1MCxjNj0yNTAsUTg9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uIFo4KCQsSixRLFgpe2xldCBLPSQqMyxZPUo+MD9NYXRoLm1heCgxODAsSi00OCk6SyxxPVE+MCYmTnVtYmVyLmlzRmluaXRlKFgpJiZYPjA/TWF0aC5tYXgoMTgwLChRLTEzNikqWCk6SztyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKEssWSxxKSl9ZnVuY3Rpb24gdDAoJCxKLFEsWCxLKXtsZXQgWT1aOChKLFEsWCxLKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiBvNigkLEosUSxYLEspe2xldCBZPU51bWJlci5pc0Zpbml0ZShLKT8kKks6JDtyZXR1cm4gdDAoWSwkLEosUSxYKX1mdW5jdGlvbiBpNSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBKPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpKKS9KfWZ1bmN0aW9uIFg4KCQsSil7aWYoJDw9MHx8Sjw9MClyZXR1cm4gMDtsZXQgUT0wLjU1LFg9JCpKKlEvKEorUSokKTtyZXR1cm4gTWF0aC5taW4ob0osWCl9ZnVuY3Rpb24gaTYoJCxKLFEpe2xldCBYPSQsSz1RO2ZvcihsZXQgWSBvZiBKKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8SylYPVksSz1xfXJldHVybiBYfWZ1bmN0aW9uIG42KCQpe2xldHtmcm9tOkosdG86USx2ZWxvY2l0eTpYLHN0aWZmbmVzczpLLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxCPTAuNCxOPTAuMDMzMzMzMzMzMzMzMzMzMzMsej1KLFY9WCxIPXBlcmZvcm1hbmNlLm5vdygpLEM9MCxBPSExLEw9KFUpPT57aWYoQSlyZXR1cm47bGV0IEY9TWF0aC5taW4oKFUtSCkvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTtIPVU7bGV0IFc9LUsqKHotUSktWSpWO2lmKFYrPVcqRix6Kz1WKkYsTWF0aC5hYnMoVik8MC40JiZNYXRoLmFicyh6LVEpPDAuNCl7cShRKSxHPy4oKTtyZXR1cm59cSh6KSxDPXJlcXVlc3RBbmltYXRpb25GcmFtZShMKX07cmV0dXJuIEM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpLCgpPT57aWYoQT0hMCxDKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEMpfX1mdW5jdGlvbiByNigkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBKPSRbJC5sZW5ndGgtMV0sUT0kWzBdO2ZvcihsZXQgSz0kLmxlbmd0aC0xO0s+PTA7Sy0tKWlmKEoudC0kW0tdLnQ+PWlKKXtRPSRbS107YnJlYWt9bGV0IFg9KEoudC1RLnQpLzEwMDA7cmV0dXJuIFg+MD8oSi54LVEueCkvWDowfXZhciBhNj0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIG5KKHthcmM6JCxwaGFzZTpKLHJlZHVjZWRNb3Rpb246USxoaWdoQ29udHJhc3Q6WCxmb2N1c1Zpc2libGU6S30pe2xldCBZPUohPT0iaWRsZSIscT1YPzEuMTI6MSxHPVE/MTp2NltKXSxCPWg2W0pdKnEsTj1YPzE6ZzZbSl0sej1ZP1M2Ong2LFY9WT9iNjpvNSxIPVkmJmY2KCk/eTY6VixDPVE/Im5vbmUiOmB0cmFuc2Zvcm0gJHt6fSAke0h9YCxBPVE/Im5vbmUiOmBzdHJva2UgJHt6fSAke1Z9LCBzdHJva2Utd2lkdGggJHt6fSAke1Z9YCxMPSQudmlld0JveFNpemUsVT0kLmQsRj17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOkMsd2lsbENoYW5nZTpRP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gWigic3ZnIix7d2lkdGg6TCxoZWlnaHQ6TCx2aWV3Qm94OmAwIDAgJHtMfSAke0x9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W1ooInBhdGgiLHtkOlUsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOihqNioyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpLPzAuOTU6MCx0cmFuc2l0aW9uOlE/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7bzV9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLFooInBhdGgiLHtkOlUsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Oks/MC43OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke281fWB9fSldfSksWigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOkYsY2hpbGRyZW46WigiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W1ooInBhdGgiLHtkOlUsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpCKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxOKzAuMDgpLHRyYW5zaXRpb246YCR7QX0sIG9wYWNpdHkgJHt6fSAke1Z9YCxmaWx0ZXI6YTZ9fSksWigicGF0aCIse2Q6VSxzdHJva2U6UjZbSl0sc3Ryb2tlV2lkdGg6QixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Ok4sdHJhbnNpdGlvbjpgJHtBfSwgb3BhY2l0eSAke3p9ICR7Vn1gLGZpbHRlcjphNn19KV19KX0pXX0pfWZ1bmN0aW9uIHM2KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOkosc3RyZWFtQ29uZmlnOlEsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6S30pe2xldCBZPWQ1KCkscT1JNigpLFtHLEJdPWsoITEpLE49azEoKCk9PmczKHt0eXBlOkosY29uZmlnOlE/P251bGwsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6S30pLFtKLFEsWCxLXSksej0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIFooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooVik9PntCKFYuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5CKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46WihuSix7YXJjOk4scGhhc2U6eixyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfWZ1bmN0aW9uIHJKKCQpe2lmKCEkfHx0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybjtsZXQgSj1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtRLnR5cGU9InRleHQvY3NzIixKLmFwcGVuZENoaWxkKFEpLFEuc3R5bGVTaGVldD9RLnN0eWxlU2hlZXQuY3NzVGV4dD0kOlEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJCkpfXZhciBhSj0oJCk9Pntzd2l0Y2goJCl7Y2FzZSJzdWNjZXNzIjpyZXR1cm4gZUo7Y2FzZSJpbmZvIjpyZXR1cm4gSlE7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gJFE7Y2FzZSJlcnJvciI6cmV0dXJuIFFRO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxzSj1BcnJheSgxMikuZmlsbCgwKSx0Sj0oe3Zpc2libGU6JCxjbGFzc05hbWU6Sn0pPT57cmV0dXJuIGYuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlsic29ubmVyLWxvYWRpbmctd3JhcHBlciIsSl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwiZGF0YS12aXNpYmxlIjokfSxmLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLXNwaW5uZXIifSxzSi5tYXAoKFEsWCk9PmYuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItbG9hZGluZy1iYXIiLGtleTpgc3Bpbm5lci1iYXItJHtYfWB9KSkpKX0sZUo9Zi5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxmLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuODU3LTkuODA5YS43NS43NSAwIDAwLTEuMjE0LS44ODJsLTMuNDgzIDQuNzktMS44OC0xLjg4YS43NS43NSAwIDEwLTEuMDYgMS4wNjFsMi41IDIuNWEuNzUuNzUgMCAwMDEuMTM3LS4wODlsNC01LjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksJFE9Zi5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxmLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxKUT1mLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGYuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03LTRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek05IDlhLjc1Ljc1IDAgMDAwIDEuNWguMjUzYS4yNS4yNSAwIDAxLjI0NC4zMDRsLS40NTkgMi4wNjZBMS43NSAxLjc1IDAgMDAxMC43NDcgMTVIMTFhLjc1Ljc1IDAgMDAwLTEuNWgtLjI1M2EuMjUuMjUgMCAwMS0uMjQ0LS4zMDRsLjQ1OS0yLjA2NkExLjc1IDEuNzUgMCAwMDkuMjUzIDlIOXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxRUT1mLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGYuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS04LTVhLjc1Ljc1IDAgMDEuNzUuNzV2NC41YS43NS43NSAwIDAxLTEuNSAwdi00LjVBLjc1Ljc1IDAgMDExMCA1em0wIDEwYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyeiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLFpRPWYuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxmLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLGYuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpLFhRPSgpPT57bGV0WyQsSl09Zi51c2VTdGF0ZShkb2N1bWVudC5oaWRkZW4pO3JldHVybiBmLnVzZUVmZmVjdCgoKT0+e2xldCBRPSgpPT57Sihkb2N1bWVudC5oaWRkZW4pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixRKX0sW10pLCR9LEs4PTE7Y2xhc3MgJDR7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmliZT0oJCk9PntyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKCQpLCgpPT57bGV0IEo9dGhpcy5zdWJzY3JpYmVycy5pbmRleE9mKCQpO3RoaXMuc3Vic2NyaWJlcnMuc3BsaWNlKEosMSl9fSx0aGlzLnB1Ymxpc2g9KCQpPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChKKT0+SigkKSl9LHRoaXMuYWRkVG9hc3Q9KCQpPT57dGhpcy5wdWJsaXNoKCQpLHRoaXMudG9hc3RzPVsuLi50aGlzLnRvYXN0cywkXX0sdGhpcy5jcmVhdGU9KCQpPT57dmFyIEo7bGV0e21lc3NhZ2U6USwuLi5YfT0kLEs9dHlwZW9mKCQ9PW51bGw/dm9pZCAwOiQuaWQpPT09Im51bWJlciJ8fCgoSj0kLmlkKT09bnVsbD92b2lkIDA6Si5sZW5ndGgpPjA/JC5pZDpLOCsrLFk9dGhpcy50b2FzdHMuZmluZCgoRyk9PntyZXR1cm4gRy5pZD09PUt9KSxxPSQuZGlzbWlzc2libGU9PT12b2lkIDA/ITA6JC5kaXNtaXNzaWJsZTtpZih0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoSykpdGhpcy5kaXNtaXNzZWRUb2FzdHMuZGVsZXRlKEspO2lmKFkpdGhpcy50b2FzdHM9dGhpcy50b2FzdHMubWFwKChHKT0+e2lmKEcuaWQ9PT1LKXJldHVybiB0aGlzLnB1Ymxpc2goey4uLkcsLi4uJCxpZDpLLHRpdGxlOlF9KSx7Li4uRywuLi4kLGlkOkssZGlzbWlzc2libGU6cSx0aXRsZTpRfTtyZXR1cm4gR30pO2Vsc2UgdGhpcy5hZGRUb2FzdCh7dGl0bGU6USwuLi5YLGRpc21pc3NpYmxlOnEsaWQ6S30pO3JldHVybiBLfSx0aGlzLmRpc21pc3M9KCQpPT57aWYoJCl0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoJCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEopPT5KKHtpZDokLGRpc21pc3M6ITB9KSkpO2Vsc2UgdGhpcy50b2FzdHMuZm9yRWFjaCgoSik9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKFEpPT5RKHtpZDpKLmlkLGRpc21pc3M6ITB9KSl9KTtyZXR1cm4gJH0sdGhpcy5tZXNzYWdlPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLG1lc3NhZ2U6JH0pfSx0aGlzLmVycm9yPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLG1lc3NhZ2U6JCx0eXBlOiJlcnJvciJ9KX0sdGhpcy5zdWNjZXNzPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6InN1Y2Nlc3MiLG1lc3NhZ2U6JH0pfSx0aGlzLmluZm89KCQsSik9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkosdHlwZToiaW5mbyIsbWVzc2FnZTokfSl9LHRoaXMud2FybmluZz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJ3YXJuaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5sb2FkaW5nPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6JH0pfSx0aGlzLnByb21pc2U9KCQsSik9PntpZighSilyZXR1cm47bGV0IFE9dm9pZCAwO2lmKEoubG9hZGluZyE9PXZvaWQgMClRPXRoaXMuY3JlYXRlKHsuLi5KLHByb21pc2U6JCx0eXBlOiJsb2FkaW5nIixtZXNzYWdlOkoubG9hZGluZyxkZXNjcmlwdGlvbjp0eXBlb2YgSi5kZXNjcmlwdGlvbiE9PSJmdW5jdGlvbiI/Si5kZXNjcmlwdGlvbjp2b2lkIDB9KTtsZXQgWD1Qcm9taXNlLnJlc29sdmUoJCBpbnN0YW5jZW9mIEZ1bmN0aW9uPyQoKTokKSxLPVEhPT12b2lkIDAsWSxxPVgudGhlbihhc3luYyhCKT0+e2lmKFk9WyJyZXNvbHZlIixCXSxmLmlzVmFsaWRFbGVtZW50KEIpKUs9ITEsdGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZGVmYXVsdCIsbWVzc2FnZTpCfSk7ZWxzZSBpZihZUShCKSYmIUIub2spe0s9ITE7bGV0IHo9dHlwZW9mIEouZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEouZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtCLnN0YXR1c31gKTpKLmVycm9yLFY9dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oYEhUVFAgZXJyb3IhIHN0YXR1czogJHtCLnN0YXR1c31gKTpKLmRlc2NyaXB0aW9uLEM9dHlwZW9mIHo9PT0ib2JqZWN0IiYmIWYuaXNWYWxpZEVsZW1lbnQoeik/ejp7bWVzc2FnZTp6fTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246ViwuLi5DfSl9ZWxzZSBpZihCIGluc3RhbmNlb2YgRXJyb3Ipe0s9ITE7bGV0IHo9dHlwZW9mIEouZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEouZXJyb3IoQik6Si5lcnJvcixWPXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKEIpOkouZGVzY3JpcHRpb24sQz10eXBlb2Ygej09PSJvYmplY3QiJiYhZi5pc1ZhbGlkRWxlbWVudCh6KT96OnttZXNzYWdlOnp9O3RoaXMuY3JlYXRlKHtpZDpRLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpWLC4uLkN9KX1lbHNlIGlmKEouc3VjY2VzcyE9PXZvaWQgMCl7Sz0hMTtsZXQgej10eXBlb2YgSi5zdWNjZXNzPT09ImZ1bmN0aW9uIj9hd2FpdCBKLnN1Y2Nlc3MoQik6Si5zdWNjZXNzLFY9dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oQik6Si5kZXNjcmlwdGlvbixDPXR5cGVvZiB6PT09Im9iamVjdCImJiFmLmlzVmFsaWRFbGVtZW50KHopP3o6e21lc3NhZ2U6en07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToic3VjY2VzcyIsZGVzY3JpcHRpb246ViwuLi5DfSl9fSkuY2F0Y2goYXN5bmMoQik9PntpZihZPVsicmVqZWN0IixCXSxKLmVycm9yIT09dm9pZCAwKXtLPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKEIpOkouZXJyb3Isej10eXBlb2YgSi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSi5kZXNjcmlwdGlvbihCKTpKLmRlc2NyaXB0aW9uLEg9dHlwZW9mIE49PT0ib2JqZWN0IiYmIWYuaXNWYWxpZEVsZW1lbnQoTik/Tjp7bWVzc2FnZTpOfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246eiwuLi5IfSl9fSkuZmluYWxseSgoKT0+e2lmKEspdGhpcy5kaXNtaXNzKFEpLFE9dm9pZCAwO0ouZmluYWxseT09bnVsbHx8Si5maW5hbGx5LmNhbGwoSil9KSxHPSgpPT5uZXcgUHJvbWlzZSgoQixOKT0+cS50aGVuKCgpPT5ZWzBdPT09InJlamVjdCI/TihZWzFdKTpCKFlbMV0pKS5jYXRjaChOKSk7aWYodHlwZW9mIFEhPT0ic3RyaW5nIiYmdHlwZW9mIFEhPT0ibnVtYmVyIilyZXR1cm57dW53cmFwOkd9O2Vsc2UgcmV0dXJuIE9iamVjdC5hc3NpZ24oUSx7dW53cmFwOkd9KX0sdGhpcy5jdXN0b209KCQsSik9PntsZXQgUT0oSj09bnVsbD92b2lkIDA6Si5pZCl8fEs4Kys7cmV0dXJuIHRoaXMuY3JlYXRlKHtqc3g6JChRKSxpZDpRLC4uLkp9KSxRfSx0aGlzLmdldEFjdGl2ZVRvYXN0cz0oKT0+e3JldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKCQpPT4hdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKCQuaWQpKX0sdGhpcy5zdWJzY3JpYmVycz1bXSx0aGlzLnRvYXN0cz1bXSx0aGlzLmRpc21pc3NlZFRvYXN0cz1uZXcgU2V0fX12YXIgSzA9bmV3ICQ0LEtRPSgkLEopPT57bGV0IFE9KEo9PW51bGw/dm9pZCAwOkouaWQpfHxLOCsrO3JldHVybiBLMC5hZGRUb2FzdCh7dGl0bGU6JCwuLi5KLGlkOlF9KSxRfSxZUT0oJCk9PntyZXR1cm4gJCYmdHlwZW9mICQ9PT0ib2JqZWN0IiYmIm9rImluICQmJnR5cGVvZiAkLm9rPT09ImJvb2xlYW4iJiYic3RhdHVzImluICQmJnR5cGVvZiAkLnN0YXR1cz09PSJudW1iZXIifSxxUT1LUSxHUT0oKT0+SzAudG9hc3RzLFZRPSgpPT5LMC5nZXRBY3RpdmVUb2FzdHMoKSx0Mj1PYmplY3QuYXNzaWduKHFRLHtzdWNjZXNzOkswLnN1Y2Nlc3MsaW5mbzpLMC5pbmZvLHdhcm5pbmc6SzAud2FybmluZyxlcnJvcjpLMC5lcnJvcixjdXN0b206SzAuY3VzdG9tLG1lc3NhZ2U6SzAubWVzc2FnZSxwcm9taXNlOkswLnByb21pc2UsZGlzbWlzczpLMC5kaXNtaXNzLGxvYWRpbmc6SzAubG9hZGluZ30se2dldEhpc3Rvcnk6R1EsZ2V0VG9hc3RzOlZRfSk7ckooIltkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9bHRyXSxodG1sW2Rpcj1sdHJdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6LTNweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDo0cHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0Oi0xcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDowcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OmF1dG87LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OjA7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoLTM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxdLGh0bWxbZGlyPXJ0bF17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDo0cHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6LTNweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6MHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6LTFweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6MDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOmF1dG87LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgzNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1mYW1pbHk6dWktc2Fucy1zZXJpZixzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLEhlbHZldGljYSBOZXVlLEFyaWFsLE5vdG8gU2FucyxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppOy0tZ3JheTE6aHNsKDAsIDAlLCA5OSUpOy0tZ3JheTI6aHNsKDAsIDAlLCA5Ny4zJSk7LS1ncmF5Mzpoc2woMCwgMCUsIDk1LjElKTstLWdyYXk0OmhzbCgwLCAwJSwgOTMlKTstLWdyYXk1OmhzbCgwLCAwJSwgOTAuOSUpOy0tZ3JheTY6aHNsKDAsIDAlLCA4OC43JSk7LS1ncmF5Nzpoc2woMCwgMCUsIDg1LjglKTstLWdyYXk4OmhzbCgwLCAwJSwgNzglKTstLWdyYXk5OmhzbCgwLCAwJSwgNTYuMSUpOy0tZ3JheTEwOmhzbCgwLCAwJSwgNTIuMyUpOy0tZ3JheTExOmhzbCgwLCAwJSwgNDMuNSUpOy0tZ3JheTEyOmhzbCgwLCAwJSwgOSUpOy0tYm9yZGVyLXJhZGl1czo4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7b3V0bGluZTowO3otaW5kZXg6OTk5OTk5OTk5O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlfUBtZWRpYSAoaG92ZXI6bm9uZSkgYW5kIChwb2ludGVyOmNvYXJzZSl7W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtbGlmdGVkPXRydWVde3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDp2YXIoLS1vZmZzZXQtcmlnaHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rdey0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpO3otaW5kZXg6dmFyKC0tei1pbmRleCk7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RyYW5zZm9ybTp2YXIoLS15KTt0b3VjaC1hY3Rpb246bm9uZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMsb3BhY2l0eSAuNHMsaGVpZ2h0IC40cyxib3gtc2hhZG93IC4ycztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO292ZXJmbG93LXdyYXA6YW55d2hlcmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtwYWRkaW5nOjE2cHg7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JvcmRlci1yYWRpdXM6dmFyKC0tYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9W2RhdGEtc29ubmVyLXRvYXN0XTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6MDstLXk6dHJhbnNsYXRlWSgtMTAwJSk7LS1saWZ0OjE7LS1saWZ0LWFtb3VudDpjYWxjKDEgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTowOy0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdDotMTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiMzZjNmM2Z9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6I2U4ZThlOH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLXRpdGxlXXtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXByb21pc2U9dHJ1ZV0gW2RhdGEtaWNvbl0+c3Zne29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1pbiAuM3MgZWFzZSBmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dPip7ZmxleC1zaHJpbms6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dIHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXXtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLW5vcm1hbC1iZyk7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtdGV4dCk7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKTtib3JkZXI6bm9uZTtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzLGJveC1zaGFkb3cgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMCwwLDAsLjQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA4KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25de3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0KTtyaWdodDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tZW5kKTt0b3A6MDtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tZ3JheTEyKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ncmF5NCk7dHJhbnNmb3JtOnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm0pO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzLGJhY2tncm91bmQgLjJzLGJvcmRlci1jb2xvciAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRpc2FibGVkPXRydWVde2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdOmhvdmVyIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ncmF5Mik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyYXk1KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAwJTtyaWdodDotMTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4Oi0xfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Ym90dG9tOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle3RvcDo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPWZhbHNlXVtkYXRhLXJlbW92ZWQ9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7dHJhbnNmb3JtOnNjYWxlWSgyKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2hlaWdodDpjYWxjKHZhcigtLWdhcCkgKyAxcHgpO2JvdHRvbToxMDAlO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoMCk7b3BhY2l0eToxfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV17LS1zY2FsZTp2YXIoLS10b2FzdHMtYmVmb3JlKSAqIDAuMDUgKyAxOy0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdC1hbW91bnQpICogdmFyKC0tdG9hc3RzLWJlZm9yZSkpKSBzY2FsZShjYWxjKC0xICogdmFyKC0tc2NhbGUpKSk7aGVpZ2h0OnZhcigtLWZyb250LXRvYXN0LWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246b3BhY2l0eSAuNHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zdHlsZWQ9dHJ1ZV0+KntvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkpKTtoZWlnaHQ6dmFyKC0taW5pdGlhbC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9dHJ1ZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSArIHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKDQwJSk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC41cyxvcGFjaXR5IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXTo6YmVmb3Jle2hlaWdodDpjYWxjKHZhcigtLWluaXRpYWwtaGVpZ2h0KSArIDIwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV17dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXksMCkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgsMCkpO3RyYW5zaXRpb246bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGVkPXRydWVde3VzZXItc2VsZWN0Om5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXSxbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj10b3Bde2FuaW1hdGlvbi1kdXJhdGlvbjouMnM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249bGVmdF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWxlZnR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1yaWdodF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXJpZ2h0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249dXBde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC11cH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWRvd25de2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1kb3dufUBrZXlmcmFtZXMgc3dpcGUtb3V0LWxlZnR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXJpZ2h0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgKyAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC11cHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtZG93bntmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpICsgMTAwJSkpO29wYWNpdHk6MH19QG1lZGlhIChtYXgtd2lkdGg6NjAwcHgpe1tkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF17bGVmdDpjYWxjKHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAtMSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdIFtkYXRhLXNvbm5lci10b2FzdF17bGVmdDowO3JpZ2h0OjA7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIDIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tbW9iaWxlLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tbW9iaWxlLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTQpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKTstLXN1Y2Nlc3MtYmc6aHNsKDE0MywgODUlLCA5NiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NSwgOTIlLCA4NyUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNDAsIDEwMCUsIDI3JSk7LS1pbmZvLWJnOmhzbCgyMDgsIDEwMCUsIDk3JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIxLCA5MSUsIDkzJSk7LS1pbmZvLXRleHQ6aHNsKDIxMCwgOTIlLCA0NSUpOy0td2FybmluZy1iZzpoc2woNDksIDEwMCUsIDk3JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNDksIDkxJSwgODQlKTstLXdhcm5pbmctdGV4dDpoc2woMzEsIDkyJSwgNDUlKTstLWVycm9yLWJnOmhzbCgzNTksIDEwMCUsIDk3JSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1OSwgMTAwJSwgOTQlKTstLWVycm9yLXRleHQ6aHNsKDM2MCwgMTAwJSwgNDUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXkzKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYmctaG92ZXI6aHNsKDAsIDAlLCAxMiUpOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtYm9yZGVyLWhvdmVyOmhzbCgwLCAwJSwgMjUlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKTstLXN1Y2Nlc3MtYmc6aHNsKDE1MCwgMTAwJSwgNiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NywgMTAwJSwgMTIlKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTUwLCA4NiUsIDY1JSk7LS1pbmZvLWJnOmhzbCgyMTUsIDEwMCUsIDYlKTstLWluZm8tYm9yZGVyOmhzbCgyMjMsIDQzJSwgMTclKTstLWluZm8tdGV4dDpoc2woMjE2LCA4NyUsIDY1JSk7LS13YXJuaW5nLWJnOmhzbCg2NCwgMTAwJSwgNiUpOy0td2FybmluZy1ib3JkZXI6aHNsKDYwLCAxMDAlLCA5JSk7LS13YXJuaW5nLXRleHQ6aHNsKDQ2LCA4NyUsIDY1JSk7LS1lcnJvci1iZzpoc2woMzU4LCA3NiUsIDEwJSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1NywgODklLCAxNiUpOy0tZXJyb3ItdGV4dDpoc2woMzU4LCAxMDAlLCA4MSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZy1ob3Zlcik7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXItaG92ZXIpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc117YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb117YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ117YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3Jde2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3JdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJ7LS1zaXplOjE2cHg7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDoxMH0uc29ubmVyLWxvYWRpbmctd3JhcHBlcltkYXRhLXZpc2libGU9ZmFsc2Vde3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9LnNvbm5lci1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpfS5zb25uZXItbG9hZGluZy1iYXJ7YW5pbWF0aW9uOnNvbm5lci1zcGluIDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQ6dmFyKC0tZ3JheTExKTtib3JkZXItcmFkaXVzOjZweDtoZWlnaHQ6OCU7bGVmdDotMTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMy45JTt3aWR0aDoyNCV9LnNvbm5lci1sb2FkaW5nLWJhcjpmaXJzdC1jaGlsZHthbmltYXRpb24tZGVsYXk6LTEuMnM7dHJhbnNmb3JtOnJvdGF0ZSguMDAwMWRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDIpe2FuaW1hdGlvbi1kZWxheTotMS4xczt0cmFuc2Zvcm06cm90YXRlKDMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi0xczt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNCl7YW5pbWF0aW9uLWRlbGF5Oi0uOXM7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDUpe2FuaW1hdGlvbi1kZWxheTotLjhzO3RyYW5zZm9ybTpyb3RhdGUoMTIwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi0uN3M7dHJhbnNmb3JtOnJvdGF0ZSgxNTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg3KXthbmltYXRpb24tZGVsYXk6LS42czt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDgpe2FuaW1hdGlvbi1kZWxheTotLjVzO3RyYW5zZm9ybTpyb3RhdGUoMjEwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOSl7YW5pbWF0aW9uLWRlbGF5Oi0uNHM7dHJhbnNmb3JtOnJvdGF0ZSgyNDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMCl7YW5pbWF0aW9uLWRlbGF5Oi0uM3M7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMSl7YW5pbWF0aW9uLWRlbGF5Oi0uMnM7dHJhbnNmb3JtOnJvdGF0ZSgzMDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMil7YW5pbWF0aW9uLWRlbGF5Oi0uMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBzb25uZXItZmFkZS1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfX1Aa2V5ZnJhbWVzIHNvbm5lci1zcGluezAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6LjE1fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5zb25uZXItbG9hZGluZy1iYXIsW2RhdGEtc29ubmVyLXRvYXN0XSxbZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDthbmltYXRpb246bm9uZSFpbXBvcnRhbnR9fS5zb25uZXItbG9hZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30uc29ubmVyLWxvYWRlcltkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZSgtNTAlLC01MCUpfSIpO2Z1bmN0aW9uIG41KCQpe3JldHVybiAkLmxhYmVsIT09dm9pZCAwfXZhciBCUT0zLE5RPSIyNHB4Iix6UT0iMTZweCIsdDY9NDAwMCxMUT0zNTYsSFE9MTQsVVE9NDUsQ1E9MjAwO2Z1bmN0aW9uIHkwKC4uLiQpe3JldHVybiAkLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9ZnVuY3Rpb24gT1EoJCl7bGV0W0osUV09JC5zcGxpdCgiLSIpLFg9W107aWYoSilYLnB1c2goSik7aWYoUSlYLnB1c2goUSk7cmV0dXJuIFh9dmFyIEZRPSgkKT0+e3ZhciBKLFEsWCxLLFkscSxHLEIsTjtsZXR7aW52ZXJ0OnosdG9hc3Q6Vix1bnN0eWxlZDpILGludGVyYWN0aW5nOkMsc2V0SGVpZ2h0czpBLHZpc2libGVUb2FzdHM6TCxoZWlnaHRzOlUsaW5kZXg6Rix0b2FzdHM6VyxleHBhbmRlZDp3LHJlbW92ZVRvYXN0OlAsZGVmYXVsdFJpY2hDb2xvcnM6eCxjbG9zZUJ1dHRvbjpELHN0eWxlOm4sY2FuY2VsQnV0dG9uU3R5bGU6UixhY3Rpb25CdXR0b25TdHlsZTpkLGNsYXNzTmFtZTppPSIiLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOnI9IiIsZHVyYXRpb246byxwb3NpdGlvbjphLGdhcDpMMSxleHBhbmRCeURlZmF1bHQ6bCxjbGFzc05hbWVzOm0saWNvbnM6WDEsY2xvc2VCdXR0b25BcmlhTGFiZWw6WjE9IkNsb3NlIHRvYXN0In09JCxbSDEsdF09Zi51c2VTdGF0ZShudWxsKSxbUTEscTFdPWYudXNlU3RhdGUobnVsbCksW2oscF09Zi51c2VTdGF0ZSghMSksW18saF09Zi51c2VTdGF0ZSghMSksW2csdl09Zi51c2VTdGF0ZSghMSksW1kxLEcxXT1mLnVzZVN0YXRlKCExKSxbRTEsVzFdPWYudXNlU3RhdGUoITEpLFtUMSxfMV09Zi51c2VTdGF0ZSgwKSxbUjEsTTFdPWYudXNlU3RhdGUoMCkscjE9Zi51c2VSZWYoVi5kdXJhdGlvbnx8b3x8dDYpLGoxPWYudXNlUmVmKG51bGwpLEYxPWYudXNlUmVmKG51bGwpLE4xPUY9PT0wLGExPUYrMTw9TCxmMT1WLnR5cGUsaTE9Vi5kaXNtaXNzaWJsZSE9PSExLHQxPVYuY2xhc3NOYW1lfHwiIixxMD1WLmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixHMD1mLnVzZU1lbW8oKCk9PlUuZmluZEluZGV4KChLMSk9PksxLnRvYXN0SWQ9PT1WLmlkKXx8MCxbVSxWLmlkXSksbDA9Zi51c2VNZW1vKCgpPT57dmFyIEsxO3JldHVybihLMT1WLmNsb3NlQnV0dG9uKSE9bnVsbD9LMTpEfSxbVi5jbG9zZUJ1dHRvbixEXSksdjE9Zi51c2VNZW1vKCgpPT5WLmR1cmF0aW9ufHxvfHx0NixbVi5kdXJhdGlvbixvXSksVjA9Zi51c2VSZWYoMCksSjA9Zi51c2VSZWYoMCksUDA9Zi51c2VSZWYoMCksbTE9Zi51c2VSZWYobnVsbCksW2UxLFIwXT1hLnNwbGl0KCItIikseTE9Zi51c2VNZW1vKCgpPT57cmV0dXJuIFUucmVkdWNlKChLMSxJLHUpPT57aWYodT49RzApcmV0dXJuIEsxO3JldHVybiBLMStJLmhlaWdodH0sMCl9LFtVLEcwXSksQjA9WFEoKSxIMD1WLmludmVydHx8eixEMT1mMT09PSJsb2FkaW5nIjtKMC5jdXJyZW50PWYudXNlTWVtbygoKT0+RzAqTDEreTEsW0cwLHkxXSksZi51c2VFZmZlY3QoKCk9PntyMS5jdXJyZW50PXYxfSxbdjFdKSxmLnVzZUVmZmVjdCgoKT0+e3AoITApfSxbXSksZi51c2VFZmZlY3QoKCk9PntsZXQgSzE9RjEuY3VycmVudDtpZihLMSl7bGV0IEk9SzEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiBNMShJKSxBKCh1KT0+W3t0b2FzdElkOlYuaWQsaGVpZ2h0OkkscG9zaXRpb246Vi5wb3NpdGlvbn0sLi4udV0pLCgpPT5BKCh1KT0+dS5maWx0ZXIoKHMpPT5zLnRvYXN0SWQhPT1WLmlkKSl9fSxbQSxWLmlkXSksZi51c2VMYXlvdXRFZmZlY3QoKCk9PntpZighailyZXR1cm47bGV0IEsxPUYxLmN1cnJlbnQsST1LMS5zdHlsZS5oZWlnaHQ7SzEuc3R5bGUuaGVpZ2h0PSJhdXRvIjtsZXQgdT1LMS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7SzEuc3R5bGUuaGVpZ2h0PUksTTEodSksQSgocyk9PntpZighcy5maW5kKChWMSk9PlYxLnRvYXN0SWQ9PT1WLmlkKSlyZXR1cm5be3RvYXN0SWQ6Vi5pZCxoZWlnaHQ6dSxwb3NpdGlvbjpWLnBvc2l0aW9ufSwuLi5zXTtlbHNlIHJldHVybiBzLm1hcCgoVjEpPT5WMS50b2FzdElkPT09Vi5pZD97Li4uVjEsaGVpZ2h0OnV9OlYxKX0pfSxbaixWLnRpdGxlLFYuZGVzY3JpcHRpb24sQSxWLmlkLFYuanN4LFYuYWN0aW9uLFYuY2FuY2VsXSk7bGV0IHcxPWYudXNlQ2FsbGJhY2soKCk9PntoKCEwKSxfMShKMC5jdXJyZW50KSxBKChLMSk9PksxLmZpbHRlcigoSSk9PkkudG9hc3RJZCE9PVYuaWQpKSxzZXRUaW1lb3V0KCgpPT57UChWKX0sQ1EpfSxbVixQLEEsSjBdKTtmLnVzZUVmZmVjdCgoKT0+e2lmKFYucHJvbWlzZSYmZjE9PT0ibG9hZGluZyJ8fFYuZHVyYXRpb249PT0xLzB8fFYudHlwZT09PSJsb2FkaW5nIilyZXR1cm47bGV0IEsxLEk9KCk9PntpZihQMC5jdXJyZW50PFYwLmN1cnJlbnQpe2xldCBzPW5ldyBEYXRlKCkuZ2V0VGltZSgpLVYwLmN1cnJlbnQ7cjEuY3VycmVudD1yMS5jdXJyZW50LXN9UDAuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKX0sdT0oKT0+e2lmKHIxLmN1cnJlbnQ9PT0xLzApcmV0dXJuO1YwLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCksSzE9c2V0VGltZW91dCgoKT0+e1Yub25BdXRvQ2xvc2U9PW51bGx8fFYub25BdXRvQ2xvc2UuY2FsbChWLFYpLHcxKCl9LHIxLmN1cnJlbnQpfTtpZih3fHxDfHxCMClJKCk7ZWxzZSB1KCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChLMSl9LFt3LEMsVixmMSxCMCx3MV0pLGYudXNlRWZmZWN0KCgpPT57aWYoVi5kZWxldGUpdzEoKSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpfSxbdzEsVi5kZWxldGVdKTtmdW5jdGlvbiBRMCgpe3ZhciBLMTtpZihYMT09bnVsbD92b2lkIDA6WDEubG9hZGluZyl7dmFyIEk7cmV0dXJuIGYuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0ubG9hZGVyLFY9PW51bGw/dm9pZCAwOihJPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkkubG9hZGVyLCJzb25uZXItbG9hZGVyIiksImRhdGEtdmlzaWJsZSI6ZjE9PT0ibG9hZGluZyJ9LFgxLmxvYWRpbmcpfXJldHVybiBmLmNyZWF0ZUVsZW1lbnQodEose2NsYXNzTmFtZTp5MChtPT1udWxsP3ZvaWQgMDptLmxvYWRlcixWPT1udWxsP3ZvaWQgMDooSzE9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6SzEubG9hZGVyKSx2aXNpYmxlOmYxPT09ImxvYWRpbmcifSl9bGV0IE4wPVYuaWNvbnx8KFgxPT1udWxsP3ZvaWQgMDpYMVtmMV0pfHxhSihmMSk7dmFyIFUwLGswO3JldHVybiBmLmNyZWF0ZUVsZW1lbnQoImxpIix7dGFiSW5kZXg6MCxyZWY6RjEsY2xhc3NOYW1lOnkwKGksdDEsbT09bnVsbD92b2lkIDA6bS50b2FzdCxWPT1udWxsP3ZvaWQgMDooSj1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpKLnRvYXN0LG09PW51bGw/dm9pZCAwOm0uZGVmYXVsdCxtPT1udWxsP3ZvaWQgMDptW2YxXSxWPT1udWxsP3ZvaWQgMDooUT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpRW2YxXSksImRhdGEtc29ubmVyLXRvYXN0IjoiIiwiZGF0YS1yaWNoLWNvbG9ycyI6KFUwPVYucmljaENvbG9ycykhPW51bGw/VTA6eCwiZGF0YS1zdHlsZWQiOiFCb29sZWFuKFYuanN4fHxWLnVuc3R5bGVkfHxIKSwiZGF0YS1tb3VudGVkIjpqLCJkYXRhLXByb21pc2UiOkJvb2xlYW4oVi5wcm9taXNlKSwiZGF0YS1zd2lwZWQiOkUxLCJkYXRhLXJlbW92ZWQiOl8sImRhdGEtdmlzaWJsZSI6YTEsImRhdGEteS1wb3NpdGlvbiI6ZTEsImRhdGEteC1wb3NpdGlvbiI6UjAsImRhdGEtaW5kZXgiOkYsImRhdGEtZnJvbnQiOk4xLCJkYXRhLXN3aXBpbmciOmcsImRhdGEtZGlzbWlzc2libGUiOmkxLCJkYXRhLXR5cGUiOmYxLCJkYXRhLWludmVydCI6SDAsImRhdGEtc3dpcGUtb3V0IjpZMSwiZGF0YS1zd2lwZS1kaXJlY3Rpb24iOlExLCJkYXRhLWV4cGFuZGVkIjpCb29sZWFuKHd8fGwmJmopLCJkYXRhLXRlc3RpZCI6Vi50ZXN0SWQsc3R5bGU6eyItLWluZGV4IjpGLCItLXRvYXN0cy1iZWZvcmUiOkYsIi0tei1pbmRleCI6Vy5sZW5ndGgtRiwiLS1vZmZzZXQiOmAke18/VDE6SjAuY3VycmVudH1weGAsIi0taW5pdGlhbC1oZWlnaHQiOmw/ImF1dG8iOmAke1IxfXB4YCwuLi5uLC4uLlYuc3R5bGV9LG9uRHJhZ0VuZDooKT0+e3YoITEpLHQobnVsbCksbTEuY3VycmVudD1udWxsfSxvblBvaW50ZXJEb3duOihLMSk9PntpZihLMS5idXR0b249PT0yKXJldHVybjtpZihEMXx8IWkxKXJldHVybjtpZihqMS5jdXJyZW50PW5ldyBEYXRlLF8xKEowLmN1cnJlbnQpLEsxLnRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShLMS5wb2ludGVySWQpLEsxLnRhcmdldC50YWdOYW1lPT09IkJVVFRPTiIpcmV0dXJuO3YoITApLG0xLmN1cnJlbnQ9e3g6SzEuY2xpZW50WCx5OksxLmNsaWVudFl9fSxvblBvaW50ZXJVcDooKT0+e3ZhciBLMSxJLHU7aWYoWTF8fCFpMSlyZXR1cm47bTEuY3VycmVudD1udWxsO2xldCBzPU51bWJlcigoKEsxPUYxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpLMS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItLXN3aXBlLWFtb3VudC14IikucmVwbGFjZSgicHgiLCIiKSl8fDApLEMxPU51bWJlcigoKEk9RjEuY3VycmVudCk9PW51bGw/dm9pZCAwOkkuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteSIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxWMT1uZXcgRGF0ZSgpLmdldFRpbWUoKS0oKHU9ajEuY3VycmVudCk9PW51bGw/dm9pZCAwOnUuZ2V0VGltZSgpKSxCMT1IMT09PSJ4Ij9zOkMxLGgxPU1hdGguYWJzKEIxKS9WMTtpZihNYXRoLmFicyhCMSk+PVVRfHxoMT4wLjExKXtpZihfMShKMC5jdXJyZW50KSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpLEgxPT09IngiKXExKHM+MD8icmlnaHQiOiJsZWZ0Iik7ZWxzZSBxMShDMT4wPyJkb3duIjoidXAiKTt3MSgpLEcxKCEwKTtyZXR1cm59ZWxzZXt2YXIgbDEscDE7KGwxPUYxLmN1cnJlbnQpPT1udWxsfHxsMS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsIjBweCIpLChwMT1GMS5jdXJyZW50KT09bnVsbHx8cDEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXkiLCIwcHgiKX1XMSghMSksdighMSksdChudWxsKX0sb25Qb2ludGVyTW92ZTooSzEpPT57dmFyIEksdSxzO2lmKCFtMS5jdXJyZW50fHwhaTEpcmV0dXJuO2lmKCgoST13aW5kb3cuZ2V0U2VsZWN0aW9uKCkpPT1udWxsP3ZvaWQgMDpJLnRvU3RyaW5nKCkubGVuZ3RoKT4wKXJldHVybjtsZXQgVjE9SzEuY2xpZW50WS1tMS5jdXJyZW50LnksQjE9SzEuY2xpZW50WC1tMS5jdXJyZW50Lng7dmFyIGgxO2xldCBsMT0oaDE9JC5zd2lwZURpcmVjdGlvbnMpIT1udWxsP2gxOk9RKGEpO2lmKCFIMSYmKE1hdGguYWJzKEIxKT4xfHxNYXRoLmFicyhWMSk+MSkpdChNYXRoLmFicyhCMSk+TWF0aC5hYnMoVjEpPyJ4IjoieSIpO2xldCBwMT17eDowLHk6MH0sQzA9KG4xKT0+e3JldHVybiAxLygxLjUrTWF0aC5hYnMobjEpLzIwKX07aWYoSDE9PT0ieSIpe2lmKGwxLmluY2x1ZGVzKCJ0b3AiKXx8bDEuaW5jbHVkZXMoImJvdHRvbSIpKWlmKGwxLmluY2x1ZGVzKCJ0b3AiKSYmVjE8MHx8bDEuaW5jbHVkZXMoImJvdHRvbSIpJiZWMT4wKXAxLnk9VjE7ZWxzZXtsZXQgbjE9VjEqQzAoVjEpO3AxLnk9TWF0aC5hYnMobjEpPE1hdGguYWJzKFYxKT9uMTpWMX19ZWxzZSBpZihIMT09PSJ4Iil7aWYobDEuaW5jbHVkZXMoImxlZnQiKXx8bDEuaW5jbHVkZXMoInJpZ2h0IikpaWYobDEuaW5jbHVkZXMoImxlZnQiKSYmQjE8MHx8bDEuaW5jbHVkZXMoInJpZ2h0IikmJkIxPjApcDEueD1CMTtlbHNle2xldCBuMT1CMSpDMChCMSk7cDEueD1NYXRoLmFicyhuMSk8TWF0aC5hYnMoQjEpP24xOkIxfX1pZihNYXRoLmFicyhwMS54KT4wfHxNYXRoLmFicyhwMS55KT4wKVcxKCEwKTsodT1GMS5jdXJyZW50KT09bnVsbHx8dS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsYCR7cDEueH1weGApLChzPUYxLmN1cnJlbnQpPT1udWxsfHxzLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IixgJHtwMS55fXB4YCl9fSxsMCYmIVYuanN4JiZmMSE9PSJsb2FkaW5nIj9mLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJhcmlhLWxhYmVsIjpaMSwiZGF0YS1kaXNhYmxlZCI6RDEsImRhdGEtY2xvc2UtYnV0dG9uIjohMCxvbkNsaWNrOkQxfHwhaTE/KCk9Pnt9OigpPT57dzEoKSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpfSxjbGFzc05hbWU6eTAobT09bnVsbD92b2lkIDA6bS5jbG9zZUJ1dHRvbixWPT1udWxsP3ZvaWQgMDooWD1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpYLmNsb3NlQnV0dG9uKX0sKGswPVgxPT1udWxsP3ZvaWQgMDpYMS5jbG9zZSkhPW51bGw/azA6WlEpOm51bGwsKGYxfHxWLmljb258fFYucHJvbWlzZSkmJlYuaWNvbiE9PW51bGwmJigoWDE9PW51bGw/dm9pZCAwOlgxW2YxXSkhPT1udWxsfHxWLmljb24pP2YuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0uaWNvbixWPT1udWxsP3ZvaWQgMDooSz1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpLLmljb24pfSxWLnByb21pc2V8fFYudHlwZT09PSJsb2FkaW5nIiYmIVYuaWNvbj9WLmljb258fFEwKCk6bnVsbCxWLnR5cGUhPT0ibG9hZGluZyI/TjA6bnVsbCk6bnVsbCxmLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWNvbnRlbnQiOiIiLGNsYXNzTmFtZTp5MChtPT1udWxsP3ZvaWQgMDptLmNvbnRlbnQsVj09bnVsbD92b2lkIDA6KFk9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WS5jb250ZW50KX0sZi5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS10aXRsZSI6IiIsY2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0udGl0bGUsVj09bnVsbD92b2lkIDA6KHE9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6cS50aXRsZSl9LFYuanN4P1YuanN4OnR5cGVvZiBWLnRpdGxlPT09ImZ1bmN0aW9uIj9WLnRpdGxlKCk6Vi50aXRsZSksVi5kZXNjcmlwdGlvbj9mLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWRlc2NyaXB0aW9uIjoiIixjbGFzc05hbWU6eTAocixxMCxtPT1udWxsP3ZvaWQgMDptLmRlc2NyaXB0aW9uLFY9PW51bGw/dm9pZCAwOihHPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuZGVzY3JpcHRpb24pfSx0eXBlb2YgVi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/Vi5kZXNjcmlwdGlvbigpOlYuZGVzY3JpcHRpb24pOm51bGwpLGYuaXNWYWxpZEVsZW1lbnQoVi5jYW5jZWwpP1YuY2FuY2VsOlYuY2FuY2VsJiZuNShWLmNhbmNlbCk/Zi5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6Vi5jYW5jZWxCdXR0b25TdHlsZXx8UixvbkNsaWNrOihLMSk9PntpZighbjUoVi5jYW5jZWwpKXJldHVybjtpZighaTEpcmV0dXJuO1YuY2FuY2VsLm9uQ2xpY2s9PW51bGx8fFYuY2FuY2VsLm9uQ2xpY2suY2FsbChWLmNhbmNlbCxLMSksdzEoKX0sY2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0uY2FuY2VsQnV0dG9uLFY9PW51bGw/dm9pZCAwOihCPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuY2FuY2VsQnV0dG9uKX0sVi5jYW5jZWwubGFiZWwpOm51bGwsZi5pc1ZhbGlkRWxlbWVudChWLmFjdGlvbik/Vi5hY3Rpb246Vi5hY3Rpb24mJm41KFYuYWN0aW9uKT9mLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTpWLmFjdGlvbkJ1dHRvblN0eWxlfHxkLG9uQ2xpY2s6KEsxKT0+e2lmKCFuNShWLmFjdGlvbikpcmV0dXJuO2lmKFYuYWN0aW9uLm9uQ2xpY2s9PW51bGx8fFYuYWN0aW9uLm9uQ2xpY2suY2FsbChWLmFjdGlvbixLMSksSzEuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47dzEoKX0sY2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0uYWN0aW9uQnV0dG9uLFY9PW51bGw/dm9pZCAwOihOPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOk4uYWN0aW9uQnV0dG9uKX0sVi5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBlNigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIEFRKCQsSil7bGV0IFE9e307cmV0dXJuWyQsSl0uZm9yRWFjaCgoWCxLKT0+e2xldCBZPUs9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLEc9WT96UTpOUTtmdW5jdGlvbiBCKE4pe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoeik9PntRW2Ake3F9LSR7en1gXT10eXBlb2YgTj09PSJudW1iZXIiP2Ake059cHhgOk59KX1pZih0eXBlb2YgWD09PSJudW1iZXIifHx0eXBlb2YgWD09PSJzdHJpbmciKUIoWCk7ZWxzZSBpZih0eXBlb2YgWD09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTik9PntpZihYW05dPT09dm9pZCAwKVFbYCR7cX0tJHtOfWBdPUc7ZWxzZSBRW2Ake3F9LSR7Tn1gXT10eXBlb2YgWFtOXT09PSJudW1iZXIiP2Ake1hbTl19cHhgOlhbTl19KTtlbHNlIEIoRyl9KSxRfXZhciBKND1mLmZvcndhcmRSZWYoZnVuY3Rpb24oSixRKXtsZXR7aWQ6WCxpbnZlcnQ6Syxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpHLGNsb3NlQnV0dG9uOkIsY2xhc3NOYW1lOk4sb2Zmc2V0OnosbW9iaWxlT2Zmc2V0OlYsdGhlbWU6SD0ibGlnaHQiLHJpY2hDb2xvcnM6QyxkdXJhdGlvbjpBLHN0eWxlOkwsdmlzaWJsZVRvYXN0czpVPUJRLHRvYXN0T3B0aW9uczpGLGRpcjpXPWU2KCksZ2FwOnc9SFEsaWNvbnM6UCxjb250YWluZXJBcmlhTGFiZWw6eD0iTm90aWZpY2F0aW9ucyJ9PUosW0Qsbl09Zi51c2VTdGF0ZShbXSksUj1mLnVzZU1lbW8oKCk9PntpZihYKXJldHVybiBELmZpbHRlcigoaik9PmoudG9hc3RlcklkPT09WCk7cmV0dXJuIEQuZmlsdGVyKChqKT0+IWoudG9hc3RlcklkKX0sW0QsWF0pLGQ9Zi51c2VNZW1vKCgpPT57cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChbWV0uY29uY2F0KFIuZmlsdGVyKChqKT0+ai5wb3NpdGlvbikubWFwKChqKT0+ai5wb3NpdGlvbikpKSl9LFtSLFldKSxbaSxyXT1mLnVzZVN0YXRlKFtdKSxbbyxhXT1mLnVzZVN0YXRlKCExKSxbTDEsbF09Zi51c2VTdGF0ZSghMSksW20sWDFdPWYudXNlU3RhdGUoSCE9PSJzeXN0ZW0iP0g6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz8iZGFyayI6ImxpZ2h0IjoibGlnaHQiKSxaMT1mLnVzZVJlZihudWxsKSxIMT1xLmpvaW4oIisiKS5yZXBsYWNlKC9LZXkvZywiIikucmVwbGFjZSgvRGlnaXQvZywiIiksdD1mLnVzZVJlZihudWxsKSxRMT1mLnVzZVJlZighMSkscTE9Zi51c2VDYWxsYmFjaygoaik9PntuKChwKT0+e3ZhciBfO2lmKCEoKF89cC5maW5kKChoKT0+aC5pZD09PWouaWQpKT09bnVsbD92b2lkIDA6Xy5kZWxldGUpKUswLmRpc21pc3Moai5pZCk7cmV0dXJuIHAuZmlsdGVyKCh7aWQ6aH0pPT5oIT09ai5pZCl9KX0sW10pO3JldHVybiBmLnVzZUVmZmVjdCgoKT0+e3JldHVybiBLMC5zdWJzY3JpYmUoKGopPT57aWYoai5kaXNtaXNzKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuKChwKT0+cC5tYXAoKF8pPT5fLmlkPT09ai5pZD97Li4uXyxkZWxldGU6ITB9Ol8pKX0pO3JldHVybn1zZXRUaW1lb3V0KCgpPT57Zi5mbHVzaFN5bmMoKCk9PntuKChwKT0+e2xldCBfPXAuZmluZEluZGV4KChoKT0+aC5pZD09PWouaWQpO2lmKF8hPT0tMSlyZXR1cm5bLi4ucC5zbGljZSgwLF8pLHsuLi5wW19dLC4uLmp9LC4uLnAuc2xpY2UoXysxKV07cmV0dXJuW2osLi4ucF19KX0pfSl9KX0sW0RdKSxmLnVzZUVmZmVjdCgoKT0+e2lmKEghPT0ic3lzdGVtIil7WDEoSCk7cmV0dXJufWlmKEg9PT0ic3lzdGVtIilpZih3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzKVgxKCJkYXJrIik7ZWxzZSBYMSgibGlnaHQiKTtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IGo9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKTt0cnl7ai5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCh7bWF0Y2hlczpwfSk9PntpZihwKVgxKCJkYXJrIik7ZWxzZSBYMSgibGlnaHQiKX0pfWNhdGNoKHApe2ouYWRkTGlzdGVuZXIoKHttYXRjaGVzOl99KT0+e3RyeXtpZihfKVgxKCJkYXJrIik7ZWxzZSBYMSgibGlnaHQiKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfX0pfX0sW0hdKSxmLnVzZUVmZmVjdCgoKT0+e2lmKEQubGVuZ3RoPD0xKWEoITEpfSxbRF0pLGYudXNlRWZmZWN0KCgpPT57bGV0IGo9KHApPT57dmFyIF87aWYocS5ldmVyeSgodik9PnBbdl18fHAuY29kZT09PXYpKXt2YXIgZzthKCEwKSwoZz1aMS5jdXJyZW50KT09bnVsbHx8Zy5mb2N1cygpfWlmKHAuY29kZT09PSJFc2NhcGUiJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PVoxLmN1cnJlbnR8fCgoXz1aMS5jdXJyZW50KT09bnVsbD92b2lkIDA6Xy5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKWEoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaiksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGopfSxbcV0pLGYudXNlRWZmZWN0KCgpPT57aWYoWjEuY3VycmVudClyZXR1cm4oKT0+e2lmKHQuY3VycmVudCl0LmN1cnJlbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0LmN1cnJlbnQ9bnVsbCxRMS5jdXJyZW50PSExfX0sW1oxLmN1cnJlbnRdKSxmLmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLHtyZWY6USwiYXJpYS1sYWJlbCI6YCR7eH0gJHtIMX1gLHRhYkluZGV4Oi0xLCJhcmlhLWxpdmUiOiJwb2xpdGUiLCJhcmlhLXJlbGV2YW50IjoiYWRkaXRpb25zIHRleHQiLCJhcmlhLWF0b21pYyI6ImZhbHNlIixzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc6ITB9LGQubWFwKChqLHApPT57dmFyIF87bGV0W2gsZ109ai5zcGxpdCgiLSIpO2lmKCFSLmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gZi5jcmVhdGVFbGVtZW50KCJvbCIse2tleTpqLGRpcjpXPT09ImF1dG8iP2U2KCk6Vyx0YWJJbmRleDotMSxyZWY6WjEsY2xhc3NOYW1lOk4sImRhdGEtc29ubmVyLXRvYXN0ZXIiOiEwLCJkYXRhLXNvbm5lci10aGVtZSI6bSwiZGF0YS15LXBvc2l0aW9uIjpoLCJkYXRhLXgtcG9zaXRpb24iOmcsc3R5bGU6eyItLWZyb250LXRvYXN0LWhlaWdodCI6YCR7KChfPWlbMF0pPT1udWxsP3ZvaWQgMDpfLmhlaWdodCl8fDB9cHhgLCItLXdpZHRoIjpgJHtMUX1weGAsIi0tZ2FwIjpgJHt3fXB4YCwuLi5MLC4uLkFRKHosVil9LG9uQmx1cjoodik9PntpZihRMS5jdXJyZW50JiYhdi5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKHYucmVsYXRlZFRhcmdldCkpe2lmKFExLmN1cnJlbnQ9ITEsdC5jdXJyZW50KXQuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLHQuY3VycmVudD1udWxsfX0sb25Gb2N1czoodik9PntpZih2LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ2LnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47aWYoIVExLmN1cnJlbnQpUTEuY3VycmVudD0hMCx0LmN1cnJlbnQ9di5yZWxhdGVkVGFyZ2V0fSxvbk1vdXNlRW50ZXI6KCk9PmEoITApLG9uTW91c2VNb3ZlOigpPT5hKCEwKSxvbk1vdXNlTGVhdmU6KCk9PntpZighTDEpYSghMSl9LG9uRHJhZ0VuZDooKT0+YSghMSksb25Qb2ludGVyRG93bjoodik9PntpZih2LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ2LnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47bCghMCl9LG9uUG9pbnRlclVwOigpPT5sKCExKX0sUi5maWx0ZXIoKHYpPT4hdi5wb3NpdGlvbiYmcD09PTB8fHYucG9zaXRpb249PT1qKS5tYXAoKHYsWTEpPT57dmFyIEcxLEUxO3JldHVybiBmLmNyZWF0ZUVsZW1lbnQoRlEse2tleTp2LmlkLGljb25zOlAsaW5kZXg6WTEsdG9hc3Q6dixkZWZhdWx0UmljaENvbG9yczpDLGR1cmF0aW9uOihHMT1GPT1udWxsP3ZvaWQgMDpGLmR1cmF0aW9uKSE9bnVsbD9HMTpBLGNsYXNzTmFtZTpGPT1udWxsP3ZvaWQgMDpGLmNsYXNzTmFtZSxkZXNjcmlwdGlvbkNsYXNzTmFtZTpGPT1udWxsP3ZvaWQgMDpGLmRlc2NyaXB0aW9uQ2xhc3NOYW1lLGludmVydDpLLHZpc2libGVUb2FzdHM6VSxjbG9zZUJ1dHRvbjooRTE9Rj09bnVsbD92b2lkIDA6Ri5jbG9zZUJ1dHRvbikhPW51bGw/RTE6QixpbnRlcmFjdGluZzpMMSxwb3NpdGlvbjpqLHN0eWxlOkY9PW51bGw/dm9pZCAwOkYuc3R5bGUsdW5zdHlsZWQ6Rj09bnVsbD92b2lkIDA6Ri51bnN0eWxlZCxjbGFzc05hbWVzOkY9PW51bGw/dm9pZCAwOkYuY2xhc3NOYW1lcyxjYW5jZWxCdXR0b25TdHlsZTpGPT1udWxsP3ZvaWQgMDpGLmNhbmNlbEJ1dHRvblN0eWxlLGFjdGlvbkJ1dHRvblN0eWxlOkY9PW51bGw/dm9pZCAwOkYuYWN0aW9uQnV0dG9uU3R5bGUsY2xvc2VCdXR0b25BcmlhTGFiZWw6Rj09bnVsbD92b2lkIDA6Ri5jbG9zZUJ1dHRvbkFyaWFMYWJlbCxyZW1vdmVUb2FzdDpxMSx0b2FzdHM6Ui5maWx0ZXIoKFcxKT0+VzEucG9zaXRpb249PXYucG9zaXRpb24pLGhlaWdodHM6aS5maWx0ZXIoKFcxKT0+VzEucG9zaXRpb249PXYucG9zaXRpb24pLHNldEhlaWdodHM6cixleHBhbmRCeURlZmF1bHQ6RyxnYXA6dyxleHBhbmRlZDpvLHN3aXBlRGlyZWN0aW9uczpKLnN3aXBlRGlyZWN0aW9uc30pfSkpfSkpfSk7ZnVuY3Rpb24gUTQoKXtyZXR1cm4gWihKNCx7dGhlbWU6ImRhcmsiLHBvc2l0aW9uOiJib3R0b20tY2VudGVyIix2aXNpYmxlVG9hc3RzOjQsZ2FwOjgsb2Zmc2V0Ontib3R0b206MjR9LHRvYXN0T3B0aW9uczp7dW5zdHlsZWQ6ITB9LHN0eWxlOnt6SW5kZXg6MjE0NzQ4MzY0N30sY29udGFpbmVyQXJpYUxhYmVsOiJzZXJ2ZS1zaW0gbm90aWZpY2F0aW9ucyJ9KX1mdW5jdGlvbiBaNCh7dG9hc3Q6JH0pe2xldCBKPSQuc3RhdHVzPT09ImVycm9yIixRPSQuc3RhdHVzPT09InVwbG9hZGluZyIsWD1RJiYkLnByb2dyZXNzIT09bnVsbCxLPSQucHJvZ3Jlc3MhPW51bGw/TWF0aC5yb3VuZCgkLnByb2dyZXNzKjEwMCk6MDtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoidXBsb2FkLXRvYXN0IixjbGFzc05hbWU6YGZsZXggdy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSBmbGV4LWNvbCBnYXAtMS41IHB4LTMgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldICR7Sj8ic2VsZWN0LXRleHQgY3Vyc29yLXRleHQiOiJzZWxlY3Qtbm9uZSBjdXJzb3ItZGVmYXVsdCJ9YCxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOlE/IiNhNWI0ZmMiOiQuc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksWigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbUSYmWCYmYFVwbG9hZGluZyAkeyQubmFtZX3igKYgJHtLfSVgLFEmJiFYJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHskLm5hbWV94oCmYDpgQWRkaW5nICR7JC5uYW1lfeKApmApLCQuc3RhdHVzPT09InN1Y2Nlc3MiJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAkeyQubmFtZX1gOmBBZGRlZCAkeyQubmFtZX0gdG8gUGhvdG9zYCksSiYmYCR7JC5uYW1lfTogJHskLm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLFEmJlooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46WD9aKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7S30lYH19KTpaKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0pfWZ1bmN0aW9uIFg0KHt3aWR0aDokLGhlaWdodDpKLHZpc2libGU6UX0pe3JldHVybiBaKCJkaXYiLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LTMgYm90dG9tLTMgei0yMCBwb2ludGVyLWV2ZW50cy1ub25lIHNlbGVjdC1ub25lIHJvdW5kZWQtbGcgcHgtMi41IHB5LTEgdGV4dC1bMTEuNXB4XSBmb250LW1vbm8gbGVhZGluZy1ub25lIHRyYWNraW5nLXdpZGUgdGV4dC13aGl0ZS85NSBiZy1wYW5lbC1iZy10cmFuc2x1Y2VudCBzaGFkb3ctWzBfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMTgpLDBfNnB4XzE4cHhfcmdiYSgwLDAsMCwwLjI4KSxpbnNldF8wXzBfMF8xcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjA2KV0gYmFja2Ryb3AtYmx1ci1tZCBiYWNrZHJvcC1zYXR1cmF0ZS0xNTAgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntvcGFjaXR5OlE/MTowLHRyYW5zZm9ybTpgdHJhbnNsYXRlWSgke1E/MDo0fXB4KSBzY2FsZSgke1E/MTowLjk2fSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDE4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIHRyYW5zZm9ybSAyMjBtcyBjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSJ9LGNoaWxkcmVuOltNYXRoLnJvdW5kKCQpLCIgIixaKCJzcGFuIix7Y2xhc3NOYW1lOiJvcGFjaXR5LTYwIG14LTAuNSIsY2hpbGRyZW46IsOXIn0pLCIgIixNYXRoLnJvdW5kKEopXX0pfWZ1bmN0aW9uIEs0KHtzdHJlYW1pbmc6JH0pe2xldCBKPSQ/IiM0YWRlODAiOiIjOGU4ZTkzIjtyZXR1cm4gWigic3BhbiIseyJkYXRhLXRlc3RpZCI6InN0cmVhbS1zdGF0dXMtcGlsbCIsY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLVs1cHhdIHRleHQtWzEycHhdIGZvbnQtbW9ubyBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntjb2xvcjpKfSwiYXJpYS1saXZlIjoicG9saXRlIixjaGlsZHJlbjpbWigic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xOHNfZWFzZV0iLHN0eWxlOntiYWNrZ3JvdW5kOkp9fSksJD8ibGl2ZSI6ImNvbm5lY3RpbmciXX0pfWZ1bmN0aW9uIE1RKCQsSixRKXtsZXQgWD1RLmxhdCpNYXRoLlBJLzE4MCxLPSgkLVEubGF0KSpNYXRoLlBJLzE4MDtyZXR1cm57eDooSi1RLmxuZykqTWF0aC5QSS8xODAqTWF0aC5jb3MoWCkqNjM3MTAwMCx6Oi1LKjYzNzEwMDB9fWZ1bmN0aW9uIGtRKCQsSixRKXtsZXQgWD1RLmxhdCpNYXRoLlBJLzE4MCxLPS1KLzYzNzEwMDAqKDE4MC9NYXRoLlBJKSxZPSQvKDYzNzEwMDAqTWF0aC5jb3MoWCkpKigxODAvTWF0aC5QSSk7cmV0dXJue2xhdDpRLmxhdCtLLGxuZzpRLmxuZytZfX1mdW5jdGlvbiBXUSgkLEosUSxYLEspe2xldCBZPUsqSyxxPVkqSyxHPShCLE4seixWKT0+MC41KigyKk4rKC1CK3opKksrKDIqQi01Kk4rNCp6LVYpKlkrKC1CKzMqTi0zKnorVikqcSk7cmV0dXJue3g6RygkLngsSi54LFEueCxYLngpLHo6RygkLnosSi56LFEueixYLnopLHk6RygkLnksSi55LFEueSxYLnkpLHJhd0FsdDpHKCQucmF3QWx0LEoucmF3QWx0LFEucmF3QWx0LFgucmF3QWx0KX19ZnVuY3Rpb24gX1EoJCxKLFEpe2lmKCQubGVuZ3RoPDIpcmV0dXJuICQuc2xpY2UoKTtsZXQgWD1bXSxLPSQubGVuZ3RoLFk9UT9LOkstMTtmb3IobGV0IHE9MDtxPFk7cSsrKXtsZXQgRz0kW1E/KHEtMStLKSVLOk1hdGgubWF4KDAscS0xKV0sQj0kW3ElS10sTj0kWyhxKzEpJUtdLHo9JFtRPyhxKzIpJUs6TWF0aC5taW4oSy0xLHErMildLFY9Ti54LUIueCxIPU4uei1CLnosQz1NYXRoLmh5cG90KFYsSCksQT1NYXRoLm1heCgyLE1hdGguY2VpbChDL0opKTtmb3IobGV0IEw9MDtMPEE7TCsrKXtsZXQgVT1ML0E7WC5wdXNoKFdRKEcsQixOLHosVSkpfX1pZighUSlYLnB1c2goJFtLLTFdKTtyZXR1cm4gWH1mdW5jdGlvbiBZNCgkKXtpZigkLndheXBvaW50cy5sZW5ndGg8Mil0aHJvdyBFcnJvcihgVHJhaWwgJHskLmlkfSBuZWVkcyBhdCBsZWFzdCAyIHdheXBvaW50c2ApO2xldCBKPXtsYXQ6JC53YXlwb2ludHMucmVkdWNlKChMLFUpPT5MK1UubGF0LDApLyQud2F5cG9pbnRzLmxlbmd0aCxsbmc6JC53YXlwb2ludHMucmVkdWNlKChMLFUpPT5MK1UubG5nLDApLyQud2F5cG9pbnRzLmxlbmd0aH0sUT0kLndheXBvaW50cy5tYXAoKEwpPT5MLmFsdD8/MCksWD1NYXRoLm1pbiguLi5RKSxLPU1hdGgubWF4KC4uLlEpLFk9JC53YXlwb2ludHMubWFwKChMKT0+e2xldHt4OlUsejpGfT1NUShMLmxhdCxMLmxuZyxKKSxXPUwuYWx0Pz8wO3JldHVybnt4OlUsejpGLHk6Vy1YLHJhd0FsdDpXfX0pLHE9X1EoWSw4LCEhJC5sb29wKSxHPVtdLEI9MDtmb3IobGV0IEw9MDtMPHEubGVuZ3RoO0wrKyl7bGV0IFU9cVtMXTtpZihMPjApe2xldCBQPXFbTC0xXTtCKz1NYXRoLmh5cG90KFUueC1QLngsVS56LVAueixVLnktUC55KX1sZXR7bGF0OkYsbG5nOld9PWtRKFUueCxVLnosSiksdz1NYXRoLm1heCgwLFUueSk7Ry5wdXNoKHt4OlUueCx6OlUueix5OncsYXJjOkIsbGF0OkYsbG5nOld9KX1sZXQgTj0xLzAsej0tMS8wLFY9MS8wLEg9LTEvMCxDPTEvMCxBPS0xLzA7Zm9yKGxldCBMIG9mIEcpe2lmKEwueDxOKU49TC54O2lmKEwueD56KXo9TC54O2lmKEwuejxWKVY9TC56O2lmKEwuej5IKUg9TC56O2lmKEwueTxDKUM9TC55O2lmKEwueT5BKUE9TC55fXJldHVybnt0cmFpbDokLG9yaWdpbjpKLHBvaW50czpHLHRvdGFsRGlzdGFuY2U6R1tHLmxlbmd0aC0xXS5hcmMsYm91bmRzOnt4OltOLHpdLHk6W0MsQV0sejpbVixIXX0scmF3TWluQWx0OlgscmF3TWF4QWx0Okt9fWZ1bmN0aW9uIGUwKCQsSil7bGV0IFE9JC50b3RhbERpc3RhbmNlO2lmKFE9PT0wKXJldHVybiAkLnBvaW50c1swXTtsZXQgWD1KO2lmKCQudHJhaWwubG9vcClYPShYJVErUSklUTtlbHNle2lmKFg8PTApcmV0dXJuICQucG9pbnRzWzBdO2lmKFg+PVEpcmV0dXJuICQucG9pbnRzWyQucG9pbnRzLmxlbmd0aC0xXX1sZXQgSz0wLFk9JC5wb2ludHMubGVuZ3RoLTE7d2hpbGUoSysxPFkpe2xldCB6PUsrWT4+PjE7aWYoJC5wb2ludHNbel0uYXJjPD1YKUs9ejtlbHNlIFk9en1sZXQgcT0kLnBvaW50c1tLXSxHPSQucG9pbnRzW1ldLEI9Ry5hcmMtcS5hcmMsTj1CPT09MD8wOihYLXEuYXJjKS9CO3JldHVybnt4OnEueCsoRy54LXEueCkqTix6OnEueisoRy56LXEueikqTix5OnEueSsoRy55LXEueSkqTixhcmM6WCxsYXQ6cS5sYXQrKEcubGF0LXEubGF0KSpOLGxuZzpxLmxuZysoRy5sbmctcS5sbmcpKk59fWZ1bmN0aW9uIFk4KCQpe3N3aXRjaCgkKXtjYXNlIndhbGsiOnJldHVybiAxLjQ7Y2FzZSJydW4iOnJldHVybiAzO2Nhc2UiY3ljbGUiOnJldHVybiA1LjU7Y2FzZSJkcml2ZSI6cmV0dXJuIDEzLjR9fXZhciBEUT1be2xhdDozNy4zMzI3Mixsbmc6LTEyMi4wMDgzMyxhbHQ6NDl9LHtsYXQ6MzcuMzMzMDksbG5nOi0xMjIuMDA3MzUsYWx0OjQ4fSx7bGF0OjM3LjMzMzczLGxuZzotMTIyLjAwNjYzLGFsdDo0OX0se2xhdDozNy4zMzQ1NCxsbmc6LTEyMi4wMDYyNyxhbHQ6NDl9LHtsYXQ6MzcuMzM1NCxsbmc6LTEyMi4wMDYzMyxhbHQ6NDl9LHtsYXQ6MzcuMzM2MTgsbG5nOi0xMjIuMDA2NzksYWx0OjQ1fSx7bGF0OjM3LjMzNjc1LGxuZzotMTIyLjAwNzU5LGFsdDo0NX0se2xhdDozNy4zMzcwNCxsbmc6LTEyMi4wMDg2MSxhbHQ6NDZ9LHtsYXQ6MzcuMzM2OTgsbG5nOi0xMjIuMDA5NjksYWx0OjQ4fSx7bGF0OjM3LjMzNjYyLGxuZzotMTIyLjAxMDY2LGFsdDo0OH0se2xhdDozNy4zMzU5OCxsbmc6LTEyMi4wMTEzOCxhbHQ6NDl9LHtsYXQ6MzcuMzM1MTcsbG5nOi0xMjIuMDExNzQsYWx0OjUwfSx7bGF0OjM3LjMzNDMxLGxuZzotMTIyLjAxMTY5LGFsdDo1MH0se2xhdDozNy4zMzM1NCxsbmc6LTEyMi4wMTEyMixhbHQ6NTB9LHtsYXQ6MzcuMzMyOTYsbG5nOi0xMjIuMDEwNDIsYWx0OjUxfSx7bGF0OjM3LjMzMjY4LGxuZzotMTIyLjAwOTQsYWx0OjUwfV0sUFE9W3tsYXQ6MzcuODMyMTIsbG5nOi0xMjIuNDgwNjUsYWx0OjMwfSx7bGF0OjM3LjgyOTM3LGxuZzotMTIyLjQ3OTc0LGFsdDozMH0se2xhdDozNy44MjY0OSxsbmc6LTEyMi40Nzk0LGFsdDozMH0se2xhdDozNy44MjM2Mixsbmc6LTEyMi40NzkwNyxhbHQ6NDV9LHtsYXQ6MzcuODIwNzQsbG5nOi0xMjIuNDc4NzMsYWx0OjU5fSx7bGF0OjM3LjgxNzg2LGxuZzotMTIyLjQ3ODM5LGFsdDo2Nn0se2xhdDozNy44MTQ5OCxsbmc6LTEyMi40NzgwNixhbHQ6NjZ9LHtsYXQ6MzcuODEyMTEsbG5nOi0xMjIuNDc3NzIsYWx0OjU4fSx7bGF0OjM3LjgwOTIzLGxuZzotMTIyLjQ3NzM0LGFsdDo0NH0se2xhdDozNy44MDk0OSxsbmc6LTEyMi40NzczLGFsdDo0NX0se2xhdDozNy44MTIzNixsbmc6LTEyMi40Nzc2NSxhbHQ6NTl9LHtsYXQ6MzcuODE1MjQsbG5nOi0xMjIuNDc3OTgsYWx0OjY2fSx7bGF0OjM3LjgxODEyLGxuZzotMTIyLjQ3ODMyLGFsdDo2Nn0se2xhdDozNy44MjEsbG5nOi0xMjIuNDc4NjYsYWx0OjU4fSx7bGF0OjM3LjgyMzg3LGxuZzotMTIyLjQ3OSxhbHQ6NDR9LHtsYXQ6MzcuODI2NzUsbG5nOi0xMjIuNDc5MzMsYWx0OjMwfSx7bGF0OjM3LjgyOTYzLGxuZzotMTIyLjQ3OTY3LGFsdDozMH0se2xhdDozNy44MzIzMyxsbmc6LTEyMi40ODA3MixhbHQ6MzB9XSxUUT1be2xhdDozNy44ODY2NCxsbmc6LTEyMi42MjU5OSxhbHQ6MTIxfSx7bGF0OjM3Ljg4ODg3LGxuZzotMTIyLjYyMzMyLGFsdDoxMzV9LHtsYXQ6MzcuODkxMTUsbG5nOi0xMjIuNjIxNixhbHQ6MTY0fSx7bGF0OjM3Ljg5MzUzLGxuZzotMTIyLjYxOTIxLGFsdDoxODB9LHtsYXQ6MzcuODk0NjYsbG5nOi0xMjIuNjE1NzcsYWx0OjIyMH0se2xhdDozNy44OTYzMSxsbmc6LTEyMi42MTI2OCxhbHQ6MjczfSx7bGF0OjM3Ljg5OTE3LGxuZzotMTIyLjYxMDk4LGFsdDozMTN9LHtsYXQ6MzcuOTAxNjYsbG5nOi0xMjIuNjA4NTUsYWx0OjM0Mn0se2xhdDozNy45MDE5OSxsbmc6LTEyMi42MDYwMSxhbHQ6NDA4fSx7bGF0OjM3LjkwMzM5LGxuZzotMTIyLjYwNDAxLGFsdDo0NTB9LHtsYXQ6MzcuOTA2NjIsbG5nOi0xMjIuNjAyOTEsYWx0OjQ0MH0se2xhdDozNy45MDk3MSxsbmc6LTEyMi42MDE3MyxhbHQ6NDMyfSx7bGF0OjM3LjkxMjEzLGxuZzotMTIyLjYwMDA3LGFsdDo0MzZ9LHtsYXQ6MzcuOTE0MzksbG5nOi0xMjIuNTk3OCxhbHQ6NDEwfSx7bGF0OjM3LjkxMjg1LGxuZzotMTIyLjU5NTA0LGFsdDo0MjJ9LHtsYXQ6MzcuOTEyNzQsbG5nOi0xMjIuNTkyMDIsYWx0OjQyNX0se2xhdDozNy45MTUsbG5nOi0xMjIuNTkwMzIsYWx0OjQxMn0se2xhdDozNy45MTYzNyxsbmc6LTEyMi41ODkwMyxhbHQ6NDA2fSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4NTk1LGFsdDozODJ9LHtsYXQ6MzcuOTE3NCxsbmc6LTEyMi41ODM5OCxhbHQ6MzcyfSx7bGF0OjM3LjkxNjQyLGxuZzotMTIyLjU4MjM2LGFsdDozNTJ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTgwMTEsYWx0OjM0Mn1dLElRPVt7bGF0OjQwLjc4MjE2LGxuZzotNzMuOTYyNTQsYWx0OjM3fSx7bGF0OjQwLjc4MjIxLGxuZzotNzMuOTYwOTgsYWx0OjM2fSx7bGF0OjQwLjc4MzI4LGxuZzotNzMuOTYwMSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NCxsbmc6LTczLjk1OTMsYWx0OjM2fSx7bGF0OjQwLjc4NTUsbG5nOi03My45NTg0OCxhbHQ6MzZ9LHtsYXQ6NDAuNzg2NjQsbG5nOi03My45NTc3NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg3OSxsbmc6LTczLjk1NzY0LGFsdDozNn0se2xhdDo0MC43ODg5OCxsbmc6LTczLjk1NzkyLGFsdDozNn0se2xhdDo0MC43ODg2OCxsbmc6LTczLjk1OTUxLGFsdDozN30se2xhdDo0MC43ODg5Nyxsbmc6LTczLjk2MTEyLGFsdDozNn0se2xhdDo0MC43ODgzMyxsbmc6LTczLjk2MjUsYWx0OjM3fSx7bGF0OjQwLjc4ODI4LGxuZzotNzMuOTY0MTYsYWx0OjM3fSx7bGF0OjQwLjc4ODA1LGxuZzotNzMuOTY1NzMsYWx0OjM2fSx7bGF0OjQwLjc4NjkxLGxuZzotNzMuOTY2MzYsYWx0OjM2fSx7bGF0OjQwLjc4NTY2LGxuZzotNzMuOTY2NjUsYWx0OjM2fSx7bGF0OjQwLjc4NDU4LGxuZzotNzMuOTY2MDgsYWx0OjM2fSx7bGF0OjQwLjc4NDAyLGxuZzotNzMuOTY0NTksYWx0OjM2fSx7bGF0OjQwLjc4MzIyLGxuZzotNzMuOTYzMzQsYWx0OjM3fV0sd1E9W3tsYXQ6MzcuNTk2NTksbG5nOi0xMjIuNTAzMTYsYWx0OjR9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NTA1LGxuZzotMTIyLjUwNjk4LGFsdDo5M30se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9XSwkMj1be2lkOiJhcHBsZS1wYXJrLWxvb3AiLG5hbWU6IkFwcGxlIFBhcmsgTG9vcCIsZGVzY3JpcHRpb246IkN1cGVydGlubyDigKIgZmxhdCByaW5nIHJvYWQiLG1vZGU6IndhbGsiLHdheXBvaW50czpEUSxsb29wOiEwfSx7aWQ6ImdvbGRlbi1nYXRlIixuYW1lOiJHb2xkZW4gR2F0ZSBDcm9zc2luZyIsZGVzY3JpcHRpb246IlNhbiBGcmFuY2lzY28g4oCiIGJyaWRnZSByb3VuZC10cmlwIixtb2RlOiJydW4iLHdheXBvaW50czpQUSxsb29wOiEwfSx7aWQ6InRhbS1yaWRnZSIsbmFtZToiTXQuIFRhbSBSaWRnZSIsZGVzY3JpcHRpb246IlN0aW5zb24gQmVhY2gg4oCiIFN0ZWVwIFJhdmluZSArIE1hdHQgRGF2aXMgbG9vcCIsbW9kZToid2FsayIsd2F5cG9pbnRzOlRRLGxvb3A6ITB9LHtpZDoiY2VudHJhbC1wYXJrIixuYW1lOiJSZXNlcnZvaXIgTG9vcCIsZGVzY3JpcHRpb246IkNlbnRyYWwgUGFyayDigKIgMi41IGttIixtb2RlOiJydW4iLHdheXBvaW50czpJUSxsb29wOiEwfSx7aWQ6InBjaC1wYWNpZmljYSIsbmFtZToiUGFjaWZpYyBDb2FzdCBId3kiLGRlc2NyaXB0aW9uOiJQYWNpZmljYSDigKIgRGV2aWwncyBTbGlkZSByb3VuZC10cmlwIixtb2RlOiJkcml2ZSIsd2F5cG9pbnRzOndRLGxvb3A6ITB9XTtmdW5jdGlvbiBzMSh7b3BlbjokLG9uT3BlbkNoYW5nZTpKLHN1bW1hcnk6USxjaGlsZHJlbjpYLHN1bW1hcnlDbGFzc05hbWU6Sz0iIixib2R5Q2xhc3NOYW1lOlk9ImZsZXggZmxleC1jb2wgZ2FwLTIuNSBwdC0yLjUiLGNsYXNzTmFtZTpxPSIiLC4uLkd9KXtyZXR1cm4gWigiZGV0YWlscyIse29wZW46JCxvblRvZ2dsZTooQik9PkooQi5jdXJyZW50VGFyZ2V0Lm9wZW4pLGNsYXNzTmFtZTpgbGVtLXNlY3Rpb24gYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yICR7cX1gLC4uLkcsY2hpbGRyZW46W1ooInN1bW1hcnkiLHtjbGFzc05hbWU6YGxlbS10b2dnbGUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgdGV4dC13aGl0ZS85MCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSAke0t9YCxjaGlsZHJlbjpbUSxaKGkyLHtvcGVuOiR9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6WSxjaGlsZHJlbjpYfSldfSl9ZnVuY3Rpb24gcjUoe2xhYmVsOiQsdmFsdWU6SixvcHRpb25zOlEsZGlzYWJsZWQ6WCxvbkNoYW5nZTpLLGNsYXNzTmFtZTpZfSl7bGV0W3EsR109ayghMSksQj1UKG51bGwpLE49VChudWxsKSxbeixWXT1rKG51bGwpLEg9KCk9PntsZXQgVT1CLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFVKXJldHVybjtWKHt0b3A6VS5ib3R0b20rNCxsZWZ0OlUubGVmdCxtaW5XaWR0aDpVLndpZHRofSl9O0kwKCgpPT57aWYocSlIKCl9LFtxXSksSTAoKCk9PntpZighcXx8IXopcmV0dXJuO2xldCBVPU4uY3VycmVudCxGPUIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIVV8fCFGKXJldHVybjtsZXQgVz04LHc9d2luZG93LmlubmVyV2lkdGgtVS5vZmZzZXRXaWR0aC1XLFA9ei5sZWZ0Pnc/TWF0aC5tYXgoVyx3KTp6LmxlZnQseD1GLnRvcC1VLm9mZnNldEhlaWdodC00LEQ9ei50b3ArVS5vZmZzZXRIZWlnaHQ8PXdpbmRvdy5pbm5lckhlaWdodC1XP3oudG9wOng+PVc/eDpNYXRoLm1heChXLHdpbmRvdy5pbm5lckhlaWdodC1VLm9mZnNldEhlaWdodC1XKTtpZihEIT09ei50b3B8fFAhPT16LmxlZnQpVih7Li4ueix0b3A6RCxsZWZ0OlB9KX0sW3Esel0pLHkoKCk9PntpZighcSlyZXR1cm47bGV0IFU9KCk9PkcoITEpLEY9KHcpPT57bGV0IFA9dy50YXJnZXQ7aWYoIU4uY3VycmVudD8uY29udGFpbnMoUCkmJiFCLmN1cnJlbnQ/LmNvbnRhaW5zKFApKVUoKX0sVz0odyk9PntpZighTi5jdXJyZW50Py5jb250YWlucyh3LnRhcmdldCkpSCgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsRiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsVywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsVSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixGKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixXLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixVKX19LFtxXSk7bGV0IEM9VCghMSk7eSgoKT0+e2lmKCFxKXtDLmN1cnJlbnQ9ITE7cmV0dXJufWlmKCF6fHxDLmN1cnJlbnQpcmV0dXJuO2xldCBVPU4uY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpO2lmKCFVPy5sZW5ndGgpcmV0dXJuO0MuY3VycmVudD0hMDtsZXQgRj1RLmZpbmRJbmRleCgoVyk9PlcudmFsdWU9PT1KKTtVW01hdGgubWF4KEYsMCldPy5mb2N1cygpfSxbcSx6LFEsSl0pO2xldCBBPShVKT0+e2xldCBGPVsuLi5OLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKT8/W11dLFc9Ri5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO2lmKFUua2V5PT09IkFycm93RG93biJ8fFUua2V5PT09IkFycm93VXAiKXtVLnByZXZlbnREZWZhdWx0KCk7bGV0IHc9VS5rZXk9PT0iQXJyb3dEb3duIj9NYXRoLm1pbihXKzEsRi5sZW5ndGgtMSk6TWF0aC5tYXgoVy0xLDApO0Zbd10/LmZvY3VzKCl9ZWxzZSBpZihVLmtleT09PSJFc2NhcGUiKVUucHJldmVudERlZmF1bHQoKSxHKCExKSxCLmN1cnJlbnQ/LmZvY3VzKCl9LEw9US5maW5kKChVKT0+VS52YWx1ZT09PUopO3JldHVybiBaKEoxLHtjaGlsZHJlbjpbWigiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlgsb25DbGljazooKT0+RygoVSk9PiFVKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOkw/LmxhYmVsPz9KfSl9KSxxJiZ6JiZFMyhaKCJkaXYiLHtyZWY6Tixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246QSxzdHlsZTp7dG9wOnoudG9wLGxlZnQ6ei5sZWZ0LG1pbldpZHRoOnoubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bMTBweF0gcC0xIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgei01MCIsY2hpbGRyZW46US5tYXAoKFUpPT5aKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOlUudmFsdWU9PT1KLG9uQ2xpY2s6KCk9PntLKFUudmFsdWUpLEcoITEpLEIuY3VycmVudD8uZm9jdXMoKX0sY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIHB4LTIuNSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCBmb2N1cy12aXNpYmxlOmJnLXdoaXRlLzggb3V0bGluZS1ub25lICR7VS52YWx1ZT09PUo/InRleHQtYWNjZW50IjoiIn1gLGNoaWxkcmVuOlUubGFiZWx9LFUudmFsdWUpKX0pLGRvY3VtZW50LmJvZHkpXX0pfXZhciBFUT02NTAscTg9WzEsMiw1LDIwXSxxND0xMDAwLEc4PXtzdGF0dXM6ImlkbGUiLGFyYzowLGVsYXBzZWRNczowfTtmdW5jdGlvbiBMNCh7dWRpZDokLGV4ZWM6Sn0pe2xldFtRLFhdPWsoITEpLFtLLFldPWsoJDJbMF0uaWQpLFtxLEddPWsoJDJbMF0ubW9kZSksW0IsTl09aygxKSxbeixWXT1rKEc4KSxbSCxDXT1rKG51bGwpLEE9azEoKCk9PiQyLmZpbmQoKGwpPT5sLmlkPT09Syk/PyQyWzBdLFtLXSksTD1rMSgoKT0+WTQoQSksW0FdKSxVPVQoMCksRj1UKCJpZGxlIiksVz1UKFk4KHEpKkIpLHc9VCgwKSxQPVQoTCkseD1UKG51bGwpO3koKCk9PntXLmN1cnJlbnQ9WTgocSkqQn0sW3EsQl0pO2xldCBEPVQobnVsbCk7eSgoKT0+e2xldCBsPVAuY3VycmVudCxtPVUuY3VycmVudDtpZihQLmN1cnJlbnQ9TCxsJiZsIT09TClELmN1cnJlbnQ9U1EobCxtLEwscGVyZm9ybWFuY2Uubm93KCkpO1UuY3VycmVudD0wLHcuY3VycmVudD0wLEYuY3VycmVudD0iaWRsZSIseC5jdXJyZW50PW51bGwsVihHOCl9LFtMXSk7bGV0IG49VCgwKSxSPVQobnVsbCksZD1UKG51bGwpO3koKCk9PntsZXQgbD0wLG09KFgxKT0+e2xldCBaMT1SLmN1cnJlbnQsSDE9WjE9PW51bGw/MTY6TWF0aC5taW4oNjQsWDEtWjEpO2lmKFIuY3VycmVudD1YMSxuLmN1cnJlbnQ9KG4uY3VycmVudCtIMSowLjAwMDEyKSUoTWF0aC5QSSoyKSxGLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCBRMT1XLmN1cnJlbnQqSDEvMTAwMDtVLmN1cnJlbnQrPVExLHcuY3VycmVudCs9SDE7bGV0IHExPVAuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCFQLmN1cnJlbnQudHJhaWwubG9vcCYmVS5jdXJyZW50Pj1xMSlVLmN1cnJlbnQ9cTEsRi5jdXJyZW50PSJwYXVzZWQiLFYoe3N0YXR1czoicGF1c2VkIixhcmM6cTEsZWxhcHNlZE1zOncuY3VycmVudH0pfWxldCB0PWQuY3VycmVudDtpZih0KXtsZXQgUTE9UC5jdXJyZW50LHExPW51bGwsaj1ELmN1cnJlbnQ7aWYoail7bGV0IHA9KFgxLWouc3RhcnRNcykvRVE7aWYocD49MSlELmN1cnJlbnQ9bnVsbDtlbHNle2xldCBfPXZRKHApO1ExPWpRKGosXykscTE9e3g6ai5wcmV2TWFya2VyLngrKGoubmV4dE1hcmtlci54LWoucHJldk1hcmtlci54KSpfLHk6ai5wcmV2TWFya2VyLnkrKGoubmV4dE1hcmtlci55LWoucHJldk1hcmtlci55KSpfLHo6ai5wcmV2TWFya2VyLnorKGoubmV4dE1hcmtlci56LWoucHJldk1hcmtlci56KSpffX19UlEodCxRMSxVLmN1cnJlbnQsbi5jdXJyZW50LFgxLEYuY3VycmVudD09PSJwbGF5aW5nIixxMSl9bD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobSl9O3JldHVybiBsPXJlcXVlc3RBbmltYXRpb25GcmFtZShtKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUobCl9LFtdKSx5KCgpPT57bGV0IGw9c2V0SW50ZXJ2YWwoKCk9PntpZihGLmN1cnJlbnQ9PT0icGxheWluZyIpVih7c3RhdHVzOiJwbGF5aW5nIixhcmM6VS5jdXJyZW50LGVsYXBzZWRNczp3LmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChsKX0sW10pLHkoKCk9PntpZih6LnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IGw9ITEsbT0wLFgxPW51bGwsWjE9YXN5bmMoKT0+e2lmKGx8fFgxKXJldHVybjtsZXQgdD1EYXRlLm5vdygpO2lmKHQtbTxxNClyZXR1cm47bT10O2xldCBRMT1lMChQLmN1cnJlbnQsVS5jdXJyZW50KSxxMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7UTEubGF0LnRvRml4ZWQoNyl9LCR7UTEubG5nLnRvRml4ZWQoNyl9YDtYMT1KKHExKS50aGVuKChqKT0+e2lmKGwpcmV0dXJuO2lmKGouZXhpdENvZGUhPT0wKUMoejQoai5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIEMobnVsbCl9KS5jYXRjaCgoaik9PntpZighbClDKGogaW5zdGFuY2VvZiBFcnJvcj9qLm1lc3NhZ2U6U3RyaW5nKGopKX0pLmZpbmFsbHkoKCk9PntYMT1udWxsfSl9O1oxKCk7bGV0IEgxPXNldEludGVydmFsKFoxLHE0KTtyZXR1cm4oKT0+e2w9ITAsY2xlYXJJbnRlcnZhbChIMSl9fSxbei5zdGF0dXMsJCxKXSk7bGV0IGk9RSgoKT0+e2lmKEYuY3VycmVudD09PSJwbGF5aW5nIil7Ri5jdXJyZW50PSJwYXVzZWQiLFYoKGwpPT4oey4uLmwsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihVLmN1cnJlbnQ+PVAuY3VycmVudC50b3RhbERpc3RhbmNlJiYhUC5jdXJyZW50LnRyYWlsLmxvb3ApVS5jdXJyZW50PTAsdy5jdXJyZW50PTA7aWYoeC5jdXJyZW50PT1udWxsKXtsZXQgbD1lMChQLmN1cnJlbnQsVS5jdXJyZW50KTt4LmN1cnJlbnQ9e2xhdDpsLmxhdCxsbmc6bC5sbmd9fUYuY3VycmVudD0icGxheWluZyIsVigobCk9Pih7Li4ubCxzdGF0dXM6InBsYXlpbmciLGFyYzpVLmN1cnJlbnQsZWxhcHNlZE1zOncuY3VycmVudH0pKX0sW10pLHI9RSgoKT0+e0YuY3VycmVudD0iaWRsZSIsVS5jdXJyZW50PTAsdy5jdXJyZW50PTAsVihHOCk7bGV0IGw9eC5jdXJyZW50O3guY3VycmVudD1udWxsO2xldCBtPWw/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2wubGF0LnRvRml4ZWQoNyl9LCR7bC5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7SihtKS50aGVuKChYMSk9PntpZihYMS5leGl0Q29kZSE9PTApQyh6NChYMS5zdGRlcnIpfHxudWxsKTtlbHNlIEMobnVsbCl9KX0sW0osJF0pLG89RSgobCk9PntZKGwpO2xldCBtPSQyLmZpbmQoKFgxKT0+WDEuaWQ9PT1sKTtpZihtKUcobS5tb2RlKX0sW10pO3koKCk9PigpPT57aWYoRi5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgbD14LmN1cnJlbnQsbT1sP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtsLmxhdC50b0ZpeGVkKDcpfSwke2wubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0oobSkuY2F0Y2goKCk9Pnt9KX0sW0osJF0pO2xldCBhPXouc3RhdHVzPT09InBsYXlpbmciLEwxPWE/YCR7Qjgoei5hcmMpfSDCtyAke0I0KHouZWxhcHNlZE1zKX1gOkI4KEwudG90YWxEaXN0YW5jZSk7cmV0dXJuIFooczEse29wZW46USxvbk9wZW5DaGFuZ2U6WCxzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b19taW5tYXgoMCwxZnIpX2F1dG9dIFtjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZV0gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKEoxLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiTG9jYXRpb24ifSksUT9aKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzIjohMCxjbGFzc05hbWU6Im1pbi13LTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6YT8iIzRhZGU4MCI6TC50b3RhbERpc3RhbmNlPjA/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6InRyYW5zcGFyZW50Iixib3hTaGFkb3c6YT8iMCAwIDZweCByZ2JhKDc0LDIyMiwxMjgsMC43KSI6Im5vbmUifX0pLFooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMiLGNoaWxkcmVuOkwxfSksIWEmJlooInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWwiOiEwLGNsYXNzTmFtZToic2hyaW5rLTAiLGNoaWxkcmVuOiJ0b3RhbCJ9KV19KTpaKCJzcGFuIix7fSldfSksY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgYmxvY2siLGNoaWxkcmVuOltaKHI1LHtsYWJlbDoiVHJhaWwiLHZhbHVlOkssb25DaGFuZ2U6byxvcHRpb25zOiQyLm1hcCgobCk9Pih7dmFsdWU6bC5pZCxsYWJlbDpsLm5hbWV9KSksY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy13aGl0ZS9bMC4wN10gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTYpXSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ymctd2hpdGUvWzAuMDhdIGZvY3VzOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjI0KV0ifSksWigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooaTIse29wZW46ITF9KX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46QS5kZXNjcmlwdGlvbn0pXX0pLFooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltaKCJjYW52YXMiLHtyZWY6ZCxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksWih5USx7cHJlcGFyZWQ6TH0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbWihWOCx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpCOCh6LmFyYyl9KSxaKFY4LHtsYWJlbDoiUGFjZSIsdmFsdWU6Z1EoVy5jdXJyZW50KX0pLFooVjgse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTpCNCh6LmVsYXBzZWRNcyl9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W1ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazppLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7YT8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJ9YCwiYXJpYS1wcmVzc2VkIjphLHRpdGxlOmE/IlBhdXNlIjoiUGxheSIsY2hpbGRyZW46W2E/WihwMyx7fSk6WihuMix7fSksWigic3BhbiIse2NoaWxkcmVuOmE/IlBhdXNlIjoiUGxheSJ9KV19KSxaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6cixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIsZGlzYWJsZWQ6ei5zdGF0dXM9PT0iaWRsZSImJnouYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbWihyMix7fSksWigic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpaKGJRLHthcmlhTGFiZWw6IlRyYW5zcG9ydCBtb2RlIix2YWx1ZTpxLG9uQ2hhbmdlOihsKT0+RyhsKSxvcHRpb25zOlt7dmFsdWU6IndhbGsiLGxhYmVsOiJXYWxrIixpY29uOloobDMse30pfSx7dmFsdWU6InJ1biIsbGFiZWw6IlJ1biIsaWNvbjpaKGQzLHt9KX0se3ZhbHVlOiJjeWNsZSIsbGFiZWw6IkN5Y2xlIixpY29uOlooYzMse30pfSx7dmFsdWU6ImRyaXZlIixsYWJlbDoiRHJpdmUiLGljb246WihvMyx7fSl9XX0pfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57bGV0IGw9cTguaW5kZXhPZihCKSxtPXE4WyhsKzEpJXE4Lmxlbmd0aF07TihtKX0sY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0yLjUgYm9yZGVyIHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCBtaW4tdy1bNTZweF0gYWN0aXZlOnNjYWxlLVswLjk3XSAke0I+MT8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGhvdmVyOmJnLXdoaXRlL1swLjg4XSBob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgaG92ZXI6Ymctd2hpdGUvWzAuMDldIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gaG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7Qn3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtCfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltaKHUzLHt9KSxCPjEmJlooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W0IsIsOXIl19KV19KV19KSxIJiZaKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkh9KV19KX12YXIgVjg9aTAoZnVuY3Rpb24oe2xhYmVsOkosdmFsdWU6UX0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpKfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46UX0pXX0pfSk7ZnVuY3Rpb24gYlEoe3ZhbHVlOiQsb25DaGFuZ2U6SixvcHRpb25zOlEsYXJpYUxhYmVsOlh9KXtyZXR1cm4gWigiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46US5tYXAoKEspPT57bGV0IFk9Sy52YWx1ZT09PSQ7cmV0dXJuIFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SihLLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7WT8iYmctd2hpdGUvWzAuMTJdIHRleHQtd2hpdGUiOiJiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzYwIGhvdmVyOmJnLXdoaXRlL1swLjA1XSBob3Zlcjp0ZXh0LXdoaXRlLzkwIn1gLCJhcmlhLXByZXNzZWQiOlksImFyaWEtbGFiZWwiOksuaWNvbj9LLmxhYmVsOnZvaWQgMCx0aXRsZTpLLmljb24/Sy5sYWJlbDp2b2lkIDAsY2hpbGRyZW46Sy5pY29uPz9LLmxhYmVsfSxLLnZhbHVlKX0pfSl9ZnVuY3Rpb24geVEoe3ByZXBhcmVkOiR9KXtpZigkLnJhd01heEFsdC0kLnJhd01pbkFsdDw1KXJldHVybiBudWxsO3JldHVybiBaKEoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiBsZWZ0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1ooeTUse2RpcjoidXAifSksIiAiLE40KCQucmF3TWF4QWx0KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1ooeTUse2RpcjoiZG93biJ9KSwiICIsTjQoJC5yYXdNaW5BbHQpXX0pXX0pfXZhciBHND0xNDA7ZnVuY3Rpb24gVjQoJCxKKXtsZXQgUT1BcnJheShKKTtmb3IobGV0IFg9MDtYPEo7WCsrKXtsZXQgSz1KPT09MT8wOlgvKEotMSksWT1lMCgkLEsqJC50b3RhbERpc3RhbmNlKTtRW1hdPXt4OlkueCx5OlkueSx6Olkuen19cmV0dXJuIFF9ZnVuY3Rpb24gU1EoJCxKLFEsWCl7bGV0IEs9KCQuYm91bmRzLnhbMF0rJC5ib3VuZHMueFsxXSkvMixZPSgkLmJvdW5kcy56WzBdKyQuYm91bmRzLnpbMV0pLzIscT0kLmJvdW5kcy55WzBdLEc9TWF0aC5tYXgoMSwkLmJvdW5kcy54WzFdLSQuYm91bmRzLnhbMF0sJC5ib3VuZHMuelsxXS0kLmJvdW5kcy56WzBdKSxCPShRLmJvdW5kcy54WzBdK1EuYm91bmRzLnhbMV0pLzIsTj0oUS5ib3VuZHMuelswXStRLmJvdW5kcy56WzFdKS8yLHo9US5ib3VuZHMueVswXSxIPU1hdGgubWF4KDEsUS5ib3VuZHMueFsxXS1RLmJvdW5kcy54WzBdLFEuYm91bmRzLnpbMV0tUS5ib3VuZHMuelswXSkvRyxBPVY0KCQsRzQpLm1hcCgoRCk9Pih7eDooRC54LUspKkgrQix5OihELnktcSkqSCt6LHo6KEQuei1ZKSpIK059KSksTD1WNChRLEc0KSxVPSgkLnRyYWlsLmxvb3B8fFEudHJhaWwubG9vcCk/PyExLEY9eFEoQSxMLFUpLFc9ZTAoJCxKKSx3PXt4OihXLngtSykqSCtCLHk6KFcueS1xKSpIK3osejooVy56LVkpKkgrTn0sUD1lMChRLDApLHg9e3g6UC54LHk6UC55LHo6UC56fTtyZXR1cm57ZnJvbTokLHRvOlEsZnJvbVB0czpBLHRvUHRzOkYscHJldk1hcmtlcjp3LG5leHRNYXJrZXI6eCxzdGFydE1zOlh9fWZ1bmN0aW9uIHhRKCQsSixRKXtsZXQgWD0kLmxlbmd0aCxLPTEvMCxZPTAscT0hMSxHPVtKLFsuLi5KXS5yZXZlcnNlKCldO2ZvcihsZXQgej0wO3o8Ry5sZW5ndGg7eisrKXtsZXQgVj1HW3pdLEg9UT9YOjE7Zm9yKGxldCBDPTA7QzxIO0MrKyl7bGV0IEE9MDtmb3IobGV0IEw9MDtMPFg7TCsrKXtsZXQgVT0kW0xdLEY9VlsoTCtDKSVYXSxXPVUueC1GLngsdz1VLnktRi55LFA9VS56LUYuejtpZihBKz1XKlcrdyp3K1AqUCxBPj1LKWJyZWFrfWlmKEE8SylLPUEsWT1DLHE9ej09PTF9fWxldCBCPXE/Wy4uLkpdLnJldmVyc2UoKTpKLE49QXJyYXkoWCk7Zm9yKGxldCB6PTA7ejxYO3orKylOW3pdPUJbKHorWSklWF07cmV0dXJuIE59ZnVuY3Rpb24galEoJCxKKXtsZXQgUT0kLmZyb21QdHMubGVuZ3RoLFg9QXJyYXkoUSksSz0wLFk9bnVsbCxxPTEvMCxHPS0xLzAsQj0xLzAsTj0tMS8wLHo9MS8wLFY9LTEvMDtmb3IobGV0IEg9MDtIPFE7SCsrKXtsZXQgQz0kLmZyb21QdHNbSF0sQT0kLnRvUHRzW0hdLEw9Qy54KyhBLngtQy54KSpKLFU9Qy55KyhBLnktQy55KSpKLEY9Qy56KyhBLnotQy56KSpKO2lmKFkpe2xldCB3PUwtWS54LFA9VS1ZLnkseD1GLVkuejtLKz1NYXRoLnNxcnQodyp3K1AqUCt4KngpfWxldCBXPXt4OkwseTpVLHo6RixhcmM6SyxsYXQ6MCxsbmc6MH07aWYoWFtIXT1XLFk9VyxMPHEpcT1MO2lmKEw+RylHPUw7aWYoVTxCKUI9VTtpZihVPk4pTj1VO2lmKEY8eil6PUY7aWYoRj5WKVY9Rn1yZXR1cm57dHJhaWw6JC50by50cmFpbCxvcmlnaW46JC50by5vcmlnaW4scG9pbnRzOlgsdG90YWxEaXN0YW5jZTpLLGJvdW5kczp7eDpbcSxHXSx5OltCLE5dLHo6W3osVl19LHJhd01pbkFsdDokLnRvLnJhd01pbkFsdCsoJC5mcm9tLnJhd01pbkFsdC0kLnRvLnJhd01pbkFsdCkqKDEtSikscmF3TWF4QWx0OiQudG8ucmF3TWF4QWx0KygkLmZyb20ucmF3TWF4QWx0LSQudG8ucmF3TWF4QWx0KSooMS1KKX19ZnVuY3Rpb24gdlEoJCl7cmV0dXJuICQ8MC41PzIqJCokOjEtTWF0aC5wb3coLTIqJCsyLDIpLzJ9ZnVuY3Rpb24gUlEoJCxKLFEsWCxLLFkscSl7bGV0IEc9JC5nZXRDb250ZXh0KCIyZCIpO2lmKCFHKXJldHVybjtsZXR7Y2xpZW50V2lkdGg6QixjbGllbnRIZWlnaHQ6Tn09JDtpZihCPT09MHx8Tj09PTApcmV0dXJuO2xldCB6PXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxOjEsVj1NYXRoLnJvdW5kKEIqeiksSD1NYXRoLnJvdW5kKE4qeik7aWYoJC53aWR0aCE9PVZ8fCQuaGVpZ2h0IT09SCkkLndpZHRoPVYsJC5oZWlnaHQ9SDtHLnNldFRyYW5zZm9ybSh6LDAsMCx6LDAsMCksRy5jbGVhclJlY3QoMCwwLEIsTik7bGV0IEM9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChCKjAuNSxOKjAuNTUsTWF0aC5taW4oQixOKSowLjIsQiowLjUsTiowLjU1LE1hdGgubWF4KEIsTikqMC44NSk7Qy5hZGRDb2xvclN0b3AoMCwiIzFhMWExZCIpLEMuYWRkQ29sb3JTdG9wKDEsIiMwYTBhMGMiKSxHLmZpbGxTdHlsZT1DLEcuZmlsbFJlY3QoMCwwLEIsTiksaFEoRyxCLE4pO2xldHtwb2ludHM6QSxib3VuZHM6TH09SjtpZihBLmxlbmd0aDwyKXJldHVybjtsZXQgVT0yOCpNYXRoLlBJLzE4MCxGPU1hdGguc2luKFUpLFc9TWF0aC5jb3MoVSksdz1NYXRoLnNpbihYKSxQPU1hdGguY29zKFgpLHg9KEwueFswXStMLnhbMV0pLzIsRD0oTC56WzBdK0wuelsxXSkvMixuPUwueFsxXS1MLnhbMF0sUj1MLnpbMV0tTC56WzBdLGQ9TC55WzFdLUwueVswXSxpPU1hdGgubWF4KG4sUikqMS4wNSxyPU1hdGgubWF4KFIqVytkKkYsbiowLjQpKjEuMTUsbz1CKjAuMDgsYT1OKjAuMTgsTDE9TWF0aC5taW4oKEItbyoyKS9pLChOLWEqMikvcikqMS40NSxsPWQ8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxkKSksbT0oaixwLF8pPT57bGV0IGg9ai14LGc9Xy1ELHY9aCpQK2cqdyxZMT0taCp3K2cqUCxHMT1wKmwsRTE9RzEqVy1ZMSpGLFcxPUcxKkYrWTEqVztyZXR1cm57c3g6Qi8yK3YqTDEsc3k6TiowLjU1LUUxKkwxLGRlcHRoOlcxfX0sWDE9MzgsWjE9QS5tYXAoKGopPT57bGV0IHA9bShqLngsai55LGoueiksXz1tKGoueCwwLGoueiksaD17c3g6cC5zeCxzeTpNYXRoLm1heChfLnN5LHAuc3krWDEpLGRlcHRoOl8uZGVwdGh9O3JldHVybntwOmosdG9wOnAsYm90Omh9fSk7Zm9yKGxldCBqPTE7ajxaMS5sZW5ndGg7aisrKXtsZXQgcD1aMVtqLTFdLF89WjFbal0saD1HLmNyZWF0ZUxpbmVhckdyYWRpZW50KChwLnRvcC5zeCtfLnRvcC5zeCkvMiwocC50b3Auc3krXy50b3Auc3kpLzIsKHAuYm90LnN4K18uYm90LnN4KS8yLChwLmJvdC5zeStfLmJvdC5zeSkvMik7aC5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIpLGguYWRkQ29sb3JTdG9wKDAuNDUsInJnYmEoMTgwLDE4MCwxODUsMC4yOCkiKSxoLmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIiksaC5hZGRDb2xvclN0b3AoMSwicmdiYSgwLDAsMCwwKSIpLEcuZmlsbFN0eWxlPWgsRy5iZWdpblBhdGgoKSxHLm1vdmVUbyhwLnRvcC5zeCxwLnRvcC5zeSksRy5saW5lVG8oXy50b3Auc3gsXy50b3Auc3kpLEcubGluZVRvKF8uYm90LnN4LF8uYm90LnN5KSxHLmxpbmVUbyhwLmJvdC5zeCxwLmJvdC5zeSksRy5jbG9zZVBhdGgoKSxHLmZpbGwoKX1HLnN0cm9rZVN0eWxlPSIjZmZmZmZmIixHLmxpbmVXaWR0aD0xLjYsRy5saW5lQ2FwPSJyb3VuZCIsRy5saW5lSm9pbj0icm91bmQiLEcuYmVnaW5QYXRoKCk7Zm9yKGxldCBqPTA7ajxaMS5sZW5ndGg7aisrKXtsZXR7dG9wOnB9PVoxW2pdO2lmKGo9PT0wKUcubW92ZVRvKHAuc3gscC5zeSk7ZWxzZSBHLmxpbmVUbyhwLnN4LHAuc3kpfUcuc3Ryb2tlKCk7bGV0IEgxPVE7Ry5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIsRy5saW5lV2lkdGg9Mi4yLEcuYmVnaW5QYXRoKCk7bGV0IHQ9ITE7Zm9yKGxldCBqPTA7ajxaMS5sZW5ndGg7aisrKXtsZXR7cCx0b3A6X309WjFbal07aWYocC5hcmM+SDEpYnJlYWs7aWYoIXQpRy5tb3ZlVG8oXy5zeCxfLnN5KSx0PSEwO2Vsc2UgRy5saW5lVG8oXy5zeCxfLnN5KX1pZih0KUcuc3Ryb2tlKCk7bGV0IFExPXE/P2UwKEosUSkscTE9bShRMS54LFExLnksUTEueik7aWYoWSl7bGV0IF89SyUyNjAwLzI2MDAsaD00KzIyKl8sZz0wLjIyKigxLV8pLHY9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChxMS5zeCxxMS5zeSxoKjAuNSxxMS5zeCxxMS5zeSxoKTt2LmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksdi5hZGRDb2xvclN0b3AoMC43LGByZ2JhKDI1NSwyNTUsMjU1LCR7Zy50b0ZpeGVkKDMpfSlgKSx2LmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksRy5maWxsU3R5bGU9dixHLmJlZ2luUGF0aCgpLEcuYXJjKHExLnN4LHExLnN5LGgsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfUcuZmlsbFN0eWxlPSIjZmZmIixHLmJlZ2luUGF0aCgpLEcuYXJjKHExLnN4LHExLnN5LDMuOCwwLE1hdGguUEkqMiksRy5maWxsKCl9ZnVuY3Rpb24gaFEoJCxKLFEpeyQuZmlsbFN0eWxlPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIjtmb3IobGV0IFk9NztZPFE7WSs9MTQpZm9yKGxldCBxPTc7cTxKO3ErPTE0KSQuYmVnaW5QYXRoKCksJC5hcmMocSxZLDAuNywwLE1hdGguUEkqMiksJC5maWxsKCl9ZnVuY3Rpb24gQjgoJCl7aWYoJDwxMDAwKXJldHVybmAkeyQudG9GaXhlZCgwKX0gbWA7cmV0dXJuYCR7KCQvMTAwMCkudG9GaXhlZCgyKX0ga21gfWZ1bmN0aW9uIEI0KCQpe2xldCBKPU1hdGguZmxvb3IoJC8xMDAwKSxRPU1hdGguZmxvb3IoSi8zNjAwKSxYPU1hdGguZmxvb3IoSiUzNjAwLzYwKSxLPUolNjA7aWYoUT4wKXJldHVybmAke1F9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtLLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWA7cmV0dXJuYCR7WH06JHtLLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gZ1EoJCl7aWYoJDw9MClyZXR1cm4i4oCUIjtpZigkPjcpcmV0dXJuYCR7KCQqMy42KS50b0ZpeGVkKDApfSBrbS9oYDtsZXQgSj0xMDAwLyQsUT1NYXRoLmZsb29yKEovNjApLFg9TWF0aC5yb3VuZChKJTYwKTtyZXR1cm5gJHtRfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9L2ttYH1mdW5jdGlvbiBONCgkKXtyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gfWZ1bmN0aW9uIHo0KCQpe2xldCBKPSQudHJpbSgpO2lmKCFKKXJldHVybiIiO2xldCBRPUoubWF0Y2goL1JlYXNvbjpccyooLispJC9tKTtpZihRKXJldHVybiBRWzFdO3JldHVybiBKLnNwbGl0KGAKYCkuc2xpY2UoLTEpWzBdPz9KfWFzeW5jIGZ1bmN0aW9uIE44KCQsSixRKXtsZXQgWD1hd2FpdCAkKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtKfSAke08xKFEpfSBhcHBgKTtpZihYLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WC5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgSz1YLnN0ZG91dC50cmltKCk7aWYoIUspcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBZPWF3YWl0ICQoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtPMShLKyIvSW5mby5wbGlzdCIpfWApLHE9e307aWYoWS5leGl0Q29kZT09PTApdHJ5e3E9SlNPTi5wYXJzZShZLnN0ZG91dCl9Y2F0Y2h7fWxldCBHLE49KHE/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P3E/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/cT8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoTiYmTi5sZW5ndGg+MClHPU5bTi5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgcT8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKUc9cS5DRkJ1bmRsZUljb25GaWxlO2xldCB6PW51bGw7aWYoRyl7bGV0IFY9W2Ake0d9QDN4LnBuZ2AsYCR7R31AMngucG5nYCxgJHtHfS5wbmdgLGAke0d9NjB4NjBAM3gucG5nYCxgJHtHfTYweDYwQDJ4LnBuZ2BdLEM9KGF3YWl0ICQoYGJhc2ggLWMgJHtPMShWLm1hcCgoQSk9PmBbIC1mICR7TzEoSysiLyIrQSl9IF0gJiYgZWNobyAke08xKEsrIi8iK0EpfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKEMpe2xldCBBPWF3YWl0ICQoYGJhc2U2NCAtaSAke08xKEMpfWApO2lmKEEuZXhpdENvZGU9PT0wKXo9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0Euc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpLLGRpc3BsYXlOYW1lOnEuQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/cS5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOnEuQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpxLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpxLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpxLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDp6fX12YXIgQTI9bmV3IE1hcDtmdW5jdGlvbiBINCgkLEosUSl7bGV0IFg9YCR7Sn06JHtRfWAsSz1BMi5nZXQoWCk7aWYoSyE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEspO2xldCBZPU44KCQsSixRKS50aGVuKChxKT0+e2xldCBHPXEuaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIEEyLnNldChYLEcpLEd9KS5jYXRjaCgoKT0+e3JldHVybiBBMi5zZXQoWCxudWxsKSxudWxsfSk7cmV0dXJuIEEyLnNldChYLFkpLFl9ZnVuY3Rpb24gZlEoJCl7cmV0dXJuICQuc3RhcnRzV2l0aCgiY29tLmFwcGxlLiIpfWZ1bmN0aW9uIG1RKCQpe2lmKCQ9PT0iY29tLmFwcGxlLnNwcmluZ2JvYXJkIilyZXR1cm4iU3ByaW5nQm9hcmQiO3JldHVybiAkfWZ1bmN0aW9uIHBRKHtidW5kbGVJZDokfSl7bGV0IEo9ZlEoJCk7cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6Sj8ic3lzdGVtLWFwcC1pY29uIjoiYXBwLWljb24tZmFsbGJhY2siLGNsYXNzTmFtZTpgdy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyICR7Sj8iYm9yZGVyLVsjM2I1Zjk5XSBiZy1bbGluZWFyLWdyYWRpZW50KDE0NWRlZywjMjUzYTVmLCMxNjIxMzIpXSB0ZXh0LVsjYzhkN2ZmXSI6ImJvcmRlci13aGl0ZS8xMCBiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84MCJ9YCwiYXJpYS1sYWJlbCI6Sj8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIix0aXRsZTpKPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLGNoaWxkcmVuOko/Wigic3ZnIix7cm9sZToiaW1nIix2aWV3Qm94OiIwIDAgMjQgMjQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOiJzaXplLVsxOXB4XSIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbWigidGl0bGUiLHtjaGlsZHJlbjoiQXBwbGUifSksWigicGF0aCIse2Q6Ik0xMi4xNTIgNi44OTZjLS45NDggMC0yLjQxNS0xLjA3OC0zLjk2LTEuMDQtMi4wNC4wMjctMy45MSAxLjE4My00Ljk2MSAzLjAxNC0yLjExNyAzLjY3NS0uNTQ2IDkuMTAzIDEuNTE5IDEyLjA5IDEuMDEzIDEuNDU0IDIuMjA4IDMuMDkgMy43OTIgMy4wMzkgMS41Mi0uMDY1IDIuMDktLjk4NyAzLjkzNS0uOTg3IDEuODMxIDAgMi4zNS45ODcgMy45Ni45NDggMS42MzctLjAyNiAyLjY3Ni0xLjQ4IDMuNjc2LTIuOTQ4IDEuMTU2LTEuNjg4IDEuNjM2LTMuMzI1IDEuNjYyLTMuNDE1LS4wMzktLjAxMy0zLjE4Mi0xLjIyMS0zLjIyLTQuODU3LS4wMjYtMy4wNCAyLjQ4LTQuNDk0IDIuNTk3LTQuNTU5LTEuNDI5LTIuMDktMy42MjMtMi4zMjQtNC4zOS0yLjM3Ni0yLS4xNTYtMy42NzUgMS4wOS00LjYxIDEuMDl6TTE1LjUzIDMuODNjLjg0My0xLjAxMiAxLjQtMi40MjcgMS4yNDUtMy44My0xLjIwNy4wNTItMi42NjIuODA1LTMuNTMyIDEuODE4LS43OC44OTYtMS40NTQgMi4zMzgtMS4yNzMgMy43MTQgMS4zMzguMTA0IDIuNzE1LS42ODggMy41NTktMS43MDEifSldfSk6Wih4Mix7c2l6ZToxOSxzdHJva2VXaWR0aDoxLjl9KX0pfWZ1bmN0aW9uIHVRKHtidW5kbGVJZDokLGljb25EYXRhVXJsOkp9KXtpZihKKXJldHVybiBaKCJpbWciLHtzcmM6SixjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pO3JldHVybiBaKHBRLHtidW5kbGVJZDokfSl9ZnVuY3Rpb24gVTQoe3VkaWQ6JCxjdXJyZW50QXBwOkp9KXtsZXRbUSxYXT1rKG51bGwpLFtLLFldPWsoITEpO2lmKHkoKCk9PntpZighSil7WChudWxsKTtyZXR1cm59bGV0IHE9ITE7cmV0dXJuIFgoe2J1bmRsZUlkOkouYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpKLmlzUmVhY3ROYXRpdmUscGlkOkoucGlkLGxvYWRpbmc6ITB9KSxOOChJMSwkLEouYnVuZGxlSWQpLnRoZW4oKEcpPT57aWYocSlyZXR1cm47WCh7YnVuZGxlSWQ6Si5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOkouaXNSZWFjdE5hdGl2ZSxwaWQ6Si5waWQsbG9hZGluZzohMSwuLi5HfSl9KSwoKT0+e3E9ITB9fSxbJCxKLEo/LmJ1bmRsZUlkLEo/LnBpZCxKPy5pc1JlYWN0TmF0aXZlXSksIVEpcmV0dXJuIFoobFEse30pO3JldHVybiBaKHMxLHtvcGVuOkssb25PcGVuQ2hhbmdlOlksc3VtbWFyeUNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IixzdW1tYXJ5OlooSjEse2NoaWxkcmVuOltaKHVRLHtidW5kbGVJZDpRLmJ1bmRsZUlkLGljb25EYXRhVXJsOlEuaWNvbkRhdGFVcmx9KSxaKGRRLHtidW5kbGVJZDpRLmJ1bmRsZUlkLGRpc3BsYXlOYW1lOlEuZGlzcGxheU5hbWV9KV19KSxjaGlsZHJlbjpbUS5lcnJvciYmWigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpRLmVycm9yfSksWigiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltaKE0yLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6US5zaG9ydFZlcnNpb24/YCR7US5zaG9ydFZlcnNpb259ICgke1EuYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6US5sb2FkaW5nPyLigKYiOiLigJQifSksWihNMix7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOlEubWluT1M/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksWihNMix7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOlEuZXhlY3V0YWJsZT8/KFEubG9hZGluZz8i4oCmIjoi4oCUIil9KSxaKE0yLHtsYWJlbDoiUElEIix2YWx1ZTpRLnBpZCE9bnVsbD9TdHJpbmcoUS5waWQpOiLigJQifSksUS5pc1JlYWN0TmF0aXZlJiZaKE0yLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLFooTTIse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6US5hcHBQYXRoPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpRLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57STEoYG9wZW4gLVIgJHtPMShRLmFwcFBhdGgpfWApfSxpY29uOlooajIse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi4yfSl9OnZvaWQgMH0pXX0pXX0pfWZ1bmN0aW9uIGxRKCl7cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1kZXRlY3Rpb24tc2tlbGV0b24iLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1sYWJlbCI6IldhaXRpbmcgZm9yIGZvcmVncm91bmQgYXBwIixjaGlsZHJlbjpaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJnLXdoaXRlL1swLjA4XSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0yIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToiaC0zLjUgdy1bNDYlXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImgtMi41IHctWzY4JV0gcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSJ9KV19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTIuNSBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pfSl9ZnVuY3Rpb24gZFEoe2J1bmRsZUlkOiQsZGlzcGxheU5hbWU6Sn0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGxlYWRpbmctdGlnaHQgdGV4dC1sZWZ0IixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvOTAgdHJ1bmNhdGUiLGNoaWxkcmVuOko/P21RKCQpfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0cnVuY2F0ZSIsdGl0bGU6JCxjaGlsZHJlbjokfSldfSl9ZnVuY3Rpb24gTTIoe2xhYmVsOiQsdmFsdWU6Sixtb25vOlEsYWN0aW9uOlh9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJncm91cCBmbGV4IGl0ZW1zLWJhc2VsaW5lIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltaKCJkdCIse2NsYXNzTmFtZToibS0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTAgdy0yMSBzaHJpbmstMCIsY2hpbGRyZW46JH0pLFooImRkIix7Y2xhc3NOYW1lOmBtLTAgdGV4dC13aGl0ZS85MCBmbGV4LTEgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCByZWxhdGl2ZSAke1E/ImZvbnQtbW9ubyB0ZXh0LVsxMXB4XSI6InRleHQtWzEycHhdIn1gLHRpdGxlOkosY2hpbGRyZW46W0osWCYmWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIGJvdHRvbS0wIHBsLTcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgYmctW2xpbmVhci1ncmFkaWVudCh0b19yaWdodCxyZ2JhKDI4LDI4LDMwLDApXzAlLCMxYzFjMWVfNTUlKV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE1c19lYXNlLHRyYW5zZm9ybV8wLjE1c19lYXNlXSBvcGFjaXR5LTAgdHJhbnNsYXRlLXgtMSBwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGdyb3VwLWhvdmVyOnRyYW5zbGF0ZS14LTAgZ3JvdXAtaG92ZXI6cG9pbnRlci1ldmVudHMtYXV0byIsY2hpbGRyZW46WigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlgub25DbGljayx0aXRsZTpYLnRpdGxlLCJhcmlhLWxhYmVsIjpYLnRpdGxlLGNsYXNzTmFtZToidy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkIHRleHQtd2hpdGUgY3Vyc29yLXBvaW50ZXIgcC0wIixjaGlsZHJlbjpYLmljb259KX0pXX0pXX0pfXZhciBDND1be2tleToiY2FtZXJhIixsYWJlbDoiQ2FtZXJhIn0se2tleToibWljcm9waG9uZSIsbGFiZWw6Ik1pY3JvcGhvbmUifSx7a2V5OiJwaG90b3MiLGxhYmVsOiJQaG90b3MifSx7a2V5OiJwaG90b3MtYWRkIixsYWJlbDoiQWRkIHRvIFBob3RvcyJ9LHtrZXk6ImNvbnRhY3RzIixsYWJlbDoiQ29udGFjdHMifSx7a2V5OiJjYWxlbmRhciIsbGFiZWw6IkNhbGVuZGFyIn0se2tleToicmVtaW5kZXJzIixsYWJlbDoiUmVtaW5kZXJzIn0se2tleToibG9jYXRpb24iLGxhYmVsOiJMb2NhdGlvbiJ9LHtrZXk6ImxvY2F0aW9uLWFsd2F5cyIsbGFiZWw6IkxvY2F0aW9uIChBbHdheXMpIn0se2tleToibm90aWZpY2F0aW9ucyIsbGFiZWw6Ik5vdGlmaWNhdGlvbnMifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIE80KHt1ZGlkOiQsYnVuZGxlSWQ6Sn0pe2xldFtRLFhdPWsoe30pLFtLLFldPWsobnVsbCksW3EsR109ayhudWxsKSxbQixOXT1rKCExKSx6PWsxKCgpPT57bGV0IEM9dHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFDKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChDKSlyZXR1cm5gYnVuICR7TzEoQyl9YDtpZigvXC5qcyQvLnRlc3QoQykpcmV0dXJuYG5vZGUgJHtPMShDKX1gO3JldHVybiBPMShDKX0sW10pO3koKCk9PntYKHt9KSxHKG51bGwpfSxbSl0pO2xldCBWPUUoYXN5bmMoQyxBKT0+e2lmKCFKKXJldHVybjtsZXQgTD1gJHtDfToke0F9YDtZKEwpLEcobnVsbCk7dHJ5e2xldCBVPWF3YWl0IEkxKGAke3p9IHBlcm1pc3Npb25zICR7QX0gJHtDfSAke08xKEopfSAtZCAke08xKCQpfWApO2lmKFUuZXhpdENvZGUhPT0wKXtHKFUuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtVLmV4aXRDb2RlfSlgKTtyZXR1cm59WCgoRik9Pih7Li4uRixbQ106QT09PSJyZXNldCI/dm9pZCAwOkF9KSl9ZmluYWxseXtZKG51bGwpfX0sW3osJCxKXSksSD1FKGFzeW5jKCk9PntpZighSilyZXR1cm47WSgiX19hbGxfXyIpLEcobnVsbCk7dHJ5e2xldCBDPWF3YWl0IEkxKGAke3p9IHBlcm1pc3Npb25zIHJlc2V0IGFsbCAke08xKEopfSAtZCAke08xKCQpfWApO2lmKEMuZXhpdENvZGUhPT0wKXtHKEMuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtDLmV4aXRDb2RlfSlgKTtyZXR1cm59WCh7fSl9ZmluYWxseXtZKG51bGwpfX0sW3osJCxKXSk7aWYoIUopcmV0dXJuIFooY1Ese30pO3JldHVybiBaKHMxLHtvcGVuOkIsb25PcGVuQ2hhbmdlOk4sc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WihKMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLFooInNwYW4iLHt9KV19KSxjaGlsZHJlbjpbcSYmWigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpxfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToibWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtMSBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOkM0Lm1hcCgoe2tleTpDLGxhYmVsOkF9KT0+e2xldCBMPVFbQ107cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTAuNSBweS0xIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46QX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCBwLTAuNSIscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpBLGNoaWxkcmVuOltaKHo4LHthY3RpdmU6TD09PSJncmFudCIscGVuZGluZzpLPT09YCR7Q306Z3JhbnRgLG9uQ2xpY2s6KCk9PlYoQywiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpaKHYyLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLFooejgse2FjdGl2ZTpMPT09InJldm9rZSIscGVuZGluZzpLPT09YCR7Q306cmV2b2tlYCxvbkNsaWNrOigpPT5WKEMsInJldm9rZSIpLHZhcmlhbnQ6InJldm9rZSIsdGl0bGU6IkRlbnkiLGNoaWxkcmVuOlooTDAse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksWih6OCx7YWN0aXZlOiExLHBlbmRpbmc6Sz09PWAke0N9OnJlc2V0YCxvbkNsaWNrOigpPT5WKEMsInJlc2V0IiksdmFyaWFudDoicmVzZXQiLHRpdGxlOiJSZXNldCIsY2hpbGRyZW46WihhMCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjR9KX0pXX0pXX0sQyl9KX0pLFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSByb3VuZGVkLXQtWzEwcHhdIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fdG9wLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktZW5kIixjaGlsZHJlbjpaKCJidXR0b24iLHtvbkNsaWNrOkgsZGlzYWJsZWQ6Sz09PSJfX2FsbF9fIixjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS83MCB0ZXh0LVsxMHB4XSBweC0yIHB5LVszcHhdIHJvdW5kZWQtWzVweF0gY3Vyc29yLXBvaW50ZXIgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA0ZW1dIix0aXRsZToic2VydmUtc2ltIHBlcm1pc3Npb25zIHJlc2V0IGFsbCIsY2hpbGRyZW46Sz09PSJfX2FsbF9fIj8i4oCmIjoiUmVzZXQgYWxsIn0pfSldfSl9ZnVuY3Rpb24gY1EoKXtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLXBlcm1pc3Npb25zLWxvYWRpbmciLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1kaXNhYmxlZCI6InRydWUiLCJhcmlhLWJ1c3kiOiJ0cnVlIixjaGlsZHJlbjpaKCJkaXYiLHtjbGFzc05hbWU6InNlbGVjdC1ub25lIHRleHQtd2hpdGUvNTUgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQgY3Vyc29yLWRlZmF1bHQiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksWigic3BhbiIse30pLFooInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJwZXJtaXNzaW9ucy1sb2FkaW5nLWluZGljYXRvciIscm9sZToic3RhdHVzIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgcGVybWlzc2lvbnMiLGNsYXNzTmFtZToic2l6ZS0yLjUgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItWyM1ZjYyNjhdIGJvcmRlci10LVsjZjRmNGY1XSBhbmltYXRlLVtncmlkLXNwaW5fMC43c19saW5lYXJfaW5maW5pdGVdIn0pXX0pfSl9ZnVuY3Rpb24gejgoe2FjdGl2ZTokLHBlbmRpbmc6SixvbkNsaWNrOlEsdmFyaWFudDpYLHRpdGxlOkssY2hpbGRyZW46WX0pe2xldCBxPVg9PT0iZ3JhbnQiPyIjNGFkZTgwIjpYPT09InJldm9rZSI/IiNmODcxNzEiOiIjYTViNGZjIjtyZXR1cm4gWigiYnV0dG9uIix7b25DbGljazpRLGRpc2FibGVkOkosdGl0bGU6SywiYXJpYS1sYWJlbCI6SyxjbGFzc05hbWU6InctNiBoLTUuNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkIHAtMCBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSIsc3R5bGU6e2JhY2tncm91bmQ6JD9gJHtxfTIyYDoidHJhbnNwYXJlbnQiLGNvbG9yOiQ/cToicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIsb3BhY2l0eTpKPzAuNToxfSxjaGlsZHJlbjpZfSl9ZnVuY3Rpb24gYTUoe2xhYmVsOiQsY2hlY2tlZDpKLGRpc2FibGVkOlE9ITEsb25DaGFuZ2U6WH0pe3JldHVybiBaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6InN3aXRjaCIsImFyaWEtY2hlY2tlZCI6SiwiYXJpYS1sYWJlbCI6JCxkaXNhYmxlZDpRLG9uQ2xpY2s6KCk9PlgoIUopLGNsYXNzTmFtZTpgcmVsYXRpdmUgaC1bMThweF0gdy04IHNocmluay0wIHJvdW5kZWQtZnVsbCBib3JkZXItbm9uZSBwLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtRPyJjdXJzb3ItZGVmYXVsdCBiZy13aGl0ZS8yMCI6Sj8iY3Vyc29yLXBvaW50ZXIgYmctWyMwYTg0ZmZdIjoiY3Vyc29yLXBvaW50ZXIgYmctd2hpdGUvMjAifWAsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLVsycHhdIHNpemUtWzE0cHhdIHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpsZWZ0XzAuMTVzXSAke1E/ImJnLXdoaXRlLzUwIjoiYmctd2hpdGUifWAsc3R5bGU6e2xlZnQ6Sj8xNjoyfX0pfSl9dmFyIG9RPSJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSIsaVE9InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbS0wIjtmdW5jdGlvbiBBNCh7b3ZlcmxheUVuYWJsZWQ6JCxvblRvZ2dsZU92ZXJsYXk6Sn0pe2xldHtzbmFwc2hvdDpRfT1VMigpLHtoaWdobGlnaHRlZEtleTpYLHNldEhpZ2hsaWdodGVkS2V5Okt9PVI1KCksWT1RPy5lbGVtZW50cz8/W10scT1TNShRKSxHPVE/LmVycm9ycz8uWzBdPz9udWxsO3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6YCR7b1F9IHB4LTMgcHktMmAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZTppUSxjaGlsZHJlbjoiQVggVHJlZSJ9KSxaKGE1LHtsYWJlbDoiRW5hYmxlIG92ZXJsYXkiLGNoZWNrZWQ6JCxvbkNoYW5nZTpKfSldfSksISQ/bnVsbDpxP1ooRjQse2NoaWxkcmVuOiJBWCB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4ifSk6WS5sZW5ndGg9PT0wP1ooRjQse3NwaW5uZXI6IUcsY2hpbGRyZW46Rz8/IldhaXRpbmcgZm9yIGFjY2Vzc2liaWxpdHkgZGF0YeKApiJ9KTpaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEgbXQtMiBweS0yIG1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLHJvbGU6Imxpc3QiLGNoaWxkcmVuOlkubWFwKChCLE4pPT57bGV0IHo9czAoQik7cmV0dXJuIFooblEse2VsZW1lbnQ6QixpbmRleDpOLGFjdGl2ZTp6PT09WCxvbkhpZ2hsaWdodDpLfSx6KX0pfSldfSl9ZnVuY3Rpb24gRjQoe2NoaWxkcmVuOiQsc3Bpbm5lcjpKPSExfSl7cmV0dXJuIFooImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJtdC0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHB5LTQgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W0o/Wigic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0zLjUgc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8yMCBib3JkZXItdC13aGl0ZS82MCBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pOm51bGwsWigic3BhbiIse2NoaWxkcmVuOiR9KV19KX12YXIgblE9aTAoZnVuY3Rpb24oe2VsZW1lbnQ6SixpbmRleDpRLGFjdGl2ZTpYLG9uSGlnaGxpZ2h0Okt9KXtsZXQgWT1zMChKKSxxPWo1KEosUSksRz1gJHtNYXRoLnJvdW5kKEouZnJhbWUud2lkdGgpfXgke01hdGgucm91bmQoSi5mcmFtZS5oZWlnaHQpfWAsQj1bcS5sYWJlbCxxLnJvbGV8fHEudHlwZXx8ImVsZW1lbnQiLEddLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIik7cmV0dXJuIFooImRpdiIse3JvbGU6Imxpc3RpdGVtIix0YWJJbmRleDowLCJkYXRhLWF4LWtleSI6WSx0aXRsZTpCLG9uTW91c2VFbnRlcjooKT0+SyhZKSxvbk1vdXNlTGVhdmU6KCk9PksobnVsbCksb25Gb2N1czooKT0+SyhZKSxvbkJsdXI6KCk9PksobnVsbCksY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBweS0xIHB4LTAuNSBtaW4tdy0wICR7WD8iYmctd2hpdGUvWzAuMDZdIjoiIn1gLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpKLmxhYmVsfHxKLnJvbGV8fCJVbmxhYmVsZWQifSksWigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS80NSBmb250LW1vbm8gdGV4dC1bMTBweF0iLGNoaWxkcmVuOkoucm9sZXx8Si50eXBlfHwiZWxlbWVudCJ9KV19KSxaKCJjb2RlIix7Y2xhc3NOYW1lOiJzaHJpbmstMCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdGV4dC1bMTBweF0gcHgtMS41IHB5LVszcHhdIixjaGlsZHJlbjpHfSldfSl9LCgkLEopPT4kLmluZGV4PT09Si5pbmRleCYmJC5hY3RpdmU9PT1KLmFjdGl2ZSYmJC5vbkhpZ2hsaWdodD09PUoub25IaWdobGlnaHQmJng1KCQuZWxlbWVudCxKLmVsZW1lbnQpKTt2YXIgclE9bmV3IFNldChbImltYWdlL2pwZWciLCJpbWFnZS9wbmciLCJpbWFnZS9naWYiLCJpbWFnZS9oZWljIiwiaW1hZ2UvaGVpZiIsImltYWdlL3dlYnAiLCJ2aWRlby9tcDQiLCJ2aWRlby9xdWlja3RpbWUiXSksTDg9MTk2NjA4LE00PTUyNDI4ODAwMCxzNT0iYXBwbGljYXRpb24veC1zZXJ2ZS1zaW0taG9zdC1wYXRoIjthc3luYyBmdW5jdGlvbiBrNCgkLEosUSl7bGV0IFg9YXdhaXQgSihgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7UX0gJHtPMSgkKX1gKTtpZihYLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihYLnN0ZGVycnx8YGFkZG1lZGlhIGZhaWxlZCAoZXhpdCAke1guZXhpdENvZGV9KWApfWZ1bmN0aW9uIGsyKCQpe2xldCBKPSQubmFtZSxRPUoubGFzdEluZGV4T2YoIi4iKTtpZihRPj0wKXJldHVybiBKLnNsaWNlKFErMSkudG9Mb3dlckNhc2UoKTtpZigkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuIm1wNCI7cmV0dXJuImpwZyJ9ZnVuY3Rpb24gVzQoJCl7aWYoazIoJCk9PT0iaXBhIilyZXR1cm4iaXBhIjtpZihyUS5oYXMoJC50eXBlKSlyZXR1cm4ibWVkaWEiO3JldHVybiBudWxsfWZ1bmN0aW9uIGFRKCQpe2xldCBKPW5ldyBVaW50OEFycmF5KCQpLFE9IiI7Zm9yKGxldCBYPTA7WDxKLmxlbmd0aDtYKz0zMjc2OClRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLkouc3ViYXJyYXkoWCxYKzMyNzY4KSk7cmV0dXJuIGJ0b2EoUSl9YXN5bmMgZnVuY3Rpb24gXzQoJCxKLFEsWCl7bGV0IEs9MDtmb3IobGV0IFk9MDtZPCQuc2l6ZTtZKz1MOCl7bGV0IHE9YXdhaXQgJC5zbGljZShZLFkrTDgpLmFycmF5QnVmZmVyKCksRz1hUShxKSxOPWF3YWl0IFEoYGJhc2ggLWMgJ2VjaG8gJHtHfSB8IGJhc2U2NCAtZCAke1k9PT0wPyI+IjoiPj4ifSAke0p9J2ApO2lmKE4uZXhpdENvZGUhPT0wKXRocm93IEVycm9yKE4uc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Ti5leGl0Q29kZX0pYCk7aWYoIVgpY29udGludWU7bGV0IHo9TWF0aC5taW4oWStMOCwkLnNpemUpLFY9TWF0aC5mbG9vcih6LyQuc2l6ZSoxMDApO2lmKFYhPT1LKUs9VixYKHovJC5zaXplKX19YXN5bmMgZnVuY3Rpb24gRDQoJCxKLFEsWCl7aWYoJC5zaXplPk00KXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBLPWAvdG1wLyR7Sn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1F9YDtyZXR1cm4gYXdhaXQgXzQoJCxLLFgpLEt9YXN5bmMgZnVuY3Rpb24gUDQoJCxKLFEsWCxLKXtpZigkLnNpemU+TTQpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFk9Sj09PSJpcGEiPyJpcGEiOmsyKCQpLEc9YC90bXAvJHtKPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtZfWA7dHJ5e0soMCksYXdhaXQgXzQoJCxHLFEsSyksSyhudWxsKTtsZXQgQj1KPT09ImlwYSI/YHhjcnVuIHNpbWN0bCBpbnN0YWxsICR7WH0gJHtHfWA6YHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke1h9ICR7R31gLE49YXdhaXQgUShCKTtpZihOLmV4aXRDb2RlIT09MCl7bGV0IHo9Sj09PSJpcGEiPyJpbnN0YWxsIjoiYWRkbWVkaWEiO3Rocm93IEVycm9yKE4uc3RkZXJyfHxgJHt6fSBmYWlsZWQgKGV4aXQgJHtOLmV4aXRDb2RlfSlgKX19ZmluYWxseXtRKGBiYXNoIC1jICdybSAtZiAke0d9J2ApLmNhdGNoKCgpPT57fSl9fXZhciBzUT0zMDAwO2FzeW5jIGZ1bmN0aW9uIHRRKCQsSj1mZXRjaCl7dHJ5e2xldCBRPWF3YWl0IEooJCx7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKCFRLm9rKXJldHVybiBudWxsO2xldCBYPWF3YWl0IFEuanNvbigpO3JldHVybiBYJiZ0eXBlb2YgWD09PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShYKT9YOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fXZhciBlUT0yMDk3MTUyMDAsJFo9IkxhcmdlIHZpZGVvICg+MjAwIE1CKSDigJQgbWF5IHN0dXR0ZXIgb24gc2hhcmVkIG1lbW9yeSIsSTQ9IkhFSUMgZGVjb2RlIGZhaWxlZCDigJQgZXhwb3J0IGFzIEpQRUcgb3IgUE5HIGFuZCByZXRyeSI7ZnVuY3Rpb24gSlooJCxKKXtpZihKKXJldHVybiJhY3RpdmUiO2lmKCQ9PT0iYWN0aXZlIilyZXR1cm4iZGlzY29ubmVjdGVkIjtpZigkPT09ImRpc2Nvbm5lY3RlZCIpcmV0dXJuInJlYWR5IjtyZXR1cm4gJH1mdW5jdGlvbiBRWigkKXtpZighJC5pbmplY3RlZClyZXR1cm4icGxheSI7aWYoJC5zb3VyY2U9PT0icGxhY2Vob2xkZXIiKXJldHVybiJwbGF5IjtpZigkLmJ1bmRsZUlkJiYhJC5mb3JlZ3JvdW5kSXNJbmplY3RlZClyZXR1cm4iYXR0YWNoIjtyZXR1cm4ic3RvcCJ9ZnVuY3Rpb24gWlooJCl7cmV0dXJuICQuc3BsaXQoYApgKS5tYXAoKEopPT5KLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmZsYXRNYXAoKEopPT57bGV0IFE9Si5pbmRleE9mKCJcdCIpO2lmKFE8PTApcmV0dXJuW107bGV0IFg9Si5zbGljZSgwLFEpLnRyaW0oKSxLPUouc2xpY2UoUSsxKS50cmltKCk7aWYoIVh8fCFLKXJldHVybltdO3JldHVyblt7aWQ6WCxuYW1lOkt9XX0pfXZhciBYWj1uZXcgU2V0KFsibXA0IiwibTR2IiwibW92IiwicXQiLCJhdmkiLCJta3YiLCJ3ZWJtIiwibXBnIiwibXBlZyIsIjNncCIsIjNnMiIsInRzIiwid212Il0pO2Z1bmN0aW9uIHc0KCQpe2lmKCQudHlwZSYmJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiEwO2xldCBKPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpLFE9Si5sYXN0SW5kZXhPZigiLiIpO2lmKFE8MClyZXR1cm4hMTtyZXR1cm4gWFouaGFzKEouc2xpY2UoUSsxKSl9ZnVuY3Rpb24gS1ooJCl7cmV0dXJuIHc0KCQpJiYkLnNpemU+ZVF9ZnVuY3Rpb24gWVooJCl7bGV0IEo9KCQudHlwZT8/IiIpLnRvTG93ZXJDYXNlKCk7aWYoSj09PSJpbWFnZS9oZWljInx8Sj09PSJpbWFnZS9oZWlmIilyZXR1cm4hMDtsZXQgUT0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gUS5lbmRzV2l0aCgiLmhlaWMiKXx8US5lbmRzV2l0aCgiLmhlaWYiKX1mdW5jdGlvbiBxWih7cmF3TWVzc2FnZTokLGxhc3RGaWxlSXNIZWljOkosc291cmNlOlF9KXtpZihKJiYoUT09PSJpbWFnZSJ8fFE9PT0idmlkZW8iKSlyZXR1cm4gSTQ7cmV0dXJuICR9ZnVuY3Rpb24gR1ooe3N0YXRlOiR9KXtsZXQgSj0kPT09ImFjdGl2ZSI/IkFjdGl2ZSI6JD09PSJkaXNjb25uZWN0ZWQiPyJEaXNjb25uZWN0ZWQiOiJSZWFkeSIsUT0kPT09ImFjdGl2ZSI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1zdWNjZXNzLWVtZXJhbGQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDc0LDIyMiwxMjgsMC43KV0iOiQ9PT0iZGlzY29ubmVjdGVkIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLWRhbmdlci1zb2Z0IFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSgyNDgsMTEzLDExMywwLjU1KV0iOm51bGw7cmV0dXJuIFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIiwiZGF0YS1jYW1lcmEtcGlsbC1zdGF0ZSI6JCxjaGlsZHJlbjpbUSYmWigic3BhbiIse2NsYXNzTmFtZTpRfSksSl19KX1mdW5jdGlvbiBWWigpe3JldHVybiBaKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1jZW50ZXIgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IiwiZGF0YS1jYW1lcmEtdGVzdC1wYXR0ZXJuLWhpbnQiOiEwLGNoaWxkcmVuOiJUZXN0LXBhdHRlcm4gZmVlZCJ9KX1mdW5jdGlvbiBCWih7bW9kZTokLGZpbGVOYW1lOkosd2ViY2FtTmFtZTpRLHNvdXJjZUtpbmQ6WH0pe2lmKCQ9PT0idXBsb2FkaW5nIilyZXR1cm4gWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46IlVwbG9hZGluZ+KApiJ9KTtpZigkPT09ImZpbGUiKXJldHVybiBaKEoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOlg9PT0idmlkZW8iPyJWaWRlbyI6IkltYWdlIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpKPz8iIn0pXX0pO2lmKCQ9PT0id2ViY2FtIilyZXR1cm4gWihKMSx7Y2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjoiV2ViY2FtIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpRPz8iIn0pXX0pO3JldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSl9ZnVuY3Rpb24gVDQoe2tpbmQ6JCxtZXNzYWdlOkp9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiQ9PT0id2FybmluZyI/ImJnLXdhcm5pbmcvMTAgYm9yZGVyIGJvcmRlci13YXJuaW5nLzI1IHRleHQtd2FybmluZy1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIiwiZGF0YS1jYW1lcmEtYmFubmVyLWtpbmQiOiQscm9sZTokPT09ImVycm9yIj8iYWxlcnQiOiJzdGF0dXMiLGNoaWxkcmVuOkp9KX1mdW5jdGlvbiBFNCh7dWRpZDokLGJ1bmRsZUlkOkp9KXtsZXRbUSxYXT1rKCExKSxbSyxZXT1rKCJwbGFjZWhvbGRlciIpLFtxLEddPWsoIiIpLFtCLE5dPWsobnVsbCksW3osVl09ayghMSksSD1UKDApLFtDLEFdPWsoITEpLFtMLFVdPWsoITEpLEY9VChudWxsKSxbVyx3XT1rKFtdKSxbUCx4XT1rKCExKSxbRCxuXT1rKCIiKSxbUixkXT1rKCJvZmYiKSxbaSxyXT1rKG51bGwpLFtvLGFdPWsobnVsbCksTDE9aSE9PW51bGx8fG8hPT1udWxsLFtsLG1dPWsobnVsbCksW1gxLFoxXT1rKG51bGwpLFssSDFdPWsobnVsbCksW3QsUTFdPWsoITEpLFtxMSxqXT1rKCJyZWFkeSIpLFtwLF9dPWsoKCk9Pm5ldyBTZXQpLFtoLGddPWsobnVsbCksW3YsWTFdPWsobnVsbCksRzE9VCghMSksRTE9VCghMSksVzE9VCgib2ZmIiksVDE9VCghMSksXzE9azEoKCk9PntsZXQgST13aW5kb3cuX19TSU1fUFJFVklFV19fPy5zZXJ2ZVNpbUJpbjtpZighSSlyZXR1cm4ic2VydmUtc2ltIjtpZigvXC50cyQvLnRlc3QoSSkpcmV0dXJuYGJ1biAke08xKEkpfWA7aWYoL1wuanMkLy50ZXN0KEkpKXJldHVybmBub2RlICR7TzEoSSl9YDtyZXR1cm4gTzEoSSl9LFtdKSxSMT1FKGFzeW5jKCk9PntsZXQgST13aW5kb3cuX19TSU1fUFJFVklFV19fPy5jYW1lcmFTdGF0dXNFbmRwb2ludDtyZXR1cm4gST90UShJKTpudWxsfSxbXSksTTE9VChhc3luYygpPT57fSkscjE9VChKKTt5KCgpPT57cjEuY3VycmVudD1KfSxbSl0pLHkoKCk9PntsZXQgST0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCB1PWF3YWl0IFIxKCk7aWYoSXx8IXV8fCF1LmFsaXZlKXJldHVybjtFMS5jdXJyZW50PSEwO2xldCBzPXUuc291cmNlO2lmKHM9PT0icGxhY2Vob2xkZXIifHxzPT09IndlYmNhbSJ8fHM9PT0iaW1hZ2UifHxzPT09InZpZGVvIilZKHMpO2lmKChzPT09ImltYWdlInx8cz09PSJ2aWRlbyIpJiZ1LmFyZylHKHUuYXJnKSxOKHUuYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKHM9PT0id2ViY2FtIiYmdS5hcmcpbih1LmFyZyksTTEuY3VycmVudCgpO2xldCBDMT11Lm1pcnJvcj09PSJvbiI/Im9uIjoib2ZmIjtkKEMxKSxXMS5jdXJyZW50PUMxLGcodS5oZWxwZXJQaWQ/P251bGwpLFExKCEwKTtsZXQgVjE9QXJyYXkuaXNBcnJheSh1LmJ1bmRsZUlkcyk/dS5idW5kbGVJZHM6W107aWYoVjEubGVuZ3RoPjApXyhuZXcgU2V0KFYxKSk7bGV0IEIxPXIxLmN1cnJlbnQsaDE9cyYmcyE9PSJwbGFjZWhvbGRlciI7aihCMSYmVjEuaW5jbHVkZXMoQjEpJiZoMT8iYWN0aXZlIjoicmVhZHkiKSxIMShgUmVhdHRhY2hlZCDihpIgJHtzPz8icnVubmluZyBoZWxwZXIifSR7dS5hcmc/YCAoJHt1LmFyZ30pYDoiIn1gKX0pKCksKCk9PntJPSEwfX0sWyQsUjFdKSx5KCgpPT57bGV0IEk9ITEsdT0hMSxzPW51bGwsQzE9YXN5bmMoKT0+e2lmKEl8fHUpcmV0dXJuO2lmKHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKXJldHVybjt1PSEwO3RyeXtsZXQgQjE9YXdhaXQgUjEoKTtpZihJKXJldHVybjtsZXQgaDE9ISFCMT8uYWxpdmUsbDE9QXJyYXkuaXNBcnJheShCMT8uYnVuZGxlSWRzKT9CMS5idW5kbGVJZHM6bnVsbCxwMT0hIUomJihsMT9sMS5pbmNsdWRlcyhKKTpwLmhhcyhKKSksQzA9QjE/LnNvdXJjZT8/bnVsbCxXMD10JiZoMSYmcDEmJiEhKEMwJiZDMCE9PSJwbGFjZWhvbGRlciIpJiYoaD09bnVsbHx8QjE/LmhlbHBlclBpZD09PWgpO2lmKGooKHowKT0+SlooejAsVzApKSwhaDEpUTEoKHowKT0+e2lmKCF6MClyZXR1cm4gejA7cmV0dXJuIF8obmV3IFNldCksZyhudWxsKSxXMS5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZih0JiZoIT1udWxsJiZCMT8uaGVscGVyUGlkIT09aClRMSghMSksXyhuZXcgU2V0KSxnKG51bGwpLFcxLmN1cnJlbnQ9Im9mZiI7ZWxzZSBpZihoMSYmQXJyYXkuaXNBcnJheShCMT8uYnVuZGxlSWRzKSl7bGV0IHowPUIxLmJ1bmRsZUlkcztfKChQMSk9PntpZihQMS5zaXplPT09ejAubGVuZ3RoJiZ6MC5ldmVyeSgoUzApPT5QMS5oYXMoUzApKSlyZXR1cm4gUDE7cmV0dXJuIG5ldyBTZXQoejApfSl9fWZpbmFsbHl7dT0hMX19O3M9c2V0SW50ZXJ2YWwoKCk9PntDMSgpfSxzUSk7bGV0IFYxPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKUMxKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsVjEpO3JldHVybigpPT57aWYoST0hMCxzKWNsZWFySW50ZXJ2YWwocyk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixWMSl9fSxbUjEsdCxoLEoscF0pO2xldCBqMT1FKGFzeW5jKCk9Pnt4KCEwKSxtKG51bGwpO3RyeXtsZXQgST1hd2FpdCBJMShgJHtfMX0gY2FtZXJhIC0tbGlzdC13ZWJjYW1zYCk7aWYoSS5leGl0Q29kZSE9PTApe20oSS5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke0kuZXhpdENvZGV9KWApO3JldHVybn1sZXQgdT1aWihJLnN0ZG91dCk7aWYodyh1KSx1Lmxlbmd0aD4wJiYhRCluKHVbMF0uaWQpfWZpbmFsbHl7eCghMSl9fSxbRCxfMV0pO3koKCk9PntNMS5jdXJyZW50PWoxfSxbajFdKSx5KCgpPT57aWYoTCYmVy5sZW5ndGg9PT0wJiYhUClqMSgpfSxbTCxXLmxlbmd0aCxQLGoxXSk7bGV0IEYxPUUoKEkpPT57bShxWih7cmF3TWVzc2FnZTpJLGxhc3RGaWxlSXNIZWljOkcxLmN1cnJlbnQsc291cmNlOkt9KSl9LFtLXSksTjE9RShhc3luYyhJLHUscyk9PntsZXQgQzE9ST09PSJpbWFnZSJ8fEk9PT0idmlkZW8iLFYxPVsiY2FtZXJhIiwic3dpdGNoIixDMT8iZmlsZSI6SV07aWYoST09PSJ3ZWJjYW0iJiZ1KVYxLnB1c2goTzEodSkpO2lmKEMxKXtpZighcy50cmltKCkpcmV0dXJuIG0oIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7VjEucHVzaChPMShzLnRyaW0oKSkpfVYxLnB1c2goIi1kIiwkLCItLXF1aWV0Iik7bGV0IEIxPWF3YWl0IEkxKGAke18xfSAke1YxLmpvaW4oIiAiKX1gKTtpZihCMS5leGl0Q29kZSE9PTApcmV0dXJuIEYxKEIxLnN0ZGVyci50cmltKCl8fEIxLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke0IxLmV4aXRDb2RlfSlgKSwhMTtHMS5jdXJyZW50PSExO3RyeXtsZXQgaDE9SlNPTi5wYXJzZShCMS5zdGRvdXQudHJpbSgpKTtIMShgU3dpdGNoZWQg4oaSICR7aDEuc291cmNlPz9JfSR7aDEuYXJnP2AgKCR7aDEuYXJnfSlgOiIifWApfWNhdGNoe0gxKGBTd2l0Y2hlZCDihpIgJHtJfWApfXJldHVybiEwfSxbJCxfMSxGMV0pLGExPUUoYXN5bmMoKT0+e2lmKCFKKXJldHVybjtyKCJpbmplY3QiKSxtKG51bGwpLEgxKG51bGwpO3RyeXtsZXQgST1bImNhbWVyYSIsTzEoSiksIi1kIiwkLCItLXF1aWV0Il07aWYoSz09PSJpbWFnZSJ8fEs9PT0idmlkZW8iKXtpZighcS50cmltKCkpe20oIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufUkucHVzaCgiLS1maWxlIixPMShxLnRyaW0oKSkpfWVsc2UgaWYoSz09PSJ3ZWJjYW0iKWlmKEQpSS5wdXNoKCItLXdlYmNhbSIsTzEoRCkpO2Vsc2UgSS5wdXNoKCItLXdlYmNhbSIpO0kucHVzaCgiLS1taXJyb3IiLFIpO2xldCB1PWF3YWl0IEkxKGAke18xfSAke0kuam9pbigiICIpfWApO2lmKHUuZXhpdENvZGUhPT0wKXtGMSh1LnN0ZGVyci50cmltKCl8fHUuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7dS5leGl0Q29kZX0pYCk7cmV0dXJufUcxLmN1cnJlbnQ9ITE7bGV0IHM9bnVsbDt0cnl7bGV0IEMxPUpTT04ucGFyc2UodS5zdGRvdXQudHJpbSgpKTtzPUMxLmhlbHBlclBpZD8/bnVsbDtsZXQgVjE9QzEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixCMT1DMS5waWQ/YCBwaWQgJHtDMS5waWR9YDoiIixoMT1DMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke0MxLmhlbHBlclBpZH1gOiIiO0gxKGAke1YxfSAke0MxLnNvdXJjZT8/S30gaW50byAke0p9JHtCMX0ke2gxfWApfWNhdGNoe0gxKHUuc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfVExKCEwKSxqKEs9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLGcocyksXygoQzEpPT5DMS5oYXMoSik/QzE6bmV3IFNldChDMSkuYWRkKEopKSxXMS5jdXJyZW50PVJ9ZmluYWxseXtyKG51bGwpfX0sW0osJCxLLHEsRCxSLF8xLEYxXSksZjE9dD9gJHtLfTo6JHtLPT09IndlYmNhbSI/RDoiIn06OiR7Sz09PSJpbWFnZSJ8fEs9PT0idmlkZW8iP3E6IiJ9YDpudWxsLGkxPSEhSiYmcC5oYXMoSiksdDE9aTEmJkshPT0icGxhY2Vob2xkZXIiO3koKCk9PntpZighdDEpe1QxLmN1cnJlbnQ9ITE7cmV0dXJufWlmKFQxLmN1cnJlbnQpcmV0dXJuO1QxLmN1cnJlbnQ9ITAsWCghMCl9LFt0MV0pLHkoKCk9PntpZighdilyZXR1cm47aWYoIUp8fEwxfHxDKXJldHVybjtpZihLIT09IndlYmNhbSJ8fEQhPT12KXJldHVybjtpZihZMShudWxsKSx0KXJldHVybjthMSgpfSxbdixKLEwxLEMsSyxELHQsYTFdKSx5KCgpPT57aWYoIXQpcmV0dXJuO2lmKChLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpJiYhcS50cmltKCkpcmV0dXJuO2lmKEs9PT0id2ViY2FtIiYmIUQpcmV0dXJuO2lmKEUxLmN1cnJlbnQpe0UxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBJPSExO3JldHVybihhc3luYygpPT57YSgic3dpdGNoIiksbShudWxsKTt0cnl7aWYoSSlyZXR1cm47YXdhaXQgTjEoSyxELHEpfWZpbmFsbHl7aWYoIUkpYShudWxsKX19KSgpLCgpPT57ST0hMH19LFtmMV0pLHkoKCk9PntpZighdClyZXR1cm47aWYoVzEuY3VycmVudD09PVIpcmV0dXJuO2xldCBJPVIsdT0hMTtyZXR1cm4oYXN5bmMoKT0+e2EoIm1pcnJvciIpLG0obnVsbCk7dHJ5e2xldCBzPWF3YWl0IEkxKGAke18xfSBjYW1lcmEgbWlycm9yICR7SX0gLWQgJHskfSAtLXF1aWV0YCk7aWYodSlyZXR1cm47aWYocy5leGl0Q29kZSE9PTApe20ocy5zdGRlcnIudHJpbSgpfHxzLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke3MuZXhpdENvZGV9KWApO3JldHVybn1XMS5jdXJyZW50PUksSDEoYE1pcnJvciDihpIgJHtJfWApfWZpbmFsbHl7aWYoIXUpYShudWxsKX19KSgpLCgpPT57dT0hMH19LFtSLHRdKTtsZXQgcTA9RShhc3luYygpPT57cigic3RvcCIpLG0obnVsbCk7dHJ5e2xldCBJPWF3YWl0IEkxKGAke18xfSBjYW1lcmEgLS1zdG9wLXdlYmNhbSAtZCAkeyR9YCk7aWYoSS5leGl0Q29kZSE9PTApe20oSS5zdGRlcnIudHJpbSgpfHxgc3RvcC13ZWJjYW0gZmFpbGVkICgke0kuZXhpdENvZGV9KWApO3JldHVybn1IMSgiQ2FtZXJhIGhlbHBlciBzdG9wcGVkLiIpLFExKCExKSxqKCJyZWFkeSIpLF8obmV3IFNldCksVzEuY3VycmVudD0ib2ZmIn1maW5hbGx5e3IobnVsbCl9fSxbJCxfMV0pLEcwPUUoYXN5bmMoSSk9PntsZXQgdT1ZWih7dHlwZTpJLnR5cGUsbmFtZTpJLm5hbWV9KSxzPUkudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8dSxDMT1JLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIil8fHc0KHt0eXBlOkkudHlwZSxuYW1lOkkubmFtZX0pO2lmKCFzJiYhQzEpe0cxLmN1cnJlbnQ9ITEsbShgVW5zdXBwb3J0ZWQgZmlsZSB0eXBlOiAke0kudHlwZXx8SS5uYW1lfWApO3JldHVybn1pZihBKCEwKSxtKG51bGwpLFoxKG51bGwpLEtaKHt0eXBlOkkudHlwZSxuYW1lOkkubmFtZSxzaXplOkkuc2l6ZX0pKVoxKCRaKTtHMS5jdXJyZW50PXU7dHJ5e2xldCBWMT1rMihJKSxCMT1hd2FpdCBENChJLCJzZXJ2ZS1zaW0tY2Ftc3JjIixWMSxJMSk7TihJLm5hbWUpLFkoQzE/InZpZGVvIjoiaW1hZ2UiKSxHKEIxKSxIMShgTG9hZGVkICR7SS5uYW1lfWApfWNhdGNoKFYxKXtpZihHMS5jdXJyZW50KW0oSTQpO2Vsc2UgbShWMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e0EoITEpfX0sW10pLGwwPUUoYXN5bmMoSSk9PntJLnByZXZlbnREZWZhdWx0KCksSS5zdG9wUHJvcGFnYXRpb24oKSxILmN1cnJlbnQ9MCxWKCExKTtsZXQgdT1JLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZih1KWF3YWl0IEcwKHUpfSxbRzBdKSx2MT1FKCgpPT57WSgicGxhY2Vob2xkZXIiKSxHKCIiKSxOKG51bGwpLG0obnVsbCksWjEobnVsbCksRzEuY3VycmVudD0hMX0sW10pLFYwPUUoKCk9PntGLmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxKMD1FKGFzeW5jKEkpPT57bGV0IHU9SS50YXJnZXQscz11LmZpbGVzPy5bMF07aWYodS52YWx1ZT0iIixzKWF3YWl0IEcwKHMpfSxbRzBdKTt5KCgpPT57aWYoIUwpcmV0dXJuO2xldCBJPSh1KT0+e2xldCBzPXUudGFyZ2V0O2lmKHMgaW5zdGFuY2VvZiBFbGVtZW50JiZzLmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47VSghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixJKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsSSl9LFtMXSk7bGV0IFAwPUUoKEkpPT57aWYobihJLmlkKSxZKCJ3ZWJjYW0iKSxOKG51bGwpLG0obnVsbCksRzEuY3VycmVudD0hMSxVKCExKSxKKVkxKEkuaWQpfSxbSl0pLG0xPUUoKCk9PntkKChJKT0+ST09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxlMT0hdHx8Sz09PSJwbGFjZWhvbGRlciIsUjA9RSgoSSk9PntpZihJLnByZXZlbnREZWZhdWx0KCksSC5jdXJyZW50KyssSC5jdXJyZW50PT09MSlWKCEwKX0sW10pLHkxPUUoKEkpPT57aWYoSS5wcmV2ZW50RGVmYXVsdCgpLEkuZGF0YVRyYW5zZmVyKUkuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksQjA9RSgoSSk9PntpZihJLnByZXZlbnREZWZhdWx0KCksSC5jdXJyZW50LS0sSC5jdXJyZW50PD0wKUguY3VycmVudD0wLFYoITEpfSxbXSksSDA9UVooe2J1bmRsZUlkOkosaW5qZWN0ZWQ6dCxzb3VyY2U6Syxmb3JlZ3JvdW5kSXNJbmplY3RlZDppMX0pLEQxPUgwPT09InN0b3AiP3tsYWJlbDppPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6cTAsa2luZDoic3RvcCJ9OkgwPT09ImF0dGFjaCI/e2xhYmVsOmk9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7Sn1gLG9uQ2xpY2s6YTEsa2luZDoiYXR0YWNoIn06e2xhYmVsOmk9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOmExLGtpbmQ6InBsYXkifSx3MT1IMD09PSJzdG9wIj9DfHxpIT09bnVsbDohSnx8Q3x8aSE9PW51bGwsUTA9Sz09PSJwbGFjZWhvbGRlciIsTjA9Sz09PSJ3ZWJjYW0iLFUwPShLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpJiYhIUIsazA9TjA/Vy5maW5kKChJKT0+SS5pZD09PUQpPy5uYW1lPz9EPz8iV2ViY2FtIjpudWxsLEsxPUM/InVwbG9hZGluZyI6VTA/ImZpbGUiOk4wPyJ3ZWJjYW0iOiJwbGFjZWhvbGRlciI7cmV0dXJuIFooczEse29wZW46USxvbk9wZW5DaGFuZ2U6WCxib2R5Q2xhc3NOYW1lOiJwdC0yLjUiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlooSjEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJDYW1lcmEifSksWihHWix7c3RhdGU6cTF9KV19KSxjaGlsZHJlbjpaKCJkaXYiLHtvbkRyYWdFbnRlcjpSMCxvbkRyYWdPdmVyOnkxLG9uRHJhZ0xlYXZlOkIwLG9uRHJvcDpsMCxjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIuNSIsY2hpbGRyZW46W1ooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOiJSZXBsYWNlcyB0aGUgc2ltdWxhdG9yJ3MgY2FtZXJhIGZlZWQgYnkgaW5qZWN0aW5nIGEgZHlsaWIgYXQgYXBwIGxhdW5jaCBhbmQgc3RyZWFtaW5nIGZyYW1lcyBpbnRvIHNoYXJlZCBtZW1vcnkuIFBpY2sgbWVkaWEgb3IgYSB3ZWJjYW0sIHRoZW4gUGxheSB0byBpbmplY3QgaW50byB0aGUgZm9yZWdyb3VuZCBhcHAuIn0pLFooImlucHV0Iix7cmVmOkYsdHlwZToiZmlsZSIsYWNjZXB0OiJpbWFnZS8qLHZpZGVvLyoiLGNsYXNzTmFtZToiaGlkZGVuIixvbkNoYW5nZTpKMH0pLFooImRpdiIse29uQ2xpY2s6KEkpPT57aWYoIVEwKXJldHVybjtpZihJLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1jbGVhci1tZWRpYV0iKSlyZXR1cm47VjAoKX0sdGl0bGU6UTA/Ik5vIHNvdXJjZSBzZWxlY3RlZCDigJQgUGxheSB1c2VzIGEgdGVzdC1wYXR0ZXJuIGZlZWQuIENsaWNrIHRvIHBpY2sgYW4gaW1hZ2UvdmlkZW8sIG9yIGRyb3Agb25lIGhlcmUuIjpOMD9gU291cmNlOiAke2swfWA6YFNvdXJjZTogJHtCPz9LfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLFEwPyJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEyIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCIsej8iIWJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4wOCldICFib3JkZXItW3JnYmEoMTAsMTMyLDI1NSwwLjYpXSI6IiIsQz8iY3Vyc29yLXByb2dyZXNzIjpRMD8iY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3ItZGVmYXVsdCJdLmpvaW4oIiAiKSxjaGlsZHJlbjpbWihCWix7bW9kZTpLMSxmaWxlTmFtZTpCLHdlYmNhbU5hbWU6azAsc291cmNlS2luZDpLfSksIVEwJiYhQyYmWigiYnV0dG9uIix7ImRhdGEtY2xlYXItbWVkaWEiOiEwLG9uQ2xpY2s6KEkpPT57SS5zdG9wUHJvcGFnYXRpb24oKSx2MSgpfSxjbGFzc05hbWU6InNocmluay0wIHctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOlooTDAse3NpemU6MTQsc3Ryb2tlV2lkdGg6Mn0pfSldfSksUTAmJiFDJiZaKFZaLHt9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbWigiYnV0dG9uIix7b25DbGljazooKT0+VSgoSSk9PiFJKSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIGhvdmVyOmJvcmRlci13aGl0ZS8yMCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1oYXNwb3B1cCI6Im1lbnUiLCJhcmlhLWV4cGFuZGVkIjpMLHRpdGxlOks9PT0id2ViY2FtIj9gU291cmNlOiB3ZWJjYW0ke0Q/YCAoJHtXLmZpbmQoKEkpPT5JLmlkPT09RCk/Lm5hbWU/P0R9KWA6IiJ9IOKAlCBjbGljayB0byBjaGFuZ2VgOmBTb3VyY2U6ICR7S30g4oCUIGNsaWNrIHRvIHBpY2sgbWVkaWEgb3Igd2ViY2FtYCwiYXJpYS1sYWJlbCI6IkNob29zZSBjYW1lcmEgc291cmNlIixjaGlsZHJlbjpaKHUyLHtzaXplOjIwLHN0cm9rZVdpZHRoOjJ9KX0pLEwmJlooImRpdiIse3JvbGU6Im1lbnUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIHotMTAgbWluLXctWzIwMHB4XSBmbGV4IGZsZXgtY29sIGdhcC1weCBwLTEgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40KV0iLGNoaWxkcmVuOltaKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG9uQ2xpY2s6KCk9PntVKCExKSxWMCgpfSx0aXRsZToiUGljayBhbiBpbWFnZSBvciB2aWRlbyBmcm9tIGRpc2siLGNoaWxkcmVuOiJCcm93c2UgbWVkaWHigKYifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOlA/IkNhbWVyYXMgKGxvYWRpbmfigKYpIjpXLmxlbmd0aD09PTA/Ik5vIGNhbWVyYXMiOiJDYW1lcmFzIn0pLFooImJ1dHRvbiIse29uQ2xpY2s6KEkpPT57SS5zdG9wUHJvcGFnYXRpb24oKSxqMSgpfSxkaXNhYmxlZDpQLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1bMjJweF0gaC1bMjJweF0gYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpaKGEwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLFcubWFwKChJKT0+e2xldCB1PUs9PT0id2ViY2FtIiYmRD09PUkuaWQ7cmV0dXJuIFooImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIix1PyIhYmctd2hpdGUvWzAuMTJdICF0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS84NSJdLmpvaW4oIiAiKSxvbkNsaWNrOigpPT5QMChJKSx0aXRsZTpJLm5hbWUsY2hpbGRyZW46SS5uYW1lfSxJLmlkKX0pXX0pXX0pLFooImJ1dHRvbiIse29uQ2xpY2s6RDEub25DbGljayxkaXNhYmxlZDp3MSxjbGFzc05hbWU6WyJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6b3BhY2l0eS01MCBtaW4taC1bMzZweF0iLEQxLmtpbmQ9PT0ic3RvcCI/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0iXS5qb2luKCIgIiksdGl0bGU6RDEua2luZD09PSJzdG9wIj8iU3RvcCB0aGUgY2FtZXJhIGhlbHBlciBhbmQgdGVybWluYXRlIGluamVjdGVkIGFwcHMiOkQxLmtpbmQ9PT0iYXR0YWNoIj9gSW5qZWN0ICR7Sn0gc28gaXQgam9pbnMgdGhlIGNhbWVyYSBmZWVkYDohSj8iQnJpbmcgYW4gYXBwIHRvIHRoZSBmb3JlZ3JvdW5kIGZpcnN0IjoiU3RhcnQ6IGluamVjdCB0aGUgZHlsaWIgYW5kIGxhdW5jaCB0aGUgZm9yZWdyb3VuZCBhcHAgd2l0aCB0aGUgY2hvc2VuIHNvdXJjZSIsImFyaWEtcHJlc3NlZCI6RDEua2luZD09PSJzdG9wIiwiYXJpYS1sYWJlbCI6RDEua2luZD09PSJzdG9wIj8iU3RvcCI6IlBsYXkiLGNoaWxkcmVuOltEMS5raW5kPT09InN0b3AiP1oocjIse30pOloobjIse30pLFooInNwYW4iLHtjaGlsZHJlbjpEMS5raW5kPT09InN0b3AiPyJTdG9wIjpEMS5raW5kPT09ImF0dGFjaCI/IkluamVjdCI6IlBsYXkifSldfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm0xLGRpc2FibGVkOmUxLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBtaW4taC1bMzZweF0gYm9yZGVyIHJvdW5kZWQtWzdweF0gZm9udC1baW5oZXJpdF0gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgYWN0aXZlOnNjYWxlLVswLjk3XSAke1I9PT0ib24iPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA5XSBlbmFibGVkOmhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgTWlycm9yOiAke1J9IOKAlCB0YXAgdG8gdG9nZ2xlYCx0aXRsZTplMT8iTWlycm9yIHRvZ2dsZSBhdmFpbGFibGUgb25jZSBhIHNvdXJjZSBpcyBzdHJlYW1pbmciOmBNaXJyb3I6ICR7Un0g4oCUIGNsaWNrIHRvIHRvZ2dsZWAsImFyaWEtcHJlc3NlZCI6Uj09PSJvbiIsY2hpbGRyZW46WihtMix7c2l6ZToyMCxzdHJva2VXaWR0aDoyLGZpbGw6Uj09PSJvbiI/ImN1cnJlbnRDb2xvciI6Im5vbmUifSl9KV19KSxYMSYmWihUNCx7a2luZDoid2FybmluZyIsbWVzc2FnZTpYMX0pLGwmJlooVDQse2tpbmQ6ImVycm9yIixtZXNzYWdlOmx9KV19KX0pfXZhciBiND01MDA7ZnVuY3Rpb24geTQoe3VkaWQ6JCxldmVudHNFbmRwb2ludDpKfSl7bGV0W1EsWF09ayghMSksW0ssWV09ayhbXSksW3EsR109ayghMSksQj1rMSgoKT0+Sj8/YCR7YjEoImFwaS9ldmVudC1sb2cvZXZlbnRzIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gLFtKLCRdKTt5KCgpPT57RyghMSksWShbXSk7bGV0IHo9QTAoQik7cmV0dXJuIHoub25tZXNzYWdlPSh7ZGF0YTpWfSk9Pnt0cnl7bGV0IEg9SlNPTi5wYXJzZShWKTtpZihHKCExKSxBcnJheS5pc0FycmF5KEguZXZlbnRzKSlZKEguZXZlbnRzLnNsaWNlKC1iNCkpO2Vsc2UgaWYoSC5ldmVudClZKChDKT0+e3JldHVyblsuLi5DLmZpbHRlcigoTCk9PkwuaWQhPT1ILmV2ZW50LmlkKSxILmV2ZW50XS5zbGljZSgtYjQpfSl9Y2F0Y2h7fX0sei5vbmVycm9yPSgpPT5HKCEwKSwoKT0+ei5jbG9zZSgpfSxbQl0pO2xldCBOPWsxKCgpPT5LLnNsaWNlKCkucmV2ZXJzZSgpLFtLXSk7cmV0dXJuIFooczEse29wZW46USxvbk9wZW5DaGFuZ2U6WCwiZGF0YS1ldmVudC1sb2ciOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlooSjEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSIsY2hpbGRyZW46IkV2ZW50IExvZyJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJqdXN0aWZ5LXNlbGYtZW5kIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSBweC0xLjUgcHktWzNweF0gdGV4dC1bMTBweF0gZm9udC1tb25vIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOksubGVuZ3RofSldfSksY2hpbGRyZW46Ti5sZW5ndGg9PT0wP1ooImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IHRleHQtWzEycHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOnE/IkRpc2Nvbm5lY3RlZCI6Ik5vIGV2ZW50cyB5ZXQifSk6WigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IG1heC1oLVszMjBweF0gZmxleC1jb2wgZ2FwLTEgb3ZlcmZsb3cteS1hdXRvIHB5LTAuNSBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpOLm1hcCgoeik9PlooTlose2V2ZW50Onp9LHouaWQpKX0pfSl9ZnVuY3Rpb24gTlooe2V2ZW50OiR9KXtsZXQgSj16WigkLnRpbWVzdGFtcCksUT1bJC5zb3VyY2UsJC5raW5kLCQuYWN0aW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIC8gIiksWD0kLm1zZz8/JC5zdW1tYXJ5LEs9JC5zdGF0dXM9PT0iZXJyb3IiPyJib3JkZXItWyNmZjQ1M2FdLzUwIGJnLVsjZmY0NTNhXS8xMCB0ZXh0LVsjZmZiM2FkXSI6ImJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSB0ZXh0LXdoaXRlLzUwIjtyZXR1cm4gWigiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRpdGxlOlEsY2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy1bNTZweF8xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbWQgcHgtMS41IHB5LTEuNSB0ZXh0LVsxMnB4XSBsZWFkaW5nLXRpZ2h0IGhvdmVyOmJnLXdoaXRlL1swLjA1XSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpKfSksWigic3BhbiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOlh9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtdC0wLjUgYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDAiLGNoaWxkcmVuOlF9KV19KSwkLnN0YXR1cz9aKCJzcGFuIix7Y2xhc3NOYW1lOmByb3VuZGVkLW1kIGJvcmRlciBweC0xLjUgcHktWzNweF0gdGV4dC1bMTBweF0gZm9udC1tb25vICR7S31gLGNoaWxkcmVuOiQuc3RhdHVzfSk6bnVsbF19KX1mdW5jdGlvbiB6WigkKXtsZXQgSj1uZXcgRGF0ZSgkKTtpZihOdW1iZXIuaXNOYU4oSi5nZXRUaW1lKCkpKXJldHVybiIiO3JldHVybiBKLnRvTG9jYWxlVGltZVN0cmluZyhbXSx7aG91cjoiMi1kaWdpdCIsbWludXRlOiIyLWRpZ2l0IixzZWNvbmQ6IjItZGlnaXQifSl9dmFyIExaPTYwLEhaPTgwMDA7ZnVuY3Rpb24gUzQoJCl7bGV0W0osUV09ayhudWxsKSxbWCxLXT1rKFtdKSxbWSxxXT1rKCExKSxbRyxCXT1rKCExKSxOPVQoMCk7cmV0dXJuIHkoKCk9PntRKG51bGwpLEsoW10pLHEoITEpLEIoITEpLE4uY3VycmVudD0wO2xldCB6PUEwKCQpO3oub25tZXNzYWdlPSh7ZGF0YTpIfSk9Pnt0cnl7bGV0IEM9SlNPTi5wYXJzZShIKTtpZihxKCExKSwic2NoZW1hVmVyc2lvbiJpbiBDKVEoQyk7ZWxzZSBpZigidCJpbiBDKXtsZXQgQT1DO04uY3VycmVudD1EYXRlLm5vdygpLEIoITEpLEsoKEwpPT57bGV0IFU9Wy4uLkxdLnJldmVyc2UoKS5maW5kKChXKT0+Vy5idW5kbGVJZCE9PW51bGwpPy5idW5kbGVJZD8/bnVsbDtyZXR1cm5bLi4uVSE9PW51bGwmJkEuYnVuZGxlSWQhPT1udWxsJiZVIT09QS5idW5kbGVJZD9bXTpMLEFdLnNsaWNlKC1MWil9KX19Y2F0Y2h7fX0sei5vbmVycm9yPSgpPT5xKCEwKTtsZXQgVj1zZXRJbnRlcnZhbCgoKT0+e2lmKE4uY3VycmVudD4wJiZEYXRlLm5vdygpLU4uY3VycmVudD5IWilCKCEwKX0sMTAwMCk7cmV0dXJuKCk9Pnt6LmNsb3NlKCksY2xlYXJJbnRlcnZhbChWKX19LFskXSkse21ldGE6SixsYXRlc3Q6WC5hdCgtMSk/P251bGwsaGlzdG9yeTpYLGVycm9yZWQ6WSxzdGFsZTpHfX1mdW5jdGlvbiBIOCgkKXtyZXR1cm5gJHtNYXRoLnJvdW5kKCQpfSVgfWZ1bmN0aW9uIFU4KCQpe2xldCBKPSQvMTA0ODU3NjtyZXR1cm4gSj49MTAyND9gJHsoSi8xMDI0KS50b0ZpeGVkKDEpfSBHQmA6YCR7TWF0aC5yb3VuZChKKX0gTUJgfWZ1bmN0aW9uIEM4KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQi9zIjtpZigkPDEwMjQpcmV0dXJuYCR7TWF0aC5yb3VuZCgkKX0gQi9zYDtsZXQgSj0kLzEwMjQ7cmV0dXJuIEo8MTAyND9gJHtNYXRoLnJvdW5kKEopfSBLQi9zYDpgJHsoSi8xMDI0KS50b0ZpeGVkKDEpfSBNQi9zYH1mdW5jdGlvbiBlMigkLEosUSxYKXtpZigkLmxlbmd0aDwyKXJldHVybiIiO2xldCBLPVghPT12b2lkIDAmJlg+MD9YOk1hdGgubWF4KC4uLiQsMSksWT1KLygkLmxlbmd0aC0xKSxxPSQubWFwKChCLE4pPT4oe3g6TipZLHk6US1CL0sqUX0pKSxHPWBNJHtxWzBdLngudG9GaXhlZCgxKX0sJHtxWzBdLnkudG9GaXhlZCgxKX1gO2ZvcihsZXQgQj0wO0I8cS5sZW5ndGgtMTtCKyspe2xldCBOPXFbQi0xXT8/cVtCXSx6PXFbQl0sVj1xW0IrMV0sSD1xW0IrMl0/P1YsQz1NYXRoLm1pbih6LnksVi55KSxBPU1hdGgubWF4KHoueSxWLnkpLEw9KFApPT5NYXRoLm1pbihBLE1hdGgubWF4KEMsUCkpLFU9ei54KyhWLngtTi54KS82LEY9TCh6LnkrKFYueS1OLnkpLzYpLFc9Vi54LShILngtei54KS82LHc9TChWLnktKEgueS16LnkpLzYpO0crPWAgQyR7VS50b0ZpeGVkKDEpfSwke0YudG9GaXhlZCgxKX0gJHtXLnRvRml4ZWQoMSl9LCR7dy50b0ZpeGVkKDEpfSAke1YueC50b0ZpeGVkKDEpfSwke1YueS50b0ZpeGVkKDEpfWB9cmV0dXJuIEd9dmFyIEoyPTk2LHAwPTI0O2Z1bmN0aW9uIHQ1KHt2YWx1ZXM6JCxtYXg6SixjbGFzc05hbWU6UX0pe2xldCBYPWUyKCQsSjIscDAsSiksSz1YP2Ake1h9IEwke0oyfSwke3AwfSBMMCwke3AwfSBaYDoiIjtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7SjJ9ICR7cDB9YCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjbGFzc05hbWU6YHctZnVsbCBoLTggJHtRfWAsY2hpbGRyZW46W1ooInBhdGgiLHtkOkssZmlsbDoiY3VycmVudENvbG9yIixvcGFjaXR5OjAuMTIsc3Ryb2tlOiJub25lIn0pLFooZTUse2Q6WH0pXX0pfWZ1bmN0aW9uIGU1KHtkOiQsY2xhc3NOYW1lOkp9KXtyZXR1cm4gWigicGF0aCIse2Q6JCxjbGFzc05hbWU6SixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS41LHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIn0pfWZ1bmN0aW9uIGo0KHt1ZGlkOiQsY3VycmVudEFwcEJ1bmRsZUlkOkosbWV0cmljc0VuZHBvaW50OlF9KXtsZXQgWD1rMSgoKT0+UT8/YCR7YjEoIm1ldHJpY3MiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWAsW1EsJF0pLHttZXRhOkssbGF0ZXN0OlksaGlzdG9yeTpxLGVycm9yZWQ6RyxzdGFsZTpCfT1TNChYKSxbTix6XT1rKCEwKSxWPVkhPT1udWxsJiZZLmJ1bmRsZUlkIT09bnVsbCYmIUcmJiFCLEg9SiE9bnVsbCYmSi5zdGFydHNXaXRoKCJjb20uYXBwbGUuIiksQz1HPyJUaGUgbWV0cmljcyBzdHJlYW0gZGlzY29ubmVjdGVkIjpIPyJPbmx5IHlvdXIgYXBwIGlzIG1lYXN1cmVkOyBhIHN5c3RlbSBhcHAgaXMgaW4gdGhlIGZvcmVncm91bmQiOiJXYWl0aW5nIGZvciBhY3Rpdml0eSBkYXRhIjtyZXR1cm4gWihzMSx7b3BlbjpOLG9uT3BlbkNoYW5nZTp6LHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0Iixib2R5Q2xhc3NOYW1lOlY/dm9pZCAwOiJoaWRkZW4iLHN1bW1hcnk6WihKMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkFjdGl2aXR5In0pLFY/IU4mJlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAgdGFidWxhci1udW1zIHRleHQtcmlnaHQiLGNoaWxkcmVuOltIOChZLmNwdVBjdCksIiDCtyAiLFU4KFkubWVtQnl0ZXMpXX0pOlooInNwYW4iLHsiZGF0YS1tZXRyaWNzLXdhcm5pbmciOiEwLHJvbGU6InN0YXR1cyIsY2xhc3NOYW1lOiJncm91cCByZWxhdGl2ZSBqdXN0aWZ5LXNlbGYtZW5kIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46W1ooYjAseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToidy0zLjUgaC0zLjUgdGV4dC1hbWJlci00MDAifSksWigic3BhbiIse2NsYXNzTmFtZToic3Itb25seSIsY2hpbGRyZW46Q30pLFooInNwYW4iLHtjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgcmlnaHQtMCB0b3AtZnVsbCB6LTEwIG10LTEgaGlkZGVuIHctbWF4IG1heC13LVsyMjBweF0gcm91bmRlZC1tZCBiZy1ibGFjay85MCBweC0yIHB5LTEgdGV4dC1bMTFweF0gbGVhZGluZy1zbnVnIHRleHQtd2hpdGUvOTAgc2hhZG93LWxnIGdyb3VwLWhvdmVyOmJsb2NrIixjaGlsZHJlbjpDfSldfSldfSksY2hpbGRyZW46Vj9aKEoxLHtjaGlsZHJlbjpbWih4NCx7bGFiZWw6IkNQVSIsdmFsdWU6SDgoWS5jcHVQY3QpLGhpbnQ6Sz9gJHtLLmhvc3RDb3Jlc30gY29yZXNgOnZvaWQgMCx2YWx1ZXM6cS5tYXAoKEEpPT5BLmNwdVBjdCksY2xhc3NOYW1lOiJ0ZXh0LWVtZXJhbGQtNDAwIn0pLFooeDQse2xhYmVsOiJNZW1vcnkiLHZhbHVlOlU4KFkubWVtQnl0ZXMpLHZhbHVlczpxLm1hcCgoQSk9PkEubWVtQnl0ZXMpLGNsYXNzTmFtZToidGV4dC1za3ktNDAwIn0pLFooVVose2Rvd246WS5uZXRJbkJ5dGVzUGVyU2VjLHVwOlkubmV0T3V0Qnl0ZXNQZXJTZWMsZG93blZhbHVlczpxLm1hcCgoQSk9PkEubmV0SW5CeXRlc1BlclNlYyksdXBWYWx1ZXM6cS5tYXAoKEEpPT5BLm5ldE91dEJ5dGVzUGVyU2VjKX0pXX0pOm51bGx9KX1mdW5jdGlvbiB4NCh7bGFiZWw6JCx2YWx1ZTpKLGhpbnQ6USx2YWx1ZXM6WCxjbGFzc05hbWU6S30pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81MCB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46JH0pLFooInNwYW4iLHtjbGFzc05hbWU6InRhYnVsYXItbnVtcyB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46W0osUSYmWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS8zMCB0ZXh0LVsxMXB4XSBtbC0xLjUiLGNoaWxkcmVuOlF9KV19KV19KSxaKHQ1LHt2YWx1ZXM6WCxjbGFzc05hbWU6S30pXX0pfWZ1bmN0aW9uIFVaKHtkb3duOiQsdXA6Sixkb3duVmFsdWVzOlEsdXBWYWx1ZXM6WH0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81MCB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46Ik5ldHdvcmsifSksWigic3BhbiIse2NsYXNzTmFtZToidGFidWxhci1udW1zIHRleHQtWzExcHhdIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1jeWFuLTQwMCIsY2hpbGRyZW46WyLihpMgIixDOCgkKV19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzMwIG14LTEuNSIsY2hpbGRyZW46IsK3In0pLFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtdmlvbGV0LTQwMCIsY2hpbGRyZW46WyLihpEgIixDOChKKV19KV19KV19KSxaKENaLHtkb3duOlEsdXA6WH0pXX0pfWZ1bmN0aW9uIENaKHtkb3duOiQsdXA6Sn0pe2xldCBRPU1hdGgubWF4KC4uLiQsLi4uSiwxKTtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7SjJ9ICR7cDB9YCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjbGFzc05hbWU6InctZnVsbCBoLTgiLGNoaWxkcmVuOltaKGU1LHtkOmUyKCQsSjIscDAsUSksY2xhc3NOYW1lOiJ0ZXh0LWN5YW4tNDAwIn0pLFooZTUse2Q6ZTIoSixKMixwMCxRKSxjbGFzc05hbWU6InRleHQtdmlvbGV0LTQwMCJ9KV19KX12YXIgSjU9WyJleHRyYS1zbWFsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJleHRyYS1sYXJnZSIsImV4dHJhLWV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtZXh0cmEtbGFyZ2UiXSxPWj0yNTAsRlo9e2FwcGVhcmFuY2U6ImxpZ2h0IiwibGlxdWlkLWdsYXNzIjoiY2xlYXIiLCJjb2xvci1maWx0ZXIiOiJub25lIiwidGV4dC1zaXplIjoibGFyZ2UiLCJyZWR1Y2UtbW90aW9uIjoib2ZmIiwiaW5jcmVhc2UtY29udHJhc3QiOiJvZmYiLCJzaG93LWJvcmRlcnMiOiJvZmYiLCJyZWR1Y2UtdHJhbnNwYXJlbmN5Ijoib2ZmIix2b2ljZW92ZXI6Im9mZiJ9LE84PXthcHBlYXJhbmNlOlt7dmFsdWU6ImxpZ2h0IixsYWJlbDoiTGlnaHQifSx7dmFsdWU6ImRhcmsiLGxhYmVsOiJEYXJrIn1dLCJsaXF1aWQtZ2xhc3MiOlt7dmFsdWU6ImNsZWFyIixsYWJlbDoiQ2xlYXIifSx7dmFsdWU6InRpbnRlZCIsbGFiZWw6IlRpbnRlZCJ9XSwiY29sb3ItZmlsdGVyIjpbe3ZhbHVlOiJub25lIixsYWJlbDoiTm9uZSJ9LHt2YWx1ZToicmVkLWdyZWVuIixsYWJlbDoiUmVkL0dyZWVuIChQcm90YW5vcGlhKSJ9LHt2YWx1ZToiZ3JlZW4tcmVkIixsYWJlbDoiR3JlZW4vUmVkIChEZXV0ZXJhbm9waWEpIn0se3ZhbHVlOiJibHVlLXllbGxvdyIsbGFiZWw6IkJsdWUvWWVsbG93IChUcml0YW5vcGlhKSJ9LHt2YWx1ZToiZ3JheXNjYWxlIixsYWJlbDoiR3JheXNjYWxlIn1dfSxBWj1be2tleToicmVkdWNlLW1vdGlvbiIsbGFiZWw6IlJlZHVjZSBNb3Rpb24ifSx7a2V5OiJpbmNyZWFzZS1jb250cmFzdCIsbGFiZWw6IkluY3JlYXNlIENvbnRyYXN0In0se2tleToic2hvdy1ib3JkZXJzIixsYWJlbDoiU2hvdyBCb3JkZXJzIn0se2tleToicmVkdWNlLXRyYW5zcGFyZW5jeSIsbGFiZWw6IlJlZHVjZSBUcmFuc3BhcmVuY3kifSx7a2V5OiJ2b2ljZW92ZXIiLGxhYmVsOiJWb2ljZU92ZXIifV07ZnVuY3Rpb24gWTAoe2ljb246JCxsYWJlbDpKLGNoaWxkcmVuOlF9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgbWluLWgtWzMwcHhdIiwiZGF0YS1zZXR0aW5nLXJvdyI6SixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2l6ZS1bMThweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUiLGNoaWxkcmVuOiR9KSxKXX0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggbWluLXctMCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46UX0pXX0pfWZ1bmN0aW9uIE1aKHt2YWx1ZTokLGRpc2FibGVkOkosb25DaGFuZ2U6UX0pe2xldFtYLEtdPWsobnVsbCksWT1UKG51bGwpLHE9VChudWxsKSxHPUUoKFUpPT57aWYocS5jdXJyZW50PT09VSlyZXR1cm47cS5jdXJyZW50PVUsUShVKX0sW1FdKSxCPUUoKFUpPT57aWYoSyhVKSxZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCk7WS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkcoVSksT1opfSxbR10pLE49RSgoKT0+e2lmKFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KSxZLmN1cnJlbnQ9bnVsbDtLKChVKT0+e2lmKFUhPT1udWxsKUcoVSk7cmV0dXJuIG51bGx9KSxxLmN1cnJlbnQ9bnVsbH0sW0ddKSx6PUo1Lmxlbmd0aC0xLFY9WD8/JCxIPWAke1YveioxMDB9JWA7cmV0dXJuIFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggdy1bMTIwcHhdIG1pbi13LTAgZmxleC1jb2wiLGNoaWxkcmVuOltaKCJpbnB1dCIse3R5cGU6InJhbmdlIiwiYXJpYS1sYWJlbCI6IlRleHQgU2l6ZSIsbWluOjAsbWF4Onosc3RlcDoxLHZhbHVlOlYsZGlzYWJsZWQ6SixvbkNoYW5nZTooVSk9PkIoTnVtYmVyKFUudGFyZ2V0LnZhbHVlKSksb25Qb2ludGVyVXA6TixvbktleVVwOk4sb25CbHVyOk4sc3R5bGU6eyItLXNsaWRlci1maWxsIjpILCItLXNsaWRlci1maWxsLWNvbG9yIjpKPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiIjMGE4NGZmIn0sY2xhc3NOYW1lOmBoLVsxM3B4XSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIHJvdW5kZWQtZnVsbCBiZy10cmFuc3BhcmVudCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpbb3V0bGluZToxLjVweF9zb2xpZF9yZ2JhKDEwLDEzMiwyNTUsMC41NSldIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtNCAke0o/ImN1cnNvci1kZWZhdWx0IjoiY3Vyc29yLXBvaW50ZXIifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOmgtWzRweF0gWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpbYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpX3ZhcigtLXNsaWRlci1maWxsKSxyZ2JhKDI1NSwyNTUsMjU1LDAuMjIpX3ZhcigtLXNsaWRlci1maWxsKSldIFsmOjotbW96LXJhbmdlLXRyYWNrXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmJnLXdoaXRlLzIwIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmJnLVt2YXIoLS1zbGlkZXItZmlsbC1jb2xvcildIn0gJHsiWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTphcHBlYXJhbmNlLW5vbmUgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpzaXplLVsxM3B4XSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmJnLXdoaXRlIFsmOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUvNTAgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpzaGFkb3ctWzBfMXB4XzNweF9yZ2JhKDAsMCwwLDAuNDUpXSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOi1tdC1bNC41cHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpzaXplLVsxM3B4XSBbJjo6LW1vei1yYW5nZS10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXRodW1iXTpib3JkZXItbm9uZSBbJjo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJdOmJnLXdoaXRlLzUwIn1gfSksWigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1ub25lIG10LVszcHhdIGZsZXgganVzdGlmeS1iZXR3ZWVuIHB4LVs1LjVweF0iLGNoaWxkcmVuOko1Lm1hcCgoVSk9PlooInNwYW4iLHtjbGFzc05hbWU6InNpemUtWzJweF0gcm91bmRlZC1mdWxsIGJnLXdoaXRlLzQwIn0sVSkpfSldfSl9ZnVuY3Rpb24gTTAoe2xhYmVsOiQsdmFsdWU6SixvcHRpb25zOlEsZGlzYWJsZWQ6WCxvbkNoYW5nZTpLfSl7cmV0dXJuIFoocjUse2xhYmVsOiQsdmFsdWU6SixvcHRpb25zOlEsZGlzYWJsZWQ6WCxvbkNoYW5nZTpLLGNsYXNzTmFtZToiYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTAuNSBweC0yIG1pbi13LTAgbWF4LXctWzE1MHB4XSBkaXNhYmxlZDp0ZXh0LXdoaXRlLzQwIn0pfXZhciAkNT17YXBwZWFyYW5jZTpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik0xMiAydjIifSksWigicGF0aCIse2Q6Ik0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUifSksWigicGF0aCIse2Q6Ik0xNiAxMmE0IDQgMCAwIDAtNC00In0pLFooInBhdGgiLHtkOiJtMTkgNS0xLjI1NiAxLjI1NiJ9KSxaKCJwYXRoIix7ZDoiTTIwIDEyaDIifSldfSksZ2xhc3M6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjIwIDIyMCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoiTTE1MiAxODNWMTk1SDEwMFYxODNIMTUyWk0xOTYgMTM5VjEyNkMxOTYgMTAxLjY5OSAxNzYuMzAxIDgyIDE1MiA4MkgxMDBDNzUuNjk5NSA4MiA1NiAxMDEuNjk5IDU2IDEyNlYxMzlDNTYgMTYzLjMwMSA3NS42OTk1IDE4MyAxMDAgMTgzVjE5NUw5OS4yNzY0IDE5NC45OTVDNjguOTIyOCAxOTQuNjExIDQ0LjM4OTMgMTcwLjA3NyA0NC4wMDQ5IDEzOS43MjRMNDQgMTM5VjEyNkM0NCA5NS4wNzIxIDY5LjA3MjEgNzAgMTAwIDcwSDE1MkMxODIuOTI4IDcwIDIwOCA5NS4wNzIxIDIwOCAxMjZWMTM5TDIwNy45OTUgMTM5LjcyNEMyMDcuNjExIDE3MC4wNzcgMTgzLjA3NyAxOTQuNjExIDE1Mi43MjQgMTk0Ljk5NUwxNTIgMTk1VjE4M0MxNzYuMzAxIDE4MyAxOTYgMTYzLjMwMSAxOTYgMTM5WiJ9KSxaKCJwYXRoIix7ZDoiTTEzNiAyNUMxNDcuMDQ2IDI1IDE1NiAzMy45NTQzIDE1NiA0NVY3MEgxNDNWNDVDMTQzIDQxLjEzNCAxMzkuODY2IDM4IDEzNiAzOEg0MUMzNy4xMzQgMzggMzQgNDEuMTM0IDM0IDQ1VjE0MEMzNCAxNDMuODY2IDM3LjEzNCAxNDcgNDEgMTQ3SDQ0Ljg2MDRDNDUuNjQ4NyAxNTEuNTM2IDQ2Ljk2MzQgMTU1Ljg5MSA0OC43NDAyIDE2MEg0MUw0MC40ODM0IDE1OS45OTNDMjkuODQ4MSAxNTkuNzI0IDIxLjI3NjUgMTUxLjE1MiAyMS4wMDY4IDE0MC41MTdMMjEgMTQwVjQ1QzIxIDMzLjk1NDMgMjkuOTU0MyAyNSA0MSAyNUgxMzZaIn0pLFooInBhdGgiLHtkOiJNMTU2LjE5OSAxNDBDMTU2LjE5OSAxNTAuODczIDE0Ny41MjMgMTU5LjcxOSAxMzYuNzE2IDE1OS45OTNMMTM2LjE5OSAxNjBIODAuOTE3Qzc3Ljk0NjEgMTYwIDc2LjE2MzkgMTYzLjMgNzcuNzkzIDE2NS43ODRDNzkuMjQ1MSAxNjcuOTk5IDc2LjE2NDcgMTcwLjM1MyA3NC40MDk0IDE2OC4zN0w3My42MDU5IDE2Ny40NjJDNjkuMzQ5NyAxNjIuNjU0IDY3IDE1Ni40NTUgNjcgMTUwLjAzNEM2NyAxNDguMzU4IDY4LjM1ODMgMTQ3IDcwLjAzMzkgMTQ3SDEzNi4xOTlDMTQwLjA2NSAxNDcgMTQzLjE5OSAxNDMuODY2IDE0My4xOTkgMTQwVjk2Ljk5NTVDMTQzLjE5OSA5My45ODIyIDE0MS4zNTQgOTEuMjc2MyAxMzguNTQ5IDkwLjE3NjFDMTM3LjM4OSA4OS43MjE1IDEzNy43MTUgODggMTM4Ljk2IDg4TDE0My4xOTkgODhDMTUwLjM3OSA4OCAxNTYuMTk5IDkzLjgyMDMgMTU2LjE5OSAxMDFWMTQwWiJ9KV19KSxmaWx0ZXI6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1ooInBhdGgiLHtkOiJNMTEgMTdhNCA0IDAgMCAxLTggMFY1YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAyWiJ9KSxaKCJwYXRoIix7ZDoiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyJ9KSxaKCJwYXRoIix7ZDoiTSA3IDE3aC4wMSJ9KSxaKCJwYXRoIix7ZDoibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgifSldfSksdGV4dFNpemU6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNTIgMzQiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTM5LjcyNjYgMzMuMDIzNEMzOC4xNDg0IDMzLjAyMzQgMzYuNzUgMzIuNzI2NiAzNS41MzEyIDMyLjEzMjhDMzQuMzEyNSAzMS41MzkxIDMzLjM1OTQgMzAuNzEwOSAzMi42NzE5IDI5LjY0ODRDMzIgMjguNTcwMyAzMS42NjQxIDI3LjMxMjUgMzEuNjY0MSAyNS44NzVDMzEuNjY0MSAyMy43ODEyIDMyLjQyOTcgMjIuMTA5NCAzMy45NjA5IDIwLjg1OTRDMzUuNTA3OCAxOS42MDk0IDM3LjcxMDkgMTguOTA2MiA0MC41NzAzIDE4Ljc1TDQ3LjYwMTYgMTguMzUxNlYxNi41QzQ3LjYwMTYgMTUuMDE1NiA0Ny4xMzI4IDEzLjgzNTkgNDYuMTk1MyAxMi45NjA5QzQ1LjI1NzggMTIuMDg1OSA0My45NTMxIDExLjY0ODQgNDIuMjgxMiAxMS42NDg0QzQwLjkwNjIgMTEuNjQ4NCAzOS43NSAxMS45NDUzIDM4LjgxMjUgMTIuNTM5MUMzNy44NzUgMTMuMTMyOCAzNy4wOTM4IDE0LjA0NjkgMzYuNDY4OCAxNS4yODEyQzM2LjI2NTYgMTUuNjA5NCAzNi4wMTU2IDE1Ljg1MTYgMzUuNzE4OCAxNi4wMDc4QzM1LjQyMTkgMTYuMTY0MSAzNS4wNzgxIDE2LjI0MjIgMzQuNjg3NSAxNi4yNDIyQzM0LjE1NjIgMTYuMjQyMiAzMy43MTA5IDE2LjA3ODEgMzMuMzUxNiAxNS43NUMzMy4wMDc4IDE1LjQyMTkgMzIuODM1OSAxNC45OTIyIDMyLjgzNTkgMTQuNDYwOUMzMi44MzU5IDE0LjIyNjYgMzIuODY3MiAxMy45NzY2IDMyLjkyOTcgMTMuNzEwOUMzMy4wMDc4IDEzLjQ0NTMgMzMuMTA5NCAxMy4xNzk3IDMzLjIzNDQgMTIuOTE0MUMzMy44NzUgMTEuNDYwOSAzNS4wMTU2IDEwLjMwNDcgMzYuNjU2MiA5LjQ0NTMxQzM4LjMxMjUgOC41ODU5NCA0MC4yMjY2IDguMTU2MjUgNDIuMzk4NCA4LjE1NjI1QzQ0LjMyMDMgOC4xNTYyNSA0NS45ODQ0IDguNDkyMTkgNDcuMzkwNiA5LjE2NDA2QzQ4LjgxMjUgOS44MjAzMSA0OS44OTg0IDEwLjc1IDUwLjY0ODQgMTEuOTUzMUM1MS40MTQxIDEzLjE1NjIgNTEuNzk2OSAxNC41NzAzIDUxLjc5NjkgMTYuMTk1M1YzMC45MTQxQzUxLjc5NjkgMzEuNTg1OSA1MS42MDk0IDMyLjEwOTQgNTEuMjM0NCAzMi40ODQ0QzUwLjg1OTQgMzIuODU5NCA1MC4zNjcyIDMzLjA0NjkgNDkuNzU3OCAzMy4wNDY5QzQ5LjE2NDEgMzMuMDQ2OSA0OC42Nzk3IDMyLjg2NzIgNDguMzA0NyAzMi41MDc4QzQ3LjkyOTcgMzIuMTQ4NCA0Ny43MzQ0IDMxLjY2NDEgNDcuNzE4OCAzMS4wNTQ3VjI4LjM1OTRINDcuNjcxOUM0Ni45ODQ0IDI5Ljc4MTIgNDUuOTA2MiAzMC45MTQxIDQ0LjQzNzUgMzEuNzU3OEM0Mi45ODQ0IDMyLjYwMTYgNDEuNDE0MSAzMy4wMjM0IDM5LjcyNjYgMzMuMDIzNFpNNDAuODA0NyAyOS42NzE5QzQyLjA3MDMgMjkuNjcxOSA0My4yMTA5IDI5LjQwNjIgNDQuMjI2NiAyOC44NzVDNDUuMjU3OCAyOC4zNDM4IDQ2LjA3ODEgMjcuNjE3MiA0Ni42ODc1IDI2LjY5NTNDNDcuMjk2OSAyNS43NzM0IDQ3LjYwMTYgMjQuNzUgNDcuNjAxNiAyMy42MjVWMjEuMzI4MUw0MS4xMzI4IDIxLjc1QzM5LjQ0NTMgMjEuODU5NCAzOC4xNjQxIDIyLjI3MzQgMzcuMjg5MSAyMi45OTIyQzM2LjQxNDEgMjMuNjk1MyAzNS45NzY2IDI0LjYwOTQgMzUuOTc2NiAyNS43MzQ0QzM1Ljk3NjYgMjYuOTIxOSAzNi40MjE5IDI3Ljg3NSAzNy4zMTI1IDI4LjU5MzhDMzguMjAzMSAyOS4zMTI1IDM5LjM2NzIgMjkuNjcxOSA0MC44MDQ3IDI5LjY3MTlaTTIuMTc5NjkgMzMuMDIzNEMxLjUwNzgxIDMzLjAyMzQgMC45NzY1NjIgMzIuODM1OSAwLjU4NTkzOCAzMi40NjA5QzAuMTk1MzEyIDMyLjA4NTkgMCAzMS41NzgxIDAgMzAuOTM3NUMwIDMwLjUzMTIgMC4wODU5Mzc1IDMwLjA3MDMgMC4yNTc4MTIgMjkuNTU0N0wxMC40MDYyIDIuNDE0MDZDMTAuOTg0NCAwLjgwNDY4OCAxMi4xMDE2IDAgMTMuNzU3OCAwQzE0LjYxNzIgMCAxNS4zMjgxIDAuMjAzMTI1IDE1Ljg5MDYgMC42MDkzNzVDMTYuNDUzMSAxLjAxNTYyIDE2Ljg3NSAxLjYyNSAxNy4xNTYyIDIuNDM3NUwyNy4yNTc4IDI5LjQ4NDRDMjcuNDQ1MyAzMCAyNy41MzkxIDMwLjQ2ODggMjcuNTM5MSAzMC44OTA2QzI3LjUzOTEgMzEuNTQ2OSAyNy4zMzU5IDMyLjA3MDMgMjYuOTI5NyAzMi40NjA5QzI2LjUyMzQgMzIuODM1OSAyNS45NzY2IDMzLjAyMzQgMjUuMjg5MSAzMy4wMjM0QzI0LjYzMjggMzMuMDIzNCAyNC4xMDk0IDMyLjg3NSAyMy43MTg4IDMyLjU3ODFDMjMuMzQzOCAzMi4yODEyIDIzLjAzOTEgMzEuNzg5MSAyMi44MDQ3IDMxLjEwMTZMMTMuODI4MSA1LjM0Mzc1SDEzLjY2NDFMNC42NjQwNiAzMS4xMDE2QzQuNDI5NjkgMzEuNzg5MSA0LjEyNSAzMi4yODEyIDMuNzUgMzIuNTc4MUMzLjM3NSAzMi44NzUgMi44NTE1NiAzMy4wMjM0IDIuMTc5NjkgMzMuMDIzNFpNNi42Nzk2OSAyMy43NDIyQzYuMTQ4NDQgMjMuNzQyMiA1LjcwMzEyIDIzLjU2MjUgNS4zNDM3NSAyMy4yMDMxQzQuOTg0MzggMjIuODQzOCA0LjgwNDY5IDIyLjM5ODQgNC44MDQ2OSAyMS44NjcyQzQuODA0NjkgMjEuMzUxNiA0Ljk4NDM4IDIwLjkxNDEgNS4zNDM3NSAyMC41NTQ3QzUuNzAzMTIgMjAuMTk1MyA2LjE0ODQ0IDIwLjAxNTYgNi42Nzk2OSAyMC4wMTU2SDIwLjg1OTRDMjEuMzc1IDIwLjAxNTYgMjEuODEyNSAyMC4xOTUzIDIyLjE3MTkgMjAuNTU0N0MyMi41MzEyIDIwLjkxNDEgMjIuNzEwOSAyMS4zNTE2IDIyLjcxMDkgMjEuODY3MkMyMi43MTA5IDIyLjM5ODQgMjIuNTMxMiAyMi44NDM4IDIyLjE3MTkgMjMuMjAzMUMyMS44MTI1IDIzLjU2MjUgMjEuMzc1IDIzLjc0MjIgMjAuODU5NCAyMy43NDIySDYuNjc5NjlaIn0pfSksbW90aW9uOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixjaGlsZHJlbjpbWigiY2lyY2xlIix7Y3g6IjE0IixjeToiMTIiLHI6IjYifSksWigicGF0aCIse2Q6Ik0zIDhoNE0yIDEyaDRNMyAxNmg0In0pXX0pLGNvbnRyYXN0OlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifSksWigicGF0aCIse2Q6Ik0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoifSldfSksYm9yZGVyczpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiJ9KSxaKCJwYXRoIix7ZDoiTTkgMjFoMSJ9KSxaKCJwYXRoIix7ZDoiTTE0IDIxaDEifSldfSksdHJhbnNwYXJlbmN5OlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDYzIDQ2IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik0yMi43MzQ0IDQuMTcxODhDMjIuMTg3NSA0LjE3MTg4IDIxLjcxODggMy45NzY1NiAyMS4zMjgxIDMuNTg1OTRDMjAuOTM3NSAzLjE5NTMxIDIwLjc0MjIgMi43MTg3NSAyMC43NDIyIDIuMTU2MjVDMjAuNzQyMiAxLjYwOTM4IDIwLjkzNzUgMS4xNDA2MiAyMS4zMjgxIDAuNzVDMjEuNzE4OCAwLjM1OTM3NSAyMi4xODc1IDAuMTY0MDYyIDIyLjczNDQgMC4xNjQwNjJDMjMuMjgxMiAwLjE2NDA2MiAyMy43NSAwLjM1OTM3NSAyNC4xNDA2IDAuNzVDMjQuNTMxMiAxLjE0MDYyIDI0LjcyNjYgMS42MDkzOCAyNC43MjY2IDIuMTU2MjVDMjQuNzI2NiAyLjcxODc1IDI0LjUzMTIgMy4xOTUzMSAyNC4xNDA2IDMuNTg1OTRDMjMuNzUgMy45NzY1NiAyMy4yODEyIDQuMTcxODggMjIuNzM0NCA0LjE3MTg4Wk0yOS4xMDk0IDUuMjAzMTJDMjguNTQ2OSA1LjIwMzEyIDI4LjA3MDMgNS4wMDc4MSAyNy42Nzk3IDQuNjE3MTlDMjcuMjg5MSA0LjIyNjU2IDI3LjA5MzggMy43NTc4MSAyNy4wOTM4IDMuMjEwOTRDMjcuMDkzOCAyLjY2NDA2IDI3LjI4OTEgMi4xOTUzMSAyNy42Nzk3IDEuODA0NjlDMjguMDcwMyAxLjM5ODQ0IDI4LjU0NjkgMS4xOTUzMSAyOS4xMDk0IDEuMTk1MzFDMjkuNjU2MiAxLjE5NTMxIDMwLjEyNSAxLjM5ODQ0IDMwLjUxNTYgMS44MDQ2OUMzMC45MDYyIDIuMTk1MzEgMzEuMTAxNiAyLjY2NDA2IDMxLjEwMTYgMy4yMTA5NEMzMS4xMDE2IDMuNzU3ODEgMzAuOTA2MiA0LjIyNjU2IDMwLjUxNTYgNC42MTcxOUMzMC4xMjUgNS4wMDc4MSAyOS42NTYyIDUuMjAzMTIgMjkuMTA5NCA1LjIwMzEyWk0zNC44NzUgOC4xMzI4MUMzNC4zMjgxIDguMTMyODEgMzMuODUxNiA3LjkzNzUgMzMuNDQ1MyA3LjU0Njg4QzMzLjA1NDcgNy4xNDA2MiAzMi44NTk0IDYuNjcxODggMzIuODU5NCA2LjE0MDYyQzMyLjg1OTQgNS41NzgxMiAzMy4wNTQ3IDUuMTAxNTYgMzMuNDQ1MyA0LjcxMDk0QzMzLjg1MTYgNC4zMjAzMSAzNC4zMjgxIDQuMTI1IDM0Ljg3NSA0LjEyNUMzNS40MjE5IDQuMTI1IDM1Ljg5MDYgNC4zMjAzMSAzNi4yODEyIDQuNzEwOTRDMzYuNjg3NSA1LjEwMTU2IDM2Ljg5MDYgNS41NzgxMiAzNi44OTA2IDYuMTQwNjJDMzYuODkwNiA2LjY3MTg4IDM2LjY4NzUgNy4xNDA2MiAzNi4yODEyIDcuNTQ2ODhDMzUuODkwNiA3LjkzNzUgMzUuNDIxOSA4LjEzMjgxIDM0Ljg3NSA4LjEzMjgxWk0zOS40NDUzIDEyLjY3OTdDMzguODk4NCAxMi42Nzk3IDM4LjQyMTkgMTIuNDg0NCAzOC4wMTU2IDEyLjA5MzhDMzcuNjI1IDExLjcwMzEgMzcuNDI5NyAxMS4yMzQ0IDM3LjQyOTcgMTAuNjg3NUMzNy40Mjk3IDEwLjE1NjIgMzcuNjI1IDkuNjk1MzEgMzguMDE1NiA5LjMwNDY5QzM4LjQyMTkgOC44OTg0NCAzOC44OTg0IDguNjk1MzEgMzkuNDQ1MyA4LjY5NTMxQzM5Ljk5MjIgOC42OTUzMSA0MC40NjA5IDguODk4NDQgNDAuODUxNiA5LjMwNDY5QzQxLjI0MjIgOS42OTUzMSA0MS40Mzc1IDEwLjE1NjIgNDEuNDM3NSAxMC42ODc1QzQxLjQzNzUgMTEuMjM0NCA0MS4yNDIyIDExLjcwMzEgNDAuODUxNiAxMi4wOTM4QzQwLjQ2MDkgMTIuNDg0NCAzOS45OTIyIDEyLjY3OTcgMzkuNDQ1MyAxMi42Nzk3Wk00Mi4zNzUgMTguMzk4NEM0MS44MTI1IDE4LjM5ODQgNDEuMzI4MSAxOC4yMDMxIDQwLjkyMTkgMTcuODEyNUM0MC41MzEyIDE3LjQyMTkgNDAuMzM1OSAxNi45NTMxIDQwLjMzNTkgMTYuNDA2MkM0MC4zMzU5IDE1Ljg0MzggNDAuNTMxMiAxNS4zNjcyIDQwLjkyMTkgMTQuOTc2NkM0MS4zMjgxIDE0LjU4NTkgNDEuODEyNSAxNC4zOTA2IDQyLjM3NSAxNC4zOTA2QzQyLjkwNjIgMTQuMzkwNiA0My4zNjcyIDE0LjU4NTkgNDMuNzU3OCAxNC45NzY2QzQ0LjE2NDEgMTUuMzY3MiA0NC4zNjcyIDE1Ljg0MzggNDQuMzY3MiAxNi40MDYyQzQ0LjM2NzIgMTYuOTUzMSA0NC4xNjQxIDE3LjQyMTkgNDMuNzU3OCAxNy44MTI1QzQzLjM2NzIgMTguMjAzMSA0Mi45MDYyIDE4LjM5ODQgNDIuMzc1IDE4LjM5ODRaTTQzLjQ1MzEgMjQuNzk2OUM0Mi45MDYyIDI0Ljc5NjkgNDIuNDM3NSAyNC42MDE2IDQyLjA0NjkgMjQuMjEwOUM0MS42NTYyIDIzLjgyMDMgNDEuNDYwOSAyMy4zNDM4IDQxLjQ2MDkgMjIuNzgxMkM0MS40NjA5IDIyLjIzNDQgNDEuNjU2MiAyMS43NjU2IDQyLjA0NjkgMjEuMzc1QzQyLjQzNzUgMjAuOTg0NCA0Mi45MDYyIDIwLjc4OTEgNDMuNDUzMSAyMC43ODkxQzQ0IDIwLjc4OTEgNDQuNDY4OCAyMC45ODQ0IDQ0Ljg1OTQgMjEuMzc1QzQ1LjI2NTYgMjEuNzY1NiA0NS40Njg4IDIyLjIzNDQgNDUuNDY4OCAyMi43ODEyQzQ1LjQ2ODggMjMuMzQzOCA0NS4yNjU2IDIzLjgyMDMgNDQuODU5NCAyNC4yMTA5QzQ0LjQ2ODggMjQuNjAxNiA0NCAyNC43OTY5IDQzLjQ1MzEgMjQuNzk2OVpNNDIuMzc1IDMxLjE3MTlDNDEuODEyNSAzMS4xNzE5IDQxLjMyODEgMzAuOTc2NiA0MC45MjE5IDMwLjU4NTlDNDAuNTMxMiAzMC4xOTUzIDQwLjMzNTkgMjkuNzI2NiA0MC4zMzU5IDI5LjE3OTdDNDAuMzM1OSAyOC42MTcyIDQwLjUzMTIgMjguMTQwNiA0MC45MjE5IDI3Ljc1QzQxLjMyODEgMjcuMzU5NCA0MS44MTI1IDI3LjE2NDEgNDIuMzc1IDI3LjE2NDFDNDIuOTA2MiAyNy4xNjQxIDQzLjM2NzIgMjcuMzU5NCA0My43NTc4IDI3Ljc1QzQ0LjE2NDEgMjguMTQwNiA0NC4zNjcyIDI4LjYxNzIgNDQuMzY3MiAyOS4xNzk3QzQ0LjM2NzIgMjkuNzI2NiA0NC4xNjQxIDMwLjE5NTMgNDMuNzU3OCAzMC41ODU5QzQzLjM2NzIgMzAuOTc2NiA0Mi45MDYyIDMxLjE3MTkgNDIuMzc1IDMxLjE3MTlaTTM5LjQ0NTMgMzYuODkwNkMzOC44OTg0IDM2Ljg5MDYgMzguNDIxOSAzNi42OTUzIDM4LjAxNTYgMzYuMzA0N0MzNy42MjUgMzUuODk4NCAzNy40Mjk3IDM1LjQyMTkgMzcuNDI5NyAzNC44NzVDMzcuNDI5NyAzNC4zMjgxIDM3LjYyNSAzMy44NTk0IDM4LjAxNTYgMzMuNDY4OEMzOC40MjE5IDMzLjA2MjUgMzguODk4NCAzMi44NTk0IDM5LjQ0NTMgMzIuODU5NEMzOS45OTIyIDMyLjg1OTQgNDAuNDYwOSAzMy4wNjI1IDQwLjg1MTYgMzMuNDY4OEM0MS4yNDIyIDMzLjg1OTQgNDEuNDM3NSAzNC4zMjgxIDQxLjQzNzUgMzQuODc1QzQxLjQzNzUgMzUuNDIxOSA0MS4yNDIyIDM1Ljg5ODQgNDAuODUxNiAzNi4zMDQ3QzQwLjQ2MDkgMzYuNjk1MyAzOS45OTIyIDM2Ljg5MDYgMzkuNDQ1MyAzNi44OTA2Wk0zNC44NzUgNDEuNDM3NUMzNC4zMjgxIDQxLjQzNzUgMzMuODUxNiA0MS4yNDIyIDMzLjQ0NTMgNDAuODUxNkMzMy4wNTQ3IDQwLjQ2MDkgMzIuODU5NCAzOS45OTIyIDMyLjg1OTQgMzkuNDQ1M0MzMi44NTk0IDM4Ljg5ODQgMzMuMDU0NyAzOC40Mjk3IDMzLjQ0NTMgMzguMDM5MUMzMy44NTE2IDM3LjYzMjggMzQuMzI4MSAzNy40Mjk3IDM0Ljg3NSAzNy40Mjk3QzM1LjQyMTkgMzcuNDI5NyAzNS44OTA2IDM3LjYzMjggMzYuMjgxMiAzOC4wMzkxQzM2LjY4NzUgMzguNDI5NyAzNi44OTA2IDM4Ljg5ODQgMzYuODkwNiAzOS40NDUzQzM2Ljg5MDYgMzkuOTkyMiAzNi42ODc1IDQwLjQ2MDkgMzYuMjgxMiA0MC44NTE2QzM1Ljg5MDYgNDEuMjQyMiAzNS40MjE5IDQxLjQzNzUgMzQuODc1IDQxLjQzNzVaTTI5LjEwOTQgNDQuMzY3MkMyOC41NDY5IDQ0LjM2NzIgMjguMDcwMyA0NC4xNjQxIDI3LjY3OTcgNDMuNzU3OEMyNy4yODkxIDQzLjM2NzIgMjcuMDkzOCA0Mi44OTg0IDI3LjA5MzggNDIuMzUxNkMyNy4wOTM4IDQxLjgwNDcgMjcuMjg5MSA0MS4zMzU5IDI3LjY3OTcgNDAuOTQ1M0MyOC4wNzAzIDQwLjU1NDcgMjguNTQ2OSA0MC4zNTk0IDI5LjEwOTQgNDAuMzU5NEMyOS42NTYyIDQwLjM1OTQgMzAuMTI1IDQwLjU1NDcgMzAuNTE1NiA0MC45NDUzQzMwLjkwNjIgNDEuMzM1OSAzMS4xMDE2IDQxLjgwNDcgMzEuMTAxNiA0Mi4zNTE2QzMxLjEwMTYgNDIuODk4NCAzMC45MDYyIDQzLjM2NzIgMzAuNTE1NiA0My43NTc4QzMwLjEyNSA0NC4xNjQxIDI5LjY1NjIgNDQuMzY3MiAyOS4xMDk0IDQ0LjM2NzJaTTIyLjczNDQgNDUuMzk4NEMyMi4xODc1IDQ1LjM5ODQgMjEuNzE4OCA0NS4yMDMxIDIxLjMyODEgNDQuODEyNUMyMC45Mzc1IDQ0LjQyMTkgMjAuNzQyMiA0My45NTMxIDIwLjc0MjIgNDMuNDA2MkMyMC43NDIyIDQyLjg0MzggMjAuOTM3NSA0Mi4zNjcyIDIxLjMyODEgNDEuOTc2NkMyMS43MTg4IDQxLjU4NTkgMjIuMTg3NSA0MS4zOTA2IDIyLjczNDQgNDEuMzkwNkMyMy4yODEyIDQxLjM5MDYgMjMuNzUgNDEuNTg1OSAyNC4xNDA2IDQxLjk3NjZDMjQuNTMxMiA0Mi4zNjcyIDI0LjcyNjYgNDIuODQzOCAyNC43MjY2IDQzLjQwNjJDMjQuNzI2NiA0My45NTMxIDI0LjUzMTIgNDQuNDIxOSAyNC4xNDA2IDQ0LjgxMjVDMjMuNzUgNDUuMjAzMSAyMy4yODEyIDQ1LjM5ODQgMjIuNzM0NCA0NS4zOTg0Wk0xNi4zNTk0IDQ0LjM2NzJDMTUuODEyNSA0NC4zNjcyIDE1LjM0MzggNDQuMTY0MSAxNC45NTMxIDQzLjc1NzhDMTQuNTYyNSA0My4zNjcyIDE0LjM2NzIgNDIuODk4NCAxNC4zNjcyIDQyLjM1MTZDMTQuMzY3MiA0MS44MDQ3IDE0LjU2MjUgNDEuMzM1OSAxNC45NTMxIDQwLjk0NTNDMTUuMzQzOCA0MC41NTQ3IDE1LjgxMjUgNDAuMzU5NCAxNi4zNTk0IDQwLjM1OTRDMTYuOTIxOSA0MC4zNTk0IDE3LjM5ODQgNDAuNTU0NyAxNy43ODkxIDQwLjk0NTNDMTguMTc5NyA0MS4zMzU5IDE4LjM3NSA0MS44MDQ3IDE4LjM3NSA0Mi4zNTE2QzE4LjM3NSA0Mi44OTg0IDE4LjE3OTcgNDMuMzY3MiAxNy43ODkxIDQzLjc1NzhDMTcuMzk4NCA0NC4xNjQxIDE2LjkyMTkgNDQuMzY3MiAxNi4zNTk0IDQ0LjM2NzJaTTEwLjU3MDMgNDEuNDM3NUMxMC4wMzkxIDQxLjQzNzUgOS41NzAzMSA0MS4yNDIyIDkuMTY0MDYgNDAuODUxNkM4Ljc3MzQ0IDQwLjQ2MDkgOC41NzgxMiAzOS45OTIyIDguNTc4MTIgMzkuNDQ1M0M4LjU3ODEyIDM4Ljg5ODQgOC43NzM0NCAzOC40Mjk3IDkuMTY0MDYgMzguMDM5MUM5LjU3MDMxIDM3LjYzMjggMTAuMDM5MSAzNy40Mjk3IDEwLjU3MDMgMzcuNDI5N0MxMS4xMzI4IDM3LjQyOTcgMTEuNjA5NCAzNy42MzI4IDEyIDM4LjAzOTFDMTIuMzkwNiAzOC40Mjk3IDEyLjU4NTkgMzguODk4NCAxMi41ODU5IDM5LjQ0NTNDMTIuNTg1OSAzOS45OTIyIDEyLjM5MDYgNDAuNDYwOSAxMiA0MC44NTE2QzExLjYwOTQgNDEuMjQyMiAxMS4xMzI4IDQxLjQzNzUgMTAuNTcwMyA0MS40Mzc1Wk02LjAyMzQ0IDM2Ljg5MDZDNS40NzY1NiAzNi44OTA2IDUgMzYuNjk1MyA0LjU5Mzc1IDM2LjMwNDdDNC4yMDMxMiAzNS44OTg0IDQuMDA3ODEgMzUuNDIxOSA0LjAwNzgxIDM0Ljg3NUM0LjAwNzgxIDM0LjMyODEgNC4yMDMxMiAzMy44NTk0IDQuNTkzNzUgMzMuNDY4OEM1IDMzLjA2MjUgNS40NzY1NiAzMi44NTk0IDYuMDIzNDQgMzIuODU5NEM2LjU3MDMxIDMyLjg1OTQgNy4wMzkwNiAzMy4wNjI1IDcuNDI5NjkgMzMuNDY4OEM3LjgyMDMxIDMzLjg1OTQgOC4wMTU2MiAzNC4zMjgxIDguMDE1NjIgMzQuODc1QzguMDE1NjIgMzUuNDIxOSA3LjgyMDMxIDM1Ljg5ODQgNy40Mjk2OSAzNi4zMDQ3QzcuMDM5MDYgMzYuNjk1MyA2LjU3MDMxIDM2Ljg5MDYgNi4wMjM0NCAzNi44OTA2Wk0zLjA5Mzc1IDMxLjE3MTlDMi41NjI1IDMxLjE3MTkgMi4wOTM3NSAzMC45NzY2IDEuNjg3NSAzMC41ODU5QzEuMjk2ODggMzAuMTk1MyAxLjEwMTU2IDI5LjcyNjYgMS4xMDE1NiAyOS4xNzk3QzEuMTAxNTYgMjguNjE3MiAxLjI5Njg4IDI4LjE0MDYgMS42ODc1IDI3Ljc1QzIuMDkzNzUgMjcuMzU5NCAyLjU2MjUgMjcuMTY0MSAzLjA5Mzc1IDI3LjE2NDFDMy42NTYyNSAyNy4xNjQxIDQuMTMyODEgMjcuMzU5NCA0LjUyMzQ0IDI3Ljc1QzQuOTE0MDYgMjguMTQwNiA1LjEwOTM4IDI4LjYxNzIgNS4xMDkzOCAyOS4xNzk3QzUuMTA5MzggMjkuNzI2NiA0LjkxNDA2IDMwLjE5NTMgNC41MjM0NCAzMC41ODU5QzQuMTMyODEgMzAuOTc2NiAzLjY1NjI1IDMxLjE3MTkgMy4wOTM3NSAzMS4xNzE5Wk0yLjAxNTYyIDI0Ljc5NjlDMS40NTMxMiAyNC43OTY5IDAuOTc2NTYyIDI0LjYwMTYgMC41ODU5MzggMjQuMjEwOUMwLjE5NTMxMiAyMy44MjAzIDAgMjMuMzQzOCAwIDIyLjc4MTJDMCAyMi4yMzQ0IDAuMTk1MzEyIDIxLjc2NTYgMC41ODU5MzggMjEuMzc1QzAuOTc2NTYyIDIwLjk4NDQgMS40NTMxMiAyMC43ODkxIDIuMDE1NjIgMjAuNzg5MUMyLjU2MjUgMjAuNzg5MSAzLjAzMTI1IDIwLjk4NDQgMy40MjE4OCAyMS4zNzVDMy44MTI1IDIxLjc2NTYgNC4wMDc4MSAyMi4yMzQ0IDQuMDA3ODEgMjIuNzgxMkM0LjAwNzgxIDIzLjM0MzggMy44MTI1IDIzLjgyMDMgMy40MjE4OCAyNC4yMTA5QzMuMDMxMjUgMjQuNjAxNiAyLjU2MjUgMjQuNzk2OSAyLjAxNTYyIDI0Ljc5NjlaTTMuMDkzNzUgMTguMzk4NEMyLjU2MjUgMTguMzk4NCAyLjA5Mzc1IDE4LjIwMzEgMS42ODc1IDE3LjgxMjVDMS4yOTY4OCAxNy40MjE5IDEuMTAxNTYgMTYuOTUzMSAxLjEwMTU2IDE2LjQwNjJDMS4xMDE1NiAxNS44NDM4IDEuMjk2ODggMTUuMzY3MiAxLjY4NzUgMTQuOTc2NkMyLjA5Mzc1IDE0LjU4NTkgMi41NjI1IDE0LjM5MDYgMy4wOTM3NSAxNC4zOTA2QzMuNjU2MjUgMTQuMzkwNiA0LjEzMjgxIDE0LjU4NTkgNC41MjM0NCAxNC45NzY2QzQuOTE0MDYgMTUuMzY3MiA1LjEwOTM4IDE1Ljg0MzggNS4xMDkzOCAxNi40MDYyQzUuMTA5MzggMTYuOTUzMSA0LjkxNDA2IDE3LjQyMTkgNC41MjM0NCAxNy44MTI1QzQuMTMyODEgMTguMjAzMSAzLjY1NjI1IDE4LjM5ODQgMy4wOTM3NSAxOC4zOTg0Wk02LjAyMzQ0IDEyLjY3OTdDNS40NzY1NiAxMi42Nzk3IDUgMTIuNDg0NCA0LjU5Mzc1IDEyLjA5MzhDNC4yMDMxMiAxMS43MDMxIDQuMDA3ODEgMTEuMjM0NCA0LjAwNzgxIDEwLjY4NzVDNC4wMDc4MSAxMC4xNTYyIDQuMjAzMTIgOS42OTUzMSA0LjU5Mzc1IDkuMzA0NjlDNSA4Ljg5ODQ0IDUuNDc2NTYgOC42OTUzMSA2LjAyMzQ0IDguNjk1MzFDNi41NzAzMSA4LjY5NTMxIDcuMDM5MDYgOC44OTg0NCA3LjQyOTY5IDkuMzA0NjlDNy44MjAzMSA5LjY5NTMxIDguMDE1NjIgMTAuMTU2MiA4LjAxNTYyIDEwLjY4NzVDOC4wMTU2MiAxMS4yMzQ0IDcuODIwMzEgMTEuNzAzMSA3LjQyOTY5IDEyLjA5MzhDNy4wMzkwNiAxMi40ODQ0IDYuNTcwMzEgMTIuNjc5NyA2LjAyMzQ0IDEyLjY3OTdaTTEwLjU3MDMgOC4xMzI4MUMxMC4wMzkxIDguMTMyODEgOS41NzAzMSA3LjkzNzUgOS4xNjQwNiA3LjU0Njg4QzguNzczNDQgNy4xNDA2MiA4LjU3ODEyIDYuNjcxODggOC41NzgxMiA2LjE0MDYyQzguNTc4MTIgNS41NzgxMiA4Ljc3MzQ0IDUuMTAxNTYgOS4xNjQwNiA0LjcxMDk0QzkuNTcwMzEgNC4zMjAzMSAxMC4wMzkxIDQuMTI1IDEwLjU3MDMgNC4xMjVDMTEuMTMyOCA0LjEyNSAxMS42MDk0IDQuMzIwMzEgMTIgNC43MTA5NEMxMi4zOTA2IDUuMTAxNTYgMTIuNTg1OSA1LjU3ODEyIDEyLjU4NTkgNi4xNDA2MkMxMi41ODU5IDYuNjcxODggMTIuMzkwNiA3LjE0MDYyIDEyIDcuNTQ2ODhDMTEuNjA5NCA3LjkzNzUgMTEuMTMyOCA4LjEzMjgxIDEwLjU3MDMgOC4xMzI4MVpNMTYuMzU5NCA1LjIwMzEyQzE1LjgxMjUgNS4yMDMxMiAxNS4zNDM4IDUuMDA3ODEgMTQuOTUzMSA0LjYxNzE5QzE0LjU2MjUgNC4yMjY1NiAxNC4zNjcyIDMuNzU3ODEgMTQuMzY3MiAzLjIxMDk0QzE0LjM2NzIgMi42NjQwNiAxNC41NjI1IDIuMTk1MzEgMTQuOTUzMSAxLjgwNDY5QzE1LjM0MzggMS4zOTg0NCAxNS44MTI1IDEuMTk1MzEgMTYuMzU5NCAxLjE5NTMxQzE2LjkyMTkgMS4xOTUzMSAxNy4zOTg0IDEuMzk4NDQgMTcuNzg5MSAxLjgwNDY5QzE4LjE3OTcgMi4xOTUzMSAxOC4zNzUgMi42NjQwNiAxOC4zNzUgMy4yMTA5NEMxOC4zNzUgMy43NTc4MSAxOC4xNzk3IDQuMjI2NTYgMTcuNzg5MSA0LjYxNzE5QzE3LjM5ODQgNS4wMDc4MSAxNi45MjE5IDUuMjAzMTIgMTYuMzU5NCA1LjIwMzEyWk00MC4xMDE2IDQ1LjU2MjVDMzYuOTQ1MyA0NS41NjI1IDMzLjk5MjIgNDQuOTY4OCAzMS4yNDIyIDQzLjc4MTJDMjguNTA3OCA0Mi42MDk0IDI2LjA5MzggNDAuOTc2NiAyNCAzOC44ODI4QzIxLjkwNjIgMzYuNzg5MSAyMC4yNjU2IDM0LjM2NzIgMTkuMDc4MSAzMS42MTcyQzE3LjkwNjIgMjguODY3MiAxNy4zMjAzIDI1LjkyMTkgMTcuMzIwMyAyMi43ODEyQzE3LjMyMDMgMTkuNjQwNiAxNy45MDYyIDE2LjY5NTMgMTkuMDc4MSAxMy45NDUzQzIwLjI2NTYgMTEuMTc5NyAyMS45MDYyIDguNzU3ODEgMjQgNi42Nzk2OUMyNi4wOTM4IDQuNTg1OTQgMjguNTA3OCAyLjk1MzEyIDMxLjI0MjIgMS43ODEyNUMzMy45OTIyIDAuNTkzNzUgMzYuOTQ1MyAwIDQwLjEwMTYgMEM0My4yNDIyIDAgNDYuMTg3NSAwLjU5Mzc1IDQ4LjkzNzUgMS43ODEyNUM1MS42ODc1IDIuOTUzMTIgNTQuMTAxNiA0LjU4NTk0IDU2LjE3OTcgNi42Nzk2OUM1OC4yNzM0IDguNzU3ODEgNTkuOTA2MiAxMS4xNzk3IDYxLjA3ODEgMTMuOTQ1M0M2Mi4yNjU2IDE2LjY5NTMgNjIuODU5NCAxOS42NDA2IDYyLjg1OTQgMjIuNzgxMkM2Mi44NTk0IDI1LjkyMTkgNjIuMjY1NiAyOC44NjcyIDYxLjA3ODEgMzEuNjE3MkM1OS45MDYyIDM0LjM2NzIgNTguMjczNCAzNi43ODkxIDU2LjE3OTcgMzguODgyOEM1NC4xMDE2IDQwLjk3NjYgNTEuNjg3NSA0Mi42MDk0IDQ4LjkzNzUgNDMuNzgxMkM0Ni4xODc1IDQ0Ljk2ODggNDMuMjQyMiA0NS41NjI1IDQwLjEwMTYgNDUuNTYyNVpNNDAuMTAxNiA0MS4zOTA2QzQyLjY2NDEgNDEuMzkwNiA0NS4wNzAzIDQwLjkwNjIgNDcuMzIwMyAzOS45Mzc1QzQ5LjU3MDMgMzguOTY4OCA1MS41NDY5IDM3LjYzMjggNTMuMjUgMzUuOTI5N0M1NC45Njg4IDM0LjIyNjYgNTYuMzA0NyAzMi4yNTc4IDU3LjI1NzggMzAuMDIzNEM1OC4yMTA5IDI3Ljc3MzQgNTguNjg3NSAyNS4zNTk0IDU4LjY4NzUgMjIuNzgxMkM1OC42ODc1IDIwLjIwMzEgNTguMjEwOSAxNy43OTY5IDU3LjI1NzggMTUuNTYyNUM1Ni4zMDQ3IDEzLjMxMjUgNTQuOTY4OCAxMS4zMzU5IDUzLjI1IDkuNjMyODFDNTEuNTQ2OSA3LjkyOTY5IDQ5LjU3MDMgNi41OTM3NSA0Ny4zMjAzIDUuNjI1QzQ1LjA3MDMgNC42NTYyNSA0Mi42NjQxIDQuMTcxODggNDAuMTAxNiA0LjE3MTg4QzM3LjUyMzQgNC4xNzE4OCAzNS4xMDk0IDQuNjU2MjUgMzIuODU5NCA1LjYyNUMzMC42MjUgNi41OTM3NSAyOC42NDg0IDcuOTI5NjkgMjYuOTI5NyA5LjYzMjgxQzI1LjIyNjYgMTEuMzM1OSAyMy44OTA2IDEzLjMxMjUgMjIuOTIxOSAxNS41NjI1QzIxLjk2ODggMTcuNzk2OSAyMS40OTIyIDIwLjIwMzEgMjEuNDkyMiAyMi43ODEyQzIxLjQ5MjIgMjUuMzU5NCAyMS45Njg4IDI3Ljc3MzQgMjIuOTIxOSAzMC4wMjM0QzIzLjg5MDYgMzIuMjU3OCAyNS4yMjY2IDM0LjIyNjYgMjYuOTI5NyAzNS45Mjk3QzI4LjY0ODQgMzcuNjMyOCAzMC42MjUgMzguOTY4OCAzMi44NTk0IDM5LjkzNzVDMzUuMTA5NCA0MC45MDYyIDM3LjUyMzQgNDEuMzkwNiA0MC4xMDE2IDQxLjM5MDZaIn0pfSksdm9pY2VvdmVyOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoibTExIDcuNjAxLTUuOTk0IDguMTlhMSAxIDAgMCAwIC4xIDEuMjk4bC44MTcuODE4YTEgMSAwIDAgMCAxLjMxNC4wODdMMTUuMDkgMTIifSksWigicGF0aCIse2Q6Ik0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUifSksWigiY2lyY2xlIix7Y3g6IjE2IixjeToiNyIscjoiNSJ9KV19KX07ZnVuY3Rpb24ga1ooJCl7aWYoISQpcmV0dXJuITA7cmV0dXJuIGc1KCQpLm9zLnRvTG93ZXJDYXNlKCk9PT0iaW9zIn1mdW5jdGlvbiB2NCh7dWRpZDokLHJ1bnRpbWU6Sn0pe2xldFtRLFhdPWsoITApLFtLLFldPWsobnVsbCksW3EsR109ayhudWxsKSxbQixOXT1rKG51bGwpLHo9a1ooSiksVj1FKGFzeW5jKCk9PntOKG51bGwpO3RyeXtsZXQgUD1hd2FpdCByMyh7ZGV2aWNlOiR9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KTtpZihQKVkoUCk7ZWxzZSBOKCJVbmV4cGVjdGVkIHNpbXVsYXRvci1zZXR0aW5ncyByZXBseSIpfWNhdGNoKFApe04oUCBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmUC5uYW1lPT09IlRpbWVvdXRFcnJvciI/IlRpbWVkIG91dCByZWFkaW5nIHNpbXVsYXRvciBzZXR0aW5ncyI6UCBpbnN0YW5jZW9mIEVycm9yJiZQLm1lc3NhZ2UhPT0iRmFpbGVkIHRvIGZldGNoIj9QLm1lc3NhZ2U6IkNvdWxkIG5vdCByZWFjaCB0aGUgcHJldmlldyBzZXJ2ZXIg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIil9fSxbJF0pO3koKCk9PntpZihZKG51bGwpLCF6KXJldHVybjtWKCl9LFtWLHpdKTtsZXQgSD1FKGFzeW5jKFAseCk9PntHKFApLE4obnVsbCksWSgoRCk9PkQ/ey4uLkQsW1BdOnh9OkQpO3RyeXthd2FpdCByMyh7ZGV2aWNlOiQsb3B0aW9uOlAsdmFsdWU6eH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pfWNhdGNoKEQpe04oRCBpbnN0YW5jZW9mIEVycm9yP0QubWVzc2FnZTpgRmFpbGVkIHRvIHNldCAke1B9YCksVigpfWZpbmFsbHl7RyhudWxsKX19LFskLFZdKSxDPVQoe3J1bm5pbmc6ITEsbmV4dDpudWxsfSksQT1UKEgpO0EuY3VycmVudD1IO2xldCBMPUUoKFApPT57bGV0IHg9Qy5jdXJyZW50O2lmKHgubmV4dD1QLHgucnVubmluZylyZXR1cm47eC5ydW5uaW5nPSEwLChhc3luYygpPT57d2hpbGUoeC5uZXh0IT09bnVsbCl7bGV0IEQ9eC5uZXh0O3gubmV4dD1udWxsLGF3YWl0IEEuY3VycmVudCgidGV4dC1zaXplIixKNVtEXSl9eC5ydW5uaW5nPSExfSkoKX0sW10pLFU9SyE9PW51bGwsRj1LPz9GWixXPUo1LmluZGV4T2YoRlsidGV4dC1zaXplIl0pLHc9Vz49MD9XOkZbInRleHQtc2l6ZSJdPy5zdGFydHNXaXRoKCJhY2Nlc3NpYmlsaXR5Iik/SjUubGVuZ3RoLTE6MztyZXR1cm4gWihzMSx7b3BlbjpRLG9uT3BlbkNoYW5nZTpYLCJkYXRhLXNpbXVsYXRvci1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WihKMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlNpbXVsYXRvciJ9KSxaKCJzcGFuIix7fSldfSksY2hpbGRyZW46IXo/WigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQ1IHRleHQtWzExcHhdIHB4LTAuNSBweS0xIixjaGlsZHJlbjoiU2ltdWxhdG9yIHNldHRpbmdzIGFyZSBhdmFpbGFibGUgb24gaU9TIHNpbXVsYXRvcnMgb25seS4ifSk6WihKMSx7Y2hpbGRyZW46W0ImJlooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpCfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT52b2lkIFYoKSxjbGFzc05hbWU6InNocmluay0wIGN1cnNvci1wb2ludGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1kYW5nZXIvMzAgYmctdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMXB4XSB0ZXh0LWRhbmdlci1zb2Z0IixjaGlsZHJlbjoiUmV0cnkifSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbWihZMCx7aWNvbjokNS5hcHBlYXJhbmNlLGxhYmVsOiJBcHBlYXJhbmNlIixjaGlsZHJlbjpaKE0wLHtsYWJlbDoiQXBwZWFyYW5jZSIsdmFsdWU6Ri5hcHBlYXJhbmNlPz8ibGlnaHQiLG9wdGlvbnM6TzguYXBwZWFyYW5jZSxkaXNhYmxlZDohVXx8cT09PSJhcHBlYXJhbmNlIixvbkNoYW5nZTooUCk9PkgoImFwcGVhcmFuY2UiLFApfSl9KSxaKFkwLHtpY29uOiQ1LmdsYXNzLGxhYmVsOiJMaXF1aWQgR2xhc3MiLGNoaWxkcmVuOlooTTAse2xhYmVsOiJMaXF1aWQgR2xhc3MiLHZhbHVlOkZbImxpcXVpZC1nbGFzcyJdPz8iY2xlYXIiLG9wdGlvbnM6TzhbImxpcXVpZC1nbGFzcyJdLGRpc2FibGVkOiFVfHxxPT09ImxpcXVpZC1nbGFzcyIsb25DaGFuZ2U6KFApPT5IKCJsaXF1aWQtZ2xhc3MiLFApfSl9KSxaKFkwLHtpY29uOiQ1LmZpbHRlcixsYWJlbDoiQ29sb3IgRmlsdGVyIixjaGlsZHJlbjpaKE0wLHtsYWJlbDoiQ29sb3IgRmlsdGVyIix2YWx1ZTpGWyJjb2xvci1maWx0ZXIiXT8/Im5vbmUiLG9wdGlvbnM6TzhbImNvbG9yLWZpbHRlciJdLGRpc2FibGVkOiFVfHxxPT09ImNvbG9yLWZpbHRlciIsb25DaGFuZ2U6KFApPT5IKCJjb2xvci1maWx0ZXIiLFApfSl9KSxaKFkwLHtpY29uOiQ1LnRleHRTaXplLGxhYmVsOiJUZXh0IFNpemUiLGNoaWxkcmVuOlooTVose3ZhbHVlOncsZGlzYWJsZWQ6IVUsb25DaGFuZ2U6TH0pfSksQVoubWFwKCh7a2V5OlAsbGFiZWw6eH0pPT5aKFkwLHtpY29uOiQ1W1A9PT0icmVkdWNlLW1vdGlvbiI/Im1vdGlvbiI6UD09PSJpbmNyZWFzZS1jb250cmFzdCI/ImNvbnRyYXN0IjpQPT09InNob3ctYm9yZGVycyI/ImJvcmRlcnMiOlA9PT0icmVkdWNlLXRyYW5zcGFyZW5jeSI/InRyYW5zcGFyZW5jeSI6InZvaWNlb3ZlciJdLGxhYmVsOngsY2hpbGRyZW46WihhNSx7bGFiZWw6eCxjaGVja2VkOkZbUF09PT0ib24iLGRpc2FibGVkOiFVfHxxPT09UCxvbkNoYW5nZTooRCk9PkgoUCxEPyJvbiI6Im9mZiIpfSl9LFApKV19KV19KX0pfWZ1bmN0aW9uIFI0KCQsSil7cmV0dXJuICQuZmluZCgoUSk9PlEuc2Vzc2lvbklkPT09Sik/P251bGx9ZnVuY3Rpb24gJDMoJCxKKXtsZXQgUT0hMSxYPSExLEs9YXN5bmMoKT0+e2lmKFh8fFEpcmV0dXJuO1E9ITA7dHJ5e2F3YWl0ICQoKX1jYXRjaHt9ZmluYWxseXtRPSExfX07SygpO2xldCBZPXNldEludGVydmFsKCgpPT52b2lkIEsoKSxKKTtyZXR1cm4oKT0+e1g9ITAsY2xlYXJJbnRlcnZhbChZKX19dmFyIGg0PTEwMDAsV1o9NDAwMDtmdW5jdGlvbiBnNCgkLEosUSl7bGV0W1gsS109ayh7c2Vzc2lvbjpudWxsLGNhcHR1cmU6bnVsbCxzdGFsZTohMX0pLFk9VCgwKTtyZXR1cm4geSgoKT0+e2lmKFkuY3VycmVudD0wLEsoe3Nlc3Npb246bnVsbCxjYXB0dXJlOm51bGwsc3RhbGU6ITF9KSwhUXx8Sj09PW51bGwpcmV0dXJuO2xldCBxPSExLEc9WDYoJCxKKSxOPSQzKGFzeW5jKCk9PntsZXQgVj1udWxsO3RyeXtsZXQgQz1hd2FpdCBmZXRjaChHLHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dChoNCozKX0pO2lmKCFDLm9rKXtpZighcSlLKHtzZXNzaW9uOm51bGwsY2FwdHVyZTpudWxsLHN0YWxlOiExfSk7cmV0dXJufVY9YXdhaXQgQy5qc29uKCl9Y2F0Y2h7cmV0dXJufWlmKHF8fFY9PT1udWxsKXJldHVybjtsZXQgSD1BcnJheS5pc0FycmF5KFYuc2Vzc2lvbnMpP1Yuc2Vzc2lvbnM6W107WS5jdXJyZW50PURhdGUubm93KCksSyh7c2Vzc2lvbjpSNChILEopLGNhcHR1cmU6Vi5jYXB0dXJlPz9udWxsLHN0YWxlOiExfSl9LGg0KSx6PXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e2lmKFkuY3VycmVudD4wJiZEYXRlLm5vdygpLVkuY3VycmVudD5XWilLKChWKT0+Vi5zdGFsZT9WOnsuLi5WLHN0YWxlOiEwfSl9LDEwMDApO3JldHVybigpPT57cT0hMCxOKCksd2luZG93LmNsZWFySW50ZXJ2YWwoeil9fSxbJCxKLFFdKSxYfWZ1bmN0aW9uIFcyKCQpe3JldHVybiB2MCgkKT8/MH1mdW5jdGlvbiB2MCgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ibnVtYmVyIiYmTnVtYmVyLmlzRmluaXRlKCQpPyQ6bnVsbH1mdW5jdGlvbiBmNCgkLEope2xldCBRPXthdE1zOkosZnJhbWVzRGVjb2RlZDowLGZyYW1lc0Ryb3BwZWQ6MCxmcmVlemVDb3VudDowLGZyZWV6ZU1zOjAsYnl0ZXNSZWNlaXZlZDowLHBhY2tldHNSZWNlaXZlZDowLHBhY2tldHNMb3N0Om51bGwsaml0dGVyTXM6bnVsbCxqaXR0ZXJCdWZmZXJTZWNvbmRzOm51bGwsaml0dGVyQnVmZmVyRW1pdHRlZDpudWxsLHJlcG9ydGVkRnBzOm51bGwsd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxjb2RlYzpudWxsLHJvdW5kVHJpcE1zOm51bGwscGF0aDoidW5rbm93biJ9LFg9bmV3IE1hcCxLPW5ldyBNYXAsWT1uZXcgTWFwLHE9bnVsbCxHPW51bGwsQj1udWxsOyQuZm9yRWFjaCgoeik9Pntzd2l0Y2goei50eXBlKXtjYXNlImNvZGVjIjppZih0eXBlb2Ygei5pZD09PSJzdHJpbmciJiZ0eXBlb2Ygei5taW1lVHlwZT09PSJzdHJpbmciKVguc2V0KHouaWQsei5taW1lVHlwZSk7YnJlYWs7Y2FzZSJpbmJvdW5kLXJ0cCI6e2lmKHoua2luZCE9PSJ2aWRlbyIpYnJlYWs7bGV0IFY9VzIoei5mcmFtZXNEZWNvZGVkKTtpZihWPFEuZnJhbWVzRGVjb2RlZClicmVhaztRLmZyYW1lc0RlY29kZWQ9VixRLmZyYW1lc0Ryb3BwZWQ9VzIoei5mcmFtZXNEcm9wcGVkKSxRLmZyZWV6ZUNvdW50PVcyKHouZnJlZXplQ291bnQpLFEuZnJlZXplTXM9VzIoei50b3RhbEZyZWV6ZXNEdXJhdGlvbikqMTAwMCxRLmJ5dGVzUmVjZWl2ZWQ9VzIoei5ieXRlc1JlY2VpdmVkKSxRLnBhY2tldHNSZWNlaXZlZD1XMih6LnBhY2tldHNSZWNlaXZlZCksUS5wYWNrZXRzTG9zdD12MCh6LnBhY2tldHNMb3N0KSxRLnJlcG9ydGVkRnBzPXYwKHouZnJhbWVzUGVyU2Vjb25kKSxRLndpZHRoPXYwKHouZnJhbWVXaWR0aCksUS5oZWlnaHQ9djAoei5mcmFtZUhlaWdodCk7bGV0IEg9djAoei5qaXR0ZXIpO2lmKFEuaml0dGVyTXM9SD09PW51bGw/bnVsbDpIKjEwMDAsUS5qaXR0ZXJCdWZmZXJTZWNvbmRzPXYwKHouaml0dGVyQnVmZmVyRGVsYXkpLFEuaml0dGVyQnVmZmVyRW1pdHRlZD12MCh6LmppdHRlckJ1ZmZlckVtaXR0ZWRDb3VudCksdHlwZW9mIHouY29kZWNJZD09PSJzdHJpbmciKVEuY29kZWM9WC5nZXQoei5jb2RlY0lkKT8/bnVsbDticmVha31jYXNlInRyYW5zcG9ydCI6aWYodHlwZW9mIHouc2VsZWN0ZWRDYW5kaWRhdGVQYWlySWQ9PT0ic3RyaW5nIilxPXouc2VsZWN0ZWRDYW5kaWRhdGVQYWlySWQ7YnJlYWs7Y2FzZSJjYW5kaWRhdGUtcGFpciI6aWYodHlwZW9mIHouaWQ9PT0ic3RyaW5nIilLLnNldCh6LmlkLHopO2lmKHouc2VsZWN0ZWQ9PT0hMClHPXo7ZWxzZSBpZih6Lm5vbWluYXRlZD09PSEwJiZ6LnN0YXRlPT09InN1Y2NlZWRlZCIpRz8/PXo7ZWxzZSBpZih6LnN0YXRlPT09InN1Y2NlZWRlZCIpQj8/PXo7YnJlYWs7Y2FzZSJsb2NhbC1jYW5kaWRhdGUiOmNhc2UicmVtb3RlLWNhbmRpZGF0ZSI6aWYodHlwZW9mIHouaWQ9PT0ic3RyaW5nIilZLnNldCh6LmlkLHopO2JyZWFrfX0pO2xldCBOPShxPT09bnVsbD92b2lkIDA6Sy5nZXQocSkpPz9HPz9CO2lmKE4pe2xldCB6PXYwKE4uY3VycmVudFJvdW5kVHJpcFRpbWUpO1Eucm91bmRUcmlwTXM9ej09PW51bGw/bnVsbDp6KjEwMDA7bGV0IFY9W04ubG9jYWxDYW5kaWRhdGVJZCxOLnJlbW90ZUNhbmRpZGF0ZUlkXS5tYXAoKEgpPT50eXBlb2YgSD09PSJzdHJpbmciP1kuZ2V0KEgpPy5jYW5kaWRhdGVUeXBlOnZvaWQgMCk7aWYoVi5ldmVyeSgoSCk9PnR5cGVvZiBIPT09InN0cmluZyIpKVEucGF0aD1WLmluY2x1ZGVzKCJyZWxheSIpPyJyZWxheSI6ImRpcmVjdCJ9aWYoUS5jb2RlYz09PW51bGwmJlguc2l6ZT09PTEpUS5jb2RlYz1bLi4uWC52YWx1ZXMoKV1bMF0/P251bGw7cmV0dXJuIFF9ZnVuY3Rpb24gbTQoJCxKKXtsZXQgUT17Li4uSixmcHM6bnVsbCxrYnBzOm51bGwsbG9zc1JhdGlvOm51bGwsZHJvcHBlZEluV2luZG93Om51bGwsZnJlZXplc0luV2luZG93Om51bGwsZnJlZXplTXNJbldpbmRvdzpudWxsLGppdHRlckJ1ZmZlck1zOm51bGx9O2lmKCQ9PT1udWxsKXJldHVybiBRO2xldCBYPUouYXRNcy0kLmF0TXM7aWYoWDwyNTApcmV0dXJuIFE7bGV0IEs9Si5mcmFtZXNEZWNvZGVkLSQuZnJhbWVzRGVjb2RlZCxZPUouYnl0ZXNSZWNlaXZlZC0kLmJ5dGVzUmVjZWl2ZWQscT1KLmZyYW1lc0Ryb3BwZWQtJC5mcmFtZXNEcm9wcGVkLEc9Si5mcmVlemVDb3VudC0kLmZyZWV6ZUNvdW50LEI9Si5mcmVlemVNcy0kLmZyZWV6ZU1zO2lmKEs8MHx8WTwwfHxxPDB8fEc8MHx8QjwwKXJldHVybiBRO2xldCBOPVgvMTAwMDtyZXR1cm57Li4uSixmcHM6Sy9OLGticHM6WSo4LzEwMDAvTixsb3NzUmF0aW86X1ooJCxKKSxkcm9wcGVkSW5XaW5kb3c6cSxmcmVlemVzSW5XaW5kb3c6RyxmcmVlemVNc0luV2luZG93OkIsaml0dGVyQnVmZmVyTXM6RFooJCxKKX19ZnVuY3Rpb24gX1ooJCxKKXtpZigkLnBhY2tldHNMb3N0PT09bnVsbHx8Si5wYWNrZXRzTG9zdD09PW51bGwpcmV0dXJuIG51bGw7bGV0IFE9Si5wYWNrZXRzTG9zdC0kLnBhY2tldHNMb3N0LFg9Si5wYWNrZXRzUmVjZWl2ZWQtJC5wYWNrZXRzUmVjZWl2ZWQ7aWYoUTwwfHxYPDApcmV0dXJuIG51bGw7bGV0IEs9WCtRO3JldHVybiBLPjA/US9LOm51bGx9ZnVuY3Rpb24gRFooJCxKKXtpZihKLmppdHRlckJ1ZmZlclNlY29uZHM9PT1udWxsfHxKLmppdHRlckJ1ZmZlckVtaXR0ZWQ9PT1udWxsKXJldHVybiBudWxsO2lmKCQuaml0dGVyQnVmZmVyU2Vjb25kcz09PW51bGx8fCQuaml0dGVyQnVmZmVyRW1pdHRlZD09PW51bGwpcmV0dXJuIG51bGw7bGV0IFE9Si5qaXR0ZXJCdWZmZXJTZWNvbmRzLSQuaml0dGVyQnVmZmVyU2Vjb25kcyxYPUouaml0dGVyQnVmZmVyRW1pdHRlZC0kLmppdHRlckJ1ZmZlckVtaXR0ZWQ7aWYoUTwwfHxYPD0wKXJldHVybiBudWxsO3JldHVybiBRL1gqMTAwMH12YXIgUFo9MTAwMCxUWj00MDAwLElaPTYwMDtmdW5jdGlvbiBwNCgkKXtsZXRbSixRXT1rKG51bGwpLFtYLEtdPWsoW10pLFtZLHFdPWsoITEpLEc9VChudWxsKSxCPVQoMCk7cmV0dXJuIHkoKCk9PntpZihHLmN1cnJlbnQ9bnVsbCxCLmN1cnJlbnQ9MCxxKCExKSwkPT09bnVsbCl7UShudWxsKSxLKFtdKTtyZXR1cm59bGV0IE49ITEsVj0kMyhhc3luYygpPT57bGV0IEM9RGF0ZS5ub3coKSxBO3RyeXtBPWF3YWl0ICQuZ2V0U3RhdHMoKX1jYXRjaHtyZXR1cm59aWYoTilyZXR1cm47bGV0IEw9ZjQoQSxDKSxVPW00KEcuY3VycmVudCxMKTtCLmN1cnJlbnQ9QyxxKCExKSxRKFUpLEsoKEYpPT5bLi4uRixVXS5zbGljZSgtSVopKSxHLmN1cnJlbnQ9TH0sUFopLEg9d2luZG93LnNldEludGVydmFsKCgpPT57aWYoQi5jdXJyZW50PjAmJkRhdGUubm93KCktQi5jdXJyZW50PlRaKXEoITApfSwxMDAwKTtyZXR1cm4oKT0+e049ITAsVigpLHdpbmRvdy5jbGVhckludGVydmFsKEgpfX0sWyRdKSx7c3RhdHM6SixoaXN0b3J5Olgsc3RhbGU6WX19dmFyIHdaPW5ldyBTZXQoWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiLCI6OjEiLCJbOjoxXSIsIjAuMC4wLjAiXSk7ZnVuY3Rpb24gSjMoJCl7bGV0IEo9JC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1wuJC8sIiIpO3JldHVybiB3Wi5oYXMoSil8fEouZW5kc1dpdGgoIi5sb2NhbGhvc3QiKX1hc3luYyBmdW5jdGlvbiBFWigkKXt0cnl7bGV0IEo9YXdhaXQgJC5qc29uKCk7aWYodHlwZW9mIEouZXJyb3I9PT0ic3RyaW5nIiYmSi5lcnJvci50cmltKCkpcmV0dXJuIEouZXJyb3IudHJpbSgpfWNhdGNoe31yZXR1cm5gU2NyZWVuc2hvdCBmYWlsZWQgKCR7JC5zdGF0dXN9KWB9YXN5bmMgZnVuY3Rpb24gdTQoJCxKPXt9KXtsZXQgUT1KLmVuZHBvaW50Pz9iMSgiYXBpL3NjcmVlbnNob3QiKSxYPVEuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iLFk9YXdhaXQoSi5mZXRjaEltcGw/P2ZldGNoKShgJHtRfSR7WH1kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YCx7bWV0aG9kOiJQT1NUIixzaWduYWw6Si5zaWduYWx9KTtpZighWS5vayl0aHJvdyBFcnJvcihhd2FpdCBFWihZKSk7aWYoWS5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik/LnNwbGl0KCI7IiwxKVswXT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpIT09ImltYWdlL3BuZyIpdGhyb3cgRXJyb3IoIlNjcmVlbnNob3QgZW5kcG9pbnQgZGlkIG5vdCByZXR1cm4gYSBQTkciKTtyZXR1cm4gWS5ibG9iKCl9ZnVuY3Rpb24gUTUoJCxKKXtsZXQgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7US5ocmVmPSQsUS5kb3dubG9hZD1KLFEuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChRKSxRLmNsaWNrKCksUS5yZW1vdmUoKX1mdW5jdGlvbiBiWih7c3RhdHM6JCxoaXN0b3J5OkosZmF1bHRzOlEsc2VuZGVyOlgsY2FwdHVyZTpLLHJlcXVlc3RlZEZwczpZLHN0YWxlOnEsYWN0aW9uOkd9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIGdhcC0yIGJvcmRlci1iIGJvcmRlci13aGl0ZS8xMCBwYi0yICR7cT8ib3BhY2l0eS01MCI6IiJ9YCxjaGlsZHJlbjpbWihkNCx7bGFiZWw6IkZyYW1lIHJhdGUiLHZhbHVlOlozKCQuZnBzKSxoaW50Olk/YG9mICR7WX1gOnZvaWQgMCx2YWx1ZXM6bDQoSiwoQik9PkIuZnBzKSxtYXg6WSxjbGFzc05hbWU6InRleHQtZW1lcmFsZC00MDAifSksWihkNCx7bGFiZWw6IkJpdHJhdGUiLHZhbHVlOkY4KCQua2JwcyksdmFsdWVzOmw0KEosKEIpPT5CLmticHMpLGNsYXNzTmFtZToidGV4dC1za3ktNDAwIn0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltxP1ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13YXJuaW5nIixjaGlsZHJlbjoiTm8gc2FtcGxlcyBpbiB0aGUgbGFzdCBmZXcgc2Vjb25kcyJ9KTpRLmxlbmd0aD4wP1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IixjaGlsZHJlbjpRLm1hcCgoQik9PlooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13YXJuaW5nIiwiZGF0YS1zdHJlYW0tZmF1bHQiOkIsY2hpbGRyZW46Qn0sQikpfSk6WigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjpqWigkKT8iTm8gZHJvcHMsIGZyZWV6ZXMgb3IgbG9zcyBpbiB0aGlzIHdpbmRvdyI6Ik1lYXN1cmluZ+KApiJ9KSxHXX0pLFooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtMiBnYXAteC0zIGdhcC15LTAuNSBib3JkZXItdCBib3JkZXItd2hpdGUvMTAgcHQtMS41IixjaGlsZHJlbjpbWigkMCx7bGFiZWw6IlJUVCIsdmFsdWU6UTMoJC5yb3VuZFRyaXBNcywwKX0pLFooJDAse2xhYmVsOiJKaXR0ZXIiLHZhbHVlOlEzKCQuaml0dGVyTXMsMSl9KSxaKCQwLHtsYWJlbDoiSml0dGVyIGJ1ZmZlciIsdmFsdWU6UTMoJC5qaXR0ZXJCdWZmZXJNcywwKX0pLFooJDAse2xhYmVsOiJSZXNvbHV0aW9uIix2YWx1ZTokLndpZHRoPT09bnVsbHx8JC5oZWlnaHQ9PT1udWxsP18yOmAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH0pLCQucGF0aCE9PSJ1bmtub3duIiYmWigkMCx7bGFiZWw6IklDRSByb3V0ZSIsdmFsdWU6JC5wYXRoPT09InJlbGF5Ij8iVmlhIHJlbGF5IjoiRGlyZWN0In0pXX0pLFgmJlooeVose3NlbmRlcjpYfSksSyYmWihTWix7Y2FwdHVyZTpLfSldfSl9ZnVuY3Rpb24geVooe3NlbmRlcjokfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0xLjUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InBiLTAuNSB0ZXh0LVsxMHB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46IkVuY29kZXIifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC14LTMgZ2FwLXktMC41IixjaGlsZHJlbjpbWigkMCx7bGFiZWw6IkVuY29kZSBGUFMiLHZhbHVlOlozKCQucmVwb3J0ZWRGcHMpfSksWigkMCx7bGFiZWw6IlRhcmdldCIsdmFsdWU6RjgoJC50YXJnZXRLYnBzKX0pLFooJDAse2xhYmVsOiJQYWNlciBGUFMiLHZhbHVlOlozKCQuc291cmNlRnBzKX0pLFooJDAse2xhYmVsOiJFbmNvZGUiLHZhbHVlOlEzKCQuZW5jb2RlTXNQZXJGcmFtZSwxKSxoaW50OiIvZnJhbWUifSksWigkMCx7bGFiZWw6IkZyYW1lcyBzZW50Iix2YWx1ZTpaNSgkLmZyYW1lc1NlbnQpfSksWigkMCx7bGFiZWw6Ikxvc3MiLHZhbHVlOnhaKCQubG9zc1JhdGlvKSxoaW50OiJ0b3RhbCJ9KV19KV19KX1mdW5jdGlvbiBTWih7Y2FwdHVyZTokfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0xLjUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InBiLTAuNSB0ZXh0LVsxMHB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46IkNhcHR1cmUifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC14LTMgZ2FwLXktMC41IixjaGlsZHJlbjpbWigkMCx7bGFiZWw6IlNjcmVlbiBmcmFtZXMiLHZhbHVlOlo1KCQuc2NyZWVuRnJhbWVzKX0pLFooJDAse2xhYmVsOiJJZGxlIGZyYW1lcyIsdmFsdWU6WjUoJC5pZGxlRnJhbWVzKX0pLFooJDAse2xhYmVsOiJDYXB0dXJlIGRlbGl2ZXJpZXMiLHZhbHVlOlo1KCQub2ZmZXJlZEZyYW1lcyl9KSxaKCQwLHtsYWJlbDoiUGFjZXIgc3VibWlzc2lvbnMiLHZhbHVlOlo1KCQuZm9yd2FyZGVkRnJhbWVzKX0pXX0pXX0pfWZ1bmN0aW9uIFo1KCQpe2lmKCQ9PT1udWxsKXJldHVybiBfMjtsZXQgSj1NYXRoLmFicygkKTtpZihKPDEwMDApcmV0dXJuIFN0cmluZygkKTtpZihKPDk5OTk1MClyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDEpfWtgO3JldHVybmAkeygkLzFlNikudG9GaXhlZCgyKX1NYH1mdW5jdGlvbiB4WigkKXtyZXR1cm4gJD09PW51bGw/XzI6YCR7KCQqMTAwKS50b0ZpeGVkKDEpfSVgfXZhciBfMj0i4oCUIjtmdW5jdGlvbiBsNCgkLEope2xldCBRPVtdO2ZvcihsZXQgWCBvZiAkKXtsZXQgSz1KKFgpO2lmKEshPT1udWxsKVEucHVzaChLKX1yZXR1cm4gUX1mdW5jdGlvbiBqWigkKXtyZXR1cm4gJC5kcm9wcGVkSW5XaW5kb3chPT1udWxsfWZ1bmN0aW9uIGM0KCQpe2lmKCQuZnBzPT09bnVsbClyZXR1cm4gbnVsbDtyZXR1cm5gJHtaMygkLmZwcyl9IMK3ICR7RjgoJC5rYnBzKX1gfWZ1bmN0aW9uIG80KCQsSil7bGV0IFE9W107aWYoJC5mcmVlemVzSW5XaW5kb3cpe2xldCBLPSQuZnJlZXplTXNJbldpbmRvdz9gICgkeygkLmZyZWV6ZU1zSW5XaW5kb3cvMTAwMCkudG9GaXhlZCgxKX1zKWA6IiI7US5wdXNoKGAkeyQuZnJlZXplc0luV2luZG93fSBmcmVlemUkeyQuZnJlZXplc0luV2luZG93PT09MT8iIjoicyJ9JHtLfWApfWlmKCQuZHJvcHBlZEluV2luZG93KVEucHVzaChgJHskLmRyb3BwZWRJbldpbmRvd30gZnJhbWVzIGRyb3BwZWRgKTtpZigkLmxvc3NSYXRpbyE9PW51bGwmJiQubG9zc1JhdGlvPjAuMDIpUS5wdXNoKGAkeygkLmxvc3NSYXRpbyoxMDApLnRvRml4ZWQoMSl9JSBwYWNrZXQgbG9zc2ApO2xldCBYPXZaKEo/LnF1YWxpdHlMaW1pdGF0aW9uUmVhc29uKTtpZihYIT09bnVsbClRLnB1c2goWCk7cmV0dXJuIFF9ZnVuY3Rpb24gdlooJCl7c3dpdGNoKCQpe2Nhc2UiY3B1IjpyZXR1cm4iRW5jb2RlciBjYW5ub3Qga2VlcCB1cCAoQ1BVKSI7Y2FzZSJiYW5kd2lkdGgiOnJldHVybiJCaXRyYXRlIHJlZHVjZWQgYnkgdGhlIG5ldHdvcmsiO2Nhc2Ugdm9pZCAwOmNhc2UgbnVsbDpjYXNlIm5vbmUiOnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIkVuY29kZXIgaG9sZGluZyBiYWNrIChyZWFzb24gdW5rbm93bikifX1mdW5jdGlvbiBaMygkKXtpZigkPT09bnVsbClyZXR1cm4gXzI7cmV0dXJuYCR7JDwxMD8kLnRvRml4ZWQoMSk6JC50b0ZpeGVkKDApfSBmcHNgfWZ1bmN0aW9uIEY4KCQpe2lmKCQ9PT1udWxsKXJldHVybiBfMjtyZXR1cm4gJDwxMDAwP2AkeyQudG9GaXhlZCgwKX0ga2Jwc2A6YCR7KCQvMTAwMCkudG9GaXhlZCgyKX0gTWJwc2B9ZnVuY3Rpb24gUTMoJCxKKXtyZXR1cm4gJD09PW51bGw/XzI6YCR7JC50b0ZpeGVkKEopfSBtc2B9ZnVuY3Rpb24gZDQoe2xhYmVsOiQsdmFsdWU6SixoaW50OlEsdmFsdWVzOlgsbWF4OkssY2xhc3NOYW1lOll9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIiwiZGF0YS1zdHJlYW0tc3RhdCI6JCxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWJhc2VsaW5lIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTAiLGNoaWxkcmVuOiR9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMgdGV4dC1bMTFweF0iLGNoaWxkcmVuOltKLFEmJlooInNwYW4iLHtjbGFzc05hbWU6Im1sLTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjpRfSldfSldfSksWih0NSx7dmFsdWVzOlgsbWF4OkssY2xhc3NOYW1lOll9KV19KX1mdW5jdGlvbiAkMCh7bGFiZWw6JCx2YWx1ZTpKLGhpbnQ6UX0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIGdhcC0yIiwiZGF0YS1zdHJlYW0tc3RhdCI6JCxjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToid2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCIsY2hpbGRyZW46JH0pLFooInNwYW4iLHtjbGFzc05hbWU6InRhYnVsYXItbnVtcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjpbSixRJiZaKCJzcGFuIix7Y2xhc3NOYW1lOiJtbC0xLjUgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46UX0pXX0pXX0pfWZ1bmN0aW9uIGk0KHtzdGF0czokLGhpc3Rvcnk6SixmYXVsdHM6USxzZW5kZXI6WCxjYXB0dXJlOksscmVxdWVzdGVkRnBzOlksc3RhbGU6cSxhY3Rpb246R30pe2lmKCQ9PT1udWxsKXJldHVybiBudWxsO3JldHVybiBaKGJaLHtzdGF0czokLGhpc3Rvcnk6SixmYXVsdHM6USxzZW5kZXI6WCxjYXB0dXJlOksscmVxdWVzdGVkRnBzOlksc3RhbGU6cSxhY3Rpb246R30pfWZ1bmN0aW9uIG40KHtoaXN0b3J5OiQsY29udGV4dDpKfSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gbnVsbDtyZXR1cm4gWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpgRG93bmxvYWQgJHskLmxlbmd0aH0gcmVjb3JkZWQgc2FtcGxlcyBhcyBKU09OYCwiYXJpYS1sYWJlbCI6YERvd25sb2FkICR7JC5sZW5ndGh9IHJlY29yZGVkIHNhbXBsZXMgYXMgSlNPTmAsb25DbGljazooKT0+aFooJCxKKSxjbGFzc05hbWU6Ii1tdC0wLjUgaW5saW5lLWZsZXggaC01IHctNSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCB0ZXh0LXdoaXRlLzMwIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjp0ZXh0LXdoaXRlLzgwIixjaGlsZHJlbjpaKGcyLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImgtMyB3LTMifSl9KX1mdW5jdGlvbiBSWigkLEo9e30pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7cmVjb3JkZWRBdDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksLi4uSixzYW1wbGVzOiR9LG51bGwsMil9ZnVuY3Rpb24gaFooJCxKKXtsZXQgUT1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtSWigkLEopXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KSk7UTUoUSxgc2VydmUtc2ltLXN0cmVhbS1zdGF0cy0ke2daKCl9Lmpzb25gKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKFEpLDApfWZ1bmN0aW9uIGdaKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIi0iKS5yZXBsYWNlKCJaIiwiIil9dmFyIGZaPVs2MCwzMCwyMCwxNSwxMCw1XSxBOD1mWi5tYXAoKCQpPT57bGV0IEo9U3RyaW5nKCQpO3JldHVybnt2YWx1ZTpKLGxhYmVsOkp9fSk7ZnVuY3Rpb24gTTgoJCl7bGV0IEo9U3RyaW5nKCQpO2lmKCQ8PTYwJiYhQTguc29tZSgoUSk9PlEudmFsdWU9PT1KKSlyZXR1cm5be3ZhbHVlOkosbGFiZWw6Sn0sLi4uQThdO3JldHVybiBBOH12YXIgbVo9W3t2YWx1ZToiaHR0cCIsbGFiZWw6IkhUVFAifSx7dmFsdWU6IndlYnJ0YyIsbGFiZWw6IldlYlJUQyJ9XSxwWj1be3ZhbHVlOiJ3ZWJydGMiLGxhYmVsOiJXZWJSVEMifV0sdVo9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkF1dG8ifSx7dmFsdWU6ImgyNjQiLGxhYmVsOiJILjI2NCJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyJ9XSxsWj1be3ZhbHVlOiJoMjY0IixsYWJlbDoiSC4yNjQifSx7dmFsdWU6InZwOSIsbGFiZWw6IlZQOSJ9LHt2YWx1ZToidnA4IixsYWJlbDoiVlA4In1dLGRaPVt7dmFsdWU6IjAiLGxhYmVsOiJGdWxsIn0se3ZhbHVlOiIxOTIwIixsYWJlbDoiMTkyMCJ9LHt2YWx1ZToiMTYwMCIsbGFiZWw6IjE2MDAifSx7dmFsdWU6IjEyODAiLGxhYmVsOiIxMjgwIn0se3ZhbHVlOiI5NjAiLGxhYmVsOiI5NjAifSx7dmFsdWU6IjcyMCIsbGFiZWw6IjcyMCJ9XSxjWj1be3ZhbHVlOiIwLjQ1IixsYWJlbDoiNDUlIn0se3ZhbHVlOiIwLjU1IixsYWJlbDoiNTUlIn0se3ZhbHVlOiIwLjciLGxhYmVsOiI3MCUifSx7dmFsdWU6IjAuODUiLGxhYmVsOiI4NSUifSx7dmFsdWU6IjEiLGxhYmVsOiIxMDAlIn1dLG9aPVt7dmFsdWU6IjE1MDAwMDAiLGxhYmVsOiIxLjUgTWJwcyJ9LHt2YWx1ZToiMzAwMDAwMCIsbGFiZWw6IjMgTWJwcyJ9LHt2YWx1ZToiNjAwMDAwMCIsbGFiZWw6IjYgTWJwcyJ9LHt2YWx1ZToiMTAwMDAwMDAiLGxhYmVsOiIxMCBNYnBzIn0se3ZhbHVlOiIxNjAwMDAwMCIsbGFiZWw6IjE2IE1icHMifV0sdTA9InNpemUtMy41IjtmdW5jdGlvbiBrOCgkLEosUSl7bGV0IFg9U3RyaW5nKCQpO3JldHVybiBKLnNvbWUoKEspPT5LLnZhbHVlPT09WCk/Sjpbe3ZhbHVlOlgsbGFiZWw6USgkKX0sLi4uSl19ZnVuY3Rpb24gcjQoe3NldHRpbmdzOiQsb25QbGF5YmFja1NldHRpbmdzQ2hhbmdlOkosb25FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6USxhY3RpdmVDb2RlYzpYLGF2Y2NTdXBwb3J0ZWQ6SyxwZWVyQ29ubmVjdGlvbjpZLHdlYnJ0Y1N0YXRzVXJsOnEsd2VicnRjU2Vzc2lvbklkOkcsZW5jb2RlclNldHRpbmdzRGlzYWJsZWQ6Qj0hMSx0cmFuc3BvcnRMb2NrZWQ6Tj0hMX0pe2xldFt6LFZdPWsoITEpLHtzdGF0czpILGhpc3Rvcnk6QyxzdGFsZTpBfT1wNChZKSxMPWc0KHE/PyIiLEc/P251bGwscSE9PXZvaWQgMCYmWSE9PW51bGwmJkchPW51bGwpLFU9TC5zdGFsZT9udWxsOkwuc2Vzc2lvbixGPUg9PT1udWxsfHxBP1tdOm80KEgsVSksVz1BPyJTdHJlYW0gc2FtcGxlcyBoYXZlIHN0b3BwZWQiOkYuam9pbigiOyAiKSx3PUg9PT1udWxsP251bGw6YzQoSCksUD0kLnRyYW5zcG9ydD09PSJodHRwIix4PSQudHJhbnNwb3J0PT09IndlYnJ0YyI7cmV0dXJuIFooczEse29wZW46eixvbk9wZW5DaGFuZ2U6ViwiZGF0YS1zdHJlYW0tc2V0dGluZ3MiOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlooSjEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTdHJlYW0ifSksWigic3BhbiIse2NsYXNzTmFtZToianVzdGlmeS1zZWxmLWVuZCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSIsY2hpbGRyZW46WyF6JiZ3IT09bnVsbD9aKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzQwIHRhYnVsYXItbnVtcyIsY2hpbGRyZW46d30pOlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIixjaGlsZHJlbjpYfSksKEYubGVuZ3RoPjB8fEEpJiZaKCJzcGFuIix7ImRhdGEtc3RyZWFtLXdhcm5pbmciOiEwLHJvbGU6InN0YXR1cyIsY2xhc3NOYW1lOiJncm91cCByZWxhdGl2ZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOltaKGIwLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InctMy41IGgtMy41IHRleHQtd2FybmluZyJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJzci1vbmx5IixjaGlsZHJlbjpXfSksWigic3BhbiIse2NsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSByaWdodC0wIHRvcC1mdWxsIHotMTAgbXQtMSBoaWRkZW4gdy1tYXggbWF4LXctWzIyMHB4XSByb3VuZGVkLW1kIGJnLWJsYWNrLzkwIHB4LTIgcHktMSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXNudWcgdGV4dC13aGl0ZS85MCBzaGFkb3ctbGcgZ3JvdXAtaG92ZXI6YmxvY2siLGNoaWxkcmVuOld9KV19KV19KV19KSxjaGlsZHJlbjpaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltaKGk0LHtzdGF0czpILGhpc3Rvcnk6QyxmYXVsdHM6RixzZW5kZXI6VSxjYXB0dXJlOkwuc3RhbGU/bnVsbDpMLmNhcHR1cmUscmVxdWVzdGVkRnBzOiQuaDI2NEZwcyxzdGFsZTpBLGFjdGlvbjpaKG40LHtoaXN0b3J5OkMsY29udGV4dDp7dHJhbnNwb3J0OiQudHJhbnNwb3J0LGNvZGVjOkg/LmNvZGVjLHNlbmRlcjpVLGNhcHR1cmU6TC5zdGFsZT9udWxsOkwuY2FwdHVyZX19KX0pLFooWTAse2ljb246WihyMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6IlRyYW5zcG9ydCIsY2hpbGRyZW46WihNMCx7bGFiZWw6IlRyYW5zcG9ydCIsdmFsdWU6JC50cmFuc3BvcnQsb3B0aW9uczpOP3BaOm1aLGRpc2FibGVkOk4sb25DaGFuZ2U6KEQpPT5KKHt0cmFuc3BvcnQ6RH0pfSl9KSwhTiYmWihZMCx7aWNvbjpaKHIwLHtjbGFzc05hbWU6dTB9KSxsYWJlbDoiSFRUUCBjb2RlYyIsY2hpbGRyZW46WihNMCx7bGFiZWw6IkhUVFAgY29kZWMiLHZhbHVlOks/JC5odHRwQ29kZWM6Im1qcGVnIixvcHRpb25zOnVaLGRpc2FibGVkOiFQfHwhSyxvbkNoYW5nZTooRCk9Pkooe2h0dHBDb2RlYzpEfSl9KX0pLFooWTAse2ljb246WihyMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6IldlYlJUQyBjb2RlYyIsY2hpbGRyZW46WihNMCx7bGFiZWw6IldlYlJUQyBjb2RlYyIsdmFsdWU6JC53ZWJSdGNDb2RlYyxvcHRpb25zOmxaLGRpc2FibGVkOiF4LG9uQ2hhbmdlOihEKT0+Sih7d2ViUnRjQ29kZWM6RH0pfSl9KSxaKFkwLHtpY29uOlooajAse2NsYXNzTmFtZTp1MH0pLGxhYmVsOiJNYXggc2l6ZSIsY2hpbGRyZW46WihNMCx7bGFiZWw6Ik1heCBzaXplIix2YWx1ZTpTdHJpbmcoJC5tYXhEaW1lbnNpb24pLG9wdGlvbnM6azgoJC5tYXhEaW1lbnNpb24sZFosU3RyaW5nKSxkaXNhYmxlZDpCLG9uQ2hhbmdlOihEKT0+USh7bWF4RGltZW5zaW9uOk51bWJlcihEKX0pfSl9KSwhTiYmWihKMSx7Y2hpbGRyZW46W1ooWTAse2ljb246WihqMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6Ik1KUEVHIEZQUyIsY2hpbGRyZW46WihNMCx7bGFiZWw6Ik1KUEVHIEZQUyIsdmFsdWU6U3RyaW5nKCQubWpwZWdGcHMpLG9wdGlvbnM6TTgoJC5tanBlZ0ZwcyksZGlzYWJsZWQ6Qnx8IVAsb25DaGFuZ2U6KEQpPT5RKHttanBlZ0ZwczpOdW1iZXIoRCl9KX0pfSksWihZMCx7aWNvbjpaKGowLHtjbGFzc05hbWU6dTB9KSxsYWJlbDoiTUpQRUcgcXVhbGl0eSIsY2hpbGRyZW46WihNMCx7bGFiZWw6Ik1KUEVHIHF1YWxpdHkiLHZhbHVlOlN0cmluZygkLm1qcGVnUXVhbGl0eSksb3B0aW9uczprOCgkLm1qcGVnUXVhbGl0eSxjWiwoRCk9PmAke01hdGgucm91bmQoRCoxMDApfSVgKSxkaXNhYmxlZDpCfHwhUCxvbkNoYW5nZTooRCk9PlEoe21qcGVnUXVhbGl0eTpOdW1iZXIoRCl9KX0pfSldfSksWihZMCx7aWNvbjpaKGowLHtjbGFzc05hbWU6dTB9KSxsYWJlbDoiVmlkZW8gRlBTIixjaGlsZHJlbjpaKE0wLHtsYWJlbDoiVmlkZW8gRlBTIix2YWx1ZTpTdHJpbmcoJC5oMjY0RnBzKSxvcHRpb25zOk04KCQuaDI2NEZwcyksZGlzYWJsZWQ6Qnx8UCYmKCFLfHwkLmh0dHBDb2RlYz09PSJtanBlZyIpLG9uQ2hhbmdlOihEKT0+USh7aDI2NEZwczpOdW1iZXIoRCl9KX0pfSksWihZMCx7aWNvbjpaKGowLHtjbGFzc05hbWU6dTB9KSxsYWJlbDoiVmlkZW8gYml0cmF0ZSIsY2hpbGRyZW46WihNMCx7bGFiZWw6IlZpZGVvIGJpdHJhdGUiLHZhbHVlOlN0cmluZygkLmgyNjRCaXRyYXRlKSxvcHRpb25zOms4KCQuaDI2NEJpdHJhdGUsb1osKEQpPT5gJHtELzFlNn0gTWJwc2ApLGRpc2FibGVkOkJ8fFAmJighS3x8JC5odHRwQ29kZWM9PT0ibWpwZWciKSxvbkNoYW5nZTooRCk9PlEoe2gyNjRCaXRyYXRlOk51bWJlcihEKX0pfSl9KV19KX0pfWZ1bmN0aW9uIGE0KHtvcGVuOiQsb25DbG9zZTpKLHBlZXJDb25uZWN0aW9uOlEsd2VicnRjU3RhdHNVcmw6WCx3ZWJydGNTZXNzaW9uSWQ6Syx1ZGlkOlksZGV2aWNlUnVudGltZTpxLGN1cnJlbnRBcHA6RyxldmVudExvZ0V2ZW50c0VuZHBvaW50OkIsbWV0cmljc0VuZHBvaW50Ok4sYXhPdmVybGF5RW5hYmxlZDp6LG9uVG9nZ2xlQXhPdmVybGF5OlYsc3RyZWFtU2V0dGluZ3M6SCxvblN0cmVhbVBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6QyxvblN0cmVhbUVuY29kZXJTZXR0aW5nc0NoYW5nZTpBLGFjdGl2ZUNvZGVjOkwsYXZjY1N1cHBvcnRlZDpVLHN0cmVhbVNldHRpbmdzUGVuZGluZzpGLHN0cmVhbVRyYW5zcG9ydExvY2tlZDpXPSExLHdpZHRoOnd9KXtyZXR1cm4gWihDMix7b3BlbjokLHdpZHRoOncsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpGMn0sY2hpbGRyZW46W1ooTzIse2NoaWxkcmVuOltaKGs2LHtjaGlsZHJlbjoiVG9vbHMifSksWih1NSx7b25DbGljazpKfSldfSksJCYmWigiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltaKFU0LHt1ZGlkOlksY3VycmVudEFwcDpHfSksWihqNCx7dWRpZDpZLGN1cnJlbnRBcHBCdW5kbGVJZDpHPy5idW5kbGVJZD8/bnVsbCxtZXRyaWNzRW5kcG9pbnQ6Tn0pLFooeTQse3VkaWQ6WSxldmVudHNFbmRwb2ludDpCfSksWih2NCx7dWRpZDpZLHJ1bnRpbWU6cX0pLFooQTQse292ZXJsYXlFbmFibGVkOnosb25Ub2dnbGVPdmVybGF5OlZ9KSxaKEU0LHt1ZGlkOlksYnVuZGxlSWQ6Rz8uYnVuZGxlSWQ/P251bGx9KSxaKEw0LHt1ZGlkOlksZXhlYzpJMX0pLFooTzQse3VkaWQ6WSxidW5kbGVJZDpHPy5idW5kbGVJZD8/bnVsbH0pLFoocjQse3NldHRpbmdzOkgsb25QbGF5YmFja1NldHRpbmdzQ2hhbmdlOkMsb25FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6QSxhY3RpdmVDb2RlYzpMLGF2Y2NTdXBwb3J0ZWQ6VSxlbmNvZGVyU2V0dGluZ3NEaXNhYmxlZDpGLHRyYW5zcG9ydExvY2tlZDpXLHBlZXJDb25uZWN0aW9uOlEsd2VicnRjU3RhdHNVcmw6WCx3ZWJydGNTZXNzaW9uSWQ6S30pXX0pXX0pfWZ1bmN0aW9uIHM0KCQsSil7bGV0IFE7dHJ5e1E9bmV3IFVSTCgkLndlYlNvY2tldERlYnVnZ2VyVXJsKX1jYXRjaHtyZXR1cm4gJH1sZXQgWD1gJHtRLnBhdGhuYW1lfSR7US5zZWFyY2h9YCxLPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsWT1KLnByb3RvY29sPT09Imh0dHBzOiI/IndzcyI6IndzIixxPWAke0ouaG9zdH0ke1h9YCxHPSQuZGV2dG9vbHNGcm9udGVuZFVybDt0cnl7bGV0IEI9bmV3IFVSTCgkLmRldnRvb2xzRnJvbnRlbmRVcmwsYCR7Si5wcm90b2NvbH0vLyR7Si5ob3N0fWApO0Iuc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3MiKSxCLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzcyIpLEIuc2VhcmNoUGFyYW1zLnNldChZLHEpLEc9YCR7Qi5wYXRobmFtZX0ke0Iuc2VhcmNofSR7Qi5oYXNofWB9Y2F0Y2h7fXJldHVybnsuLi4kLHdlYlNvY2tldERlYnVnZ2VyVXJsOmAke0t9Ly8ke0ouaG9zdH0ke1h9YCxkZXZ0b29sc0Zyb250ZW5kVXJsOkd9fWZ1bmN0aW9uIFg1KCQsSil7ZmV0Y2goYjEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpKfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBXOCgpe2xldCAkPWIxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEo9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsSikpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIHQ0KCQpe2xldCBKPSQuY29udGVudERvY3VtZW50O2lmKCFKKXJldHVybjtsZXQgUT0oKT0+e2xldCBZPVtKXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxHPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IEIgb2YgRyl7bGV0IE49Qi5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Qi50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KE4pKXJldHVybiBCfWZvcihsZXQgQiBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihCLnNoYWRvd1Jvb3QpWS5wdXNoKEIuc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFg9MCxLPSgpPT57WCsrO2xldCBZPVEoKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFg8MjApc2V0VGltZW91dChLLDEwMCl9O0soKX1mdW5jdGlvbiBlNCgkKXtsZXQgSj1bXSxRPW5ldyBNYXA7Zm9yKGxldCBYIG9mICQpe2xldCBLPVguYXBwTmFtZXx8WC5idW5kbGVJZHx8IlVua25vd24iLFk9WC5idW5kbGVJZHx8SyxxPVEuZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6SyxidW5kbGVJZDpYLmJ1bmRsZUlkLHRhcmdldHM6W119LFEuc2V0KFkscSksSi5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFgpfXJldHVybiBKLm1hcCgoWCk9PlEuZ2V0KFgpKX1mdW5jdGlvbiAkNygkLEope2xldFtRLFhdPWsoe30pLEs9azEoKCk9Pkouc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtKXSk7cmV0dXJuIHkoKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIEope2lmKCFxKWNvbnRpbnVlO2xldCBHPWAkeyR9OiR7cX1gLEI9QTIuZ2V0KEcpO2lmKHR5cGVvZiBCPT09InN0cmluZyJ8fEI9PT1udWxsKXtYKChOKT0+TltxXT09PUI/Tjp7Li4uTixbcV06Qn0pO2NvbnRpbnVlfUg0KEkxLCQscSkudGhlbigoTik9PntpZihZKXJldHVybjtYKCh6KT0+KHsuLi56LFtxXTpOfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsS10pLFF9ZnVuY3Rpb24gSjcoe3VkaWQ6JCx0YXJnZXRzOkosc2VsZWN0ZWQ6USxvblNlbGVjdFRhcmdldDpYLG9uUmVmcmVzaDpLfSl7bGV0IFk9ZTQoSikscT1ZLm1hcCgoTCk9PkwuYnVuZGxlSWQpLmZpbHRlcigoTCk9PiEhTCksRz0kNygkLHEpLFtCLE5dPWsoITEpLFt6LFZdPWsobnVsbCksSD1UKG51bGwpLEM9VChudWxsKTt5KCgpPT57aWYoIUIpcmV0dXJuO2xldCBMPShVKT0+e2lmKCFDLmN1cnJlbnQpcmV0dXJuO2lmKCFDLmN1cnJlbnQuY29udGFpbnMoVS50YXJnZXQpKU4oITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKX0sW0JdKSx5KCgpPT57aWYoQilyZXR1cm47aWYoSC5jdXJyZW50KVg1KEguY3VycmVudCwhMSksSC5jdXJyZW50PW51bGw7VzgoKX0sW0JdKSx5KCgpPT57bGV0IEw9KCk9Plc4KCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsTCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEwpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEwpfX0sW10pO2xldCBBPVE/KFEudGl0bGV8fFEudXJsfHxRLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gWigiZGl2Iix7cmVmOkMsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W1ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e04oKEwpPT57aWYoIUwpSygpO3JldHVybiFMfSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpCLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOkF9KSxaKFIyLHtzaXplOjEyLHN0cm9rZVdpZHRoOjJ9KV19KSxCJiZaKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKEwpPT57bGV0IFU9TC5idW5kbGVJZD9HW0wuYnVuZGxlSWRdOm51bGw7cmV0dXJuIFooImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltVP1ooImltZyIse3NyYzpVLGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6Wigic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46TC5hcHBOYW1lfSldfSksWigidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOkwudGFyZ2V0cy5tYXAoKEYpPT57bGV0IFc9UT8uaWQ9PT1GLmlkLHc9ISFGLmluVXNlQnlPdGhlckluc3BlY3RvciYmIVcsUD0oRi50aXRsZXx8Ri51cmx8fEYuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCkseD16PT09Ri5pZCYmIXcsRD0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBaKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOlcsImFyaWEtZGlzYWJsZWQiOncsdGFiSW5kZXg6dz8tMTowLHRpdGxlOnc/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZih3KXJldHVybjtpZihILmN1cnJlbnQmJkguY3VycmVudCE9PUYuaWQpWDUoSC5jdXJyZW50LCExKTtILmN1cnJlbnQ9Ri5pZCxWKEYuaWQpLFg1KEYuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihILmN1cnJlbnQ9PT1GLmlkKVg1KEYuaWQsITEpLEguY3VycmVudD1udWxsO1YoKFIpPT5SPT09Ri5pZD9udWxsOlIpfSxvbkNsaWNrOigpPT57aWYodylyZXR1cm47WChGLmlkKSxOKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke3c/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1Ijp4PyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjpXPyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpQfSksRi51cmwmJkYudXJsIT09ImFib3V0OmJsYW5rIiYmWigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpGLnVybH0pXX0sRi5pZCl9KX0pXX0sTC5rZXkpfSl9KV19KX1mdW5jdGlvbiBRNyh7b3BlbjokLG9uQ2xvc2U6Six1ZGlkOlEsdGFyZ2V0czpYLHNlbGVjdGVkVGFyZ2V0SWQ6SyxvblNlbGVjdFRhcmdldDpZLGxvYWRpbmc6cSxlcnJvcjpHLG9uUmVmcmVzaDpCLHdpZHRoOk59KXtsZXQgej1LP1guZmluZCgoVik9PlYuaWQ9PT1LKT8/bnVsbDpudWxsO3JldHVybiBaKEMyLHtvcGVuOiQsd2lkdGg6TixjaGlsZHJlbjpbWihPMix7Y2hpbGRyZW46W1gubGVuZ3RoPjA/WihKNyx7dWRpZDpRLHRhcmdldHM6WCxzZWxlY3RlZDp6LG9uU2VsZWN0VGFyZ2V0Olksb25SZWZyZXNoOkJ9KTpaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46cT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxaKHU1LHtvbkNsaWNrOkosYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpHP1ooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpHfSk6eiYmJD9aKCJpZnJhbWUiLHtzcmM6ei5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke3oudGl0bGV8fHoudXJsfHx6LmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KFYpPT50NChWLmN1cnJlbnRUYXJnZXQpfSx6LmlkKTpaKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ej8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBpWih7aG9zdFBhdGg6JCxleGVjOkosdWRpZDpRLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOkssb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpxfSl7cT8uKCQpO2xldCBHPSQuc3BsaXQoIi8iKS5wb3AoKT8/ImltYWdlIixCPVgoRywibWVkaWEiKTtyZXR1cm4gSyhCLG51bGwpLGs0KCQsSixRKS50aGVuKCgpPT5ZKEIsITApKS5jYXRjaCgoTik9PlkoQiwhMSxOIGluc3RhbmNlb2YgRXJyb3I/Ti5tZXNzYWdlOiJBZGQgZmFpbGVkIikpfWZ1bmN0aW9uIFo3KHtleGVjOiQsdWRpZDpKLGVuYWJsZWQ6USxvblVwbG9hZFN0YXJ0Olgsb25VcGxvYWRQcm9ncmVzczpLLG9uVXBsb2FkRW5kOlksb25VbnN1cHBvcnRlZDpxLG9uSG9zdFBhdGhEcm9wOkd9KXtsZXRbQixOXT1rKCExKSx6PVQoMCksVj1FKGFzeW5jKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLEwuc3RvcFByb3BhZ2F0aW9uKCksei5jdXJyZW50PTAsTighMSksIVF8fCFKKXJldHVybjtsZXQgVT1MLmRhdGFUcmFuc2Zlci5nZXREYXRhKHM1KTtpZihVKXtpWih7aG9zdFBhdGg6VSxleGVjOiQsdWRpZDpKLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOkssb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpHfSk7cmV0dXJufWxldCBGPUFycmF5LmZyb20oTC5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKEYubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBXIG9mIEYpe2xldCB3PVc0KFcpO2lmKCF3KXtxKFcpO2NvbnRpbnVlfWxldCBQPVgoVy5uYW1lLHcpO1A0KFcsdywkLEosKHgpPT5LKFAseCkpLnRoZW4oKCk9PlkoUCwhMCkpLmNhdGNoKCh4KT0+WShQLCExLHggaW5zdGFuY2VvZiBFcnJvcj94Lm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbUSxKLCQsWCxLLFkscSxHXSksSD1FKChMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSxRKUwuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbUV0pLEM9RSgoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksIVEpcmV0dXJuO2lmKHouY3VycmVudCsrLHouY3VycmVudD09PTEpTighMCl9LFtRXSksQT1FKChMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSx6LmN1cnJlbnQtLSx6LmN1cnJlbnQ8PTApei5jdXJyZW50PTAsTighMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpCLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6SCxvbkRyYWdFbnRlcjpDLG9uRHJhZ0xlYXZlOkEsb25Ecm9wOlZ9fX1mdW5jdGlvbiBYNygkKXtsZXQgSj1uZXcgVWludDhBcnJheSg2NTUzNiksUT0wLFg9MCxLPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KEgpPT57aWYoUStILmxlbmd0aD5KLmxlbmd0aCl7aWYoWD4wKUouY29weVdpdGhpbigwLFgsUSksUS09WCxYPTA7aWYoUStILmxlbmd0aD5KLmxlbmd0aCl7bGV0IEM9Si5sZW5ndGg7d2hpbGUoQzxRK0gubGVuZ3RoKUMqPTI7bGV0IEE9bmV3IFVpbnQ4QXJyYXkoQyk7QS5zZXQoSi5zdWJhcnJheSgwLFEpKSxKPUF9fUouc2V0KEgsUSksUSs9SC5sZW5ndGh9LEc9KEgpPT57bGV0IEM9TWF0aC5taW4oUS00LEgrSyk7Zm9yKGxldCBBPUg7QTw9QztBKyspaWYoSltBXT09PTEzJiZKW0ErMV09PT0xMCYmSltBKzJdPT09MTMmJkpbQSszXT09PTEwKXJldHVybiBBO3JldHVybi0xfSxCPShILEMpPT57bGV0IEE9WS5kZWNvZGUoSi5zdWJhcnJheShILEMpKSxMPS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoQSk7cmV0dXJuIEw/TnVtYmVyKExbMV0pOm51bGx9LE49MCx6PShIKT0+e2xldCBDPS0xO2ZvcihsZXQgQT1IO0E8US0xO0ErKylpZihKW0FdPT09MjU1JiZKW0ErMV09PT0yMTYpe0M9QTticmVha31pZihDPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBBPU1hdGgubWF4KEMrMixOKTtBPFEtMTtBKyspaWYoSltBXT09PTI1NSYmSltBKzFdPT09MjE3KXJldHVybiBOPTAse3M6QyxlOkErMn07cmV0dXJuIE49TWF0aC5tYXgoQysyLFEtMSksbnVsbH0sVj0oKT0+e3doaWxlKFg8USl7bGV0IEg9RyhYKTtpZihIPj0wKXtsZXQgQT1CKFgsSCk7aWYoQSE9bnVsbCYmQT4wKXtsZXQgTD1IKzQsVT1MK0E7aWYoUTxVKWJyZWFrOyQoSi5zdWJhcnJheShMLFUpKSxYPVU7Y29udGludWV9fWVsc2UgaWYoUS1YPD1LKWJyZWFrO2xldCBDPXooWCk7aWYoIUMpYnJlYWs7JChKLnN1YmFycmF5KEMucyxDLmUpKSxYPUMuZX1pZihYPjApe2lmKFg8USlKLmNvcHlXaXRoaW4oMCxYLFEpO1EtPVgsTj1OPlg/Ti1YOjAsWD0wfX07cmV0dXJue3B1c2goSCl7aWYoSC5sZW5ndGg9PT0wKXJldHVybjtxKEgpLFYoKX19fWZ1bmN0aW9uIEs3KCQpe2xldCBKPVQobmV3IFNldCksUT1FKChYKT0+e3JldHVybiBKLmN1cnJlbnQuYWRkKFgpLCgpPT57Si5jdXJyZW50LmRlbGV0ZShYKX19LFtdKTtyZXR1cm4geSgoKT0+e2lmKCEkKXJldHVybjtsZXQgWD1uZXcgQWJvcnRDb250cm9sbGVyLEs9ITEsWT1udWxsLHE9bmV3IFVSTCgkKTtxLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgRz1xLnRvU3RyaW5nKCksQj0oKT0+e2lmKEt8fFguc2lnbmFsLmFib3J0ZWR8fFkpcmV0dXJuO1k9c2V0VGltZW91dCgoKT0+e1k9bnVsbCx6KCl9LDEwMDApfSxOPShWKT0+e2lmKEouY3VycmVudC5zaXplPT09MClyZXR1cm47bGV0IEg9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbVl0se3R5cGU6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgQyBvZiBKLmN1cnJlbnQpQyhIKX0sej1hc3luYygpPT57dHJ5e2xldCBIPShhd2FpdCBmZXRjaChHLHtzaWduYWw6WC5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUgpe0IoKTtyZXR1cm59bGV0IEM9WDcoTik7d2hpbGUoITApe2xldHtkb25lOkEsdmFsdWU6TH09YXdhaXQgSC5yZWFkKCk7aWYoQSlicmVhaztpZihMJiZMLmxlbmd0aClDLnB1c2goTCl9fWNhdGNoe31maW5hbGx5e0IoKX19O3JldHVybiB6KCksKCk9PntpZihLPSEwLFkpY2xlYXJUaW1lb3V0KFkpO1guYWJvcnQoKX19LFskXSkse3N1YnNjcmliZUZyYW1lOlEsZnJhbWU6bnVsbH19ZnVuY3Rpb24gWTcoKXtsZXRbJF09ayhuMCk7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiBYMygkLEope3JldHVybiAkPT09ImZpcnN0LWZyYW1lLXRpbWVvdXQiJiZKPT09ImNvbm5lY3RlZCI/ImNvZGVjIjoidHJhbnNwb3J0In12YXIgcTc9ImFsbCI7Y2xhc3MgSzUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJXZWJSVEMgc2lnbmFsaW5nIHN0YXllZCBidXN5IGZvciB0b28gbG9uZy4gUmVsb2FkIHRvIHRyeSBhZ2Fpbi4iKTt0aGlzLm5hbWU9IldlYlJ0Y1NpZ25hbGluZ0J1c3lFcnJvciJ9fWNsYXNzIFkzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiV2ViUlRDIHNpZ25hbGluZyB0aW1lZCBvdXQuIik7dGhpcy5uYW1lPSJXZWJSdGNTaWduYWxpbmdUaW1lb3V0RXJyb3IifX1mdW5jdGlvbiBLMygkKXtyZXR1cm4gJC5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIil9ZnVuY3Rpb24gblooJCxKKXtpZihKPy5hYm9ydGVkKXJldHVybiBQcm9taXNlLnJlamVjdChLMyhKKSk7cmV0dXJuIG5ldyBQcm9taXNlKChRLFgpPT57bGV0IEs9c2V0VGltZW91dChZLCQpO2Z1bmN0aW9uIFkoKXtKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksUSgpfWZ1bmN0aW9uIHEoKXtjbGVhclRpbWVvdXQoSyksWChKP0szKEopOm5ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIikpfUo/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixxLHtvbmNlOiEwfSl9KX1hc3luYyBmdW5jdGlvbiBHNyh7dXJsOiQsc2Vzc2lvbklkOkosa2VlcGFsaXZlOlE9ITEsc2VuZEJlYWNvbjpYLGZldGNoSW1wbDpLPWZldGNofSl7bGV0IFk9SlNPTi5zdHJpbmdpZnkoe3Nlc3Npb25JZDpKfSkscT1YPz8odHlwZW9mIG5hdmlnYXRvcjwidSImJnR5cGVvZiBuYXZpZ2F0b3Iuc2VuZEJlYWNvbj09PSJmdW5jdGlvbiI/bmF2aWdhdG9yLnNlbmRCZWFjb24uYmluZChuYXZpZ2F0b3IpOnZvaWQgMCk7aWYoUSYmcSl0cnl7aWYocSgkLG5ldyBCbG9iKFtZXSx7dHlwZToidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04In0pKSlyZXR1cm59Y2F0Y2h7fWF3YWl0IEsoJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6WSxrZWVwYWxpdmU6UX0pLnRoZW4oKCk9PntyZXR1cm59LCgpPT57cmV0dXJufSl9YXN5bmMgZnVuY3Rpb24gVjcoe3VybDokLGJvZHk6SixzaWduYWw6USxyZXF1ZXN0VGltZW91dE1zOlgsYnVzeVJldHJ5SW50ZXJ2YWxNczpLLGJ1c3lSZXRyeUNvdW50OlksZmV0Y2hJbXBsOnE9ZmV0Y2h9KXtmb3IobGV0IEc9MDtHPD1ZO0crKyl7aWYoUT8uYWJvcnRlZCl0aHJvdyBLMyhRKTtsZXQgQj1uZXcgQWJvcnRDb250cm9sbGVyLE49ITEsej0oKT0+Qi5hYm9ydChRP0szKFEpOnZvaWQgMCk7UT8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHose29uY2U6ITB9KTtsZXQgVj1zZXRUaW1lb3V0KCgpPT57Tj0hMCxCLmFib3J0KCl9LFgpLEg7dHJ5e0g9YXdhaXQgcSgkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sc2lnbmFsOkIuc2lnbmFsLGJvZHk6Sn0pfWNhdGNoKEMpe2lmKE4mJiFRPy5hYm9ydGVkKXRocm93IG5ldyBZMzt0aHJvdyBDfWZpbmFsbHl7Y2xlYXJUaW1lb3V0KFYpLFE/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iix6KX1pZihILnN0YXR1cyE9PTQwOSlyZXR1cm4gSDtpZihhd2FpdCBILmJvZHk/LmNhbmNlbCgpLEc9PT1ZKXRocm93IG5ldyBLNTthd2FpdCBuWihLLFEpfXRocm93IG5ldyBLNX12YXIgclo9W3t1cmxzOlsic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMiJdfSx7dXJsczpbInN0dW46c3R1bjEubC5nb29nbGUuY29tOjE5MzAyIl19XSxhWj0zMDAwLHNaPTIwMDAwLHRaPTQwMDAsZVo9NTAwLCRYPTMwLEpYPTUwMCxRWD01MDAwO2Z1bmN0aW9uIEI3KCl7aWYodHlwZW9mIGNyeXB0by5yYW5kb21VVUlEPT09ImZ1bmN0aW9uIilyZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtsZXQgJD1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDE2KSk7JFs2XT0kWzZdJjE1fDY0LCRbOF09JFs4XSY2M3wxMjg7bGV0IEo9QXJyYXkuZnJvbSgkLChRKT0+US50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKTtyZXR1cm5gJHtKLnNsaWNlKDAsOCl9LSR7Si5zbGljZSg4LDEyKX0tJHtKLnNsaWNlKDEyLDE2KX0tJHtKLnNsaWNlKDE2LDIwKX0tJHtKLnNsaWNlKDIwKX1gfWZ1bmN0aW9uIE43KHtvZmZlclVybDokLGNsb3NlVXJsOkosZW5hYmxlZDpRLGNvZGVjOlg9ImgyNjQiLGljZVNlcnZlcnM6S30pe2xldFtZLHFdPWsobnVsbCksW0csQl09ayhudWxsKSxbTix6XT1rKG51bGwpLFtWLEhdPWsoMCksW0MsQV09ayhudWxsKSxbTCxVXT1rKG51bGwpLEY9VCh2b2lkIDApLFc9VCghMSksdz1UKDApLFA9RSgoKT0+e2lmKFcuY3VycmVudD0hMCx3LmN1cnJlbnQ9MCxGLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChGLmN1cnJlbnQpLEYuY3VycmVudD12b2lkIDA7QihudWxsKSx6KG51bGwpfSxbXSk7cmV0dXJuIHkoKCk9Pnt3LmN1cnJlbnQ9MH0sW1EsJCxKLFgsS10pLHkoKCk9PntpZighUXx8ISQpcmV0dXJuO2lmKEIobnVsbCksdHlwZW9mIFJUQ1BlZXJDb25uZWN0aW9uPiJ1Inx8dHlwZW9mIFJUQ1J0cFJlY2VpdmVyPiJ1Iil7cShudWxsKSxVKG51bGwpLHooIldlYlJUQyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci4iKSxCKHtzZXNzaW9uSWQ6QjcoKSxraW5kOiJwZXJtYW5lbnQifSk7cmV0dXJufWxldCB4PSExLEQ9bnVsbCxuLFI9bnVsbCxkPSExLGk9bmV3IEFib3J0Q29udHJvbGxlcixyPUI3KCksbz1LPy5sZW5ndGg/SzpyWjtpZihVKHIpLHEobnVsbCksQihudWxsKSx6KG51bGwpLFcuY3VycmVudD0hMSxGLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChGLmN1cnJlbnQpLEYuY3VycmVudD12b2lkIDA7bGV0IGE9KHQ9ITEpPT57aWYoUilyZXR1cm4gUjtyZXR1cm4gUj1HNyh7dXJsOkosc2Vzc2lvbklkOnIsa2VlcGFsaXZlOnR9KSxSfSxMMT0oKT0+dm9pZCBhKCEwKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEwxKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixMMSk7bGV0IGw9KCk9PntxKG51bGwpLEQ/LmNsb3NlKCksQShudWxsKX0sbT0odCk9PntpZih4fHxkKXJldHVybjtkPSEwLHoodCksQih7c2Vzc2lvbklkOnIsa2luZDoicGVybWFuZW50In0pLGwoKSxhKCl9LFgxPSgpPT57aWYoeHx8ZClyZXR1cm47ZD0hMCxsKCksYSgpLmZpbmFsbHkoKCk9PntpZigheClCKHtzZXNzaW9uSWQ6cixraW5kOiJjb2RlYyIsY29kZWM6WH0pfSl9LFoxPSh0KT0+e2lmKHh8fGQpcmV0dXJuO2Q9ITAsQihudWxsKTtsZXQgUTE9dy5jdXJyZW50KysscTE9TWF0aC5taW4oSlgqMioqTWF0aC5taW4oUTEsNCksUVgpO3ooYCR7dH0gUmV0cnlpbmcuLi5gKSxsKCksYSgpLmZpbmFsbHkoKCk9PntpZih4KXJldHVybjtuPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57aWYoIXgpSCgoaik9PmorMSl9LHExKX0pfSxIMT0odCk9Pm5ldyBQcm9taXNlKChRMSk9PntpZih0LmljZUdhdGhlcmluZ1N0YXRlPT09ImNvbXBsZXRlIil7UTEoKTtyZXR1cm59bGV0IHExLGo9ITEscD0oKT0+e2lmKGopcmV0dXJuO2lmKGo9ITAsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJpY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSIsXykscTEhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChxMSk7UTEoKX0sXz0oKT0+e2lmKHQuaWNlR2F0aGVyaW5nU3RhdGU9PT0iY29tcGxldGUiKXAoKX07dC5hZGRFdmVudExpc3RlbmVyKCJpY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSIsXykscTE9d2luZG93LnNldFRpbWVvdXQocCxhWil9KTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtEPW5ldyBSVENQZWVyQ29ubmVjdGlvbih7aWNlU2VydmVyczpvLGljZVRyYW5zcG9ydFBvbGljeTpxN30pLEEoRCk7bGV0IHQ9RC5hZGRUcmFuc2NlaXZlcigidmlkZW8iLHtkaXJlY3Rpb246InJlY3Zvbmx5In0pLFExPVJUQ1J0cFJlY2VpdmVyLmdldENhcGFiaWxpdGllcygidmlkZW8iKSxxMT1YPT09ImgyNjQiPyJ2aWRlby9IMjY0IjpYPT09InZwOSI/InZpZGVvL1ZQOSI6InZpZGVvL1ZQOCI7aWYoUTE/LmNvZGVjcy5sZW5ndGgmJiJzZXRDb2RlY1ByZWZlcmVuY2VzImluIHQpe2xldCBnPXExLnRvTG93ZXJDYXNlKCk7dC5zZXRDb2RlY1ByZWZlcmVuY2VzKFsuLi5RMS5jb2RlY3MuZmlsdGVyKCh2KT0+di5taW1lVHlwZS50b0xvd2VyQ2FzZSgpPT09ZyksLi4uUTEuY29kZWNzLmZpbHRlcigodik9PnYubWltZVR5cGUudG9Mb3dlckNhc2UoKSE9PWcpXSl9RC5vbnRyYWNrPShnKT0+e2lmKHgpcmV0dXJuO2lmKFcuY3VycmVudD0hMSxnLnRyYWNrLm9uZW5kZWQ9KCk9PloxKCJXZWJSVEMgdmlkZW8gdHJhY2sgZW5kZWQuIikscShnLnN0cmVhbXNbMF0/P25ldyBNZWRpYVN0cmVhbShbZy50cmFja10pKSxGLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChGLmN1cnJlbnQpO0YuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+e2lmKEYuY3VycmVudD12b2lkIDAseHx8Vy5jdXJyZW50KXJldHVybjtsZXQgdj1EPy5jb25uZWN0aW9uU3RhdGU/PyJjbG9zZWQiO2lmKFgzKCJmaXJzdC1mcmFtZS10aW1lb3V0Iix2KT09PSJjb2RlYyIpWDEoKTtlbHNlIFoxKCJXZWJSVEMgZGlkIG5vdCBlc3RhYmxpc2ggYSB2aWRlbyBwYXRoLiIpfSx0Wil9LEQub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U9KCk9PntpZih4fHwhRHx8RC5jb25uZWN0aW9uU3RhdGUhPT0iZmFpbGVkIilyZXR1cm47aWYoWDMoImNvbm5lY3Rpb24tZmFpbGVkIixELmNvbm5lY3Rpb25TdGF0ZSk9PT0idHJhbnNwb3J0IilaMSgiV2ViUlRDIGNvbm5lY3Rpb24gZmFpbGVkLiIpfTtsZXQgaj1hd2FpdCBELmNyZWF0ZU9mZmVyKCk7YXdhaXQgRC5zZXRMb2NhbERlc2NyaXB0aW9uKGopLGF3YWl0IEgxKEQpO2xldCBwPUQubG9jYWxEZXNjcmlwdGlvbjtpZighcCl0aHJvdyBFcnJvcigiV2ViUlRDIG9mZmVyIHdhcyBub3QgY3JlYXRlZCIpO2xldCBfPWF3YWl0IFY3KHt1cmw6JCxzaWduYWw6aS5zaWduYWwscmVxdWVzdFRpbWVvdXRNczpzWixidXN5UmV0cnlJbnRlcnZhbE1zOmVaLGJ1c3lSZXRyeUNvdW50OiRYLGJvZHk6SlNPTi5zdHJpbmdpZnkoe3R5cGU6cC50eXBlLHNkcDpwLnNkcCxzZXNzaW9uSWQ6cixjb2RlYzpYLGljZVNlcnZlcnM6b30pfSk7aWYoIV8ub2spe2F3YWl0IF8uYm9keT8uY2FuY2VsKCksbShgV2ViUlRDIG9mZmVyIGZhaWxlZDogSFRUUCAke18uc3RhdHVzfWApO3JldHVybn1sZXQgaD1hd2FpdCBfLmpzb24oKTtpZih4KXthd2FpdCBhKCEwKTtyZXR1cm59dHJ5e2F3YWl0IEQuc2V0UmVtb3RlRGVzY3JpcHRpb24oaCl9Y2F0Y2h7bSgiV2ViUlRDIHJldHVybmVkIGFuIGludmFsaWQgc2Vzc2lvbiBkZXNjcmlwdGlvbi4iKX19Y2F0Y2godCl7aWYoeHx8aS5zaWduYWwuYWJvcnRlZClyZXR1cm47aWYodCBpbnN0YW5jZW9mIEs1KXttKHQubWVzc2FnZSk7cmV0dXJufWxldCBRMT10IGluc3RhbmNlb2YgWTM/IldlYlJUQyBzaWduYWxpbmcgdGltZWQgb3V0LiI6IldlYlJUQyBzaWduYWxpbmcgZmFpbGVkLiI7aWYoWDMoInNpZ25hbGluZy1mYWlsZWQiLEQ/LmNvbm5lY3Rpb25TdGF0ZT8/ImNsb3NlZCIpPT09InRyYW5zcG9ydCIpWjEoUTEpfX0pKCksKCk9PntpZih4PSEwLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTDEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEwxKSxpLmFib3J0KCksbiE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KG4pO2lmKEYuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KEYuY3VycmVudCksRi5jdXJyZW50PXZvaWQgMDthKCEwKSxxKG51bGwpLEEobnVsbCksVShudWxsKSxEPy5jbG9zZSgpfX0sW1EsJCxKLFgsSyxWXSkse3N0cmVhbTpZLGZhaWx1cmU6RyxlcnJvcjpOLG1hcmtGcmFtZURlY29kZWQ6UCxwZWVyQ29ubmVjdGlvbjpDLHNlc3Npb25JZDpMfX1mdW5jdGlvbiBxMygkLEosUSxYLEs9ImxlZnQiKXtsZXQgWT1FKChILEMpPT5LPT09ImxlZnQiP0gtQzpDLUgsW0tdKSxxPUUoKEgpPT5NYXRoLm1heChRLE1hdGgubWluKFgsSCkpLFtRLFhdKSxbRyxCXT1rKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEo7bGV0IEg9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLEM9SCE9bnVsbD9OdW1iZXIoSCk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoQyk/cShDKTpKfSksTj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihYLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpYLHo9TWF0aC5tYXgoUSxNYXRoLm1pbihOLEcpKSxWPUUoKEgpPT57SC5wcmV2ZW50RGVmYXVsdCgpO2xldCBDPUguY2xpZW50WCxBPXosTD1ILmN1cnJlbnRUYXJnZXQ7TC5zZXRQb2ludGVyQ2FwdHVyZShILnBvaW50ZXJJZCk7bGV0IFU9KFcpPT57bGV0IHc9cShBK1koQyxXLmNsaWVudFgpKTtCKHcpfSxGPShXKT0+e0wucmVsZWFzZVBvaW50ZXJDYXB0dXJlKFcucG9pbnRlcklkKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixVKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRiksTC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixGKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoQStZKEMsVy5jbGllbnRYKSkpKX1jYXRjaHt9fTtMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixVKSxMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRiksTC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixGKX0sW3EsWSx6LCRdKTtyZXR1cm57d2lkdGg6eixvblBvaW50ZXJEb3duOlZ9fXZhciBaWD04MDAwO2Z1bmN0aW9uIFhYKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIEtYKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIHo3KHt0b2FzdDokLG9uUmV2ZWFsOkosb25EaXNtaXNzOlEsb25QYXVzZTpYLG9uUmVzdW1lOkt9KXtsZXQgWT1Cb29sZWFuKCQuZG93bmxvYWRVcmwmJiQuZG93bmxvYWROYW1lKSxxPUJvb2xlYW4oJC5wYXRoKSxbRyxCXT1rKCExKSxOPVQobnVsbCksej1UKG51bGwpLFY9KCk9PntpZih6LmN1cnJlbnQpY2xlYXJUaW1lb3V0KHouY3VycmVudCk7ei5jdXJyZW50PW51bGx9O3koKCk9PigpPT5WKCksW10pO2xldCBIPShBKT0+e2lmKCEkLnBhdGgpe0EucHJldmVudERlZmF1bHQoKTtyZXR1cm59VigpLFgoKSx6LmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e3ouY3VycmVudD1udWxsLEIoITEpLEsoKX0sWlgpLEEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLFhYKCQucGF0aCkpLEEuZGF0YVRyYW5zZmVyLnNldERhdGEoczUsJC5wYXRoKSxBLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgTD1OLmN1cnJlbnQ7aWYoTClBLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoTCxMLm9mZnNldFdpZHRoLzIsTC5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5CKCEwKSl9LEM9KEEpPT57aWYoVigpLEIoITEpLEtYKEEuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKVEoKTtlbHNlIEsoKX07cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlgsb25Nb3VzZUxlYXZlOkssY2hpbGRyZW46WyQudGh1bWImJlooImltZyIse3JlZjpOLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SixkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIiYmcSxvbkRyYWdTdGFydDpILG9uRHJhZ0VuZDpDLCJhcmlhLWxhYmVsIjpZPyJEb3dubG9hZCBzY3JlZW5zaG90IGFnYWluIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6WT8iRG93bmxvYWQgc2NyZWVuc2hvdCBhZ2FpbiI6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtHPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/WigiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOlk/IkRvd25sb2FkIGFnYWluIjoiT3BlbiBpbiBGaW5kZXIifSldfSksJC5zdGF0dXM9PT0ic2F2ZWQiJiZaKGgyLHtjbGFzc05hbWU6Im1sLWF1dG8gdGV4dC13aGl0ZS84MCBwb2ludGVyLWV2ZW50cy1ub25lIixzaXplOjE2LHN0cm9rZVdpZHRoOjIuMjV9KV19KV19KX12YXIgXzg9MzUwMCxMNz00MDAwLFlYPTFlNDtmdW5jdGlvbiBxWCgpe3JldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCItIikuc2xpY2UoMCwyMyl9ZnVuY3Rpb24gSDcoJCl7bGV0IEo9VChudWxsKSxRPVQobnVsbCksWD1UKG51bGwpLEs9VChudWxsKSxZPVQobnVsbCkscT1UKCExKSxHPUUoKCk9PntpZihYLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFguY3VycmVudCk7WC5jdXJyZW50PW51bGwsSy5jdXJyZW50PW51bGx9LFtdKSxCPUUoKEwpPT57bGV0IFU9TD8/US5jdXJyZW50Pz92b2lkIDA7aWYoRygpLFkuY3VycmVudD1udWxsLHQyLmRpc21pc3MoVSksVT09PXZvaWQgMHx8US5jdXJyZW50PT09U3RyaW5nKFUpKXtsZXQgRj1KLmN1cnJlbnQ/LmRvd25sb2FkVXJsO2lmKEYpVVJMLnJldm9rZU9iamVjdFVSTChGKTtKLmN1cnJlbnQ9bnVsbCxRLmN1cnJlbnQ9bnVsbH19LFtHXSksTj1FKCgpPT57bGV0IEw9Si5jdXJyZW50O2lmKEw/LnBhdGgpSTEoYG9wZW4gLVIgJHtPMShMLnBhdGgpfWApO2Vsc2UgaWYoTD8uZG93bmxvYWRVcmwmJkwuZG93bmxvYWROYW1lKVE1KEwuZG93bmxvYWRVcmwsTC5kb3dubG9hZE5hbWUpfSxbXSksej1FKChMKT0+e0coKTtsZXQgVT1NYXRoLm1heCgwLEwpLEY9US5jdXJyZW50O1kuY3VycmVudD1VLEsuY3VycmVudD1EYXRlLm5vdygpK1UsWC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkIoRj8/dm9pZCAwKSxVKX0sW0csQl0pLFY9RSgoKT0+e2lmKCFYLmN1cnJlbnR8fEsuY3VycmVudD09bnVsbClyZXR1cm47WS5jdXJyZW50PU1hdGgubWF4KDAsSy5jdXJyZW50LURhdGUubm93KCkpLEcoKX0sW0ddKSxIPUUoKCk9PntsZXQgTD1ZLmN1cnJlbnQ7aWYoTD09bnVsbClyZXR1cm47eihMKX0sW3pdKSxDPUUoKEwsVT0xLzApPT57aWYoSi5jdXJyZW50PUwsUS5jdXJyZW50PUwuaWQsdDIuY3VzdG9tKChGKT0+Wih6Nyx7dG9hc3Q6TCxvblJldmVhbDpOLG9uRGlzbWlzczooKT0+QihGKSxvblBhdXNlOlYsb25SZXN1bWU6SH0pLHtpZDpMLmlkLGR1cmF0aW9uOjEvMH0pLE51bWJlci5pc0Zpbml0ZShVKSl6KFUpO2Vsc2UgRygpLFkuY3VycmVudD1udWxsfSxbRyxCLFYsSCxOLHpdKTtyZXR1cm57Y2FwdHVyZTpFKGFzeW5jKCk9PntpZighJHx8cS5jdXJyZW50KXJldHVybjtxLmN1cnJlbnQ9ITA7bGV0IEw9Y3J5cHRvLnJhbmRvbVVVSUQoKTtDKHtpZDpMLHN0YXR1czoic2F2aW5nIixwaGFzZToiaW4ifSk7bGV0IFU9YHNlcnZlLXNpbS1zY3JlZW5zaG90LSR7cVgoKX0ucG5nYCxGPW5ldyBBYm9ydENvbnRyb2xsZXIsVz1zZXRUaW1lb3V0KCgpPT57Ri5hYm9ydChFcnJvcigiU2NyZWVuc2hvdCB0aW1lZCBvdXQiKSl9LFlYKTt0cnl7aWYoIUozKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSkpe2xldCBSPWF3YWl0IHU0KCQse3NpZ25hbDpGLnNpZ25hbH0pLGQ9VVJMLmNyZWF0ZU9iamVjdFVSTChSKTtRNShkLFUpLEMoe2lkOkwsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixkb3dubG9hZFVybDpkLGRvd25sb2FkTmFtZTpVLHRodW1iOmR9LF84KTtyZXR1cm59bGV0IFA9YEY9IiR7YCRIT01FL0Rlc2t0b3AvJHtVfWB9IjsgeGNydW4gc2ltY3RsIGlvICR7TzEoJCl9IHNjcmVlbnNob3QgIiRGIiAmJiBwcmludGYgJyVzJyAiJEYiYCx4PWF3YWl0IEkxKFAse3NpZ25hbDpGLnNpZ25hbH0pLEQ9eC5zdGRvdXQudHJpbSgpO2lmKHguZXhpdENvZGUhPT0wfHwhRCl7Qyh7aWQ6TCxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6eC5zdGRlcnIudHJpbSgpfHwiU2NyZWVuc2hvdCBmYWlsZWQifSxMNyk7cmV0dXJufUMoe2lkOkwsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixwYXRoOkR9LF84KTtsZXQgbj1gL3RtcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC10aHVtYi0ke0x9LnBuZ2A7dHJ5e2xldCBkPShhd2FpdCBJMShgc2lwcyAtWiAzMjAgJHtPMShEKX0gLS1vdXQgJHtPMShuKX0gPi9kZXYvbnVsbCAyPiYxICYmIGJhc2U2NCAtaSAke08xKG4pfTsgcm0gLWYgJHtPMShuKX1gLHtzaWduYWw6Ri5zaWduYWx9KSkuc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKTtpZihkKXtsZXQgaT1KLmN1cnJlbnQ7aWYoaT8uaWQ9PT1MKUMoey4uLmksdGh1bWI6YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke2R9YH0sXzgpfX1jYXRjaHt9fWNhdGNoKHcpe0Moe2lkOkwsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOncgaW5zdGFuY2VvZiBFcnJvcj93Lm1lc3NhZ2U6IlNjcmVlbnNob3QgZmFpbGVkIn0sTDcpfWZpbmFsbHl7Y2xlYXJUaW1lb3V0KFcpLHEuY3VycmVudD0hMX19LFskLENdKSxyZXZlYWw6TixkaXNtaXNzOkJ9fWZ1bmN0aW9uIEM3KHtkZWZhdWx0V2lkdGg6JCx2aWV3cG9ydFdpZHRoOkosdmlld3BvcnRIZWlnaHQ6USxhc3BlY3RSYXRpbzpYLG9uU3RhcnQ6S30pe2xldCBZPWQ1KCksW3EsR109ayghMSksW0IsTl09ayghMSksW3osVl09ayghMSksSD1UKG51bGwpLEM9VChbXSksQT1UKG51bGwpLEw9VChudWxsKSxVPVQobnVsbCksRj1UKG51bGwpLFc9RSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO2xldCBfPU5hTjt0cnl7bGV0IGg9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFE4KTtfPWghPW51bGw/TnVtYmVyKGgpOk5hTn1jYXRjaHt9cmV0dXJuIG82KCQsSixRLFgsXyl9LFtYLCQsUSxKXSksdz1rMSgoKT0+VygpLFtXXSksW1AseF09ayh3KSxEPVQodyksbj1UKCQpLFI9WjgoJCxKLFEsWCksZD1NYXRoLm1pbih3NixSKSxpPVA/PyQscj10MChpLCQsSixRLFgpLG89RSgoXyk9PntsZXQgaD1pNShfKTtELmN1cnJlbnQ9aCx4KGgpfSxbXSksYT1FKChfKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgaD10MChfLCQsSixRLFgpO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oUTgsU3RyaW5nKGgvJCkpfWNhdGNoe319LFtYLCQsUSxKXSksTDE9RSgoXyk9PntpZihVLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KFUuY3VycmVudCk7VS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntVLmN1cnJlbnQ9bnVsbCxhKF8pfSxjNil9LFthXSk7eSgoKT0+e2lmKHF8fEIpcmV0dXJuO2xldCBfPUQuY3VycmVudDtpZihfPT1udWxsKXJldHVybjtsZXQgaD10MChfLCQsSixRLFgpO2lmKGghPT1fKW8oaCl9LFtYLCQsQixxLFEsSixvXSkseSgoKT0+e2lmKG4uY3VycmVudD09PSQpcmV0dXJuO24uY3VycmVudD0kLG8oVygpKX0sWyQsVyxvXSkseSgoKT0+e2lmKCFxJiYhQilyZXR1cm47bGV0IF89ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IsaD1kb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QsZz1kb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q7cmV0dXJuIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPSJud3NlLXJlc2l6ZSIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PSJub25lIixkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLCgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Xyxkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9aCxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Z319LFtxLEJdKSx5KCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCBfPSgpPT57bGV0IGc9RC5jdXJyZW50O2lmKGc9PW51bGwpcmV0dXJuO2lmKFUuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoVS5jdXJyZW50KSxVLmN1cnJlbnQ9bnVsbDthKGcpfSxoPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpXygpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixfKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixoKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCl9fSxbYV0pO2xldCBsPUUoKF8pPT57aWYoXz5SKXJldHVybiBSK1g4KF8tUixSKTtpZihfPGQpcmV0dXJuIGQtWDgoZC1fLFIpO3JldHVybiBffSxbUixkXSksbT1FKCgpPT57aWYoTC5jdXJyZW50KUwuY3VycmVudCgpLEwuY3VycmVudD1udWxsO04oITEpfSxbXSksWDE9RSgoXyk9PntsZXQgaD1wZXJmb3JtYW5jZS5ub3coKSxnPUMuY3VycmVudDtnLnB1c2goe3Q6aCx4Ol99KTt3aGlsZShnLmxlbmd0aD4xJiZoLWdbMF0udD5kNilnLnNoaWZ0KCl9LFtdKSxaMT1FKChfKT0+e2xldCBoPWwoXyk7aWYoQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCk7QS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0EuY3VycmVudD1udWxsLG8oaCksWDEoaCl9KX0sW2wsWDEsb10pLEgxPUUoKF8saCxnKT0+e20oKTtsZXQgdj1ELmN1cnJlbnQ/PyQ7SC5jdXJyZW50PXtwb2ludGVySWQ6XyxzdGFydFg6aCxzdGFydFk6ZyxzdGFydFdpZHRoOnZ9LEMuY3VycmVudD1be3Q6cGVyZm9ybWFuY2Uubm93KCkseDp2fV0sSygpLEcoITApfSxbbSwkLEtdKSx0PUUoKCk9PntsZXQgXz1ILmN1cnJlbnQ7aWYoSC5jdXJyZW50PW51bGwsQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCksQS5jdXJyZW50PW51bGw7aWYoXyYmXy5wb2ludGVySWQ+PTApe2xldCBFMT1GLmN1cnJlbnQ7aWYoRTE/Lmhhc1BvaW50ZXJDYXB0dXJlKF8ucG9pbnRlcklkKSlFMS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoXy5wb2ludGVySWQpfUcoITEpO2xldCBoPUQuY3VycmVudD8/JCxnPXI2KEMuY3VycmVudCk7Qy5jdXJyZW50PVtdO2xldCB2PXQwKGgrZypsNiwkLEosUSxYKSxZMT1pNShpNih2LFskXSxtNikpLEcxPU1hdGguYWJzKGgtWTEpPDAuNSYmTWF0aC5hYnMoZyk8ODtpZihZfHxHMSl7byhZMSksTDEoWTEpO3JldHVybn1OKCEwKSxMLmN1cnJlbnQ9bjYoe2Zyb206aCx0bzpZMSx2ZWxvY2l0eTpnLHN0aWZmbmVzczpwNixkYW1waW5nOnU2LG9uVXBkYXRlOm8sb25Db21wbGV0ZTooKT0+e0wuY3VycmVudD1udWxsLE4oITEpLEwxKFkxKX19KX0sW1gsJCxZLEwxLFEsSixvXSk7eSgoKT0+e3JldHVybigpPT57aWYobSgpLEEuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShBLmN1cnJlbnQpO2lmKFUuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KFUuY3VycmVudCksRC5jdXJyZW50IT1udWxsKWEoRC5jdXJyZW50KX19fSxbbSxhXSkseSgoKT0+e2lmKCFxKXJldHVybjtsZXQgXz0oKT0+dCgpLGg9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIil0KCl9LGc9KHYpPT57bGV0IFkxPUguY3VycmVudDtpZighWTF8fFkxLnBvaW50ZXJJZCE9PXYucG9pbnRlcklkKXJldHVybjt2LnByZXZlbnREZWZhdWx0KCksWjEoVTcoWTEsdi5jbGllbnRYLHYuY2xpZW50WSxYKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsXyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixnLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixfLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsXywhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsXyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixnLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixfLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsXywhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCl9fSxbWCx0LHEsWjFdKTtsZXQgUTE9RSgoXyk9PntsZXQgaD1ILmN1cnJlbnQ7aWYoIWh8fGgucG9pbnRlcklkIT09Xy5wb2ludGVySWQpcmV0dXJuO18ucHJldmVudERlZmF1bHQoKSxfLnN0b3BQcm9wYWdhdGlvbigpLHQoKX0sW3RdKSxxMT1FKChfKT0+e2lmKF8uYnV0dG9uIT09MClyZXR1cm47Xy5wcmV2ZW50RGVmYXVsdCgpLF8uc3RvcFByb3BhZ2F0aW9uKCksXy5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKF8ucG9pbnRlcklkKSxIMShfLnBvaW50ZXJJZCxfLmNsaWVudFgsXy5jbGllbnRZKX0sW0gxXSksaj1FKChfKT0+e2xldCBoPUguY3VycmVudDtpZighaHx8aC5wb2ludGVySWQhPT1fLnBvaW50ZXJJZClyZXR1cm47Xy5wcmV2ZW50RGVmYXVsdCgpLFoxKFU3KGgsXy5jbGllbnRYLF8uY2xpZW50WSxYKSl9LFtYLFoxXSkscD1FKChfKT0+e2xldCBoPV8ua2V5PT09IkFycm93UmlnaHQifHxfLmtleT09PSJBcnJvd0Rvd24iPzE6Xy5rZXk9PT0iQXJyb3dMZWZ0Inx8Xy5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihoPT09MClyZXR1cm47Xy5wcmV2ZW50RGVmYXVsdCgpLG0oKTtsZXQgZz1fLnNoaWZ0S2V5PzgwOjI0LHY9aTUodDAocitoKmcsJCxKLFEsWCkpO28odiksTDEodil9LFtYLG0sciwkLEwxLFEsSixvXSk7cmV0dXJue2hhbmRsZVJlZjpGLHdpZHRoOmksY29tbWl0dGVkV2lkdGg6cixtaW5XaWR0aDpkLG1heFdpZHRoOlIsaXNSZXNpemluZzpxLGlzSW5lcnRpYTpCLGhhbmRsZUhvdmVyZWQ6eixoYW5kbGVBY3RpdmU6enx8cXx8QixzZXRIYW5kbGVIb3ZlcmVkOlYsb25Qb2ludGVyRG93bjpxMSxvblBvaW50ZXJNb3ZlOmosb25Qb2ludGVyRW5kOlExLG9uS2V5RG93bjpwfX1mdW5jdGlvbiBVNygkLEosUSxYKXtsZXQgSz1KLSQuc3RhcnRYLFk9KFEtJC5zdGFydFkpKlg7cmV0dXJuICQuc3RhcnRXaWR0aCsoTWF0aC5hYnMoSyk+PU1hdGguYWJzKFkpP0s6WSl9ZnVuY3Rpb24gTzcoKXtsZXQgJD1UKG5ldyBNYXApLEo9VChuZXcgTWFwKSxRPUUoKEcpPT57bGV0IEI9Si5jdXJyZW50LmdldChHKTtpZihCKWNsZWFyVGltZW91dChCKTtKLmN1cnJlbnQuZGVsZXRlKEcpfSxbXSksWD1FKChHLEI9MS8wKT0+e3QyLmN1c3RvbSgoKT0+WihaNCx7dG9hc3Q6R30pLHtpZDpHLmlkLGR1cmF0aW9uOkJ9KX0sW10pLEs9RSgoRyxCKT0+e2xldCBOPWNyeXB0by5yYW5kb21VVUlEKCksej17aWQ6TixuYW1lOkcsa2luZDpCLHN0YXR1czoidXBsb2FkaW5nIixwcm9ncmVzczowfTtyZXR1cm4gJC5jdXJyZW50LnNldChOLHopLFgoeiksTn0sW1hdKSxZPUUoKEcsQik9PntsZXQgTj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFOKXJldHVybjtRKEcpO2xldCB6PXsuLi5OLC4uLkJ9O2lmKCQuY3VycmVudC5zZXQoRyx6KSxYKHosQi5zdGF0dXM9PT0ic3VjY2VzcyJ8fEIuc3RhdHVzPT09ImVycm9yIj8zMDAwOjEvMCksQi5zdGF0dXM9PT0ic3VjY2VzcyJ8fEIuc3RhdHVzPT09ImVycm9yIil7bGV0IFY9c2V0VGltZW91dCgoKT0+eyQuY3VycmVudC5kZWxldGUoRyksSi5jdXJyZW50LmRlbGV0ZShHKX0sMzAwMCk7Si5jdXJyZW50LnNldChHLFYpfX0sW1EsWF0pLHE9RSgoRyxCKT0+e2xldCBOPSQuY3VycmVudC5nZXQoRyk7aWYoIU4pcmV0dXJuO2xldCB6PXsuLi5OLHByb2dyZXNzOkJ9OyQuY3VycmVudC5zZXQoRyx6KSxYKHopfSxbWF0pO3JldHVybnthZGQ6Syx1cGRhdGU6WSxzZXRQcm9ncmVzczpxfX1mdW5jdGlvbiBGNygkLEope2xldFtRLFhdPWsoW10pLFtLLFldPWsobnVsbCksW3EsR109ayghMSksQj1FKGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IE49YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLHo9YXdhaXQgTi5qc29uKCk7aWYoIU4ub2t8fHouZXJyb3IpdGhyb3cgRXJyb3Ioei5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7bGV0IFY9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3cubG9jYXRpb24sSD16LnRhcmdldHM/P1tdO1goVj9ILm1hcCgoQyk9PnM0KEMsVikpOkgpfWNhdGNoKE4pe1koTiBpbnN0YW5jZW9mIEVycm9yP04ubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7RyghMSl9fSxbJF0pO3JldHVybiB5KCgpPT57aWYoIUopcmV0dXJuO0IoKTtsZXQgTj1zZXRJbnRlcnZhbCgoKT0+dm9pZCBCKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoTil9LFtKLEJdKSx7dGFyZ2V0czpRLGVycm9yOkssbG9hZGluZzpxLHJlZnJlc2g6Qn19dmFyIEdYPTYwLFZYPTEwMDAsQlg9NjAwMDA7ZnVuY3Rpb24gQTcoJCxKKXtsZXQgUT1uZXcgVVJMKCQsd2luZG93LmxvY2F0aW9uLmhyZWYpO2ZvcihsZXRbWCxLXW9mIE9iamVjdC5lbnRyaWVzKEopKWlmKEs9PW51bGx8fEs9PT0iIilRLnNlYXJjaFBhcmFtcy5kZWxldGUoWCk7ZWxzZSBRLnNlYXJjaFBhcmFtcy5zZXQoWCxTdHJpbmcoSykpO3JldHVybmAke1EucGF0aG5hbWV9JHtRLnNlYXJjaH1gfWZ1bmN0aW9uIE03KCQsSixRLFgsSz1HWCl7bGV0W1kscV09ayhudWxsKSxbRyxCXT1rKFtdKSxbTix6XT1rKDApLFtWLEhdPWsoSyksW0MsQV09aygwKSxMPVQoWCk7TC5jdXJyZW50PVgseSgoKT0+e2lmKCFRfHwhJClyZXR1cm47bGV0IEQ9ITEsbj1hc3luYygpPT57dHJ5e2xldCBpPWF3YWl0KGF3YWl0IGZldGNoKEE3KCQse2xpbWl0OlYsb2Zmc2V0OjAsZGV2aWNlOkwuY3VycmVudH0pKSkuanNvbigpO2lmKEQpcmV0dXJuO2lmKHEoaS5kZXZpY2VzPz9bXSksdHlwZW9mIGkudG90YWw9PT0ibnVtYmVyIil6KGkudG90YWwpfWNhdGNoe2lmKCFEKXEoW10pfX07bigpO2xldCBSPXNldEludGVydmFsKG4sQlgpO3JldHVybigpPT57RD0hMCxjbGVhckludGVydmFsKFIpfX0sWyQsUSxDLFZdKSx5KCgpPT57aWYoIVF8fCFKKXJldHVybjtsZXQgRD1BMChBNyhKLHtkZXZpY2U6WH0pKTtyZXR1cm4gRC5vbm1lc3NhZ2U9KG4pPT57dHJ5e2xldCBSPUpTT04ucGFyc2Uobi5kYXRhKTtpZihBcnJheS5pc0FycmF5KFIuc3RhdHVzZXMpKUIoUi5zdGF0dXNlcyl9Y2F0Y2h7fX0sKCk9PkQuY2xvc2UoKX0sW1EsWCxKXSk7bGV0IFU9VCgiIik7eSgoKT0+e2lmKCFZfHwhSDYoWSxHLFYpKXtVLmN1cnJlbnQ9IiI7cmV0dXJufWxldCBEPUcuc2xpY2UoMCxWKS5tYXAoKG4pPT5uLmRldmljZSkuam9pbigiLCIpO2lmKEQ9PT1VLmN1cnJlbnQpcmV0dXJuO1UuY3VycmVudD1ELEEoKG4pPT5uKzEpfSxbWSxHLFZdKTtsZXQgRj1rMSgoKT0+WT09PW51bGw/bnVsbDpMNihZLEcpLFtZLEddKSxXPUUoKCk9PkgoKEQpPT5EK0spLFtLXSksdz1FKCgpPT5IKFZYKSxbXSksUD1FKCgpPT5IKEspLFtLXSkseD1OPihGPy5sZW5ndGg/PzApO3JldHVybntkZXZpY2VzOkYsdG90YWw6Tixsb2FkTW9yZTpXLGxvYWRBbGw6dyxyZXNldFBhZ2U6UCxoYXNNb3JlOnh9fXZhciBrNz17bWpwZWdGcHM6NjAsbWpwZWdRdWFsaXR5OjAuNyxtYXhEaW1lbnNpb246MCxoMjY0Qml0cmF0ZTo2MDAwMDAwLGgyNjRGcHM6NjB9LE5YPXt0cmFuc3BvcnQ6Imh0dHAiLGh0dHBDb2RlYzoiYXV0byIsd2ViUnRjQ29kZWM6ImgyNjQiLC4uLms3fTtmdW5jdGlvbiB6WCgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ibnVtYmVyIiYmTnVtYmVyLmlzRmluaXRlKCQpPyQ6bnVsbH1mdW5jdGlvbiBXNygkLEosUSxYKXtsZXQgSz16WCgkKTtyZXR1cm4gSz09bnVsbD9KOk1hdGgubWluKFgsTWF0aC5tYXgoUSxLKSl9ZnVuY3Rpb24gRzMoJCxKLFEsWCl7cmV0dXJuIE1hdGgucm91bmQoVzcoJCxKLFEsWCkpfWZ1bmN0aW9uIExYKCQpe2lmKCFBcnJheS5pc0FycmF5KCQpfHwkLmxlbmd0aD4xNilyZXR1cm4gbnVsbDtsZXQgSj1bXTtmb3IobGV0IFEgb2YgJCl7aWYoIVF8fHR5cGVvZiBRIT09Im9iamVjdCIpcmV0dXJuIG51bGw7bGV0IFg9US51cmxzO2lmKCFBcnJheS5pc0FycmF5KFgpfHxYLmxlbmd0aD09PTB8fFgubGVuZ3RoPjE2fHwhWC5ldmVyeSgocSk9PnR5cGVvZiBxPT09InN0cmluZyImJnEubGVuZ3RoPD0yMDQ4JiYvXihzdHVufHN0dW5zfHR1cm58dHVybnMpOi9pLnRlc3QocSkpKXJldHVybiBudWxsO2xldHt1c2VybmFtZTpLLGNyZWRlbnRpYWw6WX09UTtpZihLIT09dm9pZCAwJiZ0eXBlb2YgSyE9PSJzdHJpbmciKXJldHVybiBudWxsO2lmKFkhPT12b2lkIDAmJnR5cGVvZiBZIT09InN0cmluZyIpcmV0dXJuIG51bGw7Si5wdXNoKHt1cmxzOlgsLi4udHlwZW9mIEs9PT0ic3RyaW5nIj97dXNlcm5hbWU6S306e30sLi4udHlwZW9mIFk9PT0ic3RyaW5nIj97Y3JlZGVudGlhbDpZfTp7fX0pfXJldHVybiBKfWZ1bmN0aW9uIEQ4KCQ9e30sSj1OWCl7bGV0IFg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCQsImljZVNlcnZlcnMiKT9MWCgkLmljZVNlcnZlcnMpOkouaWNlU2VydmVycyxLPVg9PT1udWxsP0ouaWNlU2VydmVyczpYJiZYLmxlbmd0aD4wP1g6dm9pZCAwO3JldHVybnt0cmFuc3BvcnQ6JC50cmFuc3BvcnQ9PT0iaHR0cCJ8fCQudHJhbnNwb3J0PT09IndlYnJ0YyI/JC50cmFuc3BvcnQ6Si50cmFuc3BvcnQsaHR0cENvZGVjOiQuaHR0cENvZGVjPT09ImF1dG8ifHwkLmh0dHBDb2RlYz09PSJtanBlZyJ8fCQuaHR0cENvZGVjPT09ImgyNjQiPyQuaHR0cENvZGVjOkouaHR0cENvZGVjLHdlYlJ0Y0NvZGVjOiQud2ViUnRjQ29kZWM9PT0idnA4Inx8JC53ZWJSdGNDb2RlYz09PSJ2cDkifHwkLndlYlJ0Y0NvZGVjPT09ImgyNjQiPyQud2ViUnRjQ29kZWM6Si53ZWJSdGNDb2RlYywuLi5LP3tpY2VTZXJ2ZXJzOkt9Ont9LC4uLlk1KCQsSil9fWZ1bmN0aW9uIFk1KCQ9e30sSj1rNyl7cmV0dXJue21qcGVnRnBzOkczKCQubWpwZWdGcHMsSi5tanBlZ0ZwcywxLDEyMCksbWpwZWdRdWFsaXR5Olc3KCQubWpwZWdRdWFsaXR5LEoubWpwZWdRdWFsaXR5LDAuMDUsMSksbWF4RGltZW5zaW9uOkczKCQubWF4RGltZW5zaW9uLEoubWF4RGltZW5zaW9uLDAsNDA5NiksaDI2NEJpdHJhdGU6RzMoJC5oMjY0Qml0cmF0ZSxKLmgyNjRCaXRyYXRlLDFlNSw1MDAwMDAwMCksaDI2NEZwczpHMygkLmgyNjRGcHMsSi5oMjY0RnBzLDEsMTQwKX19ZnVuY3Rpb24gcTUoJCl7cmV0dXJue21qcGVnRnBzOiQubWpwZWdGcHMsbWpwZWdRdWFsaXR5OiQubWpwZWdRdWFsaXR5LG1heERpbWVuc2lvbjokLm1heERpbWVuc2lvbixoMjY0Qml0cmF0ZTokLmgyNjRCaXRyYXRlLGgyNjRGcHM6JC5oMjY0RnBzfX1mdW5jdGlvbiBfNygkKXtyZXR1cm4gJD8udHJhbnNwb3J0PT09IndlYnJ0YyJ9ZnVuY3Rpb24gRDcoJCl7bGV0IEo9JD97bWpwZWdGcHM6JC5tanBlZ0ZwcyxtanBlZ1F1YWxpdHk6JC5tanBlZ1F1YWxpdHksbWF4RGltZW5zaW9uOiQubWF4RGltZW5zaW9uLGgyNjRCaXRyYXRlOiQuaDI2NEJpdHJhdGUsaDI2NEZwczokLmgyNjRGcHN9Ont9O2lmKCQ/LnRyYW5zcG9ydD09PSJ3ZWJydGMiKXJldHVybiBEOCh7dHJhbnNwb3J0OiJ3ZWJydGMiLHdlYlJ0Y0NvZGVjOiQuY29kZWMsaWNlU2VydmVyczokLmljZVNlcnZlcnMsLi4uSn0pO3JldHVybiBEOCh7dHJhbnNwb3J0OiJodHRwIixodHRwQ29kZWM6JD8uY29kZWM/PyJhdXRvIiwuLi5KfSl9ZnVuY3Rpb24gVjMoJCxKKXtyZXR1cm4gRDgoey4uLiQsLi4uSn0sJCl9ZnVuY3Rpb24gUDcoJCxKLFE9ITEpe2lmKCFRKXJldHVybiBWMygkLEopO2xldCBYPXt9O2lmKEoud2ViUnRjQ29kZWMhPT12b2lkIDApWC53ZWJSdGNDb2RlYz1KLndlYlJ0Y0NvZGVjO2lmKEouaWNlU2VydmVycyE9PXZvaWQgMClYLmljZVNlcnZlcnM9Si5pY2VTZXJ2ZXJzO2lmKE9iamVjdC5rZXlzKFgpLmxlbmd0aD09PTApcmV0dXJuICQ7cmV0dXJuIFYzKCQsey4uLlgsdHJhbnNwb3J0OiJ3ZWJydGMifSl9ZnVuY3Rpb24gRzUoJCxKKXtsZXQgUT1xNSgkKSxYPVk1KHsuLi5RLC4uLkp9LFEpO2lmKFgubWpwZWdGcHM9PT1RLm1qcGVnRnBzJiZYLm1qcGVnUXVhbGl0eT09PVEubWpwZWdRdWFsaXR5JiZYLm1heERpbWVuc2lvbj09PVEubWF4RGltZW5zaW9uJiZYLmgyNjRCaXRyYXRlPT09US5oMjY0Qml0cmF0ZSYmWC5oMjY0RnBzPT09US5oMjY0RnBzKXJldHVybiAkO3JldHVybnsuLi4kLC4uLlh9fXZhciBJNz0ic2VydmUtc2ltOmNvZGVjIixIWD0zMDAwO2Z1bmN0aW9uIFQ3KCQpe2xldCBKPUQ3KCQpO2lmKEoudHJhbnNwb3J0IT09Imh0dHAifHxKLmh0dHBDb2RlYyE9PSJhdXRvIilyZXR1cm4gSjt0cnl7bGV0IFE9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEk3KTtpZihRPT09ImF1dG8ifHxRPT09Im1qcGVnInx8UT09PSJoMjY0IilyZXR1cm4gVjMoSix7aHR0cENvZGVjOlF9KX1jYXRjaHt9cmV0dXJuIEp9ZnVuY3Rpb24gdzcoe2RldmljZTokLGVuZHBvaW50OkosaW5pdGlhbFNldHRpbmdzOlF9KXtsZXQgWD1fNyhRKSxbSyxZXT1rKCgpPT5UNyhRKSksW3EsR109ayghMSksQj1UKEspLE49VCghMSksej1UKDApLFY9VChudWxsKSxIPVQobnVsbCk7eSgoKT0+eysrei5jdXJyZW50O2xldCBMPVQ3KFEpO2lmKFYuY3VycmVudD8uYWJvcnQoKSxILmN1cnJlbnQ/LmFib3J0KCksVi5jdXJyZW50PW51bGwsSC5jdXJyZW50PW51bGwsQi5jdXJyZW50PUwsTi5jdXJyZW50PSExLFkoTCksRyghMSksIUopcmV0dXJuO2xldCBVPSExLEY9ITEsVz1hc3luYygpPT57aWYoVXx8Ti5jdXJyZW50fHxWLmN1cnJlbnQpcmV0dXJuO2xldCB4PSsrei5jdXJyZW50LEQ9bmV3IEFib3J0Q29udHJvbGxlcjtWLmN1cnJlbnQ9RDt0cnl7bGV0IG49YXdhaXQgZmV0Y2goSix7Y2FjaGU6Im5vLXN0b3JlIixzaWduYWw6RC5zaWduYWx9KTtpZighbi5vayl0aHJvdyBFcnJvcihgU3RyZWFtIHNldHRpbmdzIHJlcXVlc3QgZmFpbGVkICgke24uc3RhdHVzfSlgKTtsZXQgUj1ZNShhd2FpdCBuLmpzb24oKSxxNShCLmN1cnJlbnQpKTtpZighRC5zaWduYWwuYWJvcnRlZCYmei5jdXJyZW50PT09eCl7bGV0IGQ9Qi5jdXJyZW50LGk9RzUoZCxSKTtpZihpIT09ZClCLmN1cnJlbnQ9aSxZKGkpfUY9ITF9Y2F0Y2gobil7aWYoIUQuc2lnbmFsLmFib3J0ZWQmJiFGKUY9ITAsY29uc29sZS53YXJuKCJGYWlsZWQgdG8gbG9hZCBzdHJlYW0gc2V0dGluZ3MiLG4pfWZpbmFsbHl7aWYoVi5jdXJyZW50PT09RClWLmN1cnJlbnQ9bnVsbH19O1coKTtsZXQgdz0oKT0+e2lmKHR5cGVvZiBkb2N1bWVudD4idSJ8fGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSE9PSJoaWRkZW4iKVcoKX0sUD1zZXRJbnRlcnZhbCh3LEhYKTtpZih0eXBlb2Ygd2luZG93PCJ1Iil3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHcpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdyk7cmV0dXJuKCk9PntpZihVPSEwLGNsZWFySW50ZXJ2YWwoUCksdHlwZW9mIHdpbmRvdzwidSIpd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix3KTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHcpO1YuY3VycmVudD8uYWJvcnQoKSxILmN1cnJlbnQ/LmFib3J0KCksVi5jdXJyZW50PW51bGwsSC5jdXJyZW50PW51bGx9fSxbJCxKLFFdKTtsZXQgQz1FKChMKT0+e2lmKCFYJiZMLmh0dHBDb2RlYyE9PXZvaWQgMCl0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEk3LEwuaHR0cENvZGVjKX1jYXRjaHt9bGV0IFU9UDcoQi5jdXJyZW50LEwsWCk7aWYoVT09PUIuY3VycmVudClyZXR1cm47Qi5jdXJyZW50PVUsWShVKX0sW1hdKSxBPUUoKEwpPT57aWYoIUp8fE4uY3VycmVudHx8T2JqZWN0LmtleXMoTCkubGVuZ3RoPT09MClyZXR1cm47bGV0IFU9Qi5jdXJyZW50LEY9RzUoVSxMKTtCLmN1cnJlbnQ9RixZKEYpLFYuY3VycmVudD8uYWJvcnQoKSxWLmN1cnJlbnQ9bnVsbDtsZXQgVz0rK3ouY3VycmVudCx3PW5ldyBBYm9ydENvbnRyb2xsZXI7SC5jdXJyZW50PXcsTi5jdXJyZW50PSEwLEcoITApLGZldGNoKEose21ldGhvZDoiUEFUQ0giLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShMKSxzaWduYWw6dy5zaWduYWx9KS50aGVuKGFzeW5jKFApPT57aWYoIVAub2spdGhyb3cgRXJyb3IoYFN0cmVhbSBzZXR0aW5ncyB1cGRhdGUgZmFpbGVkICgke1Auc3RhdHVzfSlgKTtsZXQgeD1ZNShhd2FpdCBQLmpzb24oKSxxNShGKSk7aWYoIXcuc2lnbmFsLmFib3J0ZWQmJnouY3VycmVudD09PVcpe2xldCBEPUc1KEIuY3VycmVudCx4KTtCLmN1cnJlbnQ9RCxZKEQpfX0pLmNhdGNoKChQKT0+e2lmKHcuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2lmKGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHVwZGF0ZSBzdHJlYW0gc2V0dGluZ3MiLFApLHouY3VycmVudD09PVcpe2xldCB4PUc1KEIuY3VycmVudCxxNShVKSk7Qi5jdXJyZW50PXgsWSh4KX19KS5maW5hbGx5KCgpPT57aWYoSC5jdXJyZW50PT09dylILmN1cnJlbnQ9bnVsbDtpZighdy5zaWduYWwuYWJvcnRlZCYmei5jdXJyZW50PT09VylOLmN1cnJlbnQ9ITEsRyghMSl9KX0sW0pdKTtyZXR1cm57c2V0dGluZ3M6Syx1cGRhdGVQbGF5YmFjazpDLHVwZGF0ZUVuY29kZXI6QSxwZW5kaW5nOnEsdHJhbnNwb3J0TG9ja2VkOlgsZW5jb2RlclNldHRpbmdzQXZhaWxhYmxlOiEhSn19dmFyIFA4PXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gRTcoJCxKKXtzd2l0Y2goSil7Y2FzZSJkZWNvZGVkLWZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UiZXJyb3IiOnJldHVybiAkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiBQOH19dmFyIGI3PTQwMDA7dmFyIFVYPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiB5NygkKXtyZXR1cm4gVVhbJF0/P251bGx9dmFyIFQ4PTMyMCxTNz03NjAsSTg9MzAwO2Z1bmN0aW9uIHc4KCQsSil7aWYoISQpcmV0dXJuIG51bGw7aWYoISQuZGV2aWNlKXJldHVybiAkO2lmKCEkLnByb3h5SGVscGVycylyZXR1cm4gJDtsZXQgWD1gJHskLmJhc2VQYXRoPT09Ii8iPyIiOigkLmJhc2VQYXRoPz8iIikucmVwbGFjZSgvXC8rJC8sIiIpfS9oZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJC5kZXZpY2UpfWAsSz1gJHtKLnByb3RvY29sfS8vJHtKLmhvc3R9YCxZPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiI7cmV0dXJuey4uLiQsdXJsOmAke0t9JHtYfWAsc3RyZWFtVXJsOmAke0t9JHtYfS9zdHJlYW0ubWpwZWdgLHdzVXJsOmAke1l9Ly8ke0ouaG9zdH0ke1h9L3dzYH19ZnVuY3Rpb24geDcoJCl7bGV0IEo9bmV3IFVSTFNlYXJjaFBhcmFtcygkLnNlYXJjaCkuZ2V0KCJsb2dzIik7aWYoSiE9PW51bGwpcmV0dXJuIEo9PT0iMSI7cmV0dXJuIEozKCQuaG9zdG5hbWUpfWZ1bmN0aW9uIGo3KCQsSil7bGV0IFE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEopKSxYPW5ldyBVaW50OEFycmF5KDErUS5sZW5ndGgpO3JldHVybiBYWzBdPSQsWC5zZXQoUSwxKSxYfWZ1bmN0aW9uIENYKCQsSixRPTMyKXtsZXQgWD1bLi4uJCxKXTtyZXR1cm4gWC5sZW5ndGg+UT9YLnNsaWNlKFgubGVuZ3RoLVEpOlh9ZnVuY3Rpb24gRTgoJCxKLFE9RGF0ZS5ub3coKSxYPTE1MDApe2xldCBLPUouZmlsdGVyKChZKT0+US1ZLmNyZWF0ZWRBdDw9WCk7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIEs7Zm9yKGxldCBZIG9mIEspJC5zZW5kKGo3KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiB2NygkLEosUSxYLEs9RGF0ZS5ub3coKSl7bGV0IFk9RTgoJCxKLEspO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQoajcoUSxYKS5idWZmZXIpLFk7cmV0dXJuIENYKFkse3RhZzpRLHBheWxvYWQ6WCxjcmVhdGVkQXQ6S30pfXZhciBPWD17aDI2NDpbImgyNjQiLCJ2cDgiLCJ2cDkiXSx2cDk6WyJ2cDkiLCJ2cDgiXSx2cDg6WyJ2cDgiXX07ZnVuY3Rpb24gRlgoJCxKKXtsZXQgUT1PWFskXSxYPVEuaW5kZXhPZihKKTtpZihYPT09LTEpcmV0dXJuIFFbMF0/P251bGw7cmV0dXJuIFFbWCsxXT8/bnVsbH1mdW5jdGlvbiBSNygkLEosUSl7aWYoUS5raW5kPT09InBlcm1hbmVudCIpcmV0dXJue3R5cGU6InN3aXRjaC10by1odHRwIn07aWYoUS5jb2RlYyE9PUopcmV0dXJuIG51bGw7bGV0IFg9RlgoJCxKKTtyZXR1cm4gWCYmWCE9PUo/e3R5cGU6InJldHJ5LWNvZGVjIixjb2RlYzpYfTp7dHlwZToic3dpdGNoLXRvLWh0dHAifX1mdW5jdGlvbiBoNygkKXtyZXR1cm4gJD9gJHskLmRldmljZX06JHskLnBpZH06JHskLnN0cmVhbVVybH06JHskLndzVXJsfToke0pTT04uc3RyaW5naWZ5KCQuc3RyZWFtU2V0dGluZ3M/P251bGwpfWA6IiJ9ZnVuY3Rpb24gQVgoKXtsZXRbJCxKXT1rKCgpPT53OChhMih3aW5kb3cuX19TSU1fUFJFVklFV19fKSx3aW5kb3cubG9jYXRpb24pKSxbUSxYXT1rKCExKSxbSyxZXT1rKCgpPT57bGV0IGc9YTIod2luZG93Ll9fU0lNX1BSRVZJRVdfXyk7aWYoZylyZXR1cm4gZy5kZXZpY2U7cmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKX0pLFtxLEddPWsoITEpLFtCLE5dPWsoITEpLFt6LFZdPWsoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PUk4KzUyMH0pLHt3aWR0aDpILG9uUG9pbnRlckRvd246Q309cTMoInNlcnZlLXNpbTpkZXZpY2Utc2lkZWJhci13aWR0aCIsSTgsMjQwLDY0MCwicmlnaHQiKSxbQSxMXT1rKG51bGwpLFU9d2luZG93Ll9fU0lNX1BSRVZJRVdfXyxGPVU/LmdyaWRDYXRhbG9nRW5kcG9pbnQ/P2IxKCJncmlkL2FwaS9jYXRhbG9nIiksVz1VPy5ncmlkU3RhdHVzRW5kcG9pbnQ/P2IxKCJncmlkL2FwaS9zdGF0dXMiKSx3PVU/LmdyaWRTdGF0dXNFdmVudHNFbmRwb2ludD8/YjEoImdyaWQvYXBpL3N0YXR1cy9ldmVudHMiKSxQPVU/LmdyaWRTdGFydEVuZHBvaW50Pz9iMSgiZ3JpZC9hcGkvc3RhcnQiKSx4PVU/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9iMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbRCxuXT1rKHt9KSxbUixkXT1rKHt9KSxbaSxyXT1rKHt9KSx7ZGV2aWNlczpvLHRvdGFsOmEsbG9hZE1vcmU6TDEsbG9hZEFsbDpsLHJlc2V0UGFnZTptLGhhc01vcmU6WDF9PU03KEYsdywhMCxLKSxaMT0hIShLJiZvPy5maW5kKChnKT0+Zy5kZXZpY2U9PT1LKT8uaGVscGVyKSxIMT1FKChnKT0+e1koZyk7dHJ5e2xldCB2PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3Yuc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixnKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIix2LnRvU3RyaW5nKCkpfWNhdGNoe319LFtdKSx0PUUoYXN5bmMoZyx2PTIwMDAwKT0+e2xldCBZMT1EYXRlLm5vdygpK3Y7d2hpbGUoRGF0ZS5ub3coKTxZMSl7dHJ5e2xldCBHMT1uZXcgVVJMKFcsd2luZG93LmxvY2F0aW9uLmhyZWYpO2lmKEcxLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsZyksKChhd2FpdChhd2FpdCBmZXRjaChHMSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLnN0YXR1c2VzPz9bXSkuc29tZSgoVDEpPT5UMS5kZXZpY2U9PT1nJiZUMS5oZWxwZXIpKXJldHVybiEwfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoRzEpPT5zZXRUaW1lb3V0KEcxLDQwMCkpfXJldHVybiExfSxbV10pLFExPUUoYXN5bmMoZyk9PntuKCh2KT0+KHsuLi52LFtnXTohMH0pKSxyKCh2KT0+KHsuLi52LFtnXTpudWxsfSkpO3RyeXtsZXQgdj1hd2FpdCBmZXRjaChQLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpnfSl9KSxZMT1hd2FpdCB2Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXYub2t8fCFZMS5vayl7cigoRzEpPT4oey4uLkcxLFtnXTpZMS5lcnJvcj8/YEhUVFAgJHt2LnN0YXR1c31gfSkpO3JldHVybn1hd2FpdCB0KGcpfWNhdGNoKHYpe3IoKFkxKT0+KHsuLi5ZMSxbZ106dj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e24oKHYpPT4oey4uLnYsW2ddOiExfSkpfX0sW1AsdF0pLHExPUUoYXN5bmMoZyk9PntkKCh2KT0+KHsuLi52LFtnXTohMH0pKSxyKCh2KT0+KHsuLi52LFtnXTpudWxsfSkpO3RyeXtsZXQgdj1hd2FpdCBmZXRjaCh4LHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpnfSl9KSxZMT1hd2FpdCB2Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXYub2t8fCFZMS5vaylyKChHMSk9Pih7Li4uRzEsW2ddOlkxLmVycm9yPz9gSFRUUCAke3Yuc3RhdHVzfWB9KSl9Y2F0Y2godil7cigoWTEpPT4oey4uLlkxLFtnXTp2Py5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7ZCgodik9Pih7Li4udixbZ106ITF9KSl9fSxbeF0pO3koKCk9PntpZihLKXJldHVybjtpZigkPy5kZXZpY2Upe1koJC5kZXZpY2UpO3JldHVybn1pZighb3x8by5sZW5ndGg9PT0wKXJldHVybjtsZXQgZz1vLmZpbmQoKHYpPT52LmhlbHBlcik/P28uZmluZCgodik9PnYuc3RhdGU9PT0iQm9vdGVkIik/P29bMF07aWYoZylZKGcuZGV2aWNlKX0sW0ssJD8uZGV2aWNlLG9dKSx5KCgpPT57bGV0IGc9YCR7YjEoImFwaS9ldmVudHMiKX0ke0s/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoSyl9YDoiIn1gLHY9KEcxKT0+e0ooKEUxKT0+e2lmKEcxPXc4KGEyKEcxKSx3aW5kb3cubG9jYXRpb24pLGg3KEUxKT09PWg3KEcxKSlyZXR1cm4gRTE7aWYoRzEpd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1HMTtlbHNlIGlmKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pe2xldHtiYXNlUGF0aDpXMSxleGVjVG9rZW46VDF9PXdpbmRvdy5fX1NJTV9QUkVWSUVXX187d2luZG93Ll9fU0lNX1BSRVZJRVdfXz17YmFzZVBhdGg6VzEsZXhlY1Rva2VuOlQxfX1yZXR1cm4gRzF9KX0sWTE9QTAoZyk7cmV0dXJuIFkxLm9ubWVzc2FnZT0oRzEpPT57dHJ5e3YoYTIoSlNPTi5wYXJzZShHMS5kYXRhKSkpfWNhdGNoe319LCgpPT5ZMS5jbG9zZSgpfSxbSyxaMV0pLHkoKCk9PntpZighJD8ubG9nc0VuZHBvaW50fHwheDcod2luZG93LmxvY2F0aW9uKSlyZXR1cm47bGV0IGc9QTAoJC5sb2dzRW5kcG9pbnQpLHY9bmV3IE1hcCxZMT1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIEcxKFQxKXtsZXQgXzE9di5nZXQoVDEpO2lmKCFfMSl7bGV0IFIxPTA7Zm9yKGxldCBNMT0wO00xPFQxLmxlbmd0aDtNMSsrKVIxPShSMTw8NSktUjErVDEuY2hhckNvZGVBdChNMSl8MDtfMT1ZMVtNYXRoLmFicyhSMSklWTEubGVuZ3RoXSx2LnNldChUMSxfMSl9cmV0dXJuIF8xfWxldCBFMT0iIixXMT0hMTtyZXR1cm4gZy5vbm1lc3NhZ2U9KFQxKT0+e3RyeXtsZXQgXzE9SlNPTi5wYXJzZShUMS5kYXRhKSxSMT1fMS5wcm9jZXNzSW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz9fMS5zZW5kZXJJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/PyIiLE0xPV8xLnN1YnN5c3RlbT8/IiIscjE9XzEuY2F0ZWdvcnk/PyIiLGoxPV8xLmV2ZW50TWVzc2FnZT8/IiI7aWYoIWoxKXJldHVybjtpZihSMSE9PUUxKXtpZihXMSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IGYxPUcxKFIxKTtjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGAlYyR7UjF9JHtNMT9gICVjJHtNMX0ke3IxPyI6IityMToiIn1gOiIifWAsYGNvbG9yOiR7ZjF9O2ZvbnQtd2VpZ2h0OmJvbGRgLC4uLk0xP1siY29sb3I6Izg4ODtmb250LXdlaWdodDpub3JtYWwiXTpbXSksVzE9ITAsRTE9UjF9bGV0IEYxPShfMS5tZXNzYWdlVHlwZT8/IiIpLnRvTG93ZXJDYXNlKCksTjE9TTEmJlIxPT09RTE/YCVjJHtyMXx8TTF9JWMgYDoiIixhMT1OMT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYoRjE9PT0iZmF1bHQifHxGMT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7TjF9JWMke2oxfWAsLi4uYTEsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKEYxPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHtOMX0lYyR7ajF9YCwuLi5hMSwiY29sb3I6IzYyNzJhNCIpO2Vsc2UgY29uc29sZS5sb2coYCR7TjF9JWMke2oxfWAsLi4uYTEsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKFcxKWNvbnNvbGUuZ3JvdXBFbmQoKTtnLmNsb3NlKCl9fSxbJD8ubG9nc0VuZHBvaW50XSk7bGV0IGo9Sz8/JD8uZGV2aWNlPz9udWxsLHA9bz8uZmluZCgoZyk9PmcuZGV2aWNlPT09aik/P251bGwsXz0hISQmJiQuZGV2aWNlPT09aixoO2lmKF8mJiQpaD1aKE1YLHtjb25maWc6JCxkZXZpY2VOYW1lOnA/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpwPy5ydW50aW1lPz9udWxsLGNocm9tZTpwPy5jaHJvbWU/P251bGwsYXhPdmVybGF5RW5hYmxlZDpxLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46QixzZXREZXZ0b29sc09wZW46TixncmlkT3Blbjp6LHNldEdyaWRPcGVuOlYsZ3JpZFBhbmVsV2lkdGg6SCxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6QSxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6TCxzdHJlYW1pbmc6USxzZXRTdHJlYW1pbmc6WH0pO2Vsc2V7bGV0IGc9ej9IKzM2OjI0O2g9WigiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OmcscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpwP1ooTTYse25hbWU6cC5uYW1lLHJ1bnRpbWU6cC5ydW50aW1lLGNocm9tZTpwLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OnAucGxhY2Vob2xkZXJBc3NldD8/bnVsbCxidXN5OiEhcC5oZWxwZXJ8fCEhRFtwLmRldmljZV0sYnVzeUxhYmVsOnAuaGVscGVyPyJDb25uZWN0aW5n4oCmIjoiU3RhcnRpbmfigKYiLGVycm9yOmlbcC5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PlExKHAuZGV2aWNlKX0pOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltaKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxaKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsWigiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggQGV4cG8vc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBaKEoxLHtjaGlsZHJlbjpbaCxaKFE0LHt9KSxaKFQ2LHtvcGVuOnosb25DbG9zZTooKT0+VighMSksd2lkdGg6SCxzaWRlOiJsZWZ0IixkZXZpY2VzOm8sdG90YWw6YSxoYXNNb3JlOlgxLG9uTG9hZE1vcmU6TDEsb25Mb2FkQWxsOmwsb25SZXNldFBhZ2U6bSxzZWxlY3RlZFVkaWQ6aixvblNlbGVjdDpIMSxzdGFydGluZzpELHNodXR0aW5nRG93bjpSLG9uU2h1dGRvd246cTF9KSxaKGw1LHtwYW5lbFdpZHRoOkgsdmlzaWJsZTp6LG9uUG9pbnRlckRvd246QyxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksWih6Nix7b3Blbjp6LG9uQ2xpY2s6KCk9PlYoITApfSldfSl9ZnVuY3Rpb24gTVgoe2NvbmZpZzokLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsY2hyb21lOlgsYXhPdmVybGF5RW5hYmxlZDpLLHNldEF4T3ZlcmxheUVuYWJsZWQ6WSxkZXZ0b29sc09wZW46cSxzZXREZXZ0b29sc09wZW46RyxncmlkT3BlbjpCLHNldEdyaWRPcGVuOk4sZ3JpZFBhbmVsV2lkdGg6eixzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6VixzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6SCxzdHJlYW1pbmc6QyxzZXRTdHJlYW1pbmc6QX0pe3koKCk9Pntkb2N1bWVudC50aXRsZT1KP2BTaW11bGF0b3IgLSAke0p9YDoiU2ltdWxhdG9yIFByZXZpZXcifSxbSl0pO2xldCBMPXcwKEopLFU9RjcoJC5kZXZ0b29sc0VuZHBvaW50Pz9iMSgiZGV2dG9vbHMiKSxxKTt5KCgpPT57aWYoIXEpcmV0dXJuO2lmKFYmJlUudGFyZ2V0cy5zb21lKChPKT0+Ty5pZD09PVYpKXJldHVybjtIKFUudGFyZ2V0cy5sZW5ndGg9PT0xP1UudGFyZ2V0c1swXS5pZDpudWxsKX0sW3EsVS50YXJnZXRzLFYsSF0pLHkoKCk9PntIKG51bGwpfSxbJC5kZXZpY2UsSF0pO2xldCBGPVk3KCksVz13Nyh7ZGV2aWNlOiQuZGV2aWNlLGVuZHBvaW50OiQuc3RyZWFtU2V0dGluZ3NFbmRwb2ludCxpbml0aWFsU2V0dGluZ3M6JC5zdHJlYW1TZXR0aW5nc30pLHc9Vy5zZXR0aW5ncyxQPVcudXBkYXRlUGxheWJhY2sseD1XLnRyYW5zcG9ydExvY2tlZCxEPXcudHJhbnNwb3J0PT09IndlYnJ0YyIsbj1UKG51bGwpLFI9RCxbZCxpXT1rKG51bGwpLHI9dy53ZWJSdGNDb2RlYyxvPWQ/P3IsYT1ONyh7b2ZmZXJVcmw6djUoJCksY2xvc2VVcmw6UTYoJCksZW5hYmxlZDpSLGNvZGVjOm8saWNlU2VydmVyczp3LmljZVNlcnZlcnN9KSxbTDEsbF09bzAoRTcsUDgpLFttXT1rKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLFgxPXcuaHR0cENvZGVjPT09Im1qcGVnIixaMT0hUiYmIVgxJiZGLnN1cHBvcnRlZCYmIUwxLmZlbGxCYWNrJiYhbSxIMT1LNyhaMXx8Uj9udWxsOko2KCQpKTt5KCgpPT57QSghMSksbCgicmVzZXQiKSxpKG51bGwpfSxbJC5zdHJlYW1VcmwsQSx3LnRyYW5zcG9ydCx3Lmh0dHBDb2RlYyx3LndlYlJ0Y0NvZGVjXSkseSgoKT0+e2lmKCFEfHwhYS5mYWlsdXJlKXJldHVybjtpZihuLmN1cnJlbnQ9PT1hLmZhaWx1cmUuc2Vzc2lvbklkKXJldHVybjtuLmN1cnJlbnQ9YS5mYWlsdXJlLnNlc3Npb25JZDtsZXQgTz1SNyhyLG8sYS5mYWlsdXJlKTtpZighTylyZXR1cm47aWYoTy50eXBlPT09InN3aXRjaC10by1odHRwIil7aWYoeClyZXR1cm47UCh7dHJhbnNwb3J0OiJodHRwIn0pO3JldHVybn1pKE8uY29kZWMpfSxbcixvLHgsUCxELGEuZmFpbHVyZV0pO2xldCB0PXgmJmEuZmFpbHVyZSYmIWEuZXJyb3I/IldlYlJUQyBzdHJlYW1pbmcgZmFpbGVkLiBIVFRQIGZhbGxiYWNrIGlzIGRpc2FibGVkIGZvciB0aGlzIHNlc3Npb24uIjpudWxsO3koKCk9PntpZighWjEpcmV0dXJuO2xldCBPPXNldFRpbWVvdXQoKCk9PmwoInRpbWVvdXQiKSxiNyk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChPKX0sW1oxLCQuc3RyZWFtVXJsXSk7bGV0W1ExLHExXT1rKG51bGwpLFtqLHBdPWsobnVsbCksXz1qLGg9UTE/P18/P04yKEwsSiksZz1QNShMLGgpLHY9ejIoTCxoKSxZMT1ENShoKSxHMT1HMihoKSxFMT1HMT9HMS53aWR0aC9HMS5oZWlnaHQ6MSxXMT1mMChoKSxUMT0hIVgmJiFXMSxfMT1UMT9YLmZyYW1lLndpZHRoL1guc2NyZWVuLndpZHRoOjEsUjE9dipfMSxNMT1UMT9YLmZyYW1lLndpZHRoL1guZnJhbWUuaGVpZ2h0OkUxLHIxPVQxP2Ake1guZnJhbWUud2lkdGh9IC8gJHtYLmZyYW1lLmhlaWdodH1gOlkxLGoxPVQobnVsbCksRjE9VChbXSk7eSgoKT0+e2xldCBPPSExLE09bnVsbCxTPW51bGw7RjEuY3VycmVudD1bXTtsZXQgYj0oKT0+e2lmKE98fE0pcmV0dXJuO009c2V0VGltZW91dCgoKT0+e009bnVsbCxjKCl9LDEwMDApfSxjPSgpPT57bGV0ICQxPW5ldyBXZWJTb2NrZXQoJC53c1VybCk7JDEuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFM9JDEsajEuY3VycmVudD0kMSwkMS5vbm9wZW49KCk9PntGMS5jdXJyZW50PUU4KCQxLEYxLmN1cnJlbnQpfSwkMS5vbm1lc3NhZ2U9KFUxKT0+e2lmKCEoVTEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IEExPW5ldyBVaW50OEFycmF5KFUxLmRhdGEpO2lmKEExLmxlbmd0aDwxfHxBMVswXSE9PTEzMClyZXR1cm47dHJ5e2xldCBvMT1KU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShBMS5zdWJhcnJheSgxKSkpO2lmKG8xLndpZHRoPD0wfHxvMS5oZWlnaHQ8PTApcmV0dXJuO3AoKFowKT0+WjAmJlowLndpZHRoPT09bzEud2lkdGgmJlowLmhlaWdodD09PW8xLmhlaWdodCYmWjAub3JpZW50YXRpb249PT1vMS5vcmllbnRhdGlvbj9aMDpvMSl9Y2F0Y2h7fX0sJDEub25jbG9zZT0oKT0+e2lmKGoxLmN1cnJlbnQ9PT0kMSlqMS5jdXJyZW50PW51bGw7YigpfSwkMS5vbmVycm9yPSgpPT57JDEuY2xvc2UoKX19O3JldHVybiBjKCksKCk9PntpZihPPSEwLE0pY2xlYXJUaW1lb3V0KE0pO2lmKGoxLmN1cnJlbnQ9PT1TKWoxLmN1cnJlbnQ9bnVsbDtTPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgTjE9RSgoTyxNKT0+e0YxLmN1cnJlbnQ9djcoajEuY3VycmVudCxGMS5jdXJyZW50LE8sTSl9LFtdKSxhMT1FKChPKT0+TjEoMyxPKSxbTjFdKSxmMT1FKChPKT0+TjEoNSxPKSxbTjFdKSxpMT1FKChPKT0+TjEoNCx7YnV0dG9uOk99KSxbTjFdKSx0MT1FKCh7cGhhc2U6TyxidXR0b246TX0pPT57aWYoTS51c2FnZVBhZ2U9PW51bGx8fE0udXNhZ2U9PW51bGwpcmV0dXJuO04xKDQse2J1dHRvbjpNLm5hbWUscGFnZTpNLnVzYWdlUGFnZSx1c2FnZTpNLnVzYWdlLHBoYXNlOk99KX0sW04xXSkscTA9RSgoTyk9Pk4xKDEwLHtkZWx0YTpPfSksW04xXSksRzA9RSgoTyk9Pk4xKDExLE8pLFtOMV0pLGwwPUUoKE8pPT57cTEoKE0pPT5NJiZNLndpZHRoPT09Ty53aWR0aCYmTS5oZWlnaHQ9PT1PLmhlaWdodCYmTS5vcmllbnRhdGlvbj09PU8ub3JpZW50YXRpb24/TTpPKX0sW10pLHYxPUUoKE8pPT57TjEoNyx7b3JpZW50YXRpb246T30pfSxbTjFdKSxWMD1oLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiLEowPUwhPT0id2F0Y2giJiZMIT09InZpc2lvbiIsUDA9RSgoTyk9PntpZighSjApcmV0dXJuO2xldCBNPShPPT09ImxlZnQiP3kyOnkzKVtWMF07djEoTSl9LFtKMCxWMCx2MV0pO3koKCk9PntxMShudWxsKSxwKG51bGwpfSxbJC5zdHJlYW1VcmxdKSx5KCgpPT57bGV0IE89XztpZighTylyZXR1cm47cTEoKE0pPT5NJiZNLndpZHRoPT09Ty53aWR0aCYmTS5oZWlnaHQ9PT1PLmhlaWdodCYmTS5vcmllbnRhdGlvbj09PU8ub3JpZW50YXRpb24/TTpudWxsKX0sW18sXz8ud2lkdGgsXz8uaGVpZ2h0LF8/Lm9yaWVudGF0aW9uXSk7bGV0IG0xPUUoKE8sTSk9PntOMSg2LHt0eXBlOk8sdXNhZ2U6TX0pfSxbTjFdKSxbZTEsUjBdPWsobnVsbCksW3kxLEIwXT1rKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7bGV0IE89TnVtYmVyKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIikpLE09TnVtYmVyLmlzRmluaXRlKE8pJiZPPjA/TzpUODtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PU0rNDgwfSkse3dpZHRoOkgwLG9uUG9pbnRlckRvd246RDF9PXEzKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLFQ4LDI0MCw3MjApLHt3aWR0aDp3MSxvblBvaW50ZXJEb3duOlEwfT1xMygic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixTNyw0MjAsMTQwMCksW04wLFUwXT1rKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbazAsSzFdPWsoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTt5KCgpPT57bGV0IE89KCk9PntVMCh3aW5kb3cuaW5uZXJXaWR0aCksSzEod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLE8pLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixPKX0sW10pLHkoKCk9PntsZXQgTz1BMCgkLmFwcFN0YXRlRW5kcG9pbnQ/P2IxKCJhcHBzdGF0ZSIpKSxNPW51bGw7cmV0dXJuIE8ub25tZXNzYWdlPShTKT0+e3RyeXtsZXQgYj1KU09OLnBhcnNlKFMuZGF0YSk7aWYoTSljbGVhclRpbWVvdXQoTSk7bGV0IGM9Yj8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtNPXNldFRpbWVvdXQoKCk9PlIwKGIpLGMpfWNhdGNoe319LCgpPT57aWYoTSljbGVhclRpbWVvdXQoTSk7Ty5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBJPUUoYXN5bmMoKT0+e20xKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKE0pPT5zZXRUaW1lb3V0KE0sMzApKSxtMSgidXAiLDIxKX0sW20xXSksdT1UKG51bGwpLFtzLEMxXT1rKDApLFtWMSxCMV09aygwKTt5KCgpPT57bGV0IE89dS5jdXJyZW50O2lmKCFPfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgTT1uZXcgUmVzaXplT2JzZXJ2ZXIoKFMpPT57bGV0IGI9U1swXT8uY29udGVudFJlY3Q7QzEoYj8ud2lkdGg/PzApLEIxKGI/LmhlaWdodD8/MCl9KTtyZXR1cm4gTS5vYnNlcnZlKE8pLCgpPT5NLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtoMSxsMV09ayghMCkscDE9VCghMCk7cDEuY3VycmVudD1oMTtsZXQgQzA9VChuZXcgU2V0KTt5KCgpPT57bGV0IE89KE0pPT57bGV0IFM9ISF1LmN1cnJlbnQ/LmNvbnRhaW5zKE0udGFyZ2V0KTtsMShTKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixPLCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLE8sITApfSxbXSkseSgoKT0+e2lmKGgxKXJldHVybjtsZXQgTz1DMC5jdXJyZW50O2lmKE8uc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgTSBvZiBPKU4xKDYse3R5cGU6InVwIix1c2FnZTpNfSk7Ty5jbGVhcigpfSxbaDEsTjFdKSx5KCgpPT57bGV0IE89KGIsYyk9PntpZighcDEuY3VycmVudClyZXR1cm47aWYoYi5jb2RlPT09IktleUgiJiZiLm1ldGFLZXkmJmIuc2hpZnRLZXkpe2lmKGIucHJldmVudERlZmF1bHQoKSxjPT09ImRvd24iJiYhYi5yZXBlYXQpTjEoNCx7YnV0dG9uOiJob21lIn0pO3JldHVybn1pZigoYi5jb2RlPT09IkFycm93TGVmdCJ8fGIuY29kZT09PSJBcnJvd1JpZ2h0IikmJmIubWV0YUtleSYmIWIuc2hpZnRLZXkmJiFiLmFsdEtleSYmIWIuY3RybEtleSl7aWYoYi5wcmV2ZW50RGVmYXVsdCgpLGM9PT0iZG93biImJiFiLnJlcGVhdClQMChiLmNvZGU9PT0iQXJyb3dMZWZ0Ij8ibGVmdCI6InJpZ2h0Iik7cmV0dXJufWlmKGIuY29kZT09PSJLZXlBIiYmYi5tZXRhS2V5JiZiLnNoaWZ0S2V5KXtpZihiLnByZXZlbnREZWZhdWx0KCksYz09PSJkb3duIiYmIWIucmVwZWF0KUkxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKFUxKT0+e2xldCBBMT1VMS5zdGRvdXQudHJpbSgpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiO3JldHVybiBJMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2UgJHtBMX1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWlmKGIuY29kZT09PSJLZXlLIiYmYi5tZXRhS2V5JiYhYi5zaGlmdEtleSYmIWIuYWx0S2V5JiYhYi5jdHJsS2V5KXtpZihiLnByZXZlbnREZWZhdWx0KCksYz09PSJkb3duIiYmIWIucmVwZWF0KU4xKDEyLHt9KTtyZXR1cm59bGV0ICQxPXk3KGIuY29kZSk7aWYoJDE9PW51bGwpcmV0dXJuO2lmKGIucHJldmVudERlZmF1bHQoKSxjPT09ImRvd24iKUMwLmN1cnJlbnQuYWRkKCQxKTtlbHNlIEMwLmN1cnJlbnQuZGVsZXRlKCQxKTtOMSg2LHt0eXBlOmMsdXNhZ2U6JDF9KX0sTT0oYik9Pk8oYiwiZG93biIpLFM9KGIpPT5PKGIsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLFMpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE0pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsUyl9fSxbTjEsJC5kZXZpY2UsUDBdKTtsZXQgbjE9TzcoKSxXMD1INygkLmRldmljZSksejA9Wjcoe2V4ZWM6STEsdWRpZDokLmRldmljZSxlbmFibGVkOkMsb25VcGxvYWRTdGFydDpuMS5hZGQsb25VcGxvYWRQcm9ncmVzczpuMS5zZXRQcm9ncmVzcyxvblVwbG9hZEVuZDooTyxNLFMpPT5uMS51cGRhdGUoTyx7c3RhdHVzOk0/InN1Y2Nlc3MiOiJlcnJvciIsbWVzc2FnZTpTfSksb25VbnN1cHBvcnRlZDooTyk9PntsZXQgTT1uMS5hZGQoTy5uYW1lLCJtZWRpYSIpO24xLnVwZGF0ZShNLHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHtPLnR5cGV8fGsyKE8pfWB9KX0sb25Ib3N0UGF0aERyb3A6VzAuZGlzbWlzc30pLFAxPUM3KHtkZWZhdWx0V2lkdGg6UjEsdmlld3BvcnRXaWR0aDpOMCx2aWV3cG9ydEhlaWdodDprMCxhc3BlY3RSYXRpbzpNMSxvblN0YXJ0OigpPT5sMSghMSl9KSxTMD0xMixfMD0yNCxRMj1zPjA/TWF0aC5taW4ocyxQMS53aWR0aCk6UDEud2lkdGgsRDI9KE8pPT57aWYoTzw9MClyZXR1cm4gMDtsZXQgTT1OMC1TMC1PLGI9TjAvMitRMi8yLShNLV8wKTtpZihiPD0wKXJldHVybiAwO2xldCBjPTIqYjtyZXR1cm4gYzw9TytfMD9jOjB9LGQwPUQyKHE/dzE6eTE/SDA6MCksTjM9RDIoQj96OjApO3JldHVybiBaKEI2LHtlbmRwb2ludDpLPyQ/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctcGFnZSBweS02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nTGVmdDoyNCtOMyxwYWRkaW5nUmlnaHQ6MjQrZDAsdHJhbnNpdGlvbjpQMS5pc1Jlc2l6aW5nfHxQMS5pc0luZXJ0aWE/Im5vbmUiOkU2fSxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6UDEud2lkdGgsdHJhbnNpdGlvbjpQMS5pc1Jlc2l6aW5nfHxQMS5pc0luZXJ0aWE/JDg6Sjh9LGNoaWxkcmVuOltaKGMxLHtleGVjOkkxLG9uUm90YXRlOnYxLG9yaWVudGF0aW9uOmgub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpDLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIHN0YXR1cyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltaKGMxLlRpdGxlLHtvbkNsaWNrOigpPT5OKChPKT0+IU8pLCJhcmlhLWxhYmVsIjoiVG9nZ2xlIHNpbXVsYXRvcnMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6Qix0aXRsZToiU2ltdWxhdG9ycyIsaGlkZVN1YnRpdGxlOiEwLGhpZGVDaGV2cm9uOiEwLHN0eWxlOnttYXhXaWR0aDoibWluKDIzMHB4LCBjYWxjKDEwMHZ3IC0gMTcwcHgpKSJ9fSksWihLNCx7c3RyZWFtaW5nOkN9KV19KSxaKCJkaXYiLHtyZWY6dSxjbGFzc05hbWU6InJlbGF0aXZlIG1heC1oLWZ1bGwiLHN0eWxlOnt3aWR0aDpQMS53aWR0aCxhc3BlY3RSYXRpbzpyMSx0cmFuc2l0aW9uOlAxLmlzUmVzaXppbmd8fFAxLmlzSW5lcnRpYT8kODpKOCx3aWxsQ2hhbmdlOlAxLmlzUmVzaXppbmd8fFAxLmlzSW5lcnRpYT8id2lkdGgiOnZvaWQgMH0sLi4uejAuZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbKCgpPT57bGV0IE89WihfNSx7dXJsOiQudXJsLHdzVXJsOiQud3NVcmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czpQMS5pc1Jlc2l6aW5nfHxQMS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOlQxPzA6Zyxjb3JuZXJTaGFwZTpUMT92b2lkIDA6InN1cGVyZWxsaXBzZSgxLjMpIiwuLi5UMT97fTp7Ym94U2hhZG93OiJpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIn19LGhpZGVDb250cm9sczohMCxvblN0cmVhbWluZ0NoYW5nZTpBLG9uU3RyZWFtVG91Y2g6YTEsb25TdHJlYW1NdWx0aVRvdWNoOmYxLG9uU3RyZWFtQnV0dG9uOmkxLG9uU3RyZWFtRGlnaXRhbENyb3duOnEwLG9uU3RyZWFtU2Nyb2xsOkcwLHN0cmVhbU1vZGU6Uj8id2VicnRjIjpaMT8iYXZjYyI6Im1qcGVnIix3ZWJSdGNTdHJlYW06YS5zdHJlYW0sb25XZWJSdGNGcmFtZTphLm1hcmtGcmFtZURlY29kZWQsc3RyZWFtRXJyb3I6Uj9hLmVycm9yPz90Om51bGwsb25BdmNjRXJyb3I6KCk9PmwoImVycm9yIiksb25BdmNjRGVjb2RlZEZyYW1lOigpPT5sKCJkZWNvZGVkLWZyYW1lIiksc3Vic2NyaWJlRnJhbWU6WjE/dm9pZCAwOkgxLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOloxP3ZvaWQgMDpIMS5mcmFtZSxzdHJlYW1Db25maWc6aCxlbmFibGVEaWdpdGFsQ3Jvd246TD09PSJ3YXRjaCIsb25TY3JlZW5Db25maWdDaGFuZ2U6bDB9KSxNPVooSjEse2NoaWxkcmVuOltPLEsmJlooVjYse30pXX0pO2lmKCFUMSlyZXR1cm4gTTtyZXR1cm4gWihwNSx7Y2hyb21lOlgsaW50ZXJhY3RpdmU6ITAsb25CdXR0b246dDEsb25Dcm93bldoZWVsOihTLGIpPT57bGV0IGM9UzIoUyxiLFYxfHwxKTtpZihjIT1udWxsKXEwKGMpfSxzY3JlZW46TX0pfSkoKSx6MC5pc0RyYWdPdmVyJiZaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpUMT92b2lkIDA6Z30sY2hpbGRyZW46W1oobzIse3NpemU6MzIsc3Ryb2tlV2lkdGg6MS41fSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSksWihzNix7c2ltdWxhdG9yUmVzaXplOlAxLGRldmljZVR5cGU6TCxzdHJlYW1Db25maWc6aCxjb250YWluZXJXaWR0aDpzfHxQMS53aWR0aCxjb250YWluZXJIZWlnaHQ6VjF8fChNMT4wP1AxLndpZHRoL00xOjApfSksWihYNCx7d2lkdGg6c3x8UDEud2lkdGgsaGVpZ2h0OlYxfHwoTTE+MD9QMS53aWR0aC9NMTowKSx2aXNpYmxlOlAxLmlzUmVzaXppbmd8fFAxLmlzSW5lcnRpYX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIG1heC13LWZ1bGwiLGNoaWxkcmVuOltaKGMxLHtleGVjOkkxLG9uUm90YXRlOnYxLG9yaWVudGF0aW9uOmgub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpDLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIGFjdGlvbnMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlclJhZGl1czoxOH0sY2hpbGRyZW46WihjMS5BY3Rpb25zLHtjaGlsZHJlbjpbZTE/LmlzUmVhY3ROYXRpdmUmJlooYzEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6IlJlbG9hZCBSZWFjdCBOYXRpdmUgYnVuZGxlIix0aXRsZToiUmVsb2FkIChSKSIsb25DbGljazooKT0+dm9pZCBJKCksY2hpbGRyZW46WihhMCx7fSl9KSxaKGMxLkhvbWVCdXR0b24se3RpdGxlOiJIb21lIn0pLFooYzEuU2NyZWVuc2hvdEJ1dHRvbix7dGl0bGU6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KE8pPT57Ty5wcmV2ZW50RGVmYXVsdCgpLFcwLmNhcHR1cmUoKX19KSxaKGMxLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSl9KSxaKGMxLHtleGVjOkkxLG9uUm90YXRlOnYxLG9yaWVudGF0aW9uOmgub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpDLCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46WihONix7b3ZlcmxheUVuYWJsZWQ6SyxzdHJlYW1pbmc6QyxvblRvZ2dsZU92ZXJsYXk6KCk9PlkoKE8pPT4hTyl9KX0pXX0pXX0pLFooImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gYmFja2Ryb3AtYmx1ci1bMTJweF0gWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gei00MCAke3kxfHxxPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W1ooImJ1dHRvbiIse29uQ2xpY2s6KCk9PntHKCExKSxCMCgoTyk9PiFPKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiB0b29scyBwYW5lbCIsImFyaWEtcHJlc3NlZCI6eTEsdGl0bGU6IlRvb2xzIixjaGlsZHJlbjpaKGwyLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFooImJ1dHRvbiIse29uQ2xpY2s6KCk9PntCMCghMSksRygoTyk9PiFPKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOnEsdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46WihwMix7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KV19KSxaKGE0LHtvcGVuOnkxLG9uQ2xvc2U6KCk9PkIwKCExKSx1ZGlkOiQuZGV2aWNlLGRldmljZVJ1bnRpbWU6USxjdXJyZW50QXBwOmUxLGV2ZW50TG9nRXZlbnRzRW5kcG9pbnQ6JC5ldmVudExvZ0V2ZW50c0VuZHBvaW50LG1ldHJpY3NFbmRwb2ludDokLm1ldHJpY3NFbmRwb2ludCxheE92ZXJsYXlFbmFibGVkOkssb25Ub2dnbGVBeE92ZXJsYXk6KCk9PlkoKE8pPT4hTyksc3RyZWFtU2V0dGluZ3M6dyxvblN0cmVhbVBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6Vy51cGRhdGVQbGF5YmFjayxvblN0cmVhbUVuY29kZXJTZXR0aW5nc0NoYW5nZTpXLnVwZGF0ZUVuY29kZXIsYWN0aXZlQ29kZWM6Uj9gd2VicnRjLyR7b31gOloxPyJoMjY0IjoibWpwZWciLHBlZXJDb25uZWN0aW9uOmEucGVlckNvbm5lY3Rpb24sd2VicnRjU2Vzc2lvbklkOmEuc2Vzc2lvbklkLHdlYnJ0Y1N0YXRzVXJsOlo2KCQpLGF2Y2NTdXBwb3J0ZWQ6Ri5zdXBwb3J0ZWQsc3RyZWFtU2V0dGluZ3NQZW5kaW5nOlcucGVuZGluZ3x8IVcuZW5jb2RlclNldHRpbmdzQXZhaWxhYmxlLHN0cmVhbVRyYW5zcG9ydExvY2tlZDp4LHdpZHRoOkgwfSksWihsNSx7cGFuZWxXaWR0aDpIMCx2aXNpYmxlOnkxLG9uUG9pbnRlckRvd246RDEsYXJpYUxhYmVsOiJSZXNpemUgdG9vbHMgcGFuZWwifSksWihRNyx7b3BlbjpxLG9uQ2xvc2U6KCk9PkcoITEpLHVkaWQ6JC5kZXZpY2UsdGFyZ2V0czpVLnRhcmdldHMsc2VsZWN0ZWRUYXJnZXRJZDpWLG9uU2VsZWN0VGFyZ2V0OkgsbG9hZGluZzpVLmxvYWRpbmcsZXJyb3I6VS5lcnJvcixvblJlZnJlc2g6KCk9PnZvaWQgVS5yZWZyZXNoKCksd2lkdGg6dzF9KSxaKGw1LHtwYW5lbFdpZHRoOncxLHZpc2libGU6cSxvblBvaW50ZXJEb3duOlEwLGFyaWFMYWJlbDoiUmVzaXplIFdlYktpdCBEZXZUb29scyBwYW5lbCJ9KV19KX0pfUM5KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihaKEFYLHt9KSk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==","base64").toString("utf-8");return D8}function B5($){let Q=[$.name,$.runtime,$.deviceTypeIdentifier??""].join("\x00"),Z=_5.get($.udid);if(Z?.signature===Q)return Z.device;let J={device:$.udid,name:$.name,runtime:$.runtime,chrome:KQ($),placeholderAsset:WQ($)};return _5.set($.udid,{signature:Q,device:J}),J}function eX($,Q,Z){let J=bX(),Y=(W)=>{if(/iphone/i.test(W))return 0;if(/ipad/i.test(W))return 1;if(/watch/i.test(W))return 2;if(/(apple\s*tv|^tv\b)/i.test(W))return 3;if(/vision|reality/i.test(W))return 4;return 5},X=(W)=>{if(Q.has(W.udid))return 0;if(Z&&W.udid===Z)return 1;if(W.state==="Booted")return 2;if(W.udid===J)return 3;return 4},G=(W)=>{let K=W.match(/-(\d+)-(\d+)/),z=K?Number(K[1]):0,V=K?Number(K[2]):0;return-(z*1000+V)};return $.sort((W,K)=>X(W)-X(K)||Y(W.name)-Y(K.name)||W.name.localeCompare(K.name)||G(W.runtime)-G(K.runtime))}function $G(){return new Promise(($)=>{k0("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,G]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let W of G){if(W.isAvailable===!1)continue;Y.push({...W,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}async function C8($){let[Q,Z]=await Promise.all([M0(),$G()]),J=new Map(Q.map((Y)=>[Y.device,Y]));return{simulators:eX(Z,J,$),helperByUdid:J}}function R5($,Q,Z,J,Y){return $.map((X)=>{let G=Q.get(X.udid),W=G?g4(G,v4(Z),J,w$(Z),Y):null;return{device:X.udid,state:X.state,helper:W?{port:W.port,url:W.url,streamUrl:W.streamUrl,wsUrl:W.wsUrl}:null}})}function ZG(){try{let $=Number(h4("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(h4("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=h4("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let G=Z.match(X);return G?Number(G[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite($)?$:0,availableBytes:Y*(Number.isFinite(Q)?Q:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function JG(){try{let $=h4("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),Q={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of $.split(`
|
|
109
|
+
`),Q.resume(),!0}function cX($,Q,Z,J){if(!E5($,Q))return;let Y=new X5(J);Y.binaryType="arraybuffer";let X=!1,G=!1,W=[],K=Buffer.from(Z),z=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(I8(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},V=(B)=>{if(X&&Y.readyState===X5.OPEN){Y.send(B.opcode===1?B.payload.toString("utf8"):M5(B.payload));return}W.push({opcode:B.opcode,payload:Buffer.from(B.payload)})},H=()=>{try{while(K.length>0){let B=D5(K);if(!B)break;if(K=K.subarray(B.consumed),B.opcode===8){u4(Q,8,B.payload),z();return}if(B.opcode===9){u4(Q,10,B.payload);continue}if(B.opcode===1||B.opcode===2)V({opcode:B.opcode,payload:B.payload})}}catch{z()}};Y.onopen=()=>{X=!0;for(let B of W)Y.send(B.opcode===1?B.payload.toString("utf8"):M5(B.payload));W=[]},Y.onmessage=(B)=>{let N=B.data,M=typeof N==="string"?Buffer.from(N):Buffer.from(N);u4(Q,typeof N==="string"?1:2,M)},Y.onerror=z,Y.onclose=z,Q.on("data",(B)=>{if(typeof B==="string")B=Buffer.from(B);K=Buffer.concat([K,B]),H()}),Q.on("error",z),Q.on("close",z),H()}async function pX($,Q,Z){if(!q8(Z)){Q.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"invalid_device"}));return}if($.method!=="GET"){Q.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await V$(Z);Q.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify(J))}catch(J){Q.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function lX($,Q,Z,J,Y){if(!Z)return!1;let X=J.split("?")[0];if(X==="/camera/status")return pX($,Q,Z),!0;if((X==="/webrtc/offer"||X==="/webrtc/close"||X==="/webrtc/stats"||X==="/stream-settings")&&$.method==="OPTIONS")return l6(Q),!0;if(X==="/webrtc/stats"){let W=d2(Z);if(!W)return!1;return W.handleWebRTCStats($,Q),!0}let G;try{G=w4(Z,Y)}catch{return!1}switch(X){case"/stream.mjpeg":return G.handleMjpeg($,Q),!0;case"/stream.avcc":return G.handleAvcc($,Q),!0;case"/stream-settings":return G.handleStreamSettings($,Q),!0;case"/config":return G.handleConfig($,Q),!0;case"/health":return G.handleHealth($,Q),!0;case"/webrtc/offer":return G.handleWebRTCOffer($,Q),!0;case"/webrtc/close":return G.handleWebRTCClose($,Q),!0;case"/ax":return G.handleAx($,Q),!0;case"/foreground":return G.handleForeground($,Q),!0;default:return!1}}async function C5($,Q,Z,J){if(await new Promise((X)=>k0("xcrun",["simctl","boot",$],()=>X())),!await new Promise((X)=>{k0("xcrun",["simctl","bootstatus",$,"-b"],{timeout:180000},(G)=>X(!G))})){if(!await new Promise((G)=>{k0("xcrun",["simctl","list","devices","-j"],(W,K)=>{if(W)return G(!1);try{let z=JSON.parse(K);G(Object.values(z.devices).flat().some((V)=>V.udid===$&&V.state==="Booted"))}catch{G(!1)}})}))return`Device ${$} failed to reach booted state`}return o4(Q4($,Q,Z,"127.0.0.1",J)),null}function nX($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let z of J)z()},W=()=>{G();try{$.end(I8(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},K=()=>{for(;;){let z;try{z=D5(Y)}catch{W();return}if(!z)return;if(Y=Y.subarray(z.consumed),z.opcode===8)return W();if(z.opcode===9){u4($,10,z.payload);continue}if(z.opcode===1||z.opcode===2)for(let V of Z)V(z.payload)}};if($.on("data",(z)=>{Y=Buffer.concat([Y,z]),K()}),$.on("close",G),$.on("error",G),Q.length)K();return{send(z){u4($,2,z)},on(z,V){if(z==="message")Z.push(V);else J.push(V)},close:W}}function dX($,Q,Z,J,Y){if(!J)return!1;let X;try{X=w4(J,Y)}catch{return!1}if(!E5($,Q))return!0;return X.attachHidSocket(nX(Q,Z)),!0}function S$($,Q,Z,J,Y,X=!1){let G=(Q===""?"":Q)+"/grid/api",W=typeof Y==="string"?Y:void 0,K=typeof Y==="object"?Y:q5(W);return{...$,basePath:Q,logsEndpoint:n0(Q,"/logs",$.device),appStateEndpoint:n0(Q,"/appstate",$.device),eventLogEndpoint:n0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:n0(Q,"/api/event-log/events",$.device),metricsEndpoint:n0(Q,"/metrics",$.device),axEndpoint:n0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:n0(Q,"/devtools",$.device),streamSettingsEndpoint:vX($.streamUrl),serveSimBin:Z,gridApiEndpoint:G,gridCatalogEndpoint:G+"/catalog",gridStatusEndpoint:G+"/status",gridStatusEventsEndpoint:G+"/status/events",gridStartEndpoint:G+"/start",gridShutdownEndpoint:G+"/shutdown",gridMemoryEndpoint:G+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,...W?{codec:W}:{},...K?{streamSettings:K}:{},...X?{proxyHelpers:!0}:{}}}async function iX($){return new Promise((Q)=>{let Z=CX();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function U5($){let Q=`http://127.0.0.1:${$}`;try{let Z=await fetch(`${Q}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:$,cdpUrl:Q,async listTargets(){return(await(await fetch(`${Q}/json/list`)).json()).filter((G)=>G.id.startsWith("sim:")).map((G)=>{let K=G.id.split(":")[1],z=G.description?.match(/\(([^)]+)\)/)?.[1];return{id:G.id,title:G.title||G.url||"Untitled",url:/^https?:/i.test(G.url)?G.url:"about:blank",type:G.type||"page",udid:K,bundleId:z}})}}}catch{return null}}async function oX(){if(l0)try{return await(await l0).listTargets(),l0}catch{l0=null}return l0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (Q5(),$5));for(let Q=x$;Q<x$+50;Q++){if(!await iX(Q)){let Z=await U5(Q);if(Z)return Z;continue}try{let Z=await $({host:"127.0.0.1",port:Q});return{port:Q,cdpUrl:`http://127.0.0.1:${Q}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await U5(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${x$}-${x$+49}`)})().catch(($)=>{throw l0=null,$}),l0}function aX($){return Array.isArray($)?$[0]:$}function P5($){return aX($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function rX($){return P5($)==="https"?"wss":"ws"}function w$($){return P5($)==="https"?"https":"http"}function tX($,Q,Z,J){let Y=new URL(`${$}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set(Q,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}function E8(){try{let $=process.argv;if($[1]&&N5($[1]))return $[1]}catch{}return"serve-sim"}function sX(){if(!D8)D8=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWFtYmVyLTQwMDpva2xjaCg4Mi44JSAuMTg5IDg0LjQyOSk7LS1jb2xvci1lbWVyYWxkLTQwMDpva2xjaCg3Ni41JSAuMTc3IDE2My4yMjMpOy0tY29sb3ItY3lhbi00MDA6b2tsY2goNzguOSUgLjE1NCAyMTEuNTMpOy0tY29sb3Itc2t5LTQwMDpva2xjaCg3NC42JSAuMTYgMjMyLjY2MSk7LS1jb2xvci12aW9sZXQtNDAwOm9rbGNoKDcwLjIlIC4xODMgMjkzLjU0MSk7LS1jb2xvci1ibGFjazojMDAwOy0tY29sb3Itd2hpdGU6I2ZmZjstLXNwYWNpbmc6LjI1cmVtOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tbGVhZGluZy1zbnVnOjEuMzc1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLXJhZGl1cy14bDouNzVyZW07LS1lYXNlLW91dDpjdWJpYy1iZXppZXIoMCwwLC4yLDEpOy0tYmx1ci1tZDoxMnB4Oy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1wYW5lbDojMWMxYzFlOy0tY29sb3ItcGFuZWwtYmc6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKTstLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudCk7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxODE4MThhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47Y2xpcC1wYXRoOmluc2V0KDUwJSk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnRvcC1mdWxse3RvcDoxMDAlfS5yaWdodC0we3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnJpZ2h0LTBcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LVxbOXB4XF17cmlnaHQ6OXB4fS5ib3R0b20tMHtib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0uYm90dG9tLTBcLjV7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ubGVmdC0we2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmxlZnQtM3tsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnotMXt6LWluZGV4OjF9LnotMTB7ei1pbmRleDoxMH0uei0yMHt6LWluZGV4OjIwfS56LTMwe3otaW5kZXg6MzB9LnotMzV7ei1pbmRleDozNX0uei0zNnt6LWluZGV4OjM2fS56LTQwe3otaW5kZXg6NDB9LnotNTB7ei1pbmRleDo1MH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo0OHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDhyZW19fUBtZWRpYSAobWluLXdpZHRoOjY0cmVtKXsuY29udGFpbmVye21heC13aWR0aDo2NHJlbX19QG1lZGlhIChtaW4td2lkdGg6ODByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjgwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NnJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6OTZyZW19fS5tLTB7bWFyZ2luOmNhbGModmFyKC0tc3BhY2luZykqMCl9Li1teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMSl9Lm14LTBcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubXgtMVwuNXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS4tbXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLS41KX0ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tdC0xe21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm10LVxbM3B4XF17bWFyZ2luLXRvcDozcHh9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubWwtMVwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uc2l6ZS0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5zaXplLTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnNpemUtNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uc2l6ZS05e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOSl9LnNpemUtXFsycHhcXXt3aWR0aDoycHg7aGVpZ2h0OjJweH0uc2l6ZS1cWzE0cHhcXXt3aWR0aDoxNHB4O2hlaWdodDoxNHB4fS5zaXplLVxbMThweFxde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9LnNpemUtXFsxOXB4XF17d2lkdGg6MTlweDtoZWlnaHQ6MTlweH0uc2l6ZS1mdWxse3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmgtMlwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5oLTN7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LmgtM1wuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5oLTR7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LmgtNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uaC01XC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LmgtNntoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0uaC03e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5oLTh7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOCl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzEzcHhcXXtoZWlnaHQ6MTNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzE2cHhcXXtoZWlnaHQ6MTZweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFsyNjBweFxde21heC1oZWlnaHQ6MjYwcHh9Lm1heC1oLVxbMzIwcHhcXXttYXgtaGVpZ2h0OjMyMHB4fS5tYXgtaC1mdWxse21heC1oZWlnaHQ6MTAwJX0ubWluLWgtMHttaW4taGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi1oLVxbMjJweFxde21pbi1oZWlnaHQ6MjJweH0ubWluLWgtXFszMHB4XF17bWluLWhlaWdodDozMHB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS53LTN7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0udy0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1tYXh7d2lkdGg6bWF4LWNvbnRlbnR9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzE1MHB4XF17bWF4LXdpZHRoOjE1MHB4fS5tYXgtdy1cWzIyMHB4XF17bWF4LXdpZHRoOjIyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy1cWzU2cHhcXXttaW4td2lkdGg6NTZweH0ubWluLXctXFsyMDBweFxde21pbi13aWR0aDoyMDBweH0ubWluLXctXFsyMjBweFxde21pbi13aWR0aDoyMjBweH0ubWluLXctcHh7bWluLXdpZHRoOjFweH0uZmxleC0xe2ZsZXg6MX0uc2hyaW5re2ZsZXgtc2hyaW5rOjF9LnNocmluay0we2ZsZXgtc2hyaW5rOjB9Lmdyb3d7ZmxleC1ncm93OjF9Li10cmFuc2xhdGUteC0xXC8yey0tdHctdHJhbnNsYXRlLXg6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNsYXRlLXgtMXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnZhcigtLXR3LXJvdGF0ZS14LCl2YXIoLS10dy1yb3RhdGUteSwpdmFyKC0tdHctcm90YXRlLXosKXZhcigtLXR3LXNrZXcteCwpdmFyKC0tdHctc2tldy15LCl9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuN3NfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5ncmlkLWNvbHMtMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9LmdyaWQtY29scy1cWzU2cHhfMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTZweCAxZnIgYXV0b30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXB9LnBsYWNlLWl0ZW1zLWNlbnRlcntwbGFjZS1pdGVtczogY2VudGVyfS5pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uaXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0fS5pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9Lmp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5nYXAtMFwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LmdhcC0xe2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5nYXAtMVwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5nYXAtMntnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0uZ2FwLTJcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uZ2FwLTN7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmdhcC01e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uZ2FwLXgtM3tjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmdhcC15LTBcLjV7cm93LWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uanVzdGlmeS1zZWxmLWVuZHtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs0cHhcXXtib3JkZXItcmFkaXVzOjRweH0ucm91bmRlZC1cWzVweFxde2JvcmRlci1yYWRpdXM6NXB4fS5yb3VuZGVkLVxbN3B4XF17Ym9yZGVyLXJhZGl1czo3cHh9LnJvdW5kZWQtXFs4cHhcXXtib3JkZXItcmFkaXVzOjhweH0ucm91bmRlZC1cWzlweFxde2JvcmRlci1yYWRpdXM6OXB4fS5yb3VuZGVkLVxbMTBweFxde2JvcmRlci1yYWRpdXM6MTBweH0ucm91bmRlZC1cWzE0cHhcXXtib3JkZXItcmFkaXVzOjE0cHh9LnJvdW5kZWQtZnVsbHtib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0ucm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1sZyl9LnJvdW5kZWQtbWR7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbWQpfS5yb3VuZGVkLW5vbmV7Ym9yZGVyLXJhZGl1czowfS5yb3VuZGVkLXhse2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXhsKX0ucm91bmRlZC14c3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14cyl9LnJvdW5kZWQtdC1cWzEwcHhcXXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjEwcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTBweH0uYm9yZGVye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoxcHh9LmJvcmRlci0we2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDowfS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ye2JvcmRlci1yaWdodC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmJvcmRlci1ie2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLWRhc2hlZHstLXR3LWJvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXN0eWxlOmRhc2hlZH0uYm9yZGVyLW5vbmV7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXCFib3JkZXItXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjZcKVxde2JvcmRlci1jb2xvcjojMGE4NGZmOTkhaW1wb3J0YW50fS5ib3JkZXItXFtcIzNiNWY5OVxde2JvcmRlci1jb2xvcjojM2I1Zjk5fS5ib3JkZXItXFtcIzVmNjI2OFxde2JvcmRlci1jb2xvcjojNWY2MjY4fS5ib3JkZXItXFtcIzIyMlxde2JvcmRlci1jb2xvcjojMjIyfS5ib3JkZXItXFtcI2ZmNDUzYVxdXC81MHtib3JkZXItY29sb3I6I2ZmNDUzYTgwO2JvcmRlci1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjUpO2JvcmRlci1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly41KX0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOiNmODcxNzE0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8zMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8yNXtib3JkZXItY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8zMHtib3JkZXItY29sb3I6I2ZmZmZmZjRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJvcmRlci10LVxbXCNmNGY0ZjVcXXtib3JkZXItdG9wLWNvbG9yOiNmNGY0ZjV9LmJvcmRlci10LXdoaXRle2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LlwhYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjA4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYxNCFpbXBvcnRhbnR9LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZiFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhMGEwY1xde2JhY2tncm91bmQtY29sb3I6IzBhMGEwY30uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtcIzFjMWMxY1xde2JhY2tncm91bmQtY29sb3I6IzFjMWMxY30uYmctXFtcIzZlNmU3Mlxde2JhY2tncm91bmQtY29sb3I6IzZlNmU3Mn0uYmctXFtcIzlhOWE5ZVxde2JhY2tncm91bmQtY29sb3I6IzlhOWE5ZX0uYmctXFtcIzIwMmIzYVxde2JhY2tncm91bmQtY29sb3I6IzIwMmIzYX0uYmctXFtcIzIyMlxde2JhY2tncm91bmQtY29sb3I6IzIyMn0uYmctXFtcIzI2MzY0Y1xde2JhY2tncm91bmQtY29sb3I6IzI2MzY0Y30uYmctXFtcIzEwMTAxMFxde2JhY2tncm91bmQtY29sb3I6IzEwMTAxMH0uYmctXFtcI2Y4NzE3MVxde2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MX0uYmctXFtcI2ZmNDUzYVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ1M2ExYTtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yKGRpc3BsYXktcDMgLjkyMjY3MyAuMzMzMTM0IC4yNzE1MS8uMSk7YmFja2dyb3VuZC1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly4xKX0uYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjIyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYzOH0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWJsYWNrXC85MHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDBlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1ibGFja1wvOTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItYmxhY2spOTAlLHRyYW5zcGFyZW50KX19LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0xXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHQtMlwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci0zXC41e3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLTF7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucGItMVwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnBiLTJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGItXFsycHhcXXtwYWRkaW5nLWJvdHRvbToycHh9LnBsLTJ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnBsLTJcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucGwtM3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucGwtN3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0ucGwtXFsyNnB4XF17cGFkZGluZy1sZWZ0OjI2cHh9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy1zbnVney0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXNudWcpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctc251Zyl9LmxlYWRpbmctdGlnaHR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctdGlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctdGlnaHQpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1zZW1pYm9sZHstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCl9LnRyYWNraW5nLVxbMFwuMWVtXF17LS10dy10cmFja2luZzouMWVtO2xldHRlci1zcGFjaW5nOi4xZW19LnRyYWNraW5nLVxbMFwuMDJlbVxdey0tdHctdHJhY2tpbmc6LjAyZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19LnRyYWNraW5nLVxbMFwuMDRlbVxdey0tdHctdHJhY2tpbmc6LjA0ZW07bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLVxbMFwuMDZlbVxdey0tdHctdHJhY2tpbmc6LjA2ZW07bGV0dGVyLXNwYWNpbmc6LjA2ZW19LnRyYWNraW5nLVxbMFwuMDhlbVxdey0tdHctdHJhY2tpbmc6LjA4ZW07bGV0dGVyLXNwYWNpbmc6LjA4ZW19LnRyYWNraW5nLXdpZGV7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlKTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy13aWRlKX0uYnJlYWstd29yZHN7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS50ZXh0LWVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0uXCF0ZXh0LXdoaXRle2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKSFpbXBvcnRhbnR9LnRleHQtXFtcIzBhMGEwY1xde2NvbG9yOiMwYTBhMGN9LnRleHQtXFtcIzhlOGU5M1xde2NvbG9yOiM4ZThlOTN9LnRleHQtXFtcIzM0ZDM5OVxde2NvbG9yOiMzNGQzOTl9LnRleHQtXFtcIzA2MjAxOFxde2NvbG9yOiMwNjIwMTh9LnRleHQtXFtcI2M4ZDdmZlxde2NvbG9yOiNjOGQ3ZmZ9LnRleHQtXFtcI2QyZTdmZlxde2NvbG9yOiNkMmU3ZmZ9LnRleHQtXFtcI2ZmYjNhZFxde2NvbG9yOiNmZmIzYWR9LnRleHQtYWNjZW50e2NvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LnRleHQtYW1iZXItNDAwe2NvbG9yOnZhcigtLWNvbG9yLWFtYmVyLTQwMCl9LnRleHQtY3lhbi00MDB7Y29sb3I6dmFyKC0tY29sb3ItY3lhbi00MDApfS50ZXh0LWRhbmdlcntjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS50ZXh0LWRhbmdlci1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0udGV4dC1lbWVyYWxkLTQwMHtjb2xvcjp2YXIoLS1jb2xvci1lbWVyYWxkLTQwMCl9LnRleHQtc2t5LTQwMHtjb2xvcjp2YXIoLS1jb2xvci1za3ktNDAwKX0udGV4dC12aW9sZXQtNDAwe2NvbG9yOnZhcigtLWNvbG9yLXZpb2xldC00MDApfS50ZXh0LXdhcm5pbmd7Y29sb3I6dmFyKC0tY29sb3Itd2FybmluZyl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC8zMHtjb2xvcjojZmZmZmZmNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTMwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC8zNXtjb2xvcjojZmZmZmZmNTl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTM1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS00MHtvcGFjaXR5Oi40fS5vcGFjaXR5LTUwe29wYWNpdHk6LjV9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5zaGFkb3d7LS10dy1zaGFkb3c6MCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMDZcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsI2ZmZmZmZjBmKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNFwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC41XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwODApO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzhweF8wXzMycHhfcmdiYVwoMFwsMFwsMFwsMFwuMzVcKVxdey0tdHctc2hhZG93OjhweCAwIDMycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA1OSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctbGd7LS10dy1zaGFkb3c6MCAxMHB4IDE1cHggLTNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDRweCA2cHggLTRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmcsLnJpbmctMXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmctMnstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCg3NFwsMjIyXCwxMjhcLDBcLjdcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjNGFkZTgwYjN9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCgyNDhcLDExM1wsMTEzXCwwXC41NVwpXF17Ym94LXNoYWRvdzowIDAgNnB4ICNmODcxNzE4Y30ucmluZy1cW1wjMWMxYzFlXF17LS10dy1yaW5nLWNvbG9yOiMxYzFjMWV9LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5ibHVyey0tdHctYmx1cjpibHVyKDhweCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5ncmF5c2NhbGV7LS10dy1ncmF5c2NhbGU6Z3JheXNjYWxlKDEwMCUpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1cnstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cig4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxMnB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMTJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzE4cHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLW1key0tdHctYmFja2Ryb3AtYmx1cjpibHVyKHZhcigtLWJsdXItbWQpKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1zYXR1cmF0ZS0xNTB7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTpzYXR1cmF0ZSgxNTAlKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1maWx0ZXJ7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sdHJhbnNsYXRlLHNjYWxlLHJvdGF0ZSxmaWx0ZXIsLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIsYmFja2Ryb3AtZmlsdGVyLGRpc3BsYXksY29udGVudC12aXNpYmlsaXR5LG92ZXJsYXkscG9pbnRlci1ldmVudHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW2JvcmRlci1jb2xvclwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW3dpZHRoXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTp3aWR0aCxiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG87dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xNTB7LS10dy1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwey0tdHctZHVyYXRpb246LjJzO3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5kdXJhdGlvbi0zMDB7LS10dy1kdXJhdGlvbjouM3M7dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59Llxbc3RyZWFtXDphdmNjXF17c3RyZWFtOmF2Y2N9Llxbc3RyZWFtXDpoMjY0XF17c3RyZWFtOmgyNjR9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmJsb2NrOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6YmxvY2t9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC84MDpob3Zlcntjb2xvcjojZmZmY31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvODA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvODU6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZm9jdXNcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjI0XClcXTpmb2N1c3tib3JkZXItY29sb3I6I2ZmZmZmZjNkfS5mb2N1c1w6Ymctd2hpdGVcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1c1w6Ymctd2hpdGVcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1c1w6b3V0bGluZS1ub25lOmZvY3Vzey0tdHctb3V0bGluZS1zdHlsZTpub25lO291dGxpbmUtc3R5bGU6bm9uZX0uZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzLXZpc2libGVcOm9wYWNpdHktMTAwOmZvY3VzLXZpc2libGV7b3BhY2l0eToxfS5mb2N1cy12aXNpYmxlXDpcW291dGxpbmVcOjFcLjVweF9zb2xpZF9yZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjU1XClcXTpmb2N1cy12aXNpYmxle291dGxpbmU6MS41cHggc29saWQgIzBhODRmZjhjfS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtMjpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtNDpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjRweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS13aGl0ZVwvNjA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LmFjdGl2ZVw6c2NhbGUtXFswXC45N1xdOmFjdGl2ZXtzY2FsZTouOTd9QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLVxbXCMyYTJhMmNcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJhMmEyY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjM4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06ZW5hYmxlZDpob3Zlcntjb2xvcjojMGEwYTBjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtd2hpdGU6ZW5hYmxlZDpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YnJpZ2h0bmVzcy1cWzFcLjA4XF06ZW5hYmxlZDpob3ZlcnstLXR3LWJyaWdodG5lc3M6YnJpZ2h0bmVzcygxLjA4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9fS5kaXNhYmxlZFw6Y3Vyc29yLWRlZmF1bHQ6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZGlzYWJsZWRcOm9wYWNpdHktNDA6ZGlzYWJsZWR7b3BhY2l0eTouNH0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX1AbWVkaWEgKG1heC13aWR0aDo4OTkuOTk5cHgpey5tYXgtXFs5MDBweFxdXDpoaWRkZW57ZGlzcGxheTpub25lfX0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXByb2dyZXNze2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6YmctXFt2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKVxdOjotbW96LXJhbmdlLXByb2dyZXNze2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LW1vei1yYW5nZS10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ym9yZGVyLW5vbmU6Oi1tb3otcmFuZ2UtdGh1bWJ7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLHJnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjIyXClfdmFyXCgtLXNsaWRlci1maWxsXClcKVxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil2YXIoLS1zbGlkZXItZmlsbCksI2ZmZmZmZjM4IHZhcigtLXNsaWRlci1maWxsKSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6LW10LVxbNFwuNXB4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie21hcmdpbi10b3A6LTQuNXB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6YXBwZWFyYW5jZS1ub25lOjotd2Via2l0LXNsaWRlci10aHVtYnthcHBlYXJhbmNlOm5vbmV9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2hhZG93LVxbMF8xcHhfM3B4X3JnYmFcKDBcLDBcLDBcLDBcLjQ1XClcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7LS10dy1zaGFkb3c6MCAxcHggM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNzMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX19OnJvb3R7LS1idW5jc3MtbGlnaHQ6IDstLWJ1bmNzcy1kYXJrOmluaXRpYWw7Y29sb3Itc2NoZW1lOmRhcms7LS1zZXJ2ZS1zaW0tcGFuZWwtYmc6IzE4MTgxODstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudDojMTgxODE4Yzc7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQ6IzE4MTgxODAwfUBzdXBwb3J0cyAoaW50ZXJwb2xhdGUtc2l6ZTogYWxsb3cta2V5d29yZHMpezpyb290e2ludGVycG9sYXRlLXNpemU6YWxsb3cta2V5d29yZHN9fWRldGFpbHMubGVtLXNlY3Rpb246OmRldGFpbHMtY29udGVudHtvdmVyZmxvdzpjbGlwO3RyYW5zaXRpb246aGVpZ2h0IC4yMnMgZWFzZSxjb250ZW50LXZpc2liaWxpdHkgLjIycyBhbGxvdy1kaXNjcmV0ZTtoZWlnaHQ6MH1kZXRhaWxzLmxlbS1zZWN0aW9uW29wZW5dOjpkZXRhaWxzLWNvbnRlbnR7aGVpZ2h0OmF1dG99ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5e2xpc3Qtc3R5bGU6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3Zlcntjb2xvcjojZmZmfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3ZlciAubGVtLWNoZXZyb257Y29sb3I6I2ZmZmZmZmQ5IWltcG9ydGFudH0ubGVtLWNoZXZyb257dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE2cyxjb2xvciAuMTJzfUBjb250YWluZXIgKHdpZHRoPD0yMTBweCl7W2RhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsXXtkaXNwbGF5Om5vbmV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3AtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEycHgpc2NhbGUoLjk2KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoOHB4KXNjYWxlKC45Nil9fS5zZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXthbmltYXRpb246c2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZX0uZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5ncmlkLXRpbGU6aG92ZXIgLmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MX0uZ3JpZC1zaHV0ZG93bi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM1YTFkMWQ7Ym9yZGVyLWNvbG9yOiNhMzN9LmdyaWQtdGlsZTpob3Zlcntib3JkZXItY29sb3I6IzU1NSFpbXBvcnRhbnR9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcm90YXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYm9yZGVyLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1sZWFkaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZm9udC13ZWlnaHR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFja2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9yZGluYWx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zbGFzaGVkLXplcm97c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZpZ3VyZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtc3BhY2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZnJhY3Rpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LW9yZGluYWw6aW5pdGlhbDstLXR3LXNsYXNoZWQtemVybzppbml0aWFsOy0tdHctbnVtZXJpYy1maWd1cmU6aW5pdGlhbDstLXR3LW51bWVyaWMtc3BhY2luZzppbml0aWFsOy0tdHctbnVtZXJpYy1mcmFjdGlvbjppbml0aWFsOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctc2hhZG93LWFscGhhOjEwMCU7LS10dy1pbnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LXJpbmctaW5zZXQ6aW5pdGlhbDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctb3V0bGluZS1zdHlsZTpzb2xpZDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1iYWNrZHJvcC1ibHVyOmluaXRpYWw7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1iYWNrZHJvcC1jb250cmFzdDppbml0aWFsOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1pbnZlcnQ6aW5pdGlhbDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1zZXBpYTppbml0aWFsOy0tdHctZHVyYXRpb246aW5pdGlhbDstLXR3LWVhc2U6aW5pdGlhbH19fQo8L3N0eWxlPgo8L2hlYWQ+PGJvZHk+CjxkaXYgaWQ9InJvb3QiPjwvZGl2Pgo8IS0tX19TSU1fUFJFVklFV19DT05GSUdfXy0tPgo8c2NyaXB0IHR5cGU9Im1vZHVsZSI+dmFyIEkyLGUsajgsZzcsaDAseTgsdjgsUjgsejMsTjUsUDIsaDgsTzMsTDMsSDMsZzgsejU9e30sTDU9W10sZjc9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxFMj1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIFQwKCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIEYzKCQpeyQmJiQucGFyZW50Tm9kZSYmJC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQpfWZ1bmN0aW9uIHUxKCQsSixRKXt2YXIgWCxLLFkscT17fTtmb3IoWSBpbiBKKVk9PSJrZXkiP1g9SltZXTpZPT0icmVmIj9LPUpbWV06cVtZXT1KW1ldO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKHEuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP0kyLmNhbGwoYXJndW1lbnRzLDIpOlEpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYkLmRlZmF1bHRQcm9wcyE9bnVsbClmb3IoWSBpbiAkLmRlZmF1bHRQcm9wcylxW1ldPT09dm9pZCAwJiYocVtZXT0kLmRlZmF1bHRQcm9wc1tZXSk7cmV0dXJuIFQyKCQscSxYLEssbnVsbCl9ZnVuY3Rpb24gVDIoJCxKLFEsWCxLKXt2YXIgWT17dHlwZTokLHByb3BzOkosa2V5OlEscmVmOlgsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oks9PW51bGw/KytqODpLLF9faTotMSxfX3U6MH07cmV0dXJuIEs9PW51bGwmJmUudm5vZGUhPW51bGwmJmUudm5vZGUoWSksWX1mdW5jdGlvbiB3Migpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIEoxKCQpe3JldHVybiAkLmNoaWxkcmVufWZ1bmN0aW9uIGQxKCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfWZ1bmN0aW9uIFoyKCQsSil7aWYoSj09bnVsbClyZXR1cm4gJC5fXz9aMigkLl9fLCQuX19pKzEpOm51bGw7Zm9yKHZhciBRO0o8JC5fX2subGVuZ3RoO0orKylpZigoUT0kLl9fa1tKXSkhPW51bGwmJlEuX19lIT1udWxsKXJldHVybiBRLl9fZTtyZXR1cm4gdHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIj9aMigkKTpudWxsfWZ1bmN0aW9uIG03KCQpe2lmKCQuX19QJiYkLl9fZCl7dmFyIEo9JC5fX3YsUT1KLl9fZSxYPVtdLEs9W10sWT1UMCh7fSxKKTtZLl9fdj1KLl9fdisxLGUudm5vZGUmJmUudm5vZGUoWSksQTMoJC5fX1AsWSxKLCQuX19uLCQuX19QLm5hbWVzcGFjZVVSSSwzMiZKLl9fdT9bUV06bnVsbCxYLFE9PW51bGw/WjIoSik6USwhISgzMiZKLl9fdSksSyksWS5fX3Y9Si5fX3YsWS5fXy5fX2tbWS5fX2ldPVksdTgoWCxZLEspLEouX19lPUouX189bnVsbCxZLl9fZSE9USYmZjgoWSl9fWZ1bmN0aW9uIGY4KCQpe2lmKCgkPSQuX18pIT1udWxsJiYkLl9fYyE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1udWxsLCQuX19rLnNvbWUoZnVuY3Rpb24oSil7aWYoSiE9bnVsbCYmSi5fX2UhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9Si5fX2V9KSxmOCgkKX1mdW5jdGlvbiBVMygkKXsoISQuX19kJiYoJC5fX2Q9ITApJiZoMC5wdXNoKCQpJiYhSDUuX19yKyt8fHk4IT1lLmRlYm91bmNlUmVuZGVyaW5nKSYmKCh5OD1lLmRlYm91bmNlUmVuZGVyaW5nKXx8djgpKEg1KX1mdW5jdGlvbiBINSgpe3RyeXtmb3IodmFyICQsSj0xO2gwLmxlbmd0aDspaDAubGVuZ3RoPkomJmgwLnNvcnQoUjgpLCQ9aDAuc2hpZnQoKSxKPWgwLmxlbmd0aCxtNygkKX1maW5hbGx5e2gwLmxlbmd0aD1INS5fX3I9MH19ZnVuY3Rpb24gbTgoJCxKLFEsWCxLLFkscSxHLEIsTix6KXt2YXIgVixILEMsQSxMLFUsRixXPVgmJlguX19rfHxMNSxFPUoubGVuZ3RoO2ZvcihCPXA3KFEsSixXLEIsRSksVj0wO1Y8RTtWKyspKEM9US5fX2tbVl0pIT1udWxsJiYoSD1DLl9faSE9LTEmJldbQy5fX2ldfHx6NSxDLl9faT1WLFU9QTMoJCxDLEgsSyxZLHEsRyxCLE4seiksQT1DLl9fZSxDLnJlZiYmSC5yZWYhPUMucmVmJiYoSC5yZWYmJk0zKEgucmVmLG51bGwsQyksei5wdXNoKEMucmVmLEMuX19jfHxBLEMpKSxMPT1udWxsJiZBIT1udWxsJiYoTD1BKSwoRj0hISg0JkMuX191KSl8fEguX19rPT09Qy5fX2s/KEI9cDgoQyxCLCQsRiksRiYmSC5fX2UmJihILl9fZT1udWxsKSk6dHlwZW9mIEMudHlwZT09ImZ1bmN0aW9uIiYmVSE9PXZvaWQgMD9CPVU6QSYmKEI9QS5uZXh0U2libGluZyksQy5fX3UmPS03KTtyZXR1cm4gUS5fX2U9TCxCfWZ1bmN0aW9uIHA3KCQsSixRLFgsSyl7dmFyIFkscSxHLEIsTix6PVEubGVuZ3RoLFY9eixIPTA7Zm9yKCQuX19rPUFycmF5KEspLFk9MDtZPEs7WSsrKShxPUpbWV0pIT1udWxsJiZ0eXBlb2YgcSE9ImJvb2xlYW4iJiZ0eXBlb2YgcSE9ImZ1bmN0aW9uIj8odHlwZW9mIHE9PSJzdHJpbmcifHx0eXBlb2YgcT09Im51bWJlciJ8fHR5cGVvZiBxPT0iYmlnaW50Inx8cS5jb25zdHJ1Y3Rvcj09U3RyaW5nP3E9JC5fX2tbWV09VDIobnVsbCxxLG51bGwsbnVsbCxudWxsKTpFMihxKT9xPSQuX19rW1ldPVQyKEoxLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPVQyKHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsQj1ZK0gscS5fXz0kLHEuX19iPSQuX19iKzEsRz1udWxsLChOPXEuX19pPXU3KHEsUSxCLFYpKSE9LTEmJihWLS0sKEc9UVtOXSkmJihHLl9fdXw9MikpLEc9PW51bGx8fEcuX192PT1udWxsPyhOPT0tMSYmKEs+ej9ILS06Szx6JiZIKyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOk4hPUImJihOPT1CLTE/SC0tOk49PUIrMT9IKys6KE4+Qj9ILS06SCsrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoVilmb3IoWT0wO1k8ejtZKyspKEc9UVtZXSkhPW51bGwmJigyJkcuX191KT09MCYmKEcuX19lPT1YJiYoWD1aMihHKSksZDgoRyxHKSk7cmV0dXJuIFh9ZnVuY3Rpb24gcDgoJCxKLFEsWCl7dmFyIEssWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoSz0kLl9fayxZPTA7SyYmWTxLLmxlbmd0aDtZKyspS1tZXSYmKEtbWV0uX189JCxKPXA4KEtbWV0sSixRLFgpKTtyZXR1cm4gSn0kLl9fZSE9SiYmKFgmJihKJiYkLnR5cGUmJiFKLnBhcmVudE5vZGUmJihKPVoyKCQpKSxRLmluc2VydEJlZm9yZSgkLl9fZSxKfHxudWxsKSksSj0kLl9fZSk7ZG8gSj1KJiZKLm5leHRTaWJsaW5nO3doaWxlKEohPW51bGwmJkoubm9kZVR5cGU9PTgpO3JldHVybiBKfWZ1bmN0aW9uIFgwKCQsSil7cmV0dXJuIEo9Snx8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KEUyKCQpPyQuc29tZShmdW5jdGlvbihRKXtYMChRLEopfSk6Si5wdXNoKCQpKSxKfWZ1bmN0aW9uIHU3KCQsSixRLFgpe3ZhciBLLFkscSxHPSQua2V5LEI9JC50eXBlLE49SltRXSx6PU4hPW51bGwmJigyJk4uX191KT09MDtpZihOPT09bnVsbCYmRz09bnVsbHx8eiYmRz09Ti5rZXkmJkI9PU4udHlwZSlyZXR1cm4gUTtpZihYPih6PzE6MCkpe2ZvcihLPVEtMSxZPVErMTtLPj0wfHxZPEoubGVuZ3RoOylpZigoTj1KW3E9Sz49MD9LLS06WSsrXSkhPW51bGwmJigyJk4uX191KT09MCYmRz09Ti5rZXkmJkI9PU4udHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBTOCgkLEosUSl7SlswXT09Ii0iPyQuc2V0UHJvcGVydHkoSixRPT1udWxsPyIiOlEpOiRbSl09UT09bnVsbD8iIjp0eXBlb2YgUSE9Im51bWJlciJ8fGY3LnRlc3QoSik/UTpRKyJweCJ9ZnVuY3Rpb24gQjUoJCxKLFEsWCxLKXt2YXIgWSxxOyQ6aWYoSj09InN0eWxlIilpZih0eXBlb2YgUT09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PVE7ZWxzZXtpZih0eXBlb2YgWD09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9WD0iIiksWClmb3IoSiBpbiBYKVEmJkogaW4gUXx8UzgoJC5zdHlsZSxKLCIiKTtpZihRKWZvcihKIGluIFEpWCYmUVtKXT09WFtKXXx8UzgoJC5zdHlsZSxKLFFbSl0pfWVsc2UgaWYoSlswXT09Im8iJiZKWzFdPT0ibiIpWT1KIT0oSj1KLnJlcGxhY2UoaDgsIiQxIikpLHE9Si50b0xvd2VyQ2FzZSgpLEo9cSBpbiAkfHxKPT0ib25Gb2N1c091dCJ8fEo9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6Si5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtKK1ldPVEsUT9YP1FbUDJdPVhbUDJdOihRW1AyXT1PMywkLmFkZEV2ZW50TGlzdGVuZXIoSixZP0gzOkwzLFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoSixZP0gzOkwzLFkpO2Vsc2V7aWYoSz09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilKPUoucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoSiE9IndpZHRoIiYmSiE9ImhlaWdodCImJkohPSJocmVmIiYmSiE9Imxpc3QiJiZKIT0iZm9ybSImJkohPSJ0YWJJbmRleCImJkohPSJkb3dubG9hZCImJkohPSJyb3dTcGFuIiYmSiE9ImNvbFNwYW4iJiZKIT0icm9sZSImJkohPSJwb3BvdmVyIiYmSiBpbiAkKXRyeXskW0pdPVE9PW51bGw/IiI6UTticmVhayAkfWNhdGNoKEcpe310eXBlb2YgUT09ImZ1bmN0aW9uInx8KFE9PW51bGx8fFE9PT0hMSYmSls0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKEopOiQuc2V0QXR0cmlidXRlKEosSj09InBvcG92ZXIiJiZRPT0xPyIiOlEpKX19ZnVuY3Rpb24geDgoJCl7cmV0dXJuIGZ1bmN0aW9uKEope2lmKHRoaXMubCl7dmFyIFE9dGhpcy5sW0oudHlwZSskXTtpZihKW041XT09bnVsbClKW041XT1PMysrO2Vsc2UgaWYoSltONV08UVtQMl0pcmV0dXJuO3JldHVybiBRKGUuZXZlbnQ/ZS5ldmVudChKKTpKKX19fWZ1bmN0aW9uIEEzKCQsSixRLFgsSyxZLHEsRyxCLE4pe3ZhciB6LFYsSCxDLEEsTCxVLEYsVyxFLFAseCxELG4sUixkPUoudHlwZTtpZihKLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZRLl9fdSYmKEI9ISEoMzImUS5fX3UpLFk9W0c9Si5fX2U9US5fX2VdKSwoej1lLl9fYikmJnooSik7JDppZih0eXBlb2YgZD09ImZ1bmN0aW9uIil0cnl7aWYoRj1KLnByb3BzLFc9ZC5wcm90b3R5cGUmJmQucHJvdG90eXBlLnJlbmRlcixFPSh6PWQuY29udGV4dFR5cGUpJiZYW3ouX19jXSxQPXo/RT9FLnByb3BzLnZhbHVlOnouX186WCxRLl9fYz9VPShWPUouX19jPVEuX19jKS5fXz1WLl9fRTooVz9KLl9fYz1WPW5ldyBkKEYsUCk6KEouX19jPVY9bmV3IGQxKEYsUCksVi5jb25zdHJ1Y3Rvcj1kLFYucmVuZGVyPWQ3KSxFJiZFLnN1YihWKSxWLnN0YXRlfHwoVi5zdGF0ZT17fSksVi5fX249WCxIPVYuX19kPSEwLFYuX19oPVtdLFYuX3NiPVtdKSxXJiZWLl9fcz09bnVsbCYmKFYuX19zPVYuc3RhdGUpLFcmJmQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIT1udWxsJiYoVi5fX3M9PVYuc3RhdGUmJihWLl9fcz1UMCh7fSxWLl9fcykpLFQwKFYuX19zLGQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKEYsVi5fX3MpKSksQz1WLnByb3BzLEE9Vi5zdGF0ZSxWLl9fdj1KLEgpVyYmZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJlYuY29tcG9uZW50V2lsbE1vdW50IT1udWxsJiZWLmNvbXBvbmVudFdpbGxNb3VudCgpLFcmJlYuY29tcG9uZW50RGlkTW91bnQhPW51bGwmJlYuX19oLnB1c2goVi5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZihXJiZkLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmRiE9PUMmJlYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9bnVsbCYmVi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKEYsUCksSi5fX3Y9PVEuX192fHwhVi5fX2UmJlYuc2hvdWxkQ29tcG9uZW50VXBkYXRlIT1udWxsJiZWLnNob3VsZENvbXBvbmVudFVwZGF0ZShGLFYuX19zLFApPT09ITEpe0ouX192IT1RLl9fdiYmKFYucHJvcHM9RixWLnN0YXRlPVYuX19zLFYuX19kPSExKSxKLl9fZT1RLl9fZSxKLl9faz1RLl9fayxKLl9fay5zb21lKGZ1bmN0aW9uKGkpe2kmJihpLl9fPUopfSksTDUucHVzaC5hcHBseShWLl9faCxWLl9zYiksVi5fc2I9W10sVi5fX2gubGVuZ3RoJiZxLnB1c2goVik7YnJlYWsgJH1WLmNvbXBvbmVudFdpbGxVcGRhdGUhPW51bGwmJlYuY29tcG9uZW50V2lsbFVwZGF0ZShGLFYuX19zLFApLFcmJlYuY29tcG9uZW50RGlkVXBkYXRlIT1udWxsJiZWLl9faC5wdXNoKGZ1bmN0aW9uKCl7Vi5jb21wb25lbnREaWRVcGRhdGUoQyxBLEwpfSl9aWYoVi5jb250ZXh0PVAsVi5wcm9wcz1GLFYuX19QPSQsVi5fX2U9ITEseD1lLl9fcixEPTAsVylWLnN0YXRlPVYuX19zLFYuX19kPSExLHgmJngoSiksej1WLnJlbmRlcihWLnByb3BzLFYuc3RhdGUsVi5jb250ZXh0KSxMNS5wdXNoLmFwcGx5KFYuX19oLFYuX3NiKSxWLl9zYj1bXTtlbHNlIGRvIFYuX19kPSExLHgmJngoSiksej1WLnJlbmRlcihWLnByb3BzLFYuc3RhdGUsVi5jb250ZXh0KSxWLnN0YXRlPVYuX19zO3doaWxlKFYuX19kJiYrK0Q8MjUpO1Yuc3RhdGU9Vi5fX3MsVi5nZXRDaGlsZENvbnRleHQhPW51bGwmJihYPVQwKFQwKHt9LFgpLFYuZ2V0Q2hpbGRDb250ZXh0KCkpKSxXJiYhSCYmVi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKEw9Vi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShDLEEpKSxuPXohPW51bGwmJnoudHlwZT09PUoxJiZ6LmtleT09bnVsbD9sOCh6LnByb3BzLmNoaWxkcmVuKTp6LEc9bTgoJCxFMihuKT9uOltuXSxKLFEsWCxLLFkscSxHLEIsTiksVi5iYXNlPUouX19lLEouX191Jj0tMTYxLFYuX19oLmxlbmd0aCYmcS5wdXNoKFYpLFUmJihWLl9fRT1WLl9fPW51bGwpfWNhdGNoKGkpe2lmKEouX192PW51bGwsQnx8WSE9bnVsbClpZihpLnRoZW4pe2ZvcihKLl9fdXw9Qj8xNjA6MTI4O0cmJkcubm9kZVR5cGU9PTgmJkcubmV4dFNpYmxpbmc7KUc9Ry5uZXh0U2libGluZztZW1kuaW5kZXhPZihHKV09bnVsbCxKLl9fZT1HfWVsc2V7Zm9yKFI9WS5sZW5ndGg7Ui0tOylGMyhZW1JdKTtDMyhKKX1lbHNlIEouX19lPVEuX19lLEouX19rPVEuX19rLGkudGhlbnx8QzMoSik7ZS5fX2UoaSxKLFEpfWVsc2UgWT09bnVsbCYmSi5fX3Y9PVEuX192PyhKLl9faz1RLl9fayxKLl9fZT1RLl9fZSk6Rz1KLl9fZT1sNyhRLl9fZSxKLFEsWCxLLFkscSxCLE4pO3JldHVybih6PWUuZGlmZmVkKSYmeihKKSwxMjgmSi5fX3U/dm9pZCAwOkd9ZnVuY3Rpb24gQzMoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShDMykpfWZ1bmN0aW9uIHU4KCQsSixRKXtmb3IodmFyIFg9MDtYPFEubGVuZ3RoO1grKylNMyhRW1hdLFFbKytYXSxRWysrWF0pO2UuX19jJiZlLl9fYyhKLCQpLCQuc29tZShmdW5jdGlvbihLKXt0cnl7JD1LLl9faCxLLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKEspfSl9Y2F0Y2goWSl7ZS5fX2UoWSxLLl9fdil9fSl9ZnVuY3Rpb24gbDgoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOkUyKCQpPyQubWFwKGw4KTpUMCh7fSwkKX1mdW5jdGlvbiBsNygkLEosUSxYLEssWSxxLEcsQil7dmFyIE4seixWLEgsQyxBLEwsVT1RLnByb3BzfHx6NSxGPUoucHJvcHMsVz1KLnR5cGU7aWYoVz09InN2ZyI/Sz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOlc9PSJtYXRoIj9LPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpLfHwoSz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihOPTA7TjxZLmxlbmd0aDtOKyspaWYoKEM9WVtOXSkmJiJzZXRBdHRyaWJ1dGUiaW4gQz09ISFXJiYoVz9DLmxvY2FsTmFtZT09VzpDLm5vZGVUeXBlPT0zKSl7JD1DLFlbTl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoVz09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoRik7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoSyxXLEYuaXMmJkYpLEcmJihlLl9fbSYmZS5fX20oSixZKSxHPSExKSxZPW51bGx9aWYoVz09bnVsbClVPT09Rnx8RyYmJC5kYXRhPT1GfHwoJC5kYXRhPUYpO2Vsc2V7aWYoWT1ZJiZJMi5jYWxsKCQuY2hpbGROb2RlcyksIUcmJlkhPW51bGwpZm9yKFU9e30sTj0wO048JC5hdHRyaWJ1dGVzLmxlbmd0aDtOKyspVVsoQz0kLmF0dHJpYnV0ZXNbTl0pLm5hbWVdPUMudmFsdWU7Zm9yKE4gaW4gVSlDPVVbTl0sTj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9WPUM6Tj09ImNoaWxkcmVuInx8KE4gaW4gRil8fE49PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEYpfHxOPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gRil8fEI1KCQsTixudWxsLEMsSyk7Zm9yKE4gaW4gRilDPUZbTl0sTj09ImNoaWxkcmVuIj9IPUM6Tj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj96PUM6Tj09InZhbHVlIj9BPUM6Tj09ImNoZWNrZWQiP0w9QzpHJiZ0eXBlb2YgQyE9ImZ1bmN0aW9uInx8VVtOXT09PUN8fEI1KCQsTixDLFVbTl0sSyk7aWYoeilHfHxWJiYoei5fX2h0bWw9PVYuX19odG1sfHx6Ll9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9ei5fX2h0bWwpLEouX19rPVtdO2Vsc2UgaWYoViYmKCQuaW5uZXJIVE1MPSIiKSxtOChKLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsRTIoSCk/SDpbSF0sSixRLFgsVz09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpLLFkscSxZP1lbMF06US5fX2smJloyKFEsMCksRyxCKSxZIT1udWxsKWZvcihOPVkubGVuZ3RoO04tLTspRjMoWVtOXSk7R3x8KE49InZhbHVlIixXPT0icHJvZ3Jlc3MiJiZBPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOkEhPW51bGwmJihBIT09JFtOXXx8Vz09InByb2dyZXNzIiYmIUF8fFc9PSJvcHRpb24iJiZBIT1VW05dKSYmQjUoJCxOLEEsVVtOXSxLKSxOPSJjaGVja2VkIixMIT1udWxsJiZMIT0kW05dJiZCNSgkLE4sTCxVW05dLEspKX1yZXR1cm4gJH1mdW5jdGlvbiBNMygkLEosUSl7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWD10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WCYmJC5fX3UoKSxYJiZKPT1udWxsfHwoJC5fX3U9JChKKSl9ZWxzZSAkLmN1cnJlbnQ9Sn1jYXRjaChLKXtlLl9fZShLLFEpfX1mdW5jdGlvbiBkOCgkLEosUSl7dmFyIFgsSztpZihlLnVubW91bnQmJmUudW5tb3VudCgkKSwoWD0kLnJlZikmJihYLmN1cnJlbnQmJlguY3VycmVudCE9JC5fX2V8fE0zKFgsbnVsbCxKKSksKFg9JC5fX2MpIT1udWxsKXtpZihYLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtYLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7ZS5fX2UoWSxKKX1YLmJhc2U9WC5fX1A9bnVsbH1pZihYPSQuX19rKWZvcihLPTA7SzxYLmxlbmd0aDtLKyspWFtLXSYmZDgoWFtLXSxKLFF8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO1F8fEYzKCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBkNygkLEosUSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxRKX1mdW5jdGlvbiB4MCgkLEosUSl7dmFyIFgsSyxZLHE7Sj09ZG9jdW1lbnQmJihKPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksZS5fXyYmZS5fXygkLEopLEs9KFg9dHlwZW9mIFE9PSJmdW5jdGlvbiIpP251bGw6USYmUS5fX2t8fEouX19rLFk9W10scT1bXSxBMyhKLCQ9KCFYJiZRfHxKKS5fX2s9dTEoSjEsbnVsbCxbJF0pLEt8fHo1LHo1LEoubmFtZXNwYWNlVVJJLCFYJiZRP1tRXTpLP251bGw6Si5maXJzdENoaWxkP0kyLmNhbGwoSi5jaGlsZE5vZGVzKTpudWxsLFksIVgmJlE/UTpLP0suX19lOkouZmlyc3RDaGlsZCxYLHEpLHU4KFksJCxxKX1mdW5jdGlvbiBVNSgkLEope3gwKCQsSixVNSl9ZnVuY3Rpb24gazMoJCxKLFEpe3ZhciBYLEssWSxxLEc9VDAoe30sJC5wcm9wcyk7Zm9yKFkgaW4gJC50eXBlJiYkLnR5cGUuZGVmYXVsdFByb3BzJiYocT0kLnR5cGUuZGVmYXVsdFByb3BzKSxKKVk9PSJrZXkiP1g9SltZXTpZPT0icmVmIj9LPUpbWV06R1tZXT1KW1ldPT09dm9pZCAwJiZxIT1udWxsP3FbWV06SltZXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoRy5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/STIuY2FsbChhcmd1bWVudHMsMik6USksVDIoJC50eXBlLEcsWHx8JC5rZXksS3x8JC5yZWYsbnVsbCl9ZnVuY3Rpb24gTzAoJCl7ZnVuY3Rpb24gSihRKXt2YXIgWCxLO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFg9bmV3IFNldCwoSz17fSlbSi5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gS30sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1g9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWC5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLFUzKHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1guYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1gmJlguZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxRLmNoaWxkcmVufXJldHVybiBKLl9fYz0iX19jQyIrZzgrKyxKLl9fPSQsSi5Qcm92aWRlcj1KLl9fbD0oSi5Db25zdW1lcj1mdW5jdGlvbihRLFgpe3JldHVybiBRLmNoaWxkcmVuKFgpfSkuY29udGV4dFR5cGU9SixKfUkyPUw1LnNsaWNlLGU9e19fZTpmdW5jdGlvbigkLEosUSxYKXtmb3IodmFyIEssWSxxO0o9Si5fXzspaWYoKEs9Si5fX2MpJiYhSy5fXyl0cnl7aWYoKFk9Sy5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoSy5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1LLl9fZCksSy5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKEsuY29tcG9uZW50RGlkQ2F0Y2goJCxYfHx7fSkscT1LLl9fZCkscSlyZXR1cm4gSy5fX0U9S31jYXRjaChHKXskPUd9dGhyb3cgJH19LGo4PTAsZzc9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LGQxLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLEope3ZhciBRO1E9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPVQwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKFQwKHt9LFEpLHRoaXMucHJvcHMpKSwkJiZUMChRLCQpLCQhPW51bGwmJnRoaXMuX192JiYoSiYmdGhpcy5fc2IucHVzaChKKSxVMyh0aGlzKSl9LGQxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksVTModGhpcykpfSxkMS5wcm90b3R5cGUucmVuZGVyPUoxLGgwPVtdLHY4PXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxSOD1mdW5jdGlvbigkLEope3JldHVybiAkLl9fdi5fX2ItSi5fX3YuX19ifSxINS5fX3I9MCx6Mz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLE41PSJfX2QiK3ozLFAyPSJfX2EiK3ozLGg4PS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLE8zPTAsTDM9eDgoITEpLEgzPXg4KCEwKSxnOD0wO3ZhciBnMCxTMSxXMyxjOCxYMj0wLGU4PVtdLGcxPWUsbzg9ZzEuX19iLGk4PWcxLl9fcixuOD1nMS5kaWZmZWQscjg9ZzEuX19jLGE4PWcxLnVubW91bnQsczg9ZzEuX187ZnVuY3Rpb24gSzIoJCxKKXtnMS5fX2gmJmcxLl9faChTMSwkLFgyfHxKKSxYMj0wO3ZhciBRPVMxLl9fSHx8KFMxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PVEuX18ubGVuZ3RoJiZRLl9fLnB1c2goe30pLFEuX19bJF19ZnVuY3Rpb24gaygkKXtyZXR1cm4gWDI9MSxvMCgkOSwkKX1mdW5jdGlvbiBvMCgkLEosUSl7dmFyIFg9SzIoZzArKywyKTtpZihYLnQ9JCwhWC5fX2MmJihYLl9fPVtRP1EoSik6JDkodm9pZCAwLEopLGZ1bmN0aW9uKEcpe3ZhciBCPVguX19OP1guX19OWzBdOlguX19bMF0sTj1YLnQoQixHKTtCIT09TiYmKFguX19OPVtOLFguX19bMV1dLFguX19jLnNldFN0YXRlKHt9KSl9XSxYLl9fYz1TMSwhUzEuX19mKSl7dmFyIEs9ZnVuY3Rpb24oRyxCLE4pe2lmKCFYLl9fYy5fX0gpcmV0dXJuITA7dmFyIHo9WC5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihIKXtyZXR1cm4gSC5fX2N9KTtpZih6LmV2ZXJ5KGZ1bmN0aW9uKEgpe3JldHVybiFILl9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxHLEIsTik7dmFyIFY9WC5fX2MucHJvcHMhPT1HO3JldHVybiB6LnNvbWUoZnVuY3Rpb24oSCl7aWYoSC5fX04pe3ZhciBDPUguX19bMF07SC5fXz1ILl9fTixILl9fTj12b2lkIDAsQyE9PUguX19bMF0mJihWPSEwKX19KSxZJiZZLmNhbGwodGhpcyxHLEIsTil8fFZ9O1MxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT1TMTtTMS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKEcsQixOKXtpZih0aGlzLl9fZSl7dmFyIHo9WTtZPXZvaWQgMCxLKEcsQixOKSxZPXp9cSYmcS5jYWxsKHRoaXMsRyxCLE4pfSxTMS5zaG91bGRDb21wb25lbnRVcGRhdGU9S31yZXR1cm4gWC5fX058fFguX199ZnVuY3Rpb24geSgkLEope3ZhciBRPUsyKGcwKyssMyk7IWcxLl9fcyYmRDMoUS5fX0gsSikmJihRLl9fPSQsUS51PUosUzEuX19ILl9faC5wdXNoKFEpKX1mdW5jdGlvbiBJMCgkLEope3ZhciBRPUsyKGcwKyssNCk7IWcxLl9fcyYmRDMoUS5fX0gsSikmJihRLl9fPSQsUS51PUosUzEuX19oLnB1c2goUSkpfWZ1bmN0aW9uIFQoJCl7cmV0dXJuIFgyPTUsazEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIE81KCQsSixRKXtYMj02LEkwKGZ1bmN0aW9uKCl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBYPSQoSigpKTtyZXR1cm4gZnVuY3Rpb24oKXskKG51bGwpLFgmJnR5cGVvZiBYPT0iZnVuY3Rpb24iJiZYKCl9fWlmKCQpcmV0dXJuICQuY3VycmVudD1KKCksZnVuY3Rpb24oKXtyZXR1cm4gJC5jdXJyZW50PW51bGx9fSxRPT1udWxsP1E6US5jb25jYXQoJCkpfWZ1bmN0aW9uIGsxKCQsSil7dmFyIFE9SzIoZzArKyw3KTtyZXR1cm4gRDMoUS5fX0gsSikmJihRLl9fPSQoKSxRLl9fSD1KLFEuX19oPSQpLFEuX199ZnVuY3Rpb24gdygkLEope3JldHVybiBYMj04LGsxKGZ1bmN0aW9uKCl7cmV0dXJuICR9LEopfWZ1bmN0aW9uIEYwKCQpe3ZhciBKPVMxLmNvbnRleHRbJC5fX2NdLFE9SzIoZzArKyw5KTtyZXR1cm4gUS5jPSQsSj8oUS5fXz09bnVsbCYmKFEuX189ITAsSi5zdWIoUzEpKSxKLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIEY1KCQsSil7ZzEudXNlRGVidWdWYWx1ZSYmZzEudXNlRGVidWdWYWx1ZShKP0ooJCk6JCl9ZnVuY3Rpb24gWTIoKXt2YXIgJD1LMihnMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBKPVMxLl9fdjtKIT09bnVsbCYmIUouX19tJiZKLl9fIT09bnVsbDspSj1KLl9fO3ZhciBRPUouX19tfHwoSi5fX209WzAsMF0pOyQuX189IlAiK1FbMF0rIi0iK1FbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiBjNygpe2Zvcih2YXIgJDskPWU4LnNoaWZ0KCk7KXt2YXIgSj0kLl9fSDtpZigkLl9fUCYmSil0cnl7Si5fX2guc29tZShDNSksSi5fX2guc29tZShfMyksSi5fX2g9W119Y2F0Y2goUSl7Si5fX2g9W10sZzEuX19lKFEsJC5fX3YpfX19ZzEuX19iPWZ1bmN0aW9uKCQpe1MxPW51bGwsbzgmJm84KCQpfSxnMS5fXz1mdW5jdGlvbigkLEopeyQmJkouX19rJiZKLl9fay5fX20mJigkLl9fbT1KLl9fay5fX20pLHM4JiZzOCgkLEopfSxnMS5fX3I9ZnVuY3Rpb24oJCl7aTgmJmk4KCQpLGcwPTA7dmFyIEo9KFMxPSQuX19jKS5fX0g7SiYmKFczPT09UzE/KEouX19oPVtdLFMxLl9faD1bXSxKLl9fLnNvbWUoZnVuY3Rpb24oUSl7US5fX04mJihRLl9fPVEuX19OKSxRLnU9US5fX049dm9pZCAwfSkpOihKLl9faC5zb21lKEM1KSxKLl9faC5zb21lKF8zKSxKLl9faD1bXSxnMD0wKSksVzM9UzF9LGcxLmRpZmZlZD1mdW5jdGlvbigkKXtuOCYmbjgoJCk7dmFyIEo9JC5fX2M7SiYmSi5fX0gmJihKLl9fSC5fX2gubGVuZ3RoJiYoZTgucHVzaChKKSE9PTEmJmM4PT09ZzEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKGM4PWcxLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fG83KShjNykpLEouX19ILl9fLnNvbWUoZnVuY3Rpb24oUSl7US51JiYoUS5fX0g9US51KSxRLnU9dm9pZCAwfSkpLFczPVMxPW51bGx9LGcxLl9fYz1mdW5jdGlvbigkLEope0ouc29tZShmdW5jdGlvbihRKXt0cnl7US5fX2guc29tZShDNSksUS5fX2g9US5fX2guZmlsdGVyKGZ1bmN0aW9uKFgpe3JldHVybiFYLl9ffHxfMyhYKX0pfWNhdGNoKFgpe0ouc29tZShmdW5jdGlvbihLKXtLLl9faCYmKEsuX19oPVtdKX0pLEo9W10sZzEuX19lKFgsUS5fX3YpfX0pLHI4JiZyOCgkLEopfSxnMS51bm1vdW50PWZ1bmN0aW9uKCQpe2E4JiZhOCgkKTt2YXIgSixRPSQuX19jO1EmJlEuX19IJiYoUS5fX0guX18uc29tZShmdW5jdGlvbihYKXt0cnl7QzUoWCl9Y2F0Y2goSyl7Sj1LfX0pLFEuX19IPXZvaWQgMCxKJiZnMS5fX2UoSixRLl9fdikpfTt2YXIgdDg9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBvNygkKXt2YXIgSixRPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFgpLHQ4JiZjYW5jZWxBbmltYXRpb25GcmFtZShKKSxzZXRUaW1lb3V0KCQpfSxYPXNldFRpbWVvdXQoUSwzNSk7dDgmJihKPXJlcXVlc3RBbmltYXRpb25GcmFtZShRKSl9ZnVuY3Rpb24gQzUoJCl7dmFyIEo9UzEsUT0kLl9fYzt0eXBlb2YgUT09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxRKCkpLFMxPUp9ZnVuY3Rpb24gXzMoJCl7dmFyIEo9UzE7JC5fX2M9JC5fXygpLFMxPUp9ZnVuY3Rpb24gRDMoJCxKKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1KLmxlbmd0aHx8Si5zb21lKGZ1bmN0aW9uKFEsWCl7cmV0dXJuIFEhPT0kW1hdfSl9ZnVuY3Rpb24gJDkoJCxKKXtyZXR1cm4gdHlwZW9mIEo9PSJmdW5jdGlvbiI/SigkKTpKfWZ1bmN0aW9uIGk3KCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIEo5KCQsSil7Zm9yKHZhciBRIGluICQpaWYoUSE9PSJfX3NvdXJjZSImJiEoUSBpbiBKKSlyZXR1cm4hMDtmb3IodmFyIFggaW4gSilpZihYIT09Il9fc291cmNlIiYmJFtYXSE9PUpbWF0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUTkoJCxKKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUp9KFE5LnByb3RvdHlwZT1uZXcgZDEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLFE5LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gSjkodGhpcy5wcm9wcywkKXx8SjkodGhpcy5zdGF0ZSxKKX07dmFyIFo5PWUuX19iO2UuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxaOSYmWjkoJCl9O3ZhciBuNz1lLl9fZTtlLl9fZT1mdW5jdGlvbigkLEosUSxYKXtpZigkLnRoZW4pe2Zvcih2YXIgSyxZPUo7WT1ZLl9fOylpZigoSz1ZLl9fYykmJksuX19jKXJldHVybiBKLl9fZT09bnVsbCYmKEouX19lPVEuX19lLEouX19rPVEuX19rKSxLLl9fYygkLEopfW43KCQsSixRLFgpfTt2YXIgWDk9ZS51bm1vdW50O2Z1bmN0aW9uIEI5KCQsSixRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9aTcoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SiksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIEI5KFgsSixRKX0pKSwkfWZ1bmN0aW9uIE45KCQsSixRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gTjkoWCxKLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUomJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBQMygpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiB6OSgkKXt2YXIgSj0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSiYmSi5fX2EmJkouX19hKCQpfWZ1bmN0aW9uIEE1KCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBKPSQuX19jO0omJihKLl9fej0hMCksSiYmSi5fX1ImJkouX19SKCksSiYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksWDkmJlg5KCQpfSwoUDMucHJvdG90eXBlPW5ldyBkMSkuX19jPWZ1bmN0aW9uKCQsSil7dmFyIFE9Si5fX2MsWD10aGlzO1gubz09bnVsbCYmKFgubz1bXSksWC5vLnB1c2goUSk7dmFyIEs9ejkoWC5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFguX196fHwoWT0hMCxRLl9fUj1udWxsLEs/SyhCKTpCKCkpfTtRLl9fUj1xO3ZhciBHPVEuX19QO1EuX19QPW51bGw7dmFyIEI9ZnVuY3Rpb24oKXtpZighLS1YLl9fdSl7aWYoWC5zdGF0ZS5fX2Epe3ZhciBOPVguc3RhdGUuX19hO1guX192Ll9fa1swXT1OOShOLE4uX19jLl9fUCxOLl9fYy5fX08pfXZhciB6O2ZvcihYLnNldFN0YXRlKHtfX2E6WC5fX2I9bnVsbH0pO3o9WC5vLnBvcCgpOyl6Ll9fUD1HLHouZm9yY2VVcGRhdGUoKX19O1guX191Kyt8fDMyJkouX191fHxYLnNldFN0YXRlKHtfX2E6WC5fX2I9WC5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LFAzLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sUDMucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEope2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFg9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09QjkodGhpcy5fX2IsUSxYLl9fTz1YLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgSz1KLl9fYSYmdTEoSjEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gSyYmKEsuX191Jj0tMzMpLFt1MShKMSxudWxsLEouX19hP251bGw6JC5jaGlsZHJlbiksS119O3ZhciBLOT1mdW5jdGlvbigkLEosUSl7aWYoKytRWzFdPT09UVswXSYmJC5sLmRlbGV0ZShKKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoUT0kLmk7UTspe2Zvcig7US5sZW5ndGg+MzspUS5wb3AoKSgpO2lmKFFbMV08UVswXSlicmVhazskLmk9UT1RWzJdfX07KEE1LnByb3RvdHlwZT1uZXcgZDEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9ejkoSi5fX3YpLFg9Si5sLmdldCgkKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKEspe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKEspLEs5KEosJCxYKSk6SygpfTtRP1EoWSk6WSgpfX0sQTUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1YMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LEE1LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9QTUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe0s5KCQsUSxKKX0pfTt2YXIgcjc9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsYTc9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLHM3PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sdDc9L1tBLVowLTldL2csZTc9dHlwZW9mIGRvY3VtZW50PCJ1IiwkJD1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIEw5KCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSx4MCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfWQxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShkMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpKfSl9fSl9KTt2YXIgWTk9ZS5ldmVudDtlLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBZOSYmKCQ9WTkoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBIOSxKJD17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0scTk9ZS52bm9kZTtlLnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihKKXt2YXJ7cHJvcHM6USx0eXBlOlh9PUosSz17fSxZPVguaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIHEgaW4gUSl7dmFyIEc9UVtxXTtpZighKHE9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBRKSYmRz09bnVsbHx8ZTcmJnE9PT0iY2hpbGRyZW4iJiZYPT09Im5vc2NyaXB0Inx8cT09PSJjbGFzcyJ8fHE9PT0iY2xhc3NOYW1lIikpe3ZhciBCPXEudG9Mb3dlckNhc2UoKTtxPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBRJiZRLnZhbHVlPT1udWxsP3E9InZhbHVlIjpxPT09ImRvd25sb2FkIiYmRz09PSEwP0c9IiI6Qj09PSJ0cmFuc2xhdGUiJiZHPT09Im5vIj9HPSExOkJbMF09PT0ibyImJkJbMV09PT0ibiI/Qj09PSJvbmRvdWJsZWNsaWNrIj9xPSJvbmRibGNsaWNrIjpCIT09Im9uY2hhbmdlInx8WCE9PSJpbnB1dCImJlghPT0idGV4dGFyZWEifHwkJChRLnR5cGUpP0I9PT0ib25mb2N1cyI/cT0ib25mb2N1c2luIjpCPT09Im9uYmx1ciI/cT0ib25mb2N1c291dCI6czcudGVzdChxKSYmKHE9Qik6Qj1xPSJvbmlucHV0IjpZJiZhNy50ZXN0KHEpP3E9cS5yZXBsYWNlKHQ3LCItJCYiKS50b0xvd2VyQ2FzZSgpOkc9PT1udWxsJiYoRz12b2lkIDApLEI9PT0ib25pbnB1dCImJktbcT1CXSYmKHE9Im9uaW5wdXRDYXB0dXJlIiksS1txXT1HfX1YPT0ic2VsZWN0IiYmKEsubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoSy52YWx1ZSkmJihLLnZhbHVlPVgwKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oTil7Ti5wcm9wcy5zZWxlY3RlZD1LLnZhbHVlLmluZGV4T2YoTi5wcm9wcy52YWx1ZSkhPS0xfSkpLEsuZGVmYXVsdFZhbHVlIT1udWxsJiYoSy52YWx1ZT1YMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe04ucHJvcHMuc2VsZWN0ZWQ9Sy5tdWx0aXBsZT9LLmRlZmF1bHRWYWx1ZS5pbmRleE9mKE4ucHJvcHMudmFsdWUpIT0tMTpLLmRlZmF1bHRWYWx1ZT09Ti5wcm9wcy52YWx1ZX0pKSksUS5jbGFzcyYmIVEuY2xhc3NOYW1lPyhLLmNsYXNzPVEuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KEssImNsYXNzTmFtZSIsSiQpKTpRLmNsYXNzTmFtZSYmKEsuY2xhc3M9Sy5jbGFzc05hbWU9US5jbGFzc05hbWUpLEoucHJvcHM9S30oJCksJC4kJHR5cGVvZj1yNyxxOSYmcTkoJCl9O3ZhciBHOT1lLl9fcjtlLl9fcj1mdW5jdGlvbigkKXtHOSYmRzkoJCksSDk9JC5fX2N9O3ZhciBWOT1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbigkKXtWOSYmVjkoJCk7dmFye3Byb3BzOkosX19lOlF9PSQ7USE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEomJkoudmFsdWUhPT1RLnZhbHVlJiYoUS52YWx1ZT1KLnZhbHVlPT1udWxsPyIiOkoudmFsdWUpLEg5PW51bGx9O2Z1bmN0aW9uIFU5KCQpe3JldHVybiEhJC5fX2smJih4MChudWxsLCQpLCEwKX1mdW5jdGlvbiBDOSgkKXtyZXR1cm57cmVuZGVyOmZ1bmN0aW9uKEope0w5KEosJCl9LHVubW91bnQ6ZnVuY3Rpb24oKXtVOSgkKX19fWZ1bmN0aW9uIFA5KCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIEkzKCQsSil7Zm9yKHZhciBRIGluICQpaWYoUSE9PSJfX3NvdXJjZSImJiEoUSBpbiBKKSlyZXR1cm4hMDtmb3IodmFyIFggaW4gSilpZihYIT09Il9fc291cmNlIiYmJFtYXSE9PUpbWF0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVDkoJCxKKXt2YXIgUT1KKCksWD1rKHt0OntfXzpRLHU6Sn19KSxLPVhbMF0udCxZPVhbMV07cmV0dXJuIEkwKGZ1bmN0aW9uKCl7Sy5fXz1RLEsudT1KLFQzKEspJiZZKHt0Okt9KX0sWyQsUSxKXSkseShmdW5jdGlvbigpe3JldHVybiBUMyhLKSYmWSh7dDpLfSksJChmdW5jdGlvbigpe1QzKEspJiZZKHt0Okt9KX0pfSxbJF0pLFF9ZnVuY3Rpb24gVDMoJCl7dHJ5e3JldHVybiEoKEo9JC5fXyk9PT0oUT0kLnUoKSkmJihKIT09MHx8MS9KPT0xL1EpfHxKIT1KJiZRIT1RKX1jYXRjaChYKXtyZXR1cm4hMH12YXIgSixRfWZ1bmN0aW9uIEk5KCQpeyQoKX1mdW5jdGlvbiBFOSgkKXtyZXR1cm4gJH1mdW5jdGlvbiB3OSgpe3JldHVyblshMSxJOV19dmFyIGI5PUkwO2Z1bmN0aW9uIEUzKCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfWZ1bmN0aW9uIGkwKCQsSil7ZnVuY3Rpb24gUShLKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9Sy5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxKPyFKKHRoaXMucHJvcHMsSyl8fFkhPUsucmVmOkkzKHRoaXMucHJvcHMsSyl9ZnVuY3Rpb24gWChLKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9USx1MSgkLEspfXJldHVybiBYLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFguX19mPVgucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWC50eXBlPSQsWH0oRTMucHJvdG90eXBlPW5ldyBkMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsRTMucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEope3JldHVybiBJMyh0aGlzLnByb3BzLCQpfHxJMyh0aGlzLnN0YXRlLEopfTt2YXIgTzk9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLE85JiZPOSgkKX07dmFyIFEkPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIEQwKCQpe2Z1bmN0aW9uIEooUSl7dmFyIFg9UDkoe30sUSk7cmV0dXJuIGRlbGV0ZSBYLnJlZiwkKFgsUS5yZWZ8fG51bGwpfXJldHVybiBKLiQkdHlwZW9mPVEkLEoucmVuZGVyPSQsSi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1KLl9fZj0hMCxKLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLEp9dmFyIEY5PWZ1bmN0aW9uKCQsSil7cmV0dXJuICQ9PW51bGw/bnVsbDpYMChYMCgkKS5tYXAoSikpfSxaJD17bWFwOkY5LGZvckVhY2g6RjksY291bnQ6ZnVuY3Rpb24oJCl7cmV0dXJuICQ/WDAoJCkubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24oJCl7dmFyIEo9WDAoJCk7aWYoSi5sZW5ndGghPT0xKXRocm93IkNoaWxkcmVuLm9ubHkiO3JldHVybiBKWzBdfSx0b0FycmF5OlgwfSxYJD1lLl9fZTtlLl9fZT1mdW5jdGlvbigkLEosUSxYKXtpZigkLnRoZW4pe2Zvcih2YXIgSyxZPUo7WT1ZLl9fOylpZigoSz1ZLl9fYykmJksuX19jKXJldHVybiBKLl9fZT09bnVsbCYmKEouX19lPVEuX19lLEouX19rPVEuX19rKSxLLl9fYygkLEopfVgkKCQsSixRLFgpfTt2YXIgQTk9ZS51bm1vdW50O2Z1bmN0aW9uIHk5KCQsSixRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9UDkoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SiksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIHk5KFgsSixRKX0pKSwkfWZ1bmN0aW9uIFM5KCQsSixRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gUzkoWCxKLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUomJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBNNSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiB4OSgkKXt2YXIgSj0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSiYmSi5fX2EmJkouX19hKCQpfWZ1bmN0aW9uIEskKCQpe3ZhciBKLFEsWCxLPW51bGw7ZnVuY3Rpb24gWShxKXtpZihKfHwoSj0kKCkpLnRoZW4oZnVuY3Rpb24oRyl7RyYmKEs9Ry5kZWZhdWx0fHxHKSxYPSEwfSxmdW5jdGlvbihHKXtRPUcsWD0hMH0pLFEpdGhyb3cgUTtpZighWCl0aHJvdyBKO3JldHVybiBLP3UxKEsscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiBiMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfWUudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSj0kLl9fYztKJiYoSi5fX3o9ITApLEomJkouX19SJiZKLl9fUigpLEomJjMyJiQuX191JiYoJC50eXBlPW51bGwpLEE5JiZBOSgkKX0sKE01LnByb3RvdHlwZT1uZXcgZDEpLl9fYz1mdW5jdGlvbigkLEope3ZhciBRPUouX19jLFg9dGhpcztYLm89PW51bGwmJihYLm89W10pLFguby5wdXNoKFEpO3ZhciBLPXg5KFguX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxYLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxLP0soQik6QigpKX07US5fX1I9cTt2YXIgRz1RLl9fUDtRLl9fUD1udWxsO3ZhciBCPWZ1bmN0aW9uKCl7aWYoIS0tWC5fX3Upe2lmKFguc3RhdGUuX19hKXt2YXIgTj1YLnN0YXRlLl9fYTtYLl9fdi5fX2tbMF09UzkoTixOLl9fYy5fX1AsTi5fX2MuX19PKX12YXIgejtmb3IoWC5zZXRTdGF0ZSh7X19hOlguX19iPW51bGx9KTt6PVguby5wb3AoKTspei5fX1A9Ryx6LmZvcmNlVXBkYXRlKCl9fTtYLl9fdSsrfHwzMiZKLl9fdXx8WC5zZXRTdGF0ZSh7X19hOlguX19iPVguX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxNNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LE01LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxKKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxYPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPXk5KHRoaXMuX19iLFEsWC5fX089WC5fX1ApfXRoaXMuX19iPW51bGx9dmFyIEs9Si5fX2EmJnUxKEoxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIEsmJihLLl9fdSY9LTMzKSxbdTEoSjEsbnVsbCxKLl9fYT9udWxsOiQuY2hpbGRyZW4pLEtdfTt2YXIgTTk9ZnVuY3Rpb24oJCxKLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSiksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19O2Z1bmN0aW9uIFkkKCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gcSQoJCl7dmFyIEo9dGhpcyxRPSQuaDtpZihKLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7eDAobnVsbCxKLnYpLEoudj1udWxsLEouaD1udWxsfSxKLmgmJkouaCE9PVEmJkouY29tcG9uZW50V2lsbFVubW91bnQoKSwhSi52KXtmb3IodmFyIFg9Si5fX3Y7WCE9PW51bGwmJiFYLl9fbSYmWC5fXyE9PW51bGw7KVg9WC5fXztKLmg9USxKLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpRLGNoaWxkTm9kZXM6W10sX19rOntfX206WC5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpRLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oSyxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChLKSxKLmguaW5zZXJ0QmVmb3JlKEssWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKEspe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoSyk+Pj4xLDEpLEouaC5yZW1vdmVDaGlsZChLKX19fXgwKHUxKFkkLHtjb250ZXh0OkouY29udGV4dH0sJC5fX3YpLEoudil9ZnVuY3Rpb24gdzMoJCxKKXt2YXIgUT11MShxJCx7X192OiQsaDpKfSk7cmV0dXJuIFEuY29udGFpbmVySW5mbz1KLFF9KGIyLnByb3RvdHlwZT1uZXcgZDEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9eDkoSi5fX3YpLFg9Si5sLmdldCgkKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKEspe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKEspLE05KEosJCxYKSk6SygpfTtRP1EoWSk6WSgpfX0sYjIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1YMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LGIyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9YjIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe005KCQsUSxKKX0pfTt2YXIgajk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsRyQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLFYkPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sQiQ9L1tBLVowLTldL2csTiQ9dHlwZW9mIGRvY3VtZW50PCJ1Iix6JD1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIEwkKCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSx4MCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIEgkKCQsSixRKXtyZXR1cm4gVTUoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1kMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZDEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Sn0pfX0pfSk7dmFyIGs5PWUuZXZlbnQ7ZS5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gazkmJigkPWs5KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgYjMsVSQ9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LFc5PWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSil7dmFye3Byb3BzOlEsdHlwZTpYfT1KLEs9e30sWT1YLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBHPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJkc9PW51bGx8fE4kJiZxPT09ImNoaWxkcmVuIiYmWD09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgQj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJkc9PT0hMD9HPSIiOkI9PT0idHJhbnNsYXRlIiYmRz09PSJubyI/Rz0hMTpCWzBdPT09Im8iJiZCWzFdPT09Im4iP0I9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6QiE9PSJvbmNoYW5nZSJ8fFghPT0iaW5wdXQiJiZYIT09InRleHRhcmVhInx8eiQoUS50eXBlKT9CPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Qj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOlYkLnRlc3QocSkmJihxPUIpOkI9cT0ib25pbnB1dCI6WSYmRyQudGVzdChxKT9xPXEucmVwbGFjZShCJCwiLSQmIikudG9Mb3dlckNhc2UoKTpHPT09bnVsbCYmKEc9dm9pZCAwKSxCPT09Im9uaW5wdXQiJiZLW3E9Ql0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLEtbcV09R319WD09InNlbGVjdCImJihLLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KEsudmFsdWUpJiYoSy52YWx1ZT1YMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe04ucHJvcHMuc2VsZWN0ZWQ9Sy52YWx1ZS5pbmRleE9mKE4ucHJvcHMudmFsdWUpIT0tMX0pKSxLLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKEsudmFsdWU9WDAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihOKXtOLnByb3BzLnNlbGVjdGVkPUsubXVsdGlwbGU/Sy5kZWZhdWx0VmFsdWUuaW5kZXhPZihOLnByb3BzLnZhbHVlKSE9LTE6Sy5kZWZhdWx0VmFsdWU9PU4ucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oSy5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLCJjbGFzc05hbWUiLFUkKSk6US5jbGFzc05hbWUmJihLLmNsYXNzPUsuY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxKLnByb3BzPUt9KCQpLCQuJCR0eXBlb2Y9ajksVzkmJlc5KCQpfTt2YXIgXzk9ZS5fX3I7ZS5fX3I9ZnVuY3Rpb24oJCl7XzkmJl85KCQpLGIzPSQuX19jfTt2YXIgRDk9ZS5kaWZmZWQ7ZS5kaWZmZWQ9ZnVuY3Rpb24oJCl7RDkmJkQ5KCQpO3Zhcntwcm9wczpKLF9fZTpRfT0kO1EhPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlIT09US52YWx1ZSYmKFEudmFsdWU9Si52YWx1ZT09bnVsbD8iIjpKLnZhbHVlKSxiMz1udWxsfTt2YXIgQyQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKCQpe3JldHVybiBiMy5fX25bJC5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazp3LHVzZUNvbnRleHQ6RjAsdXNlRGVidWdWYWx1ZTpGNSx1c2VEZWZlcnJlZFZhbHVlOkU5LHVzZUVmZmVjdDp5LHVzZUlkOlkyLHVzZUltcGVyYXRpdmVIYW5kbGU6TzUsdXNlSW5zZXJ0aW9uRWZmZWN0OmI5LHVzZUxheW91dEVmZmVjdDpJMCx1c2VNZW1vOmsxLHVzZVJlZHVjZXI6bzAsdXNlUmVmOlQsdXNlU3RhdGU6ayx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpUOSx1c2VUcmFuc2l0aW9uOnc5fX19O2Z1bmN0aW9uIE8kKCQpe3JldHVybiB1MS5iaW5kKG51bGwsJCl9ZnVuY3Rpb24gazUoJCl7cmV0dXJuISEkJiYkLiQkdHlwZW9mPT09ajl9ZnVuY3Rpb24gRiQoJCl7cmV0dXJuIGs1KCQpJiYkLnR5cGU9PT1KMX1mdW5jdGlvbiBBJCgkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIE0kKCQpe3JldHVybiBrNSgkKT9rMy5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiBrJCgkKXtyZXR1cm4hISQuX19rJiYoeDAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gVyQoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgXyQ9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJChKKX0sRCQ9ZnVuY3Rpb24oJCxKKXt2YXIgUT1lLmRlYm91bmNlUmVuZGVyaW5nO2UuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oSyl7cmV0dXJuIEsoKX07dmFyIFg9JChKKTtyZXR1cm4gZS5kZWJvdW5jZVJlbmRlcmluZz1RLFh9LFAkPWs1LGY9e3VzZVN0YXRlOmssdXNlSWQ6WTIsdXNlUmVkdWNlcjpvMCx1c2VFZmZlY3Q6eSx1c2VMYXlvdXRFZmZlY3Q6STAsdXNlSW5zZXJ0aW9uRWZmZWN0OmI5LHVzZVRyYW5zaXRpb246dzksdXNlRGVmZXJyZWRWYWx1ZTpFOSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpUOSxzdGFydFRyYW5zaXRpb246STksdXNlUmVmOlQsdXNlSW1wZXJhdGl2ZUhhbmRsZTpPNSx1c2VNZW1vOmsxLHVzZUNhbGxiYWNrOncsdXNlQ29udGV4dDpGMCx1c2VEZWJ1Z1ZhbHVlOkY1LHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46WiQscmVuZGVyOkwkLGh5ZHJhdGU6SCQsdW5tb3VudENvbXBvbmVudEF0Tm9kZTprJCxjcmVhdGVQb3J0YWw6dzMsY3JlYXRlRWxlbWVudDp1MSxjcmVhdGVDb250ZXh0Ok8wLGNyZWF0ZUZhY3Rvcnk6TyQsY2xvbmVFbGVtZW50Ok0kLGNyZWF0ZVJlZjp3MixGcmFnbWVudDpKMSxpc1ZhbGlkRWxlbWVudDprNSxpc0VsZW1lbnQ6UCQsaXNGcmFnbWVudDpGJCxpc01lbW86QSQsZmluZERPTU5vZGU6VyQsQ29tcG9uZW50OmQxLFB1cmVDb21wb25lbnQ6RTMsbWVtbzppMCxmb3J3YXJkUmVmOkQwLGZsdXNoU3luYzpEJCx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpfJCxTdHJpY3RNb2RlOkoxLFN1c3BlbnNlOk01LFN1c3BlbnNlTGlzdDpiMixsYXp5OkskLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOkMkfTt2YXIgeTI9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0seTM9e3BvcnRyYWl0OiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0In07dmFyIHEyPTM7ZnVuY3Rpb24gUzMoJCl7cmV0dXJuICQ+PTAuOTM/Mzp2b2lkIDB9ZnVuY3Rpb24geDMoJCl7cmV0dXJuICQ9PT0ibGFuZHNjYXBlX2xlZnQifHwkPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gZjAoJCl7cmV0dXJuISEkJiYoeDMoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQpfWZ1bmN0aW9uIEcyKCQpe2lmKCEkfHwkLndpZHRoPD0wfHwkLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgSj14MygkLm9yaWVudGF0aW9uKXx8JC53aWR0aD4kLmhlaWdodCxRPUo/TWF0aC5tYXgoJC53aWR0aCwkLmhlaWdodCk6TWF0aC5taW4oJC53aWR0aCwkLmhlaWdodCksWD1KP01hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpO2lmKFE9PT0kLndpZHRoJiZYPT09JC5oZWlnaHQpcmV0dXJuICQ7cmV0dXJuey4uLiQsd2lkdGg6USxoZWlnaHQ6WH19ZnVuY3Rpb24gVjIoJCl7bGV0IEo9RzIoJCksUT12OSgkPy5vcmllbnRhdGlvbiksWD1NYXRoLmFicyhRKT09PTkwLEs9ISEkJiYkLndpZHRoPiQuaGVpZ2h0LFk9UT09PTE4MHx8WCYmIUs7cmV0dXJue2Rpc3BsYXlDb25maWc6Sixyb3RhdGlvbkRlZ3JlZXM6WT9ROjAsbmVlZHNDc3NSb3RhdGlvbjpZLGlucHV0T3JpZW50YXRpb246WT8kPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIHY5KCQpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIEIyKCQsSixRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6USx5OjEtSn07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtUSx5Okp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtSix5OjEtUX07ZGVmYXVsdDpyZXR1cm57eDpKLHk6UX19fWZ1bmN0aW9uIFI5KCQsSixRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue2R4OlEsZHk6LUp9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57ZHg6LVEsZHk6Sn07Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJue2R4Oi1KLGR5Oi1RfTtkZWZhdWx0OnJldHVybntkeDpKLGR5OlF9fX1mdW5jdGlvbiBqMygkLEope3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEp9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChKKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gSn1jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEp9ZGVmYXVsdDpyZXR1cm4gSn19dmFyIGg5PTE2O2Z1bmN0aW9uIFMyKCQsSixRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiBudWxsO2xldCBYPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MSxLPUo9PT0xPyQqMTY6Sj09PTI/JCpYOiQsWT1NYXRoLm1heCgtMjAwLE1hdGgubWluKDIwMCxLKSk7cmV0dXJuIE1hdGguYWJzKFkpPDAuMDE/bnVsbDpZfWZ1bmN0aW9uIHYzKCQsSixRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAwO2xldCBYPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MTtpZihKPT09MSlyZXR1cm4gJCpoOTtpZihKPT09MilyZXR1cm4gJCpYO3JldHVybiAkfWZ1bmN0aW9uIGc5KCQsSixRKXtpZighSnx8Si53aWR0aDw9MHx8Si5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IFg9Si5vcmllbnRhdGlvbj09PXZvaWQgMCYmJD8ub3JpZW50YXRpb24/ey4uLkosb3JpZW50YXRpb246JC5vcmllbnRhdGlvbn06SjtpZigkJiYkLndpZHRoPT09WC53aWR0aCYmJC5oZWlnaHQ9PT1YLmhlaWdodCYmJC5vcmllbnRhdGlvbj09PVgub3JpZW50YXRpb24pcmV0dXJuIG51bGw7cmV0dXJue2NvbmZpZzpYLG5vdGlmeVBhcmVudDpRIT09ImV4dGVybmFsIn19ZnVuY3Rpb24gZjkoe3N0cmVhbU1vZGU6JCxhdmNjU3VwcG9ydGVkOkosaGFzRXh0ZXJuYWxJbnB1dDpRLGhhc0V4dGVybmFsRnJhbWVzOlh9KXtsZXQgSz0kPT09ImF2Y2MiJiYhSj8ibWpwZWciOiQsWT1LPT09IndlYnJ0YyIscT1LPT09ImF2Y2MiLEc9Sz09PSJtanBlZyImJlg7cmV0dXJue2VmZmVjdGl2ZVN0cmVhbU1vZGU6Syx1c2VXZWJSdGM6WSx1c2VBdmNjOnEsZXh0ZXJuYWxJbnB1dDpRLGV4dGVybmFsTWpwZWc6RyxvcGVuRGlyZWN0Q29udHJvbFNvY2tldDohUSxvcGVuRGlyZWN0TWpwZWc6Sz09PSJtanBlZyImJiFHfX12YXIgVCQ9e1sxXToiZGVzY3JpcHRpb24iLFsyXToia2V5ZnJhbWUiLFszXToiZGVsdGEiLFs0XToic2VlZCJ9O2NsYXNzIFc1e2J1ZmZlcj1uZXcgVWludDhBcnJheSg2NTUzNik7bGVuPTA7c3RhcnQ9MDthcHBlbmQoJCl7aWYodGhpcy5sZW4rJC5sZW5ndGg+dGhpcy5idWZmZXIubGVuZ3RoKXtpZih0aGlzLnN0YXJ0PjApdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pLHRoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MDtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2xldCBKPXRoaXMuYnVmZmVyLmxlbmd0aDt3aGlsZShKPHRoaXMubGVuKyQubGVuZ3RoKUoqPTI7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoSik7US5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkoMCx0aGlzLmxlbikpLHRoaXMuYnVmZmVyPVF9fXRoaXMuYnVmZmVyLnNldCgkLHRoaXMubGVuKSx0aGlzLmxlbis9JC5sZW5ndGh9cHVzaCgkKXtpZigkLmxlbmd0aD4wKXRoaXMuYXBwZW5kKCQpO2xldCBKPVtdLFE9dGhpcy5idWZmZXI7d2hpbGUodGhpcy5sZW4tdGhpcy5zdGFydD49NCl7bGV0IFg9dGhpcy5zdGFydCxLPShRW1hdPDwyNHxRW1grMV08PDE2fFFbWCsyXTw8OHxRW1grM10pPj4+MDtpZih0aGlzLmxlbi1YLTQ8SylicmVhaztpZihLPDEpe3RoaXMuc3RhcnQrPTQ7Y29udGludWV9bGV0IFk9UVtYKzRdLHE9VCRbWV07aWYocSlKLnB1c2goe3R5cGU6cSxwYXlsb2FkOlEuc2xpY2UoWCs1LFgrNCtLKX0pO3RoaXMuc3RhcnQrPTQrS31pZih0aGlzLnN0YXJ0PjApe2lmKHRoaXMuc3RhcnQ8dGhpcy5sZW4pdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pO3RoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MH1yZXR1cm4gSn1yZXNldCgpe3RoaXMubGVuPTAsdGhpcy5zdGFydD0wfX1mdW5jdGlvbiBSMygkKXtpZigkLmxlbmd0aDw0KXJldHVybiJhdmMxLjQyRTAxRSI7bGV0IEo9KFEpPT5RLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIik7cmV0dXJuImF2YzEuIitKKCRbMV0pK0ooJFsyXSkrSigkWzNdKX1mdW5jdGlvbiBuMCgpe3JldHVybiB0eXBlb2YgZ2xvYmFsVGhpczwidSImJnR5cGVvZiBnbG9iYWxUaGlzLlZpZGVvRGVjb2RlcjwidSJ9dmFyIEkkPTEwMDAsRSQ9MTY2Njc7ZnVuY3Rpb24gaDMoe3VybDokLGVuYWJsZWQ6SixjYW52YXNSZWY6USxvbkZpcnN0RnJhbWU6WCxvbkZyYW1lOkssb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30pe2xldCBCPVQoe29uRmlyc3RGcmFtZTpYLG9uRnJhbWU6SyxvbkRlY29kZWRGcmFtZTpZLG9uRXJyb3I6cSxvbkRlY29kZXJFcnJvcjpHfSk7Qi5jdXJyZW50PXtvbkZpcnN0RnJhbWU6WCxvbkZyYW1lOkssb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30seSgoKT0+e2lmKCFKfHwhJHx8IW4wKCkpcmV0dXJuO2xldCBOPW5ldyBBYm9ydENvbnRyb2xsZXIsej1uZXcgVzUsVj0hMSxIPSExLEM9ITEsQT0wLEw9bnVsbCxVPW51bGwsRj0oKT0+IVYmJiFOLnNpZ25hbC5hYm9ydGVkLFc9KHIpPT57aWYoQi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKUIuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgQi5jdXJyZW50Lm9uRXJyb3I/LihyKX0sRT0ocixvLGEsTDEpPT57aWYoIUYoKSlyZXR1cm47bGV0IGw9US5jdXJyZW50O2lmKCFsKXJldHVybjtpZihsLndpZHRoIT09b3x8bC5oZWlnaHQhPT1hKWwud2lkdGg9byxsLmhlaWdodD1hO2xldCBtPWwuZ2V0Q29udGV4dCgiMmQiKTtpZighbSlyZXR1cm47aWYobS5kcmF3SW1hZ2UociwwLDAsbyxhKSxCLmN1cnJlbnQub25GcmFtZT8uKCksTDEmJiFDKUM9ITAsQi5jdXJyZW50Lm9uRGVjb2RlZEZyYW1lPy4oKTtpZighSClIPSEwLEIuY3VycmVudC5vbkZpcnN0RnJhbWU/LigpfSxQPSgpPT5uZXcgVmlkZW9EZWNvZGVyKHtvdXRwdXQ6KHIpPT57dHJ5e2lmKEYoKSlFKHIsci5kaXNwbGF5V2lkdGgsci5kaXNwbGF5SGVpZ2h0LCEwKX1maW5hbGx5e3IuY2xvc2UoKX19LGVycm9yOihyKT0+VyhgZGVjb2RlcjogJHtyLm1lc3NhZ2V9YCl9KSx4PWFzeW5jKHIpPT57bGV0IG89YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEJsb2IoW3JdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTt0cnl7aWYoRigpKUUobyxvLndpZHRoLG8uaGVpZ2h0LCExKX1maW5hbGx5e28uY2xvc2UoKX19LEQ9KHIpPT57aWYoIVV8fFUuc3RhdGU9PT0iY2xvc2VkIilVPVAoKTt0cnl7VS5jb25maWd1cmUoe2NvZGVjOlIzKHIpLGRlc2NyaXB0aW9uOnIsb3B0aW1pemVGb3I6ImxhdGVuY3kiLGhhcmR3YXJlQWNjZWxlcmF0aW9uOiJwcmVmZXItaGFyZHdhcmUifSl9Y2F0Y2gobyl7VyhgY29uZmlnOiAke28ubWVzc2FnZX1gKX19LG49KHIsbyk9PntpZihVPy5zdGF0ZSE9PSJjb25maWd1cmVkIilyZXR1cm47dHJ5e1UuZGVjb2RlKG5ldyBFbmNvZGVkVmlkZW9DaHVuayh7dHlwZTpyPT09ImtleWZyYW1lIj8ia2V5IjoiZGVsdGEiLHRpbWVzdGFtcDpBLGRhdGE6b30pKSxBKz1FJH1jYXRjaHt9fSxSPShyLG8pPT57c3dpdGNoKHIpe2Nhc2Uic2VlZCI6eChvKS5jYXRjaCgoKT0+e30pO3JldHVybjtjYXNlImRlc2NyaXB0aW9uIjpEKG8pO3JldHVybjtjYXNlImtleWZyYW1lIjpjYXNlImRlbHRhIjpuKHIsbyk7cmV0dXJufX0sZD0oKT0+e2lmKCFGKCl8fEwpcmV0dXJuO0w9c2V0VGltZW91dCgoKT0+e0w9bnVsbCxpKCl9LEkkKX0saT1hc3luYygpPT57ei5yZXNldCgpO3RyeXtsZXQgbz0oYXdhaXQgZmV0Y2goYCR7JH0vc3RyZWFtLmF2Y2NgLHtzaWduYWw6Ti5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIW8pcmV0dXJuO2Zvcig7Oyl7bGV0e2RvbmU6YSx2YWx1ZTpMMX09YXdhaXQgby5yZWFkKCk7aWYoYSlicmVhaztpZighTDEpY29udGludWU7Zm9yKGxldCBsIG9mIHoucHVzaChMMSkpUihsLnR5cGUsbC5wYXlsb2FkKX19Y2F0Y2h7fWZpbmFsbHl7aWYoRigpKWQoKX19O3JldHVybiBpKCksKCk9PntpZihWPSEwLEwpY2xlYXJUaW1lb3V0KEwpO2lmKE4uYWJvcnQoKSx6LnJlc2V0KCksVSYmVS5zdGF0ZSE9PSJjbG9zZWQiKXRyeXtVLmNsb3NlKCl9Y2F0Y2h7fVU9bnVsbH19LFskLEosUV0pfWZ1bmN0aW9uIG05KCQsSil7bGV0IFE9MCxYPTAsSz0oKT0+e2xldHt2aWRlb1dpZHRoOlksdmlkZW9IZWlnaHQ6cX09JDtpZihZPD0wfHxxPD0wfHxZPT09USYmcT09PVgpcmV0dXJuO1E9WSxYPXEsSih7d2lkdGg6WSxoZWlnaHQ6cX0pfTtyZXR1cm4gJC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsSyksJC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEspLEsoKSx7Y2hlY2s6SyxkaXNjb25uZWN0KCl7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsSyksJC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEspfX19dmFyIHckPTA7ZnVuY3Rpb24gWigkLEosUSxYLEssWSl7Snx8KEo9e30pO3ZhciBxLEcsQj1KO2lmKCJyZWYiaW4gQilmb3IoRyBpbiBCPXt9LEopRz09InJlZiI/cT1KW0ddOkJbR109SltHXTt2YXIgTj17dHlwZTokLHByb3BzOkIsa2V5OlEscmVmOnEsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tdyQsX19pOi0xLF9fdTowLF9fc291cmNlOkssX19zZWxmOll9O2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYocT0kLmRlZmF1bHRQcm9wcykpZm9yKEcgaW4gcSlCW0ddPT09dm9pZCAwJiYoQltHXT1xW0ddKTtyZXR1cm4gZS52bm9kZSYmZS52bm9kZShOKSxOfXZhciBwOT1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLGIkPTEuMDA0LHkkPTMsUyQ9NCx4JD01LGokPTEwLHYkPTExO2Z1bmN0aW9uIF81KHt1cmw6JCx3c1VybDpKLHN0eWxlOlEsaW1hZ2VTdHlsZTpYLGNsYXNzTmFtZTpLLG9uSG9tZVByZXNzOlksb25TdHJlYW1Ub3VjaDpxLG9uU3RyZWFtTXVsdGlUb3VjaDpHLG9uU3RyZWFtQnV0dG9uOkIsb25TdHJlYW1EaWdpdGFsQ3Jvd246TixvblN0cmVhbVNjcm9sbDp6LGVuYWJsZURpZ2l0YWxDcm93bjpWLHN1YnNjcmliZUZyYW1lOkgsc3RyZWFtRnJhbWU6QyxzdHJlYW1Db25maWc6QSxvblNjcmVlbkNvbmZpZ0NoYW5nZTpMLGhpZGVDb250cm9sczpVLG9uU3RyZWFtaW5nQ2hhbmdlOkYsY29ubmVjdGlvblF1YWxpdHk6VyxzdHJlYW1Nb2RlOkU9ImF2Y2MiLHdlYlJ0Y1N0cmVhbTpQLG9uV2ViUnRjRnJhbWU6eCxzdHJlYW1FcnJvcjpELG9uQXZjY0Vycm9yOm4sb25BdmNjRGVjb2RlZEZyYW1lOlJ9KXtsZXR7dXNlV2ViUnRjOmQsdXNlQXZjYzppLGV4dGVybmFsSW5wdXQ6cixleHRlcm5hbE1qcGVnOm8sb3BlbkRpcmVjdENvbnRyb2xTb2NrZXQ6YSxvcGVuRGlyZWN0TWpwZWc6TDF9PWY5KHtzdHJlYW1Nb2RlOkUsYXZjY1N1cHBvcnRlZDpuMCgpLGhhc0V4dGVybmFsSW5wdXQ6ISFxLGhhc0V4dGVybmFsRnJhbWVzOiEhSH0pLGw9VChudWxsKSxtPVQobnVsbCksWDE9VChudWxsKSxaMT1UKG51bGwpLEgxPVQobnVsbCksdD1UKG51bGwpLFExPVQobnVsbCksW3ExLGpdPWsoITEpLFtwLF9dPWsobnVsbCksW2gsZ109ayhudWxsKSx2PVQobnVsbCksWTE9VCghMSksRzE9VChMKTtHMS5jdXJyZW50PUw7bGV0IHcxPVQobnVsbCksW1cxLFQxXT1rKG51bGwpO3koKCk9PntsZXQgTz13MS5jdXJyZW50O2lmKCFPfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgTT1uZXcgUmVzaXplT2JzZXJ2ZXIoKFMpPT57bGV0IGI9U1swXT8uY29udGVudFJlY3Q7aWYoYilUMSh7d2lkdGg6Yi53aWR0aCxoZWlnaHQ6Yi5oZWlnaHR9KX0pO3JldHVybiBNLm9ic2VydmUoTyksKCk9Pk0uZGlzY29ubmVjdCgpfSxbXSk7bGV0W18xLFIxXT1rKDApLE0xPVQoMCksW3IxLGoxXT1rKCExKSxGMT13KChPLE09InJlcG9ydGVkIik9PntpZihNPT09Im1lZGlhIiYmWTEuY3VycmVudClyZXR1cm47aWYoTSE9PSJtZWRpYSImJk8mJk8ud2lkdGg+MCYmTy5oZWlnaHQ+MClZMS5jdXJyZW50PSEwO2xldCBTPWc5KHYuY3VycmVudCxPLE0pO2lmKCFTKXJldHVybjtpZih2LmN1cnJlbnQ9Uy5jb25maWcsZyhTLmNvbmZpZyksUy5ub3RpZnlQYXJlbnQpRzEuY3VycmVudD8uKFMuY29uZmlnKX0sW10pO3koKCk9PntpZighZClyZXR1cm47aWYoRClqKCExKSxfKEQpO2Vsc2UgXyhudWxsKX0sW0QsZF0pO2xldCBOMT1UKG51bGwpO3koKCk9PntpZihXPT09InBvb3IiKXtpZihqMSghMCksTjEuY3VycmVudCljbGVhclRpbWVvdXQoTjEuY3VycmVudCk7TjEuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57ajEoITEpLE4xLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZihqMSghMSksTjEuY3VycmVudCljbGVhclRpbWVvdXQoTjEuY3VycmVudCksTjEuY3VycmVudD1udWxsO3JldHVybigpPT57aWYoTjEuY3VycmVudCljbGVhclRpbWVvdXQoTjEuY3VycmVudCl9fSxbV10pO2xldCBhMT1gJHskfS9zdHJlYW0ubWpwZWdgO3koKCk9PntpZighZClyZXR1cm47bGV0IE89WDEuY3VycmVudDtpZighTylyZXR1cm47bGV0IE09ITEsUz0hMSxiPTAsYz1udWxsLCQxPSgpPT57aWYoU3x8TSlyZXR1cm47Yz8uY2hlY2soKSxNPSEwLHg/LigpLGooITApLF8obnVsbCl9LFUxPSgpPT57aWYoUylyZXR1cm47Yz8uY2hlY2soKSxlMS5jdXJyZW50PURhdGUubm93KCksTTEuY3VycmVudCsrLCQxKCksaighMCksYj1PLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soVTEpfSxBMT0oKT0+e2lmKFMpcmV0dXJuO2M/LmNoZWNrKCksZTEuY3VycmVudD1EYXRlLm5vdygpLCQxKCksaighMCl9O2lmKE8uc3JjT2JqZWN0PVA/P251bGwsUCl7aWYoYz1tOShPLChaMCk9PntGMShaMCwibWVkaWEiKX0pLGooITEpLE8uYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsJDEse29uY2U6ITB9KSx0eXBlb2YgTy5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrPT09ImZ1bmN0aW9uIiliPU8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhVMSk7ZWxzZSBPLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLEExKTtPLnBsYXkoKS5jYXRjaCgoKT0+e30pfWVsc2UgaighMSk7cmV0dXJuKCk9PntpZihTPSEwLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsJDEpLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZXVwZGF0ZSIsQTEpLGM/LmRpc2Nvbm5lY3QoKSxiJiZ0eXBlb2YgTy5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2s9PT0iZnVuY3Rpb24iKU8uY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrKGIpO08uc3JjT2JqZWN0PW51bGx9fSxbZCxQLHgsRjFdKSx5KCgpPT57WTEuY3VycmVudD0hMSx2LmN1cnJlbnQ9bnVsbCxnKG51bGwpfSxbJCxKXSk7bGV0IGYxPVQoRik7ZjEuY3VycmVudD1GLHkoKCk9PntmMS5jdXJyZW50Py4ocTEpfSxbcTFdKSx5KCgpPT57aWYoQSlGMShBLCJleHRlcm5hbCIpfSxbQSxGMSwkXSk7bGV0IGkxPVQoITEpO2kxLmN1cnJlbnQ9cTE7bGV0IHQxPVQobnVsbCkscTA9VChudWxsKTt5KCgpPT57aWYoIW98fCFIKXJldHVybjtsZXQgTT1zZXRUaW1lb3V0KCgpPT57aWYoIWkxLmN1cnJlbnQpXygiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLFM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGMoKXtsZXQgJDE9dDEuY3VycmVudDtpZigkMSl7dDEuY3VycmVudD1udWxsO2xldCBVMT1aMS5jdXJyZW50O2lmKFUxKXtpZihxMC5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwocTAuY3VycmVudCk7cTAuY3VycmVudD0kMSxVMS5zcmM9JDEsTTEuY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTCgkMSl9Uz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYyl9KSxiPUgoKGMpPT57aWYoZTEuY3VycmVudD1EYXRlLm5vdygpLHQxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTCh0MS5jdXJyZW50KTtpZih0MS5jdXJyZW50PWMsIWkxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE0pLGooITApLF8obnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChNKSxjYW5jZWxBbmltYXRpb25GcmFtZShTKSxiPy4oKSx0MS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwodDEuY3VycmVudCksdDEuY3VycmVudD1udWxsO2lmKHEwLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChxMC5jdXJyZW50KSxxMC5jdXJyZW50PW51bGx9fSxbbyxIXSk7bGV0IEcwPXcoKCk9PntlMS5jdXJyZW50PURhdGUubm93KCksaighMCksXyhudWxsKX0sW10pLGwwPXcoKCk9PntpZihNMS5jdXJyZW50KyssZTEuY3VycmVudD1EYXRlLm5vdygpLCFpMS5jdXJyZW50KWooITApLF8obnVsbCl9LFtdKTtoMyh7dXJsOiQsZW5hYmxlZDppLGNhbnZhc1JlZjptLG9uRmlyc3RGcmFtZTpHMCxvbkZyYW1lOmwwLG9uRGVjb2RlZEZyYW1lOlIsb25FcnJvcjpfLG9uRGVjb2RlckVycm9yOm59KTtsZXQgdjE9dygoTyk9PntsZXQgTT1WMih2LmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sUz1CMihNLE8ueCxPLnkpLGI9Ty5lZGdlPT09dm9pZCAwP3ZvaWQgMDpqMyhNLE8uZWRnZSksYz1iPT09dm9pZCAwP3t0eXBlOk8udHlwZSwuLi5TfTp7dHlwZTpPLnR5cGUsLi4uUyxlZGdlOmJ9O2lmKHIpe3E/LihjKTtyZXR1cm59bGV0ICQxPVExLmN1cnJlbnQ7aWYoISQxfHwkMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBVMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoYykpLEExPW5ldyBVaW50OEFycmF5KDErVTEubGVuZ3RoKTtBMVswXT15JCxBMS5zZXQoVTEsMSksJDEuc2VuZChBMSl9LFtyLHFdKSxWMD13KChPKT0+e2lmKHIpe0I/LihPKTtyZXR1cm59bGV0IE09UTEuY3VycmVudDtpZighTXx8TS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBTPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7YnV0dG9uOk99KSksYj1uZXcgVWludDhBcnJheSgxK1MubGVuZ3RoKTtiWzBdPVMkLGIuc2V0KFMsMSksTS5zZW5kKGIpfSxbcixCXSksSjA9dygoTyk9PntpZighTnVtYmVyLmlzRmluaXRlKE8pfHxPPT09MClyZXR1cm47aWYocil7Tj8uKE8pO3JldHVybn1sZXQgTT1RMS5jdXJyZW50O2lmKCFNfHxNLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IFM9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtkZWx0YTpPfSkpLGI9bmV3IFVpbnQ4QXJyYXkoMStTLmxlbmd0aCk7YlswXT1qJCxiLnNldChTLDEpLE0uc2VuZChiKX0sW3IsTl0pLFAwPXcoKE8sTSxTLGIpPT57aWYoIU51bWJlci5pc0Zpbml0ZShPKXx8IU51bWJlci5pc0Zpbml0ZShNKXx8Tz09PTAmJk09PT0wKXJldHVybjtsZXQgYz1WMih2LmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sJDE9UjkoYyxPLE0pLFUxPUIyKGMsUyxiKSxBMT17ZHg6JDEuZHgsZHk6JDEuZHkseDpVMS54LHk6VTEueX07aWYocil7ej8uKEExKTtyZXR1cm59bGV0IG8xPVExLmN1cnJlbnQ7aWYoIW8xfHxvMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBaMD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQTEpKSxjMD1uZXcgVWludDhBcnJheSgxK1owLmxlbmd0aCk7YzBbMF09diQsYzAuc2V0KFowLDEpLG8xLnNlbmQoYzApfSxbcix6XSksbTE9dygoTyk9PntsZXQgTT1WMih2LmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sUz1CMihNLE8ueDEsTy55MSksYj1CMihNLE8ueDIsTy55MiksYz17dHlwZTpPLnR5cGUseDE6Uy54LHkxOlMueSx4MjpiLngseTI6Yi55fTtpZihyKXtHPy4oYyk7cmV0dXJufWxldCAkMT1RMS5jdXJyZW50O2lmKCEkMXx8JDEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGMpKSxBMT1uZXcgVWludDhBcnJheSgxK1UxLmxlbmd0aCk7QTFbMF09eCQsQTEuc2V0KFUxLDEpLCQxLnNlbmQoQTEpfSxbcixHXSk7eSgoKT0+e2lmKCFhJiYhTDEmJiFpKXJldHVybjtsZXQgTz1udWxsO2lmKGEpe2xldCAkMT1KPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIjtPPW5ldyBXZWJTb2NrZXQoJDEpLE8uYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFExLmN1cnJlbnQ9TyxPLm9ubWVzc2FnZT0oVTEpPT57aWYoIShVMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgQTE9bmV3IFVpbnQ4QXJyYXkoVTEuZGF0YSk7aWYoQTEubGVuZ3RoPDF8fEExWzBdIT09MTMwKXJldHVybjt0cnl7RjEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoQTEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sTy5vbm9wZW49KCk9Pl8obnVsbCksTy5vbmNsb3NlPSgpPT5qKCExKSxPLm9uZXJyb3I9KCk9PntfKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSxqKCExKX19bGV0IE09aXx8TDE/c2V0SW50ZXJ2YWwoKCk9PntSMShNMS5jdXJyZW50KSxNMS5jdXJyZW50PTB9LDEwMDApOm51bGwsUz1MMT9uZXcgQWJvcnRDb250cm9sbGVyOm51bGwsYj0hMSxjPUwxP3NldFRpbWVvdXQoKCk9PntpZighYilfKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk6bnVsbDtpZihMMSYmUykoYXN5bmMoKT0+e3RyeXtsZXQgVTE9KGF3YWl0IGZldGNoKGExLHtzaWduYWw6Uy5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIVUxKXJldHVybjtsZXQgQTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOm8xLHZhbHVlOlowfT1hd2FpdCBVMS5yZWFkKCk7aWYobzEpYnJlYWs7aWYoWjApZm9yKGxldCBjMD0wO2MwPD1aMC5sZW5ndGgtQTEubGVuZ3RoO2MwKyspe2xldCBiOD0hMDtmb3IobGV0IFY1PTA7VjU8QTEubGVuZ3RoO1Y1KyspaWYoWjBbYzArVjVdIT09QTFbVjVdKXtiOD0hMTticmVha31pZihiOCl7aWYoTTEuY3VycmVudCsrLCFiKXtpZihiPSEwLGMpY2xlYXJUaW1lb3V0KGMpO2ooITApLF8obnVsbCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoUz8uYWJvcnQoKSxNKWNsZWFySW50ZXJ2YWwoTSk7aWYoYyljbGVhclRpbWVvdXQoYyk7aWYoTz8uY2xvc2UoKSxRMS5jdXJyZW50PT09TylRMS5jdXJyZW50PW51bGx9fSxbYSxMMSxhMSxGMSwkLGksSl0pLHkoKCk9PntpZighZClyZXR1cm47bGV0IE89c2V0SW50ZXJ2YWwoKCk9PntSMShNMS5jdXJyZW50KSxNMS5jdXJyZW50PTA7bGV0IE09ZTEuY3VycmVudDtpZighZG9jdW1lbnQuaGlkZGVuJiZNJiZEYXRlLm5vdygpLU0+MzAwMClqKCExKX0sMTAwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoTyl9LFtkXSk7bGV0IGUxPVQoMCk7eSgoKT0+e2lmKCFvKXJldHVybjtsZXQgTz0yMDAwLE09KCk9PntsZXQgYz1lMS5jdXJyZW50O2lmKCFjfHwhaTEuY3VycmVudClyZXR1cm47aWYoRGF0ZS5ub3coKS1jPk8paighMSl9LFM9c2V0SW50ZXJ2YWwoKCk9PntSMShNMS5jdXJyZW50KSxNMS5jdXJyZW50PTAsTSgpfSwxMDAwKSxiPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilNKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixiKSwoKT0+e2NsZWFySW50ZXJ2YWwoUyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsYil9fSxbb10pO2xldCBSMD13KCgpPT57aWYoZClyZXR1cm4gWDEuY3VycmVudDtpZihpKXJldHVybiBtLmN1cnJlbnQ7cmV0dXJuIG8/WjEuY3VycmVudDpsLmN1cnJlbnR9LFtvLGksZF0pLHkxPXcoKCk9PntyZXR1cm4gSDEuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P1IwKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbUjBdKSxCMD13KChPLE0pPT57bGV0IFM9eTEoKTtpZighUylyZXR1cm47bGV0IGI9KE0uY2xpZW50WC1TLmxlZnQpL1Mud2lkdGgsYz0oTS5jbGllbnRZLVMudG9wKS9TLmhlaWdodDt2MSh7dHlwZTpPLHg6Yix5OmN9KX0sW3kxLHYxXSksSDA9dygoTyxNKT0+e2xldCBiPXkxKCk/LmhlaWdodHx8MSxjPVMyKE8sTSxiKTtpZihjPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gSjAoYyksITB9LFt5MSxKMF0pLEQxPVQoITEpLEUxPVQoITEpLFEwPVQoITEpLE4wPVQoe2R4OjAsZHk6MH0pLFUwPVQoITEpLFtrMCxLMV09ayghMSksST1UKHt4OjAuNSx5OjAuNX0pLFt1LHNdPWsobnVsbCk7eSgoKT0+e2xldCBPPShTKT0+e2lmKFMua2V5PT09IkFsdCIpSzEoITApfSxNPShTKT0+e2lmKFMua2V5PT09IkFsdCIpe2lmKEsxKCExKSwhRTEuY3VycmVudClzKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixPKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLE0pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsTSl9fSxbXSkseSgoKT0+e2lmKGswJiYhRTEuY3VycmVudCl7bGV0IE89SS5jdXJyZW50O3Moe3gxOk8ueCx5MTpPLnkseDI6MS1PLngseTI6MS1PLnl9KX1lbHNlIGlmKCFrMCYmIUUxLmN1cnJlbnQpcyhudWxsKX0sW2swXSk7bGV0IEMxPVQobnVsbCksVjE9VCghMSksQjE9VCgwKSxoMT13KChPLE0pPT57VjEuY3VycmVudD0hMDtsZXQgUz1DMS5jdXJyZW50O2lmKFMpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksQjEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntTLnN0eWxlLmxlZnQ9YCR7TyoxMDB9JWAsUy5zdHlsZS50b3A9YCR7TSoxMDB9JWAsUy5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLGwxPXcoKE8sTSk9PntpZighVjEuY3VycmVudClyZXR1cm47bGV0IFM9QzEuY3VycmVudDtpZihTKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIxLmN1cnJlbnQpLEIxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Uy5zdHlsZS5sZWZ0PWAke08qMTAwfSVgLFMuc3R5bGUudG9wPWAke00qMTAwfSVgfSl9LFtdKSxwMT13KCgpPT57VjEuY3VycmVudD0hMTtsZXQgTz1DMS5jdXJyZW50O2lmKE8pY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksTy5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLEMwPXcoKE8pPT57aWYoVjEuY3VycmVudHx8RTEuY3VycmVudClyZXR1cm4hMTtsZXQgTT15MSgpO2lmKCFNKXJldHVybiExO2xldCBTPXYzKE8uZGVsdGFYLE8uZGVsdGFNb2RlLE0ud2lkdGgpLGI9djMoTy5kZWx0YVksTy5kZWx0YU1vZGUsTS5oZWlnaHQpO2lmKFM9PT0wJiZiPT09MClyZXR1cm4hMTtsZXQgYz1NYXRoLm1pbihNYXRoLm1heCgoTy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCwwKSwxKSwkMT1NYXRoLm1pbihNYXRoLm1heCgoTy5jbGllbnRZLU0udG9wKS9NLmhlaWdodCwwKSwxKTtyZXR1cm4gUDAoUy9NLndpZHRoLGIvTS5oZWlnaHQsYywkMSksITB9LFt5MSxQMF0pO3koKCk9PntsZXQgTz10LmN1cnJlbnQ7aWYoIU8pcmV0dXJuO2xldCBNPShTKT0+e2lmKCEoVj9IMChTLmRlbHRhWSxTLmRlbHRhTW9kZSk6QzAoUykpKXJldHVybjtTLnByZXZlbnREZWZhdWx0KCksUy5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIE8uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLE0se3Bhc3NpdmU6ITF9KSwoKT0+Ty5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsTSl9LFtWLEgwLEMwXSk7bGV0IG4xPVQoMCksVzA9VChudWxsKSx6MD13KCgpPT57bGV0IE89RGF0ZS5ub3coKSxNPU8tbjEuY3VycmVudDtpZihuMS5jdXJyZW50PU8sTTwzMDApe2lmKFcwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFcwLmN1cnJlbnQpLFcwLmN1cnJlbnQ9bnVsbDtpZihZKVkoKTtlbHNlIFYwKCJhcHBfc3dpdGNoZXIiKX1lbHNlIFcwLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2lmKFkpWSgpO2Vsc2UgVjAoImhvbWUiKTtXMC5jdXJyZW50PW51bGx9LDMwMCl9LFtWMCxZXSksUDE9VjIoaCksUzA9UDEuZGlzcGxheUNvbmZpZyxfMD0oKCk9PntpZighUzB8fCFXMSlyZXR1cm4gbnVsbDtpZihXMS53aWR0aD09PTB8fFcxLmhlaWdodD09PTApcmV0dXJuIG51bGw7bGV0IE89TWF0aC5taW4oVzEud2lkdGgvUzAud2lkdGgsVzEuaGVpZ2h0L1MwLmhlaWdodCk7cmV0dXJue3dpZHRoOlMwLndpZHRoKk8saGVpZ2h0OlMwLmhlaWdodCpPfX0pKCksUTI9UDEucm90YXRpb25EZWdyZWVzLEQyPVAxLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKFEyKT09PTkwLEIzPVgsZDA9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6RDImJl8wP2Ake18wLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpEMiYmXzA/YCR7XzAud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7UTI9PT0wPyIiOmAgcm90YXRlKCR7UTJ9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpwOSxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlgsLi4uUTI9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxOMz17Li4uZDAsdHJhbnNmb3JtOmAke2QwLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7YiR9KWB9O3JldHVybiBaKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uVT97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uUX0sY2xhc3NOYW1lOkssY2hpbGRyZW46W1ooImRpdiIse3JlZjp3MSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpaKCJkaXYiLHtyZWY6SDEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6XzA/YCR7XzAud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6XzA/YCR7XzAuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOkIzPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6QjM/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbZD9aKCJ2aWRlbyIse3JlZjpYMSxtdXRlZDohMCxwbGF5c0lubGluZTohMCxhdXRvUGxheTohMCxzdHlsZTpkMH0pOmk/WigiY2FudmFzIix7cmVmOm0sc3R5bGU6TjN9KTpaKCJpbWciLHtyZWY6bCxzcmM6bz92b2lkIDA6YTEsZHJhZ2dhYmxlOiExLG9uTG9hZDooTyk9PntsZXQgTT1PLmN1cnJlbnRUYXJnZXQ7aWYoTS5uYXR1cmFsV2lkdGg+MCYmTS5uYXR1cmFsSGVpZ2h0PjApRjEoe3dpZHRoOk0ubmF0dXJhbFdpZHRoLGhlaWdodDpNLm5hdHVyYWxIZWlnaHR9LCJtZWRpYSIpfSxzdHlsZTpvP3tkaXNwbGF5OiJub25lIn06ZDB9KSxvJiZaKCJpbWciLHtyZWY6WjEsZHJhZ2dhYmxlOiExLG9uTG9hZDooTyk9PntsZXQgTT1PLmN1cnJlbnRUYXJnZXQ7aWYoTS5uYXR1cmFsV2lkdGg+MCYmTS5uYXR1cmFsSGVpZ2h0PjApRjEoe3dpZHRoOk0ubmF0dXJhbFdpZHRoLGhlaWdodDpNLm5hdHVyYWxIZWlnaHR9LCJtZWRpYSIpfSxzdHlsZTpkMH0pLFooImRpdiIse3JlZjp0LHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsY3Vyc29yOnA5LHRvdWNoQWN0aW9uOiJub25lIn0sb25Nb3VzZURvd246KE8pPT57Ty5wcmV2ZW50RGVmYXVsdCgpO2xldCBNPXkxKCk7aWYoIU0pcmV0dXJuO2xldCBTPShPLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLGI9KE8uY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7aWYoTy5hbHRLZXkpe0UxLmN1cnJlbnQ9ITAsUTAuY3VycmVudD1PLnNoaWZ0S2V5O2xldCAkMT17eDE6Uyx5MTpiLHgyOjEtUyx5MjoxLWJ9O04wLmN1cnJlbnQ9e2R4OjEtUy1TLGR5OjEtYi1ifSxzKCQxKSxtMSh7dHlwZToiYmVnaW4iLC4uLiQxfSk7cmV0dXJufWgxKFMsYik7bGV0IGM9UzMoYik7aWYoYyE9PXZvaWQgMClEMS5jdXJyZW50PSEwLHYxKHt0eXBlOiJiZWdpbiIseDpTLHk6YixlZGdlOmN9KTtlbHNlIEQxLmN1cnJlbnQ9ITEsQjAoImJlZ2luIixPKX0sb25Nb3VzZU1vdmU6KE8pPT57bGV0IE09eTEoKTtpZighTSlyZXR1cm47bGV0IFM9KE8uY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsYj0oTy5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihJLmN1cnJlbnQ9e3g6Uyx5OmJ9LE8uYnV0dG9ucz09PTApe2lmKE8uYWx0S2V5KXMoe3gxOlMseTE6Yix4MjoxLVMseTI6MS1ifSk7cmV0dXJufWlmKEUxLmN1cnJlbnQpe2xldCBjO2lmKFEwLmN1cnJlbnQpe2xldCAkMT1OMC5jdXJyZW50O2M9e3gxOlMseTE6Yix4MjpTKyQxLmR4LHkyOmIrJDEuZHl9fWVsc2UgYz17eDE6Uyx5MTpiLHgyOjEtUyx5MjoxLWJ9O3MoYyksbTEoe3R5cGU6Im1vdmUiLC4uLmN9KTtyZXR1cm59aWYobDEoUyxiKSxEMS5jdXJyZW50KXYxKHt0eXBlOiJtb3ZlIix4OlMseTpiLGVkZ2U6cTJ9KTtlbHNlIEIwKCJtb3ZlIixPKX0sb25Nb3VzZVVwOihPKT0+e2lmKEUxLmN1cnJlbnQpe2xldCBNPXkxKCk7aWYoTSl7bGV0IFM9KE8uY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsYj0oTy5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihRMC5jdXJyZW50KXtsZXQgYz1OMC5jdXJyZW50O20xKHt0eXBlOiJlbmQiLHgxOlMseTE6Yix4MjpTK2MuZHgseTI6YitjLmR5fSl9ZWxzZSBtMSh7dHlwZToiZW5kIix4MTpTLHkxOmIseDI6MS1TLHkyOjEtYn0pfWlmKEUxLmN1cnJlbnQ9ITEsIU8uYWx0S2V5KXMobnVsbCk7cmV0dXJufWlmKHAxKCksRDEuY3VycmVudCl7bGV0IE09eTEoKTtpZihNKXtsZXQgUz0oTy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxiPShPLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O3YxKHt0eXBlOiJlbmQiLHg6Uyx5OmIsZWRnZTpxMn0pfUQxLmN1cnJlbnQ9ITE7cmV0dXJufUIwKCJlbmQiLE8pfSxvbk1vdXNlTGVhdmU6KE8pPT57aWYoRTEuY3VycmVudCl7aWYodSltMSh7dHlwZToiZW5kIiwuLi51fSk7RTEuY3VycmVudD0hMSxzKG51bGwpO3JldHVybn1pZihwMSgpLEQxLmN1cnJlbnQpe2xldCBNPXkxKCk7aWYoTSl7bGV0IFM9KE8uY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsYj0oTy5jbGllbnRZLU0udG9wKS9NLmhlaWdodDt2MSh7dHlwZToiZW5kIix4OlMseTpiLGVkZ2U6cTJ9KX1EMS5jdXJyZW50PSExO3JldHVybn1pZihPLmJ1dHRvbnM+MClCMCgiZW5kIixPKTtzKG51bGwpfSxvblRvdWNoU3RhcnQ6KE8pPT57Ty5wcmV2ZW50RGVmYXVsdCgpO2xldCBNPXkxKCk7aWYoIU0pcmV0dXJuO2lmKE8udG91Y2hlcy5sZW5ndGg+PTIpe3AxKCk7bGV0IFUxPU8udG91Y2hlc1swXSxBMT1PLnRvdWNoZXNbMV0sbzE9e3gxOihVMS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MTooVTEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQseDI6KEExLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHkyOihBMS5jbGllbnRZLU0udG9wKS9NLmhlaWdodH07aWYoIVUwLmN1cnJlbnQmJiFEMS5jdXJyZW50KXYxKHt0eXBlOiJlbmQiLHg6bzEueDEseTpvMS55MX0pO1UwLmN1cnJlbnQ9ITAsRTEuY3VycmVudD0hMCxEMS5jdXJyZW50PSExLHMobzEpLG0xKHt0eXBlOiJiZWdpbiIsLi4ubzF9KTtyZXR1cm59bGV0IFM9Ty50b3VjaGVzWzBdO2lmKCFTKXJldHVybjtsZXQgYj0oUy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxjPShTLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2gxKGIsYyk7bGV0ICQxPVMzKGMpO2lmKCQxIT09dm9pZCAwKUQxLmN1cnJlbnQ9ITAsdjEoe3R5cGU6ImJlZ2luIix4OmIseTpjLGVkZ2U6JDF9KTtlbHNlIEQxLmN1cnJlbnQ9ITEsdjEoe3R5cGU6ImJlZ2luIix4OmIseTpjfSl9LG9uVG91Y2hNb3ZlOihPKT0+e08ucHJldmVudERlZmF1bHQoKTtsZXQgTT15MSgpO2lmKCFNKXJldHVybjtpZihVMC5jdXJyZW50JiZPLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgJDE9Ty50b3VjaGVzWzBdLFUxPU8udG91Y2hlc1sxXSxBMT17eDE6KCQxLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHkxOigkMS5jbGllbnRZLU0udG9wKS9NLmhlaWdodCx4MjooVTEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTI6KFUxLmNsaWVudFktTS50b3ApL00uaGVpZ2h0fTtzKEExKSxtMSh7dHlwZToibW92ZSIsLi4uQTF9KTtyZXR1cm59bGV0IFM9Ty50b3VjaGVzWzBdO2lmKCFTKXJldHVybjtsZXQgYj0oUy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxjPShTLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKGwxKGIsYyksRDEuY3VycmVudCl2MSh7dHlwZToibW92ZSIseDpiLHk6YyxlZGdlOnEyfSk7ZWxzZSB2MSh7dHlwZToibW92ZSIseDpiLHk6Y30pfSxvblRvdWNoRW5kOihPKT0+e08ucHJldmVudERlZmF1bHQoKTtsZXQgTT15MSgpO2lmKCFNKXJldHVybjtpZihVMC5jdXJyZW50KXtpZihPLnRvdWNoZXMubGVuZ3RoPDIpe2xldCAkMT1PLmNoYW5nZWRUb3VjaGVzWzBdLFUxPXU7aWYoJDEmJlUxKW0xKHt0eXBlOiJlbmQiLHgxOigkMS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MTooJDEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQseDI6VTEueDIseTI6VTEueTJ9KTtlbHNlIGlmKFUxKW0xKHt0eXBlOiJlbmQiLC4uLlUxfSk7VTAuY3VycmVudD0hMSxFMS5jdXJyZW50PSExLHMobnVsbCl9cmV0dXJufWxldCBTPU8uY2hhbmdlZFRvdWNoZXNbMF07aWYoIVMpcmV0dXJuO2xldCBiPShTLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLGM9KFMuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7aWYocDEoKSxEMS5jdXJyZW50KXYxKHt0eXBlOiJlbmQiLHg6Yix5OmMsZWRnZTpxMn0pLEQxLmN1cnJlbnQ9ITE7ZWxzZSB2MSh7dHlwZToiZW5kIix4OmIseTpjfSl9fSksWigiZGl2Iix7cmVmOkMxLCJkYXRhLXRlc3RpZCI6InRvdWNoLWluZGljYXRvciIsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSIsd2lkdGg6MjQsaGVpZ2h0OjI0LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDU5LDEzMCwyNDYsMC41KSIsYm94U2hhZG93OiIwIDAgOHB4IHJnYmEoNTksMTMwLDI0NiwwLjMpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksdSYmWihKMSx7Y2hpbGRyZW46W1ooImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOmQ5KHUueDEsdS55MSl9KSxaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpkOSh1LngyLHUueTIpfSldfSksIXExJiYhcCYmWigiZGl2Iix7c3R5bGU6ey4uLnU5LC4uLlh8fHt9fSxjaGlsZHJlbjpaKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxwJiZaKCJkaXYiLHtzdHlsZTp1OSxjaGlsZHJlbjpaKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46cH0pfSkscjEmJlooImRpdiIse3N0eWxlOlIkLGNoaWxkcmVuOlooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFVJiZaKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltaKCJidXR0b24iLHtvbkNsaWNrOnowLHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxaKCJzcGFuIix7c3R5bGU6e2NvbG9yOl8xPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOltXJiZaKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6Vz09PSJnb29kIj8iIzRhZGU4MCI6Vz09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSxfMSwiIGZwcyJdfSldfSldfSl9dmFyIFIkPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sdTk9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LGw5PTIwO2Z1bmN0aW9uIGQ5KCQsSil7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHskKjEwMH0lYCx0b3A6YCR7SioxMDB9JWAsd2lkdGg6bDksaGVpZ2h0Omw5LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIEUwKCQpe2lmKCEkKXJldHVybiJpcGhvbmUiO2xldCBKPSQudG9Mb3dlckNhc2UoKTtpZihKLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKEouaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihKLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgeDE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LENLPXgxLmlwaG9uZS53aWR0aCxPSz14MS5pcGhvbmUuaGVpZ2h0LEZLPXgxLmlwaG9uZS5iZXplbFgsQUs9eDEuaXBob25lLmJlemVsWSxNSz14MS5pcGhvbmUuaW5uZXJSYWRpdXMsYzk9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBENSgkLEope2xldCBRPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOkosWD1HMihRKTtpZihYKXJldHVybmAke1gud2lkdGh9IC8gJHtYLmhlaWdodH1gO3JldHVybmAke3gxLmlwaG9uZS53aWR0aC0yKngxLmlwaG9uZS5iZXplbFh9IC8gJHt4MS5pcGhvbmUuaGVpZ2h0LTIqeDEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIE4yKCQ9ImlwaG9uZSIsSil7bGV0IFE9Sj9jOVtKXTpudWxsO2lmKFEpcmV0dXJuIFE7bGV0IFg9eDFbJF07cmV0dXJue3dpZHRoOlgud2lkdGgtMipYLmJlemVsWCxoZWlnaHQ6WC5oZWlnaHQtMipYLmJlemVsWX19ZnVuY3Rpb24gejIoJD0iaXBob25lIixKKXtpZihmMChKKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIFA1KCQ9ImlwaG9uZSIsSil7bGV0IFE9eDFbJF0sWD1RLndpZHRoLTIqUS5iZXplbFgsSz1RLmhlaWdodC0yKlEuYmV6ZWxZO2lmKFg8SyYmZjAoSikpcmV0dXJuYCR7US5pbm5lclJhZGl1cy9LKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1gqMTAwfSVgO3JldHVybmAke1EuaW5uZXJSYWRpdXMvWCoxMDB9JSAvICR7US5pbm5lclJhZGl1cy9LKjEwMH0lYH1mdW5jdGlvbiBvOSgkKXtsZXQgSj14MVskLnR5cGVdLFE9Si53aWR0aC0yKkouYmV6ZWxYLFg9Si5oZWlnaHQtMipKLmJlemVsWSxLLFk7aWYoUTxYJiZmMCgkLmNvbmZpZz8/bnVsbCkpSz1KLmlubmVyUmFkaXVzL1gsWT1KLmlubmVyUmFkaXVzL1E7ZWxzZSBLPUouaW5uZXJSYWRpdXMvUSxZPUouaW5uZXJSYWRpdXMvWDtsZXQgcT1LKiQuY29udGFpbmVyV2lkdGgsRz1ZKiQuY29udGFpbmVySGVpZ2h0LEI9TWF0aC5zcXJ0KE1hdGgubWF4KHEqRywwKSk7cmV0dXJue3J4OnEscnk6RyxyR2VvbTpCfX12YXIgZyQ9MTMsZiQ9NjI7ZnVuY3Rpb24gZzMoJCl7bGV0e2NvbnRhaW5lcldpZHRoOkosY29udGFpbmVySGVpZ2h0OlF9PSQsWD0oVSk9PlUudG9GaXhlZCgzKSxLPShVLEYpPT57bGV0IFc9RixFPUYsUD1mJC8yKihNYXRoLlBJLzE4MCkseD0yMjUqTWF0aC5QSS8xODAsRD14K1Asbj14LVAsUj1XK1UqTWF0aC5jb3MoRCksZD1FK1UqTWF0aC5zaW4oRCksaT1XK1UqTWF0aC5jb3Mobikscj1FK1UqTWF0aC5zaW4obiksbz1gTSAke1goUil9ICR7WChkKX0gQSAke1goVSl9ICR7WChVKX0gMCAwIDEgJHtYKGkpfSAke1gocil9YCxhPWBNICR7WChpKX0gJHtYKHIpfSBBICR7WChVKX0gJHtYKFUpfSAwIDAgMCAke1goUil9ICR7WChkKX1gO3JldHVybntkOm8sZEZpbGw6YX19O2lmKCEoSj4wKXx8IShRPjApKXtsZXQgVT1nJCxGPU1hdGguY2VpbChVKzE0KSx7ZDpXLGRGaWxsOkV9PUsoVSxGKTtyZXR1cm57ZDpXLGRGaWxsOkUsdmlld0JveFNpemU6Rn19bGV0e3JHZW9tOll9PW85KCQpLHE9TWF0aC5tYXgoMi4yLE1hdGgubWluKDUuMiwwLjAxMSpNYXRoLm1pbihKLFEpKSksRz1ZKjAuMzQrcSxCPU1hdGgubWluKEosUSksTj1NYXRoLm1pbigyMixNYXRoLm1heCgxMixCKjAuMDUyKSk7Rz1NYXRoLm1pbigyNCxNYXRoLm1heCgxMixHLE4pKTtsZXQgQz1NYXRoLm1heCgyNixNYXRoLmNlaWwoRysxMykpLHtkOkEsZEZpbGw6TH09SyhHLEMpO3JldHVybntkOkEsZEZpbGw6TCx2aWV3Qm94U2l6ZTpDfX1mdW5jdGlvbiBUNSh7dHlwZTokPSJpcGhvbmUiLHN0cmVhbWluZzpKPSExfSl7c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIFoocCQse3N0cmVhbWluZzpKfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFoodSQse3N0cmVhbWluZzpKfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBaKGwkLHtzdHJlYW1pbmc6Sn0pO2RlZmF1bHQ6cmV0dXJuIFoobSQse3N0cmVhbWluZzpKfSl9fWZ1bmN0aW9uIG0kKHtzdHJlYW1pbmc6JD0hMX0pe3JldHVybiBaKCJzdmciLHt2aWV3Qm94OiIwIDAgNDI3IDg4MSIsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJkZWZzIix7Y2hpbGRyZW46W1ooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMCIseDoiLTAuMTY2OTkyIix5OiIwLjE2NjUwNCIsd2lkdGg6IjQyNyIsaGVpZ2h0OiI4ODAuNjY3IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pLFooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMSIseDoiNi4zMzIzNiIseToiNi4zMzM4MiIsd2lkdGg6IjQxNCIsaGVpZ2h0OiI4NjgiLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KV19KSxaKCJyZWN0Iix7eDoiMy44MzI2OCIseToiMy44MzM2NiIsd2lkdGg6IjQxOSIsaGVpZ2h0OiI4NzMiLHJ4OiI2Ni4xNjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0LjMzMzMzIn0pLFooInJlY3QiLHt4OiIwLjgzMzMzMyIseToiMC44MzMzMzMiLHdpZHRoOiI0MjUiLGhlaWdodDoiODc5IixyeDoiNjkuMTY2NyIsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KSxaKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS42NjYwMiIseToiMiIsd2lkdGg6IjQyMy4zMzMiLGhlaWdodDoiODc3IixyeDoiNjguNjY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KX0pLFooImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMSkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI3LjMzMjY4Iix5OiI3LjMzMzY2Iix3aWR0aDoiNDEyIixoZWlnaHQ6Ijg2NiIscng6IjYyLjY2NjciLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2NjY3In0pfSksWigicmVjdCIse3g6IjE1MS42NjYiLHk6IjMxLjY2NyIsd2lkdGg6IjEyMy4zMzMiLGhlaWdodDoiMzYiLHJ4OiIxOCIsZmlsbDoiYmxhY2siLHN0eWxlOntvcGFjaXR5OiQ/MDoxLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiBwJCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSj14MS5pcGFkLndpZHRoLFE9eDEuaXBhZC5oZWlnaHQsWD0zMCxLPTI2O3JldHVybiBaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkosaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Si0xMCxoZWlnaHQ6US0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImJsdXIifSldfSldfSksWigicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpKLTcsaGVpZ2h0OlEtNyxyeDoyNixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0In0pLFooInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkotMS42NjYsaGVpZ2h0OlEtMS42NjYscng6MzAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWigiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkotMyxoZWlnaHQ6US0zLHJ4OjI5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksWigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzEpIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Si0xMixoZWlnaHQ6US0xMixyeDoyNCxzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLFooImNpcmNsZSIse2N4OkovMixjeTp4MS5pcGFkLmJlemVsWS8yKzEscjoiMyIsZmlsbDoiIzFhMWExYSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuOCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSksWigicmVjdCIse3g6KEotMTIwKS8yLHk6US14MS5pcGFkLmJlemVsWS8yLTIuNSx3aWR0aDoiMTIwIixoZWlnaHQ6IjUiLHJ4OiIyLjUiLGZpbGw6IndoaXRlIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zNSxtaXhCbGVuZE1vZGU6ImRpZmZlcmVuY2UiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiB1JCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSj14MS53YXRjaC53aWR0aCxRPXgxLndhdGNoLmhlaWdodCxYPTg4LEs9ODIsWT04LHE9MzYsRz1RLzItMTgtMTYsQj0yMixOPVEvMi0xMSsxNjtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7Sn0gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWigiZGVmcyIse2NoaWxkcmVuOlooImZpbHRlciIse2lkOiJ3YXRjaC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SisxMixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pfSksWigicmVjdCIse3g6Si0yLHk6Ryx3aWR0aDo4LGhlaWdodDozNixyeDoiMyIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMSJ9KSxaKCJyZWN0Iix7eDpKLTEseTpOLHdpZHRoOjYsaGVpZ2h0OjIyLHJ4OiIyLjUiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjAuOCJ9KSxaKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkotNyxoZWlnaHQ6US03LHJ4OjgyLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMuNSJ9KSxaKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpKLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4Ojg4LHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLFooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN3YXRjaC1nbG93MCkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Si0zLGhlaWdodDpRLTMscng6ODcsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KV19KX1mdW5jdGlvbiBsJCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSj14MS52aXNpb24ud2lkdGgsUT14MS52aXNpb24uaGVpZ2h0LFg9NDAsSz0zNDtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7Sn0gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJkZWZzIix7Y2hpbGRyZW46W1ooImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkosaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpKLTEwLGhlaWdodDpRLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzU1NTU1OCIsc3RvcE9wYWNpdHk6IjAuMyJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMzYTNhM2QiLHN0b3BPcGFjaXR5OiIwLjEifSldfSldfSksWigicmVjdCIse3g6IjAiLHk6IjAiLHdpZHRoOkosaGVpZ2h0OlEscng6NDAsZmlsbDoidXJsKCN2aXNpb24tZ2xhc3MpIn0pLFooInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Si03LGhlaWdodDpRLTcscng6MzQsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMyJ9KSxaKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpKLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4OjQwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLFooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkotMyxoZWlnaHQ6US0zLHJ4OjM5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksWigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MSkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpKLTEyLGhlaWdodDpRLTEyLHJ4OjMyLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksWigiZWxsaXBzZSIse2N4OkovMixjeTpRLzIscng6Si8yLTMwLHJ5OlEvMi0yNCxzdHJva2U6IiM0YTRhNGQiLHN0cm9rZVdpZHRoOiIwLjUiLG9wYWNpdHk6IjAuMyIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMyx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9dmFyIGYzPU8wKG51bGwpO2Z1bmN0aW9uIEk1KCQpe2xldCBKPUYwKGYzKTtpZighSil0aHJvdyBFcnJvcihgPFNpbXVsYXRvclRvb2xiYXIuJHskfT4gbXVzdCBiZSByZW5kZXJlZCBpbnNpZGUgPFNpbXVsYXRvclRvb2xiYXI+YCk7cmV0dXJuIEp9dmFyIGMkPXtkaXNwbGF5OiJmbGV4IixmbGV4V3JhcDoid3JhcCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOiI0cHggMTJweCIscGFkZGluZzoiOHB4IDEycHgiLGJvcmRlclJhZGl1czoyNCxiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSkiLGJveFNoYWRvdzoiMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKSIsbWluV2lkdGg6MjQwLHdpZHRoOiIxMDAlIn07ZnVuY3Rpb24gbyQoe2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpYLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksc3RyZWFtaW5nOnE9ITEsZGlzYWJsZWQ6Rz0hMSxjaGlsZHJlbjpCLHN0eWxlOk4sLi4uen0pe2xldCBWPUUwKEspLEM9e2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpYLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksZGV2aWNlVHlwZTpWLHN0cmVhbWluZzpxLGRpc2FibGVkOkd8fCFYfHwhcX07cmV0dXJuIFooZjMuUHJvdmlkZXIse3ZhbHVlOkMsY2hpbGRyZW46WigiZGl2Iix7ImRhdGEtc2ltdWxhdG9yLXRvb2xiYXIiOiEwLHN0eWxlOnsuLi5jJCwuLi5OfSwuLi56LGNoaWxkcmVuOkJ9KX0pfXZhciBpJD17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0Iix0ZXh0QWxpZ246ImxlZnQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjZmZmIixwYWRkaW5nOiIycHggNHB4IixtYXJnaW46Ii0ycHggLTRweCIsYm9yZGVyUmFkaXVzOjYsY3Vyc29yOiJwb2ludGVyIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixsaW5lSGVpZ2h0OjEuMixmb250RmFtaWx5OiJpbmhlcml0In0sbiQ9RDAoZnVuY3Rpb24oe25hbWU6SixzdWJ0aXRsZTpRLGhpZGVDaGV2cm9uOlgsaGlkZVN1YnRpdGxlOkssc3R5bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6RywuLi5CfSxOKXtsZXQgej1JNSgiVGl0bGUiKSxbVixIXT1rKCExKSxDPUo/P3ouZGV2aWNlTmFtZT8/Ik5vIHNpbXVsYXRvciIsQT1RPz8oei5kZXZpY2VSdW50aW1lP3ouZGV2aWNlUnVudGltZS5yZXBsYWNlKC9cLi8sIiAiKToi4oCUIik7cmV0dXJuIFooImJ1dHRvbiIse3JlZjpOLHR5cGU6ImJ1dHRvbiIsImRhdGEtc2ltdWxhdG9yLXRvb2xiYXItdGl0bGUiOiEwLG9uTW91c2VFbnRlcjooTCk9PntIKCEwKSxxPy4oTCl9LG9uTW91c2VMZWF2ZTooTCk9PntIKCExKSxHPy4oTCl9LHN0eWxlOnsuLi5pJCxiYWNrZ3JvdW5kOlY/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IiwuLi5ZfSwuLi5CLGNoaWxkcmVuOltaKCJzcGFuIix7c3R5bGU6e2Rpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiIjZmZmIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46W0MsIVgmJlooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46WigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksIUsmJlooInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOkF9KV19KX0pLHIkPXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gYSQoe3N0eWxlOiQsLi4uSn0pe3JldHVybiBaKCJkaXYiLHtzdHlsZTp7Li4uciQsLi4uJH0sLi4uSn0pfXZhciBzJD17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czoxMixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIixwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sRTU9RDAoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6Six0b29sdGlwOlEsc3R5bGU6WCxkaXNhYmxlZDpLLHRpdGxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsb25Qb2ludGVyRG93bjpCLG9uRm9jdXM6TixvbkJsdXI6eixvbkNsaWNrOlYsY2hpbGRyZW46SCwiYXJpYS1sYWJlbCI6QywuLi5BfSxMKXtsZXQgVT1GMChmMyksRj1LfHxKfHxVPy5kaXNhYmxlZCxbVyxFXT1rKCExKSxbUCx4XT1rKCExKSxEPVQoITEpLG49WTIoKSxSPVE/P1k/Pyh0eXBlb2YgQz09PSJzdHJpbmciP0M6bnVsbCksZD0hIVImJiFGJiYoV3x8UCk7cmV0dXJuIFooImJ1dHRvbiIse3JlZjpMLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6RiwiYXJpYS1sYWJlbCI6QywiYXJpYS1kZXNjcmliZWRieSI6Uj9uOnZvaWQgMCxvblBvaW50ZXJEb3duOihpKT0+e0QuY3VycmVudD0hMCxCPy4oaSl9LG9uTW91c2VFbnRlcjooaSk9PntFKCEwKSxxPy4oaSl9LG9uTW91c2VMZWF2ZTooaSk9PntFKCExKSxHPy4oaSl9LG9uRm9jdXM6KGkpPT57eCghRC5jdXJyZW50KSxOPy4oaSl9LG9uQmx1cjooaSk9PntELmN1cnJlbnQ9ITEseCghMSksej8uKGkpfSxvbkNsaWNrOihpKT0+e0UoITEpLHgoITEpLGkuY3VycmVudFRhcmdldC5ibHVyKCksVj8uKGkpfSxzdHlsZTp7Li4ucyQsY29sb3I6Rj8icmdiYSgyNTUsMjU1LDI1NSwwLjI1KSI6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsYmFja2dyb3VuZDpXJiYhRj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLGN1cnNvcjpGPyJub3QtYWxsb3dlZCI6InBvaW50ZXIiLC4uLlh9LC4uLkEsY2hpbGRyZW46W0gsUiYmWigic3BhbiIse2lkOm4scm9sZToidG9vbHRpcCIsImFyaWEtaGlkZGVuIjohZCxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiI1MCUiLGJvdHRvbToiY2FsYygxMDAlICsgOHB4KSIsdHJhbnNmb3JtOmB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoJHtkPzA6Mn1weClgLG9wYWNpdHk6ZD8xOjAscG9pbnRlckV2ZW50czoibm9uZSIsd2hpdGVTcGFjZToibm93cmFwIixwYWRkaW5nOiI0cHggN3B4Iixib3JkZXJSYWRpdXM6NixiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSIsZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGJveFNoYWRvdzoiMCA0cHggMTRweCByZ2JhKDAsMCwwLDAuMzIpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTJzIGVhc2UsIHRyYW5zZm9ybSAwLjEycyBlYXNlIix6SW5kZXg6MTAwfSxjaGlsZHJlbjpSfSldfSl9KTtmdW5jdGlvbiB0JCgkLEope2lmKCQ9PT0id2F0Y2giKXJldHVybiBlJCgpO2lmKEopcmV0dXJuYHhjcnVuIHNpbWN0bCBsYXVuY2ggJHtKfSBjb20uYXBwbGUuc3ByaW5nYm9hcmRgO3JldHVybiJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUifWZ1bmN0aW9uIGUkKCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChKKT0+YC1lICcke0p9J2ApLnJlZHVjZSgoSixRKT0+YCR7Sn0gJHtRfWAsIm9zYXNjcmlwdCIpfXZhciAkSj1aKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksSko9Wigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgNDQgNDQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46WigicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZmlsbDoiY3VycmVudENvbG9yIixkOiJNNDMuNjg3NSAxMi40Njg4VjguMjczNDRDNDMuNjg3NSA1LjcyNjU2IDQyLjk1MzEgMy43MTA5NCA0MS40ODQ0IDIuMjI2NTZDNDAuMDE1NiAwLjc0MjE4OCAzOCAwIDM1LjQzNzUgMEgzMS4xNDg0QzMwLjYwMTYgMCAzMC4xMzI4IDAuMTk1MzEyIDI5Ljc0MjIgMC41ODU5MzhDMjkuMzUxNiAwLjk3NjU2MiAyOS4xNTYyIDEuNDQ1MzEgMjkuMTU2MiAxLjk5MjE5QzI5LjE1NjIgMi41MjM0NCAyOS4zNTE2IDIuOTg0MzggMjkuNzQyMiAzLjM3NUMzMC4xMzI4IDMuNzY1NjIgMzAuNjAxNiAzLjk2MDk0IDMxLjE0ODQgMy45NjA5NEgzNS40Mzc1QzM2Ljc4MTIgMy45NjA5NCAzNy44MzU5IDQuMzQzNzUgMzguNjAxNiA1LjEwOTM4QzM5LjM1MTYgNS44NzUgMzkuNzI2NiA2LjkyOTY5IDM5LjcyNjYgOC4yNzM0NFYxMi40Njg4QzM5LjcyNjYgMTMgMzkuOTIxOSAxMy40NjA5IDQwLjMxMjUgMTMuODUxNkM0MC43MDMxIDE0LjI0MjIgNDEuMTcxOSAxNC40Mzc1IDQxLjcxODggMTQuNDM3NUM0Mi4yNSAxNC40Mzc1IDQyLjcxMDkgMTQuMjQyMiA0My4xMDE2IDEzLjg1MTZDNDMuNDkyMiAxMy40NjA5IDQzLjY4NzUgMTMgNDMuNjg3NSAxMi40Njg4Wk0wIDEyLjQ2ODhDMCAxMyAwLjE5NTMxMiAxMy40NjA5IDAuNTg1OTM4IDEzLjg1MTZDMC45NzY1NjIgMTQuMjQyMiAxLjQzNzUgMTQuNDM3NSAxLjk2ODc1IDE0LjQzNzVDMi41IDE0LjQzNzUgMi45NjA5NCAxNC4yNDIyIDMuMzUxNTYgMTMuODUxNkMzLjc0MjE5IDEzLjQ2MDkgMy45Mzc1IDEzIDMuOTM3NSAxMi40Njg4VjguMjczNDRDMy45Mzc1IDYuOTI5NjkgNC4zMjAzMSA1Ljg3NSA1LjA4NTk0IDUuMTA5MzhDNS44MzU5NCA0LjM0Mzc1IDYuODkwNjIgMy45NjA5NCA4LjI1IDMuOTYwOTRIMTIuNTM5MUMxMy4wODU5IDMuOTYwOTQgMTMuNTU0NyAzLjc2NTYyIDEzLjk0NTMgMy4zNzVDMTQuMzIwMyAyLjk4NDM4IDE0LjUwNzggMi41MjM0NCAxNC41MDc4IDEuOTkyMTlDMTQuNTA3OCAxLjQ0NTMxIDE0LjMyMDMgMC45NzY1NjIgMTMuOTQ1MyAwLjU4NTkzOEMxMy41NTQ3IDAuMTk1MzEyIDEzLjA4NTkgMCAxMi41MzkxIDBIOC4yNUM1LjY4NzUgMCAzLjY3MTg4IDAuNzQyMTg4IDIuMjAzMTIgMi4yMjY1NkMwLjczNDM3NSAzLjcxMDk0IDAgNS43MjY1NiAwIDguMjczNDRWMTIuNDY4OFpNNDMuNjg3NSAzMS4yNDIyQzQzLjY4NzUgMzAuNzEwOSA0My40OTIyIDMwLjI1IDQzLjEwMTYgMjkuODU5NEM0Mi43MTA5IDI5LjQ2ODggNDIuMjUgMjkuMjczNCA0MS43MTg4IDI5LjI3MzRDNDEuMTcxOSAyOS4yNzM0IDQwLjcwMzEgMjkuNDY4OCA0MC4zMTI1IDI5Ljg1OTRDMzkuOTIxOSAzMC4yNSAzOS43MjY2IDMwLjcxMDkgMzkuNzI2NiAzMS4yNDIyVjM1LjQzNzVDMzkuNzI2NiAzNi43ODEyIDM5LjM1MTYgMzcuODM1OSAzOC42MDE2IDM4LjYwMTZDMzcuODM1OSAzOS4zNjcyIDM2Ljc4MTIgMzkuNzUgMzUuNDM3NSAzOS43NUgzMS4xNDg0QzMwLjYwMTYgMzkuNzUgMzAuMTMyOCAzOS45NDUzIDI5Ljc0MjIgNDAuMzM1OUMyOS4zNTE2IDQwLjcyNjYgMjkuMTU2MiA0MS4xODc1IDI5LjE1NjIgNDEuNzE4OEMyOS4xNTYyIDQyLjI2NTYgMjkuMzUxNiA0Mi43MjY2IDI5Ljc0MjIgNDMuMTAxNkMzMC4xMzI4IDQzLjQ5MjIgMzAuNjAxNiA0My42ODc1IDMxLjE0ODQgNDMuNjg3NUgzNS40Mzc1QzM4IDQzLjY4NzUgNDAuMDE1NiA0Mi45NDUzIDQxLjQ4NDQgNDEuNDYwOUM0Mi45NTMxIDM5Ljk5MjIgNDMuNjg3NSAzNy45ODQ0IDQzLjY4NzUgMzUuNDM3NVYzMS4yNDIyWk0wIDMxLjI0MjJWMzUuNDM3NUMwIDM3Ljk4NDQgMC43MzQzNzUgMzkuOTkyMiAyLjIwMzEyIDQxLjQ2MDlDMy42NzE4OCA0Mi45NDUzIDUuNjg3NSA0My42ODc1IDguMjUgNDMuNjg3NUgxMi41MzkxQzEzLjA4NTkgNDMuNjg3NSAxMy41NTQ3IDQzLjQ5MjIgMTMuOTQ1MyA0My4xMDE2QzE0LjMyMDMgNDIuNzI2NiAxNC41MDc4IDQyLjI2NTYgMTQuNTA3OCA0MS43MTg4QzE0LjUwNzggNDEuMTg3NSAxNC4zMjAzIDQwLjcyNjYgMTMuOTQ1MyA0MC4zMzU5QzEzLjU1NDcgMzkuOTQ1MyAxMy4wODU5IDM5Ljc1IDEyLjUzOTEgMzkuNzVIOC4yNUM2Ljg5MDYyIDM5Ljc1IDUuODM1OTQgMzkuMzY3MiA1LjA4NTk0IDM4LjYwMTZDNC4zMjAzMSAzNy44MzU5IDMuOTM3NSAzNi43ODEyIDMuOTM3NSAzNS40Mzc1VjMxLjI0MjJDMy45Mzc1IDMwLjcxMDkgMy43NDIxOSAzMC4yNSAzLjM1MTU2IDI5Ljg1OTRDMi45NjA5NCAyOS40Njg4IDIuNSAyOS4yNzM0IDEuOTY4NzUgMjkuMjczNEMxLjQzNzUgMjkuMjczNCAwLjk3NjU2MiAyOS40Njg4IDAuNTg1OTM4IDI5Ljg1OTRDMC4xOTUzMTIgMzAuMjUgMCAzMC43MTA5IDAgMzEuMjQyMlpNMzEuNTkzOCAzMS44MDQ3QzMyLjc4MTIgMzEuODA0NyAzMy42NzE5IDMxLjUxNTYgMzQuMjY1NiAzMC45Mzc1QzM0Ljg1OTQgMzAuMzQzOCAzNS4xNTYyIDI5LjQ2ODggMzUuMTU2MiAyOC4zMTI1VjE2LjcxMDlDMzUuMTU2MiAxNS41MzkxIDM0Ljg1OTQgMTQuNjY0MSAzNC4yNjU2IDE0LjA4NTlDMzMuNjcxOSAxMy40OTIyIDMyLjc4MTIgMTMuMTk1MyAzMS41OTM4IDEzLjE5NTNIMjguODk4NEMyOC40NjA5IDEzLjE5NTMgMjguMTQ4NCAxMy4xNDA2IDI3Ljk2MDkgMTMuMDMxMkMyNy43NTc4IDEyLjkyMTkgMjcuNTIzNCAxMi43MjY2IDI3LjI1NzggMTIuNDQ1M0wyNi4zNjcyIDExLjUwNzhDMjYuMDg1OSAxMS4xOTUzIDI1Ljc4MTIgMTAuOTY4OCAyNS40NTMxIDEwLjgyODFDMjUuMTA5NCAxMC42NzE5IDI0LjY1NjIgMTAuNTkzOCAyNC4wOTM4IDEwLjU5MzhIMTkuNjE3MkMxOS4wNTQ3IDEwLjU5MzggMTguNjA5NCAxMC42NzE5IDE4LjI4MTIgMTAuODI4MUMxNy45Mzc1IDEwLjk2ODggMTcuNjI1IDExLjE5NTMgMTcuMzQzOCAxMS41MDc4TDE2LjQ3NjYgMTIuNDQ1M0MxNi4yMTA5IDEyLjc0MjIgMTUuOTc2NiAxMi45NDUzIDE1Ljc3MzQgMTMuMDU0N0MxNS41NTQ3IDEzLjE0ODQgMTUuMjM0NCAxMy4xOTUzIDE0LjgxMjUgMTMuMTk1M0gxMi4wNDY5QzEwLjg5MDYgMTMuMTk1MyAxMC4wMTU2IDEzLjQ5MjIgOS40MjE4OCAxNC4wODU5QzguODEyNSAxNC42NjQxIDguNTA3ODEgMTUuNTM5MSA4LjUwNzgxIDE2LjcxMDlWMjguMzEyNUM4LjUwNzgxIDI5LjQ2ODggOC44MTI1IDMwLjM0MzggOS40MjE4OCAzMC45Mzc1QzEwLjAxNTYgMzEuNTE1NiAxMC44OTA2IDMxLjgwNDcgMTIuMDQ2OSAzMS44MDQ3SDMxLjU5MzhaTTIxLjc5NjkgMjguOTQ1M0MyMC41OTM4IDI4Ljk0NTMgMTkuNSAyOC42NjQxIDE4LjUxNTYgMjguMTAxNkMxNy41MTU2IDI3LjUyMzQgMTYuNzI2NiAyNi43NDIyIDE2LjE0ODQgMjUuNzU3OEMxNS41NTQ3IDI0Ljc1NzggMTUuMjU3OCAyMy42MzI4IDE1LjI1NzggMjIuMzgyOEMxNS4yNTc4IDIxLjE3OTcgMTUuNTU0NyAyMC4wODU5IDE2LjE0ODQgMTkuMTAxNkMxNi43MjY2IDE4LjEwMTYgMTcuNTE1NiAxNy4zMTI1IDE4LjUxNTYgMTYuNzM0NEMxOS41IDE2LjE0MDYgMjAuNTkzOCAxNS44NDM4IDIxLjc5NjkgMTUuODQzOEMyMy4wMTU2IDE1Ljg0MzggMjQuMTI1IDE2LjE0MDYgMjUuMTI1IDE2LjczNDRDMjYuMTA5NCAxNy4zMTI1IDI2Ljg5ODQgMTguMTAxNiAyNy40OTIyIDE5LjEwMTZDMjguMDcwMyAyMC4wODU5IDI4LjM1OTQgMjEuMTc5NyAyOC4zNTk0IDIyLjM4MjhDMjguMzU5NCAyMy42MTcyIDI4LjA3MDMgMjQuNzI2NiAyNy40OTIyIDI1LjcxMDlDMjYuODk4NCAyNi42OTUzIDI2LjEwOTQgMjcuNDg0NCAyNS4xMjUgMjguMDc4MUMyNC4xMjUgMjguNjU2MiAyMy4wMTU2IDI4Ljk0NTMgMjEuNzk2OSAyOC45NDUzWk0yMS44MjAzIDI2LjkwNjJDMjIuNjQ4NCAyNi45MDYyIDIzLjQwNjIgMjYuNzEwOSAyNC4wOTM4IDI2LjMyMDNDMjQuNzgxMiAyNS45MTQxIDI1LjMyODEgMjUuMzY3MiAyNS43MzQ0IDI0LjY3OTdDMjYuMTI1IDIzLjk5MjIgMjYuMzIwMyAyMy4yMjY2IDI2LjMyMDMgMjIuMzgyOEMyNi4zMjAzIDIxLjU3MDMgMjYuMTI1IDIwLjgyMDMgMjUuNzM0NCAyMC4xMzI4QzI1LjMyODEgMTkuNDQ1MyAyNC43ODEyIDE4LjkwNjIgMjQuMDkzOCAxOC41MTU2QzIzLjQwNjIgMTguMTA5NCAyMi42NDg0IDE3LjkwNjIgMjEuODIwMyAxNy45MDYyQzIwLjk5MjIgMTcuOTA2MiAyMC4yNDIyIDE4LjEwOTQgMTkuNTcwMyAxOC41MTU2QzE4Ljg4MjggMTguOTA2MiAxOC4zMzU5IDE5LjQ0NTMgMTcuOTI5NyAyMC4xMzI4QzE3LjUyMzQgMjAuODIwMyAxNy4zMjAzIDIxLjU3MDMgMTcuMzIwMyAyMi4zODI4QzE3LjMyMDMgMjMuMjI2NiAxNy41MjM0IDIzLjk5MjIgMTcuOTI5NyAyNC42Nzk3QzE4LjMzNTkgMjUuMzY3MiAxOC44ODI4IDI1LjkxNDEgMTkuNTcwMyAyNi4zMjAzQzIwLjI0MjIgMjYuNzEwOSAyMC45OTIyIDI2LjkwNjIgMjEuODIwMyAyNi45MDYyWk0xMi42MzI4IDE4Ljk4NDRDMTIuMjEwOSAxOC45ODQ0IDExLjg1OTQgMTguODM1OSAxMS41NzgxIDE4LjUzOTFDMTEuMjgxMiAxOC4yNDIyIDExLjEzMjggMTcuODkwNiAxMS4xMzI4IDE3LjQ4NDRDMTEuMTMyOCAxNy4wNjI1IDExLjI4MTIgMTYuNzEwOSAxMS41NzgxIDE2LjQyOTdDMTEuODU5NCAxNi4xMzI4IDEyLjIxMDkgMTUuOTg0NCAxMi42MzI4IDE1Ljk4NDRDMTMuMDM5MSAxNS45ODQ0IDEzLjM5MDYgMTYuMTMyOCAxMy42ODc1IDE2LjQyOTdDMTMuOTg0NCAxNi43MTA5IDE0LjEzMjggMTcuMDYyNSAxNC4xMzI4IDE3LjQ4NDRDMTQuMTMyOCAxNy44OTA2IDEzLjk4NDQgMTguMjQyMiAxMy42ODc1IDE4LjUzOTFDMTMuMzkwNiAxOC44MzU5IDEzLjAzOTEgMTguOTg0NCAxMi42MzI4IDE4Ljk4NDRaIn0pfSksUUo9Wigic3ZnIix7d2lkdGg6IjIxIixoZWlnaHQ6IjIxIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIn0pLFooInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifSksWigicGF0aCIse2Q6Ik00IDE0djRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtMiJ9KV19KSxaSj1EMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFgpe2xldCBLPUk1KCJIb21lQnV0dG9uIik7cmV0dXJuIFooRTUse3JlZjpYLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtLLmV4ZWModCQoSy5kZXZpY2VUeXBlLEsuZGV2aWNlVWRpZCkpfSwuLi5RLGNoaWxkcmVuOiRKfSl9KSxYSj1EMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFgpe2xldCBLPUk1KCJTY3JlZW5zaG90QnV0dG9uIik7cmV0dXJuIFooRTUse3JlZjpYLCJhcmlhLWxhYmVsIjoiU2NyZWVuc2hvdCIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihLLmRldmljZVVkaWQpSy5leGVjKGB4Y3J1biBzaW1jdGwgaW8gJHtLLmRldmljZVVkaWR9IHNjcmVlbnNob3Qgfi9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSQoZGF0ZSArJXMpLnBuZ2ApfSwuLi5RLGNoaWxkcmVuOkpKfSl9KSxLSj1EMChmdW5jdGlvbih7b25DbGljazpKLGZvcmNlRGlzYWJsZWQ6USwuLi5YfSxLKXtsZXQgWT1JNSgiUm90YXRlQnV0dG9uIikscT1ZLmRldmljZVR5cGU9PT0id2F0Y2gifHxZLmRldmljZVR5cGU9PT0idmlzaW9uIixbRyxCXT1rKCJwb3J0cmFpdCIpO3JldHVybiB5KCgpPT57QihZLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiKX0sW1kuZGV2aWNlVWRpZCxZLm9yaWVudGF0aW9uXSksWihFNSx7cmVmOkssImFyaWEtbGFiZWwiOiJSb3RhdGUgZGV2aWNlIixmb3JjZURpc2FibGVkOlF8fHEsb25DbGljazooTik9PntpZihKPy4oTiksTi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZighWS5kZXZpY2VVZGlkfHxxKXJldHVybjtsZXQgej15MltZLm9yaWVudGF0aW9uPz9HXTtpZihCKHopLFkub25Sb3RhdGUpWS5vblJvdGF0ZSh6KTtlbHNlIFkuZXhlYyhgc2VydmUtc2ltIHJvdGF0ZSAke3p9IC1kICR7WS5kZXZpY2VVZGlkfWApfSwuLi5YLGNoaWxkcmVuOlFKfSl9KSxjMT1vJDtjMS5UaXRsZT1uJDtjMS5BY3Rpb25zPWEkO2MxLkJ1dHRvbj1FNTtjMS5Ib21lQnV0dG9uPVpKO2MxLlNjcmVlbnNob3RCdXR0b249WEo7YzEuUm90YXRlQnV0dG9uPUtKO3ZhciB3NT0oLi4uJCk9PiQuZmlsdGVyKChKLFEsWCk9PntyZXR1cm4gQm9vbGVhbihKKSYmSi50cmltKCkhPT0iIiYmWC5pbmRleE9mKEopPT09UX0pLmpvaW4oIiAiKS50cmltKCk7dmFyIGk5PSgkKT0+JC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIG45PSgkKT0+JC5yZXBsYWNlKC9eKFtBLVpdKXxbXHMtX10rKFx3KS9nLChKLFEsWCk9Plg/WC50b1VwcGVyQ2FzZSgpOlEudG9Mb3dlckNhc2UoKSk7dmFyIG0zPSgkKT0+e2xldCBKPW45KCQpO3JldHVybiBKLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0ouc2xpY2UoMSl9O3ZhciBiNT17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07dmFyIHI5PSgkKT0+e2ZvcihsZXQgSiBpbiAkKWlmKEouc3RhcnRzV2l0aCgiYXJpYS0iKXx8Sj09PSJyb2xlInx8Sj09PSJ0aXRsZSIpcmV0dXJuITA7cmV0dXJuITF9O3ZhciBZSj1PMCh7fSk7dmFyIGE5PSgpPT5GMChZSik7dmFyIHM5PUQwKCh7Y29sb3I6JCxzaXplOkosc3Ryb2tlV2lkdGg6USxhYnNvbHV0ZVN0cm9rZVdpZHRoOlgsY2xhc3NOYW1lOks9IiIsY2hpbGRyZW46WSxpY29uTm9kZTpxLC4uLkd9LEIpPT57bGV0e3NpemU6Tj0yNCxzdHJva2VXaWR0aDp6PTIsYWJzb2x1dGVTdHJva2VXaWR0aDpWPSExLGNvbG9yOkg9ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOkM9IiJ9PWE5KCk/P3t9LEE9WD8/Vj9OdW1iZXIoUT8/eikqMjQvTnVtYmVyKEo/P04pOlE/P3o7cmV0dXJuIHUxKCJzdmciLHtyZWY6QiwuLi5iNSx3aWR0aDpKPz9OPz9iNS53aWR0aCxoZWlnaHQ6Sj8/Tj8/YjUuaGVpZ2h0LHN0cm9rZTokPz9ILHN0cm9rZVdpZHRoOkEsY2xhc3NOYW1lOnc1KCJsdWNpZGUiLEMsSyksLi4uIVkmJiFyOShHKSYmeyJhcmlhLWhpZGRlbiI6InRydWUifSwuLi5HfSxbLi4ucS5tYXAoKFtMLFVdKT0+dTEoTCxVKSksLi4uQXJyYXkuaXNBcnJheShZKT9ZOltZXV0pfSk7dmFyIHoxPSgkLEopPT57bGV0IFE9RDAoKHtjbGFzc05hbWU6WCwuLi5LfSxZKT0+dTEoczkse3JlZjpZLGljb25Ob2RlOkosY2xhc3NOYW1lOnc1KGBsdWNpZGUtJHtpOShtMygkKSl9YCxgbHVjaWRlLSR7JH1gLFgpLC4uLkt9KSk7cmV0dXJuIFEuZGlzcGxheU5hbWU9bTMoJCksUX07dmFyIHFKPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4IixrZXk6ImZoM2hxYSJ9XV0sdzA9ejEoInBhbmVsLWxlZnQiLHFKKTt2YXIgR0o9W1sicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIsa2V5OiJ4d256aXAifV0sWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IixrZXk6IjE0cnN2cSJ9XV0sbTA9ejEoInNxdWFyZS1tb3VzZS1wb2ludGVyIixHSik7dmFyIFZKPVtbInBhdGgiLHtkOiJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiLGtleToid21vZW5xIn1dLFsicGF0aCIse2Q6Ik0xMiA5djQiLGtleToianV6cHU3In1dLFsicGF0aCIse2Q6Ik0xMiAxN2guMDEiLGtleToicDMycDA1In1dXSxiMD16MSgidHJpYW5nbGUtYWxlcnQiLFZKKTt2YXIgQko9W1sicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNiIscng6IjIiLGtleToiaXp4bGFvIn1dLFsicGF0aCIse2Q6Ik0xMCA0djQiLGtleToicHA4dTgwIn1dLFsicGF0aCIse2Q6Ik0yIDhoMjAiLGtleToiZDExY3M3In1dLFsicGF0aCIse2Q6Ik02IDR2NCIsa2V5OiIxc3Z0ancifV1dLHgyPXoxKCJhcHAtd2luZG93IixCSik7dmFyIE5KPVtbInBhdGgiLHtkOiJNNyA3aDEwdjEwIixrZXk6IjF0aXZuOSJ9XSxbInBhdGgiLHtkOiJNNyAxNyAxNyA3IixrZXk6IjF2a2l6YSJ9XV0sajI9ejEoImFycm93LXVwLXJpZ2h0IixOSik7dmFyIHpKPVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSx2Mj16MSgiY2hlY2siLHpKKTt2YXIgTEo9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLFIyPXoxKCJjaGV2cm9uLWRvd24iLExKKTt2YXIgSEo9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSxoMj16MSgiY2hldnJvbi1yaWdodCIsSEopO3ZhciBVSj1bWyJwYXRoIix7ZDoiTTEyIDE1VjMiLGtleToibTlnMXgxIn1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XSxbInBhdGgiLHtkOiJtNyAxMCA1IDUgNS01IixrZXk6ImJyc243MCJ9XV0sZzI9ejEoImRvd25sb2FkIixVSik7dmFyIENKPVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0sZjI9ejEoImZhc3QtZm9yd2FyZCIsQ0opO3ZhciBPSj1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sbTI9ejEoImZsaXAtaG9yaXpvbnRhbC0yIixPSik7dmFyIEZKPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0scDI9ejEoImdsb2JlIixGSik7dmFyIEFKPVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLHUyPXoxKCJpbWFnZXMiLEFKKTt2YXIgTUo9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4IixrZXk6IjE0bnZwMCJ9XV0sbDI9ejEoInBhbmVsLXJpZ2h0IixNSik7dmFyIGtKPVtbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IixrZXk6IjEzNTdlMyJ9XSxbInBhdGgiLHtkOiJNMyAzdjVoNSIsa2V5OiIxeGhxOGEifV1dLGQyPXoxKCJyb3RhdGUtY2N3IixrSik7dmFyIFdKPVtbInBhdGgiLHtkOiJtMjEgMjEtNC4zNC00LjM0IixrZXk6IjE0ajdyaiJ9XSxbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4IixrZXk6IjRlajk3dSJ9XV0sYzI9ejEoInNlYXJjaCIsV0opO3ZhciBfSj1bWyJwYXRoIix7ZDoiTTEwIDVIMyIsa2V5OiIxcWdmYXcifV0sWyJwYXRoIix7ZDoiTTEyIDE5SDMiLGtleToieWhtbjFqIn1dLFsicGF0aCIse2Q6Ik0xNCAzdjQiLGtleToiMXN1YTAzIn1dLFsicGF0aCIse2Q6Ik0xNiAxN3Y0IixrZXk6IjFxMHIxNCJ9XSxbInBhdGgiLHtkOiJNMjEgMTJoLTkiLGtleToiMW80bHNxIn1dLFsicGF0aCIse2Q6Ik0yMSAxOWgtNSIsa2V5OiIxcmx0MXAifV0sWyJwYXRoIix7ZDoiTTIxIDVoLTciLGtleToiMW9zenoyIn1dLFsicGF0aCIse2Q6Ik04IDEwdjQiLGtleToidGdweHFrIn1dLFsicGF0aCIse2Q6Ik04IDEySDMiLGtleToiYTdzNGpiIn1dXSxqMD16MSgic2xpZGVycy1ob3Jpem9udGFsIixfSik7dmFyIERKPVtbInBhdGgiLHtkOiJNMTIgM3YxMiIsa2V5OiIxeDBqNXMifV0sWyJwYXRoIix7ZDoibTE3IDgtNS01LTUgNSIsa2V5OiI3cTk3cjgifV0sWyJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiLGtleToiaWg3bjNoIn1dXSxvMj16MSgidXBsb2FkIixESik7dmFyIFBKPVtbInBhdGgiLHtkOiJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41IixrZXk6ImZ0eW1lYyJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTQiLGhlaWdodDoiMTIiLHJ4OiIyIixrZXk6IjE1OHgwMSJ9XV0scjA9ejEoInZpZGVvIixQSik7dmFyIFRKPVtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0sTDA9ejEoIngiLFRKKTtmdW5jdGlvbiBpMih7b3BlbjokfSl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIixzdHlsZTp7dHJhbnNmb3JtOiQ/InJvdGF0ZSgxODBkZWcpIjoicm90YXRlKDBkZWcpIn0sY2hpbGRyZW46WigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24geTUoe2RpcjokfSl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9aKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6WigicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBuMigpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpaKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIHAzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltaKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksWigicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiByMigpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gdTMoKXtyZXR1cm4gWihmMix7c2l6ZToxMixzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9ZnVuY3Rpb24gbDMoKXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQgMiA5IDEzIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik02LjAwODUyIDE0LjgwNTRDNS44OTE4MSAxNC45MzUgNS43NTgxNSAxNC45OTk4IDUuNjA3NTYgMTQuOTk5OEM1LjQ1Njk2IDE1LjAwMzMgNS4zMjMzIDE0Ljk2MTMgNS4yMDY1OSAxNC44NzM3QzUuMDkzNjQgMTQuNzg2MSA1LjAyNTg3IDE0LjY3MjMgNS4wMDMyOCAxNC41MzIyQzQuOTg0NDYgMTQuMzkyMSA1LjA0NjU4IDE0LjI0NSA1LjE4OTY1IDE0LjA5MDlMNi45NDU5OSAxMi4xNTIyTDcuMjQ1MyAxMC44NzU1TDguMTk5NzEgMTEuOTg5M0w4LjA1ODUzIDEyLjM5MzlDOC4wMjA4OCAxMi40OTU1IDcuOTg2OTkgMTIuNTcwOCA3Ljk1Njg3IDEyLjYxOThDNy45MzA1MiAxMi42Njg4IDcuODc0MDQgMTIuNzQwNiA3Ljc4NzQ1IDEyLjgzNTJMNi4wMDg1MiAxNC44MDU0Wk0xMC4zNDU3IDE0LjY0MjVMOS4xMDMyOSAxMi4zMDQ2QzkuMDc2OTQgMTIuMjYyNSA5LjA1NDM1IDEyLjIyMjMgOS4wMzU1MyAxMi4xODM3QzkuMDE2NyAxMi4xNDUyIDguOTc3MTcgMTIuMDkwOSA4LjkxNjkzIDEyLjAyMDlMNy43MTk2OCAxMC42MTgxQzcuNDkzNzkgMTAuMzU1NCA3LjMzNzU0IDEwLjEyOTUgNy4yNTA5NSA5Ljk0MDM0QzcuMTY0MzUgOS43NDc3IDcuMTM0MjQgOS40OTkwMSA3LjE2MDU5IDkuMTk0MjlMNy4yNjIyNCA3Ljk4MDY1QzcuMjY5NzcgNy45MDcxIDcuMjMyMTIgNy44NTQ1NiA3LjE0OTI5IDcuODIzMDRDNy4wNjY0NyA3Ljc5MTUxIDYuOTg1NTIgNy44MDkwMyA2LjkwNjQ2IDcuODc1NTdMNi40NzE2MSA4LjI0MzM0TDYuMzQxNzIgOS42NzIzOUM2LjMyMjg5IDkuODQ3NTIgNi4yNjQ1NCA5Ljk3ODg3IDYuMTY2NjUgMTAuMDY2NEM2LjA2ODc2IDEwLjE1NCA1LjkzODg3IDEwLjE5MjUgNS43NzY5OCAxMC4xODJDNS42MTEzMiAxMC4xNzUgNS40ODMzMSAxMC4xMTkgNS4zOTI5NSAxMC4wMTM5QzUuMzA2MzYgOS45MDg4MiA1LjI2ODcxIDkuNzczOTcgNS4yODAwMSA5LjYwOTM1TDUuMzg3MzEgOC4zMDYzOUM1LjQwMjM3IDguMTI3NzYgNS40MzgxMyA3Ljk3NTQgNS40OTQ2MSA3Ljg0OTMxQzUuNTU0ODUgNy43MjMyMSA1LjY2MDI2IDcuNTkxODcgNS44MTA4NiA3LjQ1NTI3TDYuNzE0NDUgNi42MjUxNkM3LjAwNDM1IDYuMzYyNDcgNy4yNjk3NyA2LjE2MTA3IDcuNTEwNzMgNi4wMjA5NkM3Ljc1MTY4IDUuODc3MzYgOC4wMjg0MSA1LjgwNTU2IDguMzQwOSA1LjgwNTU2QzguNzU4OCA1LjgwNTU2IDkuMDc4ODIgNS45MzM0IDkuMzAwOTUgNi4xODkwOUM5LjUyNjg1IDYuNDQ0NzggOS42MjQ3NCA2Ljc2MTc2IDkuNTk0NjIgNy4xNDAwNEw5LjQ3NjAyIDguNzMxOTVDOS40NTM0MyA5LjAxNTY2IDkuNDE5NTUgOS4yNjI1OSA5LjM3NDM3IDkuNDcyNzVDOS4zMjkxOSA5LjY4MjkgOS4yNTM4OSA5LjkyOTgzIDkuMTQ4NDcgMTAuMjEzNUw5LjA5MiAxMC4zNjA2TDkuODY1NjkgMTEuMzc5OUM5LjkyMjE3IDExLjQ1MzQgOS45ODA1MiAxMS41MzQgMTAuMDQwOCAxMS42MjE2QzEwLjEwMSAxMS43MDkxIDEwLjE1MzcgMTEuNzk2NyAxMC4xOTg5IDExLjg4NDNMMTEuNDA3NCAxNC4xNjQ0QzExLjUwNTMgMTQuMzUwMSAxMS41MjQxIDE0LjUxMTIgMTEuNDYzOSAxNC42NDc4QzExLjQwMzcgMTQuNzg0NCAxMS4zMDIgMTQuODgyNSAxMS4xNTg5IDE0Ljk0MkMxMS4wMTk2IDE1LjAwMTUgMTAuODcwOSAxNS4wMTAzIDEwLjcxMjggMTQuOTY4M0MxMC41NTg0IDE0LjkyNjIgMTAuNDM2MSAxNC44MTc3IDEwLjM0NTcgMTQuNjQyNVpNMTIuNDA3IDcuOTY0ODlDMTIuNTg0IDcuOTY0ODkgMTIuNzI3IDguMDEwNDIgMTIuODM2MiA4LjEwMTQ5QzEyLjk0NTQgOC4xODkwNSAxMyA4LjMwNjM5IDEzIDguNDUzNUMxMyA4LjYxMTExIDEyLjk0NTQgOC43MzM3IDEyLjgzNjIgOC44MjEyN0MxMi43MzA4IDguOTA4ODMgMTIuNTg3NyA4Ljk1MjYxIDEyLjQwNyA4Ljk1MjYxSDExLjEzMDdDMTAuOTUzOCA4Ljk1MjYxIDEwLjgxNDUgOC45MzY4NSAxMC43MTI4IDguOTA1MzNDMTAuNjExMiA4Ljg3MDMgMTAuNTEzMyA4LjgwNzI2IDEwLjQxOTEgOC43MTYxOUwxMC4wNTIxIDguMzc5OTRMMTAuMTQyNCA3LjA0MDIxTDExLjAzNDcgNy45NjQ4OUgxMi40MDdaTTkuMDAxNjQgNS4zMTE2OUM4Ljc3MTk4IDUuMzExNjkgOC41NjMwMyA1LjI2MDkxIDguMzc0NzggNS4xNTkzM0M4LjE4NjUzIDUuMDU0MjYgOC4wMzU5NCA0LjkxNDE1IDcuOTIyOTkgNC43MzkwM0M3LjgxMzgxIDQuNTYzOSA3Ljc1OTIxIDQuMzY5NSA3Ljc1OTIxIDQuMTU1ODVDNy43NTkyMSAzLjk0MjE5IDcuODEzODEgMy43NDc4IDcuOTIyOTkgMy41NzI2N0M4LjAzNTk0IDMuMzk3NTQgOC4xODY1MyAzLjI1OTE5IDguMzc0NzggMy4xNTc2MkM4LjU2MzAzIDMuMDUyNTQgOC43NzE5OCAzIDkuMDAxNjQgM0M5LjIzMTMgMyA5LjQ0MDI2IDMuMDUyNTQgOS42Mjg1IDMuMTU3NjJDOS44MTY3NSAzLjI1OTE5IDkuOTY1NDYgMy4zOTc1NCAxMC4wNzQ2IDMuNTcyNjdDMTAuMTg3NiAzLjc0NzggMTAuMjQ0MSAzLjk0MjE5IDEwLjI0NDEgNC4xNTU4NUMxMC4yNDQxIDQuMzY5NSAxMC4xODc2IDQuNTYzOSAxMC4wNzQ2IDQuNzM5MDNDOS45NjU0NiA0LjkxNDE1IDkuODE2NzUgNS4wNTQyNiA5LjYyODUgNS4xNTkzM0M5LjQ0MDI2IDUuMjYwOTEgOS4yMzEzIDUuMzExNjkgOS4wMDE2NCA1LjMxMTY5WiJ9KX0pfWZ1bmN0aW9uIGQzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMjYgMSAxMiAxNCIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNMzMuMjQzNyA0LjU4NDU5QzMzLjAwMDggNC41ODQ1OSAzMi43ODE3IDQuNTI3MjggMzIuNTg2NiA0LjQxMjY4QzMyLjM5MTUgNC4yOTQxMiAzMi4yMzQyIDQuMTM4MDEgMzIuMTE0NyAzLjk0NDM3QzMxLjk5OTIgMy43NDY3NyAzMS45NDE0IDMuNTI5NDEgMzEuOTQxNCAzLjI5MjI5QzMxLjk0MTQgMy4wNTEyMiAzMS45OTkyIDIuODMzODcgMzIuMTE0NyAyLjY0MDIyQzMyLjIzNDIgMi40NDY1NyAzMi4zOTE1IDIuMjkyNDUgMzIuNTg2NiAyLjE3Nzg0QzMyLjc4MTcgMi4wNTkyOCAzMy4wMDA4IDIgMzMuMjQzNyAyQzMzLjQ4MjYgMiAzMy42OTk3IDIuMDU5MjggMzMuODk0OCAyLjE3Nzg0QzM0LjA5MzkgMi4yOTI0NSAzNC4yNTEyIDIuNDQ2NTcgMzQuMzY2NyAyLjY0MDIyQzM0LjQ4NjIgMi44MzM4NyAzNC41NDU5IDMuMDUxMjIgMzQuNTQ1OSAzLjI5MjI5QzM0LjU0NTkgMy41Mjk0MSAzNC40ODYyIDMuNzQ2NzcgMzQuMzY2NyAzLjk0NDM3QzM0LjI1MTIgNC4xMzgwMSAzNC4wOTM5IDQuMjk0MTIgMzMuODk0OCA0LjQxMjY4QzMzLjY5OTcgNC41MjcyOCAzMy40ODI2IDQuNTg0NTkgMzMuMjQzNyA0LjU4NDU5Wk0zMS4yMDA3IDkuNzQxOTFDMzEuMDczMyA5LjY3MDc3IDMwLjk0MTkgOS41OTU2OCAzMC44MDY1IDkuNTE2NjRDMzAuNjc1IDkuNDM3NiAzMC41NTk2IDkuMzQyNzYgMzAuNDYgOS4yMzIxQzMwLjM2MDQgOS4xMTc0OSAzMC4yOTI3IDguOTc3MiAzMC4yNTY5IDguODExMjJDMzAuMjI1IDguNjQxMjggMzAuMjQ0OSA4LjQyOTg1IDMwLjMxNjYgOC4xNzY5M0wzMC44MDY1IDYuNDgxNTNDMzAuODM4MyA2LjM2NjkyIDMwLjgxODQgNi4yNzk5OCAzMC43NDY3IDYuMjIwN0MzMC42NzkgNi4xNTc0NyAzMC41OTc0IDYuMTI5ODEgMzAuNTAxOCA2LjEzNzcxTDI5LjY1OTUgNi4xOTY5OUwyOS40MDI3IDcuOTIyMDJDMjkuMzc4OCA4LjEwNzc3IDI5LjMxNTEgOC4yNDYwOSAyOS4yMTE1IDguMzM2OThDMjkuMTA4IDguNDI3ODggMjguOTcyNiA4LjQ2NTQyIDI4LjgwNTMgOC40NDk2MUMyOC42NDIgOC40MzM4IDI4LjUxODYgOC4zNjY2MiAyOC40MzQ5IDguMjQ4MDZDMjguMzUxMyA4LjEyOTUgMjguMzIxNCA3Ljk3NzM1IDI4LjM0NTMgNy43OTE2MUwyOC42MjYxIDUuNjgxMjZDMjguNjUgNS41MTEzMiAyOC43MTU3IDUuMzc0OTggMjguODIzMiA1LjI3MjIzQzI4LjkzMDggNS4xNjk0OCAyOS4wNjgxIDUuMTEyMTcgMjkuMjM1NCA1LjEwMDMyTDMxLjMzMjEgNC45NTIxMkMzMS44ODE3IDQuOTEyNiAzMi4zMzU3IDQuOTY5OSAzMi42OTQxIDUuMTI0MDNDMzMuMDUyNSA1LjI3ODE2IDMzLjM2NzEgNS41Mzg5OSAzMy42Mzc5IDUuOTA2NTJMMzQuNjcxNCA3LjMyMzNMMzYuMTcwOCA2LjY2NTNDMzYuMzM4IDYuNTkwMjEgMzYuNDg5MyA2LjU3NDQgMzYuNjI0OCA2LjYxNzg3QzM2Ljc2MDIgNi42NTczOSAzNi44NjU3IDYuNzUyMjQgMzYuOTQxNCA2LjkwMjQyQzM3LjAxMyA3LjA1MjU5IDM3LjAxOSA3LjE5NDg2IDM2Ljk1OTMgNy4zMjkyM0MzNi45MDM1IDcuNDYzNiAzNi43OTIgNy41NjgzMiAzNi42MjQ4IDcuNjQzNDFMMzQuNzMxMSA4LjQ3OTI1QzM0LjYwMzcgOC41Mzg1MyAzNC40NzQzIDguNTUwMzkgMzQuMzQyOCA4LjUxNDgyQzM0LjIxNTQgOC40NzUzIDM0LjExMzggOC40MDAyMSAzNC4wMzgyIDguMjg5NTZMMzMuMzgxMSA3LjMzNTE2QzMzLjMxMzQgNy4yNDAzMSAzMy4yMjk4IDcuMTk4ODEgMzMuMTMwMiA3LjIxMDY3QzMzLjAzMDYgNy4yMjI1MyAzMi45NjQ5IDcuMjgzNzggMzIuOTMzMSA3LjM5NDQ0TDMyLjQ5MSA4LjkyOTc4TDM0LjczMTEgMTAuMzg4MUMzNC44NDI2IDEwLjQ1OTIgMzQuOTIyMyAxMC41NTYgMzQuOTcwMSAxMC42Nzg1QzM1LjAxNzkgMTAuODAxIDM1LjAyOTggMTAuOTI1NSAzNS4wMDU5IDExLjA1MkMzNC45ODYgMTEuMTc0NSAzNC45MjgyIDExLjI3NTMgMzQuODMyNyAxMS4zNTQzTDMyLjc3MTggMTMuMDk3MUMzMi42MDg1IDEzLjIzNTQgMzIuNDQ1MiAxMy4yOTg3IDMyLjI4MTkgMTMuMjg2OEMzMi4xMjI2IDEzLjI3NSAzMS45OTMyIDEzLjIxMzcgMzEuODkzNyAxMy4xMDMxQzMxLjc5ODEgMTIuOTk2NCAzMS43NTQzIDEyLjg2NTkgMzEuNzYyMiAxMi43MTE4QzMxLjc3MDIgMTIuNTUzNyAzMS44NTM4IDEyLjQwNzUgMzIuMDEzMSAxMi4yNzMxTDMzLjQ4ODYgMTEuMDE2NEwzMS4yMDA3IDkuNzQxOTFaTTI3LjIwNDQgMTQuODYzN0MyNy4wODQ5IDE0Ljc1NyAyNy4wMTcyIDE0LjYxODYgMjcuMDAxMyAxNC40NDg3QzI2Ljk4OTMgMTQuMjc4OCAyNy4wNjEgMTQuMTE2NyAyNy4yMTYzIDEzLjk2MjZMMjkuMjIzNSAxMS45NzY3TDI5LjkzNDMgOS40ODEwOEMzMC4wNDE4IDkuNjE1NDQgMzAuMTc1MyA5Ljc0NTg2IDMwLjMzNDUgOS44NzIzMkMzMC40OTc4IDkuOTk0ODMgMzAuNjkzIDEwLjExNzMgMzAuOTIgMTAuMjM5OUwzMS4xMTcxIDEwLjM0NjZMMzAuMzA0NyAxMi40MzMyQzMwLjI1MjkgMTIuNTU1NyAzMC4yMDkxIDEyLjY0MDcgMzAuMTczMyAxMi42ODgxQzMwLjE0MTQgMTIuNzM1NSAzMC4wODU2IDEyLjc5ODggMzAuMDA2IDEyLjg3NzhMMjguMDcwNiAxNC43ODA3QzI3LjkxOTIgMTQuOTI2OSAyNy43NjM5IDE1IDI3LjYwNDYgMTVDMjcuNDQ5MyAxNSAyNy4zMTU5IDE0Ljk1NDYgMjcuMjA0NCAxNC44NjM3WiJ9KX0pfWZ1bmN0aW9uIGMzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNDkgMyAxNiAxMiIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNNTcuMDAyOCAxMS45NDlDNTYuODQ4IDExLjk0OSA1Ni43MTcyIDExLjg5ODcgNTYuNjEwMyAxMS43OThDNTYuNTAzNSAxMS42OTM5IDU2LjQ1MDEgMTEuNTcwNyA1Ni40NTAxIDExLjQyODRWOS4wMjg2M0w1NC40MjE2IDcuMTA3NzZDNTQuMjIyNyA2LjkyMDM1IDU0LjA5NTUgNi42OTgyNSA1NC4wNDAzIDYuNDQxNDRDNTMuOTg1IDYuMTgxMTYgNTQuMDEwOCA1LjkyNzgyIDU0LjExNzYgNS42ODE0MkM1NC4yMjgyIDUuNDM4NDkgNTQuMzk3NyA1LjI0NDE0IDU0LjYyNjEgNS4wOTgzOUM1NC44NTgzIDQuOTQ5MTYgNTUuMTE2MiA0Ljg3NDU0IDU1LjM5OTkgNC44NzQ1NEg1OC4xMTM3QzU4LjQyMzIgNC44NzQ1NCA1OC42ODQ4IDQuOTc2OTIgNTguODk4NSA1LjE4MTY4QzU5LjExNTkgNS4zODI5NiA1OS4yMjQ2IDUuNjI5MzYgNTkuMjI0NiA1LjkyMDg3VjcuNzYzNjZINjAuODk5M0M2MS4wNTA0IDcuNzYzNjYgNjEuMTc5NCA3LjgxMzk5IDYxLjI4NjIgNy45MTQ2M0M2MS4zOTMxIDguMDE1MjcgNjEuNDQ2NSA4LjEzODQ3IDYxLjQ0NjUgOC4yODQyM0M2MS40NDY1IDguNDI2NTEgNjEuMzkzMSA4LjU0Nzk4IDYxLjI4NjIgOC42NDg2MkM2MS4xNzk0IDguNzQ5MjYgNjEuMDUwNCA4Ljc5OTU4IDYwLjg5OTMgOC43OTk1OEg1OC42NzE5QzU4LjUyMDkgOC43OTk1OCA1OC4zOTAxIDguNzQ5MjYgNTguMjc5NSA4LjY0ODYyQzU4LjE3MjcgOC41NDc5OCA1OC4xMTkyIDguNDI2NTEgNTguMTE5MiA4LjI4NDIzVjYuOTg4MDNDNTguMTE5MiA2LjkxODYyIDU4LjA5OSA2Ljg1NDQyIDU4LjA1ODQgNi43OTU0MkM1OC4wMTc5IDYuNzMyOTUgNTcuOTQ0MiA2LjcwMTcyIDU3LjgzNzMgNi43MDE3Mkg1Ni4wNjMyQzU1Ljk5MzIgNi43MDE3MiA1NS45NDUzIDYuNzI5NDggNTUuOTE5NSA2Ljc4NTAxQzU1Ljg5NzQgNi44MzcwNiA1NS45MDg0IDYuODg3MzkgNTUuOTUyNiA2LjkzNTk3TDU3LjQwMDcgOC40NTYwMUM1Ny41MDM5IDguNTYzNiA1Ny41NTU1IDguNjgxNTkgNTcuNTU1NSA4LjgwOTk5VjExLjQyODRDNTcuNTU1NSAxMS41NzA3IDU3LjUwMDIgMTEuNjkzOSA1Ny4zODk3IDExLjc5OEM1Ny4yODI4IDExLjg5ODcgNTcuMTUzOCAxMS45NDkgNTcuMDAyOCAxMS45NDlaTTUzLjAwMTIgMTRDNTIuNTg0OCAxNCA1Mi4xOTQyIDEzLjkyNzEgNTEuODI5NSAxMy43ODE0QzUxLjQ2ODQgMTMuNjM1NiA1MS4xNDk2IDEzLjQzMjYgNTAuODczMyAxMy4xNzIzQzUwLjYwMDYgMTIuOTEyIDUwLjM4NjkgMTIuNjExOCA1MC4yMzIxIDEyLjI3MTdDNTAuMDc3NCAxMS45MjgyIDUwIDExLjU2MDMgNTAgMTEuMTY4MUM1MCAxMC43NzYgNTAuMDc3NCAxMC40MDk5IDUwLjIzMjEgMTAuMDY5OEM1MC4zODY5IDkuNzI2MTggNTAuNjAwNiA5LjQyNDI2IDUwLjg3MzMgOS4xNjM5OEM1MS4xNDk2IDguOTAzNyA1MS40Njg0IDguNzAwNjggNTEuODI5NSA4LjU1NDkyQzUyLjE5NDIgOC40MDkxNiA1Mi41ODQ4IDguMzM2MjggNTMuMDAxMiA4LjMzNjI4QzUzLjQyMTIgOC4zMzYyOCA1My44MTE4IDguNDA5MTYgNTQuMTcyOSA4LjU1NDkyQzU0LjUzNzcgOC43MDA2OCA1NC44NTY0IDguOTAzNyA1NS4xMjkxIDkuMTYzOThDNTUuNDA1NCA5LjQyNDI2IDU1LjYyMSA5LjcyNjE4IDU1Ljc3NTggMTAuMDY5OEM1NS45MzA1IDEwLjQwOTkgNTYuMDA3OSAxMC43NzYgNTYuMDA3OSAxMS4xNjgxQzU2LjAwNzkgMTEuNTYwMyA1NS45MzA1IDExLjkyODIgNTUuNzc1OCAxMi4yNzE3QzU1LjYyMSAxMi42MTE4IDU1LjQwNTQgMTIuOTEyIDU1LjEyOTEgMTMuMTcyM0M1NC44NTY0IDEzLjQzMjYgNTQuNTM3NyAxMy42MzU2IDU0LjE3MjkgMTMuNzgxNEM1My44MTE4IDEzLjkyNzEgNTMuNDIxMiAxNCA1My4wMDEyIDE0Wk01My4wMDEyIDEzLjI2NkM1My40MTAyIDEzLjI2NiA1My43ODIzIDEzLjE3MDYgNTQuMTE3NiAxMi45Nzk3QzU0LjQ1NjYgMTIuNzkyMyA1NC43MjU2IDEyLjU0MDcgNTQuOTI0NiAxMi4yMjQ5QzU1LjEyNzMgMTEuOTA1NiA1NS4yMjg2IDExLjU1MzQgNTUuMjI4NiAxMS4xNjgxQzU1LjIyODYgMTAuNzgyOSA1NS4xMjczIDEwLjQzMjQgNTQuOTI0NiAxMC4xMTY2QzU0LjcyNTYgOS43OTczMyA1NC40NTY2IDkuNTQzOTkgNTQuMTE3NiA5LjM1NjU5QzUzLjc4MjMgOS4xNjU3MSA1My40MTAyIDkuMDcwMjggNTMuMDAxMiA5LjA3MDI4QzUyLjU5NTkgOS4wNzAyOCA1Mi4yMjM3IDkuMTY1NzEgNTEuODg0NyA5LjM1NjU5QzUxLjU0OTQgOS41NDM5OSA1MS4yODA0IDkuNzk3MzMgNTEuMDc3OCAxMC4xMTY2QzUwLjg3ODggMTAuNDMyNCA1MC43NzkzIDEwLjc4MjkgNTAuNzc5MyAxMS4xNjgxQzUwLjc3OTMgMTEuNTUzNCA1MC44Nzg4IDExLjkwNTYgNTEuMDc3OCAxMi4yMjQ5QzUxLjI4MDQgMTIuNTQwNyA1MS41NDk0IDEyLjc5MjMgNTEuODg0NyAxMi45Nzk3QzUyLjIyMzcgMTMuMTcwNiA1Mi41OTU5IDEzLjI2NiA1My4wMDEyIDEzLjI2NlpNNjIuNDgwMSA5LjYxMTY2QzYyLjM2MjIgOS41MTQ0OSA2Mi4zMDE0IDkuNDE1NTggNjIuMjk3NyA5LjMxNDk0QzYyLjI5NzcgOS4yMTA4MyA2Mi4zMzA4IDkuMTI0MDcgNjIuMzk3MiA5LjA1NDY2QzYyLjQ2NzIgOC45ODUyNSA2Mi41NTM4IDguOTQ1MzQgNjIuNjU2OSA4LjkzNDkzQzYyLjc2MzggOC45MjEwNSA2Mi44Njg4IDguOTU1NzUgNjIuOTcyIDkuMDM5MDRDNjMuMjg4OSA5LjMwMjc5IDYzLjUzOTQgOS42MTY4NyA2My43MjM2IDkuOTgxMjZDNjMuOTA3OSAxMC4zNDU3IDY0IDEwLjc0MTMgNjQgMTEuMTY4MUM2NCAxMS41NjAzIDYzLjkyMjYgMTEuOTI4MiA2My43Njc5IDEyLjI3MTdDNjMuNjEzMSAxMi42MTE4IDYzLjM5NzYgMTIuOTEyIDYzLjEyMTIgMTMuMTcyM0M2Mi44NDg1IDEzLjQzMjYgNjIuNTI5OCAxMy42MzU2IDYyLjE2NSAxMy43ODE0QzYxLjgwMzkgMTMuOTI3MSA2MS40MTUyIDE0IDYwLjk5ODggMTRDNjAuNTgyNCAxNCA2MC4xOTE5IDEzLjkyNzEgNTkuODI3MSAxMy43ODE0QzU5LjQ2MjMgMTMuNjM1NiA1OS4xNDE3IDEzLjQzMjYgNTguODY1NCAxMy4xNzIzQzU4LjU5MjcgMTIuOTEyIDU4LjM3OSAxMi42MTE4IDU4LjIyNDIgMTIuMjcxN0M1OC4wNjk1IDExLjkyODIgNTcuOTkyMSAxMS41NjAzIDU3Ljk5MjEgMTEuMTY4MUM1Ny45OTIxIDEwLjk2MzQgNTguMDE0MiAxMC43NjU2IDU4LjA1ODQgMTAuNTc0N0M1OC4xMDYzIDEwLjM4MDQgNTguMTcyNyAxMC4xOTMgNTguMjU3NCAxMC4wMTI1QzU4LjMwOSA5LjkwMTQ0IDU4LjM4MDggOS44MzAzIDU4LjQ3MyA5Ljc5OTA2QzU4LjU2ODggOS43NjQzNiA1OC42NjI3IDkuNzY0MzYgNTguNzU0OCA5Ljc5OTA2QzU4Ljg1MDYgOS44MzAzIDU4LjkyMjUgOS44OTI3NiA1OC45NzA0IDkuOTg2NDdDNTkuMDE4MyAxMC4wODAyIDU5LjAxMDkgMTAuMTk4MiA1OC45NDgzIDEwLjM0MDRDNTguODMwNCAxMC42MDA3IDU4Ljc3MTQgMTAuODc2NiA1OC43NzE0IDExLjE2ODFDNTguNzcxNCAxMS41NTM0IDU4Ljg3MDkgMTEuOTA1NiA1OS4wNjk5IDEyLjIyNDlDNTkuMjcyNSAxMi41NDA3IDU5LjU0MTUgMTIuNzkyMyA1OS44NzY4IDEyLjk3OTdDNjAuMjE1OCAxMy4xNzA2IDYwLjU4OTggMTMuMjY2IDYwLjk5ODggMTMuMjY2QzYxLjQwNzggMTMuMjY2IDYxLjc4IDEzLjE3MDYgNjIuMTE1MyAxMi45Nzk3QzYyLjQ1MDYgMTIuNzkyMyA2Mi43MTc3IDEyLjU0MDcgNjIuOTE2NyAxMi4yMjQ5QzYzLjExOTQgMTEuOTA1NiA2My4yMjA3IDExLjU1MzQgNjMuMjIwNyAxMS4xNjgxQzYzLjIyMDcgMTAuODU5MyA2My4xNTI1IDEwLjU3MTIgNjMuMDE2MiAxMC4zMDRDNjIuODgzNSAxMC4wMzMzIDYyLjcwNDggOS44MDI1MyA2Mi40ODAxIDkuNjExNjZaTTYwLjk5ODggNi4yNzQ4NkM2MC43NzQgNi4yNzQ4NiA2MC41Njk1IDYuMjI0NTQgNjAuMzg1MyA2LjEyMzg5QzYwLjIwMTEgNi4wMTk3OCA2MC4wNTM3IDUuODgyNyA1OS45NDMyIDUuNzEyNjVDNTkuODM2MyA1LjUzOTEzIDU5Ljc4MjkgNS4zNDY1MiA1OS43ODI5IDUuMTM0ODNDNTkuNzgyOSA0LjkyNjYgNTkuODM2MyA0LjczNzQ2IDU5Ljk0MzIgNC41Njc0MUM2MC4wNTM3IDQuMzkzODkgNjAuMjAxMSA0LjI1NjgxIDYwLjM4NTMgNC4xNTYxN0M2MC41Njk1IDQuMDUyMDYgNjAuNzc0IDQgNjAuOTk4OCA0QzYxLjIxOTkgNCA2MS40MjA3IDQuMDUyMDYgNjEuNjAxMyA0LjE1NjE3QzYxLjc4MTggNC4yNTY4MSA2MS45MjU1IDQuMzkzODkgNjIuMDMyNCA0LjU2NzQxQzYyLjE0MjkgNC43Mzc0NiA2Mi4xOTgyIDQuOTI2NiA2Mi4xOTgyIDUuMTM0ODNDNjIuMTk4MiA1LjM0NjUyIDYyLjE0MjkgNS41MzkxMyA2Mi4wMzI0IDUuNzEyNjVDNjEuOTI1NSA1Ljg4MjcgNjEuNzgxOCA2LjAxOTc4IDYxLjYwMTMgNi4xMjM4OUM2MS40MjA3IDYuMjI0NTQgNjEuMjE5OSA2LjI3NDg2IDYwLjk5ODggNi4yNzQ4NloifSl9KX1mdW5jdGlvbiBvMygpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTYiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjcwIDUgMTggOSIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNODUuNTcyIDEyLjEwMzhDODYuMDYgMTIuMTAzOCA4Ni40MjA3IDExLjk4OTIgODYuNjU0MiAxMS43NjAxQzg2Ljg4NDcgMTEuNTI4MSA4NyAxMS4xNjQxIDg3IDEwLjY2ODFWMTAuMTExMkM4NyA5Ljc2OTAxIDg2LjkyMDcgOS40NjMwMiA4Ni43NjIgOS4xOTMyOUM4Ni42MDMzIDguOTIwNjUgODYuMzc1OCA4LjY5NzMzIDg2LjA3OTQgOC41MjMzMUM4NS43ODAxIDguMzQ5MjkgODUuNDIyMyA4LjIzNzYyIDg1LjAwNjIgOC4xODgzMkw4My4wMTY4IDcuOTUzMzlMODEuMTk4MSA2Ljg0ODM1QzgwLjkyMjcgNi42ODAxMyA4MC42NjA4IDYuNTQyMzcgODAuNDEyMyA2LjQzNTA1QzgwLjE2MDggNi4zMjQ4NCA3OS44OTc0IDYuMjM3ODMgNzkuNjIxOSA2LjE3NDAyQzc5LjM0NjUgNi4xMTAyMSA3OS4wMzgyIDYuMDY1MjYgNzguNjk2OSA2LjAzOTE1Qzc4LjM1MjYgNi4wMTMwNSA3Ny45NTE0IDYgNzcuNDkzNCA2SDc2LjgxMDhDNzYuMzg4NyA2IDc1Ljk5NSA2LjA0OTMxIDc1LjYyOTggNi4xNDc5MkM3NS4yNjE2IDYuMjQzNjMgNzQuOTE4OCA2LjM3MTI1IDc0LjYwMTUgNi41MzA3NkM3NC4yODExIDYuNjkwMjggNzMuOTg2MiA2Ljg2NTc2IDczLjcxNjggNy4wNTcxOEM3My40NDQ0IDcuMjQ4NiA3My4xOTU5IDcuNDM3MTIgNzIuOTcxNCA3LjYyMjc1TDcyLjI1NzQgNy44NTMzM0M3MS44MzIzIDcuOTg2NzQgNzEuNTE2NCA4LjE4Mzk3IDcxLjMwOTkgOC40NDVDNzEuMTAzMyA4LjcwMzEzIDcxIDkuMDMzNzcgNzEgOS40MzY5MlYxMC42NDJDNzEgMTEuMTQ2NyA3MS4xMTUzIDExLjUxNjUgNzEuMzQ1OCAxMS43NTE0QzcxLjU3NjMgMTEuOTg2MyA3MS45MzcgMTIuMTAzOCA3Mi40MjggMTIuMTAzOEg3Mi43MTU0QzcyLjcwMDQgMTIuMDM3MSA3Mi42ODg1IDExLjk3MDQgNzIuNjc5NSAxMS45MDM3QzcyLjY3MDUgMTEuODM0MSA3Mi42NjYgMTEuNzY0NSA3Mi42NjYgMTEuNjk0OEM3Mi42NjYgMTEuMzU1NSA3Mi43NDk4IDExLjA0OTUgNzIuOTE3NSAxMC43NzY5QzczLjA4NTEgMTAuNTA0MiA3My4zMTEyIDEwLjI4ODIgNzMuNTk1NiAxMC4xMjg3QzczLjg3NyA5Ljk2NjIzIDc0LjE5MjggOS44ODUwMiA3NC41NDMxIDkuODg1MDJDNzQuODkwNCA5Ljg4NTAyIDc1LjIwNjIgOS45NjYyMyA3NS40OTA2IDEwLjEyODdDNzUuNzcyIDEwLjI4ODIgNzUuOTk2NSAxMC41MDQyIDc2LjE2NDIgMTAuNzc2OUM3Ni4zMzE4IDExLjA0OTUgNzYuNDE1NyAxMS4zNTU1IDc2LjQxNTcgMTEuNjk0OEM3Ni40MTU3IDExLjc2NDUgNzYuNDExMiAxMS44MzQxIDc2LjQwMjIgMTEuOTAzN0M3Ni4zOTMyIDExLjk3MDQgNzYuMzgyNyAxMi4wMzcxIDc2LjM3MDggMTIuMTAzOEg4MS42MzgyQzgxLjYyMDMgMTIuMDM3MSA4MS42MDgzIDExLjk3MDQgODEuNjAyMyAxMS45MDM3QzgxLjU5MzMgMTEuODM0MSA4MS41ODg4IDExLjc2NDUgODEuNTg4OCAxMS42OTQ4QzgxLjU4ODggMTEuMzU1NSA4MS42NzI3IDExLjA0OTUgODEuODQwMyAxMC43NzY5QzgyLjAwNSAxMC41MDQyIDgyLjIyOTUgMTAuMjg4MiA4Mi41MTM5IDEwLjEyODdDODIuNzk1MyA5Ljk2NjIzIDgzLjExMTEgOS44ODUwMiA4My40NjE0IDkuODg1MDJDODMuODExNyA5Ljg4NTAyIDg0LjEyOSA5Ljk2NjIzIDg0LjQxMzQgMTAuMTI4N0M4NC42OTQ4IDEwLjI4ODIgODQuOTE5NCAxMC41MDQyIDg1LjA4NyAxMC43NzY5Qzg1LjI1MTcgMTEuMDQ5NSA4NS4zMzQgMTEuMzU1NSA4NS4zMzQgMTEuNjk0OEM4NS4zMzQgMTEuNzY0NSA4NS4zMzEgMTEuODM0MSA4NS4zMjUgMTEuOTAzN0M4NS4zMTYgMTEuOTcwNCA4NS4zMDQxIDEyLjAzNzEgODUuMjg5MSAxMi4xMDM4SDg1LjU3MlpNODMuNDYxNCAxM0M4My43MTI5IDEzIDgzLjk0MDQgMTIuOTQyIDg0LjE0NCAxMi44MjZDODQuMzQ3NiAxMi43MSA4NC41MDkyIDEyLjU1MzMgODQuNjI5IDEyLjM1NjFDODQuNzQ4NyAxMi4xNTg5IDg0LjgwODYgMTEuOTM4NSA4NC44MDg2IDExLjY5NDhDODQuODA4NiAxMS40NTEyIDg0Ljc0ODcgMTEuMjMwOCA4NC42MjkgMTEuMDMzNkM4NC41MDkyIDEwLjgzNjMgODQuMzQ3NiAxMC42Nzk3IDg0LjE0NCAxMC41NjM3QzgzLjk0MDQgMTAuNDQ3NyA4My43MTI5IDEwLjM4OTcgODMuNDYxNCAxMC4zODk3QzgzLjIwNjkgMTAuMzg5NyA4Mi45Nzc5IDEwLjQ0NzcgODIuNzc0MyAxMC41NjM3QzgyLjU3MDggMTAuNjc5NyA4Mi40MDkxIDEwLjgzNjMgODIuMjg5NCAxMS4wMzM2QzgyLjE2OTYgMTEuMjMwOCA4Mi4xMDk3IDExLjQ1MTIgODIuMTA5NyAxMS42OTQ4QzgyLjEwOTcgMTEuOTM4NSA4Mi4xNjk2IDEyLjE1ODkgODIuMjg5NCAxMi4zNTYxQzgyLjQwOTEgMTIuNTUzMyA4Mi41NzA4IDEyLjcxIDgyLjc3NDMgMTIuODI2QzgyLjk3NzkgMTIuOTQyIDgzLjIwNjkgMTMgODMuNDYxNCAxM1pNNzQuNTQzMSAxM0M3NC43OTQ2IDEzIDc1LjAyMjEgMTIuOTQyIDc1LjIyNTcgMTIuODI2Qzc1LjQyOTIgMTIuNzEgNzUuNTkwOSAxMi41NTMzIDc1LjcxMDYgMTIuMzU2MUM3NS44MzA0IDEyLjE1ODkgNzUuODkwMyAxMS45Mzg1IDc1Ljg5MDMgMTEuNjk0OEM3NS44OTAzIDExLjQ1MTIgNzUuODMwNCAxMS4yMzA4IDc1LjcxMDYgMTEuMDMzNkM3NS41OTA5IDEwLjgzNjMgNzUuNDI5MiAxMC42Nzk3IDc1LjIyNTcgMTAuNTYzN0M3NS4wMjIxIDEwLjQ0NzcgNzQuNzk0NiAxMC4zODk3IDc0LjU0MzEgMTAuMzg5N0M3NC4yODg2IDEwLjM4OTcgNzQuMDU5NiAxMC40NDc3IDczLjg1NiAxMC41NjM3QzczLjY1MjQgMTAuNjc5NyA3My40OTA4IDEwLjgzNjMgNzMuMzcxIDExLjAzMzZDNzMuMjUxMyAxMS4yMzA4IDczLjE5MTQgMTEuNDUxMiA3My4xOTE0IDExLjY5NDhDNzMuMTkxNCAxMS45Mzg1IDczLjI1MTMgMTIuMTU4OSA3My4zNzEgMTIuMzU2MUM3My40OTA4IDEyLjU1MzMgNzMuNjUyNCAxMi43MSA3My44NTYgMTIuODI2Qzc0LjA1OTYgMTIuOTQyIDc0LjI4ODYgMTMgNzQuNTQzMSAxM1oifSl9KX1mdW5jdGlvbiBhMCh7c2l6ZTokPTE4LHN0cm9rZVdpZHRoOko9Mn0pe3JldHVybiBaKGQyLHtzaXplOiQsc3Ryb2tlV2lkdGg6Sn0pfXZhciB0OT0iQWNjZXNzaWJpbGl0eSB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4iO2Z1bmN0aW9uIFM1KCQpe3JldHVybiAkPy5lcnJvcnM/LmluY2x1ZGVzKHQ5KT8/ITF9ZnVuY3Rpb24geDUoJCxKKXtpZigkPT09SilyZXR1cm4hMDtpZigkLmlkIT09Si5pZHx8JC5wYXRoIT09Si5wYXRofHwkLmxhYmVsIT09Si5sYWJlbHx8JC52YWx1ZSE9PUoudmFsdWV8fCQucm9sZSE9PUoucm9sZXx8JC50eXBlIT09Si50eXBlfHwkLmVuYWJsZWQhPT1KLmVuYWJsZWQpcmV0dXJuITE7bGV0IFE9JC5mcmFtZSxYPUouZnJhbWU7cmV0dXJuIFE9PT1YfHxRLng9PT1YLngmJlEueT09PVgueSYmUS53aWR0aD09PVgud2lkdGgmJlEuaGVpZ2h0PT09WC5oZWlnaHR9ZnVuY3Rpb24gajUoJCxKKXtsZXQgUT0kLmxhYmVsfHwkLnJvbGV8fGBlbGVtZW50ICR7SisxfWAsWD0kLnJvbGV8fCQudHlwZTtyZXR1cm57aWQ6JC5pZCxwYXRoOiQucGF0aCxsYWJlbDpRLHZhbHVlOiQudmFsdWUscm9sZTpYLHR5cGU6JC50eXBlLGVuYWJsZWQ6JC5lbmFibGVkLGZyYW1lOiQuZnJhbWV9fWZ1bmN0aW9uIGU5KCQsSil7bGV0IFE9TWF0aC5tYXgoMCwkLngpLFg9TWF0aC5tYXgoMCwkLnkpLEs9TWF0aC5taW4oSi53aWR0aCwkLngrJC53aWR0aCksWT1NYXRoLm1pbihKLmhlaWdodCwkLnkrJC5oZWlnaHQpLHE9TWF0aC5tYXgoMCxLLVEpLEc9TWF0aC5tYXgoMCxZLVgpO3JldHVybiBxPjAmJkc+MD97eDpRLHk6WCx3aWR0aDpxLGhlaWdodDpHfTpudWxsfWZ1bmN0aW9uIHMwKCQpe3JldHVybiAkLmlkfWZ1bmN0aW9uIGkzKCQpe3JldHVybmAkeyQueH0sJHskLnl9ICR7JC53aWR0aH14JHskLmhlaWdodH1gfWZ1bmN0aW9uICQ2KCQpe3JldHVybltgQVggbGFiZWw6ICR7JC5sYWJlbHx8IlVubGFiZWxlZCJ9YCwkLnJvbGU/YHJvbGU6ICR7JC5yb2xlfWA6IiIsJC50eXBlP2B0eXBlOiAkeyQudHlwZX1gOiIiLCQudmFsdWU/YHZhbHVlOiAkeyQudmFsdWV9YDoiIiwkLmlkP2BpZDogJHskLmlkfWA6IiIsYHBhdGg6ICR7JC5wYXRofWAsYGZyYW1lOiAke2kzKCQuZnJhbWUpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCI7ICIpfWZ1bmN0aW9uIGEyKCQpe3JldHVybiAkJiZ0eXBlb2YgJC5kZXZpY2U9PT0ic3RyaW5nIiYmdHlwZW9mICQudXJsPT09InN0cmluZyI/JDpudWxsfWZ1bmN0aW9uIEo2KCQpe2xldCBKPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi9zdHJlYW0ubWpwZWciKSxKLnNlYXJjaD0iIixKLmhhc2g9IiIsSi50b1N0cmluZygpfWZ1bmN0aW9uIHY1KCQpe2xldCBKPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi93ZWJydGMvb2ZmZXIiKSxKLnNlYXJjaD0iIixKLmhhc2g9IiIsSi50b1N0cmluZygpfWZ1bmN0aW9uIFE2KCQpe2xldCBKPW5ldyBVUkwodjUoJCkpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9vZmZlciQvLCIvY2xvc2UiKSxKLnRvU3RyaW5nKCl9ZnVuY3Rpb24gWjYoJCl7bGV0IEo9bmV3IFVSTCh2NSgkKSk7cmV0dXJuIEoucGF0aG5hbWU9Si5wYXRobmFtZS5yZXBsYWNlKC9cL29mZmVyJC8sIi9zdGF0cyIpLEoudG9TdHJpbmcoKX1mdW5jdGlvbiBYNigkLEope2xldCBRPW5ldyBVUkwoJCk7cmV0dXJuIFEuc2VhcmNoUGFyYW1zLnNldCgic2Vzc2lvbklkIixKKSxRLnRvU3RyaW5nKCl9ZnVuY3Rpb24gYjEoJCl7bGV0IFE9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiBRPT09Ii8iP2AvJHskfWA6YCR7UX0vJHskfWB9dmFyIElKPTUwMDAsRUo9MjAwMCxzMj1udWxsLG4zPW51bGwsd0o9MSxiSj0xLEgyPW5ldyBNYXAsTDI9bmV3IE1hcDtmdW5jdGlvbiB5Sigpe2xldCAkPW5ldyBVUkwoYjEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gU0ooJCl7Zm9yKGxldCBKIG9mIEgyLnZhbHVlcygpKUoucmVqZWN0KCQpO0gyLmNsZWFyKCl9ZnVuY3Rpb24gSzYoKXtyZXR1cm4gczI/Pz1uZXcgUHJvbWlzZSgoJCxKKT0+e2xldCBRPSExLFg7dHJ5e1g9bmV3IFdlYlNvY2tldCh5SigpKX1jYXRjaChxKXtzMj1udWxsLEoocSk7cmV0dXJufWxldCBLPXNldFRpbWVvdXQoKCk9PntpZighUSlRPSEwLHMyPW51bGwsSihFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFguY2xvc2UoKX0sSUopO1gub25vcGVuPSgpPT57WC5zZW5kKEpTT04uc3RyaW5naWZ5KHt0b2tlbjp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4/PyIifSkpfSxYLm9ubWVzc2FnZT0ocSk9PntsZXQgRzt0cnl7Rz1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoRy5yZWFkeSl7aWYoIVEpUT0hMCxjbGVhclRpbWVvdXQoSyksbjM9WCwkKFgpO3JldHVybn1pZih0eXBlb2YgRy5zdWI9PT0ibnVtYmVyIil7bGV0IE49TDIuZ2V0KEcuc3ViKTtpZighTilyZXR1cm47aWYoRy5lbmQpTDIuZGVsZXRlKEcuc3ViKSxOLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgRy5kYXRhPT09InN0cmluZyIpTi5vbkRhdGEoRy5kYXRhKTtyZXR1cm59aWYodHlwZW9mIEcuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IEI9SDIuZ2V0KEcuaWQpO2lmKCFCKXJldHVybjtIMi5kZWxldGUoRy5pZCksQi5yZXNvbHZlKEcpfTtsZXQgWT0oKT0+e3MyPW51bGwsbjM9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO1NKKHEpO2xldCBHPVsuLi5MMi52YWx1ZXMoKV07TDIuY2xlYXIoKTtmb3IobGV0IEIgb2YgRylCLm9uRW5kKCk7aWYoIVEpUT0hMCxjbGVhclRpbWVvdXQoSyksSihxKX07WC5vbmVycm9yPVksWC5vbmNsb3NlPVl9KSxzMn1hc3luYyBmdW5jdGlvbiBZNigkLEope2xldCBRPWF3YWl0IEs2KCk7aWYoUS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChYLEspPT57bGV0IFk9d0orKyxxPSgpPT57SDIuZGVsZXRlKFkpLEsoSj8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoSil7aWYoSi5hYm9ydGVkKXtxKCk7cmV0dXJufUouYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX1IMi5zZXQoWSx7cmVzb2x2ZTooRyk9PntKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWChHKX0scmVqZWN0OihHKT0+e0o/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxLKEcpfX0pLFEuc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24gSTEoJCxKKXtsZXQgUT1hd2FpdCBZNih7Y29tbWFuZDokfSxKPy5zaWduYWwpO3JldHVybntzdGRvdXQ6US5zdGRvdXQ/PyIiLHN0ZGVycjpRLnN0ZGVycj8/IiIsZXhpdENvZGU6US5leGl0Q29kZT8/MX19YXN5bmMgZnVuY3Rpb24gcjMoJCxKKXtsZXQgUT1hd2FpdCBZNih7dWk6JH0sSj8uc2lnbmFsKTtpZihRLmVycm9yKXRocm93IEVycm9yKFEuZXJyb3IpO3JldHVybiBRLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiBBMCgkKXtsZXQgSj17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sUT0hMSxYPW51bGwsSz1udWxsLFk9IiIscT0oTik9PntZKz1OLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCB6O3doaWxlKCh6PVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IFY9WS5zbGljZSgwLHopO1k9WS5zbGljZSh6KzIpO2xldCBIPVYuc3BsaXQoYApgKS5maWx0ZXIoKEMpPT5DLnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoQyk9PkMuc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKEgpSi5vbm1lc3NhZ2U/Lih7ZGF0YTpIfSl9fSxHPSgpPT57aWYoUXx8SylyZXR1cm47Si5vbmVycm9yPy4oKSxLPXNldFRpbWVvdXQoKCk9PntLPW51bGwsQigpfSxFSil9LEI9YXN5bmMoKT0+e2lmKFEpcmV0dXJuO3RyeXtsZXQgTj1hd2FpdCBLNigpO2lmKFEpcmV0dXJuO1k9IiIsWD1iSisrLEwyLnNldChYLHtvbkRhdGE6cSxvbkVuZDpHfSksTi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WCxwYXRoOiR9KSl9Y2F0Y2h7RygpfX07cmV0dXJuIEIoKSxKLmNsb3NlPSgpPT57aWYoUT0hMCxLKWNsZWFyVGltZW91dChLKTtpZihYIT09bnVsbCl7TDIuZGVsZXRlKFgpO3RyeXtuMz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6WH0pKX1jYXRjaHt9WD1udWxsfX0sSn1mdW5jdGlvbiBPMSgkKXtyZXR1cm5gJyR7JC5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9ZnVuY3Rpb24gcTYoJCl7bGV0W0osUV09ayhudWxsKSxbWCxLXT1rKCJBWCBvZmYiKTtyZXR1cm4geSgoKT0+e2lmKCEkKXtRKG51bGwpLEsoIkFYIG9mZiIpO3JldHVybn1RKG51bGwpLEsoIkFYIHdhaXRpbmciKTtsZXQgWT1BMCgkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBHPUpTT04ucGFyc2UocS5kYXRhKTtRKEcpLEsoUzUoRyk/IkFYIHVuYXZhaWxhYmxlIjpgJHtHLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtLKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57SygiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90Okosc3RhdHVzOlh9fXZhciBhMz1PMCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxzMz1PMChudWxsKTtmdW5jdGlvbiBVMigpe3JldHVybiBGMChhMyl9ZnVuY3Rpb24gUjUoKXtsZXQgJD1GMChzMyk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIEc2PWkwKGZ1bmN0aW9uKHtlbGVtZW50OkosaW5kZXg6USxzY3JlZW46WCxoaWdobGlnaHRlZDpLLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpHfSl7bGV0IEI9czAoSiksTj1qNShKLFEpLHo9ZTkoSi5mcmFtZSxYKTtpZigheilyZXR1cm4gbnVsbDtsZXQgVj0kNihOKTtyZXR1cm4gWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOkIsImRhdGEtYXgtaWQiOk4uaWQsImRhdGEtYXgtcGF0aCI6Ti5wYXRoLCJkYXRhLWF4LWxhYmVsIjpOLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpOLnZhbHVlLCJkYXRhLWF4LXJvbGUiOk4ucm9sZSwiZGF0YS1heC10eXBlIjpOLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKE4uZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOmkzKE4uZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOkoubGFiZWx8fFYsdGl0bGU6VixvbkNsaWNrOigpPT5HKEIpLG9uTW91c2VFbnRlcjooKT0+cShCKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHt6LngvWC53aWR0aCoxMDB9JWAsdG9wOmAke3oueS9YLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7ei53aWR0aC9YLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7ei5oZWlnaHQvWC5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOks/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6Sz8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsSik9PiQuaW5kZXg9PT1KLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09Si5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PUouc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1KLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09Si5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1KLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09Si5zY3JlZW4uaGVpZ2h0JiZ4NSgkLmVsZW1lbnQsSi5lbGVtZW50KSk7ZnVuY3Rpb24gVjYoKXtsZXR7c25hcHNob3Q6JH09VTIoKSx7aGlnaGxpZ2h0ZWRLZXk6SixzZWxlY3RlZEtleTpRLHNldEhpZ2hsaWdodGVkS2V5Olgsc2V0U2VsZWN0ZWRLZXk6S309UjUoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChZLHEpPT57bGV0IEc9czAoWSk7cmV0dXJuIFooRzYse2VsZW1lbnQ6WSxpbmRleDpxLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpHPT09SixzZWxlY3RlZDpHPT09USxvbkhpZ2hsaWdodDpYLG9uU2VsZWN0Okt9LEcpfSl9KX1mdW5jdGlvbiBCNih7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpKfSl7bGV0e3NuYXBzaG90OlEsc3RhdHVzOlh9PXE2KCQpLFtLLFldPWsobnVsbCksW3EsR109ayhudWxsKTt5KCgpPT57aWYoISQpWShudWxsKSxHKG51bGwpfSxbJF0pO2xldCBCPWsxKCgpPT4oe3NuYXBzaG90OlEsc3RhdHVzOlh9KSxbUSxYXSksTj1rMSgoKT0+KHtoaWdobGlnaHRlZEtleTpLLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpHfSksW0sscV0pO3JldHVybiBaKGEzLHt2YWx1ZTpCLGNoaWxkcmVuOlooczMse3ZhbHVlOk4sY2hpbGRyZW46Sn0pfSl9ZnVuY3Rpb24gTjYoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOkosb25Ub2dnbGVPdmVybGF5OlF9KXtsZXR7c3RhdHVzOlh9PVUyKCksW0ssWV09ayghMSkscT0kJiZKO3JldHVybiBaKGMxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6WCxvbkNsaWNrOlEsb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6Sz8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOloobTAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gaDUoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIFooImEiLHtocmVmOiJodHRwczovL2V4cG8uZGV2L3NlcnZpY2VzL3NpbXVsYXRvcnMiLHRhcmdldDoiX2JsYW5rIixyZWw6Im5vcmVmZXJyZXIiLGNsYXNzTmFtZTpgaW5saW5lLWZsZXggaC1bMzBweF0gbWluLXctMCBpdGVtcy1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCBweC0xLjUgZm9udC1tb25vIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS82NSBuby11bmRlcmxpbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZS84NSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS13aGl0ZS82MCAkeyR9YC50cmltKCksImFyaWEtbGFiZWwiOiJPcGVuIEVBUyBTaW11bGF0b3IiLHRpdGxlOiJPcGVuIEVBUyBTaW11bGF0b3IiLGNoaWxkcmVuOiJFQVMgU2ltdWxhdG9yIn0pfWZ1bmN0aW9uIHo2KHtvcGVuOiQsb25DbGljazpKfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgbGVmdC0zIHotMzAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcC0xIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gJHskPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W1ooImJ1dHRvbiIse29uQ2xpY2s6SixjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46Wih3MCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxaKGg1LHt9KV19KX1mdW5jdGlvbiBMNigkLEope2xldCBRPW5ldyBNYXAoJC5tYXAoKEspPT5bSy5kZXZpY2UsS10pKSxYPVtdO2ZvcihsZXQgSyBvZiBKKXtsZXQgWT1RLmdldChLLmRldmljZSk7aWYoIVkpY29udGludWU7WC5wdXNoKHsuLi5ZLHN0YXRlOksuc3RhdGUsaGVscGVyOksuaGVscGVyfSksUS5kZWxldGUoSy5kZXZpY2UpfWZvcihsZXQgSyBvZiBRLnZhbHVlcygpKVgucHVzaCh7Li4uSyxzdGF0ZToiU2h1dGRvd24iLGhlbHBlcjpudWxsfSk7cmV0dXJuIFh9ZnVuY3Rpb24gSDYoJCxKLFEpe2lmKCQubGVuZ3RoPT09MClyZXR1cm4hMTtsZXQgWD1uZXcgU2V0KCQubWFwKChLKT0+Sy5kZXZpY2UpKTtyZXR1cm4gSi5zbGljZSgwLE1hdGgubWluKFEsSi5sZW5ndGgpKS5zb21lKChLKT0+IVguaGFzKEsuZGV2aWNlKSl9ZnVuY3Rpb24gVTYoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKXx8JDw9MClyZXR1cm4iMCBCIjtsZXQgSj0kLzEwNzM3NDE4MjQ7aWYoSj49MSlyZXR1cm5gJHtKLnRvRml4ZWQoSj49MTA/MDoxKX0gR0JgO3JldHVybmAkeygkLzEwNDg1NzYpLnRvRml4ZWQoMCl9IE1CYH1mdW5jdGlvbiBnNSgkKXtsZXQgSj0kLm1hdGNoKC9eKFthLXpBLVpdKyktKC4rKSQvKTtpZighSilyZXR1cm57b3M6JCx2ZXJzaW9uOiIifTtyZXR1cm57b3M6SlsxXSx2ZXJzaW9uOkpbMl0ucmVwbGFjZSgvLS9nLCIuIil9fWZ1bmN0aW9uIEM2KCQpe3JldHVybiBnNSgkKS52ZXJzaW9ufHwkfWZ1bmN0aW9uIGY1KCQpe2xldHtvczpKLHZlcnNpb246UX09ZzUoJCk7cmV0dXJuIFE/YCR7Sn0gJHtRfWA6Sn1mdW5jdGlvbiBwNSh7Y2hyb21lOiQsc2NyZWVuOkosaW50ZXJhY3RpdmU6UT0hMSxvbkJ1dHRvbjpYLG9uQ3Jvd25XaGVlbDpLfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCIsY2hpbGRyZW46WyQuYnV0dG9ucy5tYXAoKFkpPT5aKGpKLHtjaHJvbWU6JCxidXR0b246WSxpbnRlcmFjdGl2ZTpRLG9uQnV0dG9uOlgsb25XaGVlbDpRJiZZLm5hbWU9PT0iZGlnaXRhbC1jcm93biI/Szp2b2lkIDB9LGBidXR0b24tJHtZLm5hbWV9YCkpLCQuY29tcG9zaXRlSW1hZ2U/WihGNix7Y2hyb21lOiQsaW1hZ2U6JC5jb21wb3NpdGVJbWFnZSxyZWN0OiQuYm9keSx6SW5kZXg6MX0pOiQuc2xpY2UmJiQuY29ybmVyP1oodkose2Nocm9tZTokfSk6bnVsbCxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIG92ZXJmbG93LWhpZGRlbiBiZy1ibGFjayIsc3R5bGU6ey4uLnQzKCQsJC5zY3JlZW4sMiksYm9yZGVyUmFkaXVzOnhKKCQpfSxjaGlsZHJlbjpKfSldfSl9ZnVuY3Rpb24geEooJCl7cmV0dXJuYCR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4ud2lkdGgqMTAwfSUgLyAkeyQuc2NyZWVuUmFkaXVzLyQuc2NyZWVuLmhlaWdodCoxMDB9JWB9ZnVuY3Rpb24gakooe2Nocm9tZTokLGJ1dHRvbjpKLGludGVyYWN0aXZlOlEsb25CdXR0b246WCxvbldoZWVsOkt9KXtsZXRbWSxxXT1rKCExKSxbRyxCXT1rKCExKSxOPVQobnVsbCksej1UKG51bGwpLFY9VChLKTtWLmN1cnJlbnQ9Syx5KCgpPT57bGV0IHg9ei5jdXJyZW50O2lmKCF4fHwhSylyZXR1cm47bGV0IEQ9KG4pPT57bi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcFByb3BhZ2F0aW9uKCksVi5jdXJyZW50Py4obi5kZWx0YVksbi5kZWx0YU1vZGUpfTtyZXR1cm4geC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsRCx7cGFzc2l2ZTohMX0pLCgpPT54LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixEKX0sWyEhS10pO2xldCBIPVEmJkoudXNhZ2VQYWdlIT1udWxsJiZKLnVzYWdlIT1udWxsLEM9dygoKT0+e2lmKE4uY3VycmVudD09PW51bGwpcmV0dXJuO04uY3VycmVudD1udWxsLEIoITEpLFg/Lih7cGhhc2U6InVwIixidXR0b246Sn0pfSxbSixYXSksQT13KCh4KT0+e2lmKHguYnV0dG9uIT09MCYmeC5wb2ludGVyVHlwZT09PSJtb3VzZSIpcmV0dXJuO3gucHJldmVudERlZmF1bHQoKSx4LnN0b3BQcm9wYWdhdGlvbigpLE4uY3VycmVudD14LnBvaW50ZXJJZDt0cnl7eC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKHgucG9pbnRlcklkKX1jYXRjaHt9QighMCksWD8uKHtwaGFzZToiZG93biIsYnV0dG9uOkp9KX0sW0osWF0pLEw9Si5vblRvcD81OjAsVT1IJiYoWXx8RyksRj0oVT9KLmhvdmVyLng6MCkqMTAwLFc9KFU/Si5ob3Zlci55OjApKjEwMCxFPUcmJkouaW1hZ2VEb3duP0ouaW1hZ2VEb3duOkouaW1hZ2UsUD1IP3tvblBvaW50ZXJEb3duOkEsb25Qb2ludGVyVXA6QyxvblBvaW50ZXJDYW5jZWw6QyxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PntxKCExKSxDKCl9fTp7fTtyZXR1cm4gWigiZGl2Iix7cmVmOnoscm9sZTpIPyJidXR0b24iOnZvaWQgMCwiYXJpYS1sYWJlbCI6SD9PNihKLm5hbWUpOnZvaWQgMCwiYXJpYS1oaWRkZW4iOkg/dm9pZCAwOiEwLHRpdGxlOkg/TzYoSi5uYW1lKTp2b2lkIDAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLnQzKCQsSi5mcmFtZSxMKSx0cmFuc2Zvcm06Rnx8Vz9gdHJhbnNsYXRlKCR7Rn0lLCAke1d9JSlgOnZvaWQgMCx0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsY3Vyc29yOkg/InBvaW50ZXIiOnZvaWQgMCxwb2ludGVyRXZlbnRzOkg/ImF1dG8iOiJub25lIix0b3VjaEFjdGlvbjoibm9uZSJ9LC4uLlAsY2hpbGRyZW46RSYmWigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpBNigkLmlkZW50aWZpZXIsRSksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBzZWxlY3Qtbm9uZSIsc3R5bGU6e29iamVjdEZpdDoiZmlsbCIsZmlsdGVyOkcmJiFKLmltYWdlRG93bj8iYnJpZ2h0bmVzcygxLjQpIjp2b2lkIDAsdHJhbnNpdGlvbjoiZmlsdGVyIDAuMTJzIGVhc2UiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX0pfWZ1bmN0aW9uIE82KCQpe3JldHVybiAkLnNwbGl0KCItIikubWFwKChKKT0+Si5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStKLnNsaWNlKDEpKS5qb2luKCIgIil9ZnVuY3Rpb24gdkooe2Nocm9tZTokfSl7aWYoISQuc2xpY2V8fCEkLmNvcm5lcilyZXR1cm4gbnVsbDtsZXR7Ym9keTpKLGNvcm5lcjpRLHNsaWNlOlh9PSQsSz1NYXRoLm1heChKLndpZHRoLVEud2lkdGgqMiwwKSxZPU1hdGgubWF4KEouaGVpZ2h0LVEuaGVpZ2h0KjIsMCkscT1be2tleToidG9wLWxlZnQiLGltYWdlOlgudG9wTGVmdCxyZWN0Ont4OkoueCx5OkoueSx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6InRvcC1yaWdodCIsaW1hZ2U6WC50b3BSaWdodCxyZWN0Ont4OkoueCtKLndpZHRoLVEud2lkdGgseTpKLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20tbGVmdCIsaW1hZ2U6WC5ib3R0b21MZWZ0LHJlY3Q6e3g6Si54LHk6Si55K0ouaGVpZ2h0LVEuaGVpZ2h0LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLXJpZ2h0IixpbWFnZTpYLmJvdHRvbVJpZ2h0LHJlY3Q6e3g6Si54K0oud2lkdGgtUS53aWR0aCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6InRvcCIsaW1hZ2U6WC50b3AscmVjdDp7eDpKLngrUS53aWR0aCx5OkoueSx3aWR0aDpLLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbSIsaW1hZ2U6WC5ib3R0b20scmVjdDp7eDpKLngrUS53aWR0aCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpLLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImxlZnQiLGltYWdlOlgubGVmdCxyZWN0Ont4OkoueCx5OkoueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX0se2tleToicmlnaHQiLGltYWdlOlgucmlnaHQscmVjdDp7eDpKLngrSi53aWR0aC1RLndpZHRoLHk6Si55K1EuaGVpZ2h0LHdpZHRoOlEud2lkdGgsaGVpZ2h0Oll9fV07cmV0dXJuIFooSjEse2NoaWxkcmVuOnEuZmlsdGVyKChHKT0+Ry5yZWN0LndpZHRoPjAmJkcucmVjdC5oZWlnaHQ+MCkubWFwKChHKT0+WihGNix7Y2hyb21lOiQsaW1hZ2U6Ry5pbWFnZSxyZWN0OkcucmVjdCx6SW5kZXg6MX0sRy5rZXkpKX0pfWZ1bmN0aW9uIEY2KHtjaHJvbWU6JCxpbWFnZTpKLHJlY3Q6USx6SW5kZXg6WH0pe3JldHVybiBaKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkE2KCQuaWRlbnRpZmllcixKKSxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4udDMoJCxRLFgpLG9iamVjdEZpdDoiZmlsbCIscG9pbnRlckV2ZW50czoibm9uZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIEE2KCQsSil7bGV0IFE9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChKKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOmIxKFEpfWZ1bmN0aW9uIHQzKCQsSixRKXtyZXR1cm57bGVmdDptNShKLngsJC5mcmFtZS53aWR0aCksdG9wOm01KEoueSwkLmZyYW1lLmhlaWdodCksd2lkdGg6bTUoSi53aWR0aCwkLmZyYW1lLndpZHRoKSxoZWlnaHQ6bTUoSi5oZWlnaHQsJC5mcmFtZS5oZWlnaHQpLHpJbmRleDpRfX1mdW5jdGlvbiBtNSgkLEope3JldHVybmAkeyQvSioxMDB9JWB9ZnVuY3Rpb24gTTYoe25hbWU6JCxydW50aW1lOkosY2hyb21lOlEscGxhY2Vob2xkZXJBc3NldDpYLGJ1c3k6SyxidXN5TGFiZWw6WT0iU3RhcnRpbmfigKYiLGVycm9yOnEsb25TdGFydDpHfSl7bGV0IEI9RTAoJCksTj14MVtCXSx6PVg/P251bGwsVj16P251bGw6UT8/bnVsbCxIPVY/e3dpZHRoOlYuc2NyZWVuLndpZHRoLGhlaWdodDpWLnNjcmVlbi5oZWlnaHR9Ok4yKEIsJCksQz16MihCLEgpLEE9ej9SSihCLHoubmFtZSk6Vj9DKlYuZnJhbWUud2lkdGgvVi5zY3JlZW4ud2lkdGg6QypOLndpZHRoLyhOLndpZHRoLTIqTi5iZXplbFgpLEw9ej97d2lkdGg6ei53aWR0aCxoZWlnaHQ6ei5oZWlnaHR9OlY/e3dpZHRoOlYuZnJhbWUud2lkdGgsaGVpZ2h0OlYuZnJhbWUuaGVpZ2h0fTp7d2lkdGg6Ti53aWR0aCxoZWlnaHQ6Ti5oZWlnaHR9LFU9YCR7TC53aWR0aH0gLyAke0wuaGVpZ2h0fWAsRj0oTC53aWR0aC9MLmhlaWdodCpoSihCKSkudG9GaXhlZCgyKSxXPUI9PT0idmlzaW9uIj9aKG1KLHt9KTpaKGdKLHt0eXBlOkJ9KTtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtNSBtaW4tdy0wIHctZnVsbCIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIixzdHlsZTp7d2lkdGg6YG1pbigxMDAlLCAke0F9cHgsICR7Rn1kdmgpYCxtYXhXaWR0aDpBLGFzcGVjdFJhdGlvOlV9LGNoaWxkcmVuOno/WihmSix7bmFtZTp6Lm5hbWUsZmFsbGJhY2s6V30pOlY/WigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOloocDUse2Nocm9tZTpWfSl9KTpXfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTdweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjokfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbZjUoSiksIiBTaW11bGF0b3IiXX0pXX0pLHEmJlooImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTJweF0gZm9udC1tb25vIG1heC13LTkwIHRleHQtY2VudGVyIixjaGlsZHJlbjpxfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcsZGlzYWJsZWQ6SyxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTUgcHktMiByb3VuZGVkLWZ1bGwgdGV4dC1bMTRweF0gZm9udC1tZWRpdW0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtLPyJiZy13aGl0ZS84IHRleHQtd2hpdGUvNTUgY3Vyc29yLWRlZmF1bHQiOiJiZy13aGl0ZS8xMiB0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzE4IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltLJiZaKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InNpemUtMy41IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOSkifX0pLEs/WToiU3RhcnQiXX0pXX0pfWZ1bmN0aW9uIFJKKCQsSil7aWYoJD09PSJ3YXRjaCIpe2lmKEouaW5jbHVkZXMoInVsdHJhIikpcmV0dXJuIDI1NTtpZihKLmluY2x1ZGVzKCJ3YXRjaC1zZS0iKXx8Si5pbmNsdWRlcygiYXBwbGUtd2F0Y2gtc2UtIikpcmV0dXJuIDIzODtyZXR1cm4gMjUwfWlmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzkwO2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDM0MDtyZXR1cm4gMjgwfWZ1bmN0aW9uIGhKKCQpe2lmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzQ7aWYoJD09PSJpcGFkIilyZXR1cm4gNTA7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIDU2O3JldHVybiA1Mn1mdW5jdGlvbiBnSih7dHlwZTokfSl7bGV0IEo9eDFbJF07cmV0dXJuIFooSjEse2NoaWxkcmVuOltaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKLndpZHRofSAke0ouaGVpZ2h0fWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpaKCJsaW5lYXJHcmFkaWVudCIse2lkOiJwbGFjZWhvbGRlci1zY3JlZW4iLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzZmYThlNiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiI1NSUiLHN0b3BDb2xvcjoiIzViOTNkNiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiM1MTg4Y2YifSldfSl9KSxaKCJyZWN0Iix7eDpKLmJlemVsWCx5OkouYmV6ZWxZLHdpZHRoOkoud2lkdGgtMipKLmJlemVsWCxoZWlnaHQ6Si5oZWlnaHQtMipKLmJlemVsWSxyeDpKLmlubmVyUmFkaXVzLGZpbGw6InVybCgjcGxhY2Vob2xkZXItc2NyZWVuKSJ9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46WihUNSx7dHlwZTokfSl9KV19KX1mdW5jdGlvbiBmSih7bmFtZTokLGZhbGxiYWNrOkp9KXtsZXRbUSxYXT1rKCJsb2FkaW5nIik7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W1EhPT0ibG9hZGVkIiYmSixRIT09ImVycm9yIiYmWigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpwSigkKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIG9iamVjdC1jb250YWluIixzdHlsZTp7V2Via2l0VXNlckRyYWc6Im5vbmUifSxvbkxvYWQ6KCk9PlgoImxvYWRlZCIpLG9uRXJyb3I6KCk9PlgoImVycm9yIil9KV19KX1mdW5jdGlvbiBtSigpe2xldHt3aWR0aDokLGhlaWdodDpKfT14MS52aXNpb247cmV0dXJuIFooInN2ZyIse3ZpZXdCb3g6YDAgMCAkeyR9ICR7Sn1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6ITAsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W1ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyODI4MmIifSksWigic3RvcCIse29mZnNldDoiNTQlIixzdG9wQ29sb3I6IiMxMjEyMTQifSksWigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDcwNzA4In0pXX0pLFooImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltaKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMzEzNTNhIn0pLFooInN0b3AiLHtvZmZzZXQ6IjQ4JSIsc3RvcENvbG9yOiIjMGEwYjBkIn0pLFooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KSxaKCJyYWRpYWxHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItbGVucyIsY3g6IjUwJSIsY3k6IjQ2JSIscjoiNjAlIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzIwMjgzMiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiI3MiUiLHN0b3BDb2xvcjoiIzA5MGEwZCJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSldfSksWigicGF0aCIse2Q6Ik05NSAxNzdDOTUgMTE5IDE0NyA4NiAyMTggOTFDMjU3IDk0IDI4NiAxMTEgMzIwIDExMUMzNTQgMTExIDM4MyA5NCA0MjIgOTFDNDkzIDg2IDU0NSAxMTkgNTQ1IDE3N1YyMjJDNTQ1IDI3OCA1MDEgMzExIDQ0MyAzMTBDMzk4IDMwOSAzNzEgMjg2IDM0NSAyNjhDMzI5IDI1NyAzMTEgMjU3IDI5NSAyNjhDMjY5IDI4NiAyNDIgMzA5IDE5NyAzMTBDMTM5IDMxMSA5NSAyNzggOTUgMjIyVjE3N1oiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsKSIsc3Ryb2tlOiIjM2QzZDQyIixzdHJva2VXaWR0aDoiNyJ9KSxaKCJwYXRoIix7ZDoiTTExNyAxODFDMTE3IDEzNCAxNTcgMTEyIDIyMCAxMTZDMjYwIDExOSAyODcgMTM2IDMyMCAxMzZDMzUzIDEzNiAzODAgMTE5IDQyMCAxMTZDNDgzIDExMiA1MjMgMTM0IDUyMyAxODFWMjE3QzUyMyAyNjMgNDg4IDI4NyA0MzkgMjg3QzM5OSAyODcgMzY5IDI2NCAzNDUgMjUwQzMyOSAyNDAgMzExIDI0MCAyOTUgMjUwQzI3MSAyNjQgMjQxIDI4NyAyMDEgMjg3QzE1MiAyODcgMTE3IDI2MyAxMTcgMjE3VjE4MVoiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzKSIsc3Ryb2tlOiIjMTcxODFiIixzdHJva2VXaWR0aDoiNSJ9KSxaKCJwYXRoIix7ZDoiTTE0MyAxODZDMTQ1IDE0OCAxNzYgMTM1IDIyNiAxMzhDMjY0IDE0MSAyODkgMTU2IDMyMCAxNTZDMzUxIDE1NiAzNzYgMTQxIDQxNCAxMzhDNDY0IDEzNSA0OTUgMTQ4IDQ5NyAxODZWMjEzQzQ5NyAyNTAgNDY5IDI2NiA0MzIgMjY2QzM5NCAyNjYgMzY5IDI0NiAzNDMgMjM1QzMyOCAyMjkgMzEyIDIyOSAyOTcgMjM1QzI3MSAyNDYgMjQ2IDI2NiAyMDggMjY2QzE3MSAyNjYgMTQzIDI1MCAxNDMgMjEzVjE4NloiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMpIixzdHJva2U6IiMyNjJhMmYiLHN0cm9rZVdpZHRoOiIyIn0pLFooInBhdGgiLHtkOiJNMTUxIDE3MUMxNzkgMTUwIDIxNyAxNDcgMjUxIDE1NE0zODkgMTU0QzQyMyAxNDcgNDYxIDE1MCA0ODkgMTcxIixzdHJva2U6IiM0ZTUzNWEiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KSxaKCJwYXRoIix7ZDoiTTI3NyAyMzNDMjg5IDIyNCAzMDQgMjE5IDMyMCAyMTlDMzM2IDIxOSAzNTEgMjI0IDM2MyAyMzMiLHN0cm9rZToiIzNiNDA0NiIsc3Ryb2tlV2lkdGg6IjQiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pfWZ1bmN0aW9uIHBKKCQpe2xldCBKPWBncmlkL2FwaS9kZXZpY2UtcGxhY2Vob2xkZXItYXNzZXQ/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7Sn1gOmIxKEopfWZ1bmN0aW9uIEMyKHtvcGVuOiQsd2lkdGg6SixjaGlsZHJlbjpRLHN0eWxlOlgsc2lkZTpLPSJyaWdodCJ9KXtyZXR1cm4gWigiYXNpZGUiLHtjbGFzc05hbWU6YGZpeGVkIHotMzUgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gYmctcGFuZWwtYmcgdGV4dC13aGl0ZS85MCBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wgJHtLPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCBsZWZ0LTAgcm91bmRlZC1ub25lIGJvcmRlci0wIGJvcmRlci1yIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzhweF8wXzMycHhfcmdiYSgwLDAsMCwwLjM1KV0iOiJ0b3AtMyBib3R0b20tMyByaWdodC0zIHJvdW5kZWQtWzE0cHhdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSJ9YCxzdHlsZTp7d2lkdGg6Six0cmFuc2Zvcm06JD8idHJhbnNsYXRlWCgwKSI6Sz09PSJsZWZ0Ij8idHJhbnNsYXRlWCgtMTAwJSkiOiJ0cmFuc2xhdGVYKGNhbGMoMTAwJSArIDI0cHgpKSIsb3BhY2l0eTokPzE6MCxwb2ludGVyRXZlbnRzOiQ/ImF1dG8iOiJub25lIiwuLi5YfSwiYXJpYS1oaWRkZW4iOiEkLGNoaWxkcmVuOlF9KX1mdW5jdGlvbiBPMih7Y2hpbGRyZW46JCxzdHlsZTpKfSl7cmV0dXJuIFooImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yLjUgcHgtMi41IHB5LTEuNSBwbC0zIixzdHlsZTpKLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBrNih7Y2hpbGRyZW46JH0pe3JldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gdTUoe29uQ2xpY2s6JCxhcmlhTGFiZWw6Sj0iQ2xvc2UgcGFuZWwiLHRpdGxlOlEsaWNvblNpemU6WD0xNn0pe3JldHVybiBaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6JCxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgcC0wIHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjpKLHRpdGxlOlEsY2hpbGRyZW46WihMMCx7c2l6ZTpYLHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIFc2KCQsSil7bGV0W1EsWF09ayhudWxsKTtyZXR1cm4geSgoKT0+e2lmKCFKfHwhJClyZXR1cm47bGV0IEs9ITEsWT1hc3luYygpPT57dHJ5e2xldCBCPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFLKVgoQil9Y2F0Y2h7fX07WSgpO2xldCBxPXNldEludGVydmFsKFksNTAwMCk7cmV0dXJuKCk9PntLPSEwLGNsZWFySW50ZXJ2YWwocSl9fSxbJCxKXSksUX1mdW5jdGlvbiBfNih7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPT09MClyZXR1cm4gbnVsbDtsZXR7ZXN0aW1hdGVkQWRkaXRpb25hbDpKLGF2YWlsYWJsZUJ5dGVzOlEsdG90YWxCeXRlczpYLHJ1bm5pbmdTaW11bGF0b3JzOkt9PSQsWT1NYXRoLm1heCgwLE1hdGgubWluKDEsMS1RL1gpKSxxPUsrSixHPUo9PT0wPyIjZTY2IjpKPD0xPyIjZTlhMTNiIjoiIzNiMyIsQj1ZPjAuOT8iI2U2NiI6WT4wLjc1PyIjZTlhMTNiIjoiIzNiMyI7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggbWF4LXctZnVsbCBtaW4tdy0wIGZsZXgtbm93cmFwIGl0ZW1zLWNlbnRlciBnYXAtMS41IG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6R319KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIHRydW5jYXRlIixjaGlsZHJlbjpbWigic3BhbiIse2NoaWxkcmVuOltLLCIvIixxLCIgc2ltcyJdfSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80MCIsY2hpbGRyZW46IiDCtyAifSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W1U2KFEpLCIgZnJlZSJdfSldfSksWigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gc2hyaW5rLTAgYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhZKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOkJ9fSl9KV19KX1mdW5jdGlvbiBENih7dHlwZTokLHNpemU6Sj0yMCxzY3JlZW5PbjpRPSExfSl7bGV0IFg9e3dpZHRoOkosaGVpZ2h0Okosdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS42LHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpbUSYmWigicmVjdCIse3g6IjUiLHk6IjMiLHdpZHRoOiIxNSIsaGVpZ2h0OiIxOSIscng6IjEuNjUiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxaKCJyZWN0Iix7eDoiNCIseToiMi41Iix3aWR0aDoiMTYiLGhlaWdodDoiMTkiLHJ4OiIyLjUifSksWigibGluZSIse3gxOiIxMiIseTE6IjE4LjUiLHgyOiIxMiIseTI6IjE4LjUifSldfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFooInN2ZyIsey4uLlgsY2hpbGRyZW46W1ooInJlY3QiLHt4OiI2LjUiLHk6IjciLHdpZHRoOiIxMSIsaGVpZ2h0OiIxMCIscng6IjMifSksWigicGF0aCIse2Q6Ik04LjUgN2wuNi0zLjJBMS41IDEuNSAwIDAgMSAxMC42IDIuNWgyLjhhMS41IDEuNSAwIDAgMSAxLjUgMS4zTDE1LjUgNyJ9KSxaKCJwYXRoIix7ZDoiTTguNSAxN2wuNiAzLjJhMS41IDEuNSAwIDAgMCAxLjUgMS4zaDIuOGExLjUgMS41IDAgMCAwIDEuNS0xLjNsLjYtMy4yIn0pXX0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTMgMTFhNCA0IDAgMCAxIDQtNGgxMGE0IDQgMCAwIDEgNCA0djIuNWEyLjUgMi41IDAgMCAxLTIuNSAyLjVjLTEuOCAwLTIuNS0xLjItMy41LTEuOC0uOS0uNS0xLjYtLjctMi41LS43cy0xLjYuMi0yLjUuN2MtMSAuNi0xLjcgMS44LTMuNSAxLjhBMi41IDIuNSAwIDAgMSAzIDEzLjV6In0pfSk7ZGVmYXVsdDpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpbUSYmWigicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxaKCJyZWN0Iix7eDoiNi41Iix5OiIyLjUiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIuOCJ9KSxaKCJsaW5lIix7eDE6IjEwLjUiLHkxOiI1Iix4MjoiMTMuNSIseTI6IjUifSldfSl9fWZ1bmN0aW9uIFA2KHtkZXZpY2U6JCxhY3RpdmU6SixzdGFydGluZzpRLHNodXR0aW5nRG93bjpYLG9uU2VsZWN0Okssb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsRz0kLnN0YXRlPT09IkJvb3RlZCIsQj1FMCgkLm5hbWUpLE49QzYoJC5ydW50aW1lKSx6PXE/IlN0cmVhbWluZyI6UT9HPyJTdGFydGluZ+KApiI6IkJvb3RpbmfigKYiOlg/IlNodXR0aW5nIGRvd27igKYiOkc/IkJvb3RlZCI6bnVsbCxWPXE/IiMzNGQzOTkiOkc/IiNlOWExM2IiOm51bGwsSD1xfHxHLEM9cT9KPyJiZy1bIzI2MzY0Y10iOiJiZy1bIzIwMmIzYV0iOko/ImJnLXdoaXRlLzE1IjoiYmctd2hpdGUvNiIsQT1xPyJ0ZXh0LVsjZDJlN2ZmXSI6Sj8idGV4dC13aGl0ZS85MCI6InRleHQtd2hpdGUvNTUiO3JldHVybiBaKCJkaXYiLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjAsImFyaWEtcHJlc3NlZCI6SixvbkNsaWNrOkssb25LZXlEb3duOihMKT0+e2lmKEwua2V5PT09IkVudGVyInx8TC5rZXk9PT0iICIpTC5wcmV2ZW50RGVmYXVsdCgpLEsoKX0sY2xhc3NOYW1lOmBncm91cCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10gJHtKPyJiZy13aGl0ZS8xMCB0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS84In1gLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6YHJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiAke0N9YCxjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZTpBLGNoaWxkcmVuOlooRDYse3R5cGU6QixzY3JlZW5PbjpCb29sZWFuKHEpfSl9KSxWJiYhcSYmWigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAuNSByaWdodC0wLjUgc2l6ZS0xLjUgcm91bmRlZC1mdWxsIHJpbmctMiByaW5nLVsjMWMxYzFlXSIsc3R5bGU6e2JhY2tncm91bmQ6Vn19KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiQubmFtZX0pLHomJlooImRpdiIse2NsYXNzTmFtZTpgdHJ1bmNhdGUgdGV4dC1bMTFweF0gbGVhZGluZy10aWdodCAke3E/InRleHQtWyMzNGQzOTldIjpKPyJ0ZXh0LXdoaXRlLzc1IjoidGV4dC13aGl0ZS80NSJ9YCxjaGlsZHJlbjp6fSldfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy10cmFpbGluZy1zbG90IixjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIHctOCBoLTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0YWJ1bGFyLW51bXMgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEyc10gJHtKPyJ0ZXh0LXdoaXRlLzg1IjoidGV4dC13aGl0ZS80MCJ9ICR7SD8iZ3JvdXAtaG92ZXI6b3BhY2l0eS0wIGdyb3VwLWZvY3VzLXdpdGhpbjpvcGFjaXR5LTAiOiIifWAsY2hpbGRyZW46Tn0pLEgmJlooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsdGl0bGU6WD8iU2h1dHRpbmcgZG93buKApiI6IlNodXQgZG93biBzaW11bGF0b3IiLCJhcmlhLWxhYmVsIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsb25DbGljazooTCk9PntMLnByZXZlbnREZWZhdWx0KCksTC5zdG9wUHJvcGFnYXRpb24oKSxZKCl9LGRpc2FibGVkOlgsY2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTUgcm91bmRlZC1tZCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpvcGFjaXR5LTEwMCBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzLGJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdICR7Sj8idGV4dC13aGl0ZS84MCBob3ZlcjpiZy13aGl0ZS8yMCI6InRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMTIgaG92ZXI6dGV4dC13aGl0ZSJ9YCxjaGlsZHJlbjpaKEwwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjIuMn0pfSldfSldfSl9dmFyIEYyPSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpIixlMz0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50KSI7dmFyIHVKPTEyO2Z1bmN0aW9uIFQ2KHtvcGVuOiQsb25DbG9zZTpKLHdpZHRoOlEsc2lkZTpYPSJyaWdodCIsZGV2aWNlczpLLHRvdGFsOlk9MCxoYXNNb3JlOnE9ITEsb25Mb2FkTW9yZTpHLG9uTG9hZEFsbDpCLG9uUmVzZXRQYWdlOk4sc2VsZWN0ZWRVZGlkOnosb25TZWxlY3Q6VixzdGFydGluZzpILHNodXR0aW5nRG93bjpDLG9uU2h1dGRvd246QX0pe2xldCBVPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpiMSgiZ3JpZC9hcGkvbWVtb3J5IikpLEY9VzYoVSwkKSxbVyxFXT1rKCIiKSxQPWsxKCgpPT57bGV0IFI9Vy50cmltKCkudG9Mb3dlckNhc2UoKTtpZighUnx8IUspcmV0dXJuIEs7cmV0dXJuIEsuZmlsdGVyKChkKT0+ZC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoUil8fGY1KGQucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhSKSl9LFtLLFddKSx4PVQoITEpO3koKCk9PntsZXQgUj0hIVcudHJpbSgpO2lmKFImJnEpQj8uKCk7ZWxzZSBpZighUiYmeC5jdXJyZW50KU4/LigpO3guY3VycmVudD1SfSxbVyxxLEIsTl0pO2xldCBEPVQobnVsbCk7cmV0dXJuIFooQzIse29wZW46JCx3aWR0aDpRLHNpZGU6WCxzdHlsZTp7YmFja2dyb3VuZENvbG9yOkYyfSxjaGlsZHJlbjpbWihPMix7c3R5bGU6e2p1c3RpZnlDb250ZW50OiJmbGV4LXN0YXJ0IixwYWRkaW5nTGVmdDoxNixwYWRkaW5nVG9wOjE2LGdhcDo0fSxjaGlsZHJlbjpbWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkosY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiQ2xvc2UgZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjohMCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46Wih3MCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxaKGg1LHt9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6InB4LTQgcGItMiBwdC0wLjUgc2hyaW5rLTAiLGNoaWxkcmVuOlooImxhYmVsIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgaC04IHJvdW5kZWQtbGcgYmctd2hpdGUvNiBmb2N1cy13aXRoaW46Ymctd2hpdGUvMTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10iLGNoaWxkcmVuOltaKGMyLHtzaXplOjE0LHN0cm9rZVdpZHRoOjIsY2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIHNocmluay0wIn0pLFooImlucHV0Iix7dmFsdWU6VyxvbkNoYW5nZTooUik9PkUoUi50YXJnZXQudmFsdWUpLHBsYWNlaG9sZGVyOiJTZWFyY2giLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgb3V0bGluZS1ub25lIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvOTAgcGxhY2Vob2xkZXI6dGV4dC13aGl0ZS80MCJ9KSxXJiZaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc2VhcmNoIixvbkNsaWNrOigpPT5FKCIiKSxjbGFzc05hbWU6InNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNCByb3VuZGVkLWZ1bGwgYmctd2hpdGUvMTUgdGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8yNSIsY2hpbGRyZW46WihMMCx7c2l6ZTo5LHN0cm9rZVdpZHRoOjN9KX0pXX0pfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4LTEgbWluLWgtMCIsY2hpbGRyZW46W1ooImRpdiIse3JlZjpELG9uU2Nyb2xsOigpPT57aWYoVy50cmltKCl8fCFxfHwhRylyZXR1cm47bGV0IFI9RC5jdXJyZW50O2lmKCFSKXJldHVybjtpZihSLnNjcm9sbFRvcCtSLmNsaWVudEhlaWdodD49Ui5zY3JvbGxIZWlnaHQtMjQwKUcoKX0sY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcHgtNCBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOlA9PT1udWxsP1oobEose30pOlAubGVuZ3RoPT09MD9aKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktNiB0ZXh0LXdoaXRlLzQwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpXPyJObyBtYXRjaGluZyBzaW11bGF0b3JzLiI6Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6WihKMSx7Y2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicHQtMSBwYi0xIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIixjaGlsZHJlbjpQLm1hcCgoUik9PlooUDYse2RldmljZTpSLGFjdGl2ZTpSLmRldmljZT09PXosc3RhcnRpbmc6ISFIW1IuZGV2aWNlXSxzaHV0dGluZ0Rvd246ISFDW1IuZGV2aWNlXSxvblNlbGVjdDooKT0+VihSLmRldmljZSksb25TaHV0ZG93bjooKT0+QShSLmRldmljZSl9LFIuZGV2aWNlKSl9KSwhVyYmcSYmWigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTIgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zNSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Sz9gJHtLLmxlbmd0aH0gb2YgJHtZfWA6bnVsbH0pXX0pfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtdG9wLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICR7RjJ9IDAlLCAke2UzfSAxMDAlKWB9fSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byB0b3AsICR7RjJ9IDAlLCAke2UzfSAxMDAlKWB9fSldfSksWihjSix7cmVwb3J0OkZ9KV19KX1mdW5jdGlvbiBsSigpe3JldHVybiBaKEoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOnVKfSwoJCxKKT0+WihkSix7aW5kZXg6Sn0sSikpfSldfSl9ZnVuY3Rpb24gZEooe2luZGV4OiR9KXtsZXQgSj1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLFE9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxYPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7Sn1gfSksWigic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke1F9YH0pXX0pLFooInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtYfWB9KV19KX1mdW5jdGlvbiBjSih7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpaKF82LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gbDUoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOkosb25Qb2ludGVyRG93bjpRLGFyaWFMYWJlbDpYLHNpZGU6Sz0icmlnaHQifSl7bGV0W1kscV09ayghMSksW0csQl09ayghMSksTj1ZfHxHLHo9KEs9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBaKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpYLCJhcmlhLWhpZGRlbiI6IUosb25Qb2ludGVyRG93bjooSCk9PntCKCEwKSxRKEgpfSxvblBvaW50ZXJVcDooKT0+QighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5CKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtLPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7Sj8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOks9PT0ibGVmdCI/e2xlZnQ6en06e3JpZ2h0Onp9LGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Tj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLFooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Tj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIEk2KCl7bGV0WyQsSl09aygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgUT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWD0oKT0+SihRLm1hdGNoZXMpO3JldHVybiBYKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCl9LFtdKSwkfWZ1bmN0aW9uIGQ1KCl7bGV0WyQsSl09aygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4geSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFg9KCk9PkooUS5tYXRjaGVzKTtyZXR1cm4gWCgpLFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixYKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpfSxbXSksJH12YXIgRTY9MjgwO3ZhciAkOD0id2lkdGggNzBtcyBsaW5lYXIiLEo4PSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLHc2PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsYjY9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixvNT0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIseTY9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsUzY9IjAuMTZzIix4Nj0iMC4ycyIsajY9NSx2Nj17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxSNj17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSxoNj17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxnNj17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxjNT1udWxsO2Z1bmN0aW9uIGY2KCl7aWYoYzUhPW51bGwpcmV0dXJuIGM1O2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gYzU9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksYzV9dmFyIG9KPTQwLG02PTE0LHA2PTI0MCx1Nj0zMCxsNj0wLjE1LGlKPTgwLGQ2PTE1MCxjNj0yNTAsUTg9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uIFo4KCQsSixRLFgpe2xldCBLPSQqMyxZPUo+MD9NYXRoLm1heCgxODAsSi00OCk6SyxxPVE+MCYmTnVtYmVyLmlzRmluaXRlKFgpJiZYPjA/TWF0aC5tYXgoMTgwLChRLTEzNikqWCk6SztyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKEssWSxxKSl9ZnVuY3Rpb24gdDAoJCxKLFEsWCxLKXtsZXQgWT1aOChKLFEsWCxLKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiBvNigkLEosUSxYLEspe2xldCBZPU51bWJlci5pc0Zpbml0ZShLKT8kKks6JDtyZXR1cm4gdDAoWSwkLEosUSxYKX1mdW5jdGlvbiBpNSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBKPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpKKS9KfWZ1bmN0aW9uIFg4KCQsSil7aWYoJDw9MHx8Sjw9MClyZXR1cm4gMDtsZXQgUT0wLjU1LFg9JCpKKlEvKEorUSokKTtyZXR1cm4gTWF0aC5taW4ob0osWCl9ZnVuY3Rpb24gaTYoJCxKLFEpe2xldCBYPSQsSz1RO2ZvcihsZXQgWSBvZiBKKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8SylYPVksSz1xfXJldHVybiBYfWZ1bmN0aW9uIG42KCQpe2xldHtmcm9tOkosdG86USx2ZWxvY2l0eTpYLHN0aWZmbmVzczpLLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxCPTAuNCxOPTAuMDMzMzMzMzMzMzMzMzMzMzMsej1KLFY9WCxIPXBlcmZvcm1hbmNlLm5vdygpLEM9MCxBPSExLEw9KFUpPT57aWYoQSlyZXR1cm47bGV0IEY9TWF0aC5taW4oKFUtSCkvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTtIPVU7bGV0IFc9LUsqKHotUSktWSpWO2lmKFYrPVcqRix6Kz1WKkYsTWF0aC5hYnMoVik8MC40JiZNYXRoLmFicyh6LVEpPDAuNCl7cShRKSxHPy4oKTtyZXR1cm59cSh6KSxDPXJlcXVlc3RBbmltYXRpb25GcmFtZShMKX07cmV0dXJuIEM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpLCgpPT57aWYoQT0hMCxDKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEMpfX1mdW5jdGlvbiByNigkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBKPSRbJC5sZW5ndGgtMV0sUT0kWzBdO2ZvcihsZXQgSz0kLmxlbmd0aC0xO0s+PTA7Sy0tKWlmKEoudC0kW0tdLnQ+PWlKKXtRPSRbS107YnJlYWt9bGV0IFg9KEoudC1RLnQpLzEwMDA7cmV0dXJuIFg+MD8oSi54LVEueCkvWDowfXZhciBhNj0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIG5KKHthcmM6JCxwaGFzZTpKLHJlZHVjZWRNb3Rpb246USxoaWdoQ29udHJhc3Q6WCxmb2N1c1Zpc2libGU6S30pe2xldCBZPUohPT0iaWRsZSIscT1YPzEuMTI6MSxHPVE/MTp2NltKXSxCPWg2W0pdKnEsTj1YPzE6ZzZbSl0sej1ZP1M2Ong2LFY9WT9iNjpvNSxIPVkmJmY2KCk/eTY6VixDPVE/Im5vbmUiOmB0cmFuc2Zvcm0gJHt6fSAke0h9YCxBPVE/Im5vbmUiOmBzdHJva2UgJHt6fSAke1Z9LCBzdHJva2Utd2lkdGggJHt6fSAke1Z9YCxMPSQudmlld0JveFNpemUsVT0kLmQsRj17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOkMsd2lsbENoYW5nZTpRP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gWigic3ZnIix7d2lkdGg6TCxoZWlnaHQ6TCx2aWV3Qm94OmAwIDAgJHtMfSAke0x9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W1ooInBhdGgiLHtkOlUsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOihqNioyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpLPzAuOTU6MCx0cmFuc2l0aW9uOlE/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7bzV9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLFooInBhdGgiLHtkOlUsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Oks/MC43OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke281fWB9fSldfSksWigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOkYsY2hpbGRyZW46WigiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W1ooInBhdGgiLHtkOlUsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpCKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxOKzAuMDgpLHRyYW5zaXRpb246YCR7QX0sIG9wYWNpdHkgJHt6fSAke1Z9YCxmaWx0ZXI6YTZ9fSksWigicGF0aCIse2Q6VSxzdHJva2U6UjZbSl0sc3Ryb2tlV2lkdGg6QixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Ok4sdHJhbnNpdGlvbjpgJHtBfSwgb3BhY2l0eSAke3p9ICR7Vn1gLGZpbHRlcjphNn19KV19KX0pXX0pfWZ1bmN0aW9uIHM2KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOkosc3RyZWFtQ29uZmlnOlEsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6S30pe2xldCBZPWQ1KCkscT1JNigpLFtHLEJdPWsoITEpLE49azEoKCk9PmczKHt0eXBlOkosY29uZmlnOlE/P251bGwsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6S30pLFtKLFEsWCxLXSksej0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIFooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooVik9PntCKFYuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5CKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46WihuSix7YXJjOk4scGhhc2U6eixyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfWZ1bmN0aW9uIHJKKCQpe2lmKCEkfHx0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybjtsZXQgSj1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtRLnR5cGU9InRleHQvY3NzIixKLmFwcGVuZENoaWxkKFEpLFEuc3R5bGVTaGVldD9RLnN0eWxlU2hlZXQuY3NzVGV4dD0kOlEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJCkpfXZhciBhSj0oJCk9Pntzd2l0Y2goJCl7Y2FzZSJzdWNjZXNzIjpyZXR1cm4gZUo7Y2FzZSJpbmZvIjpyZXR1cm4gSlE7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gJFE7Y2FzZSJlcnJvciI6cmV0dXJuIFFRO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxzSj1BcnJheSgxMikuZmlsbCgwKSx0Sj0oe3Zpc2libGU6JCxjbGFzc05hbWU6Sn0pPT57cmV0dXJuIGYuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlsic29ubmVyLWxvYWRpbmctd3JhcHBlciIsSl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwiZGF0YS12aXNpYmxlIjokfSxmLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLXNwaW5uZXIifSxzSi5tYXAoKFEsWCk9PmYuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItbG9hZGluZy1iYXIiLGtleTpgc3Bpbm5lci1iYXItJHtYfWB9KSkpKX0sZUo9Zi5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxmLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuODU3LTkuODA5YS43NS43NSAwIDAwLTEuMjE0LS44ODJsLTMuNDgzIDQuNzktMS44OC0xLjg4YS43NS43NSAwIDEwLTEuMDYgMS4wNjFsMi41IDIuNWEuNzUuNzUgMCAwMDEuMTM3LS4wODlsNC01LjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksJFE9Zi5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxmLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxKUT1mLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGYuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03LTRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek05IDlhLjc1Ljc1IDAgMDAwIDEuNWguMjUzYS4yNS4yNSAwIDAxLjI0NC4zMDRsLS40NTkgMi4wNjZBMS43NSAxLjc1IDAgMDAxMC43NDcgMTVIMTFhLjc1Ljc1IDAgMDAwLTEuNWgtLjI1M2EuMjUuMjUgMCAwMS0uMjQ0LS4zMDRsLjQ1OS0yLjA2NkExLjc1IDEuNzUgMCAwMDkuMjUzIDlIOXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxRUT1mLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGYuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS04LTVhLjc1Ljc1IDAgMDEuNzUuNzV2NC41YS43NS43NSAwIDAxLTEuNSAwdi00LjVBLjc1Ljc1IDAgMDExMCA1em0wIDEwYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyeiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLFpRPWYuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxmLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLGYuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpLFhRPSgpPT57bGV0WyQsSl09Zi51c2VTdGF0ZShkb2N1bWVudC5oaWRkZW4pO3JldHVybiBmLnVzZUVmZmVjdCgoKT0+e2xldCBRPSgpPT57Sihkb2N1bWVudC5oaWRkZW4pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixRKX0sW10pLCR9LEs4PTE7Y2xhc3MgJDR7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmliZT0oJCk9PntyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKCQpLCgpPT57bGV0IEo9dGhpcy5zdWJzY3JpYmVycy5pbmRleE9mKCQpO3RoaXMuc3Vic2NyaWJlcnMuc3BsaWNlKEosMSl9fSx0aGlzLnB1Ymxpc2g9KCQpPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChKKT0+SigkKSl9LHRoaXMuYWRkVG9hc3Q9KCQpPT57dGhpcy5wdWJsaXNoKCQpLHRoaXMudG9hc3RzPVsuLi50aGlzLnRvYXN0cywkXX0sdGhpcy5jcmVhdGU9KCQpPT57dmFyIEo7bGV0e21lc3NhZ2U6USwuLi5YfT0kLEs9dHlwZW9mKCQ9PW51bGw/dm9pZCAwOiQuaWQpPT09Im51bWJlciJ8fCgoSj0kLmlkKT09bnVsbD92b2lkIDA6Si5sZW5ndGgpPjA/JC5pZDpLOCsrLFk9dGhpcy50b2FzdHMuZmluZCgoRyk9PntyZXR1cm4gRy5pZD09PUt9KSxxPSQuZGlzbWlzc2libGU9PT12b2lkIDA/ITA6JC5kaXNtaXNzaWJsZTtpZih0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoSykpdGhpcy5kaXNtaXNzZWRUb2FzdHMuZGVsZXRlKEspO2lmKFkpdGhpcy50b2FzdHM9dGhpcy50b2FzdHMubWFwKChHKT0+e2lmKEcuaWQ9PT1LKXJldHVybiB0aGlzLnB1Ymxpc2goey4uLkcsLi4uJCxpZDpLLHRpdGxlOlF9KSx7Li4uRywuLi4kLGlkOkssZGlzbWlzc2libGU6cSx0aXRsZTpRfTtyZXR1cm4gR30pO2Vsc2UgdGhpcy5hZGRUb2FzdCh7dGl0bGU6USwuLi5YLGRpc21pc3NpYmxlOnEsaWQ6S30pO3JldHVybiBLfSx0aGlzLmRpc21pc3M9KCQpPT57aWYoJCl0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoJCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEopPT5KKHtpZDokLGRpc21pc3M6ITB9KSkpO2Vsc2UgdGhpcy50b2FzdHMuZm9yRWFjaCgoSik9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKFEpPT5RKHtpZDpKLmlkLGRpc21pc3M6ITB9KSl9KTtyZXR1cm4gJH0sdGhpcy5tZXNzYWdlPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLG1lc3NhZ2U6JH0pfSx0aGlzLmVycm9yPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLG1lc3NhZ2U6JCx0eXBlOiJlcnJvciJ9KX0sdGhpcy5zdWNjZXNzPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6InN1Y2Nlc3MiLG1lc3NhZ2U6JH0pfSx0aGlzLmluZm89KCQsSik9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkosdHlwZToiaW5mbyIsbWVzc2FnZTokfSl9LHRoaXMud2FybmluZz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJ3YXJuaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5sb2FkaW5nPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6JH0pfSx0aGlzLnByb21pc2U9KCQsSik9PntpZighSilyZXR1cm47bGV0IFE9dm9pZCAwO2lmKEoubG9hZGluZyE9PXZvaWQgMClRPXRoaXMuY3JlYXRlKHsuLi5KLHByb21pc2U6JCx0eXBlOiJsb2FkaW5nIixtZXNzYWdlOkoubG9hZGluZyxkZXNjcmlwdGlvbjp0eXBlb2YgSi5kZXNjcmlwdGlvbiE9PSJmdW5jdGlvbiI/Si5kZXNjcmlwdGlvbjp2b2lkIDB9KTtsZXQgWD1Qcm9taXNlLnJlc29sdmUoJCBpbnN0YW5jZW9mIEZ1bmN0aW9uPyQoKTokKSxLPVEhPT12b2lkIDAsWSxxPVgudGhlbihhc3luYyhCKT0+e2lmKFk9WyJyZXNvbHZlIixCXSxmLmlzVmFsaWRFbGVtZW50KEIpKUs9ITEsdGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZGVmYXVsdCIsbWVzc2FnZTpCfSk7ZWxzZSBpZihZUShCKSYmIUIub2spe0s9ITE7bGV0IHo9dHlwZW9mIEouZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEouZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtCLnN0YXR1c31gKTpKLmVycm9yLFY9dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oYEhUVFAgZXJyb3IhIHN0YXR1czogJHtCLnN0YXR1c31gKTpKLmRlc2NyaXB0aW9uLEM9dHlwZW9mIHo9PT0ib2JqZWN0IiYmIWYuaXNWYWxpZEVsZW1lbnQoeik/ejp7bWVzc2FnZTp6fTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246ViwuLi5DfSl9ZWxzZSBpZihCIGluc3RhbmNlb2YgRXJyb3Ipe0s9ITE7bGV0IHo9dHlwZW9mIEouZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEouZXJyb3IoQik6Si5lcnJvcixWPXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKEIpOkouZGVzY3JpcHRpb24sQz10eXBlb2Ygej09PSJvYmplY3QiJiYhZi5pc1ZhbGlkRWxlbWVudCh6KT96OnttZXNzYWdlOnp9O3RoaXMuY3JlYXRlKHtpZDpRLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpWLC4uLkN9KX1lbHNlIGlmKEouc3VjY2VzcyE9PXZvaWQgMCl7Sz0hMTtsZXQgej10eXBlb2YgSi5zdWNjZXNzPT09ImZ1bmN0aW9uIj9hd2FpdCBKLnN1Y2Nlc3MoQik6Si5zdWNjZXNzLFY9dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oQik6Si5kZXNjcmlwdGlvbixDPXR5cGVvZiB6PT09Im9iamVjdCImJiFmLmlzVmFsaWRFbGVtZW50KHopP3o6e21lc3NhZ2U6en07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToic3VjY2VzcyIsZGVzY3JpcHRpb246ViwuLi5DfSl9fSkuY2F0Y2goYXN5bmMoQik9PntpZihZPVsicmVqZWN0IixCXSxKLmVycm9yIT09dm9pZCAwKXtLPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKEIpOkouZXJyb3Isej10eXBlb2YgSi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSi5kZXNjcmlwdGlvbihCKTpKLmRlc2NyaXB0aW9uLEg9dHlwZW9mIE49PT0ib2JqZWN0IiYmIWYuaXNWYWxpZEVsZW1lbnQoTik/Tjp7bWVzc2FnZTpOfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246eiwuLi5IfSl9fSkuZmluYWxseSgoKT0+e2lmKEspdGhpcy5kaXNtaXNzKFEpLFE9dm9pZCAwO0ouZmluYWxseT09bnVsbHx8Si5maW5hbGx5LmNhbGwoSil9KSxHPSgpPT5uZXcgUHJvbWlzZSgoQixOKT0+cS50aGVuKCgpPT5ZWzBdPT09InJlamVjdCI/TihZWzFdKTpCKFlbMV0pKS5jYXRjaChOKSk7aWYodHlwZW9mIFEhPT0ic3RyaW5nIiYmdHlwZW9mIFEhPT0ibnVtYmVyIilyZXR1cm57dW53cmFwOkd9O2Vsc2UgcmV0dXJuIE9iamVjdC5hc3NpZ24oUSx7dW53cmFwOkd9KX0sdGhpcy5jdXN0b209KCQsSik9PntsZXQgUT0oSj09bnVsbD92b2lkIDA6Si5pZCl8fEs4Kys7cmV0dXJuIHRoaXMuY3JlYXRlKHtqc3g6JChRKSxpZDpRLC4uLkp9KSxRfSx0aGlzLmdldEFjdGl2ZVRvYXN0cz0oKT0+e3JldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKCQpPT4hdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKCQuaWQpKX0sdGhpcy5zdWJzY3JpYmVycz1bXSx0aGlzLnRvYXN0cz1bXSx0aGlzLmRpc21pc3NlZFRvYXN0cz1uZXcgU2V0fX12YXIgSzA9bmV3ICQ0LEtRPSgkLEopPT57bGV0IFE9KEo9PW51bGw/dm9pZCAwOkouaWQpfHxLOCsrO3JldHVybiBLMC5hZGRUb2FzdCh7dGl0bGU6JCwuLi5KLGlkOlF9KSxRfSxZUT0oJCk9PntyZXR1cm4gJCYmdHlwZW9mICQ9PT0ib2JqZWN0IiYmIm9rImluICQmJnR5cGVvZiAkLm9rPT09ImJvb2xlYW4iJiYic3RhdHVzImluICQmJnR5cGVvZiAkLnN0YXR1cz09PSJudW1iZXIifSxxUT1LUSxHUT0oKT0+SzAudG9hc3RzLFZRPSgpPT5LMC5nZXRBY3RpdmVUb2FzdHMoKSx0Mj1PYmplY3QuYXNzaWduKHFRLHtzdWNjZXNzOkswLnN1Y2Nlc3MsaW5mbzpLMC5pbmZvLHdhcm5pbmc6SzAud2FybmluZyxlcnJvcjpLMC5lcnJvcixjdXN0b206SzAuY3VzdG9tLG1lc3NhZ2U6SzAubWVzc2FnZSxwcm9taXNlOkswLnByb21pc2UsZGlzbWlzczpLMC5kaXNtaXNzLGxvYWRpbmc6SzAubG9hZGluZ30se2dldEhpc3Rvcnk6R1EsZ2V0VG9hc3RzOlZRfSk7ckooIltkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9bHRyXSxodG1sW2Rpcj1sdHJdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6LTNweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDo0cHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0Oi0xcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDowcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OmF1dG87LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OjA7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoLTM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxdLGh0bWxbZGlyPXJ0bF17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDo0cHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6LTNweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6MHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6LTFweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6MDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOmF1dG87LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgzNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1mYW1pbHk6dWktc2Fucy1zZXJpZixzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLEhlbHZldGljYSBOZXVlLEFyaWFsLE5vdG8gU2FucyxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppOy0tZ3JheTE6aHNsKDAsIDAlLCA5OSUpOy0tZ3JheTI6aHNsKDAsIDAlLCA5Ny4zJSk7LS1ncmF5Mzpoc2woMCwgMCUsIDk1LjElKTstLWdyYXk0OmhzbCgwLCAwJSwgOTMlKTstLWdyYXk1OmhzbCgwLCAwJSwgOTAuOSUpOy0tZ3JheTY6aHNsKDAsIDAlLCA4OC43JSk7LS1ncmF5Nzpoc2woMCwgMCUsIDg1LjglKTstLWdyYXk4OmhzbCgwLCAwJSwgNzglKTstLWdyYXk5OmhzbCgwLCAwJSwgNTYuMSUpOy0tZ3JheTEwOmhzbCgwLCAwJSwgNTIuMyUpOy0tZ3JheTExOmhzbCgwLCAwJSwgNDMuNSUpOy0tZ3JheTEyOmhzbCgwLCAwJSwgOSUpOy0tYm9yZGVyLXJhZGl1czo4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7b3V0bGluZTowO3otaW5kZXg6OTk5OTk5OTk5O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlfUBtZWRpYSAoaG92ZXI6bm9uZSkgYW5kIChwb2ludGVyOmNvYXJzZSl7W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtbGlmdGVkPXRydWVde3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDp2YXIoLS1vZmZzZXQtcmlnaHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rdey0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpO3otaW5kZXg6dmFyKC0tei1pbmRleCk7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RyYW5zZm9ybTp2YXIoLS15KTt0b3VjaC1hY3Rpb246bm9uZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMsb3BhY2l0eSAuNHMsaGVpZ2h0IC40cyxib3gtc2hhZG93IC4ycztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO292ZXJmbG93LXdyYXA6YW55d2hlcmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtwYWRkaW5nOjE2cHg7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JvcmRlci1yYWRpdXM6dmFyKC0tYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9W2RhdGEtc29ubmVyLXRvYXN0XTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6MDstLXk6dHJhbnNsYXRlWSgtMTAwJSk7LS1saWZ0OjE7LS1saWZ0LWFtb3VudDpjYWxjKDEgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTowOy0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdDotMTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiMzZjNmM2Z9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6I2U4ZThlOH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLXRpdGxlXXtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXByb21pc2U9dHJ1ZV0gW2RhdGEtaWNvbl0+c3Zne29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1pbiAuM3MgZWFzZSBmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dPip7ZmxleC1zaHJpbms6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dIHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXXtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLW5vcm1hbC1iZyk7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtdGV4dCk7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKTtib3JkZXI6bm9uZTtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzLGJveC1zaGFkb3cgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMCwwLDAsLjQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA4KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25de3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0KTtyaWdodDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tZW5kKTt0b3A6MDtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tZ3JheTEyKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ncmF5NCk7dHJhbnNmb3JtOnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm0pO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzLGJhY2tncm91bmQgLjJzLGJvcmRlci1jb2xvciAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRpc2FibGVkPXRydWVde2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdOmhvdmVyIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ncmF5Mik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyYXk1KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAwJTtyaWdodDotMTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4Oi0xfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Ym90dG9tOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle3RvcDo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPWZhbHNlXVtkYXRhLXJlbW92ZWQ9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7dHJhbnNmb3JtOnNjYWxlWSgyKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2hlaWdodDpjYWxjKHZhcigtLWdhcCkgKyAxcHgpO2JvdHRvbToxMDAlO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoMCk7b3BhY2l0eToxfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV17LS1zY2FsZTp2YXIoLS10b2FzdHMtYmVmb3JlKSAqIDAuMDUgKyAxOy0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdC1hbW91bnQpICogdmFyKC0tdG9hc3RzLWJlZm9yZSkpKSBzY2FsZShjYWxjKC0xICogdmFyKC0tc2NhbGUpKSk7aGVpZ2h0OnZhcigtLWZyb250LXRvYXN0LWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246b3BhY2l0eSAuNHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zdHlsZWQ9dHJ1ZV0+KntvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkpKTtoZWlnaHQ6dmFyKC0taW5pdGlhbC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9dHJ1ZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSArIHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKDQwJSk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC41cyxvcGFjaXR5IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXTo6YmVmb3Jle2hlaWdodDpjYWxjKHZhcigtLWluaXRpYWwtaGVpZ2h0KSArIDIwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV17dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXksMCkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgsMCkpO3RyYW5zaXRpb246bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGVkPXRydWVde3VzZXItc2VsZWN0Om5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXSxbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj10b3Bde2FuaW1hdGlvbi1kdXJhdGlvbjouMnM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249bGVmdF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWxlZnR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1yaWdodF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXJpZ2h0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249dXBde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC11cH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWRvd25de2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1kb3dufUBrZXlmcmFtZXMgc3dpcGUtb3V0LWxlZnR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXJpZ2h0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgKyAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC11cHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtZG93bntmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpICsgMTAwJSkpO29wYWNpdHk6MH19QG1lZGlhIChtYXgtd2lkdGg6NjAwcHgpe1tkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF17bGVmdDpjYWxjKHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAtMSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdIFtkYXRhLXNvbm5lci10b2FzdF17bGVmdDowO3JpZ2h0OjA7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIDIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tbW9iaWxlLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tbW9iaWxlLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTQpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKTstLXN1Y2Nlc3MtYmc6aHNsKDE0MywgODUlLCA5NiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NSwgOTIlLCA4NyUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNDAsIDEwMCUsIDI3JSk7LS1pbmZvLWJnOmhzbCgyMDgsIDEwMCUsIDk3JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIxLCA5MSUsIDkzJSk7LS1pbmZvLXRleHQ6aHNsKDIxMCwgOTIlLCA0NSUpOy0td2FybmluZy1iZzpoc2woNDksIDEwMCUsIDk3JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNDksIDkxJSwgODQlKTstLXdhcm5pbmctdGV4dDpoc2woMzEsIDkyJSwgNDUlKTstLWVycm9yLWJnOmhzbCgzNTksIDEwMCUsIDk3JSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1OSwgMTAwJSwgOTQlKTstLWVycm9yLXRleHQ6aHNsKDM2MCwgMTAwJSwgNDUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXkzKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYmctaG92ZXI6aHNsKDAsIDAlLCAxMiUpOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtYm9yZGVyLWhvdmVyOmhzbCgwLCAwJSwgMjUlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKTstLXN1Y2Nlc3MtYmc6aHNsKDE1MCwgMTAwJSwgNiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NywgMTAwJSwgMTIlKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTUwLCA4NiUsIDY1JSk7LS1pbmZvLWJnOmhzbCgyMTUsIDEwMCUsIDYlKTstLWluZm8tYm9yZGVyOmhzbCgyMjMsIDQzJSwgMTclKTstLWluZm8tdGV4dDpoc2woMjE2LCA4NyUsIDY1JSk7LS13YXJuaW5nLWJnOmhzbCg2NCwgMTAwJSwgNiUpOy0td2FybmluZy1ib3JkZXI6aHNsKDYwLCAxMDAlLCA5JSk7LS13YXJuaW5nLXRleHQ6aHNsKDQ2LCA4NyUsIDY1JSk7LS1lcnJvci1iZzpoc2woMzU4LCA3NiUsIDEwJSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1NywgODklLCAxNiUpOy0tZXJyb3ItdGV4dDpoc2woMzU4LCAxMDAlLCA4MSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZy1ob3Zlcik7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXItaG92ZXIpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc117YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb117YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ117YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3Jde2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3JdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJ7LS1zaXplOjE2cHg7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDoxMH0uc29ubmVyLWxvYWRpbmctd3JhcHBlcltkYXRhLXZpc2libGU9ZmFsc2Vde3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9LnNvbm5lci1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpfS5zb25uZXItbG9hZGluZy1iYXJ7YW5pbWF0aW9uOnNvbm5lci1zcGluIDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQ6dmFyKC0tZ3JheTExKTtib3JkZXItcmFkaXVzOjZweDtoZWlnaHQ6OCU7bGVmdDotMTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMy45JTt3aWR0aDoyNCV9LnNvbm5lci1sb2FkaW5nLWJhcjpmaXJzdC1jaGlsZHthbmltYXRpb24tZGVsYXk6LTEuMnM7dHJhbnNmb3JtOnJvdGF0ZSguMDAwMWRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDIpe2FuaW1hdGlvbi1kZWxheTotMS4xczt0cmFuc2Zvcm06cm90YXRlKDMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi0xczt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNCl7YW5pbWF0aW9uLWRlbGF5Oi0uOXM7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDUpe2FuaW1hdGlvbi1kZWxheTotLjhzO3RyYW5zZm9ybTpyb3RhdGUoMTIwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi0uN3M7dHJhbnNmb3JtOnJvdGF0ZSgxNTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg3KXthbmltYXRpb24tZGVsYXk6LS42czt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDgpe2FuaW1hdGlvbi1kZWxheTotLjVzO3RyYW5zZm9ybTpyb3RhdGUoMjEwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOSl7YW5pbWF0aW9uLWRlbGF5Oi0uNHM7dHJhbnNmb3JtOnJvdGF0ZSgyNDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMCl7YW5pbWF0aW9uLWRlbGF5Oi0uM3M7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMSl7YW5pbWF0aW9uLWRlbGF5Oi0uMnM7dHJhbnNmb3JtOnJvdGF0ZSgzMDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMil7YW5pbWF0aW9uLWRlbGF5Oi0uMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBzb25uZXItZmFkZS1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfX1Aa2V5ZnJhbWVzIHNvbm5lci1zcGluezAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6LjE1fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5zb25uZXItbG9hZGluZy1iYXIsW2RhdGEtc29ubmVyLXRvYXN0XSxbZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDthbmltYXRpb246bm9uZSFpbXBvcnRhbnR9fS5zb25uZXItbG9hZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30uc29ubmVyLWxvYWRlcltkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZSgtNTAlLC01MCUpfSIpO2Z1bmN0aW9uIG41KCQpe3JldHVybiAkLmxhYmVsIT09dm9pZCAwfXZhciBCUT0zLE5RPSIyNHB4Iix6UT0iMTZweCIsdDY9NDAwMCxMUT0zNTYsSFE9MTQsVVE9NDUsQ1E9MjAwO2Z1bmN0aW9uIHkwKC4uLiQpe3JldHVybiAkLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9ZnVuY3Rpb24gT1EoJCl7bGV0W0osUV09JC5zcGxpdCgiLSIpLFg9W107aWYoSilYLnB1c2goSik7aWYoUSlYLnB1c2goUSk7cmV0dXJuIFh9dmFyIEZRPSgkKT0+e3ZhciBKLFEsWCxLLFkscSxHLEIsTjtsZXR7aW52ZXJ0OnosdG9hc3Q6Vix1bnN0eWxlZDpILGludGVyYWN0aW5nOkMsc2V0SGVpZ2h0czpBLHZpc2libGVUb2FzdHM6TCxoZWlnaHRzOlUsaW5kZXg6Rix0b2FzdHM6VyxleHBhbmRlZDpFLHJlbW92ZVRvYXN0OlAsZGVmYXVsdFJpY2hDb2xvcnM6eCxjbG9zZUJ1dHRvbjpELHN0eWxlOm4sY2FuY2VsQnV0dG9uU3R5bGU6UixhY3Rpb25CdXR0b25TdHlsZTpkLGNsYXNzTmFtZTppPSIiLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOnI9IiIsZHVyYXRpb246byxwb3NpdGlvbjphLGdhcDpMMSxleHBhbmRCeURlZmF1bHQ6bCxjbGFzc05hbWVzOm0saWNvbnM6WDEsY2xvc2VCdXR0b25BcmlhTGFiZWw6WjE9IkNsb3NlIHRvYXN0In09JCxbSDEsdF09Zi51c2VTdGF0ZShudWxsKSxbUTEscTFdPWYudXNlU3RhdGUobnVsbCksW2oscF09Zi51c2VTdGF0ZSghMSksW18saF09Zi51c2VTdGF0ZSghMSksW2csdl09Zi51c2VTdGF0ZSghMSksW1kxLEcxXT1mLnVzZVN0YXRlKCExKSxbdzEsVzFdPWYudXNlU3RhdGUoITEpLFtUMSxfMV09Zi51c2VTdGF0ZSgwKSxbUjEsTTFdPWYudXNlU3RhdGUoMCkscjE9Zi51c2VSZWYoVi5kdXJhdGlvbnx8b3x8dDYpLGoxPWYudXNlUmVmKG51bGwpLEYxPWYudXNlUmVmKG51bGwpLE4xPUY9PT0wLGExPUYrMTw9TCxmMT1WLnR5cGUsaTE9Vi5kaXNtaXNzaWJsZSE9PSExLHQxPVYuY2xhc3NOYW1lfHwiIixxMD1WLmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixHMD1mLnVzZU1lbW8oKCk9PlUuZmluZEluZGV4KChLMSk9PksxLnRvYXN0SWQ9PT1WLmlkKXx8MCxbVSxWLmlkXSksbDA9Zi51c2VNZW1vKCgpPT57dmFyIEsxO3JldHVybihLMT1WLmNsb3NlQnV0dG9uKSE9bnVsbD9LMTpEfSxbVi5jbG9zZUJ1dHRvbixEXSksdjE9Zi51c2VNZW1vKCgpPT5WLmR1cmF0aW9ufHxvfHx0NixbVi5kdXJhdGlvbixvXSksVjA9Zi51c2VSZWYoMCksSjA9Zi51c2VSZWYoMCksUDA9Zi51c2VSZWYoMCksbTE9Zi51c2VSZWYobnVsbCksW2UxLFIwXT1hLnNwbGl0KCItIikseTE9Zi51c2VNZW1vKCgpPT57cmV0dXJuIFUucmVkdWNlKChLMSxJLHUpPT57aWYodT49RzApcmV0dXJuIEsxO3JldHVybiBLMStJLmhlaWdodH0sMCl9LFtVLEcwXSksQjA9WFEoKSxIMD1WLmludmVydHx8eixEMT1mMT09PSJsb2FkaW5nIjtKMC5jdXJyZW50PWYudXNlTWVtbygoKT0+RzAqTDEreTEsW0cwLHkxXSksZi51c2VFZmZlY3QoKCk9PntyMS5jdXJyZW50PXYxfSxbdjFdKSxmLnVzZUVmZmVjdCgoKT0+e3AoITApfSxbXSksZi51c2VFZmZlY3QoKCk9PntsZXQgSzE9RjEuY3VycmVudDtpZihLMSl7bGV0IEk9SzEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiBNMShJKSxBKCh1KT0+W3t0b2FzdElkOlYuaWQsaGVpZ2h0OkkscG9zaXRpb246Vi5wb3NpdGlvbn0sLi4udV0pLCgpPT5BKCh1KT0+dS5maWx0ZXIoKHMpPT5zLnRvYXN0SWQhPT1WLmlkKSl9fSxbQSxWLmlkXSksZi51c2VMYXlvdXRFZmZlY3QoKCk9PntpZighailyZXR1cm47bGV0IEsxPUYxLmN1cnJlbnQsST1LMS5zdHlsZS5oZWlnaHQ7SzEuc3R5bGUuaGVpZ2h0PSJhdXRvIjtsZXQgdT1LMS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7SzEuc3R5bGUuaGVpZ2h0PUksTTEodSksQSgocyk9PntpZighcy5maW5kKChWMSk9PlYxLnRvYXN0SWQ9PT1WLmlkKSlyZXR1cm5be3RvYXN0SWQ6Vi5pZCxoZWlnaHQ6dSxwb3NpdGlvbjpWLnBvc2l0aW9ufSwuLi5zXTtlbHNlIHJldHVybiBzLm1hcCgoVjEpPT5WMS50b2FzdElkPT09Vi5pZD97Li4uVjEsaGVpZ2h0OnV9OlYxKX0pfSxbaixWLnRpdGxlLFYuZGVzY3JpcHRpb24sQSxWLmlkLFYuanN4LFYuYWN0aW9uLFYuY2FuY2VsXSk7bGV0IEUxPWYudXNlQ2FsbGJhY2soKCk9PntoKCEwKSxfMShKMC5jdXJyZW50KSxBKChLMSk9PksxLmZpbHRlcigoSSk9PkkudG9hc3RJZCE9PVYuaWQpKSxzZXRUaW1lb3V0KCgpPT57UChWKX0sQ1EpfSxbVixQLEEsSjBdKTtmLnVzZUVmZmVjdCgoKT0+e2lmKFYucHJvbWlzZSYmZjE9PT0ibG9hZGluZyJ8fFYuZHVyYXRpb249PT0xLzB8fFYudHlwZT09PSJsb2FkaW5nIilyZXR1cm47bGV0IEsxLEk9KCk9PntpZihQMC5jdXJyZW50PFYwLmN1cnJlbnQpe2xldCBzPW5ldyBEYXRlKCkuZ2V0VGltZSgpLVYwLmN1cnJlbnQ7cjEuY3VycmVudD1yMS5jdXJyZW50LXN9UDAuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKX0sdT0oKT0+e2lmKHIxLmN1cnJlbnQ9PT0xLzApcmV0dXJuO1YwLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCksSzE9c2V0VGltZW91dCgoKT0+e1Yub25BdXRvQ2xvc2U9PW51bGx8fFYub25BdXRvQ2xvc2UuY2FsbChWLFYpLEUxKCl9LHIxLmN1cnJlbnQpfTtpZihFfHxDfHxCMClJKCk7ZWxzZSB1KCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChLMSl9LFtFLEMsVixmMSxCMCxFMV0pLGYudXNlRWZmZWN0KCgpPT57aWYoVi5kZWxldGUpRTEoKSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpfSxbRTEsVi5kZWxldGVdKTtmdW5jdGlvbiBRMCgpe3ZhciBLMTtpZihYMT09bnVsbD92b2lkIDA6WDEubG9hZGluZyl7dmFyIEk7cmV0dXJuIGYuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0ubG9hZGVyLFY9PW51bGw/dm9pZCAwOihJPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkkubG9hZGVyLCJzb25uZXItbG9hZGVyIiksImRhdGEtdmlzaWJsZSI6ZjE9PT0ibG9hZGluZyJ9LFgxLmxvYWRpbmcpfXJldHVybiBmLmNyZWF0ZUVsZW1lbnQodEose2NsYXNzTmFtZTp5MChtPT1udWxsP3ZvaWQgMDptLmxvYWRlcixWPT1udWxsP3ZvaWQgMDooSzE9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6SzEubG9hZGVyKSx2aXNpYmxlOmYxPT09ImxvYWRpbmcifSl9bGV0IE4wPVYuaWNvbnx8KFgxPT1udWxsP3ZvaWQgMDpYMVtmMV0pfHxhSihmMSk7dmFyIFUwLGswO3JldHVybiBmLmNyZWF0ZUVsZW1lbnQoImxpIix7dGFiSW5kZXg6MCxyZWY6RjEsY2xhc3NOYW1lOnkwKGksdDEsbT09bnVsbD92b2lkIDA6bS50b2FzdCxWPT1udWxsP3ZvaWQgMDooSj1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpKLnRvYXN0LG09PW51bGw/dm9pZCAwOm0uZGVmYXVsdCxtPT1udWxsP3ZvaWQgMDptW2YxXSxWPT1udWxsP3ZvaWQgMDooUT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpRW2YxXSksImRhdGEtc29ubmVyLXRvYXN0IjoiIiwiZGF0YS1yaWNoLWNvbG9ycyI6KFUwPVYucmljaENvbG9ycykhPW51bGw/VTA6eCwiZGF0YS1zdHlsZWQiOiFCb29sZWFuKFYuanN4fHxWLnVuc3R5bGVkfHxIKSwiZGF0YS1tb3VudGVkIjpqLCJkYXRhLXByb21pc2UiOkJvb2xlYW4oVi5wcm9taXNlKSwiZGF0YS1zd2lwZWQiOncxLCJkYXRhLXJlbW92ZWQiOl8sImRhdGEtdmlzaWJsZSI6YTEsImRhdGEteS1wb3NpdGlvbiI6ZTEsImRhdGEteC1wb3NpdGlvbiI6UjAsImRhdGEtaW5kZXgiOkYsImRhdGEtZnJvbnQiOk4xLCJkYXRhLXN3aXBpbmciOmcsImRhdGEtZGlzbWlzc2libGUiOmkxLCJkYXRhLXR5cGUiOmYxLCJkYXRhLWludmVydCI6SDAsImRhdGEtc3dpcGUtb3V0IjpZMSwiZGF0YS1zd2lwZS1kaXJlY3Rpb24iOlExLCJkYXRhLWV4cGFuZGVkIjpCb29sZWFuKEV8fGwmJmopLCJkYXRhLXRlc3RpZCI6Vi50ZXN0SWQsc3R5bGU6eyItLWluZGV4IjpGLCItLXRvYXN0cy1iZWZvcmUiOkYsIi0tei1pbmRleCI6Vy5sZW5ndGgtRiwiLS1vZmZzZXQiOmAke18/VDE6SjAuY3VycmVudH1weGAsIi0taW5pdGlhbC1oZWlnaHQiOmw/ImF1dG8iOmAke1IxfXB4YCwuLi5uLC4uLlYuc3R5bGV9LG9uRHJhZ0VuZDooKT0+e3YoITEpLHQobnVsbCksbTEuY3VycmVudD1udWxsfSxvblBvaW50ZXJEb3duOihLMSk9PntpZihLMS5idXR0b249PT0yKXJldHVybjtpZihEMXx8IWkxKXJldHVybjtpZihqMS5jdXJyZW50PW5ldyBEYXRlLF8xKEowLmN1cnJlbnQpLEsxLnRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShLMS5wb2ludGVySWQpLEsxLnRhcmdldC50YWdOYW1lPT09IkJVVFRPTiIpcmV0dXJuO3YoITApLG0xLmN1cnJlbnQ9e3g6SzEuY2xpZW50WCx5OksxLmNsaWVudFl9fSxvblBvaW50ZXJVcDooKT0+e3ZhciBLMSxJLHU7aWYoWTF8fCFpMSlyZXR1cm47bTEuY3VycmVudD1udWxsO2xldCBzPU51bWJlcigoKEsxPUYxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpLMS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItLXN3aXBlLWFtb3VudC14IikucmVwbGFjZSgicHgiLCIiKSl8fDApLEMxPU51bWJlcigoKEk9RjEuY3VycmVudCk9PW51bGw/dm9pZCAwOkkuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteSIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxWMT1uZXcgRGF0ZSgpLmdldFRpbWUoKS0oKHU9ajEuY3VycmVudCk9PW51bGw/dm9pZCAwOnUuZ2V0VGltZSgpKSxCMT1IMT09PSJ4Ij9zOkMxLGgxPU1hdGguYWJzKEIxKS9WMTtpZihNYXRoLmFicyhCMSk+PVVRfHxoMT4wLjExKXtpZihfMShKMC5jdXJyZW50KSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpLEgxPT09IngiKXExKHM+MD8icmlnaHQiOiJsZWZ0Iik7ZWxzZSBxMShDMT4wPyJkb3duIjoidXAiKTtFMSgpLEcxKCEwKTtyZXR1cm59ZWxzZXt2YXIgbDEscDE7KGwxPUYxLmN1cnJlbnQpPT1udWxsfHxsMS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsIjBweCIpLChwMT1GMS5jdXJyZW50KT09bnVsbHx8cDEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXkiLCIwcHgiKX1XMSghMSksdighMSksdChudWxsKX0sb25Qb2ludGVyTW92ZTooSzEpPT57dmFyIEksdSxzO2lmKCFtMS5jdXJyZW50fHwhaTEpcmV0dXJuO2lmKCgoST13aW5kb3cuZ2V0U2VsZWN0aW9uKCkpPT1udWxsP3ZvaWQgMDpJLnRvU3RyaW5nKCkubGVuZ3RoKT4wKXJldHVybjtsZXQgVjE9SzEuY2xpZW50WS1tMS5jdXJyZW50LnksQjE9SzEuY2xpZW50WC1tMS5jdXJyZW50Lng7dmFyIGgxO2xldCBsMT0oaDE9JC5zd2lwZURpcmVjdGlvbnMpIT1udWxsP2gxOk9RKGEpO2lmKCFIMSYmKE1hdGguYWJzKEIxKT4xfHxNYXRoLmFicyhWMSk+MSkpdChNYXRoLmFicyhCMSk+TWF0aC5hYnMoVjEpPyJ4IjoieSIpO2xldCBwMT17eDowLHk6MH0sQzA9KG4xKT0+e3JldHVybiAxLygxLjUrTWF0aC5hYnMobjEpLzIwKX07aWYoSDE9PT0ieSIpe2lmKGwxLmluY2x1ZGVzKCJ0b3AiKXx8bDEuaW5jbHVkZXMoImJvdHRvbSIpKWlmKGwxLmluY2x1ZGVzKCJ0b3AiKSYmVjE8MHx8bDEuaW5jbHVkZXMoImJvdHRvbSIpJiZWMT4wKXAxLnk9VjE7ZWxzZXtsZXQgbjE9VjEqQzAoVjEpO3AxLnk9TWF0aC5hYnMobjEpPE1hdGguYWJzKFYxKT9uMTpWMX19ZWxzZSBpZihIMT09PSJ4Iil7aWYobDEuaW5jbHVkZXMoImxlZnQiKXx8bDEuaW5jbHVkZXMoInJpZ2h0IikpaWYobDEuaW5jbHVkZXMoImxlZnQiKSYmQjE8MHx8bDEuaW5jbHVkZXMoInJpZ2h0IikmJkIxPjApcDEueD1CMTtlbHNle2xldCBuMT1CMSpDMChCMSk7cDEueD1NYXRoLmFicyhuMSk8TWF0aC5hYnMoQjEpP24xOkIxfX1pZihNYXRoLmFicyhwMS54KT4wfHxNYXRoLmFicyhwMS55KT4wKVcxKCEwKTsodT1GMS5jdXJyZW50KT09bnVsbHx8dS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsYCR7cDEueH1weGApLChzPUYxLmN1cnJlbnQpPT1udWxsfHxzLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IixgJHtwMS55fXB4YCl9fSxsMCYmIVYuanN4JiZmMSE9PSJsb2FkaW5nIj9mLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJhcmlhLWxhYmVsIjpaMSwiZGF0YS1kaXNhYmxlZCI6RDEsImRhdGEtY2xvc2UtYnV0dG9uIjohMCxvbkNsaWNrOkQxfHwhaTE/KCk9Pnt9OigpPT57RTEoKSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpfSxjbGFzc05hbWU6eTAobT09bnVsbD92b2lkIDA6bS5jbG9zZUJ1dHRvbixWPT1udWxsP3ZvaWQgMDooWD1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpYLmNsb3NlQnV0dG9uKX0sKGswPVgxPT1udWxsP3ZvaWQgMDpYMS5jbG9zZSkhPW51bGw/azA6WlEpOm51bGwsKGYxfHxWLmljb258fFYucHJvbWlzZSkmJlYuaWNvbiE9PW51bGwmJigoWDE9PW51bGw/dm9pZCAwOlgxW2YxXSkhPT1udWxsfHxWLmljb24pP2YuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0uaWNvbixWPT1udWxsP3ZvaWQgMDooSz1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpLLmljb24pfSxWLnByb21pc2V8fFYudHlwZT09PSJsb2FkaW5nIiYmIVYuaWNvbj9WLmljb258fFEwKCk6bnVsbCxWLnR5cGUhPT0ibG9hZGluZyI/TjA6bnVsbCk6bnVsbCxmLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWNvbnRlbnQiOiIiLGNsYXNzTmFtZTp5MChtPT1udWxsP3ZvaWQgMDptLmNvbnRlbnQsVj09bnVsbD92b2lkIDA6KFk9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WS5jb250ZW50KX0sZi5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS10aXRsZSI6IiIsY2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0udGl0bGUsVj09bnVsbD92b2lkIDA6KHE9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6cS50aXRsZSl9LFYuanN4P1YuanN4OnR5cGVvZiBWLnRpdGxlPT09ImZ1bmN0aW9uIj9WLnRpdGxlKCk6Vi50aXRsZSksVi5kZXNjcmlwdGlvbj9mLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWRlc2NyaXB0aW9uIjoiIixjbGFzc05hbWU6eTAocixxMCxtPT1udWxsP3ZvaWQgMDptLmRlc2NyaXB0aW9uLFY9PW51bGw/dm9pZCAwOihHPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuZGVzY3JpcHRpb24pfSx0eXBlb2YgVi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/Vi5kZXNjcmlwdGlvbigpOlYuZGVzY3JpcHRpb24pOm51bGwpLGYuaXNWYWxpZEVsZW1lbnQoVi5jYW5jZWwpP1YuY2FuY2VsOlYuY2FuY2VsJiZuNShWLmNhbmNlbCk/Zi5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6Vi5jYW5jZWxCdXR0b25TdHlsZXx8UixvbkNsaWNrOihLMSk9PntpZighbjUoVi5jYW5jZWwpKXJldHVybjtpZighaTEpcmV0dXJuO1YuY2FuY2VsLm9uQ2xpY2s9PW51bGx8fFYuY2FuY2VsLm9uQ2xpY2suY2FsbChWLmNhbmNlbCxLMSksRTEoKX0sY2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0uY2FuY2VsQnV0dG9uLFY9PW51bGw/dm9pZCAwOihCPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuY2FuY2VsQnV0dG9uKX0sVi5jYW5jZWwubGFiZWwpOm51bGwsZi5pc1ZhbGlkRWxlbWVudChWLmFjdGlvbik/Vi5hY3Rpb246Vi5hY3Rpb24mJm41KFYuYWN0aW9uKT9mLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTpWLmFjdGlvbkJ1dHRvblN0eWxlfHxkLG9uQ2xpY2s6KEsxKT0+e2lmKCFuNShWLmFjdGlvbikpcmV0dXJuO2lmKFYuYWN0aW9uLm9uQ2xpY2s9PW51bGx8fFYuYWN0aW9uLm9uQ2xpY2suY2FsbChWLmFjdGlvbixLMSksSzEuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47RTEoKX0sY2xhc3NOYW1lOnkwKG09PW51bGw/dm9pZCAwOm0uYWN0aW9uQnV0dG9uLFY9PW51bGw/dm9pZCAwOihOPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOk4uYWN0aW9uQnV0dG9uKX0sVi5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBlNigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIEFRKCQsSil7bGV0IFE9e307cmV0dXJuWyQsSl0uZm9yRWFjaCgoWCxLKT0+e2xldCBZPUs9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLEc9WT96UTpOUTtmdW5jdGlvbiBCKE4pe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoeik9PntRW2Ake3F9LSR7en1gXT10eXBlb2YgTj09PSJudW1iZXIiP2Ake059cHhgOk59KX1pZih0eXBlb2YgWD09PSJudW1iZXIifHx0eXBlb2YgWD09PSJzdHJpbmciKUIoWCk7ZWxzZSBpZih0eXBlb2YgWD09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTik9PntpZihYW05dPT09dm9pZCAwKVFbYCR7cX0tJHtOfWBdPUc7ZWxzZSBRW2Ake3F9LSR7Tn1gXT10eXBlb2YgWFtOXT09PSJudW1iZXIiP2Ake1hbTl19cHhgOlhbTl19KTtlbHNlIEIoRyl9KSxRfXZhciBKND1mLmZvcndhcmRSZWYoZnVuY3Rpb24oSixRKXtsZXR7aWQ6WCxpbnZlcnQ6Syxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpHLGNsb3NlQnV0dG9uOkIsY2xhc3NOYW1lOk4sb2Zmc2V0OnosbW9iaWxlT2Zmc2V0OlYsdGhlbWU6SD0ibGlnaHQiLHJpY2hDb2xvcnM6QyxkdXJhdGlvbjpBLHN0eWxlOkwsdmlzaWJsZVRvYXN0czpVPUJRLHRvYXN0T3B0aW9uczpGLGRpcjpXPWU2KCksZ2FwOkU9SFEsaWNvbnM6UCxjb250YWluZXJBcmlhTGFiZWw6eD0iTm90aWZpY2F0aW9ucyJ9PUosW0Qsbl09Zi51c2VTdGF0ZShbXSksUj1mLnVzZU1lbW8oKCk9PntpZihYKXJldHVybiBELmZpbHRlcigoaik9PmoudG9hc3RlcklkPT09WCk7cmV0dXJuIEQuZmlsdGVyKChqKT0+IWoudG9hc3RlcklkKX0sW0QsWF0pLGQ9Zi51c2VNZW1vKCgpPT57cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChbWV0uY29uY2F0KFIuZmlsdGVyKChqKT0+ai5wb3NpdGlvbikubWFwKChqKT0+ai5wb3NpdGlvbikpKSl9LFtSLFldKSxbaSxyXT1mLnVzZVN0YXRlKFtdKSxbbyxhXT1mLnVzZVN0YXRlKCExKSxbTDEsbF09Zi51c2VTdGF0ZSghMSksW20sWDFdPWYudXNlU3RhdGUoSCE9PSJzeXN0ZW0iP0g6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz8iZGFyayI6ImxpZ2h0IjoibGlnaHQiKSxaMT1mLnVzZVJlZihudWxsKSxIMT1xLmpvaW4oIisiKS5yZXBsYWNlKC9LZXkvZywiIikucmVwbGFjZSgvRGlnaXQvZywiIiksdD1mLnVzZVJlZihudWxsKSxRMT1mLnVzZVJlZighMSkscTE9Zi51c2VDYWxsYmFjaygoaik9PntuKChwKT0+e3ZhciBfO2lmKCEoKF89cC5maW5kKChoKT0+aC5pZD09PWouaWQpKT09bnVsbD92b2lkIDA6Xy5kZWxldGUpKUswLmRpc21pc3Moai5pZCk7cmV0dXJuIHAuZmlsdGVyKCh7aWQ6aH0pPT5oIT09ai5pZCl9KX0sW10pO3JldHVybiBmLnVzZUVmZmVjdCgoKT0+e3JldHVybiBLMC5zdWJzY3JpYmUoKGopPT57aWYoai5kaXNtaXNzKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuKChwKT0+cC5tYXAoKF8pPT5fLmlkPT09ai5pZD97Li4uXyxkZWxldGU6ITB9Ol8pKX0pO3JldHVybn1zZXRUaW1lb3V0KCgpPT57Zi5mbHVzaFN5bmMoKCk9PntuKChwKT0+e2xldCBfPXAuZmluZEluZGV4KChoKT0+aC5pZD09PWouaWQpO2lmKF8hPT0tMSlyZXR1cm5bLi4ucC5zbGljZSgwLF8pLHsuLi5wW19dLC4uLmp9LC4uLnAuc2xpY2UoXysxKV07cmV0dXJuW2osLi4ucF19KX0pfSl9KX0sW0RdKSxmLnVzZUVmZmVjdCgoKT0+e2lmKEghPT0ic3lzdGVtIil7WDEoSCk7cmV0dXJufWlmKEg9PT0ic3lzdGVtIilpZih3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzKVgxKCJkYXJrIik7ZWxzZSBYMSgibGlnaHQiKTtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IGo9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKTt0cnl7ai5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCh7bWF0Y2hlczpwfSk9PntpZihwKVgxKCJkYXJrIik7ZWxzZSBYMSgibGlnaHQiKX0pfWNhdGNoKHApe2ouYWRkTGlzdGVuZXIoKHttYXRjaGVzOl99KT0+e3RyeXtpZihfKVgxKCJkYXJrIik7ZWxzZSBYMSgibGlnaHQiKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfX0pfX0sW0hdKSxmLnVzZUVmZmVjdCgoKT0+e2lmKEQubGVuZ3RoPD0xKWEoITEpfSxbRF0pLGYudXNlRWZmZWN0KCgpPT57bGV0IGo9KHApPT57dmFyIF87aWYocS5ldmVyeSgodik9PnBbdl18fHAuY29kZT09PXYpKXt2YXIgZzthKCEwKSwoZz1aMS5jdXJyZW50KT09bnVsbHx8Zy5mb2N1cygpfWlmKHAuY29kZT09PSJFc2NhcGUiJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PVoxLmN1cnJlbnR8fCgoXz1aMS5jdXJyZW50KT09bnVsbD92b2lkIDA6Xy5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKWEoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaiksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGopfSxbcV0pLGYudXNlRWZmZWN0KCgpPT57aWYoWjEuY3VycmVudClyZXR1cm4oKT0+e2lmKHQuY3VycmVudCl0LmN1cnJlbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0LmN1cnJlbnQ9bnVsbCxRMS5jdXJyZW50PSExfX0sW1oxLmN1cnJlbnRdKSxmLmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLHtyZWY6USwiYXJpYS1sYWJlbCI6YCR7eH0gJHtIMX1gLHRhYkluZGV4Oi0xLCJhcmlhLWxpdmUiOiJwb2xpdGUiLCJhcmlhLXJlbGV2YW50IjoiYWRkaXRpb25zIHRleHQiLCJhcmlhLWF0b21pYyI6ImZhbHNlIixzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc6ITB9LGQubWFwKChqLHApPT57dmFyIF87bGV0W2gsZ109ai5zcGxpdCgiLSIpO2lmKCFSLmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gZi5jcmVhdGVFbGVtZW50KCJvbCIse2tleTpqLGRpcjpXPT09ImF1dG8iP2U2KCk6Vyx0YWJJbmRleDotMSxyZWY6WjEsY2xhc3NOYW1lOk4sImRhdGEtc29ubmVyLXRvYXN0ZXIiOiEwLCJkYXRhLXNvbm5lci10aGVtZSI6bSwiZGF0YS15LXBvc2l0aW9uIjpoLCJkYXRhLXgtcG9zaXRpb24iOmcsc3R5bGU6eyItLWZyb250LXRvYXN0LWhlaWdodCI6YCR7KChfPWlbMF0pPT1udWxsP3ZvaWQgMDpfLmhlaWdodCl8fDB9cHhgLCItLXdpZHRoIjpgJHtMUX1weGAsIi0tZ2FwIjpgJHtFfXB4YCwuLi5MLC4uLkFRKHosVil9LG9uQmx1cjoodik9PntpZihRMS5jdXJyZW50JiYhdi5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKHYucmVsYXRlZFRhcmdldCkpe2lmKFExLmN1cnJlbnQ9ITEsdC5jdXJyZW50KXQuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLHQuY3VycmVudD1udWxsfX0sb25Gb2N1czoodik9PntpZih2LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ2LnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47aWYoIVExLmN1cnJlbnQpUTEuY3VycmVudD0hMCx0LmN1cnJlbnQ9di5yZWxhdGVkVGFyZ2V0fSxvbk1vdXNlRW50ZXI6KCk9PmEoITApLG9uTW91c2VNb3ZlOigpPT5hKCEwKSxvbk1vdXNlTGVhdmU6KCk9PntpZighTDEpYSghMSl9LG9uRHJhZ0VuZDooKT0+YSghMSksb25Qb2ludGVyRG93bjoodik9PntpZih2LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ2LnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47bCghMCl9LG9uUG9pbnRlclVwOigpPT5sKCExKX0sUi5maWx0ZXIoKHYpPT4hdi5wb3NpdGlvbiYmcD09PTB8fHYucG9zaXRpb249PT1qKS5tYXAoKHYsWTEpPT57dmFyIEcxLHcxO3JldHVybiBmLmNyZWF0ZUVsZW1lbnQoRlEse2tleTp2LmlkLGljb25zOlAsaW5kZXg6WTEsdG9hc3Q6dixkZWZhdWx0UmljaENvbG9yczpDLGR1cmF0aW9uOihHMT1GPT1udWxsP3ZvaWQgMDpGLmR1cmF0aW9uKSE9bnVsbD9HMTpBLGNsYXNzTmFtZTpGPT1udWxsP3ZvaWQgMDpGLmNsYXNzTmFtZSxkZXNjcmlwdGlvbkNsYXNzTmFtZTpGPT1udWxsP3ZvaWQgMDpGLmRlc2NyaXB0aW9uQ2xhc3NOYW1lLGludmVydDpLLHZpc2libGVUb2FzdHM6VSxjbG9zZUJ1dHRvbjoodzE9Rj09bnVsbD92b2lkIDA6Ri5jbG9zZUJ1dHRvbikhPW51bGw/dzE6QixpbnRlcmFjdGluZzpMMSxwb3NpdGlvbjpqLHN0eWxlOkY9PW51bGw/dm9pZCAwOkYuc3R5bGUsdW5zdHlsZWQ6Rj09bnVsbD92b2lkIDA6Ri51bnN0eWxlZCxjbGFzc05hbWVzOkY9PW51bGw/dm9pZCAwOkYuY2xhc3NOYW1lcyxjYW5jZWxCdXR0b25TdHlsZTpGPT1udWxsP3ZvaWQgMDpGLmNhbmNlbEJ1dHRvblN0eWxlLGFjdGlvbkJ1dHRvblN0eWxlOkY9PW51bGw/dm9pZCAwOkYuYWN0aW9uQnV0dG9uU3R5bGUsY2xvc2VCdXR0b25BcmlhTGFiZWw6Rj09bnVsbD92b2lkIDA6Ri5jbG9zZUJ1dHRvbkFyaWFMYWJlbCxyZW1vdmVUb2FzdDpxMSx0b2FzdHM6Ui5maWx0ZXIoKFcxKT0+VzEucG9zaXRpb249PXYucG9zaXRpb24pLGhlaWdodHM6aS5maWx0ZXIoKFcxKT0+VzEucG9zaXRpb249PXYucG9zaXRpb24pLHNldEhlaWdodHM6cixleHBhbmRCeURlZmF1bHQ6RyxnYXA6RSxleHBhbmRlZDpvLHN3aXBlRGlyZWN0aW9uczpKLnN3aXBlRGlyZWN0aW9uc30pfSkpfSkpfSk7ZnVuY3Rpb24gUTQoKXtyZXR1cm4gWihKNCx7dGhlbWU6ImRhcmsiLHBvc2l0aW9uOiJib3R0b20tY2VudGVyIix2aXNpYmxlVG9hc3RzOjQsZ2FwOjgsb2Zmc2V0Ontib3R0b206MjR9LHRvYXN0T3B0aW9uczp7dW5zdHlsZWQ6ITB9LHN0eWxlOnt6SW5kZXg6MjE0NzQ4MzY0N30sY29udGFpbmVyQXJpYUxhYmVsOiJzZXJ2ZS1zaW0gbm90aWZpY2F0aW9ucyJ9KX1mdW5jdGlvbiBaNCh7dG9hc3Q6JH0pe2xldCBKPSQuc3RhdHVzPT09ImVycm9yIixRPSQuc3RhdHVzPT09InVwbG9hZGluZyIsWD1RJiYkLnByb2dyZXNzIT09bnVsbCxLPSQucHJvZ3Jlc3MhPW51bGw/TWF0aC5yb3VuZCgkLnByb2dyZXNzKjEwMCk6MDtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoidXBsb2FkLXRvYXN0IixjbGFzc05hbWU6YGZsZXggdy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSBmbGV4LWNvbCBnYXAtMS41IHB4LTMgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldICR7Sj8ic2VsZWN0LXRleHQgY3Vyc29yLXRleHQiOiJzZWxlY3Qtbm9uZSBjdXJzb3ItZGVmYXVsdCJ9YCxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOlE/IiNhNWI0ZmMiOiQuc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksWigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbUSYmWCYmYFVwbG9hZGluZyAkeyQubmFtZX3igKYgJHtLfSVgLFEmJiFYJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHskLm5hbWV94oCmYDpgQWRkaW5nICR7JC5uYW1lfeKApmApLCQuc3RhdHVzPT09InN1Y2Nlc3MiJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAkeyQubmFtZX1gOmBBZGRlZCAkeyQubmFtZX0gdG8gUGhvdG9zYCksSiYmYCR7JC5uYW1lfTogJHskLm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLFEmJlooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46WD9aKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7S30lYH19KTpaKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0pfWZ1bmN0aW9uIFg0KHt3aWR0aDokLGhlaWdodDpKLHZpc2libGU6UX0pe3JldHVybiBaKCJkaXYiLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LTMgYm90dG9tLTMgei0yMCBwb2ludGVyLWV2ZW50cy1ub25lIHNlbGVjdC1ub25lIHJvdW5kZWQtbGcgcHgtMi41IHB5LTEgdGV4dC1bMTEuNXB4XSBmb250LW1vbm8gbGVhZGluZy1ub25lIHRyYWNraW5nLXdpZGUgdGV4dC13aGl0ZS85NSBiZy1wYW5lbC1iZy10cmFuc2x1Y2VudCBzaGFkb3ctWzBfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMTgpLDBfNnB4XzE4cHhfcmdiYSgwLDAsMCwwLjI4KSxpbnNldF8wXzBfMF8xcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjA2KV0gYmFja2Ryb3AtYmx1ci1tZCBiYWNrZHJvcC1zYXR1cmF0ZS0xNTAgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntvcGFjaXR5OlE/MTowLHRyYW5zZm9ybTpgdHJhbnNsYXRlWSgke1E/MDo0fXB4KSBzY2FsZSgke1E/MTowLjk2fSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDE4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIHRyYW5zZm9ybSAyMjBtcyBjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSJ9LGNoaWxkcmVuOltNYXRoLnJvdW5kKCQpLCIgIixaKCJzcGFuIix7Y2xhc3NOYW1lOiJvcGFjaXR5LTYwIG14LTAuNSIsY2hpbGRyZW46IsOXIn0pLCIgIixNYXRoLnJvdW5kKEopXX0pfWZ1bmN0aW9uIEs0KHtzdHJlYW1pbmc6JH0pe2xldCBKPSQ/IiM0YWRlODAiOiIjOGU4ZTkzIjtyZXR1cm4gWigic3BhbiIseyJkYXRhLXRlc3RpZCI6InN0cmVhbS1zdGF0dXMtcGlsbCIsY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLVs1cHhdIHRleHQtWzEycHhdIGZvbnQtbW9ubyBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntjb2xvcjpKfSwiYXJpYS1saXZlIjoicG9saXRlIixjaGlsZHJlbjpbWigic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xOHNfZWFzZV0iLHN0eWxlOntiYWNrZ3JvdW5kOkp9fSksJD8ibGl2ZSI6ImNvbm5lY3RpbmciXX0pfWZ1bmN0aW9uIE1RKCQsSixRKXtsZXQgWD1RLmxhdCpNYXRoLlBJLzE4MCxLPSgkLVEubGF0KSpNYXRoLlBJLzE4MDtyZXR1cm57eDooSi1RLmxuZykqTWF0aC5QSS8xODAqTWF0aC5jb3MoWCkqNjM3MTAwMCx6Oi1LKjYzNzEwMDB9fWZ1bmN0aW9uIGtRKCQsSixRKXtsZXQgWD1RLmxhdCpNYXRoLlBJLzE4MCxLPS1KLzYzNzEwMDAqKDE4MC9NYXRoLlBJKSxZPSQvKDYzNzEwMDAqTWF0aC5jb3MoWCkpKigxODAvTWF0aC5QSSk7cmV0dXJue2xhdDpRLmxhdCtLLGxuZzpRLmxuZytZfX1mdW5jdGlvbiBXUSgkLEosUSxYLEspe2xldCBZPUsqSyxxPVkqSyxHPShCLE4seixWKT0+MC41KigyKk4rKC1CK3opKksrKDIqQi01Kk4rNCp6LVYpKlkrKC1CKzMqTi0zKnorVikqcSk7cmV0dXJue3g6RygkLngsSi54LFEueCxYLngpLHo6RygkLnosSi56LFEueixYLnopLHk6RygkLnksSi55LFEueSxYLnkpLHJhd0FsdDpHKCQucmF3QWx0LEoucmF3QWx0LFEucmF3QWx0LFgucmF3QWx0KX19ZnVuY3Rpb24gX1EoJCxKLFEpe2lmKCQubGVuZ3RoPDIpcmV0dXJuICQuc2xpY2UoKTtsZXQgWD1bXSxLPSQubGVuZ3RoLFk9UT9LOkstMTtmb3IobGV0IHE9MDtxPFk7cSsrKXtsZXQgRz0kW1E/KHEtMStLKSVLOk1hdGgubWF4KDAscS0xKV0sQj0kW3ElS10sTj0kWyhxKzEpJUtdLHo9JFtRPyhxKzIpJUs6TWF0aC5taW4oSy0xLHErMildLFY9Ti54LUIueCxIPU4uei1CLnosQz1NYXRoLmh5cG90KFYsSCksQT1NYXRoLm1heCgyLE1hdGguY2VpbChDL0opKTtmb3IobGV0IEw9MDtMPEE7TCsrKXtsZXQgVT1ML0E7WC5wdXNoKFdRKEcsQixOLHosVSkpfX1pZighUSlYLnB1c2goJFtLLTFdKTtyZXR1cm4gWH1mdW5jdGlvbiBZNCgkKXtpZigkLndheXBvaW50cy5sZW5ndGg8Mil0aHJvdyBFcnJvcihgVHJhaWwgJHskLmlkfSBuZWVkcyBhdCBsZWFzdCAyIHdheXBvaW50c2ApO2xldCBKPXtsYXQ6JC53YXlwb2ludHMucmVkdWNlKChMLFUpPT5MK1UubGF0LDApLyQud2F5cG9pbnRzLmxlbmd0aCxsbmc6JC53YXlwb2ludHMucmVkdWNlKChMLFUpPT5MK1UubG5nLDApLyQud2F5cG9pbnRzLmxlbmd0aH0sUT0kLndheXBvaW50cy5tYXAoKEwpPT5MLmFsdD8/MCksWD1NYXRoLm1pbiguLi5RKSxLPU1hdGgubWF4KC4uLlEpLFk9JC53YXlwb2ludHMubWFwKChMKT0+e2xldHt4OlUsejpGfT1NUShMLmxhdCxMLmxuZyxKKSxXPUwuYWx0Pz8wO3JldHVybnt4OlUsejpGLHk6Vy1YLHJhd0FsdDpXfX0pLHE9X1EoWSw4LCEhJC5sb29wKSxHPVtdLEI9MDtmb3IobGV0IEw9MDtMPHEubGVuZ3RoO0wrKyl7bGV0IFU9cVtMXTtpZihMPjApe2xldCBQPXFbTC0xXTtCKz1NYXRoLmh5cG90KFUueC1QLngsVS56LVAueixVLnktUC55KX1sZXR7bGF0OkYsbG5nOld9PWtRKFUueCxVLnosSiksRT1NYXRoLm1heCgwLFUueSk7Ry5wdXNoKHt4OlUueCx6OlUueix5OkUsYXJjOkIsbGF0OkYsbG5nOld9KX1sZXQgTj0xLzAsej0tMS8wLFY9MS8wLEg9LTEvMCxDPTEvMCxBPS0xLzA7Zm9yKGxldCBMIG9mIEcpe2lmKEwueDxOKU49TC54O2lmKEwueD56KXo9TC54O2lmKEwuejxWKVY9TC56O2lmKEwuej5IKUg9TC56O2lmKEwueTxDKUM9TC55O2lmKEwueT5BKUE9TC55fXJldHVybnt0cmFpbDokLG9yaWdpbjpKLHBvaW50czpHLHRvdGFsRGlzdGFuY2U6R1tHLmxlbmd0aC0xXS5hcmMsYm91bmRzOnt4OltOLHpdLHk6W0MsQV0sejpbVixIXX0scmF3TWluQWx0OlgscmF3TWF4QWx0Okt9fWZ1bmN0aW9uIGUwKCQsSil7bGV0IFE9JC50b3RhbERpc3RhbmNlO2lmKFE9PT0wKXJldHVybiAkLnBvaW50c1swXTtsZXQgWD1KO2lmKCQudHJhaWwubG9vcClYPShYJVErUSklUTtlbHNle2lmKFg8PTApcmV0dXJuICQucG9pbnRzWzBdO2lmKFg+PVEpcmV0dXJuICQucG9pbnRzWyQucG9pbnRzLmxlbmd0aC0xXX1sZXQgSz0wLFk9JC5wb2ludHMubGVuZ3RoLTE7d2hpbGUoSysxPFkpe2xldCB6PUsrWT4+PjE7aWYoJC5wb2ludHNbel0uYXJjPD1YKUs9ejtlbHNlIFk9en1sZXQgcT0kLnBvaW50c1tLXSxHPSQucG9pbnRzW1ldLEI9Ry5hcmMtcS5hcmMsTj1CPT09MD8wOihYLXEuYXJjKS9CO3JldHVybnt4OnEueCsoRy54LXEueCkqTix6OnEueisoRy56LXEueikqTix5OnEueSsoRy55LXEueSkqTixhcmM6WCxsYXQ6cS5sYXQrKEcubGF0LXEubGF0KSpOLGxuZzpxLmxuZysoRy5sbmctcS5sbmcpKk59fWZ1bmN0aW9uIFk4KCQpe3N3aXRjaCgkKXtjYXNlIndhbGsiOnJldHVybiAxLjQ7Y2FzZSJydW4iOnJldHVybiAzO2Nhc2UiY3ljbGUiOnJldHVybiA1LjU7Y2FzZSJkcml2ZSI6cmV0dXJuIDEzLjR9fXZhciBEUT1be2xhdDozNy4zMzI3Mixsbmc6LTEyMi4wMDgzMyxhbHQ6NDl9LHtsYXQ6MzcuMzMzMDksbG5nOi0xMjIuMDA3MzUsYWx0OjQ4fSx7bGF0OjM3LjMzMzczLGxuZzotMTIyLjAwNjYzLGFsdDo0OX0se2xhdDozNy4zMzQ1NCxsbmc6LTEyMi4wMDYyNyxhbHQ6NDl9LHtsYXQ6MzcuMzM1NCxsbmc6LTEyMi4wMDYzMyxhbHQ6NDl9LHtsYXQ6MzcuMzM2MTgsbG5nOi0xMjIuMDA2NzksYWx0OjQ1fSx7bGF0OjM3LjMzNjc1LGxuZzotMTIyLjAwNzU5LGFsdDo0NX0se2xhdDozNy4zMzcwNCxsbmc6LTEyMi4wMDg2MSxhbHQ6NDZ9LHtsYXQ6MzcuMzM2OTgsbG5nOi0xMjIuMDA5NjksYWx0OjQ4fSx7bGF0OjM3LjMzNjYyLGxuZzotMTIyLjAxMDY2LGFsdDo0OH0se2xhdDozNy4zMzU5OCxsbmc6LTEyMi4wMTEzOCxhbHQ6NDl9LHtsYXQ6MzcuMzM1MTcsbG5nOi0xMjIuMDExNzQsYWx0OjUwfSx7bGF0OjM3LjMzNDMxLGxuZzotMTIyLjAxMTY5LGFsdDo1MH0se2xhdDozNy4zMzM1NCxsbmc6LTEyMi4wMTEyMixhbHQ6NTB9LHtsYXQ6MzcuMzMyOTYsbG5nOi0xMjIuMDEwNDIsYWx0OjUxfSx7bGF0OjM3LjMzMjY4LGxuZzotMTIyLjAwOTQsYWx0OjUwfV0sUFE9W3tsYXQ6MzcuODMyMTIsbG5nOi0xMjIuNDgwNjUsYWx0OjMwfSx7bGF0OjM3LjgyOTM3LGxuZzotMTIyLjQ3OTc0LGFsdDozMH0se2xhdDozNy44MjY0OSxsbmc6LTEyMi40Nzk0LGFsdDozMH0se2xhdDozNy44MjM2Mixsbmc6LTEyMi40NzkwNyxhbHQ6NDV9LHtsYXQ6MzcuODIwNzQsbG5nOi0xMjIuNDc4NzMsYWx0OjU5fSx7bGF0OjM3LjgxNzg2LGxuZzotMTIyLjQ3ODM5LGFsdDo2Nn0se2xhdDozNy44MTQ5OCxsbmc6LTEyMi40NzgwNixhbHQ6NjZ9LHtsYXQ6MzcuODEyMTEsbG5nOi0xMjIuNDc3NzIsYWx0OjU4fSx7bGF0OjM3LjgwOTIzLGxuZzotMTIyLjQ3NzM0LGFsdDo0NH0se2xhdDozNy44MDk0OSxsbmc6LTEyMi40NzczLGFsdDo0NX0se2xhdDozNy44MTIzNixsbmc6LTEyMi40Nzc2NSxhbHQ6NTl9LHtsYXQ6MzcuODE1MjQsbG5nOi0xMjIuNDc3OTgsYWx0OjY2fSx7bGF0OjM3LjgxODEyLGxuZzotMTIyLjQ3ODMyLGFsdDo2Nn0se2xhdDozNy44MjEsbG5nOi0xMjIuNDc4NjYsYWx0OjU4fSx7bGF0OjM3LjgyMzg3LGxuZzotMTIyLjQ3OSxhbHQ6NDR9LHtsYXQ6MzcuODI2NzUsbG5nOi0xMjIuNDc5MzMsYWx0OjMwfSx7bGF0OjM3LjgyOTYzLGxuZzotMTIyLjQ3OTY3LGFsdDozMH0se2xhdDozNy44MzIzMyxsbmc6LTEyMi40ODA3MixhbHQ6MzB9XSxUUT1be2xhdDozNy44ODY2NCxsbmc6LTEyMi42MjU5OSxhbHQ6MTIxfSx7bGF0OjM3Ljg4ODg3LGxuZzotMTIyLjYyMzMyLGFsdDoxMzV9LHtsYXQ6MzcuODkxMTUsbG5nOi0xMjIuNjIxNixhbHQ6MTY0fSx7bGF0OjM3Ljg5MzUzLGxuZzotMTIyLjYxOTIxLGFsdDoxODB9LHtsYXQ6MzcuODk0NjYsbG5nOi0xMjIuNjE1NzcsYWx0OjIyMH0se2xhdDozNy44OTYzMSxsbmc6LTEyMi42MTI2OCxhbHQ6MjczfSx7bGF0OjM3Ljg5OTE3LGxuZzotMTIyLjYxMDk4LGFsdDozMTN9LHtsYXQ6MzcuOTAxNjYsbG5nOi0xMjIuNjA4NTUsYWx0OjM0Mn0se2xhdDozNy45MDE5OSxsbmc6LTEyMi42MDYwMSxhbHQ6NDA4fSx7bGF0OjM3LjkwMzM5LGxuZzotMTIyLjYwNDAxLGFsdDo0NTB9LHtsYXQ6MzcuOTA2NjIsbG5nOi0xMjIuNjAyOTEsYWx0OjQ0MH0se2xhdDozNy45MDk3MSxsbmc6LTEyMi42MDE3MyxhbHQ6NDMyfSx7bGF0OjM3LjkxMjEzLGxuZzotMTIyLjYwMDA3LGFsdDo0MzZ9LHtsYXQ6MzcuOTE0MzksbG5nOi0xMjIuNTk3OCxhbHQ6NDEwfSx7bGF0OjM3LjkxMjg1LGxuZzotMTIyLjU5NTA0LGFsdDo0MjJ9LHtsYXQ6MzcuOTEyNzQsbG5nOi0xMjIuNTkyMDIsYWx0OjQyNX0se2xhdDozNy45MTUsbG5nOi0xMjIuNTkwMzIsYWx0OjQxMn0se2xhdDozNy45MTYzNyxsbmc6LTEyMi41ODkwMyxhbHQ6NDA2fSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4NTk1LGFsdDozODJ9LHtsYXQ6MzcuOTE3NCxsbmc6LTEyMi41ODM5OCxhbHQ6MzcyfSx7bGF0OjM3LjkxNjQyLGxuZzotMTIyLjU4MjM2LGFsdDozNTJ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTgwMTEsYWx0OjM0Mn1dLElRPVt7bGF0OjQwLjc4MjE2LGxuZzotNzMuOTYyNTQsYWx0OjM3fSx7bGF0OjQwLjc4MjIxLGxuZzotNzMuOTYwOTgsYWx0OjM2fSx7bGF0OjQwLjc4MzI4LGxuZzotNzMuOTYwMSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NCxsbmc6LTczLjk1OTMsYWx0OjM2fSx7bGF0OjQwLjc4NTUsbG5nOi03My45NTg0OCxhbHQ6MzZ9LHtsYXQ6NDAuNzg2NjQsbG5nOi03My45NTc3NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg3OSxsbmc6LTczLjk1NzY0LGFsdDozNn0se2xhdDo0MC43ODg5OCxsbmc6LTczLjk1NzkyLGFsdDozNn0se2xhdDo0MC43ODg2OCxsbmc6LTczLjk1OTUxLGFsdDozN30se2xhdDo0MC43ODg5Nyxsbmc6LTczLjk2MTEyLGFsdDozNn0se2xhdDo0MC43ODgzMyxsbmc6LTczLjk2MjUsYWx0OjM3fSx7bGF0OjQwLjc4ODI4LGxuZzotNzMuOTY0MTYsYWx0OjM3fSx7bGF0OjQwLjc4ODA1LGxuZzotNzMuOTY1NzMsYWx0OjM2fSx7bGF0OjQwLjc4NjkxLGxuZzotNzMuOTY2MzYsYWx0OjM2fSx7bGF0OjQwLjc4NTY2LGxuZzotNzMuOTY2NjUsYWx0OjM2fSx7bGF0OjQwLjc4NDU4LGxuZzotNzMuOTY2MDgsYWx0OjM2fSx7bGF0OjQwLjc4NDAyLGxuZzotNzMuOTY0NTksYWx0OjM2fSx7bGF0OjQwLjc4MzIyLGxuZzotNzMuOTYzMzQsYWx0OjM3fV0sRVE9W3tsYXQ6MzcuNTk2NTksbG5nOi0xMjIuNTAzMTYsYWx0OjR9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NTA1LGxuZzotMTIyLjUwNjk4LGFsdDo5M30se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9XSwkMj1be2lkOiJhcHBsZS1wYXJrLWxvb3AiLG5hbWU6IkFwcGxlIFBhcmsgTG9vcCIsZGVzY3JpcHRpb246IkN1cGVydGlubyDigKIgZmxhdCByaW5nIHJvYWQiLG1vZGU6IndhbGsiLHdheXBvaW50czpEUSxsb29wOiEwfSx7aWQ6ImdvbGRlbi1nYXRlIixuYW1lOiJHb2xkZW4gR2F0ZSBDcm9zc2luZyIsZGVzY3JpcHRpb246IlNhbiBGcmFuY2lzY28g4oCiIGJyaWRnZSByb3VuZC10cmlwIixtb2RlOiJydW4iLHdheXBvaW50czpQUSxsb29wOiEwfSx7aWQ6InRhbS1yaWRnZSIsbmFtZToiTXQuIFRhbSBSaWRnZSIsZGVzY3JpcHRpb246IlN0aW5zb24gQmVhY2gg4oCiIFN0ZWVwIFJhdmluZSArIE1hdHQgRGF2aXMgbG9vcCIsbW9kZToid2FsayIsd2F5cG9pbnRzOlRRLGxvb3A6ITB9LHtpZDoiY2VudHJhbC1wYXJrIixuYW1lOiJSZXNlcnZvaXIgTG9vcCIsZGVzY3JpcHRpb246IkNlbnRyYWwgUGFyayDigKIgMi41IGttIixtb2RlOiJydW4iLHdheXBvaW50czpJUSxsb29wOiEwfSx7aWQ6InBjaC1wYWNpZmljYSIsbmFtZToiUGFjaWZpYyBDb2FzdCBId3kiLGRlc2NyaXB0aW9uOiJQYWNpZmljYSDigKIgRGV2aWwncyBTbGlkZSByb3VuZC10cmlwIixtb2RlOiJkcml2ZSIsd2F5cG9pbnRzOkVRLGxvb3A6ITB9XTtmdW5jdGlvbiBzMSh7b3BlbjokLG9uT3BlbkNoYW5nZTpKLHN1bW1hcnk6USxjaGlsZHJlbjpYLHN1bW1hcnlDbGFzc05hbWU6Sz0iIixib2R5Q2xhc3NOYW1lOlk9ImZsZXggZmxleC1jb2wgZ2FwLTIuNSBwdC0yLjUiLGNsYXNzTmFtZTpxPSIiLC4uLkd9KXtyZXR1cm4gWigiZGV0YWlscyIse29wZW46JCxvblRvZ2dsZTooQik9PkooQi5jdXJyZW50VGFyZ2V0Lm9wZW4pLGNsYXNzTmFtZTpgbGVtLXNlY3Rpb24gYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yICR7cX1gLC4uLkcsY2hpbGRyZW46W1ooInN1bW1hcnkiLHtjbGFzc05hbWU6YGxlbS10b2dnbGUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgdGV4dC13aGl0ZS85MCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSAke0t9YCxjaGlsZHJlbjpbUSxaKGkyLHtvcGVuOiR9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6WSxjaGlsZHJlbjpYfSldfSl9ZnVuY3Rpb24gcjUoe2xhYmVsOiQsdmFsdWU6SixvcHRpb25zOlEsZGlzYWJsZWQ6WCxvbkNoYW5nZTpLLGNsYXNzTmFtZTpZfSl7bGV0W3EsR109ayghMSksQj1UKG51bGwpLE49VChudWxsKSxbeixWXT1rKG51bGwpLEg9KCk9PntsZXQgVT1CLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFVKXJldHVybjtWKHt0b3A6VS5ib3R0b20rNCxsZWZ0OlUubGVmdCxtaW5XaWR0aDpVLndpZHRofSl9O0kwKCgpPT57aWYocSlIKCl9LFtxXSksSTAoKCk9PntpZighcXx8IXopcmV0dXJuO2xldCBVPU4uY3VycmVudCxGPUIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIVV8fCFGKXJldHVybjtsZXQgVz04LEU9d2luZG93LmlubmVyV2lkdGgtVS5vZmZzZXRXaWR0aC1XLFA9ei5sZWZ0PkU/TWF0aC5tYXgoVyxFKTp6LmxlZnQseD1GLnRvcC1VLm9mZnNldEhlaWdodC00LEQ9ei50b3ArVS5vZmZzZXRIZWlnaHQ8PXdpbmRvdy5pbm5lckhlaWdodC1XP3oudG9wOng+PVc/eDpNYXRoLm1heChXLHdpbmRvdy5pbm5lckhlaWdodC1VLm9mZnNldEhlaWdodC1XKTtpZihEIT09ei50b3B8fFAhPT16LmxlZnQpVih7Li4ueix0b3A6RCxsZWZ0OlB9KX0sW3Esel0pLHkoKCk9PntpZighcSlyZXR1cm47bGV0IFU9KCk9PkcoITEpLEY9KEUpPT57bGV0IFA9RS50YXJnZXQ7aWYoIU4uY3VycmVudD8uY29udGFpbnMoUCkmJiFCLmN1cnJlbnQ/LmNvbnRhaW5zKFApKVUoKX0sVz0oRSk9PntpZighTi5jdXJyZW50Py5jb250YWlucyhFLnRhcmdldCkpSCgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsRiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsVywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsVSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixGKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixXLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixVKX19LFtxXSk7bGV0IEM9VCghMSk7eSgoKT0+e2lmKCFxKXtDLmN1cnJlbnQ9ITE7cmV0dXJufWlmKCF6fHxDLmN1cnJlbnQpcmV0dXJuO2xldCBVPU4uY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpO2lmKCFVPy5sZW5ndGgpcmV0dXJuO0MuY3VycmVudD0hMDtsZXQgRj1RLmZpbmRJbmRleCgoVyk9PlcudmFsdWU9PT1KKTtVW01hdGgubWF4KEYsMCldPy5mb2N1cygpfSxbcSx6LFEsSl0pO2xldCBBPShVKT0+e2xldCBGPVsuLi5OLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKT8/W11dLFc9Ri5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO2lmKFUua2V5PT09IkFycm93RG93biJ8fFUua2V5PT09IkFycm93VXAiKXtVLnByZXZlbnREZWZhdWx0KCk7bGV0IEU9VS5rZXk9PT0iQXJyb3dEb3duIj9NYXRoLm1pbihXKzEsRi5sZW5ndGgtMSk6TWF0aC5tYXgoVy0xLDApO0ZbRV0/LmZvY3VzKCl9ZWxzZSBpZihVLmtleT09PSJFc2NhcGUiKVUucHJldmVudERlZmF1bHQoKSxHKCExKSxCLmN1cnJlbnQ/LmZvY3VzKCl9LEw9US5maW5kKChVKT0+VS52YWx1ZT09PUopO3JldHVybiBaKEoxLHtjaGlsZHJlbjpbWigiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlgsb25DbGljazooKT0+RygoVSk9PiFVKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOkw/LmxhYmVsPz9KfSl9KSxxJiZ6JiZ3MyhaKCJkaXYiLHtyZWY6Tixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246QSxzdHlsZTp7dG9wOnoudG9wLGxlZnQ6ei5sZWZ0LG1pbldpZHRoOnoubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bMTBweF0gcC0xIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgei01MCIsY2hpbGRyZW46US5tYXAoKFUpPT5aKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOlUudmFsdWU9PT1KLG9uQ2xpY2s6KCk9PntLKFUudmFsdWUpLEcoITEpLEIuY3VycmVudD8uZm9jdXMoKX0sY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIHB4LTIuNSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCBmb2N1cy12aXNpYmxlOmJnLXdoaXRlLzggb3V0bGluZS1ub25lICR7VS52YWx1ZT09PUo/InRleHQtYWNjZW50IjoiIn1gLGNoaWxkcmVuOlUubGFiZWx9LFUudmFsdWUpKX0pLGRvY3VtZW50LmJvZHkpXX0pfXZhciB3UT02NTAscTg9WzEsMiw1LDIwXSxxND0xMDAwLEc4PXtzdGF0dXM6ImlkbGUiLGFyYzowLGVsYXBzZWRNczowfTtmdW5jdGlvbiBMNCh7dWRpZDokLGV4ZWM6Sn0pe2xldFtRLFhdPWsoITEpLFtLLFldPWsoJDJbMF0uaWQpLFtxLEddPWsoJDJbMF0ubW9kZSksW0IsTl09aygxKSxbeixWXT1rKEc4KSxbSCxDXT1rKG51bGwpLEE9azEoKCk9PiQyLmZpbmQoKGwpPT5sLmlkPT09Syk/PyQyWzBdLFtLXSksTD1rMSgoKT0+WTQoQSksW0FdKSxVPVQoMCksRj1UKCJpZGxlIiksVz1UKFk4KHEpKkIpLEU9VCgwKSxQPVQoTCkseD1UKG51bGwpO3koKCk9PntXLmN1cnJlbnQ9WTgocSkqQn0sW3EsQl0pO2xldCBEPVQobnVsbCk7eSgoKT0+e2xldCBsPVAuY3VycmVudCxtPVUuY3VycmVudDtpZihQLmN1cnJlbnQ9TCxsJiZsIT09TClELmN1cnJlbnQ9U1EobCxtLEwscGVyZm9ybWFuY2Uubm93KCkpO1UuY3VycmVudD0wLEUuY3VycmVudD0wLEYuY3VycmVudD0iaWRsZSIseC5jdXJyZW50PW51bGwsVihHOCl9LFtMXSk7bGV0IG49VCgwKSxSPVQobnVsbCksZD1UKG51bGwpO3koKCk9PntsZXQgbD0wLG09KFgxKT0+e2xldCBaMT1SLmN1cnJlbnQsSDE9WjE9PW51bGw/MTY6TWF0aC5taW4oNjQsWDEtWjEpO2lmKFIuY3VycmVudD1YMSxuLmN1cnJlbnQ9KG4uY3VycmVudCtIMSowLjAwMDEyKSUoTWF0aC5QSSoyKSxGLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCBRMT1XLmN1cnJlbnQqSDEvMTAwMDtVLmN1cnJlbnQrPVExLEUuY3VycmVudCs9SDE7bGV0IHExPVAuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCFQLmN1cnJlbnQudHJhaWwubG9vcCYmVS5jdXJyZW50Pj1xMSlVLmN1cnJlbnQ9cTEsRi5jdXJyZW50PSJwYXVzZWQiLFYoe3N0YXR1czoicGF1c2VkIixhcmM6cTEsZWxhcHNlZE1zOkUuY3VycmVudH0pfWxldCB0PWQuY3VycmVudDtpZih0KXtsZXQgUTE9UC5jdXJyZW50LHExPW51bGwsaj1ELmN1cnJlbnQ7aWYoail7bGV0IHA9KFgxLWouc3RhcnRNcykvd1E7aWYocD49MSlELmN1cnJlbnQ9bnVsbDtlbHNle2xldCBfPXZRKHApO1ExPWpRKGosXykscTE9e3g6ai5wcmV2TWFya2VyLngrKGoubmV4dE1hcmtlci54LWoucHJldk1hcmtlci54KSpfLHk6ai5wcmV2TWFya2VyLnkrKGoubmV4dE1hcmtlci55LWoucHJldk1hcmtlci55KSpfLHo6ai5wcmV2TWFya2VyLnorKGoubmV4dE1hcmtlci56LWoucHJldk1hcmtlci56KSpffX19UlEodCxRMSxVLmN1cnJlbnQsbi5jdXJyZW50LFgxLEYuY3VycmVudD09PSJwbGF5aW5nIixxMSl9bD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobSl9O3JldHVybiBsPXJlcXVlc3RBbmltYXRpb25GcmFtZShtKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUobCl9LFtdKSx5KCgpPT57bGV0IGw9c2V0SW50ZXJ2YWwoKCk9PntpZihGLmN1cnJlbnQ9PT0icGxheWluZyIpVih7c3RhdHVzOiJwbGF5aW5nIixhcmM6VS5jdXJyZW50LGVsYXBzZWRNczpFLmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChsKX0sW10pLHkoKCk9PntpZih6LnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IGw9ITEsbT0wLFgxPW51bGwsWjE9YXN5bmMoKT0+e2lmKGx8fFgxKXJldHVybjtsZXQgdD1EYXRlLm5vdygpO2lmKHQtbTxxNClyZXR1cm47bT10O2xldCBRMT1lMChQLmN1cnJlbnQsVS5jdXJyZW50KSxxMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7UTEubGF0LnRvRml4ZWQoNyl9LCR7UTEubG5nLnRvRml4ZWQoNyl9YDtYMT1KKHExKS50aGVuKChqKT0+e2lmKGwpcmV0dXJuO2lmKGouZXhpdENvZGUhPT0wKUMoejQoai5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIEMobnVsbCl9KS5jYXRjaCgoaik9PntpZighbClDKGogaW5zdGFuY2VvZiBFcnJvcj9qLm1lc3NhZ2U6U3RyaW5nKGopKX0pLmZpbmFsbHkoKCk9PntYMT1udWxsfSl9O1oxKCk7bGV0IEgxPXNldEludGVydmFsKFoxLHE0KTtyZXR1cm4oKT0+e2w9ITAsY2xlYXJJbnRlcnZhbChIMSl9fSxbei5zdGF0dXMsJCxKXSk7bGV0IGk9dygoKT0+e2lmKEYuY3VycmVudD09PSJwbGF5aW5nIil7Ri5jdXJyZW50PSJwYXVzZWQiLFYoKGwpPT4oey4uLmwsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihVLmN1cnJlbnQ+PVAuY3VycmVudC50b3RhbERpc3RhbmNlJiYhUC5jdXJyZW50LnRyYWlsLmxvb3ApVS5jdXJyZW50PTAsRS5jdXJyZW50PTA7aWYoeC5jdXJyZW50PT1udWxsKXtsZXQgbD1lMChQLmN1cnJlbnQsVS5jdXJyZW50KTt4LmN1cnJlbnQ9e2xhdDpsLmxhdCxsbmc6bC5sbmd9fUYuY3VycmVudD0icGxheWluZyIsVigobCk9Pih7Li4ubCxzdGF0dXM6InBsYXlpbmciLGFyYzpVLmN1cnJlbnQsZWxhcHNlZE1zOkUuY3VycmVudH0pKX0sW10pLHI9dygoKT0+e0YuY3VycmVudD0iaWRsZSIsVS5jdXJyZW50PTAsRS5jdXJyZW50PTAsVihHOCk7bGV0IGw9eC5jdXJyZW50O3guY3VycmVudD1udWxsO2xldCBtPWw/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2wubGF0LnRvRml4ZWQoNyl9LCR7bC5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7SihtKS50aGVuKChYMSk9PntpZihYMS5leGl0Q29kZSE9PTApQyh6NChYMS5zdGRlcnIpfHxudWxsKTtlbHNlIEMobnVsbCl9KX0sW0osJF0pLG89dygobCk9PntZKGwpO2xldCBtPSQyLmZpbmQoKFgxKT0+WDEuaWQ9PT1sKTtpZihtKUcobS5tb2RlKX0sW10pO3koKCk9PigpPT57aWYoRi5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgbD14LmN1cnJlbnQsbT1sP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtsLmxhdC50b0ZpeGVkKDcpfSwke2wubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0oobSkuY2F0Y2goKCk9Pnt9KX0sW0osJF0pO2xldCBhPXouc3RhdHVzPT09InBsYXlpbmciLEwxPWE/YCR7Qjgoei5hcmMpfSDCtyAke0I0KHouZWxhcHNlZE1zKX1gOkI4KEwudG90YWxEaXN0YW5jZSk7cmV0dXJuIFooczEse29wZW46USxvbk9wZW5DaGFuZ2U6WCxzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b19taW5tYXgoMCwxZnIpX2F1dG9dIFtjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZV0gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKEoxLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiTG9jYXRpb24ifSksUT9aKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzIjohMCxjbGFzc05hbWU6Im1pbi13LTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6YT8iIzRhZGU4MCI6TC50b3RhbERpc3RhbmNlPjA/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6InRyYW5zcGFyZW50Iixib3hTaGFkb3c6YT8iMCAwIDZweCByZ2JhKDc0LDIyMiwxMjgsMC43KSI6Im5vbmUifX0pLFooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMiLGNoaWxkcmVuOkwxfSksIWEmJlooInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWwiOiEwLGNsYXNzTmFtZToic2hyaW5rLTAiLGNoaWxkcmVuOiJ0b3RhbCJ9KV19KTpaKCJzcGFuIix7fSldfSksY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgYmxvY2siLGNoaWxkcmVuOltaKHI1LHtsYWJlbDoiVHJhaWwiLHZhbHVlOkssb25DaGFuZ2U6byxvcHRpb25zOiQyLm1hcCgobCk9Pih7dmFsdWU6bC5pZCxsYWJlbDpsLm5hbWV9KSksY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy13aGl0ZS9bMC4wN10gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTYpXSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ymctd2hpdGUvWzAuMDhdIGZvY3VzOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjI0KV0ifSksWigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooaTIse29wZW46ITF9KX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46QS5kZXNjcmlwdGlvbn0pXX0pLFooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltaKCJjYW52YXMiLHtyZWY6ZCxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksWih5USx7cHJlcGFyZWQ6TH0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbWihWOCx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpCOCh6LmFyYyl9KSxaKFY4LHtsYWJlbDoiUGFjZSIsdmFsdWU6Z1EoVy5jdXJyZW50KX0pLFooVjgse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTpCNCh6LmVsYXBzZWRNcyl9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W1ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazppLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7YT8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJ9YCwiYXJpYS1wcmVzc2VkIjphLHRpdGxlOmE/IlBhdXNlIjoiUGxheSIsY2hpbGRyZW46W2E/WihwMyx7fSk6WihuMix7fSksWigic3BhbiIse2NoaWxkcmVuOmE/IlBhdXNlIjoiUGxheSJ9KV19KSxaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6cixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIsZGlzYWJsZWQ6ei5zdGF0dXM9PT0iaWRsZSImJnouYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbWihyMix7fSksWigic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpaKGJRLHthcmlhTGFiZWw6IlRyYW5zcG9ydCBtb2RlIix2YWx1ZTpxLG9uQ2hhbmdlOihsKT0+RyhsKSxvcHRpb25zOlt7dmFsdWU6IndhbGsiLGxhYmVsOiJXYWxrIixpY29uOloobDMse30pfSx7dmFsdWU6InJ1biIsbGFiZWw6IlJ1biIsaWNvbjpaKGQzLHt9KX0se3ZhbHVlOiJjeWNsZSIsbGFiZWw6IkN5Y2xlIixpY29uOlooYzMse30pfSx7dmFsdWU6ImRyaXZlIixsYWJlbDoiRHJpdmUiLGljb246WihvMyx7fSl9XX0pfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57bGV0IGw9cTguaW5kZXhPZihCKSxtPXE4WyhsKzEpJXE4Lmxlbmd0aF07TihtKX0sY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0yLjUgYm9yZGVyIHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCBtaW4tdy1bNTZweF0gYWN0aXZlOnNjYWxlLVswLjk3XSAke0I+MT8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGhvdmVyOmJnLXdoaXRlL1swLjg4XSBob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgaG92ZXI6Ymctd2hpdGUvWzAuMDldIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gaG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7Qn3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtCfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltaKHUzLHt9KSxCPjEmJlooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W0IsIsOXIl19KV19KV19KSxIJiZaKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkh9KV19KX12YXIgVjg9aTAoZnVuY3Rpb24oe2xhYmVsOkosdmFsdWU6UX0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpKfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46UX0pXX0pfSk7ZnVuY3Rpb24gYlEoe3ZhbHVlOiQsb25DaGFuZ2U6SixvcHRpb25zOlEsYXJpYUxhYmVsOlh9KXtyZXR1cm4gWigiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46US5tYXAoKEspPT57bGV0IFk9Sy52YWx1ZT09PSQ7cmV0dXJuIFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SihLLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7WT8iYmctd2hpdGUvWzAuMTJdIHRleHQtd2hpdGUiOiJiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzYwIGhvdmVyOmJnLXdoaXRlL1swLjA1XSBob3Zlcjp0ZXh0LXdoaXRlLzkwIn1gLCJhcmlhLXByZXNzZWQiOlksImFyaWEtbGFiZWwiOksuaWNvbj9LLmxhYmVsOnZvaWQgMCx0aXRsZTpLLmljb24/Sy5sYWJlbDp2b2lkIDAsY2hpbGRyZW46Sy5pY29uPz9LLmxhYmVsfSxLLnZhbHVlKX0pfSl9ZnVuY3Rpb24geVEoe3ByZXBhcmVkOiR9KXtpZigkLnJhd01heEFsdC0kLnJhd01pbkFsdDw1KXJldHVybiBudWxsO3JldHVybiBaKEoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiBsZWZ0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1ooeTUse2RpcjoidXAifSksIiAiLE40KCQucmF3TWF4QWx0KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1ooeTUse2RpcjoiZG93biJ9KSwiICIsTjQoJC5yYXdNaW5BbHQpXX0pXX0pfXZhciBHND0xNDA7ZnVuY3Rpb24gVjQoJCxKKXtsZXQgUT1BcnJheShKKTtmb3IobGV0IFg9MDtYPEo7WCsrKXtsZXQgSz1KPT09MT8wOlgvKEotMSksWT1lMCgkLEsqJC50b3RhbERpc3RhbmNlKTtRW1hdPXt4OlkueCx5OlkueSx6Olkuen19cmV0dXJuIFF9ZnVuY3Rpb24gU1EoJCxKLFEsWCl7bGV0IEs9KCQuYm91bmRzLnhbMF0rJC5ib3VuZHMueFsxXSkvMixZPSgkLmJvdW5kcy56WzBdKyQuYm91bmRzLnpbMV0pLzIscT0kLmJvdW5kcy55WzBdLEc9TWF0aC5tYXgoMSwkLmJvdW5kcy54WzFdLSQuYm91bmRzLnhbMF0sJC5ib3VuZHMuelsxXS0kLmJvdW5kcy56WzBdKSxCPShRLmJvdW5kcy54WzBdK1EuYm91bmRzLnhbMV0pLzIsTj0oUS5ib3VuZHMuelswXStRLmJvdW5kcy56WzFdKS8yLHo9US5ib3VuZHMueVswXSxIPU1hdGgubWF4KDEsUS5ib3VuZHMueFsxXS1RLmJvdW5kcy54WzBdLFEuYm91bmRzLnpbMV0tUS5ib3VuZHMuelswXSkvRyxBPVY0KCQsRzQpLm1hcCgoRCk9Pih7eDooRC54LUspKkgrQix5OihELnktcSkqSCt6LHo6KEQuei1ZKSpIK059KSksTD1WNChRLEc0KSxVPSgkLnRyYWlsLmxvb3B8fFEudHJhaWwubG9vcCk/PyExLEY9eFEoQSxMLFUpLFc9ZTAoJCxKKSxFPXt4OihXLngtSykqSCtCLHk6KFcueS1xKSpIK3osejooVy56LVkpKkgrTn0sUD1lMChRLDApLHg9e3g6UC54LHk6UC55LHo6UC56fTtyZXR1cm57ZnJvbTokLHRvOlEsZnJvbVB0czpBLHRvUHRzOkYscHJldk1hcmtlcjpFLG5leHRNYXJrZXI6eCxzdGFydE1zOlh9fWZ1bmN0aW9uIHhRKCQsSixRKXtsZXQgWD0kLmxlbmd0aCxLPTEvMCxZPTAscT0hMSxHPVtKLFsuLi5KXS5yZXZlcnNlKCldO2ZvcihsZXQgej0wO3o8Ry5sZW5ndGg7eisrKXtsZXQgVj1HW3pdLEg9UT9YOjE7Zm9yKGxldCBDPTA7QzxIO0MrKyl7bGV0IEE9MDtmb3IobGV0IEw9MDtMPFg7TCsrKXtsZXQgVT0kW0xdLEY9VlsoTCtDKSVYXSxXPVUueC1GLngsRT1VLnktRi55LFA9VS56LUYuejtpZihBKz1XKlcrRSpFK1AqUCxBPj1LKWJyZWFrfWlmKEE8SylLPUEsWT1DLHE9ej09PTF9fWxldCBCPXE/Wy4uLkpdLnJldmVyc2UoKTpKLE49QXJyYXkoWCk7Zm9yKGxldCB6PTA7ejxYO3orKylOW3pdPUJbKHorWSklWF07cmV0dXJuIE59ZnVuY3Rpb24galEoJCxKKXtsZXQgUT0kLmZyb21QdHMubGVuZ3RoLFg9QXJyYXkoUSksSz0wLFk9bnVsbCxxPTEvMCxHPS0xLzAsQj0xLzAsTj0tMS8wLHo9MS8wLFY9LTEvMDtmb3IobGV0IEg9MDtIPFE7SCsrKXtsZXQgQz0kLmZyb21QdHNbSF0sQT0kLnRvUHRzW0hdLEw9Qy54KyhBLngtQy54KSpKLFU9Qy55KyhBLnktQy55KSpKLEY9Qy56KyhBLnotQy56KSpKO2lmKFkpe2xldCBFPUwtWS54LFA9VS1ZLnkseD1GLVkuejtLKz1NYXRoLnNxcnQoRSpFK1AqUCt4KngpfWxldCBXPXt4OkwseTpVLHo6RixhcmM6SyxsYXQ6MCxsbmc6MH07aWYoWFtIXT1XLFk9VyxMPHEpcT1MO2lmKEw+RylHPUw7aWYoVTxCKUI9VTtpZihVPk4pTj1VO2lmKEY8eil6PUY7aWYoRj5WKVY9Rn1yZXR1cm57dHJhaWw6JC50by50cmFpbCxvcmlnaW46JC50by5vcmlnaW4scG9pbnRzOlgsdG90YWxEaXN0YW5jZTpLLGJvdW5kczp7eDpbcSxHXSx5OltCLE5dLHo6W3osVl19LHJhd01pbkFsdDokLnRvLnJhd01pbkFsdCsoJC5mcm9tLnJhd01pbkFsdC0kLnRvLnJhd01pbkFsdCkqKDEtSikscmF3TWF4QWx0OiQudG8ucmF3TWF4QWx0KygkLmZyb20ucmF3TWF4QWx0LSQudG8ucmF3TWF4QWx0KSooMS1KKX19ZnVuY3Rpb24gdlEoJCl7cmV0dXJuICQ8MC41PzIqJCokOjEtTWF0aC5wb3coLTIqJCsyLDIpLzJ9ZnVuY3Rpb24gUlEoJCxKLFEsWCxLLFkscSl7bGV0IEc9JC5nZXRDb250ZXh0KCIyZCIpO2lmKCFHKXJldHVybjtsZXR7Y2xpZW50V2lkdGg6QixjbGllbnRIZWlnaHQ6Tn09JDtpZihCPT09MHx8Tj09PTApcmV0dXJuO2xldCB6PXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxOjEsVj1NYXRoLnJvdW5kKEIqeiksSD1NYXRoLnJvdW5kKE4qeik7aWYoJC53aWR0aCE9PVZ8fCQuaGVpZ2h0IT09SCkkLndpZHRoPVYsJC5oZWlnaHQ9SDtHLnNldFRyYW5zZm9ybSh6LDAsMCx6LDAsMCksRy5jbGVhclJlY3QoMCwwLEIsTik7bGV0IEM9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChCKjAuNSxOKjAuNTUsTWF0aC5taW4oQixOKSowLjIsQiowLjUsTiowLjU1LE1hdGgubWF4KEIsTikqMC44NSk7Qy5hZGRDb2xvclN0b3AoMCwiIzFhMWExZCIpLEMuYWRkQ29sb3JTdG9wKDEsIiMwYTBhMGMiKSxHLmZpbGxTdHlsZT1DLEcuZmlsbFJlY3QoMCwwLEIsTiksaFEoRyxCLE4pO2xldHtwb2ludHM6QSxib3VuZHM6TH09SjtpZihBLmxlbmd0aDwyKXJldHVybjtsZXQgVT0yOCpNYXRoLlBJLzE4MCxGPU1hdGguc2luKFUpLFc9TWF0aC5jb3MoVSksRT1NYXRoLnNpbihYKSxQPU1hdGguY29zKFgpLHg9KEwueFswXStMLnhbMV0pLzIsRD0oTC56WzBdK0wuelsxXSkvMixuPUwueFsxXS1MLnhbMF0sUj1MLnpbMV0tTC56WzBdLGQ9TC55WzFdLUwueVswXSxpPU1hdGgubWF4KG4sUikqMS4wNSxyPU1hdGgubWF4KFIqVytkKkYsbiowLjQpKjEuMTUsbz1CKjAuMDgsYT1OKjAuMTgsTDE9TWF0aC5taW4oKEItbyoyKS9pLChOLWEqMikvcikqMS40NSxsPWQ8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxkKSksbT0oaixwLF8pPT57bGV0IGg9ai14LGc9Xy1ELHY9aCpQK2cqRSxZMT0taCpFK2cqUCxHMT1wKmwsdzE9RzEqVy1ZMSpGLFcxPUcxKkYrWTEqVztyZXR1cm57c3g6Qi8yK3YqTDEsc3k6TiowLjU1LXcxKkwxLGRlcHRoOlcxfX0sWDE9MzgsWjE9QS5tYXAoKGopPT57bGV0IHA9bShqLngsai55LGoueiksXz1tKGoueCwwLGoueiksaD17c3g6cC5zeCxzeTpNYXRoLm1heChfLnN5LHAuc3krWDEpLGRlcHRoOl8uZGVwdGh9O3JldHVybntwOmosdG9wOnAsYm90Omh9fSk7Zm9yKGxldCBqPTE7ajxaMS5sZW5ndGg7aisrKXtsZXQgcD1aMVtqLTFdLF89WjFbal0saD1HLmNyZWF0ZUxpbmVhckdyYWRpZW50KChwLnRvcC5zeCtfLnRvcC5zeCkvMiwocC50b3Auc3krXy50b3Auc3kpLzIsKHAuYm90LnN4K18uYm90LnN4KS8yLChwLmJvdC5zeStfLmJvdC5zeSkvMik7aC5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIpLGguYWRkQ29sb3JTdG9wKDAuNDUsInJnYmEoMTgwLDE4MCwxODUsMC4yOCkiKSxoLmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIiksaC5hZGRDb2xvclN0b3AoMSwicmdiYSgwLDAsMCwwKSIpLEcuZmlsbFN0eWxlPWgsRy5iZWdpblBhdGgoKSxHLm1vdmVUbyhwLnRvcC5zeCxwLnRvcC5zeSksRy5saW5lVG8oXy50b3Auc3gsXy50b3Auc3kpLEcubGluZVRvKF8uYm90LnN4LF8uYm90LnN5KSxHLmxpbmVUbyhwLmJvdC5zeCxwLmJvdC5zeSksRy5jbG9zZVBhdGgoKSxHLmZpbGwoKX1HLnN0cm9rZVN0eWxlPSIjZmZmZmZmIixHLmxpbmVXaWR0aD0xLjYsRy5saW5lQ2FwPSJyb3VuZCIsRy5saW5lSm9pbj0icm91bmQiLEcuYmVnaW5QYXRoKCk7Zm9yKGxldCBqPTA7ajxaMS5sZW5ndGg7aisrKXtsZXR7dG9wOnB9PVoxW2pdO2lmKGo9PT0wKUcubW92ZVRvKHAuc3gscC5zeSk7ZWxzZSBHLmxpbmVUbyhwLnN4LHAuc3kpfUcuc3Ryb2tlKCk7bGV0IEgxPVE7Ry5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIsRy5saW5lV2lkdGg9Mi4yLEcuYmVnaW5QYXRoKCk7bGV0IHQ9ITE7Zm9yKGxldCBqPTA7ajxaMS5sZW5ndGg7aisrKXtsZXR7cCx0b3A6X309WjFbal07aWYocC5hcmM+SDEpYnJlYWs7aWYoIXQpRy5tb3ZlVG8oXy5zeCxfLnN5KSx0PSEwO2Vsc2UgRy5saW5lVG8oXy5zeCxfLnN5KX1pZih0KUcuc3Ryb2tlKCk7bGV0IFExPXE/P2UwKEosUSkscTE9bShRMS54LFExLnksUTEueik7aWYoWSl7bGV0IF89SyUyNjAwLzI2MDAsaD00KzIyKl8sZz0wLjIyKigxLV8pLHY9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChxMS5zeCxxMS5zeSxoKjAuNSxxMS5zeCxxMS5zeSxoKTt2LmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksdi5hZGRDb2xvclN0b3AoMC43LGByZ2JhKDI1NSwyNTUsMjU1LCR7Zy50b0ZpeGVkKDMpfSlgKSx2LmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksRy5maWxsU3R5bGU9dixHLmJlZ2luUGF0aCgpLEcuYXJjKHExLnN4LHExLnN5LGgsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfUcuZmlsbFN0eWxlPSIjZmZmIixHLmJlZ2luUGF0aCgpLEcuYXJjKHExLnN4LHExLnN5LDMuOCwwLE1hdGguUEkqMiksRy5maWxsKCl9ZnVuY3Rpb24gaFEoJCxKLFEpeyQuZmlsbFN0eWxlPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIjtmb3IobGV0IFk9NztZPFE7WSs9MTQpZm9yKGxldCBxPTc7cTxKO3ErPTE0KSQuYmVnaW5QYXRoKCksJC5hcmMocSxZLDAuNywwLE1hdGguUEkqMiksJC5maWxsKCl9ZnVuY3Rpb24gQjgoJCl7aWYoJDwxMDAwKXJldHVybmAkeyQudG9GaXhlZCgwKX0gbWA7cmV0dXJuYCR7KCQvMTAwMCkudG9GaXhlZCgyKX0ga21gfWZ1bmN0aW9uIEI0KCQpe2xldCBKPU1hdGguZmxvb3IoJC8xMDAwKSxRPU1hdGguZmxvb3IoSi8zNjAwKSxYPU1hdGguZmxvb3IoSiUzNjAwLzYwKSxLPUolNjA7aWYoUT4wKXJldHVybmAke1F9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtLLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWA7cmV0dXJuYCR7WH06JHtLLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gZ1EoJCl7aWYoJDw9MClyZXR1cm4i4oCUIjtpZigkPjcpcmV0dXJuYCR7KCQqMy42KS50b0ZpeGVkKDApfSBrbS9oYDtsZXQgSj0xMDAwLyQsUT1NYXRoLmZsb29yKEovNjApLFg9TWF0aC5yb3VuZChKJTYwKTtyZXR1cm5gJHtRfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9L2ttYH1mdW5jdGlvbiBONCgkKXtyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gfWZ1bmN0aW9uIHo0KCQpe2xldCBKPSQudHJpbSgpO2lmKCFKKXJldHVybiIiO2xldCBRPUoubWF0Y2goL1JlYXNvbjpccyooLispJC9tKTtpZihRKXJldHVybiBRWzFdO3JldHVybiBKLnNwbGl0KGAKYCkuc2xpY2UoLTEpWzBdPz9KfWFzeW5jIGZ1bmN0aW9uIE44KCQsSixRKXtsZXQgWD1hd2FpdCAkKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtKfSAke08xKFEpfSBhcHBgKTtpZihYLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WC5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgSz1YLnN0ZG91dC50cmltKCk7aWYoIUspcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBZPWF3YWl0ICQoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtPMShLKyIvSW5mby5wbGlzdCIpfWApLHE9e307aWYoWS5leGl0Q29kZT09PTApdHJ5e3E9SlNPTi5wYXJzZShZLnN0ZG91dCl9Y2F0Y2h7fWxldCBHLE49KHE/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P3E/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/cT8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoTiYmTi5sZW5ndGg+MClHPU5bTi5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgcT8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKUc9cS5DRkJ1bmRsZUljb25GaWxlO2xldCB6PW51bGw7aWYoRyl7bGV0IFY9W2Ake0d9QDN4LnBuZ2AsYCR7R31AMngucG5nYCxgJHtHfS5wbmdgLGAke0d9NjB4NjBAM3gucG5nYCxgJHtHfTYweDYwQDJ4LnBuZ2BdLEM9KGF3YWl0ICQoYGJhc2ggLWMgJHtPMShWLm1hcCgoQSk9PmBbIC1mICR7TzEoSysiLyIrQSl9IF0gJiYgZWNobyAke08xKEsrIi8iK0EpfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKEMpe2xldCBBPWF3YWl0ICQoYGJhc2U2NCAtaSAke08xKEMpfWApO2lmKEEuZXhpdENvZGU9PT0wKXo9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0Euc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpLLGRpc3BsYXlOYW1lOnEuQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/cS5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOnEuQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpxLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpxLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpxLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDp6fX12YXIgQTI9bmV3IE1hcDtmdW5jdGlvbiBINCgkLEosUSl7bGV0IFg9YCR7Sn06JHtRfWAsSz1BMi5nZXQoWCk7aWYoSyE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEspO2xldCBZPU44KCQsSixRKS50aGVuKChxKT0+e2xldCBHPXEuaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIEEyLnNldChYLEcpLEd9KS5jYXRjaCgoKT0+e3JldHVybiBBMi5zZXQoWCxudWxsKSxudWxsfSk7cmV0dXJuIEEyLnNldChYLFkpLFl9ZnVuY3Rpb24gZlEoJCl7cmV0dXJuICQuc3RhcnRzV2l0aCgiY29tLmFwcGxlLiIpfWZ1bmN0aW9uIG1RKCQpe2lmKCQ9PT0iY29tLmFwcGxlLnNwcmluZ2JvYXJkIilyZXR1cm4iU3ByaW5nQm9hcmQiO3JldHVybiAkfWZ1bmN0aW9uIHBRKHtidW5kbGVJZDokfSl7bGV0IEo9ZlEoJCk7cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6Sj8ic3lzdGVtLWFwcC1pY29uIjoiYXBwLWljb24tZmFsbGJhY2siLGNsYXNzTmFtZTpgdy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyICR7Sj8iYm9yZGVyLVsjM2I1Zjk5XSBiZy1bbGluZWFyLWdyYWRpZW50KDE0NWRlZywjMjUzYTVmLCMxNjIxMzIpXSB0ZXh0LVsjYzhkN2ZmXSI6ImJvcmRlci13aGl0ZS8xMCBiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84MCJ9YCwiYXJpYS1sYWJlbCI6Sj8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIix0aXRsZTpKPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLGNoaWxkcmVuOko/Wigic3ZnIix7cm9sZToiaW1nIix2aWV3Qm94OiIwIDAgMjQgMjQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOiJzaXplLVsxOXB4XSIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbWigidGl0bGUiLHtjaGlsZHJlbjoiQXBwbGUifSksWigicGF0aCIse2Q6Ik0xMi4xNTIgNi44OTZjLS45NDggMC0yLjQxNS0xLjA3OC0zLjk2LTEuMDQtMi4wNC4wMjctMy45MSAxLjE4My00Ljk2MSAzLjAxNC0yLjExNyAzLjY3NS0uNTQ2IDkuMTAzIDEuNTE5IDEyLjA5IDEuMDEzIDEuNDU0IDIuMjA4IDMuMDkgMy43OTIgMy4wMzkgMS41Mi0uMDY1IDIuMDktLjk4NyAzLjkzNS0uOTg3IDEuODMxIDAgMi4zNS45ODcgMy45Ni45NDggMS42MzctLjAyNiAyLjY3Ni0xLjQ4IDMuNjc2LTIuOTQ4IDEuMTU2LTEuNjg4IDEuNjM2LTMuMzI1IDEuNjYyLTMuNDE1LS4wMzktLjAxMy0zLjE4Mi0xLjIyMS0zLjIyLTQuODU3LS4wMjYtMy4wNCAyLjQ4LTQuNDk0IDIuNTk3LTQuNTU5LTEuNDI5LTIuMDktMy42MjMtMi4zMjQtNC4zOS0yLjM3Ni0yLS4xNTYtMy42NzUgMS4wOS00LjYxIDEuMDl6TTE1LjUzIDMuODNjLjg0My0xLjAxMiAxLjQtMi40MjcgMS4yNDUtMy44My0xLjIwNy4wNTItMi42NjIuODA1LTMuNTMyIDEuODE4LS43OC44OTYtMS40NTQgMi4zMzgtMS4yNzMgMy43MTQgMS4zMzguMTA0IDIuNzE1LS42ODggMy41NTktMS43MDEifSldfSk6Wih4Mix7c2l6ZToxOSxzdHJva2VXaWR0aDoxLjl9KX0pfWZ1bmN0aW9uIHVRKHtidW5kbGVJZDokLGljb25EYXRhVXJsOkp9KXtpZihKKXJldHVybiBaKCJpbWciLHtzcmM6SixjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pO3JldHVybiBaKHBRLHtidW5kbGVJZDokfSl9ZnVuY3Rpb24gVTQoe3VkaWQ6JCxjdXJyZW50QXBwOkp9KXtsZXRbUSxYXT1rKG51bGwpLFtLLFldPWsoITEpO2lmKHkoKCk9PntpZighSil7WChudWxsKTtyZXR1cm59bGV0IHE9ITE7cmV0dXJuIFgoe2J1bmRsZUlkOkouYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpKLmlzUmVhY3ROYXRpdmUscGlkOkoucGlkLGxvYWRpbmc6ITB9KSxOOChJMSwkLEouYnVuZGxlSWQpLnRoZW4oKEcpPT57aWYocSlyZXR1cm47WCh7YnVuZGxlSWQ6Si5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOkouaXNSZWFjdE5hdGl2ZSxwaWQ6Si5waWQsbG9hZGluZzohMSwuLi5HfSl9KSwoKT0+e3E9ITB9fSxbJCxKLEo/LmJ1bmRsZUlkLEo/LnBpZCxKPy5pc1JlYWN0TmF0aXZlXSksIVEpcmV0dXJuIFoobFEse30pO3JldHVybiBaKHMxLHtvcGVuOkssb25PcGVuQ2hhbmdlOlksc3VtbWFyeUNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IixzdW1tYXJ5OlooSjEse2NoaWxkcmVuOltaKHVRLHtidW5kbGVJZDpRLmJ1bmRsZUlkLGljb25EYXRhVXJsOlEuaWNvbkRhdGFVcmx9KSxaKGRRLHtidW5kbGVJZDpRLmJ1bmRsZUlkLGRpc3BsYXlOYW1lOlEuZGlzcGxheU5hbWV9KV19KSxjaGlsZHJlbjpbUS5lcnJvciYmWigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpRLmVycm9yfSksWigiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltaKE0yLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6US5zaG9ydFZlcnNpb24/YCR7US5zaG9ydFZlcnNpb259ICgke1EuYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6US5sb2FkaW5nPyLigKYiOiLigJQifSksWihNMix7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOlEubWluT1M/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksWihNMix7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOlEuZXhlY3V0YWJsZT8/KFEubG9hZGluZz8i4oCmIjoi4oCUIil9KSxaKE0yLHtsYWJlbDoiUElEIix2YWx1ZTpRLnBpZCE9bnVsbD9TdHJpbmcoUS5waWQpOiLigJQifSksUS5pc1JlYWN0TmF0aXZlJiZaKE0yLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLFooTTIse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6US5hcHBQYXRoPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpRLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57STEoYG9wZW4gLVIgJHtPMShRLmFwcFBhdGgpfWApfSxpY29uOlooajIse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi4yfSl9OnZvaWQgMH0pXX0pXX0pfWZ1bmN0aW9uIGxRKCl7cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1kZXRlY3Rpb24tc2tlbGV0b24iLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1sYWJlbCI6IldhaXRpbmcgZm9yIGZvcmVncm91bmQgYXBwIixjaGlsZHJlbjpaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJnLXdoaXRlL1swLjA4XSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0yIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToiaC0zLjUgdy1bNDYlXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImgtMi41IHctWzY4JV0gcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSJ9KV19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTIuNSBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pfSl9ZnVuY3Rpb24gZFEoe2J1bmRsZUlkOiQsZGlzcGxheU5hbWU6Sn0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGxlYWRpbmctdGlnaHQgdGV4dC1sZWZ0IixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvOTAgdHJ1bmNhdGUiLGNoaWxkcmVuOko/P21RKCQpfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0cnVuY2F0ZSIsdGl0bGU6JCxjaGlsZHJlbjokfSldfSl9ZnVuY3Rpb24gTTIoe2xhYmVsOiQsdmFsdWU6Sixtb25vOlEsYWN0aW9uOlh9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJncm91cCBmbGV4IGl0ZW1zLWJhc2VsaW5lIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltaKCJkdCIse2NsYXNzTmFtZToibS0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTAgdy0yMSBzaHJpbmstMCIsY2hpbGRyZW46JH0pLFooImRkIix7Y2xhc3NOYW1lOmBtLTAgdGV4dC13aGl0ZS85MCBmbGV4LTEgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCByZWxhdGl2ZSAke1E/ImZvbnQtbW9ubyB0ZXh0LVsxMXB4XSI6InRleHQtWzEycHhdIn1gLHRpdGxlOkosY2hpbGRyZW46W0osWCYmWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIGJvdHRvbS0wIHBsLTcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgYmctW2xpbmVhci1ncmFkaWVudCh0b19yaWdodCxyZ2JhKDI4LDI4LDMwLDApXzAlLCMxYzFjMWVfNTUlKV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE1c19lYXNlLHRyYW5zZm9ybV8wLjE1c19lYXNlXSBvcGFjaXR5LTAgdHJhbnNsYXRlLXgtMSBwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGdyb3VwLWhvdmVyOnRyYW5zbGF0ZS14LTAgZ3JvdXAtaG92ZXI6cG9pbnRlci1ldmVudHMtYXV0byIsY2hpbGRyZW46WigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlgub25DbGljayx0aXRsZTpYLnRpdGxlLCJhcmlhLWxhYmVsIjpYLnRpdGxlLGNsYXNzTmFtZToidy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkIHRleHQtd2hpdGUgY3Vyc29yLXBvaW50ZXIgcC0wIixjaGlsZHJlbjpYLmljb259KX0pXX0pXX0pfXZhciBDND1be2tleToiY2FtZXJhIixsYWJlbDoiQ2FtZXJhIn0se2tleToibWljcm9waG9uZSIsbGFiZWw6Ik1pY3JvcGhvbmUifSx7a2V5OiJwaG90b3MiLGxhYmVsOiJQaG90b3MifSx7a2V5OiJwaG90b3MtYWRkIixsYWJlbDoiQWRkIHRvIFBob3RvcyJ9LHtrZXk6ImNvbnRhY3RzIixsYWJlbDoiQ29udGFjdHMifSx7a2V5OiJjYWxlbmRhciIsbGFiZWw6IkNhbGVuZGFyIn0se2tleToicmVtaW5kZXJzIixsYWJlbDoiUmVtaW5kZXJzIn0se2tleToibG9jYXRpb24iLGxhYmVsOiJMb2NhdGlvbiJ9LHtrZXk6ImxvY2F0aW9uLWFsd2F5cyIsbGFiZWw6IkxvY2F0aW9uIChBbHdheXMpIn0se2tleToibm90aWZpY2F0aW9ucyIsbGFiZWw6Ik5vdGlmaWNhdGlvbnMifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIE80KHt1ZGlkOiQsYnVuZGxlSWQ6Sn0pe2xldFtRLFhdPWsoe30pLFtLLFldPWsobnVsbCksW3EsR109ayhudWxsKSxbQixOXT1rKCExKSx6PWsxKCgpPT57bGV0IEM9dHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFDKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChDKSlyZXR1cm5gYnVuICR7TzEoQyl9YDtpZigvXC5qcyQvLnRlc3QoQykpcmV0dXJuYG5vZGUgJHtPMShDKX1gO3JldHVybiBPMShDKX0sW10pO3koKCk9PntYKHt9KSxHKG51bGwpfSxbSl0pO2xldCBWPXcoYXN5bmMoQyxBKT0+e2lmKCFKKXJldHVybjtsZXQgTD1gJHtDfToke0F9YDtZKEwpLEcobnVsbCk7dHJ5e2xldCBVPWF3YWl0IEkxKGAke3p9IHBlcm1pc3Npb25zICR7QX0gJHtDfSAke08xKEopfSAtZCAke08xKCQpfWApO2lmKFUuZXhpdENvZGUhPT0wKXtHKFUuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtVLmV4aXRDb2RlfSlgKTtyZXR1cm59WCgoRik9Pih7Li4uRixbQ106QT09PSJyZXNldCI/dm9pZCAwOkF9KSl9ZmluYWxseXtZKG51bGwpfX0sW3osJCxKXSksSD13KGFzeW5jKCk9PntpZighSilyZXR1cm47WSgiX19hbGxfXyIpLEcobnVsbCk7dHJ5e2xldCBDPWF3YWl0IEkxKGAke3p9IHBlcm1pc3Npb25zIHJlc2V0IGFsbCAke08xKEopfSAtZCAke08xKCQpfWApO2lmKEMuZXhpdENvZGUhPT0wKXtHKEMuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtDLmV4aXRDb2RlfSlgKTtyZXR1cm59WCh7fSl9ZmluYWxseXtZKG51bGwpfX0sW3osJCxKXSk7aWYoIUopcmV0dXJuIFooY1Ese30pO3JldHVybiBaKHMxLHtvcGVuOkIsb25PcGVuQ2hhbmdlOk4sc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WihKMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLFooInNwYW4iLHt9KV19KSxjaGlsZHJlbjpbcSYmWigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpxfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToibWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtMSBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOkM0Lm1hcCgoe2tleTpDLGxhYmVsOkF9KT0+e2xldCBMPVFbQ107cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTAuNSBweS0xIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46QX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCBwLTAuNSIscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpBLGNoaWxkcmVuOltaKHo4LHthY3RpdmU6TD09PSJncmFudCIscGVuZGluZzpLPT09YCR7Q306Z3JhbnRgLG9uQ2xpY2s6KCk9PlYoQywiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpaKHYyLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLFooejgse2FjdGl2ZTpMPT09InJldm9rZSIscGVuZGluZzpLPT09YCR7Q306cmV2b2tlYCxvbkNsaWNrOigpPT5WKEMsInJldm9rZSIpLHZhcmlhbnQ6InJldm9rZSIsdGl0bGU6IkRlbnkiLGNoaWxkcmVuOlooTDAse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksWih6OCx7YWN0aXZlOiExLHBlbmRpbmc6Sz09PWAke0N9OnJlc2V0YCxvbkNsaWNrOigpPT5WKEMsInJlc2V0IiksdmFyaWFudDoicmVzZXQiLHRpdGxlOiJSZXNldCIsY2hpbGRyZW46WihhMCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjR9KX0pXX0pXX0sQyl9KX0pLFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSByb3VuZGVkLXQtWzEwcHhdIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fdG9wLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktZW5kIixjaGlsZHJlbjpaKCJidXR0b24iLHtvbkNsaWNrOkgsZGlzYWJsZWQ6Sz09PSJfX2FsbF9fIixjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS83MCB0ZXh0LVsxMHB4XSBweC0yIHB5LVszcHhdIHJvdW5kZWQtWzVweF0gY3Vyc29yLXBvaW50ZXIgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA0ZW1dIix0aXRsZToic2VydmUtc2ltIHBlcm1pc3Npb25zIHJlc2V0IGFsbCIsY2hpbGRyZW46Sz09PSJfX2FsbF9fIj8i4oCmIjoiUmVzZXQgYWxsIn0pfSldfSl9ZnVuY3Rpb24gY1EoKXtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLXBlcm1pc3Npb25zLWxvYWRpbmciLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1kaXNhYmxlZCI6InRydWUiLCJhcmlhLWJ1c3kiOiJ0cnVlIixjaGlsZHJlbjpaKCJkaXYiLHtjbGFzc05hbWU6InNlbGVjdC1ub25lIHRleHQtd2hpdGUvNTUgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQgY3Vyc29yLWRlZmF1bHQiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksWigic3BhbiIse30pLFooInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJwZXJtaXNzaW9ucy1sb2FkaW5nLWluZGljYXRvciIscm9sZToic3RhdHVzIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgcGVybWlzc2lvbnMiLGNsYXNzTmFtZToic2l6ZS0yLjUgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItWyM1ZjYyNjhdIGJvcmRlci10LVsjZjRmNGY1XSBhbmltYXRlLVtncmlkLXNwaW5fMC43c19saW5lYXJfaW5maW5pdGVdIn0pXX0pfSl9ZnVuY3Rpb24gejgoe2FjdGl2ZTokLHBlbmRpbmc6SixvbkNsaWNrOlEsdmFyaWFudDpYLHRpdGxlOkssY2hpbGRyZW46WX0pe2xldCBxPVg9PT0iZ3JhbnQiPyIjNGFkZTgwIjpYPT09InJldm9rZSI/IiNmODcxNzEiOiIjYTViNGZjIjtyZXR1cm4gWigiYnV0dG9uIix7b25DbGljazpRLGRpc2FibGVkOkosdGl0bGU6SywiYXJpYS1sYWJlbCI6SyxjbGFzc05hbWU6InctNiBoLTUuNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkIHAtMCBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSIsc3R5bGU6e2JhY2tncm91bmQ6JD9gJHtxfTIyYDoidHJhbnNwYXJlbnQiLGNvbG9yOiQ/cToicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIsb3BhY2l0eTpKPzAuNToxfSxjaGlsZHJlbjpZfSl9ZnVuY3Rpb24gYTUoe2xhYmVsOiQsY2hlY2tlZDpKLGRpc2FibGVkOlE9ITEsb25DaGFuZ2U6WH0pe3JldHVybiBaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6InN3aXRjaCIsImFyaWEtY2hlY2tlZCI6SiwiYXJpYS1sYWJlbCI6JCxkaXNhYmxlZDpRLG9uQ2xpY2s6KCk9PlgoIUopLGNsYXNzTmFtZTpgcmVsYXRpdmUgaC1bMThweF0gdy04IHNocmluay0wIHJvdW5kZWQtZnVsbCBib3JkZXItbm9uZSBwLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtRPyJjdXJzb3ItZGVmYXVsdCBiZy13aGl0ZS8yMCI6Sj8iY3Vyc29yLXBvaW50ZXIgYmctWyMwYTg0ZmZdIjoiY3Vyc29yLXBvaW50ZXIgYmctd2hpdGUvMjAifWAsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLVsycHhdIHNpemUtWzE0cHhdIHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpsZWZ0XzAuMTVzXSAke1E/ImJnLXdoaXRlLzUwIjoiYmctd2hpdGUifWAsc3R5bGU6e2xlZnQ6Sj8xNjoyfX0pfSl9dmFyIG9RPSJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSIsaVE9InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbS0wIjtmdW5jdGlvbiBBNCh7b3ZlcmxheUVuYWJsZWQ6JCxvblRvZ2dsZU92ZXJsYXk6Sn0pe2xldHtzbmFwc2hvdDpRfT1VMigpLHtoaWdobGlnaHRlZEtleTpYLHNldEhpZ2hsaWdodGVkS2V5Okt9PVI1KCksWT1RPy5lbGVtZW50cz8/W10scT1TNShRKSxHPVE/LmVycm9ycz8uWzBdPz9udWxsO3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6YCR7b1F9IHB4LTMgcHktMmAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZTppUSxjaGlsZHJlbjoiQVggVHJlZSJ9KSxaKGE1LHtsYWJlbDoiRW5hYmxlIG92ZXJsYXkiLGNoZWNrZWQ6JCxvbkNoYW5nZTpKfSldfSksISQ/bnVsbDpxP1ooRjQse2NoaWxkcmVuOiJBWCB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4ifSk6WS5sZW5ndGg9PT0wP1ooRjQse3NwaW5uZXI6IUcsY2hpbGRyZW46Rz8/IldhaXRpbmcgZm9yIGFjY2Vzc2liaWxpdHkgZGF0YeKApiJ9KTpaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEgbXQtMiBweS0yIG1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLHJvbGU6Imxpc3QiLGNoaWxkcmVuOlkubWFwKChCLE4pPT57bGV0IHo9czAoQik7cmV0dXJuIFooblEse2VsZW1lbnQ6QixpbmRleDpOLGFjdGl2ZTp6PT09WCxvbkhpZ2hsaWdodDpLfSx6KX0pfSldfSl9ZnVuY3Rpb24gRjQoe2NoaWxkcmVuOiQsc3Bpbm5lcjpKPSExfSl7cmV0dXJuIFooImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJtdC0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHB5LTQgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W0o/Wigic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0zLjUgc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8yMCBib3JkZXItdC13aGl0ZS82MCBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pOm51bGwsWigic3BhbiIse2NoaWxkcmVuOiR9KV19KX12YXIgblE9aTAoZnVuY3Rpb24oe2VsZW1lbnQ6SixpbmRleDpRLGFjdGl2ZTpYLG9uSGlnaGxpZ2h0Okt9KXtsZXQgWT1zMChKKSxxPWo1KEosUSksRz1gJHtNYXRoLnJvdW5kKEouZnJhbWUud2lkdGgpfXgke01hdGgucm91bmQoSi5mcmFtZS5oZWlnaHQpfWAsQj1bcS5sYWJlbCxxLnJvbGV8fHEudHlwZXx8ImVsZW1lbnQiLEddLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIik7cmV0dXJuIFooImRpdiIse3JvbGU6Imxpc3RpdGVtIix0YWJJbmRleDowLCJkYXRhLWF4LWtleSI6WSx0aXRsZTpCLG9uTW91c2VFbnRlcjooKT0+SyhZKSxvbk1vdXNlTGVhdmU6KCk9PksobnVsbCksb25Gb2N1czooKT0+SyhZKSxvbkJsdXI6KCk9PksobnVsbCksY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBweS0xIHB4LTAuNSBtaW4tdy0wICR7WD8iYmctd2hpdGUvWzAuMDZdIjoiIn1gLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpKLmxhYmVsfHxKLnJvbGV8fCJVbmxhYmVsZWQifSksWigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS80NSBmb250LW1vbm8gdGV4dC1bMTBweF0iLGNoaWxkcmVuOkoucm9sZXx8Si50eXBlfHwiZWxlbWVudCJ9KV19KSxaKCJjb2RlIix7Y2xhc3NOYW1lOiJzaHJpbmstMCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdGV4dC1bMTBweF0gcHgtMS41IHB5LVszcHhdIixjaGlsZHJlbjpHfSldfSl9LCgkLEopPT4kLmluZGV4PT09Si5pbmRleCYmJC5hY3RpdmU9PT1KLmFjdGl2ZSYmJC5vbkhpZ2hsaWdodD09PUoub25IaWdobGlnaHQmJng1KCQuZWxlbWVudCxKLmVsZW1lbnQpKTt2YXIgclE9bmV3IFNldChbImltYWdlL2pwZWciLCJpbWFnZS9wbmciLCJpbWFnZS9naWYiLCJpbWFnZS9oZWljIiwiaW1hZ2UvaGVpZiIsImltYWdlL3dlYnAiLCJ2aWRlby9tcDQiLCJ2aWRlby9xdWlja3RpbWUiXSksTDg9MTk2NjA4LE00PTUyNDI4ODAwMCxzNT0iYXBwbGljYXRpb24veC1zZXJ2ZS1zaW0taG9zdC1wYXRoIjthc3luYyBmdW5jdGlvbiBrNCgkLEosUSl7bGV0IFg9YXdhaXQgSihgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7UX0gJHtPMSgkKX1gKTtpZihYLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihYLnN0ZGVycnx8YGFkZG1lZGlhIGZhaWxlZCAoZXhpdCAke1guZXhpdENvZGV9KWApfWZ1bmN0aW9uIGsyKCQpe2xldCBKPSQubmFtZSxRPUoubGFzdEluZGV4T2YoIi4iKTtpZihRPj0wKXJldHVybiBKLnNsaWNlKFErMSkudG9Mb3dlckNhc2UoKTtpZigkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuIm1wNCI7cmV0dXJuImpwZyJ9ZnVuY3Rpb24gVzQoJCl7aWYoazIoJCk9PT0iaXBhIilyZXR1cm4iaXBhIjtpZihyUS5oYXMoJC50eXBlKSlyZXR1cm4ibWVkaWEiO3JldHVybiBudWxsfWZ1bmN0aW9uIGFRKCQpe2xldCBKPW5ldyBVaW50OEFycmF5KCQpLFE9IiI7Zm9yKGxldCBYPTA7WDxKLmxlbmd0aDtYKz0zMjc2OClRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLkouc3ViYXJyYXkoWCxYKzMyNzY4KSk7cmV0dXJuIGJ0b2EoUSl9YXN5bmMgZnVuY3Rpb24gXzQoJCxKLFEsWCl7bGV0IEs9MDtmb3IobGV0IFk9MDtZPCQuc2l6ZTtZKz1MOCl7bGV0IHE9YXdhaXQgJC5zbGljZShZLFkrTDgpLmFycmF5QnVmZmVyKCksRz1hUShxKSxOPWF3YWl0IFEoYGJhc2ggLWMgJ2VjaG8gJHtHfSB8IGJhc2U2NCAtZCAke1k9PT0wPyI+IjoiPj4ifSAke0p9J2ApO2lmKE4uZXhpdENvZGUhPT0wKXRocm93IEVycm9yKE4uc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Ti5leGl0Q29kZX0pYCk7aWYoIVgpY29udGludWU7bGV0IHo9TWF0aC5taW4oWStMOCwkLnNpemUpLFY9TWF0aC5mbG9vcih6LyQuc2l6ZSoxMDApO2lmKFYhPT1LKUs9VixYKHovJC5zaXplKX19YXN5bmMgZnVuY3Rpb24gRDQoJCxKLFEsWCl7aWYoJC5zaXplPk00KXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBLPWAvdG1wLyR7Sn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1F9YDtyZXR1cm4gYXdhaXQgXzQoJCxLLFgpLEt9YXN5bmMgZnVuY3Rpb24gUDQoJCxKLFEsWCxLKXtpZigkLnNpemU+TTQpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFk9Sj09PSJpcGEiPyJpcGEiOmsyKCQpLEc9YC90bXAvJHtKPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtZfWA7dHJ5e0soMCksYXdhaXQgXzQoJCxHLFEsSyksSyhudWxsKTtsZXQgQj1KPT09ImlwYSI/YHhjcnVuIHNpbWN0bCBpbnN0YWxsICR7WH0gJHtHfWA6YHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke1h9ICR7R31gLE49YXdhaXQgUShCKTtpZihOLmV4aXRDb2RlIT09MCl7bGV0IHo9Sj09PSJpcGEiPyJpbnN0YWxsIjoiYWRkbWVkaWEiO3Rocm93IEVycm9yKE4uc3RkZXJyfHxgJHt6fSBmYWlsZWQgKGV4aXQgJHtOLmV4aXRDb2RlfSlgKX19ZmluYWxseXtRKGBiYXNoIC1jICdybSAtZiAke0d9J2ApLmNhdGNoKCgpPT57fSl9fXZhciBzUT0zMDAwO2FzeW5jIGZ1bmN0aW9uIHRRKCQsSj1mZXRjaCl7dHJ5e2xldCBRPWF3YWl0IEooJCx7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKCFRLm9rKXJldHVybiBudWxsO2xldCBYPWF3YWl0IFEuanNvbigpO3JldHVybiBYJiZ0eXBlb2YgWD09PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShYKT9YOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fXZhciBlUT0yMDk3MTUyMDAsJFo9IkxhcmdlIHZpZGVvICg+MjAwIE1CKSDigJQgbWF5IHN0dXR0ZXIgb24gc2hhcmVkIG1lbW9yeSIsSTQ9IkhFSUMgZGVjb2RlIGZhaWxlZCDigJQgZXhwb3J0IGFzIEpQRUcgb3IgUE5HIGFuZCByZXRyeSI7ZnVuY3Rpb24gSlooJCxKKXtpZihKKXJldHVybiJhY3RpdmUiO2lmKCQ9PT0iYWN0aXZlIilyZXR1cm4iZGlzY29ubmVjdGVkIjtpZigkPT09ImRpc2Nvbm5lY3RlZCIpcmV0dXJuInJlYWR5IjtyZXR1cm4gJH1mdW5jdGlvbiBRWigkKXtpZighJC5pbmplY3RlZClyZXR1cm4icGxheSI7aWYoJC5zb3VyY2U9PT0icGxhY2Vob2xkZXIiKXJldHVybiJwbGF5IjtpZigkLmJ1bmRsZUlkJiYhJC5mb3JlZ3JvdW5kSXNJbmplY3RlZClyZXR1cm4iYXR0YWNoIjtyZXR1cm4ic3RvcCJ9ZnVuY3Rpb24gWlooJCl7cmV0dXJuICQuc3BsaXQoYApgKS5tYXAoKEopPT5KLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmZsYXRNYXAoKEopPT57bGV0IFE9Si5pbmRleE9mKCJcdCIpO2lmKFE8PTApcmV0dXJuW107bGV0IFg9Si5zbGljZSgwLFEpLnRyaW0oKSxLPUouc2xpY2UoUSsxKS50cmltKCk7aWYoIVh8fCFLKXJldHVybltdO3JldHVyblt7aWQ6WCxuYW1lOkt9XX0pfXZhciBYWj1uZXcgU2V0KFsibXA0IiwibTR2IiwibW92IiwicXQiLCJhdmkiLCJta3YiLCJ3ZWJtIiwibXBnIiwibXBlZyIsIjNncCIsIjNnMiIsInRzIiwid212Il0pO2Z1bmN0aW9uIEU0KCQpe2lmKCQudHlwZSYmJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiEwO2xldCBKPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpLFE9Si5sYXN0SW5kZXhPZigiLiIpO2lmKFE8MClyZXR1cm4hMTtyZXR1cm4gWFouaGFzKEouc2xpY2UoUSsxKSl9ZnVuY3Rpb24gS1ooJCl7cmV0dXJuIEU0KCQpJiYkLnNpemU+ZVF9ZnVuY3Rpb24gWVooJCl7bGV0IEo9KCQudHlwZT8/IiIpLnRvTG93ZXJDYXNlKCk7aWYoSj09PSJpbWFnZS9oZWljInx8Sj09PSJpbWFnZS9oZWlmIilyZXR1cm4hMDtsZXQgUT0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gUS5lbmRzV2l0aCgiLmhlaWMiKXx8US5lbmRzV2l0aCgiLmhlaWYiKX1mdW5jdGlvbiBxWih7cmF3TWVzc2FnZTokLGxhc3RGaWxlSXNIZWljOkosc291cmNlOlF9KXtpZihKJiYoUT09PSJpbWFnZSJ8fFE9PT0idmlkZW8iKSlyZXR1cm4gSTQ7cmV0dXJuICR9ZnVuY3Rpb24gR1ooe3N0YXRlOiR9KXtsZXQgSj0kPT09ImFjdGl2ZSI/IkFjdGl2ZSI6JD09PSJkaXNjb25uZWN0ZWQiPyJEaXNjb25uZWN0ZWQiOiJSZWFkeSIsUT0kPT09ImFjdGl2ZSI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1zdWNjZXNzLWVtZXJhbGQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDc0LDIyMiwxMjgsMC43KV0iOiQ9PT0iZGlzY29ubmVjdGVkIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLWRhbmdlci1zb2Z0IFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSgyNDgsMTEzLDExMywwLjU1KV0iOm51bGw7cmV0dXJuIFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIiwiZGF0YS1jYW1lcmEtcGlsbC1zdGF0ZSI6JCxjaGlsZHJlbjpbUSYmWigic3BhbiIse2NsYXNzTmFtZTpRfSksSl19KX1mdW5jdGlvbiBWWigpe3JldHVybiBaKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1jZW50ZXIgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IiwiZGF0YS1jYW1lcmEtdGVzdC1wYXR0ZXJuLWhpbnQiOiEwLGNoaWxkcmVuOiJUZXN0LXBhdHRlcm4gZmVlZCJ9KX1mdW5jdGlvbiBCWih7bW9kZTokLGZpbGVOYW1lOkosd2ViY2FtTmFtZTpRLHNvdXJjZUtpbmQ6WH0pe2lmKCQ9PT0idXBsb2FkaW5nIilyZXR1cm4gWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46IlVwbG9hZGluZ+KApiJ9KTtpZigkPT09ImZpbGUiKXJldHVybiBaKEoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOlg9PT0idmlkZW8iPyJWaWRlbyI6IkltYWdlIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpKPz8iIn0pXX0pO2lmKCQ9PT0id2ViY2FtIilyZXR1cm4gWihKMSx7Y2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjoiV2ViY2FtIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpRPz8iIn0pXX0pO3JldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSl9ZnVuY3Rpb24gVDQoe2tpbmQ6JCxtZXNzYWdlOkp9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiQ9PT0id2FybmluZyI/ImJnLXdhcm5pbmcvMTAgYm9yZGVyIGJvcmRlci13YXJuaW5nLzI1IHRleHQtd2FybmluZy1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIiwiZGF0YS1jYW1lcmEtYmFubmVyLWtpbmQiOiQscm9sZTokPT09ImVycm9yIj8iYWxlcnQiOiJzdGF0dXMiLGNoaWxkcmVuOkp9KX1mdW5jdGlvbiB3NCh7dWRpZDokLGJ1bmRsZUlkOkp9KXtsZXRbUSxYXT1rKCExKSxbSyxZXT1rKCJwbGFjZWhvbGRlciIpLFtxLEddPWsoIiIpLFtCLE5dPWsobnVsbCksW3osVl09ayghMSksSD1UKDApLFtDLEFdPWsoITEpLFtMLFVdPWsoITEpLEY9VChudWxsKSxbVyxFXT1rKFtdKSxbUCx4XT1rKCExKSxbRCxuXT1rKCIiKSxbUixkXT1rKCJvZmYiKSxbaSxyXT1rKG51bGwpLFtvLGFdPWsobnVsbCksTDE9aSE9PW51bGx8fG8hPT1udWxsLFtsLG1dPWsobnVsbCksW1gxLFoxXT1rKG51bGwpLFssSDFdPWsobnVsbCksW3QsUTFdPWsoITEpLFtxMSxqXT1rKCJyZWFkeSIpLFtwLF9dPWsoKCk9Pm5ldyBTZXQpLFtoLGddPWsobnVsbCksW3YsWTFdPWsobnVsbCksRzE9VCghMSksdzE9VCghMSksVzE9VCgib2ZmIiksVDE9VCghMSksXzE9azEoKCk9PntsZXQgST13aW5kb3cuX19TSU1fUFJFVklFV19fPy5zZXJ2ZVNpbUJpbjtpZighSSlyZXR1cm4ic2VydmUtc2ltIjtpZigvXC50cyQvLnRlc3QoSSkpcmV0dXJuYGJ1biAke08xKEkpfWA7aWYoL1wuanMkLy50ZXN0KEkpKXJldHVybmBub2RlICR7TzEoSSl9YDtyZXR1cm4gTzEoSSl9LFtdKSxSMT13KGFzeW5jKCk9PntsZXQgST13aW5kb3cuX19TSU1fUFJFVklFV19fPy5jYW1lcmFTdGF0dXNFbmRwb2ludDtyZXR1cm4gST90UShJKTpudWxsfSxbXSksTTE9VChhc3luYygpPT57fSkscjE9VChKKTt5KCgpPT57cjEuY3VycmVudD1KfSxbSl0pLHkoKCk9PntsZXQgST0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCB1PWF3YWl0IFIxKCk7aWYoSXx8IXV8fCF1LmFsaXZlKXJldHVybjt3MS5jdXJyZW50PSEwO2xldCBzPXUuc291cmNlO2lmKHM9PT0icGxhY2Vob2xkZXIifHxzPT09IndlYmNhbSJ8fHM9PT0iaW1hZ2UifHxzPT09InZpZGVvIilZKHMpO2lmKChzPT09ImltYWdlInx8cz09PSJ2aWRlbyIpJiZ1LmFyZylHKHUuYXJnKSxOKHUuYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKHM9PT0id2ViY2FtIiYmdS5hcmcpbih1LmFyZyksTTEuY3VycmVudCgpO2xldCBDMT11Lm1pcnJvcj09PSJvbiI/Im9uIjoib2ZmIjtkKEMxKSxXMS5jdXJyZW50PUMxLGcodS5oZWxwZXJQaWQ/P251bGwpLFExKCEwKTtsZXQgVjE9QXJyYXkuaXNBcnJheSh1LmJ1bmRsZUlkcyk/dS5idW5kbGVJZHM6W107aWYoVjEubGVuZ3RoPjApXyhuZXcgU2V0KFYxKSk7bGV0IEIxPXIxLmN1cnJlbnQsaDE9cyYmcyE9PSJwbGFjZWhvbGRlciI7aihCMSYmVjEuaW5jbHVkZXMoQjEpJiZoMT8iYWN0aXZlIjoicmVhZHkiKSxIMShgUmVhdHRhY2hlZCDihpIgJHtzPz8icnVubmluZyBoZWxwZXIifSR7dS5hcmc/YCAoJHt1LmFyZ30pYDoiIn1gKX0pKCksKCk9PntJPSEwfX0sWyQsUjFdKSx5KCgpPT57bGV0IEk9ITEsdT0hMSxzPW51bGwsQzE9YXN5bmMoKT0+e2lmKEl8fHUpcmV0dXJuO2lmKHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKXJldHVybjt1PSEwO3RyeXtsZXQgQjE9YXdhaXQgUjEoKTtpZihJKXJldHVybjtsZXQgaDE9ISFCMT8uYWxpdmUsbDE9QXJyYXkuaXNBcnJheShCMT8uYnVuZGxlSWRzKT9CMS5idW5kbGVJZHM6bnVsbCxwMT0hIUomJihsMT9sMS5pbmNsdWRlcyhKKTpwLmhhcyhKKSksQzA9QjE/LnNvdXJjZT8/bnVsbCxXMD10JiZoMSYmcDEmJiEhKEMwJiZDMCE9PSJwbGFjZWhvbGRlciIpJiYoaD09bnVsbHx8QjE/LmhlbHBlclBpZD09PWgpO2lmKGooKHowKT0+SlooejAsVzApKSwhaDEpUTEoKHowKT0+e2lmKCF6MClyZXR1cm4gejA7cmV0dXJuIF8obmV3IFNldCksZyhudWxsKSxXMS5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZih0JiZoIT1udWxsJiZCMT8uaGVscGVyUGlkIT09aClRMSghMSksXyhuZXcgU2V0KSxnKG51bGwpLFcxLmN1cnJlbnQ9Im9mZiI7ZWxzZSBpZihoMSYmQXJyYXkuaXNBcnJheShCMT8uYnVuZGxlSWRzKSl7bGV0IHowPUIxLmJ1bmRsZUlkcztfKChQMSk9PntpZihQMS5zaXplPT09ejAubGVuZ3RoJiZ6MC5ldmVyeSgoUzApPT5QMS5oYXMoUzApKSlyZXR1cm4gUDE7cmV0dXJuIG5ldyBTZXQoejApfSl9fWZpbmFsbHl7dT0hMX19O3M9c2V0SW50ZXJ2YWwoKCk9PntDMSgpfSxzUSk7bGV0IFYxPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKUMxKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsVjEpO3JldHVybigpPT57aWYoST0hMCxzKWNsZWFySW50ZXJ2YWwocyk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixWMSl9fSxbUjEsdCxoLEoscF0pO2xldCBqMT13KGFzeW5jKCk9Pnt4KCEwKSxtKG51bGwpO3RyeXtsZXQgST1hd2FpdCBJMShgJHtfMX0gY2FtZXJhIC0tbGlzdC13ZWJjYW1zYCk7aWYoSS5leGl0Q29kZSE9PTApe20oSS5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke0kuZXhpdENvZGV9KWApO3JldHVybn1sZXQgdT1aWihJLnN0ZG91dCk7aWYoRSh1KSx1Lmxlbmd0aD4wJiYhRCluKHVbMF0uaWQpfWZpbmFsbHl7eCghMSl9fSxbRCxfMV0pO3koKCk9PntNMS5jdXJyZW50PWoxfSxbajFdKSx5KCgpPT57aWYoTCYmVy5sZW5ndGg9PT0wJiYhUClqMSgpfSxbTCxXLmxlbmd0aCxQLGoxXSk7bGV0IEYxPXcoKEkpPT57bShxWih7cmF3TWVzc2FnZTpJLGxhc3RGaWxlSXNIZWljOkcxLmN1cnJlbnQsc291cmNlOkt9KSl9LFtLXSksTjE9dyhhc3luYyhJLHUscyk9PntsZXQgQzE9ST09PSJpbWFnZSJ8fEk9PT0idmlkZW8iLFYxPVsiY2FtZXJhIiwic3dpdGNoIixDMT8iZmlsZSI6SV07aWYoST09PSJ3ZWJjYW0iJiZ1KVYxLnB1c2goTzEodSkpO2lmKEMxKXtpZighcy50cmltKCkpcmV0dXJuIG0oIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7VjEucHVzaChPMShzLnRyaW0oKSkpfVYxLnB1c2goIi1kIiwkLCItLXF1aWV0Iik7bGV0IEIxPWF3YWl0IEkxKGAke18xfSAke1YxLmpvaW4oIiAiKX1gKTtpZihCMS5leGl0Q29kZSE9PTApcmV0dXJuIEYxKEIxLnN0ZGVyci50cmltKCl8fEIxLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke0IxLmV4aXRDb2RlfSlgKSwhMTtHMS5jdXJyZW50PSExO3RyeXtsZXQgaDE9SlNPTi5wYXJzZShCMS5zdGRvdXQudHJpbSgpKTtIMShgU3dpdGNoZWQg4oaSICR7aDEuc291cmNlPz9JfSR7aDEuYXJnP2AgKCR7aDEuYXJnfSlgOiIifWApfWNhdGNoe0gxKGBTd2l0Y2hlZCDihpIgJHtJfWApfXJldHVybiEwfSxbJCxfMSxGMV0pLGExPXcoYXN5bmMoKT0+e2lmKCFKKXJldHVybjtyKCJpbmplY3QiKSxtKG51bGwpLEgxKG51bGwpO3RyeXtsZXQgST1bImNhbWVyYSIsTzEoSiksIi1kIiwkLCItLXF1aWV0Il07aWYoSz09PSJpbWFnZSJ8fEs9PT0idmlkZW8iKXtpZighcS50cmltKCkpe20oIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufUkucHVzaCgiLS1maWxlIixPMShxLnRyaW0oKSkpfWVsc2UgaWYoSz09PSJ3ZWJjYW0iKWlmKEQpSS5wdXNoKCItLXdlYmNhbSIsTzEoRCkpO2Vsc2UgSS5wdXNoKCItLXdlYmNhbSIpO0kucHVzaCgiLS1taXJyb3IiLFIpO2xldCB1PWF3YWl0IEkxKGAke18xfSAke0kuam9pbigiICIpfWApO2lmKHUuZXhpdENvZGUhPT0wKXtGMSh1LnN0ZGVyci50cmltKCl8fHUuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7dS5leGl0Q29kZX0pYCk7cmV0dXJufUcxLmN1cnJlbnQ9ITE7bGV0IHM9bnVsbDt0cnl7bGV0IEMxPUpTT04ucGFyc2UodS5zdGRvdXQudHJpbSgpKTtzPUMxLmhlbHBlclBpZD8/bnVsbDtsZXQgVjE9QzEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixCMT1DMS5waWQ/YCBwaWQgJHtDMS5waWR9YDoiIixoMT1DMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke0MxLmhlbHBlclBpZH1gOiIiO0gxKGAke1YxfSAke0MxLnNvdXJjZT8/S30gaW50byAke0p9JHtCMX0ke2gxfWApfWNhdGNoe0gxKHUuc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfVExKCEwKSxqKEs9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLGcocyksXygoQzEpPT5DMS5oYXMoSik/QzE6bmV3IFNldChDMSkuYWRkKEopKSxXMS5jdXJyZW50PVJ9ZmluYWxseXtyKG51bGwpfX0sW0osJCxLLHEsRCxSLF8xLEYxXSksZjE9dD9gJHtLfTo6JHtLPT09IndlYmNhbSI/RDoiIn06OiR7Sz09PSJpbWFnZSJ8fEs9PT0idmlkZW8iP3E6IiJ9YDpudWxsLGkxPSEhSiYmcC5oYXMoSiksdDE9aTEmJkshPT0icGxhY2Vob2xkZXIiO3koKCk9PntpZighdDEpe1QxLmN1cnJlbnQ9ITE7cmV0dXJufWlmKFQxLmN1cnJlbnQpcmV0dXJuO1QxLmN1cnJlbnQ9ITAsWCghMCl9LFt0MV0pLHkoKCk9PntpZighdilyZXR1cm47aWYoIUp8fEwxfHxDKXJldHVybjtpZihLIT09IndlYmNhbSJ8fEQhPT12KXJldHVybjtpZihZMShudWxsKSx0KXJldHVybjthMSgpfSxbdixKLEwxLEMsSyxELHQsYTFdKSx5KCgpPT57aWYoIXQpcmV0dXJuO2lmKChLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpJiYhcS50cmltKCkpcmV0dXJuO2lmKEs9PT0id2ViY2FtIiYmIUQpcmV0dXJuO2lmKHcxLmN1cnJlbnQpe3cxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBJPSExO3JldHVybihhc3luYygpPT57YSgic3dpdGNoIiksbShudWxsKTt0cnl7aWYoSSlyZXR1cm47YXdhaXQgTjEoSyxELHEpfWZpbmFsbHl7aWYoIUkpYShudWxsKX19KSgpLCgpPT57ST0hMH19LFtmMV0pLHkoKCk9PntpZighdClyZXR1cm47aWYoVzEuY3VycmVudD09PVIpcmV0dXJuO2xldCBJPVIsdT0hMTtyZXR1cm4oYXN5bmMoKT0+e2EoIm1pcnJvciIpLG0obnVsbCk7dHJ5e2xldCBzPWF3YWl0IEkxKGAke18xfSBjYW1lcmEgbWlycm9yICR7SX0gLWQgJHskfSAtLXF1aWV0YCk7aWYodSlyZXR1cm47aWYocy5leGl0Q29kZSE9PTApe20ocy5zdGRlcnIudHJpbSgpfHxzLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke3MuZXhpdENvZGV9KWApO3JldHVybn1XMS5jdXJyZW50PUksSDEoYE1pcnJvciDihpIgJHtJfWApfWZpbmFsbHl7aWYoIXUpYShudWxsKX19KSgpLCgpPT57dT0hMH19LFtSLHRdKTtsZXQgcTA9dyhhc3luYygpPT57cigic3RvcCIpLG0obnVsbCk7dHJ5e2xldCBJPWF3YWl0IEkxKGAke18xfSBjYW1lcmEgLS1zdG9wLXdlYmNhbSAtZCAkeyR9YCk7aWYoSS5leGl0Q29kZSE9PTApe20oSS5zdGRlcnIudHJpbSgpfHxgc3RvcC13ZWJjYW0gZmFpbGVkICgke0kuZXhpdENvZGV9KWApO3JldHVybn1IMSgiQ2FtZXJhIGhlbHBlciBzdG9wcGVkLiIpLFExKCExKSxqKCJyZWFkeSIpLF8obmV3IFNldCksVzEuY3VycmVudD0ib2ZmIn1maW5hbGx5e3IobnVsbCl9fSxbJCxfMV0pLEcwPXcoYXN5bmMoSSk9PntsZXQgdT1ZWih7dHlwZTpJLnR5cGUsbmFtZTpJLm5hbWV9KSxzPUkudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8dSxDMT1JLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIil8fEU0KHt0eXBlOkkudHlwZSxuYW1lOkkubmFtZX0pO2lmKCFzJiYhQzEpe0cxLmN1cnJlbnQ9ITEsbShgVW5zdXBwb3J0ZWQgZmlsZSB0eXBlOiAke0kudHlwZXx8SS5uYW1lfWApO3JldHVybn1pZihBKCEwKSxtKG51bGwpLFoxKG51bGwpLEtaKHt0eXBlOkkudHlwZSxuYW1lOkkubmFtZSxzaXplOkkuc2l6ZX0pKVoxKCRaKTtHMS5jdXJyZW50PXU7dHJ5e2xldCBWMT1rMihJKSxCMT1hd2FpdCBENChJLCJzZXJ2ZS1zaW0tY2Ftc3JjIixWMSxJMSk7TihJLm5hbWUpLFkoQzE/InZpZGVvIjoiaW1hZ2UiKSxHKEIxKSxIMShgTG9hZGVkICR7SS5uYW1lfWApfWNhdGNoKFYxKXtpZihHMS5jdXJyZW50KW0oSTQpO2Vsc2UgbShWMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e0EoITEpfX0sW10pLGwwPXcoYXN5bmMoSSk9PntJLnByZXZlbnREZWZhdWx0KCksSS5zdG9wUHJvcGFnYXRpb24oKSxILmN1cnJlbnQ9MCxWKCExKTtsZXQgdT1JLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZih1KWF3YWl0IEcwKHUpfSxbRzBdKSx2MT13KCgpPT57WSgicGxhY2Vob2xkZXIiKSxHKCIiKSxOKG51bGwpLG0obnVsbCksWjEobnVsbCksRzEuY3VycmVudD0hMX0sW10pLFYwPXcoKCk9PntGLmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxKMD13KGFzeW5jKEkpPT57bGV0IHU9SS50YXJnZXQscz11LmZpbGVzPy5bMF07aWYodS52YWx1ZT0iIixzKWF3YWl0IEcwKHMpfSxbRzBdKTt5KCgpPT57aWYoIUwpcmV0dXJuO2xldCBJPSh1KT0+e2xldCBzPXUudGFyZ2V0O2lmKHMgaW5zdGFuY2VvZiBFbGVtZW50JiZzLmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47VSghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixJKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsSSl9LFtMXSk7bGV0IFAwPXcoKEkpPT57aWYobihJLmlkKSxZKCJ3ZWJjYW0iKSxOKG51bGwpLG0obnVsbCksRzEuY3VycmVudD0hMSxVKCExKSxKKVkxKEkuaWQpfSxbSl0pLG0xPXcoKCk9PntkKChJKT0+ST09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxlMT0hdHx8Sz09PSJwbGFjZWhvbGRlciIsUjA9dygoSSk9PntpZihJLnByZXZlbnREZWZhdWx0KCksSC5jdXJyZW50KyssSC5jdXJyZW50PT09MSlWKCEwKX0sW10pLHkxPXcoKEkpPT57aWYoSS5wcmV2ZW50RGVmYXVsdCgpLEkuZGF0YVRyYW5zZmVyKUkuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksQjA9dygoSSk9PntpZihJLnByZXZlbnREZWZhdWx0KCksSC5jdXJyZW50LS0sSC5jdXJyZW50PD0wKUguY3VycmVudD0wLFYoITEpfSxbXSksSDA9UVooe2J1bmRsZUlkOkosaW5qZWN0ZWQ6dCxzb3VyY2U6Syxmb3JlZ3JvdW5kSXNJbmplY3RlZDppMX0pLEQxPUgwPT09InN0b3AiP3tsYWJlbDppPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6cTAsa2luZDoic3RvcCJ9OkgwPT09ImF0dGFjaCI/e2xhYmVsOmk9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7Sn1gLG9uQ2xpY2s6YTEsa2luZDoiYXR0YWNoIn06e2xhYmVsOmk9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOmExLGtpbmQ6InBsYXkifSxFMT1IMD09PSJzdG9wIj9DfHxpIT09bnVsbDohSnx8Q3x8aSE9PW51bGwsUTA9Sz09PSJwbGFjZWhvbGRlciIsTjA9Sz09PSJ3ZWJjYW0iLFUwPShLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpJiYhIUIsazA9TjA/Vy5maW5kKChJKT0+SS5pZD09PUQpPy5uYW1lPz9EPz8iV2ViY2FtIjpudWxsLEsxPUM/InVwbG9hZGluZyI6VTA/ImZpbGUiOk4wPyJ3ZWJjYW0iOiJwbGFjZWhvbGRlciI7cmV0dXJuIFooczEse29wZW46USxvbk9wZW5DaGFuZ2U6WCxib2R5Q2xhc3NOYW1lOiJwdC0yLjUiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlooSjEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJDYW1lcmEifSksWihHWix7c3RhdGU6cTF9KV19KSxjaGlsZHJlbjpaKCJkaXYiLHtvbkRyYWdFbnRlcjpSMCxvbkRyYWdPdmVyOnkxLG9uRHJhZ0xlYXZlOkIwLG9uRHJvcDpsMCxjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIuNSIsY2hpbGRyZW46W1ooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOiJSZXBsYWNlcyB0aGUgc2ltdWxhdG9yJ3MgY2FtZXJhIGZlZWQgYnkgaW5qZWN0aW5nIGEgZHlsaWIgYXQgYXBwIGxhdW5jaCBhbmQgc3RyZWFtaW5nIGZyYW1lcyBpbnRvIHNoYXJlZCBtZW1vcnkuIFBpY2sgbWVkaWEgb3IgYSB3ZWJjYW0sIHRoZW4gUGxheSB0byBpbmplY3QgaW50byB0aGUgZm9yZWdyb3VuZCBhcHAuIn0pLFooImlucHV0Iix7cmVmOkYsdHlwZToiZmlsZSIsYWNjZXB0OiJpbWFnZS8qLHZpZGVvLyoiLGNsYXNzTmFtZToiaGlkZGVuIixvbkNoYW5nZTpKMH0pLFooImRpdiIse29uQ2xpY2s6KEkpPT57aWYoIVEwKXJldHVybjtpZihJLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1jbGVhci1tZWRpYV0iKSlyZXR1cm47VjAoKX0sdGl0bGU6UTA/Ik5vIHNvdXJjZSBzZWxlY3RlZCDigJQgUGxheSB1c2VzIGEgdGVzdC1wYXR0ZXJuIGZlZWQuIENsaWNrIHRvIHBpY2sgYW4gaW1hZ2UvdmlkZW8sIG9yIGRyb3Agb25lIGhlcmUuIjpOMD9gU291cmNlOiAke2swfWA6YFNvdXJjZTogJHtCPz9LfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLFEwPyJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEyIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCIsej8iIWJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4wOCldICFib3JkZXItW3JnYmEoMTAsMTMyLDI1NSwwLjYpXSI6IiIsQz8iY3Vyc29yLXByb2dyZXNzIjpRMD8iY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3ItZGVmYXVsdCJdLmpvaW4oIiAiKSxjaGlsZHJlbjpbWihCWix7bW9kZTpLMSxmaWxlTmFtZTpCLHdlYmNhbU5hbWU6azAsc291cmNlS2luZDpLfSksIVEwJiYhQyYmWigiYnV0dG9uIix7ImRhdGEtY2xlYXItbWVkaWEiOiEwLG9uQ2xpY2s6KEkpPT57SS5zdG9wUHJvcGFnYXRpb24oKSx2MSgpfSxjbGFzc05hbWU6InNocmluay0wIHctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOlooTDAse3NpemU6MTQsc3Ryb2tlV2lkdGg6Mn0pfSldfSksUTAmJiFDJiZaKFZaLHt9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbWigiYnV0dG9uIix7b25DbGljazooKT0+VSgoSSk9PiFJKSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIGhvdmVyOmJvcmRlci13aGl0ZS8yMCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1oYXNwb3B1cCI6Im1lbnUiLCJhcmlhLWV4cGFuZGVkIjpMLHRpdGxlOks9PT0id2ViY2FtIj9gU291cmNlOiB3ZWJjYW0ke0Q/YCAoJHtXLmZpbmQoKEkpPT5JLmlkPT09RCk/Lm5hbWU/P0R9KWA6IiJ9IOKAlCBjbGljayB0byBjaGFuZ2VgOmBTb3VyY2U6ICR7S30g4oCUIGNsaWNrIHRvIHBpY2sgbWVkaWEgb3Igd2ViY2FtYCwiYXJpYS1sYWJlbCI6IkNob29zZSBjYW1lcmEgc291cmNlIixjaGlsZHJlbjpaKHUyLHtzaXplOjIwLHN0cm9rZVdpZHRoOjJ9KX0pLEwmJlooImRpdiIse3JvbGU6Im1lbnUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIHotMTAgbWluLXctWzIwMHB4XSBmbGV4IGZsZXgtY29sIGdhcC1weCBwLTEgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40KV0iLGNoaWxkcmVuOltaKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG9uQ2xpY2s6KCk9PntVKCExKSxWMCgpfSx0aXRsZToiUGljayBhbiBpbWFnZSBvciB2aWRlbyBmcm9tIGRpc2siLGNoaWxkcmVuOiJCcm93c2UgbWVkaWHigKYifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOlA/IkNhbWVyYXMgKGxvYWRpbmfigKYpIjpXLmxlbmd0aD09PTA/Ik5vIGNhbWVyYXMiOiJDYW1lcmFzIn0pLFooImJ1dHRvbiIse29uQ2xpY2s6KEkpPT57SS5zdG9wUHJvcGFnYXRpb24oKSxqMSgpfSxkaXNhYmxlZDpQLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1bMjJweF0gaC1bMjJweF0gYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpaKGEwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLFcubWFwKChJKT0+e2xldCB1PUs9PT0id2ViY2FtIiYmRD09PUkuaWQ7cmV0dXJuIFooImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIix1PyIhYmctd2hpdGUvWzAuMTJdICF0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS84NSJdLmpvaW4oIiAiKSxvbkNsaWNrOigpPT5QMChJKSx0aXRsZTpJLm5hbWUsY2hpbGRyZW46SS5uYW1lfSxJLmlkKX0pXX0pXX0pLFooImJ1dHRvbiIse29uQ2xpY2s6RDEub25DbGljayxkaXNhYmxlZDpFMSxjbGFzc05hbWU6WyJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6b3BhY2l0eS01MCBtaW4taC1bMzZweF0iLEQxLmtpbmQ9PT0ic3RvcCI/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0iXS5qb2luKCIgIiksdGl0bGU6RDEua2luZD09PSJzdG9wIj8iU3RvcCB0aGUgY2FtZXJhIGhlbHBlciBhbmQgdGVybWluYXRlIGluamVjdGVkIGFwcHMiOkQxLmtpbmQ9PT0iYXR0YWNoIj9gSW5qZWN0ICR7Sn0gc28gaXQgam9pbnMgdGhlIGNhbWVyYSBmZWVkYDohSj8iQnJpbmcgYW4gYXBwIHRvIHRoZSBmb3JlZ3JvdW5kIGZpcnN0IjoiU3RhcnQ6IGluamVjdCB0aGUgZHlsaWIgYW5kIGxhdW5jaCB0aGUgZm9yZWdyb3VuZCBhcHAgd2l0aCB0aGUgY2hvc2VuIHNvdXJjZSIsImFyaWEtcHJlc3NlZCI6RDEua2luZD09PSJzdG9wIiwiYXJpYS1sYWJlbCI6RDEua2luZD09PSJzdG9wIj8iU3RvcCI6IlBsYXkiLGNoaWxkcmVuOltEMS5raW5kPT09InN0b3AiP1oocjIse30pOloobjIse30pLFooInNwYW4iLHtjaGlsZHJlbjpEMS5raW5kPT09InN0b3AiPyJTdG9wIjpEMS5raW5kPT09ImF0dGFjaCI/IkluamVjdCI6IlBsYXkifSldfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm0xLGRpc2FibGVkOmUxLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBtaW4taC1bMzZweF0gYm9yZGVyIHJvdW5kZWQtWzdweF0gZm9udC1baW5oZXJpdF0gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgYWN0aXZlOnNjYWxlLVswLjk3XSAke1I9PT0ib24iPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA5XSBlbmFibGVkOmhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgTWlycm9yOiAke1J9IOKAlCB0YXAgdG8gdG9nZ2xlYCx0aXRsZTplMT8iTWlycm9yIHRvZ2dsZSBhdmFpbGFibGUgb25jZSBhIHNvdXJjZSBpcyBzdHJlYW1pbmciOmBNaXJyb3I6ICR7Un0g4oCUIGNsaWNrIHRvIHRvZ2dsZWAsImFyaWEtcHJlc3NlZCI6Uj09PSJvbiIsY2hpbGRyZW46WihtMix7c2l6ZToyMCxzdHJva2VXaWR0aDoyLGZpbGw6Uj09PSJvbiI/ImN1cnJlbnRDb2xvciI6Im5vbmUifSl9KV19KSxYMSYmWihUNCx7a2luZDoid2FybmluZyIsbWVzc2FnZTpYMX0pLGwmJlooVDQse2tpbmQ6ImVycm9yIixtZXNzYWdlOmx9KV19KX0pfXZhciBiND01MDA7ZnVuY3Rpb24geTQoe3VkaWQ6JCxldmVudHNFbmRwb2ludDpKfSl7bGV0W1EsWF09ayghMSksW0ssWV09ayhbXSksW3EsR109ayghMSksQj1rMSgoKT0+Sj8/YCR7YjEoImFwaS9ldmVudC1sb2cvZXZlbnRzIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gLFtKLCRdKTt5KCgpPT57RyghMSksWShbXSk7bGV0IHo9QTAoQik7cmV0dXJuIHoub25tZXNzYWdlPSh7ZGF0YTpWfSk9Pnt0cnl7bGV0IEg9SlNPTi5wYXJzZShWKTtpZihHKCExKSxBcnJheS5pc0FycmF5KEguZXZlbnRzKSlZKEguZXZlbnRzLnNsaWNlKC1iNCkpO2Vsc2UgaWYoSC5ldmVudClZKChDKT0+e3JldHVyblsuLi5DLmZpbHRlcigoTCk9PkwuaWQhPT1ILmV2ZW50LmlkKSxILmV2ZW50XS5zbGljZSgtYjQpfSl9Y2F0Y2h7fX0sei5vbmVycm9yPSgpPT5HKCEwKSwoKT0+ei5jbG9zZSgpfSxbQl0pO2xldCBOPWsxKCgpPT5LLnNsaWNlKCkucmV2ZXJzZSgpLFtLXSk7cmV0dXJuIFooczEse29wZW46USxvbk9wZW5DaGFuZ2U6WCwiZGF0YS1ldmVudC1sb2ciOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlooSjEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSIsY2hpbGRyZW46IkV2ZW50IExvZyJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJqdXN0aWZ5LXNlbGYtZW5kIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSBweC0xLjUgcHktWzNweF0gdGV4dC1bMTBweF0gZm9udC1tb25vIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOksubGVuZ3RofSldfSksY2hpbGRyZW46Ti5sZW5ndGg9PT0wP1ooImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IHRleHQtWzEycHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOnE/IkRpc2Nvbm5lY3RlZCI6Ik5vIGV2ZW50cyB5ZXQifSk6WigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IG1heC1oLVszMjBweF0gZmxleC1jb2wgZ2FwLTEgb3ZlcmZsb3cteS1hdXRvIHB5LTAuNSBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpOLm1hcCgoeik9PlooTlose2V2ZW50Onp9LHouaWQpKX0pfSl9ZnVuY3Rpb24gTlooe2V2ZW50OiR9KXtsZXQgSj16WigkLnRpbWVzdGFtcCksUT1bJC5zb3VyY2UsJC5raW5kLCQuYWN0aW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIC8gIiksWD0kLm1zZz8/JC5zdW1tYXJ5LEs9JC5zdGF0dXM9PT0iZXJyb3IiPyJib3JkZXItWyNmZjQ1M2FdLzUwIGJnLVsjZmY0NTNhXS8xMCB0ZXh0LVsjZmZiM2FkXSI6ImJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSB0ZXh0LXdoaXRlLzUwIjtyZXR1cm4gWigiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRpdGxlOlEsY2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy1bNTZweF8xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbWQgcHgtMS41IHB5LTEuNSB0ZXh0LVsxMnB4XSBsZWFkaW5nLXRpZ2h0IGhvdmVyOmJnLXdoaXRlL1swLjA1XSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpKfSksWigic3BhbiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOlh9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtdC0wLjUgYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDAiLGNoaWxkcmVuOlF9KV19KSwkLnN0YXR1cz9aKCJzcGFuIix7Y2xhc3NOYW1lOmByb3VuZGVkLW1kIGJvcmRlciBweC0xLjUgcHktWzNweF0gdGV4dC1bMTBweF0gZm9udC1tb25vICR7S31gLGNoaWxkcmVuOiQuc3RhdHVzfSk6bnVsbF19KX1mdW5jdGlvbiB6WigkKXtsZXQgSj1uZXcgRGF0ZSgkKTtpZihOdW1iZXIuaXNOYU4oSi5nZXRUaW1lKCkpKXJldHVybiIiO3JldHVybiBKLnRvTG9jYWxlVGltZVN0cmluZyhbXSx7aG91cjoiMi1kaWdpdCIsbWludXRlOiIyLWRpZ2l0IixzZWNvbmQ6IjItZGlnaXQifSl9dmFyIExaPTYwLEhaPTgwMDA7ZnVuY3Rpb24gUzQoJCl7bGV0W0osUV09ayhudWxsKSxbWCxLXT1rKFtdKSxbWSxxXT1rKCExKSxbRyxCXT1rKCExKSxOPVQoMCk7cmV0dXJuIHkoKCk9PntRKG51bGwpLEsoW10pLHEoITEpLEIoITEpLE4uY3VycmVudD0wO2xldCB6PUEwKCQpO3oub25tZXNzYWdlPSh7ZGF0YTpIfSk9Pnt0cnl7bGV0IEM9SlNPTi5wYXJzZShIKTtpZihxKCExKSwic2NoZW1hVmVyc2lvbiJpbiBDKVEoQyk7ZWxzZSBpZigidCJpbiBDKXtsZXQgQT1DO04uY3VycmVudD1EYXRlLm5vdygpLEIoITEpLEsoKEwpPT57bGV0IFU9Wy4uLkxdLnJldmVyc2UoKS5maW5kKChXKT0+Vy5idW5kbGVJZCE9PW51bGwpPy5idW5kbGVJZD8/bnVsbDtyZXR1cm5bLi4uVSE9PW51bGwmJkEuYnVuZGxlSWQhPT1udWxsJiZVIT09QS5idW5kbGVJZD9bXTpMLEFdLnNsaWNlKC1MWil9KX19Y2F0Y2h7fX0sei5vbmVycm9yPSgpPT5xKCEwKTtsZXQgVj1zZXRJbnRlcnZhbCgoKT0+e2lmKE4uY3VycmVudD4wJiZEYXRlLm5vdygpLU4uY3VycmVudD5IWilCKCEwKX0sMTAwMCk7cmV0dXJuKCk9Pnt6LmNsb3NlKCksY2xlYXJJbnRlcnZhbChWKX19LFskXSkse21ldGE6SixsYXRlc3Q6WC5hdCgtMSk/P251bGwsaGlzdG9yeTpYLGVycm9yZWQ6WSxzdGFsZTpHfX1mdW5jdGlvbiBIOCgkKXtyZXR1cm5gJHtNYXRoLnJvdW5kKCQpfSVgfWZ1bmN0aW9uIFU4KCQpe2xldCBKPSQvMTA0ODU3NjtyZXR1cm4gSj49MTAyND9gJHsoSi8xMDI0KS50b0ZpeGVkKDEpfSBHQmA6YCR7TWF0aC5yb3VuZChKKX0gTUJgfWZ1bmN0aW9uIEM4KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQi9zIjtpZigkPDEwMjQpcmV0dXJuYCR7TWF0aC5yb3VuZCgkKX0gQi9zYDtsZXQgSj0kLzEwMjQ7cmV0dXJuIEo8MTAyND9gJHtNYXRoLnJvdW5kKEopfSBLQi9zYDpgJHsoSi8xMDI0KS50b0ZpeGVkKDEpfSBNQi9zYH1mdW5jdGlvbiBlMigkLEosUSxYKXtpZigkLmxlbmd0aDwyKXJldHVybiIiO2xldCBLPVghPT12b2lkIDAmJlg+MD9YOk1hdGgubWF4KC4uLiQsMSksWT1KLygkLmxlbmd0aC0xKSxxPSQubWFwKChCLE4pPT4oe3g6TipZLHk6US1CL0sqUX0pKSxHPWBNJHtxWzBdLngudG9GaXhlZCgxKX0sJHtxWzBdLnkudG9GaXhlZCgxKX1gO2ZvcihsZXQgQj0wO0I8cS5sZW5ndGgtMTtCKyspe2xldCBOPXFbQi0xXT8/cVtCXSx6PXFbQl0sVj1xW0IrMV0sSD1xW0IrMl0/P1YsQz1NYXRoLm1pbih6LnksVi55KSxBPU1hdGgubWF4KHoueSxWLnkpLEw9KFApPT5NYXRoLm1pbihBLE1hdGgubWF4KEMsUCkpLFU9ei54KyhWLngtTi54KS82LEY9TCh6LnkrKFYueS1OLnkpLzYpLFc9Vi54LShILngtei54KS82LEU9TChWLnktKEgueS16LnkpLzYpO0crPWAgQyR7VS50b0ZpeGVkKDEpfSwke0YudG9GaXhlZCgxKX0gJHtXLnRvRml4ZWQoMSl9LCR7RS50b0ZpeGVkKDEpfSAke1YueC50b0ZpeGVkKDEpfSwke1YueS50b0ZpeGVkKDEpfWB9cmV0dXJuIEd9dmFyIEoyPTk2LHAwPTI0O2Z1bmN0aW9uIHQ1KHt2YWx1ZXM6JCxtYXg6SixjbGFzc05hbWU6UX0pe2xldCBYPWUyKCQsSjIscDAsSiksSz1YP2Ake1h9IEwke0oyfSwke3AwfSBMMCwke3AwfSBaYDoiIjtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7SjJ9ICR7cDB9YCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjbGFzc05hbWU6YHctZnVsbCBoLTggJHtRfWAsY2hpbGRyZW46W1ooInBhdGgiLHtkOkssZmlsbDoiY3VycmVudENvbG9yIixvcGFjaXR5OjAuMTIsc3Ryb2tlOiJub25lIn0pLFooZTUse2Q6WH0pXX0pfWZ1bmN0aW9uIGU1KHtkOiQsY2xhc3NOYW1lOkp9KXtyZXR1cm4gWigicGF0aCIse2Q6JCxjbGFzc05hbWU6SixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS41LHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIn0pfWZ1bmN0aW9uIGo0KHt1ZGlkOiQsY3VycmVudEFwcEJ1bmRsZUlkOkosbWV0cmljc0VuZHBvaW50OlF9KXtsZXQgWD1rMSgoKT0+UT8/YCR7YjEoIm1ldHJpY3MiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWAsW1EsJF0pLHttZXRhOkssbGF0ZXN0OlksaGlzdG9yeTpxLGVycm9yZWQ6RyxzdGFsZTpCfT1TNChYKSxbTix6XT1rKCEwKSxWPVkhPT1udWxsJiZZLmJ1bmRsZUlkIT09bnVsbCYmIUcmJiFCLEg9SiE9bnVsbCYmSi5zdGFydHNXaXRoKCJjb20uYXBwbGUuIiksQz1HPyJUaGUgbWV0cmljcyBzdHJlYW0gZGlzY29ubmVjdGVkIjpIPyJPbmx5IHlvdXIgYXBwIGlzIG1lYXN1cmVkOyBhIHN5c3RlbSBhcHAgaXMgaW4gdGhlIGZvcmVncm91bmQiOiJXYWl0aW5nIGZvciBhY3Rpdml0eSBkYXRhIjtyZXR1cm4gWihzMSx7b3BlbjpOLG9uT3BlbkNoYW5nZTp6LHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0Iixib2R5Q2xhc3NOYW1lOlY/dm9pZCAwOiJoaWRkZW4iLHN1bW1hcnk6WihKMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkFjdGl2aXR5In0pLFY/IU4mJlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAgdGFidWxhci1udW1zIHRleHQtcmlnaHQiLGNoaWxkcmVuOltIOChZLmNwdVBjdCksIiDCtyAiLFU4KFkubWVtQnl0ZXMpXX0pOlooInNwYW4iLHsiZGF0YS1tZXRyaWNzLXdhcm5pbmciOiEwLHJvbGU6InN0YXR1cyIsY2xhc3NOYW1lOiJncm91cCByZWxhdGl2ZSBqdXN0aWZ5LXNlbGYtZW5kIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46W1ooYjAseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToidy0zLjUgaC0zLjUgdGV4dC1hbWJlci00MDAifSksWigic3BhbiIse2NsYXNzTmFtZToic3Itb25seSIsY2hpbGRyZW46Q30pLFooInNwYW4iLHtjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgcmlnaHQtMCB0b3AtZnVsbCB6LTEwIG10LTEgaGlkZGVuIHctbWF4IG1heC13LVsyMjBweF0gcm91bmRlZC1tZCBiZy1ibGFjay85MCBweC0yIHB5LTEgdGV4dC1bMTFweF0gbGVhZGluZy1zbnVnIHRleHQtd2hpdGUvOTAgc2hhZG93LWxnIGdyb3VwLWhvdmVyOmJsb2NrIixjaGlsZHJlbjpDfSldfSldfSksY2hpbGRyZW46Vj9aKEoxLHtjaGlsZHJlbjpbWih4NCx7bGFiZWw6IkNQVSIsdmFsdWU6SDgoWS5jcHVQY3QpLGhpbnQ6Sz9gJHtLLmhvc3RDb3Jlc30gY29yZXNgOnZvaWQgMCx2YWx1ZXM6cS5tYXAoKEEpPT5BLmNwdVBjdCksY2xhc3NOYW1lOiJ0ZXh0LWVtZXJhbGQtNDAwIn0pLFooeDQse2xhYmVsOiJNZW1vcnkiLHZhbHVlOlU4KFkubWVtQnl0ZXMpLHZhbHVlczpxLm1hcCgoQSk9PkEubWVtQnl0ZXMpLGNsYXNzTmFtZToidGV4dC1za3ktNDAwIn0pLFooVVose2Rvd246WS5uZXRJbkJ5dGVzUGVyU2VjLHVwOlkubmV0T3V0Qnl0ZXNQZXJTZWMsZG93blZhbHVlczpxLm1hcCgoQSk9PkEubmV0SW5CeXRlc1BlclNlYyksdXBWYWx1ZXM6cS5tYXAoKEEpPT5BLm5ldE91dEJ5dGVzUGVyU2VjKX0pXX0pOm51bGx9KX1mdW5jdGlvbiB4NCh7bGFiZWw6JCx2YWx1ZTpKLGhpbnQ6USx2YWx1ZXM6WCxjbGFzc05hbWU6S30pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81MCB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46JH0pLFooInNwYW4iLHtjbGFzc05hbWU6InRhYnVsYXItbnVtcyB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46W0osUSYmWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS8zMCB0ZXh0LVsxMXB4XSBtbC0xLjUiLGNoaWxkcmVuOlF9KV19KV19KSxaKHQ1LHt2YWx1ZXM6WCxjbGFzc05hbWU6S30pXX0pfWZ1bmN0aW9uIFVaKHtkb3duOiQsdXA6Sixkb3duVmFsdWVzOlEsdXBWYWx1ZXM6WH0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81MCB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46Ik5ldHdvcmsifSksWigic3BhbiIse2NsYXNzTmFtZToidGFidWxhci1udW1zIHRleHQtWzExcHhdIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1jeWFuLTQwMCIsY2hpbGRyZW46WyLihpMgIixDOCgkKV19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzMwIG14LTEuNSIsY2hpbGRyZW46IsK3In0pLFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtdmlvbGV0LTQwMCIsY2hpbGRyZW46WyLihpEgIixDOChKKV19KV19KV19KSxaKENaLHtkb3duOlEsdXA6WH0pXX0pfWZ1bmN0aW9uIENaKHtkb3duOiQsdXA6Sn0pe2xldCBRPU1hdGgubWF4KC4uLiQsLi4uSiwxKTtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7SjJ9ICR7cDB9YCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjbGFzc05hbWU6InctZnVsbCBoLTgiLGNoaWxkcmVuOltaKGU1LHtkOmUyKCQsSjIscDAsUSksY2xhc3NOYW1lOiJ0ZXh0LWN5YW4tNDAwIn0pLFooZTUse2Q6ZTIoSixKMixwMCxRKSxjbGFzc05hbWU6InRleHQtdmlvbGV0LTQwMCJ9KV19KX12YXIgSjU9WyJleHRyYS1zbWFsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJleHRyYS1sYXJnZSIsImV4dHJhLWV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtZXh0cmEtbGFyZ2UiXSxPWj0yNTAsRlo9e2FwcGVhcmFuY2U6ImxpZ2h0IiwibGlxdWlkLWdsYXNzIjoiY2xlYXIiLCJjb2xvci1maWx0ZXIiOiJub25lIiwidGV4dC1zaXplIjoibGFyZ2UiLCJyZWR1Y2UtbW90aW9uIjoib2ZmIiwiaW5jcmVhc2UtY29udHJhc3QiOiJvZmYiLCJzaG93LWJvcmRlcnMiOiJvZmYiLCJyZWR1Y2UtdHJhbnNwYXJlbmN5Ijoib2ZmIix2b2ljZW92ZXI6Im9mZiJ9LE84PXthcHBlYXJhbmNlOlt7dmFsdWU6ImxpZ2h0IixsYWJlbDoiTGlnaHQifSx7dmFsdWU6ImRhcmsiLGxhYmVsOiJEYXJrIn1dLCJsaXF1aWQtZ2xhc3MiOlt7dmFsdWU6ImNsZWFyIixsYWJlbDoiQ2xlYXIifSx7dmFsdWU6InRpbnRlZCIsbGFiZWw6IlRpbnRlZCJ9XSwiY29sb3ItZmlsdGVyIjpbe3ZhbHVlOiJub25lIixsYWJlbDoiTm9uZSJ9LHt2YWx1ZToicmVkLWdyZWVuIixsYWJlbDoiUmVkL0dyZWVuIChQcm90YW5vcGlhKSJ9LHt2YWx1ZToiZ3JlZW4tcmVkIixsYWJlbDoiR3JlZW4vUmVkIChEZXV0ZXJhbm9waWEpIn0se3ZhbHVlOiJibHVlLXllbGxvdyIsbGFiZWw6IkJsdWUvWWVsbG93IChUcml0YW5vcGlhKSJ9LHt2YWx1ZToiZ3JheXNjYWxlIixsYWJlbDoiR3JheXNjYWxlIn1dfSxBWj1be2tleToicmVkdWNlLW1vdGlvbiIsbGFiZWw6IlJlZHVjZSBNb3Rpb24ifSx7a2V5OiJpbmNyZWFzZS1jb250cmFzdCIsbGFiZWw6IkluY3JlYXNlIENvbnRyYXN0In0se2tleToic2hvdy1ib3JkZXJzIixsYWJlbDoiU2hvdyBCb3JkZXJzIn0se2tleToicmVkdWNlLXRyYW5zcGFyZW5jeSIsbGFiZWw6IlJlZHVjZSBUcmFuc3BhcmVuY3kifSx7a2V5OiJ2b2ljZW92ZXIiLGxhYmVsOiJWb2ljZU92ZXIifV07ZnVuY3Rpb24gWTAoe2ljb246JCxsYWJlbDpKLGNoaWxkcmVuOlF9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgbWluLWgtWzMwcHhdIiwiZGF0YS1zZXR0aW5nLXJvdyI6SixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2l6ZS1bMThweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUiLGNoaWxkcmVuOiR9KSxKXX0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggbWluLXctMCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46UX0pXX0pfWZ1bmN0aW9uIE1aKHt2YWx1ZTokLGRpc2FibGVkOkosb25DaGFuZ2U6UX0pe2xldFtYLEtdPWsobnVsbCksWT1UKG51bGwpLHE9VChudWxsKSxHPXcoKFUpPT57aWYocS5jdXJyZW50PT09VSlyZXR1cm47cS5jdXJyZW50PVUsUShVKX0sW1FdKSxCPXcoKFUpPT57aWYoSyhVKSxZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCk7WS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkcoVSksT1opfSxbR10pLE49dygoKT0+e2lmKFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KSxZLmN1cnJlbnQ9bnVsbDtLKChVKT0+e2lmKFUhPT1udWxsKUcoVSk7cmV0dXJuIG51bGx9KSxxLmN1cnJlbnQ9bnVsbH0sW0ddKSx6PUo1Lmxlbmd0aC0xLFY9WD8/JCxIPWAke1YveioxMDB9JWA7cmV0dXJuIFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggdy1bMTIwcHhdIG1pbi13LTAgZmxleC1jb2wiLGNoaWxkcmVuOltaKCJpbnB1dCIse3R5cGU6InJhbmdlIiwiYXJpYS1sYWJlbCI6IlRleHQgU2l6ZSIsbWluOjAsbWF4Onosc3RlcDoxLHZhbHVlOlYsZGlzYWJsZWQ6SixvbkNoYW5nZTooVSk9PkIoTnVtYmVyKFUudGFyZ2V0LnZhbHVlKSksb25Qb2ludGVyVXA6TixvbktleVVwOk4sb25CbHVyOk4sc3R5bGU6eyItLXNsaWRlci1maWxsIjpILCItLXNsaWRlci1maWxsLWNvbG9yIjpKPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiIjMGE4NGZmIn0sY2xhc3NOYW1lOmBoLVsxM3B4XSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIHJvdW5kZWQtZnVsbCBiZy10cmFuc3BhcmVudCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpbb3V0bGluZToxLjVweF9zb2xpZF9yZ2JhKDEwLDEzMiwyNTUsMC41NSldIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtNCAke0o/ImN1cnNvci1kZWZhdWx0IjoiY3Vyc29yLXBvaW50ZXIifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOmgtWzRweF0gWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpbYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpX3ZhcigtLXNsaWRlci1maWxsKSxyZ2JhKDI1NSwyNTUsMjU1LDAuMjIpX3ZhcigtLXNsaWRlci1maWxsKSldIFsmOjotbW96LXJhbmdlLXRyYWNrXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmJnLXdoaXRlLzIwIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmJnLVt2YXIoLS1zbGlkZXItZmlsbC1jb2xvcildIn0gJHsiWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTphcHBlYXJhbmNlLW5vbmUgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpzaXplLVsxM3B4XSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmJnLXdoaXRlIFsmOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUvNTAgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpzaGFkb3ctWzBfMXB4XzNweF9yZ2JhKDAsMCwwLDAuNDUpXSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOi1tdC1bNC41cHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpzaXplLVsxM3B4XSBbJjo6LW1vei1yYW5nZS10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXRodW1iXTpib3JkZXItbm9uZSBbJjo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJdOmJnLXdoaXRlLzUwIn1gfSksWigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1ub25lIG10LVszcHhdIGZsZXgganVzdGlmeS1iZXR3ZWVuIHB4LVs1LjVweF0iLGNoaWxkcmVuOko1Lm1hcCgoVSk9PlooInNwYW4iLHtjbGFzc05hbWU6InNpemUtWzJweF0gcm91bmRlZC1mdWxsIGJnLXdoaXRlLzQwIn0sVSkpfSldfSl9ZnVuY3Rpb24gTTAoe2xhYmVsOiQsdmFsdWU6SixvcHRpb25zOlEsZGlzYWJsZWQ6WCxvbkNoYW5nZTpLfSl7cmV0dXJuIFoocjUse2xhYmVsOiQsdmFsdWU6SixvcHRpb25zOlEsZGlzYWJsZWQ6WCxvbkNoYW5nZTpLLGNsYXNzTmFtZToiYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTAuNSBweC0yIG1pbi13LTAgbWF4LXctWzE1MHB4XSBkaXNhYmxlZDp0ZXh0LXdoaXRlLzQwIn0pfXZhciAkNT17YXBwZWFyYW5jZTpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik0xMiAydjIifSksWigicGF0aCIse2Q6Ik0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUifSksWigicGF0aCIse2Q6Ik0xNiAxMmE0IDQgMCAwIDAtNC00In0pLFooInBhdGgiLHtkOiJtMTkgNS0xLjI1NiAxLjI1NiJ9KSxaKCJwYXRoIix7ZDoiTTIwIDEyaDIifSldfSksZ2xhc3M6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjIwIDIyMCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoiTTE1MiAxODNWMTk1SDEwMFYxODNIMTUyWk0xOTYgMTM5VjEyNkMxOTYgMTAxLjY5OSAxNzYuMzAxIDgyIDE1MiA4MkgxMDBDNzUuNjk5NSA4MiA1NiAxMDEuNjk5IDU2IDEyNlYxMzlDNTYgMTYzLjMwMSA3NS42OTk1IDE4MyAxMDAgMTgzVjE5NUw5OS4yNzY0IDE5NC45OTVDNjguOTIyOCAxOTQuNjExIDQ0LjM4OTMgMTcwLjA3NyA0NC4wMDQ5IDEzOS43MjRMNDQgMTM5VjEyNkM0NCA5NS4wNzIxIDY5LjA3MjEgNzAgMTAwIDcwSDE1MkMxODIuOTI4IDcwIDIwOCA5NS4wNzIxIDIwOCAxMjZWMTM5TDIwNy45OTUgMTM5LjcyNEMyMDcuNjExIDE3MC4wNzcgMTgzLjA3NyAxOTQuNjExIDE1Mi43MjQgMTk0Ljk5NUwxNTIgMTk1VjE4M0MxNzYuMzAxIDE4MyAxOTYgMTYzLjMwMSAxOTYgMTM5WiJ9KSxaKCJwYXRoIix7ZDoiTTEzNiAyNUMxNDcuMDQ2IDI1IDE1NiAzMy45NTQzIDE1NiA0NVY3MEgxNDNWNDVDMTQzIDQxLjEzNCAxMzkuODY2IDM4IDEzNiAzOEg0MUMzNy4xMzQgMzggMzQgNDEuMTM0IDM0IDQ1VjE0MEMzNCAxNDMuODY2IDM3LjEzNCAxNDcgNDEgMTQ3SDQ0Ljg2MDRDNDUuNjQ4NyAxNTEuNTM2IDQ2Ljk2MzQgMTU1Ljg5MSA0OC43NDAyIDE2MEg0MUw0MC40ODM0IDE1OS45OTNDMjkuODQ4MSAxNTkuNzI0IDIxLjI3NjUgMTUxLjE1MiAyMS4wMDY4IDE0MC41MTdMMjEgMTQwVjQ1QzIxIDMzLjk1NDMgMjkuOTU0MyAyNSA0MSAyNUgxMzZaIn0pLFooInBhdGgiLHtkOiJNMTU2LjE5OSAxNDBDMTU2LjE5OSAxNTAuODczIDE0Ny41MjMgMTU5LjcxOSAxMzYuNzE2IDE1OS45OTNMMTM2LjE5OSAxNjBIODAuOTE3Qzc3Ljk0NjEgMTYwIDc2LjE2MzkgMTYzLjMgNzcuNzkzIDE2NS43ODRDNzkuMjQ1MSAxNjcuOTk5IDc2LjE2NDcgMTcwLjM1MyA3NC40MDk0IDE2OC4zN0w3My42MDU5IDE2Ny40NjJDNjkuMzQ5NyAxNjIuNjU0IDY3IDE1Ni40NTUgNjcgMTUwLjAzNEM2NyAxNDguMzU4IDY4LjM1ODMgMTQ3IDcwLjAzMzkgMTQ3SDEzNi4xOTlDMTQwLjA2NSAxNDcgMTQzLjE5OSAxNDMuODY2IDE0My4xOTkgMTQwVjk2Ljk5NTVDMTQzLjE5OSA5My45ODIyIDE0MS4zNTQgOTEuMjc2MyAxMzguNTQ5IDkwLjE3NjFDMTM3LjM4OSA4OS43MjE1IDEzNy43MTUgODggMTM4Ljk2IDg4TDE0My4xOTkgODhDMTUwLjM3OSA4OCAxNTYuMTk5IDkzLjgyMDMgMTU2LjE5OSAxMDFWMTQwWiJ9KV19KSxmaWx0ZXI6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1ooInBhdGgiLHtkOiJNMTEgMTdhNCA0IDAgMCAxLTggMFY1YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAyWiJ9KSxaKCJwYXRoIix7ZDoiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyJ9KSxaKCJwYXRoIix7ZDoiTSA3IDE3aC4wMSJ9KSxaKCJwYXRoIix7ZDoibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgifSldfSksdGV4dFNpemU6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNTIgMzQiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTM5LjcyNjYgMzMuMDIzNEMzOC4xNDg0IDMzLjAyMzQgMzYuNzUgMzIuNzI2NiAzNS41MzEyIDMyLjEzMjhDMzQuMzEyNSAzMS41MzkxIDMzLjM1OTQgMzAuNzEwOSAzMi42NzE5IDI5LjY0ODRDMzIgMjguNTcwMyAzMS42NjQxIDI3LjMxMjUgMzEuNjY0MSAyNS44NzVDMzEuNjY0MSAyMy43ODEyIDMyLjQyOTcgMjIuMTA5NCAzMy45NjA5IDIwLjg1OTRDMzUuNTA3OCAxOS42MDk0IDM3LjcxMDkgMTguOTA2MiA0MC41NzAzIDE4Ljc1TDQ3LjYwMTYgMTguMzUxNlYxNi41QzQ3LjYwMTYgMTUuMDE1NiA0Ny4xMzI4IDEzLjgzNTkgNDYuMTk1MyAxMi45NjA5QzQ1LjI1NzggMTIuMDg1OSA0My45NTMxIDExLjY0ODQgNDIuMjgxMiAxMS42NDg0QzQwLjkwNjIgMTEuNjQ4NCAzOS43NSAxMS45NDUzIDM4LjgxMjUgMTIuNTM5MUMzNy44NzUgMTMuMTMyOCAzNy4wOTM4IDE0LjA0NjkgMzYuNDY4OCAxNS4yODEyQzM2LjI2NTYgMTUuNjA5NCAzNi4wMTU2IDE1Ljg1MTYgMzUuNzE4OCAxNi4wMDc4QzM1LjQyMTkgMTYuMTY0MSAzNS4wNzgxIDE2LjI0MjIgMzQuNjg3NSAxNi4yNDIyQzM0LjE1NjIgMTYuMjQyMiAzMy43MTA5IDE2LjA3ODEgMzMuMzUxNiAxNS43NUMzMy4wMDc4IDE1LjQyMTkgMzIuODM1OSAxNC45OTIyIDMyLjgzNTkgMTQuNDYwOUMzMi44MzU5IDE0LjIyNjYgMzIuODY3MiAxMy45NzY2IDMyLjkyOTcgMTMuNzEwOUMzMy4wMDc4IDEzLjQ0NTMgMzMuMTA5NCAxMy4xNzk3IDMzLjIzNDQgMTIuOTE0MUMzMy44NzUgMTEuNDYwOSAzNS4wMTU2IDEwLjMwNDcgMzYuNjU2MiA5LjQ0NTMxQzM4LjMxMjUgOC41ODU5NCA0MC4yMjY2IDguMTU2MjUgNDIuMzk4NCA4LjE1NjI1QzQ0LjMyMDMgOC4xNTYyNSA0NS45ODQ0IDguNDkyMTkgNDcuMzkwNiA5LjE2NDA2QzQ4LjgxMjUgOS44MjAzMSA0OS44OTg0IDEwLjc1IDUwLjY0ODQgMTEuOTUzMUM1MS40MTQxIDEzLjE1NjIgNTEuNzk2OSAxNC41NzAzIDUxLjc5NjkgMTYuMTk1M1YzMC45MTQxQzUxLjc5NjkgMzEuNTg1OSA1MS42MDk0IDMyLjEwOTQgNTEuMjM0NCAzMi40ODQ0QzUwLjg1OTQgMzIuODU5NCA1MC4zNjcyIDMzLjA0NjkgNDkuNzU3OCAzMy4wNDY5QzQ5LjE2NDEgMzMuMDQ2OSA0OC42Nzk3IDMyLjg2NzIgNDguMzA0NyAzMi41MDc4QzQ3LjkyOTcgMzIuMTQ4NCA0Ny43MzQ0IDMxLjY2NDEgNDcuNzE4OCAzMS4wNTQ3VjI4LjM1OTRINDcuNjcxOUM0Ni45ODQ0IDI5Ljc4MTIgNDUuOTA2MiAzMC45MTQxIDQ0LjQzNzUgMzEuNzU3OEM0Mi45ODQ0IDMyLjYwMTYgNDEuNDE0MSAzMy4wMjM0IDM5LjcyNjYgMzMuMDIzNFpNNDAuODA0NyAyOS42NzE5QzQyLjA3MDMgMjkuNjcxOSA0My4yMTA5IDI5LjQwNjIgNDQuMjI2NiAyOC44NzVDNDUuMjU3OCAyOC4zNDM4IDQ2LjA3ODEgMjcuNjE3MiA0Ni42ODc1IDI2LjY5NTNDNDcuMjk2OSAyNS43NzM0IDQ3LjYwMTYgMjQuNzUgNDcuNjAxNiAyMy42MjVWMjEuMzI4MUw0MS4xMzI4IDIxLjc1QzM5LjQ0NTMgMjEuODU5NCAzOC4xNjQxIDIyLjI3MzQgMzcuMjg5MSAyMi45OTIyQzM2LjQxNDEgMjMuNjk1MyAzNS45NzY2IDI0LjYwOTQgMzUuOTc2NiAyNS43MzQ0QzM1Ljk3NjYgMjYuOTIxOSAzNi40MjE5IDI3Ljg3NSAzNy4zMTI1IDI4LjU5MzhDMzguMjAzMSAyOS4zMTI1IDM5LjM2NzIgMjkuNjcxOSA0MC44MDQ3IDI5LjY3MTlaTTIuMTc5NjkgMzMuMDIzNEMxLjUwNzgxIDMzLjAyMzQgMC45NzY1NjIgMzIuODM1OSAwLjU4NTkzOCAzMi40NjA5QzAuMTk1MzEyIDMyLjA4NTkgMCAzMS41NzgxIDAgMzAuOTM3NUMwIDMwLjUzMTIgMC4wODU5Mzc1IDMwLjA3MDMgMC4yNTc4MTIgMjkuNTU0N0wxMC40MDYyIDIuNDE0MDZDMTAuOTg0NCAwLjgwNDY4OCAxMi4xMDE2IDAgMTMuNzU3OCAwQzE0LjYxNzIgMCAxNS4zMjgxIDAuMjAzMTI1IDE1Ljg5MDYgMC42MDkzNzVDMTYuNDUzMSAxLjAxNTYyIDE2Ljg3NSAxLjYyNSAxNy4xNTYyIDIuNDM3NUwyNy4yNTc4IDI5LjQ4NDRDMjcuNDQ1MyAzMCAyNy41MzkxIDMwLjQ2ODggMjcuNTM5MSAzMC44OTA2QzI3LjUzOTEgMzEuNTQ2OSAyNy4zMzU5IDMyLjA3MDMgMjYuOTI5NyAzMi40NjA5QzI2LjUyMzQgMzIuODM1OSAyNS45NzY2IDMzLjAyMzQgMjUuMjg5MSAzMy4wMjM0QzI0LjYzMjggMzMuMDIzNCAyNC4xMDk0IDMyLjg3NSAyMy43MTg4IDMyLjU3ODFDMjMuMzQzOCAzMi4yODEyIDIzLjAzOTEgMzEuNzg5MSAyMi44MDQ3IDMxLjEwMTZMMTMuODI4MSA1LjM0Mzc1SDEzLjY2NDFMNC42NjQwNiAzMS4xMDE2QzQuNDI5NjkgMzEuNzg5MSA0LjEyNSAzMi4yODEyIDMuNzUgMzIuNTc4MUMzLjM3NSAzMi44NzUgMi44NTE1NiAzMy4wMjM0IDIuMTc5NjkgMzMuMDIzNFpNNi42Nzk2OSAyMy43NDIyQzYuMTQ4NDQgMjMuNzQyMiA1LjcwMzEyIDIzLjU2MjUgNS4zNDM3NSAyMy4yMDMxQzQuOTg0MzggMjIuODQzOCA0LjgwNDY5IDIyLjM5ODQgNC44MDQ2OSAyMS44NjcyQzQuODA0NjkgMjEuMzUxNiA0Ljk4NDM4IDIwLjkxNDEgNS4zNDM3NSAyMC41NTQ3QzUuNzAzMTIgMjAuMTk1MyA2LjE0ODQ0IDIwLjAxNTYgNi42Nzk2OSAyMC4wMTU2SDIwLjg1OTRDMjEuMzc1IDIwLjAxNTYgMjEuODEyNSAyMC4xOTUzIDIyLjE3MTkgMjAuNTU0N0MyMi41MzEyIDIwLjkxNDEgMjIuNzEwOSAyMS4zNTE2IDIyLjcxMDkgMjEuODY3MkMyMi43MTA5IDIyLjM5ODQgMjIuNTMxMiAyMi44NDM4IDIyLjE3MTkgMjMuMjAzMUMyMS44MTI1IDIzLjU2MjUgMjEuMzc1IDIzLjc0MjIgMjAuODU5NCAyMy43NDIySDYuNjc5NjlaIn0pfSksbW90aW9uOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixjaGlsZHJlbjpbWigiY2lyY2xlIix7Y3g6IjE0IixjeToiMTIiLHI6IjYifSksWigicGF0aCIse2Q6Ik0zIDhoNE0yIDEyaDRNMyAxNmg0In0pXX0pLGNvbnRyYXN0OlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifSksWigicGF0aCIse2Q6Ik0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoifSldfSksYm9yZGVyczpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiJ9KSxaKCJwYXRoIix7ZDoiTTkgMjFoMSJ9KSxaKCJwYXRoIix7ZDoiTTE0IDIxaDEifSldfSksdHJhbnNwYXJlbmN5OlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDYzIDQ2IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik0yMi43MzQ0IDQuMTcxODhDMjIuMTg3NSA0LjE3MTg4IDIxLjcxODggMy45NzY1NiAyMS4zMjgxIDMuNTg1OTRDMjAuOTM3NSAzLjE5NTMxIDIwLjc0MjIgMi43MTg3NSAyMC43NDIyIDIuMTU2MjVDMjAuNzQyMiAxLjYwOTM4IDIwLjkzNzUgMS4xNDA2MiAyMS4zMjgxIDAuNzVDMjEuNzE4OCAwLjM1OTM3NSAyMi4xODc1IDAuMTY0MDYyIDIyLjczNDQgMC4xNjQwNjJDMjMuMjgxMiAwLjE2NDA2MiAyMy43NSAwLjM1OTM3NSAyNC4xNDA2IDAuNzVDMjQuNTMxMiAxLjE0MDYyIDI0LjcyNjYgMS42MDkzOCAyNC43MjY2IDIuMTU2MjVDMjQuNzI2NiAyLjcxODc1IDI0LjUzMTIgMy4xOTUzMSAyNC4xNDA2IDMuNTg1OTRDMjMuNzUgMy45NzY1NiAyMy4yODEyIDQuMTcxODggMjIuNzM0NCA0LjE3MTg4Wk0yOS4xMDk0IDUuMjAzMTJDMjguNTQ2OSA1LjIwMzEyIDI4LjA3MDMgNS4wMDc4MSAyNy42Nzk3IDQuNjE3MTlDMjcuMjg5MSA0LjIyNjU2IDI3LjA5MzggMy43NTc4MSAyNy4wOTM4IDMuMjEwOTRDMjcuMDkzOCAyLjY2NDA2IDI3LjI4OTEgMi4xOTUzMSAyNy42Nzk3IDEuODA0NjlDMjguMDcwMyAxLjM5ODQ0IDI4LjU0NjkgMS4xOTUzMSAyOS4xMDk0IDEuMTk1MzFDMjkuNjU2MiAxLjE5NTMxIDMwLjEyNSAxLjM5ODQ0IDMwLjUxNTYgMS44MDQ2OUMzMC45MDYyIDIuMTk1MzEgMzEuMTAxNiAyLjY2NDA2IDMxLjEwMTYgMy4yMTA5NEMzMS4xMDE2IDMuNzU3ODEgMzAuOTA2MiA0LjIyNjU2IDMwLjUxNTYgNC42MTcxOUMzMC4xMjUgNS4wMDc4MSAyOS42NTYyIDUuMjAzMTIgMjkuMTA5NCA1LjIwMzEyWk0zNC44NzUgOC4xMzI4MUMzNC4zMjgxIDguMTMyODEgMzMuODUxNiA3LjkzNzUgMzMuNDQ1MyA3LjU0Njg4QzMzLjA1NDcgNy4xNDA2MiAzMi44NTk0IDYuNjcxODggMzIuODU5NCA2LjE0MDYyQzMyLjg1OTQgNS41NzgxMiAzMy4wNTQ3IDUuMTAxNTYgMzMuNDQ1MyA0LjcxMDk0QzMzLjg1MTYgNC4zMjAzMSAzNC4zMjgxIDQuMTI1IDM0Ljg3NSA0LjEyNUMzNS40MjE5IDQuMTI1IDM1Ljg5MDYgNC4zMjAzMSAzNi4yODEyIDQuNzEwOTRDMzYuNjg3NSA1LjEwMTU2IDM2Ljg5MDYgNS41NzgxMiAzNi44OTA2IDYuMTQwNjJDMzYuODkwNiA2LjY3MTg4IDM2LjY4NzUgNy4xNDA2MiAzNi4yODEyIDcuNTQ2ODhDMzUuODkwNiA3LjkzNzUgMzUuNDIxOSA4LjEzMjgxIDM0Ljg3NSA4LjEzMjgxWk0zOS40NDUzIDEyLjY3OTdDMzguODk4NCAxMi42Nzk3IDM4LjQyMTkgMTIuNDg0NCAzOC4wMTU2IDEyLjA5MzhDMzcuNjI1IDExLjcwMzEgMzcuNDI5NyAxMS4yMzQ0IDM3LjQyOTcgMTAuNjg3NUMzNy40Mjk3IDEwLjE1NjIgMzcuNjI1IDkuNjk1MzEgMzguMDE1NiA5LjMwNDY5QzM4LjQyMTkgOC44OTg0NCAzOC44OTg0IDguNjk1MzEgMzkuNDQ1MyA4LjY5NTMxQzM5Ljk5MjIgOC42OTUzMSA0MC40NjA5IDguODk4NDQgNDAuODUxNiA5LjMwNDY5QzQxLjI0MjIgOS42OTUzMSA0MS40Mzc1IDEwLjE1NjIgNDEuNDM3NSAxMC42ODc1QzQxLjQzNzUgMTEuMjM0NCA0MS4yNDIyIDExLjcwMzEgNDAuODUxNiAxMi4wOTM4QzQwLjQ2MDkgMTIuNDg0NCAzOS45OTIyIDEyLjY3OTcgMzkuNDQ1MyAxMi42Nzk3Wk00Mi4zNzUgMTguMzk4NEM0MS44MTI1IDE4LjM5ODQgNDEuMzI4MSAxOC4yMDMxIDQwLjkyMTkgMTcuODEyNUM0MC41MzEyIDE3LjQyMTkgNDAuMzM1OSAxNi45NTMxIDQwLjMzNTkgMTYuNDA2MkM0MC4zMzU5IDE1Ljg0MzggNDAuNTMxMiAxNS4zNjcyIDQwLjkyMTkgMTQuOTc2NkM0MS4zMjgxIDE0LjU4NTkgNDEuODEyNSAxNC4zOTA2IDQyLjM3NSAxNC4zOTA2QzQyLjkwNjIgMTQuMzkwNiA0My4zNjcyIDE0LjU4NTkgNDMuNzU3OCAxNC45NzY2QzQ0LjE2NDEgMTUuMzY3MiA0NC4zNjcyIDE1Ljg0MzggNDQuMzY3MiAxNi40MDYyQzQ0LjM2NzIgMTYuOTUzMSA0NC4xNjQxIDE3LjQyMTkgNDMuNzU3OCAxNy44MTI1QzQzLjM2NzIgMTguMjAzMSA0Mi45MDYyIDE4LjM5ODQgNDIuMzc1IDE4LjM5ODRaTTQzLjQ1MzEgMjQuNzk2OUM0Mi45MDYyIDI0Ljc5NjkgNDIuNDM3NSAyNC42MDE2IDQyLjA0NjkgMjQuMjEwOUM0MS42NTYyIDIzLjgyMDMgNDEuNDYwOSAyMy4zNDM4IDQxLjQ2MDkgMjIuNzgxMkM0MS40NjA5IDIyLjIzNDQgNDEuNjU2MiAyMS43NjU2IDQyLjA0NjkgMjEuMzc1QzQyLjQzNzUgMjAuOTg0NCA0Mi45MDYyIDIwLjc4OTEgNDMuNDUzMSAyMC43ODkxQzQ0IDIwLjc4OTEgNDQuNDY4OCAyMC45ODQ0IDQ0Ljg1OTQgMjEuMzc1QzQ1LjI2NTYgMjEuNzY1NiA0NS40Njg4IDIyLjIzNDQgNDUuNDY4OCAyMi43ODEyQzQ1LjQ2ODggMjMuMzQzOCA0NS4yNjU2IDIzLjgyMDMgNDQuODU5NCAyNC4yMTA5QzQ0LjQ2ODggMjQuNjAxNiA0NCAyNC43OTY5IDQzLjQ1MzEgMjQuNzk2OVpNNDIuMzc1IDMxLjE3MTlDNDEuODEyNSAzMS4xNzE5IDQxLjMyODEgMzAuOTc2NiA0MC45MjE5IDMwLjU4NTlDNDAuNTMxMiAzMC4xOTUzIDQwLjMzNTkgMjkuNzI2NiA0MC4zMzU5IDI5LjE3OTdDNDAuMzM1OSAyOC42MTcyIDQwLjUzMTIgMjguMTQwNiA0MC45MjE5IDI3Ljc1QzQxLjMyODEgMjcuMzU5NCA0MS44MTI1IDI3LjE2NDEgNDIuMzc1IDI3LjE2NDFDNDIuOTA2MiAyNy4xNjQxIDQzLjM2NzIgMjcuMzU5NCA0My43NTc4IDI3Ljc1QzQ0LjE2NDEgMjguMTQwNiA0NC4zNjcyIDI4LjYxNzIgNDQuMzY3MiAyOS4xNzk3QzQ0LjM2NzIgMjkuNzI2NiA0NC4xNjQxIDMwLjE5NTMgNDMuNzU3OCAzMC41ODU5QzQzLjM2NzIgMzAuOTc2NiA0Mi45MDYyIDMxLjE3MTkgNDIuMzc1IDMxLjE3MTlaTTM5LjQ0NTMgMzYuODkwNkMzOC44OTg0IDM2Ljg5MDYgMzguNDIxOSAzNi42OTUzIDM4LjAxNTYgMzYuMzA0N0MzNy42MjUgMzUuODk4NCAzNy40Mjk3IDM1LjQyMTkgMzcuNDI5NyAzNC44NzVDMzcuNDI5NyAzNC4zMjgxIDM3LjYyNSAzMy44NTk0IDM4LjAxNTYgMzMuNDY4OEMzOC40MjE5IDMzLjA2MjUgMzguODk4NCAzMi44NTk0IDM5LjQ0NTMgMzIuODU5NEMzOS45OTIyIDMyLjg1OTQgNDAuNDYwOSAzMy4wNjI1IDQwLjg1MTYgMzMuNDY4OEM0MS4yNDIyIDMzLjg1OTQgNDEuNDM3NSAzNC4zMjgxIDQxLjQzNzUgMzQuODc1QzQxLjQzNzUgMzUuNDIxOSA0MS4yNDIyIDM1Ljg5ODQgNDAuODUxNiAzNi4zMDQ3QzQwLjQ2MDkgMzYuNjk1MyAzOS45OTIyIDM2Ljg5MDYgMzkuNDQ1MyAzNi44OTA2Wk0zNC44NzUgNDEuNDM3NUMzNC4zMjgxIDQxLjQzNzUgMzMuODUxNiA0MS4yNDIyIDMzLjQ0NTMgNDAuODUxNkMzMy4wNTQ3IDQwLjQ2MDkgMzIuODU5NCAzOS45OTIyIDMyLjg1OTQgMzkuNDQ1M0MzMi44NTk0IDM4Ljg5ODQgMzMuMDU0NyAzOC40Mjk3IDMzLjQ0NTMgMzguMDM5MUMzMy44NTE2IDM3LjYzMjggMzQuMzI4MSAzNy40Mjk3IDM0Ljg3NSAzNy40Mjk3QzM1LjQyMTkgMzcuNDI5NyAzNS44OTA2IDM3LjYzMjggMzYuMjgxMiAzOC4wMzkxQzM2LjY4NzUgMzguNDI5NyAzNi44OTA2IDM4Ljg5ODQgMzYuODkwNiAzOS40NDUzQzM2Ljg5MDYgMzkuOTkyMiAzNi42ODc1IDQwLjQ2MDkgMzYuMjgxMiA0MC44NTE2QzM1Ljg5MDYgNDEuMjQyMiAzNS40MjE5IDQxLjQzNzUgMzQuODc1IDQxLjQzNzVaTTI5LjEwOTQgNDQuMzY3MkMyOC41NDY5IDQ0LjM2NzIgMjguMDcwMyA0NC4xNjQxIDI3LjY3OTcgNDMuNzU3OEMyNy4yODkxIDQzLjM2NzIgMjcuMDkzOCA0Mi44OTg0IDI3LjA5MzggNDIuMzUxNkMyNy4wOTM4IDQxLjgwNDcgMjcuMjg5MSA0MS4zMzU5IDI3LjY3OTcgNDAuOTQ1M0MyOC4wNzAzIDQwLjU1NDcgMjguNTQ2OSA0MC4zNTk0IDI5LjEwOTQgNDAuMzU5NEMyOS42NTYyIDQwLjM1OTQgMzAuMTI1IDQwLjU1NDcgMzAuNTE1NiA0MC45NDUzQzMwLjkwNjIgNDEuMzM1OSAzMS4xMDE2IDQxLjgwNDcgMzEuMTAxNiA0Mi4zNTE2QzMxLjEwMTYgNDIuODk4NCAzMC45MDYyIDQzLjM2NzIgMzAuNTE1NiA0My43NTc4QzMwLjEyNSA0NC4xNjQxIDI5LjY1NjIgNDQuMzY3MiAyOS4xMDk0IDQ0LjM2NzJaTTIyLjczNDQgNDUuMzk4NEMyMi4xODc1IDQ1LjM5ODQgMjEuNzE4OCA0NS4yMDMxIDIxLjMyODEgNDQuODEyNUMyMC45Mzc1IDQ0LjQyMTkgMjAuNzQyMiA0My45NTMxIDIwLjc0MjIgNDMuNDA2MkMyMC43NDIyIDQyLjg0MzggMjAuOTM3NSA0Mi4zNjcyIDIxLjMyODEgNDEuOTc2NkMyMS43MTg4IDQxLjU4NTkgMjIuMTg3NSA0MS4zOTA2IDIyLjczNDQgNDEuMzkwNkMyMy4yODEyIDQxLjM5MDYgMjMuNzUgNDEuNTg1OSAyNC4xNDA2IDQxLjk3NjZDMjQuNTMxMiA0Mi4zNjcyIDI0LjcyNjYgNDIuODQzOCAyNC43MjY2IDQzLjQwNjJDMjQuNzI2NiA0My45NTMxIDI0LjUzMTIgNDQuNDIxOSAyNC4xNDA2IDQ0LjgxMjVDMjMuNzUgNDUuMjAzMSAyMy4yODEyIDQ1LjM5ODQgMjIuNzM0NCA0NS4zOTg0Wk0xNi4zNTk0IDQ0LjM2NzJDMTUuODEyNSA0NC4zNjcyIDE1LjM0MzggNDQuMTY0MSAxNC45NTMxIDQzLjc1NzhDMTQuNTYyNSA0My4zNjcyIDE0LjM2NzIgNDIuODk4NCAxNC4zNjcyIDQyLjM1MTZDMTQuMzY3MiA0MS44MDQ3IDE0LjU2MjUgNDEuMzM1OSAxNC45NTMxIDQwLjk0NTNDMTUuMzQzOCA0MC41NTQ3IDE1LjgxMjUgNDAuMzU5NCAxNi4zNTk0IDQwLjM1OTRDMTYuOTIxOSA0MC4zNTk0IDE3LjM5ODQgNDAuNTU0NyAxNy43ODkxIDQwLjk0NTNDMTguMTc5NyA0MS4zMzU5IDE4LjM3NSA0MS44MDQ3IDE4LjM3NSA0Mi4zNTE2QzE4LjM3NSA0Mi44OTg0IDE4LjE3OTcgNDMuMzY3MiAxNy43ODkxIDQzLjc1NzhDMTcuMzk4NCA0NC4xNjQxIDE2LjkyMTkgNDQuMzY3MiAxNi4zNTk0IDQ0LjM2NzJaTTEwLjU3MDMgNDEuNDM3NUMxMC4wMzkxIDQxLjQzNzUgOS41NzAzMSA0MS4yNDIyIDkuMTY0MDYgNDAuODUxNkM4Ljc3MzQ0IDQwLjQ2MDkgOC41NzgxMiAzOS45OTIyIDguNTc4MTIgMzkuNDQ1M0M4LjU3ODEyIDM4Ljg5ODQgOC43NzM0NCAzOC40Mjk3IDkuMTY0MDYgMzguMDM5MUM5LjU3MDMxIDM3LjYzMjggMTAuMDM5MSAzNy40Mjk3IDEwLjU3MDMgMzcuNDI5N0MxMS4xMzI4IDM3LjQyOTcgMTEuNjA5NCAzNy42MzI4IDEyIDM4LjAzOTFDMTIuMzkwNiAzOC40Mjk3IDEyLjU4NTkgMzguODk4NCAxMi41ODU5IDM5LjQ0NTNDMTIuNTg1OSAzOS45OTIyIDEyLjM5MDYgNDAuNDYwOSAxMiA0MC44NTE2QzExLjYwOTQgNDEuMjQyMiAxMS4xMzI4IDQxLjQzNzUgMTAuNTcwMyA0MS40Mzc1Wk02LjAyMzQ0IDM2Ljg5MDZDNS40NzY1NiAzNi44OTA2IDUgMzYuNjk1MyA0LjU5Mzc1IDM2LjMwNDdDNC4yMDMxMiAzNS44OTg0IDQuMDA3ODEgMzUuNDIxOSA0LjAwNzgxIDM0Ljg3NUM0LjAwNzgxIDM0LjMyODEgNC4yMDMxMiAzMy44NTk0IDQuNTkzNzUgMzMuNDY4OEM1IDMzLjA2MjUgNS40NzY1NiAzMi44NTk0IDYuMDIzNDQgMzIuODU5NEM2LjU3MDMxIDMyLjg1OTQgNy4wMzkwNiAzMy4wNjI1IDcuNDI5NjkgMzMuNDY4OEM3LjgyMDMxIDMzLjg1OTQgOC4wMTU2MiAzNC4zMjgxIDguMDE1NjIgMzQuODc1QzguMDE1NjIgMzUuNDIxOSA3LjgyMDMxIDM1Ljg5ODQgNy40Mjk2OSAzNi4zMDQ3QzcuMDM5MDYgMzYuNjk1MyA2LjU3MDMxIDM2Ljg5MDYgNi4wMjM0NCAzNi44OTA2Wk0zLjA5Mzc1IDMxLjE3MTlDMi41NjI1IDMxLjE3MTkgMi4wOTM3NSAzMC45NzY2IDEuNjg3NSAzMC41ODU5QzEuMjk2ODggMzAuMTk1MyAxLjEwMTU2IDI5LjcyNjYgMS4xMDE1NiAyOS4xNzk3QzEuMTAxNTYgMjguNjE3MiAxLjI5Njg4IDI4LjE0MDYgMS42ODc1IDI3Ljc1QzIuMDkzNzUgMjcuMzU5NCAyLjU2MjUgMjcuMTY0MSAzLjA5Mzc1IDI3LjE2NDFDMy42NTYyNSAyNy4xNjQxIDQuMTMyODEgMjcuMzU5NCA0LjUyMzQ0IDI3Ljc1QzQuOTE0MDYgMjguMTQwNiA1LjEwOTM4IDI4LjYxNzIgNS4xMDkzOCAyOS4xNzk3QzUuMTA5MzggMjkuNzI2NiA0LjkxNDA2IDMwLjE5NTMgNC41MjM0NCAzMC41ODU5QzQuMTMyODEgMzAuOTc2NiAzLjY1NjI1IDMxLjE3MTkgMy4wOTM3NSAzMS4xNzE5Wk0yLjAxNTYyIDI0Ljc5NjlDMS40NTMxMiAyNC43OTY5IDAuOTc2NTYyIDI0LjYwMTYgMC41ODU5MzggMjQuMjEwOUMwLjE5NTMxMiAyMy44MjAzIDAgMjMuMzQzOCAwIDIyLjc4MTJDMCAyMi4yMzQ0IDAuMTk1MzEyIDIxLjc2NTYgMC41ODU5MzggMjEuMzc1QzAuOTc2NTYyIDIwLjk4NDQgMS40NTMxMiAyMC43ODkxIDIuMDE1NjIgMjAuNzg5MUMyLjU2MjUgMjAuNzg5MSAzLjAzMTI1IDIwLjk4NDQgMy40MjE4OCAyMS4zNzVDMy44MTI1IDIxLjc2NTYgNC4wMDc4MSAyMi4yMzQ0IDQuMDA3ODEgMjIuNzgxMkM0LjAwNzgxIDIzLjM0MzggMy44MTI1IDIzLjgyMDMgMy40MjE4OCAyNC4yMTA5QzMuMDMxMjUgMjQuNjAxNiAyLjU2MjUgMjQuNzk2OSAyLjAxNTYyIDI0Ljc5NjlaTTMuMDkzNzUgMTguMzk4NEMyLjU2MjUgMTguMzk4NCAyLjA5Mzc1IDE4LjIwMzEgMS42ODc1IDE3LjgxMjVDMS4yOTY4OCAxNy40MjE5IDEuMTAxNTYgMTYuOTUzMSAxLjEwMTU2IDE2LjQwNjJDMS4xMDE1NiAxNS44NDM4IDEuMjk2ODggMTUuMzY3MiAxLjY4NzUgMTQuOTc2NkMyLjA5Mzc1IDE0LjU4NTkgMi41NjI1IDE0LjM5MDYgMy4wOTM3NSAxNC4zOTA2QzMuNjU2MjUgMTQuMzkwNiA0LjEzMjgxIDE0LjU4NTkgNC41MjM0NCAxNC45NzY2QzQuOTE0MDYgMTUuMzY3MiA1LjEwOTM4IDE1Ljg0MzggNS4xMDkzOCAxNi40MDYyQzUuMTA5MzggMTYuOTUzMSA0LjkxNDA2IDE3LjQyMTkgNC41MjM0NCAxNy44MTI1QzQuMTMyODEgMTguMjAzMSAzLjY1NjI1IDE4LjM5ODQgMy4wOTM3NSAxOC4zOTg0Wk02LjAyMzQ0IDEyLjY3OTdDNS40NzY1NiAxMi42Nzk3IDUgMTIuNDg0NCA0LjU5Mzc1IDEyLjA5MzhDNC4yMDMxMiAxMS43MDMxIDQuMDA3ODEgMTEuMjM0NCA0LjAwNzgxIDEwLjY4NzVDNC4wMDc4MSAxMC4xNTYyIDQuMjAzMTIgOS42OTUzMSA0LjU5Mzc1IDkuMzA0NjlDNSA4Ljg5ODQ0IDUuNDc2NTYgOC42OTUzMSA2LjAyMzQ0IDguNjk1MzFDNi41NzAzMSA4LjY5NTMxIDcuMDM5MDYgOC44OTg0NCA3LjQyOTY5IDkuMzA0NjlDNy44MjAzMSA5LjY5NTMxIDguMDE1NjIgMTAuMTU2MiA4LjAxNTYyIDEwLjY4NzVDOC4wMTU2MiAxMS4yMzQ0IDcuODIwMzEgMTEuNzAzMSA3LjQyOTY5IDEyLjA5MzhDNy4wMzkwNiAxMi40ODQ0IDYuNTcwMzEgMTIuNjc5NyA2LjAyMzQ0IDEyLjY3OTdaTTEwLjU3MDMgOC4xMzI4MUMxMC4wMzkxIDguMTMyODEgOS41NzAzMSA3LjkzNzUgOS4xNjQwNiA3LjU0Njg4QzguNzczNDQgNy4xNDA2MiA4LjU3ODEyIDYuNjcxODggOC41NzgxMiA2LjE0MDYyQzguNTc4MTIgNS41NzgxMiA4Ljc3MzQ0IDUuMTAxNTYgOS4xNjQwNiA0LjcxMDk0QzkuNTcwMzEgNC4zMjAzMSAxMC4wMzkxIDQuMTI1IDEwLjU3MDMgNC4xMjVDMTEuMTMyOCA0LjEyNSAxMS42MDk0IDQuMzIwMzEgMTIgNC43MTA5NEMxMi4zOTA2IDUuMTAxNTYgMTIuNTg1OSA1LjU3ODEyIDEyLjU4NTkgNi4xNDA2MkMxMi41ODU5IDYuNjcxODggMTIuMzkwNiA3LjE0MDYyIDEyIDcuNTQ2ODhDMTEuNjA5NCA3LjkzNzUgMTEuMTMyOCA4LjEzMjgxIDEwLjU3MDMgOC4xMzI4MVpNMTYuMzU5NCA1LjIwMzEyQzE1LjgxMjUgNS4yMDMxMiAxNS4zNDM4IDUuMDA3ODEgMTQuOTUzMSA0LjYxNzE5QzE0LjU2MjUgNC4yMjY1NiAxNC4zNjcyIDMuNzU3ODEgMTQuMzY3MiAzLjIxMDk0QzE0LjM2NzIgMi42NjQwNiAxNC41NjI1IDIuMTk1MzEgMTQuOTUzMSAxLjgwNDY5QzE1LjM0MzggMS4zOTg0NCAxNS44MTI1IDEuMTk1MzEgMTYuMzU5NCAxLjE5NTMxQzE2LjkyMTkgMS4xOTUzMSAxNy4zOTg0IDEuMzk4NDQgMTcuNzg5MSAxLjgwNDY5QzE4LjE3OTcgMi4xOTUzMSAxOC4zNzUgMi42NjQwNiAxOC4zNzUgMy4yMTA5NEMxOC4zNzUgMy43NTc4MSAxOC4xNzk3IDQuMjI2NTYgMTcuNzg5MSA0LjYxNzE5QzE3LjM5ODQgNS4wMDc4MSAxNi45MjE5IDUuMjAzMTIgMTYuMzU5NCA1LjIwMzEyWk00MC4xMDE2IDQ1LjU2MjVDMzYuOTQ1MyA0NS41NjI1IDMzLjk5MjIgNDQuOTY4OCAzMS4yNDIyIDQzLjc4MTJDMjguNTA3OCA0Mi42MDk0IDI2LjA5MzggNDAuOTc2NiAyNCAzOC44ODI4QzIxLjkwNjIgMzYuNzg5MSAyMC4yNjU2IDM0LjM2NzIgMTkuMDc4MSAzMS42MTcyQzE3LjkwNjIgMjguODY3MiAxNy4zMjAzIDI1LjkyMTkgMTcuMzIwMyAyMi43ODEyQzE3LjMyMDMgMTkuNjQwNiAxNy45MDYyIDE2LjY5NTMgMTkuMDc4MSAxMy45NDUzQzIwLjI2NTYgMTEuMTc5NyAyMS45MDYyIDguNzU3ODEgMjQgNi42Nzk2OUMyNi4wOTM4IDQuNTg1OTQgMjguNTA3OCAyLjk1MzEyIDMxLjI0MjIgMS43ODEyNUMzMy45OTIyIDAuNTkzNzUgMzYuOTQ1MyAwIDQwLjEwMTYgMEM0My4yNDIyIDAgNDYuMTg3NSAwLjU5Mzc1IDQ4LjkzNzUgMS43ODEyNUM1MS42ODc1IDIuOTUzMTIgNTQuMTAxNiA0LjU4NTk0IDU2LjE3OTcgNi42Nzk2OUM1OC4yNzM0IDguNzU3ODEgNTkuOTA2MiAxMS4xNzk3IDYxLjA3ODEgMTMuOTQ1M0M2Mi4yNjU2IDE2LjY5NTMgNjIuODU5NCAxOS42NDA2IDYyLjg1OTQgMjIuNzgxMkM2Mi44NTk0IDI1LjkyMTkgNjIuMjY1NiAyOC44NjcyIDYxLjA3ODEgMzEuNjE3MkM1OS45MDYyIDM0LjM2NzIgNTguMjczNCAzNi43ODkxIDU2LjE3OTcgMzguODgyOEM1NC4xMDE2IDQwLjk3NjYgNTEuNjg3NSA0Mi42MDk0IDQ4LjkzNzUgNDMuNzgxMkM0Ni4xODc1IDQ0Ljk2ODggNDMuMjQyMiA0NS41NjI1IDQwLjEwMTYgNDUuNTYyNVpNNDAuMTAxNiA0MS4zOTA2QzQyLjY2NDEgNDEuMzkwNiA0NS4wNzAzIDQwLjkwNjIgNDcuMzIwMyAzOS45Mzc1QzQ5LjU3MDMgMzguOTY4OCA1MS41NDY5IDM3LjYzMjggNTMuMjUgMzUuOTI5N0M1NC45Njg4IDM0LjIyNjYgNTYuMzA0NyAzMi4yNTc4IDU3LjI1NzggMzAuMDIzNEM1OC4yMTA5IDI3Ljc3MzQgNTguNjg3NSAyNS4zNTk0IDU4LjY4NzUgMjIuNzgxMkM1OC42ODc1IDIwLjIwMzEgNTguMjEwOSAxNy43OTY5IDU3LjI1NzggMTUuNTYyNUM1Ni4zMDQ3IDEzLjMxMjUgNTQuOTY4OCAxMS4zMzU5IDUzLjI1IDkuNjMyODFDNTEuNTQ2OSA3LjkyOTY5IDQ5LjU3MDMgNi41OTM3NSA0Ny4zMjAzIDUuNjI1QzQ1LjA3MDMgNC42NTYyNSA0Mi42NjQxIDQuMTcxODggNDAuMTAxNiA0LjE3MTg4QzM3LjUyMzQgNC4xNzE4OCAzNS4xMDk0IDQuNjU2MjUgMzIuODU5NCA1LjYyNUMzMC42MjUgNi41OTM3NSAyOC42NDg0IDcuOTI5NjkgMjYuOTI5NyA5LjYzMjgxQzI1LjIyNjYgMTEuMzM1OSAyMy44OTA2IDEzLjMxMjUgMjIuOTIxOSAxNS41NjI1QzIxLjk2ODggMTcuNzk2OSAyMS40OTIyIDIwLjIwMzEgMjEuNDkyMiAyMi43ODEyQzIxLjQ5MjIgMjUuMzU5NCAyMS45Njg4IDI3Ljc3MzQgMjIuOTIxOSAzMC4wMjM0QzIzLjg5MDYgMzIuMjU3OCAyNS4yMjY2IDM0LjIyNjYgMjYuOTI5NyAzNS45Mjk3QzI4LjY0ODQgMzcuNjMyOCAzMC42MjUgMzguOTY4OCAzMi44NTk0IDM5LjkzNzVDMzUuMTA5NCA0MC45MDYyIDM3LjUyMzQgNDEuMzkwNiA0MC4xMDE2IDQxLjM5MDZaIn0pfSksdm9pY2VvdmVyOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoibTExIDcuNjAxLTUuOTk0IDguMTlhMSAxIDAgMCAwIC4xIDEuMjk4bC44MTcuODE4YTEgMSAwIDAgMCAxLjMxNC4wODdMMTUuMDkgMTIifSksWigicGF0aCIse2Q6Ik0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUifSksWigiY2lyY2xlIix7Y3g6IjE2IixjeToiNyIscjoiNSJ9KV19KX07ZnVuY3Rpb24ga1ooJCl7aWYoISQpcmV0dXJuITA7cmV0dXJuIGc1KCQpLm9zLnRvTG93ZXJDYXNlKCk9PT0iaW9zIn1mdW5jdGlvbiB2NCh7dWRpZDokLHJ1bnRpbWU6Sn0pe2xldFtRLFhdPWsoITApLFtLLFldPWsobnVsbCksW3EsR109ayhudWxsKSxbQixOXT1rKG51bGwpLHo9a1ooSiksVj13KGFzeW5jKCk9PntOKG51bGwpO3RyeXtsZXQgUD1hd2FpdCByMyh7ZGV2aWNlOiR9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KTtpZihQKVkoUCk7ZWxzZSBOKCJVbmV4cGVjdGVkIHNpbXVsYXRvci1zZXR0aW5ncyByZXBseSIpfWNhdGNoKFApe04oUCBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmUC5uYW1lPT09IlRpbWVvdXRFcnJvciI/IlRpbWVkIG91dCByZWFkaW5nIHNpbXVsYXRvciBzZXR0aW5ncyI6UCBpbnN0YW5jZW9mIEVycm9yJiZQLm1lc3NhZ2UhPT0iRmFpbGVkIHRvIGZldGNoIj9QLm1lc3NhZ2U6IkNvdWxkIG5vdCByZWFjaCB0aGUgcHJldmlldyBzZXJ2ZXIg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIil9fSxbJF0pO3koKCk9PntpZihZKG51bGwpLCF6KXJldHVybjtWKCl9LFtWLHpdKTtsZXQgSD13KGFzeW5jKFAseCk9PntHKFApLE4obnVsbCksWSgoRCk9PkQ/ey4uLkQsW1BdOnh9OkQpO3RyeXthd2FpdCByMyh7ZGV2aWNlOiQsb3B0aW9uOlAsdmFsdWU6eH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pfWNhdGNoKEQpe04oRCBpbnN0YW5jZW9mIEVycm9yP0QubWVzc2FnZTpgRmFpbGVkIHRvIHNldCAke1B9YCksVigpfWZpbmFsbHl7RyhudWxsKX19LFskLFZdKSxDPVQoe3J1bm5pbmc6ITEsbmV4dDpudWxsfSksQT1UKEgpO0EuY3VycmVudD1IO2xldCBMPXcoKFApPT57bGV0IHg9Qy5jdXJyZW50O2lmKHgubmV4dD1QLHgucnVubmluZylyZXR1cm47eC5ydW5uaW5nPSEwLChhc3luYygpPT57d2hpbGUoeC5uZXh0IT09bnVsbCl7bGV0IEQ9eC5uZXh0O3gubmV4dD1udWxsLGF3YWl0IEEuY3VycmVudCgidGV4dC1zaXplIixKNVtEXSl9eC5ydW5uaW5nPSExfSkoKX0sW10pLFU9SyE9PW51bGwsRj1LPz9GWixXPUo1LmluZGV4T2YoRlsidGV4dC1zaXplIl0pLEU9Vz49MD9XOkZbInRleHQtc2l6ZSJdPy5zdGFydHNXaXRoKCJhY2Nlc3NpYmlsaXR5Iik/SjUubGVuZ3RoLTE6MztyZXR1cm4gWihzMSx7b3BlbjpRLG9uT3BlbkNoYW5nZTpYLCJkYXRhLXNpbXVsYXRvci1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WihKMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlNpbXVsYXRvciJ9KSxaKCJzcGFuIix7fSldfSksY2hpbGRyZW46IXo/WigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQ1IHRleHQtWzExcHhdIHB4LTAuNSBweS0xIixjaGlsZHJlbjoiU2ltdWxhdG9yIHNldHRpbmdzIGFyZSBhdmFpbGFibGUgb24gaU9TIHNpbXVsYXRvcnMgb25seS4ifSk6WihKMSx7Y2hpbGRyZW46W0ImJlooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpCfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT52b2lkIFYoKSxjbGFzc05hbWU6InNocmluay0wIGN1cnNvci1wb2ludGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1kYW5nZXIvMzAgYmctdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMXB4XSB0ZXh0LWRhbmdlci1zb2Z0IixjaGlsZHJlbjoiUmV0cnkifSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbWihZMCx7aWNvbjokNS5hcHBlYXJhbmNlLGxhYmVsOiJBcHBlYXJhbmNlIixjaGlsZHJlbjpaKE0wLHtsYWJlbDoiQXBwZWFyYW5jZSIsdmFsdWU6Ri5hcHBlYXJhbmNlPz8ibGlnaHQiLG9wdGlvbnM6TzguYXBwZWFyYW5jZSxkaXNhYmxlZDohVXx8cT09PSJhcHBlYXJhbmNlIixvbkNoYW5nZTooUCk9PkgoImFwcGVhcmFuY2UiLFApfSl9KSxaKFkwLHtpY29uOiQ1LmdsYXNzLGxhYmVsOiJMaXF1aWQgR2xhc3MiLGNoaWxkcmVuOlooTTAse2xhYmVsOiJMaXF1aWQgR2xhc3MiLHZhbHVlOkZbImxpcXVpZC1nbGFzcyJdPz8iY2xlYXIiLG9wdGlvbnM6TzhbImxpcXVpZC1nbGFzcyJdLGRpc2FibGVkOiFVfHxxPT09ImxpcXVpZC1nbGFzcyIsb25DaGFuZ2U6KFApPT5IKCJsaXF1aWQtZ2xhc3MiLFApfSl9KSxaKFkwLHtpY29uOiQ1LmZpbHRlcixsYWJlbDoiQ29sb3IgRmlsdGVyIixjaGlsZHJlbjpaKE0wLHtsYWJlbDoiQ29sb3IgRmlsdGVyIix2YWx1ZTpGWyJjb2xvci1maWx0ZXIiXT8/Im5vbmUiLG9wdGlvbnM6TzhbImNvbG9yLWZpbHRlciJdLGRpc2FibGVkOiFVfHxxPT09ImNvbG9yLWZpbHRlciIsb25DaGFuZ2U6KFApPT5IKCJjb2xvci1maWx0ZXIiLFApfSl9KSxaKFkwLHtpY29uOiQ1LnRleHRTaXplLGxhYmVsOiJUZXh0IFNpemUiLGNoaWxkcmVuOlooTVose3ZhbHVlOkUsZGlzYWJsZWQ6IVUsb25DaGFuZ2U6TH0pfSksQVoubWFwKCh7a2V5OlAsbGFiZWw6eH0pPT5aKFkwLHtpY29uOiQ1W1A9PT0icmVkdWNlLW1vdGlvbiI/Im1vdGlvbiI6UD09PSJpbmNyZWFzZS1jb250cmFzdCI/ImNvbnRyYXN0IjpQPT09InNob3ctYm9yZGVycyI/ImJvcmRlcnMiOlA9PT0icmVkdWNlLXRyYW5zcGFyZW5jeSI/InRyYW5zcGFyZW5jeSI6InZvaWNlb3ZlciJdLGxhYmVsOngsY2hpbGRyZW46WihhNSx7bGFiZWw6eCxjaGVja2VkOkZbUF09PT0ib24iLGRpc2FibGVkOiFVfHxxPT09UCxvbkNoYW5nZTooRCk9PkgoUCxEPyJvbiI6Im9mZiIpfSl9LFApKV19KV19KX0pfWZ1bmN0aW9uIFI0KCQsSil7cmV0dXJuICQuZmluZCgoUSk9PlEuc2Vzc2lvbklkPT09Sik/P251bGx9ZnVuY3Rpb24gJDMoJCxKKXtsZXQgUT0hMSxYPSExLEs9YXN5bmMoKT0+e2lmKFh8fFEpcmV0dXJuO1E9ITA7dHJ5e2F3YWl0ICQoKX1jYXRjaHt9ZmluYWxseXtRPSExfX07SygpO2xldCBZPXNldEludGVydmFsKCgpPT52b2lkIEsoKSxKKTtyZXR1cm4oKT0+e1g9ITAsY2xlYXJJbnRlcnZhbChZKX19dmFyIGg0PTEwMDAsV1o9NDAwMDtmdW5jdGlvbiBnNCgkLEosUSl7bGV0W1gsS109ayh7c2Vzc2lvbjpudWxsLGNhcHR1cmU6bnVsbCxzdGFsZTohMX0pLFk9VCgwKTtyZXR1cm4geSgoKT0+e2lmKFkuY3VycmVudD0wLEsoe3Nlc3Npb246bnVsbCxjYXB0dXJlOm51bGwsc3RhbGU6ITF9KSwhUXx8Sj09PW51bGwpcmV0dXJuO2xldCBxPSExLEc9WDYoJCxKKSxOPSQzKGFzeW5jKCk9PntsZXQgVj1udWxsO3RyeXtsZXQgQz1hd2FpdCBmZXRjaChHLHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dChoNCozKX0pO2lmKCFDLm9rKXtpZighcSlLKHtzZXNzaW9uOm51bGwsY2FwdHVyZTpudWxsLHN0YWxlOiExfSk7cmV0dXJufVY9YXdhaXQgQy5qc29uKCl9Y2F0Y2h7cmV0dXJufWlmKHF8fFY9PT1udWxsKXJldHVybjtsZXQgSD1BcnJheS5pc0FycmF5KFYuc2Vzc2lvbnMpP1Yuc2Vzc2lvbnM6W107WS5jdXJyZW50PURhdGUubm93KCksSyh7c2Vzc2lvbjpSNChILEopLGNhcHR1cmU6Vi5jYXB0dXJlPz9udWxsLHN0YWxlOiExfSl9LGg0KSx6PXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e2lmKFkuY3VycmVudD4wJiZEYXRlLm5vdygpLVkuY3VycmVudD5XWilLKChWKT0+Vi5zdGFsZT9WOnsuLi5WLHN0YWxlOiEwfSl9LDEwMDApO3JldHVybigpPT57cT0hMCxOKCksd2luZG93LmNsZWFySW50ZXJ2YWwoeil9fSxbJCxKLFFdKSxYfWZ1bmN0aW9uIFcyKCQpe3JldHVybiB2MCgkKT8/MH1mdW5jdGlvbiB2MCgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ibnVtYmVyIiYmTnVtYmVyLmlzRmluaXRlKCQpPyQ6bnVsbH1mdW5jdGlvbiBmNCgkLEope2xldCBRPXthdE1zOkosZnJhbWVzRGVjb2RlZDowLGZyYW1lc0Ryb3BwZWQ6MCxmcmVlemVDb3VudDowLGZyZWV6ZU1zOjAsYnl0ZXNSZWNlaXZlZDowLHBhY2tldHNSZWNlaXZlZDowLHBhY2tldHNMb3N0Om51bGwsaml0dGVyTXM6bnVsbCxqaXR0ZXJCdWZmZXJTZWNvbmRzOm51bGwsaml0dGVyQnVmZmVyRW1pdHRlZDpudWxsLHJlcG9ydGVkRnBzOm51bGwsd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxjb2RlYzpudWxsLHJvdW5kVHJpcE1zOm51bGwscGF0aDoidW5rbm93biJ9LFg9bmV3IE1hcCxLPW5ldyBNYXAsWT1uZXcgTWFwLHE9bnVsbCxHPW51bGwsQj1udWxsOyQuZm9yRWFjaCgoeik9Pntzd2l0Y2goei50eXBlKXtjYXNlImNvZGVjIjppZih0eXBlb2Ygei5pZD09PSJzdHJpbmciJiZ0eXBlb2Ygei5taW1lVHlwZT09PSJzdHJpbmciKVguc2V0KHouaWQsei5taW1lVHlwZSk7YnJlYWs7Y2FzZSJpbmJvdW5kLXJ0cCI6e2lmKHoua2luZCE9PSJ2aWRlbyIpYnJlYWs7bGV0IFY9VzIoei5mcmFtZXNEZWNvZGVkKTtpZihWPFEuZnJhbWVzRGVjb2RlZClicmVhaztRLmZyYW1lc0RlY29kZWQ9VixRLmZyYW1lc0Ryb3BwZWQ9VzIoei5mcmFtZXNEcm9wcGVkKSxRLmZyZWV6ZUNvdW50PVcyKHouZnJlZXplQ291bnQpLFEuZnJlZXplTXM9VzIoei50b3RhbEZyZWV6ZXNEdXJhdGlvbikqMTAwMCxRLmJ5dGVzUmVjZWl2ZWQ9VzIoei5ieXRlc1JlY2VpdmVkKSxRLnBhY2tldHNSZWNlaXZlZD1XMih6LnBhY2tldHNSZWNlaXZlZCksUS5wYWNrZXRzTG9zdD12MCh6LnBhY2tldHNMb3N0KSxRLnJlcG9ydGVkRnBzPXYwKHouZnJhbWVzUGVyU2Vjb25kKSxRLndpZHRoPXYwKHouZnJhbWVXaWR0aCksUS5oZWlnaHQ9djAoei5mcmFtZUhlaWdodCk7bGV0IEg9djAoei5qaXR0ZXIpO2lmKFEuaml0dGVyTXM9SD09PW51bGw/bnVsbDpIKjEwMDAsUS5qaXR0ZXJCdWZmZXJTZWNvbmRzPXYwKHouaml0dGVyQnVmZmVyRGVsYXkpLFEuaml0dGVyQnVmZmVyRW1pdHRlZD12MCh6LmppdHRlckJ1ZmZlckVtaXR0ZWRDb3VudCksdHlwZW9mIHouY29kZWNJZD09PSJzdHJpbmciKVEuY29kZWM9WC5nZXQoei5jb2RlY0lkKT8/bnVsbDticmVha31jYXNlInRyYW5zcG9ydCI6aWYodHlwZW9mIHouc2VsZWN0ZWRDYW5kaWRhdGVQYWlySWQ9PT0ic3RyaW5nIilxPXouc2VsZWN0ZWRDYW5kaWRhdGVQYWlySWQ7YnJlYWs7Y2FzZSJjYW5kaWRhdGUtcGFpciI6aWYodHlwZW9mIHouaWQ9PT0ic3RyaW5nIilLLnNldCh6LmlkLHopO2lmKHouc2VsZWN0ZWQ9PT0hMClHPXo7ZWxzZSBpZih6Lm5vbWluYXRlZD09PSEwJiZ6LnN0YXRlPT09InN1Y2NlZWRlZCIpRz8/PXo7ZWxzZSBpZih6LnN0YXRlPT09InN1Y2NlZWRlZCIpQj8/PXo7YnJlYWs7Y2FzZSJsb2NhbC1jYW5kaWRhdGUiOmNhc2UicmVtb3RlLWNhbmRpZGF0ZSI6aWYodHlwZW9mIHouaWQ9PT0ic3RyaW5nIilZLnNldCh6LmlkLHopO2JyZWFrfX0pO2xldCBOPShxPT09bnVsbD92b2lkIDA6Sy5nZXQocSkpPz9HPz9CO2lmKE4pe2xldCB6PXYwKE4uY3VycmVudFJvdW5kVHJpcFRpbWUpO1Eucm91bmRUcmlwTXM9ej09PW51bGw/bnVsbDp6KjEwMDA7bGV0IFY9W04ubG9jYWxDYW5kaWRhdGVJZCxOLnJlbW90ZUNhbmRpZGF0ZUlkXS5tYXAoKEgpPT50eXBlb2YgSD09PSJzdHJpbmciP1kuZ2V0KEgpPy5jYW5kaWRhdGVUeXBlOnZvaWQgMCk7aWYoVi5ldmVyeSgoSCk9PnR5cGVvZiBIPT09InN0cmluZyIpKVEucGF0aD1WLmluY2x1ZGVzKCJyZWxheSIpPyJyZWxheSI6ImRpcmVjdCJ9aWYoUS5jb2RlYz09PW51bGwmJlguc2l6ZT09PTEpUS5jb2RlYz1bLi4uWC52YWx1ZXMoKV1bMF0/P251bGw7cmV0dXJuIFF9ZnVuY3Rpb24gbTQoJCxKKXtsZXQgUT17Li4uSixmcHM6bnVsbCxrYnBzOm51bGwsbG9zc1JhdGlvOm51bGwsZHJvcHBlZEluV2luZG93Om51bGwsZnJlZXplc0luV2luZG93Om51bGwsZnJlZXplTXNJbldpbmRvdzpudWxsLGppdHRlckJ1ZmZlck1zOm51bGx9O2lmKCQ9PT1udWxsKXJldHVybiBRO2xldCBYPUouYXRNcy0kLmF0TXM7aWYoWDwyNTApcmV0dXJuIFE7bGV0IEs9Si5mcmFtZXNEZWNvZGVkLSQuZnJhbWVzRGVjb2RlZCxZPUouYnl0ZXNSZWNlaXZlZC0kLmJ5dGVzUmVjZWl2ZWQscT1KLmZyYW1lc0Ryb3BwZWQtJC5mcmFtZXNEcm9wcGVkLEc9Si5mcmVlemVDb3VudC0kLmZyZWV6ZUNvdW50LEI9Si5mcmVlemVNcy0kLmZyZWV6ZU1zO2lmKEs8MHx8WTwwfHxxPDB8fEc8MHx8QjwwKXJldHVybiBRO2xldCBOPVgvMTAwMDtyZXR1cm57Li4uSixmcHM6Sy9OLGticHM6WSo4LzEwMDAvTixsb3NzUmF0aW86X1ooJCxKKSxkcm9wcGVkSW5XaW5kb3c6cSxmcmVlemVzSW5XaW5kb3c6RyxmcmVlemVNc0luV2luZG93OkIsaml0dGVyQnVmZmVyTXM6RFooJCxKKX19ZnVuY3Rpb24gX1ooJCxKKXtpZigkLnBhY2tldHNMb3N0PT09bnVsbHx8Si5wYWNrZXRzTG9zdD09PW51bGwpcmV0dXJuIG51bGw7bGV0IFE9Si5wYWNrZXRzTG9zdC0kLnBhY2tldHNMb3N0LFg9Si5wYWNrZXRzUmVjZWl2ZWQtJC5wYWNrZXRzUmVjZWl2ZWQ7aWYoUTwwfHxYPDApcmV0dXJuIG51bGw7bGV0IEs9WCtRO3JldHVybiBLPjA/US9LOm51bGx9ZnVuY3Rpb24gRFooJCxKKXtpZihKLmppdHRlckJ1ZmZlclNlY29uZHM9PT1udWxsfHxKLmppdHRlckJ1ZmZlckVtaXR0ZWQ9PT1udWxsKXJldHVybiBudWxsO2lmKCQuaml0dGVyQnVmZmVyU2Vjb25kcz09PW51bGx8fCQuaml0dGVyQnVmZmVyRW1pdHRlZD09PW51bGwpcmV0dXJuIG51bGw7bGV0IFE9Si5qaXR0ZXJCdWZmZXJTZWNvbmRzLSQuaml0dGVyQnVmZmVyU2Vjb25kcyxYPUouaml0dGVyQnVmZmVyRW1pdHRlZC0kLmppdHRlckJ1ZmZlckVtaXR0ZWQ7aWYoUTwwfHxYPD0wKXJldHVybiBudWxsO3JldHVybiBRL1gqMTAwMH12YXIgUFo9MTAwMCxUWj00MDAwLElaPTYwMDtmdW5jdGlvbiBwNCgkKXtsZXRbSixRXT1rKG51bGwpLFtYLEtdPWsoW10pLFtZLHFdPWsoITEpLEc9VChudWxsKSxCPVQoMCk7cmV0dXJuIHkoKCk9PntpZihHLmN1cnJlbnQ9bnVsbCxCLmN1cnJlbnQ9MCxxKCExKSwkPT09bnVsbCl7UShudWxsKSxLKFtdKTtyZXR1cm59bGV0IE49ITEsVj0kMyhhc3luYygpPT57bGV0IEM9RGF0ZS5ub3coKSxBO3RyeXtBPWF3YWl0ICQuZ2V0U3RhdHMoKX1jYXRjaHtyZXR1cm59aWYoTilyZXR1cm47bGV0IEw9ZjQoQSxDKSxVPW00KEcuY3VycmVudCxMKTtCLmN1cnJlbnQ9QyxxKCExKSxRKFUpLEsoKEYpPT5bLi4uRixVXS5zbGljZSgtSVopKSxHLmN1cnJlbnQ9TH0sUFopLEg9d2luZG93LnNldEludGVydmFsKCgpPT57aWYoQi5jdXJyZW50PjAmJkRhdGUubm93KCktQi5jdXJyZW50PlRaKXEoITApfSwxMDAwKTtyZXR1cm4oKT0+e049ITAsVigpLHdpbmRvdy5jbGVhckludGVydmFsKEgpfX0sWyRdKSx7c3RhdHM6SixoaXN0b3J5Olgsc3RhbGU6WX19dmFyIEVaPW5ldyBTZXQoWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiLCI6OjEiLCJbOjoxXSIsIjAuMC4wLjAiXSk7ZnVuY3Rpb24gSjMoJCl7bGV0IEo9JC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1wuJC8sIiIpO3JldHVybiBFWi5oYXMoSil8fEouZW5kc1dpdGgoIi5sb2NhbGhvc3QiKX1hc3luYyBmdW5jdGlvbiB3WigkKXt0cnl7bGV0IEo9YXdhaXQgJC5qc29uKCk7aWYodHlwZW9mIEouZXJyb3I9PT0ic3RyaW5nIiYmSi5lcnJvci50cmltKCkpcmV0dXJuIEouZXJyb3IudHJpbSgpfWNhdGNoe31yZXR1cm5gU2NyZWVuc2hvdCBmYWlsZWQgKCR7JC5zdGF0dXN9KWB9YXN5bmMgZnVuY3Rpb24gdTQoJCxKPXt9KXtsZXQgUT1KLmVuZHBvaW50Pz9iMSgiYXBpL3NjcmVlbnNob3QiKSxYPVEuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iLFk9YXdhaXQoSi5mZXRjaEltcGw/P2ZldGNoKShgJHtRfSR7WH1kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YCx7bWV0aG9kOiJQT1NUIixzaWduYWw6Si5zaWduYWx9KTtpZighWS5vayl0aHJvdyBFcnJvcihhd2FpdCB3WihZKSk7aWYoWS5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik/LnNwbGl0KCI7IiwxKVswXT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpIT09ImltYWdlL3BuZyIpdGhyb3cgRXJyb3IoIlNjcmVlbnNob3QgZW5kcG9pbnQgZGlkIG5vdCByZXR1cm4gYSBQTkciKTtyZXR1cm4gWS5ibG9iKCl9ZnVuY3Rpb24gUTUoJCxKKXtsZXQgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7US5ocmVmPSQsUS5kb3dubG9hZD1KLFEuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChRKSxRLmNsaWNrKCksUS5yZW1vdmUoKX1mdW5jdGlvbiBiWih7c3RhdHM6JCxoaXN0b3J5OkosZmF1bHRzOlEsc2VuZGVyOlgsY2FwdHVyZTpLLHJlcXVlc3RlZEZwczpZLHN0YWxlOnEsYWN0aW9uOkd9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIGdhcC0yIGJvcmRlci1iIGJvcmRlci13aGl0ZS8xMCBwYi0yICR7cT8ib3BhY2l0eS01MCI6IiJ9YCxjaGlsZHJlbjpbWihkNCx7bGFiZWw6IkZyYW1lIHJhdGUiLHZhbHVlOlozKCQuZnBzKSxoaW50Olk/YG9mICR7WX1gOnZvaWQgMCx2YWx1ZXM6bDQoSiwoQik9PkIuZnBzKSxtYXg6WSxjbGFzc05hbWU6InRleHQtZW1lcmFsZC00MDAifSksWihkNCx7bGFiZWw6IkJpdHJhdGUiLHZhbHVlOkY4KCQua2JwcyksdmFsdWVzOmw0KEosKEIpPT5CLmticHMpLGNsYXNzTmFtZToidGV4dC1za3ktNDAwIn0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltxP1ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13YXJuaW5nIixjaGlsZHJlbjoiTm8gc2FtcGxlcyBpbiB0aGUgbGFzdCBmZXcgc2Vjb25kcyJ9KTpRLmxlbmd0aD4wP1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IixjaGlsZHJlbjpRLm1hcCgoQik9PlooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13YXJuaW5nIiwiZGF0YS1zdHJlYW0tZmF1bHQiOkIsY2hpbGRyZW46Qn0sQikpfSk6WigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjpqWigkKT8iTm8gZHJvcHMsIGZyZWV6ZXMgb3IgbG9zcyBpbiB0aGlzIHdpbmRvdyI6Ik1lYXN1cmluZ+KApiJ9KSxHXX0pLFooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtMiBnYXAteC0zIGdhcC15LTAuNSBib3JkZXItdCBib3JkZXItd2hpdGUvMTAgcHQtMS41IixjaGlsZHJlbjpbWigkMCx7bGFiZWw6IlJUVCIsdmFsdWU6UTMoJC5yb3VuZFRyaXBNcywwKX0pLFooJDAse2xhYmVsOiJKaXR0ZXIiLHZhbHVlOlEzKCQuaml0dGVyTXMsMSl9KSxaKCQwLHtsYWJlbDoiSml0dGVyIGJ1ZmZlciIsdmFsdWU6UTMoJC5qaXR0ZXJCdWZmZXJNcywwKX0pLFooJDAse2xhYmVsOiJSZXNvbHV0aW9uIix2YWx1ZTokLndpZHRoPT09bnVsbHx8JC5oZWlnaHQ9PT1udWxsP18yOmAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH0pLCQucGF0aCE9PSJ1bmtub3duIiYmWigkMCx7bGFiZWw6IklDRSByb3V0ZSIsdmFsdWU6JC5wYXRoPT09InJlbGF5Ij8iVmlhIHJlbGF5IjoiRGlyZWN0In0pXX0pLFgmJlooeVose3NlbmRlcjpYfSksSyYmWihTWix7Y2FwdHVyZTpLfSldfSl9ZnVuY3Rpb24geVooe3NlbmRlcjokfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0xLjUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InBiLTAuNSB0ZXh0LVsxMHB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46IkVuY29kZXIifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC14LTMgZ2FwLXktMC41IixjaGlsZHJlbjpbWigkMCx7bGFiZWw6IkVuY29kZSBGUFMiLHZhbHVlOlozKCQucmVwb3J0ZWRGcHMpfSksWigkMCx7bGFiZWw6IlRhcmdldCIsdmFsdWU6RjgoJC50YXJnZXRLYnBzKX0pLFooJDAse2xhYmVsOiJQYWNlciBGUFMiLHZhbHVlOlozKCQuc291cmNlRnBzKX0pLFooJDAse2xhYmVsOiJFbmNvZGUiLHZhbHVlOlEzKCQuZW5jb2RlTXNQZXJGcmFtZSwxKSxoaW50OiIvZnJhbWUifSksWigkMCx7bGFiZWw6IkZyYW1lcyBzZW50Iix2YWx1ZTpaNSgkLmZyYW1lc1NlbnQpfSksWigkMCx7bGFiZWw6Ikxvc3MiLHZhbHVlOnhaKCQubG9zc1JhdGlvKSxoaW50OiJ0b3RhbCJ9KV19KV19KX1mdW5jdGlvbiBTWih7Y2FwdHVyZTokfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0xLjUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InBiLTAuNSB0ZXh0LVsxMHB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46IkNhcHR1cmUifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC14LTMgZ2FwLXktMC41IixjaGlsZHJlbjpbWigkMCx7bGFiZWw6IlNjcmVlbiBmcmFtZXMiLHZhbHVlOlo1KCQuc2NyZWVuRnJhbWVzKX0pLFooJDAse2xhYmVsOiJJZGxlIGZyYW1lcyIsdmFsdWU6WjUoJC5pZGxlRnJhbWVzKX0pLFooJDAse2xhYmVsOiJDYXB0dXJlIGRlbGl2ZXJpZXMiLHZhbHVlOlo1KCQub2ZmZXJlZEZyYW1lcyl9KSxaKCQwLHtsYWJlbDoiUGFjZXIgc3VibWlzc2lvbnMiLHZhbHVlOlo1KCQuZm9yd2FyZGVkRnJhbWVzKX0pXX0pXX0pfWZ1bmN0aW9uIFo1KCQpe2lmKCQ9PT1udWxsKXJldHVybiBfMjtsZXQgSj1NYXRoLmFicygkKTtpZihKPDEwMDApcmV0dXJuIFN0cmluZygkKTtpZihKPDk5OTk1MClyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDEpfWtgO3JldHVybmAkeygkLzFlNikudG9GaXhlZCgyKX1NYH1mdW5jdGlvbiB4WigkKXtyZXR1cm4gJD09PW51bGw/XzI6YCR7KCQqMTAwKS50b0ZpeGVkKDEpfSVgfXZhciBfMj0i4oCUIjtmdW5jdGlvbiBsNCgkLEope2xldCBRPVtdO2ZvcihsZXQgWCBvZiAkKXtsZXQgSz1KKFgpO2lmKEshPT1udWxsKVEucHVzaChLKX1yZXR1cm4gUX1mdW5jdGlvbiBqWigkKXtyZXR1cm4gJC5kcm9wcGVkSW5XaW5kb3chPT1udWxsfWZ1bmN0aW9uIGM0KCQpe2lmKCQuZnBzPT09bnVsbClyZXR1cm4gbnVsbDtyZXR1cm5gJHtaMygkLmZwcyl9IMK3ICR7RjgoJC5rYnBzKX1gfWZ1bmN0aW9uIG80KCQsSil7bGV0IFE9W107aWYoJC5mcmVlemVzSW5XaW5kb3cpe2xldCBLPSQuZnJlZXplTXNJbldpbmRvdz9gICgkeygkLmZyZWV6ZU1zSW5XaW5kb3cvMTAwMCkudG9GaXhlZCgxKX1zKWA6IiI7US5wdXNoKGAkeyQuZnJlZXplc0luV2luZG93fSBmcmVlemUkeyQuZnJlZXplc0luV2luZG93PT09MT8iIjoicyJ9JHtLfWApfWlmKCQuZHJvcHBlZEluV2luZG93KVEucHVzaChgJHskLmRyb3BwZWRJbldpbmRvd30gZnJhbWVzIGRyb3BwZWRgKTtpZigkLmxvc3NSYXRpbyE9PW51bGwmJiQubG9zc1JhdGlvPjAuMDIpUS5wdXNoKGAkeygkLmxvc3NSYXRpbyoxMDApLnRvRml4ZWQoMSl9JSBwYWNrZXQgbG9zc2ApO2xldCBYPXZaKEo/LnF1YWxpdHlMaW1pdGF0aW9uUmVhc29uKTtpZihYIT09bnVsbClRLnB1c2goWCk7cmV0dXJuIFF9ZnVuY3Rpb24gdlooJCl7c3dpdGNoKCQpe2Nhc2UiY3B1IjpyZXR1cm4iRW5jb2RlciBjYW5ub3Qga2VlcCB1cCAoQ1BVKSI7Y2FzZSJiYW5kd2lkdGgiOnJldHVybiJCaXRyYXRlIHJlZHVjZWQgYnkgdGhlIG5ldHdvcmsiO2Nhc2Ugdm9pZCAwOmNhc2UgbnVsbDpjYXNlIm5vbmUiOnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIkVuY29kZXIgaG9sZGluZyBiYWNrIChyZWFzb24gdW5rbm93bikifX1mdW5jdGlvbiBaMygkKXtpZigkPT09bnVsbClyZXR1cm4gXzI7cmV0dXJuYCR7JDwxMD8kLnRvRml4ZWQoMSk6JC50b0ZpeGVkKDApfSBmcHNgfWZ1bmN0aW9uIEY4KCQpe2lmKCQ9PT1udWxsKXJldHVybiBfMjtyZXR1cm4gJDwxMDAwP2AkeyQudG9GaXhlZCgwKX0ga2Jwc2A6YCR7KCQvMTAwMCkudG9GaXhlZCgyKX0gTWJwc2B9ZnVuY3Rpb24gUTMoJCxKKXtyZXR1cm4gJD09PW51bGw/XzI6YCR7JC50b0ZpeGVkKEopfSBtc2B9ZnVuY3Rpb24gZDQoe2xhYmVsOiQsdmFsdWU6SixoaW50OlEsdmFsdWVzOlgsbWF4OkssY2xhc3NOYW1lOll9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIiwiZGF0YS1zdHJlYW0tc3RhdCI6JCxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWJhc2VsaW5lIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTAiLGNoaWxkcmVuOiR9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMgdGV4dC1bMTFweF0iLGNoaWxkcmVuOltKLFEmJlooInNwYW4iLHtjbGFzc05hbWU6Im1sLTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjpRfSldfSldfSksWih0NSx7dmFsdWVzOlgsbWF4OkssY2xhc3NOYW1lOll9KV19KX1mdW5jdGlvbiAkMCh7bGFiZWw6JCx2YWx1ZTpKLGhpbnQ6UX0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIGdhcC0yIiwiZGF0YS1zdHJlYW0tc3RhdCI6JCxjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToid2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCIsY2hpbGRyZW46JH0pLFooInNwYW4iLHtjbGFzc05hbWU6InRhYnVsYXItbnVtcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjpbSixRJiZaKCJzcGFuIix7Y2xhc3NOYW1lOiJtbC0xLjUgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46UX0pXX0pXX0pfWZ1bmN0aW9uIGk0KHtzdGF0czokLGhpc3Rvcnk6SixmYXVsdHM6USxzZW5kZXI6WCxjYXB0dXJlOksscmVxdWVzdGVkRnBzOlksc3RhbGU6cSxhY3Rpb246R30pe2lmKCQ9PT1udWxsKXJldHVybiBudWxsO3JldHVybiBaKGJaLHtzdGF0czokLGhpc3Rvcnk6SixmYXVsdHM6USxzZW5kZXI6WCxjYXB0dXJlOksscmVxdWVzdGVkRnBzOlksc3RhbGU6cSxhY3Rpb246R30pfWZ1bmN0aW9uIG40KHtoaXN0b3J5OiQsY29udGV4dDpKfSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gbnVsbDtyZXR1cm4gWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpgRG93bmxvYWQgJHskLmxlbmd0aH0gcmVjb3JkZWQgc2FtcGxlcyBhcyBKU09OYCwiYXJpYS1sYWJlbCI6YERvd25sb2FkICR7JC5sZW5ndGh9IHJlY29yZGVkIHNhbXBsZXMgYXMgSlNPTmAsb25DbGljazooKT0+aFooJCxKKSxjbGFzc05hbWU6Ii1tdC0wLjUgaW5saW5lLWZsZXggaC01IHctNSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCB0ZXh0LXdoaXRlLzMwIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjp0ZXh0LXdoaXRlLzgwIixjaGlsZHJlbjpaKGcyLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImgtMyB3LTMifSl9KX1mdW5jdGlvbiBSWigkLEo9e30pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7cmVjb3JkZWRBdDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksLi4uSixzYW1wbGVzOiR9LG51bGwsMil9ZnVuY3Rpb24gaFooJCxKKXtsZXQgUT1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtSWigkLEopXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KSk7UTUoUSxgc2VydmUtc2ltLXN0cmVhbS1zdGF0cy0ke2daKCl9Lmpzb25gKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKFEpLDApfWZ1bmN0aW9uIGdaKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIi0iKS5yZXBsYWNlKCJaIiwiIil9dmFyIGZaPVs2MCwzMCwyMCwxNSwxMCw1XSxBOD1mWi5tYXAoKCQpPT57bGV0IEo9U3RyaW5nKCQpO3JldHVybnt2YWx1ZTpKLGxhYmVsOkp9fSk7ZnVuY3Rpb24gTTgoJCl7bGV0IEo9U3RyaW5nKCQpO2lmKCQ8PTYwJiYhQTguc29tZSgoUSk9PlEudmFsdWU9PT1KKSlyZXR1cm5be3ZhbHVlOkosbGFiZWw6Sn0sLi4uQThdO3JldHVybiBBOH12YXIgbVo9W3t2YWx1ZToiaHR0cCIsbGFiZWw6IkhUVFAifSx7dmFsdWU6IndlYnJ0YyIsbGFiZWw6IldlYlJUQyJ9XSxwWj1be3ZhbHVlOiJ3ZWJydGMiLGxhYmVsOiJXZWJSVEMifV0sdVo9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkF1dG8ifSx7dmFsdWU6ImgyNjQiLGxhYmVsOiJILjI2NCJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyJ9XSxsWj1be3ZhbHVlOiJoMjY0IixsYWJlbDoiSC4yNjQifSx7dmFsdWU6InZwOSIsbGFiZWw6IlZQOSJ9LHt2YWx1ZToidnA4IixsYWJlbDoiVlA4In1dLGRaPVt7dmFsdWU6IjAiLGxhYmVsOiJGdWxsIn0se3ZhbHVlOiIxOTIwIixsYWJlbDoiMTkyMCJ9LHt2YWx1ZToiMTYwMCIsbGFiZWw6IjE2MDAifSx7dmFsdWU6IjEyODAiLGxhYmVsOiIxMjgwIn0se3ZhbHVlOiI5NjAiLGxhYmVsOiI5NjAifSx7dmFsdWU6IjcyMCIsbGFiZWw6IjcyMCJ9XSxjWj1be3ZhbHVlOiIwLjQ1IixsYWJlbDoiNDUlIn0se3ZhbHVlOiIwLjU1IixsYWJlbDoiNTUlIn0se3ZhbHVlOiIwLjciLGxhYmVsOiI3MCUifSx7dmFsdWU6IjAuODUiLGxhYmVsOiI4NSUifSx7dmFsdWU6IjEiLGxhYmVsOiIxMDAlIn1dLG9aPVt7dmFsdWU6IjE1MDAwMDAiLGxhYmVsOiIxLjUgTWJwcyJ9LHt2YWx1ZToiMzAwMDAwMCIsbGFiZWw6IjMgTWJwcyJ9LHt2YWx1ZToiNjAwMDAwMCIsbGFiZWw6IjYgTWJwcyJ9LHt2YWx1ZToiMTAwMDAwMDAiLGxhYmVsOiIxMCBNYnBzIn0se3ZhbHVlOiIxNjAwMDAwMCIsbGFiZWw6IjE2IE1icHMifV0sdTA9InNpemUtMy41IjtmdW5jdGlvbiBrOCgkLEosUSl7bGV0IFg9U3RyaW5nKCQpO3JldHVybiBKLnNvbWUoKEspPT5LLnZhbHVlPT09WCk/Sjpbe3ZhbHVlOlgsbGFiZWw6USgkKX0sLi4uSl19ZnVuY3Rpb24gcjQoe3NldHRpbmdzOiQsb25QbGF5YmFja1NldHRpbmdzQ2hhbmdlOkosb25FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6USxhY3RpdmVDb2RlYzpYLGF2Y2NTdXBwb3J0ZWQ6SyxwZWVyQ29ubmVjdGlvbjpZLHdlYnJ0Y1N0YXRzVXJsOnEsd2VicnRjU2Vzc2lvbklkOkcsZW5jb2RlclNldHRpbmdzRGlzYWJsZWQ6Qj0hMSx0cmFuc3BvcnRMb2NrZWQ6Tj0hMX0pe2xldFt6LFZdPWsoITEpLHtzdGF0czpILGhpc3Rvcnk6QyxzdGFsZTpBfT1wNChZKSxMPWc0KHE/PyIiLEc/P251bGwscSE9PXZvaWQgMCYmWSE9PW51bGwmJkchPW51bGwpLFU9TC5zdGFsZT9udWxsOkwuc2Vzc2lvbixGPUg9PT1udWxsfHxBP1tdOm80KEgsVSksVz1BPyJTdHJlYW0gc2FtcGxlcyBoYXZlIHN0b3BwZWQiOkYuam9pbigiOyAiKSxFPUg9PT1udWxsP251bGw6YzQoSCksUD0kLnRyYW5zcG9ydD09PSJodHRwIix4PSQudHJhbnNwb3J0PT09IndlYnJ0YyI7cmV0dXJuIFooczEse29wZW46eixvbk9wZW5DaGFuZ2U6ViwiZGF0YS1zdHJlYW0tc2V0dGluZ3MiOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlooSjEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTdHJlYW0ifSksWigic3BhbiIse2NsYXNzTmFtZToianVzdGlmeS1zZWxmLWVuZCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSIsY2hpbGRyZW46WyF6JiZFIT09bnVsbD9aKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzQwIHRhYnVsYXItbnVtcyIsY2hpbGRyZW46RX0pOlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIixjaGlsZHJlbjpYfSksKEYubGVuZ3RoPjB8fEEpJiZaKCJzcGFuIix7ImRhdGEtc3RyZWFtLXdhcm5pbmciOiEwLHJvbGU6InN0YXR1cyIsY2xhc3NOYW1lOiJncm91cCByZWxhdGl2ZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOltaKGIwLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InctMy41IGgtMy41IHRleHQtd2FybmluZyJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJzci1vbmx5IixjaGlsZHJlbjpXfSksWigic3BhbiIse2NsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSByaWdodC0wIHRvcC1mdWxsIHotMTAgbXQtMSBoaWRkZW4gdy1tYXggbWF4LXctWzIyMHB4XSByb3VuZGVkLW1kIGJnLWJsYWNrLzkwIHB4LTIgcHktMSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXNudWcgdGV4dC13aGl0ZS85MCBzaGFkb3ctbGcgZ3JvdXAtaG92ZXI6YmxvY2siLGNoaWxkcmVuOld9KV19KV19KV19KSxjaGlsZHJlbjpaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltaKGk0LHtzdGF0czpILGhpc3Rvcnk6QyxmYXVsdHM6RixzZW5kZXI6VSxjYXB0dXJlOkwuc3RhbGU/bnVsbDpMLmNhcHR1cmUscmVxdWVzdGVkRnBzOiQuaDI2NEZwcyxzdGFsZTpBLGFjdGlvbjpaKG40LHtoaXN0b3J5OkMsY29udGV4dDp7dHJhbnNwb3J0OiQudHJhbnNwb3J0LGNvZGVjOkg/LmNvZGVjLHNlbmRlcjpVLGNhcHR1cmU6TC5zdGFsZT9udWxsOkwuY2FwdHVyZX19KX0pLFooWTAse2ljb246WihyMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6IlRyYW5zcG9ydCIsY2hpbGRyZW46WihNMCx7bGFiZWw6IlRyYW5zcG9ydCIsdmFsdWU6JC50cmFuc3BvcnQsb3B0aW9uczpOP3BaOm1aLGRpc2FibGVkOk4sb25DaGFuZ2U6KEQpPT5KKHt0cmFuc3BvcnQ6RH0pfSl9KSwhTiYmWihZMCx7aWNvbjpaKHIwLHtjbGFzc05hbWU6dTB9KSxsYWJlbDoiSFRUUCBjb2RlYyIsY2hpbGRyZW46WihNMCx7bGFiZWw6IkhUVFAgY29kZWMiLHZhbHVlOks/JC5odHRwQ29kZWM6Im1qcGVnIixvcHRpb25zOnVaLGRpc2FibGVkOiFQfHwhSyxvbkNoYW5nZTooRCk9Pkooe2h0dHBDb2RlYzpEfSl9KX0pLFooWTAse2ljb246WihyMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6IldlYlJUQyBjb2RlYyIsY2hpbGRyZW46WihNMCx7bGFiZWw6IldlYlJUQyBjb2RlYyIsdmFsdWU6JC53ZWJSdGNDb2RlYyxvcHRpb25zOmxaLGRpc2FibGVkOiF4LG9uQ2hhbmdlOihEKT0+Sih7d2ViUnRjQ29kZWM6RH0pfSl9KSxaKFkwLHtpY29uOlooajAse2NsYXNzTmFtZTp1MH0pLGxhYmVsOiJNYXggc2l6ZSIsY2hpbGRyZW46WihNMCx7bGFiZWw6Ik1heCBzaXplIix2YWx1ZTpTdHJpbmcoJC5tYXhEaW1lbnNpb24pLG9wdGlvbnM6azgoJC5tYXhEaW1lbnNpb24sZFosU3RyaW5nKSxkaXNhYmxlZDpCLG9uQ2hhbmdlOihEKT0+USh7bWF4RGltZW5zaW9uOk51bWJlcihEKX0pfSl9KSwhTiYmWihKMSx7Y2hpbGRyZW46W1ooWTAse2ljb246WihqMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6Ik1KUEVHIEZQUyIsY2hpbGRyZW46WihNMCx7bGFiZWw6Ik1KUEVHIEZQUyIsdmFsdWU6U3RyaW5nKCQubWpwZWdGcHMpLG9wdGlvbnM6TTgoJC5tanBlZ0ZwcyksZGlzYWJsZWQ6Qnx8IVAsb25DaGFuZ2U6KEQpPT5RKHttanBlZ0ZwczpOdW1iZXIoRCl9KX0pfSksWihZMCx7aWNvbjpaKGowLHtjbGFzc05hbWU6dTB9KSxsYWJlbDoiTUpQRUcgcXVhbGl0eSIsY2hpbGRyZW46WihNMCx7bGFiZWw6Ik1KUEVHIHF1YWxpdHkiLHZhbHVlOlN0cmluZygkLm1qcGVnUXVhbGl0eSksb3B0aW9uczprOCgkLm1qcGVnUXVhbGl0eSxjWiwoRCk9PmAke01hdGgucm91bmQoRCoxMDApfSVgKSxkaXNhYmxlZDpCfHwhUCxvbkNoYW5nZTooRCk9PlEoe21qcGVnUXVhbGl0eTpOdW1iZXIoRCl9KX0pfSldfSksWihZMCx7aWNvbjpaKGowLHtjbGFzc05hbWU6dTB9KSxsYWJlbDoiVmlkZW8gRlBTIixjaGlsZHJlbjpaKE0wLHtsYWJlbDoiVmlkZW8gRlBTIix2YWx1ZTpTdHJpbmcoJC5oMjY0RnBzKSxvcHRpb25zOk04KCQuaDI2NEZwcyksZGlzYWJsZWQ6Qnx8UCYmKCFLfHwkLmh0dHBDb2RlYz09PSJtanBlZyIpLG9uQ2hhbmdlOihEKT0+USh7aDI2NEZwczpOdW1iZXIoRCl9KX0pfSksWihZMCx7aWNvbjpaKGowLHtjbGFzc05hbWU6dTB9KSxsYWJlbDoiVmlkZW8gYml0cmF0ZSIsY2hpbGRyZW46WihNMCx7bGFiZWw6IlZpZGVvIGJpdHJhdGUiLHZhbHVlOlN0cmluZygkLmgyNjRCaXRyYXRlKSxvcHRpb25zOms4KCQuaDI2NEJpdHJhdGUsb1osKEQpPT5gJHtELzFlNn0gTWJwc2ApLGRpc2FibGVkOkJ8fFAmJighS3x8JC5odHRwQ29kZWM9PT0ibWpwZWciKSxvbkNoYW5nZTooRCk9PlEoe2gyNjRCaXRyYXRlOk51bWJlcihEKX0pfSl9KV19KX0pfWZ1bmN0aW9uIGE0KHtvcGVuOiQsb25DbG9zZTpKLHBlZXJDb25uZWN0aW9uOlEsd2VicnRjU3RhdHNVcmw6WCx3ZWJydGNTZXNzaW9uSWQ6Syx1ZGlkOlksZGV2aWNlUnVudGltZTpxLGN1cnJlbnRBcHA6RyxldmVudExvZ0V2ZW50c0VuZHBvaW50OkIsbWV0cmljc0VuZHBvaW50Ok4sYXhPdmVybGF5RW5hYmxlZDp6LG9uVG9nZ2xlQXhPdmVybGF5OlYsc3RyZWFtU2V0dGluZ3M6SCxvblN0cmVhbVBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6QyxvblN0cmVhbUVuY29kZXJTZXR0aW5nc0NoYW5nZTpBLGFjdGl2ZUNvZGVjOkwsYXZjY1N1cHBvcnRlZDpVLHN0cmVhbVNldHRpbmdzUGVuZGluZzpGLHN0cmVhbVRyYW5zcG9ydExvY2tlZDpXPSExLHdpZHRoOkV9KXtyZXR1cm4gWihDMix7b3BlbjokLHdpZHRoOkUsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpGMn0sY2hpbGRyZW46W1ooTzIse2NoaWxkcmVuOltaKGs2LHtjaGlsZHJlbjoiVG9vbHMifSksWih1NSx7b25DbGljazpKfSldfSksJCYmWigiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltaKFU0LHt1ZGlkOlksY3VycmVudEFwcDpHfSksWihqNCx7dWRpZDpZLGN1cnJlbnRBcHBCdW5kbGVJZDpHPy5idW5kbGVJZD8/bnVsbCxtZXRyaWNzRW5kcG9pbnQ6Tn0pLFooeTQse3VkaWQ6WSxldmVudHNFbmRwb2ludDpCfSksWih2NCx7dWRpZDpZLHJ1bnRpbWU6cX0pLFooQTQse292ZXJsYXlFbmFibGVkOnosb25Ub2dnbGVPdmVybGF5OlZ9KSxaKHc0LHt1ZGlkOlksYnVuZGxlSWQ6Rz8uYnVuZGxlSWQ/P251bGx9KSxaKEw0LHt1ZGlkOlksZXhlYzpJMX0pLFooTzQse3VkaWQ6WSxidW5kbGVJZDpHPy5idW5kbGVJZD8/bnVsbH0pLFoocjQse3NldHRpbmdzOkgsb25QbGF5YmFja1NldHRpbmdzQ2hhbmdlOkMsb25FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6QSxhY3RpdmVDb2RlYzpMLGF2Y2NTdXBwb3J0ZWQ6VSxlbmNvZGVyU2V0dGluZ3NEaXNhYmxlZDpGLHRyYW5zcG9ydExvY2tlZDpXLHBlZXJDb25uZWN0aW9uOlEsd2VicnRjU3RhdHNVcmw6WCx3ZWJydGNTZXNzaW9uSWQ6S30pXX0pXX0pfWZ1bmN0aW9uIHM0KCQsSil7bGV0IFE7dHJ5e1E9bmV3IFVSTCgkLndlYlNvY2tldERlYnVnZ2VyVXJsKX1jYXRjaHtyZXR1cm4gJH1sZXQgWD1gJHtRLnBhdGhuYW1lfSR7US5zZWFyY2h9YCxLPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsWT1KLnByb3RvY29sPT09Imh0dHBzOiI/IndzcyI6IndzIixxPWAke0ouaG9zdH0ke1h9YCxHPSQuZGV2dG9vbHNGcm9udGVuZFVybDt0cnl7bGV0IEI9bmV3IFVSTCgkLmRldnRvb2xzRnJvbnRlbmRVcmwsYCR7Si5wcm90b2NvbH0vLyR7Si5ob3N0fWApO0Iuc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3MiKSxCLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzcyIpLEIuc2VhcmNoUGFyYW1zLnNldChZLHEpLEc9YCR7Qi5wYXRobmFtZX0ke0Iuc2VhcmNofSR7Qi5oYXNofWB9Y2F0Y2h7fXJldHVybnsuLi4kLHdlYlNvY2tldERlYnVnZ2VyVXJsOmAke0t9Ly8ke0ouaG9zdH0ke1h9YCxkZXZ0b29sc0Zyb250ZW5kVXJsOkd9fWZ1bmN0aW9uIFg1KCQsSil7ZmV0Y2goYjEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpKfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBXOCgpe2xldCAkPWIxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEo9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsSikpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIHQ0KCQpe2xldCBKPSQuY29udGVudERvY3VtZW50O2lmKCFKKXJldHVybjtsZXQgUT0oKT0+e2xldCBZPVtKXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxHPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IEIgb2YgRyl7bGV0IE49Qi5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Qi50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KE4pKXJldHVybiBCfWZvcihsZXQgQiBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihCLnNoYWRvd1Jvb3QpWS5wdXNoKEIuc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFg9MCxLPSgpPT57WCsrO2xldCBZPVEoKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFg8MjApc2V0VGltZW91dChLLDEwMCl9O0soKX1mdW5jdGlvbiBlNCgkKXtsZXQgSj1bXSxRPW5ldyBNYXA7Zm9yKGxldCBYIG9mICQpe2xldCBLPVguYXBwTmFtZXx8WC5idW5kbGVJZHx8IlVua25vd24iLFk9WC5idW5kbGVJZHx8SyxxPVEuZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6SyxidW5kbGVJZDpYLmJ1bmRsZUlkLHRhcmdldHM6W119LFEuc2V0KFkscSksSi5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFgpfXJldHVybiBKLm1hcCgoWCk9PlEuZ2V0KFgpKX1mdW5jdGlvbiAkNygkLEope2xldFtRLFhdPWsoe30pLEs9azEoKCk9Pkouc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtKXSk7cmV0dXJuIHkoKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIEope2lmKCFxKWNvbnRpbnVlO2xldCBHPWAkeyR9OiR7cX1gLEI9QTIuZ2V0KEcpO2lmKHR5cGVvZiBCPT09InN0cmluZyJ8fEI9PT1udWxsKXtYKChOKT0+TltxXT09PUI/Tjp7Li4uTixbcV06Qn0pO2NvbnRpbnVlfUg0KEkxLCQscSkudGhlbigoTik9PntpZihZKXJldHVybjtYKCh6KT0+KHsuLi56LFtxXTpOfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsS10pLFF9ZnVuY3Rpb24gSjcoe3VkaWQ6JCx0YXJnZXRzOkosc2VsZWN0ZWQ6USxvblNlbGVjdFRhcmdldDpYLG9uUmVmcmVzaDpLfSl7bGV0IFk9ZTQoSikscT1ZLm1hcCgoTCk9PkwuYnVuZGxlSWQpLmZpbHRlcigoTCk9PiEhTCksRz0kNygkLHEpLFtCLE5dPWsoITEpLFt6LFZdPWsobnVsbCksSD1UKG51bGwpLEM9VChudWxsKTt5KCgpPT57aWYoIUIpcmV0dXJuO2xldCBMPShVKT0+e2lmKCFDLmN1cnJlbnQpcmV0dXJuO2lmKCFDLmN1cnJlbnQuY29udGFpbnMoVS50YXJnZXQpKU4oITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKX0sW0JdKSx5KCgpPT57aWYoQilyZXR1cm47aWYoSC5jdXJyZW50KVg1KEguY3VycmVudCwhMSksSC5jdXJyZW50PW51bGw7VzgoKX0sW0JdKSx5KCgpPT57bGV0IEw9KCk9Plc4KCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsTCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEwpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEwpfX0sW10pO2xldCBBPVE/KFEudGl0bGV8fFEudXJsfHxRLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gWigiZGl2Iix7cmVmOkMsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W1ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e04oKEwpPT57aWYoIUwpSygpO3JldHVybiFMfSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpCLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOkF9KSxaKFIyLHtzaXplOjEyLHN0cm9rZVdpZHRoOjJ9KV19KSxCJiZaKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKEwpPT57bGV0IFU9TC5idW5kbGVJZD9HW0wuYnVuZGxlSWRdOm51bGw7cmV0dXJuIFooImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltVP1ooImltZyIse3NyYzpVLGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6Wigic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46TC5hcHBOYW1lfSldfSksWigidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOkwudGFyZ2V0cy5tYXAoKEYpPT57bGV0IFc9UT8uaWQ9PT1GLmlkLEU9ISFGLmluVXNlQnlPdGhlckluc3BlY3RvciYmIVcsUD0oRi50aXRsZXx8Ri51cmx8fEYuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCkseD16PT09Ri5pZCYmIUUsRD0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBaKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOlcsImFyaWEtZGlzYWJsZWQiOkUsdGFiSW5kZXg6RT8tMTowLHRpdGxlOkU/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZihFKXJldHVybjtpZihILmN1cnJlbnQmJkguY3VycmVudCE9PUYuaWQpWDUoSC5jdXJyZW50LCExKTtILmN1cnJlbnQ9Ri5pZCxWKEYuaWQpLFg1KEYuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihILmN1cnJlbnQ9PT1GLmlkKVg1KEYuaWQsITEpLEguY3VycmVudD1udWxsO1YoKFIpPT5SPT09Ri5pZD9udWxsOlIpfSxvbkNsaWNrOigpPT57aWYoRSlyZXR1cm47WChGLmlkKSxOKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke0U/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1Ijp4PyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjpXPyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpQfSksRi51cmwmJkYudXJsIT09ImFib3V0OmJsYW5rIiYmWigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpGLnVybH0pXX0sRi5pZCl9KX0pXX0sTC5rZXkpfSl9KV19KX1mdW5jdGlvbiBRNyh7b3BlbjokLG9uQ2xvc2U6Six1ZGlkOlEsdGFyZ2V0czpYLHNlbGVjdGVkVGFyZ2V0SWQ6SyxvblNlbGVjdFRhcmdldDpZLGxvYWRpbmc6cSxlcnJvcjpHLG9uUmVmcmVzaDpCLHdpZHRoOk59KXtsZXQgej1LP1guZmluZCgoVik9PlYuaWQ9PT1LKT8/bnVsbDpudWxsO3JldHVybiBaKEMyLHtvcGVuOiQsd2lkdGg6TixjaGlsZHJlbjpbWihPMix7Y2hpbGRyZW46W1gubGVuZ3RoPjA/WihKNyx7dWRpZDpRLHRhcmdldHM6WCxzZWxlY3RlZDp6LG9uU2VsZWN0VGFyZ2V0Olksb25SZWZyZXNoOkJ9KTpaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46cT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxaKHU1LHtvbkNsaWNrOkosYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpHP1ooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpHfSk6eiYmJD9aKCJpZnJhbWUiLHtzcmM6ei5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke3oudGl0bGV8fHoudXJsfHx6LmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KFYpPT50NChWLmN1cnJlbnRUYXJnZXQpfSx6LmlkKTpaKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ej8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBpWih7aG9zdFBhdGg6JCxleGVjOkosdWRpZDpRLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOkssb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpxfSl7cT8uKCQpO2xldCBHPSQuc3BsaXQoIi8iKS5wb3AoKT8/ImltYWdlIixCPVgoRywibWVkaWEiKTtyZXR1cm4gSyhCLG51bGwpLGs0KCQsSixRKS50aGVuKCgpPT5ZKEIsITApKS5jYXRjaCgoTik9PlkoQiwhMSxOIGluc3RhbmNlb2YgRXJyb3I/Ti5tZXNzYWdlOiJBZGQgZmFpbGVkIikpfWZ1bmN0aW9uIFo3KHtleGVjOiQsdWRpZDpKLGVuYWJsZWQ6USxvblVwbG9hZFN0YXJ0Olgsb25VcGxvYWRQcm9ncmVzczpLLG9uVXBsb2FkRW5kOlksb25VbnN1cHBvcnRlZDpxLG9uSG9zdFBhdGhEcm9wOkd9KXtsZXRbQixOXT1rKCExKSx6PVQoMCksVj13KGFzeW5jKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLEwuc3RvcFByb3BhZ2F0aW9uKCksei5jdXJyZW50PTAsTighMSksIVF8fCFKKXJldHVybjtsZXQgVT1MLmRhdGFUcmFuc2Zlci5nZXREYXRhKHM1KTtpZihVKXtpWih7aG9zdFBhdGg6VSxleGVjOiQsdWRpZDpKLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOkssb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpHfSk7cmV0dXJufWxldCBGPUFycmF5LmZyb20oTC5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKEYubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBXIG9mIEYpe2xldCBFPVc0KFcpO2lmKCFFKXtxKFcpO2NvbnRpbnVlfWxldCBQPVgoVy5uYW1lLEUpO1A0KFcsRSwkLEosKHgpPT5LKFAseCkpLnRoZW4oKCk9PlkoUCwhMCkpLmNhdGNoKCh4KT0+WShQLCExLHggaW5zdGFuY2VvZiBFcnJvcj94Lm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbUSxKLCQsWCxLLFkscSxHXSksSD13KChMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSxRKUwuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbUV0pLEM9dygoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksIVEpcmV0dXJuO2lmKHouY3VycmVudCsrLHouY3VycmVudD09PTEpTighMCl9LFtRXSksQT13KChMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSx6LmN1cnJlbnQtLSx6LmN1cnJlbnQ8PTApei5jdXJyZW50PTAsTighMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpCLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6SCxvbkRyYWdFbnRlcjpDLG9uRHJhZ0xlYXZlOkEsb25Ecm9wOlZ9fX1mdW5jdGlvbiBYNygkKXtsZXQgSj1uZXcgVWludDhBcnJheSg2NTUzNiksUT0wLFg9MCxLPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KEgpPT57aWYoUStILmxlbmd0aD5KLmxlbmd0aCl7aWYoWD4wKUouY29weVdpdGhpbigwLFgsUSksUS09WCxYPTA7aWYoUStILmxlbmd0aD5KLmxlbmd0aCl7bGV0IEM9Si5sZW5ndGg7d2hpbGUoQzxRK0gubGVuZ3RoKUMqPTI7bGV0IEE9bmV3IFVpbnQ4QXJyYXkoQyk7QS5zZXQoSi5zdWJhcnJheSgwLFEpKSxKPUF9fUouc2V0KEgsUSksUSs9SC5sZW5ndGh9LEc9KEgpPT57bGV0IEM9TWF0aC5taW4oUS00LEgrSyk7Zm9yKGxldCBBPUg7QTw9QztBKyspaWYoSltBXT09PTEzJiZKW0ErMV09PT0xMCYmSltBKzJdPT09MTMmJkpbQSszXT09PTEwKXJldHVybiBBO3JldHVybi0xfSxCPShILEMpPT57bGV0IEE9WS5kZWNvZGUoSi5zdWJhcnJheShILEMpKSxMPS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoQSk7cmV0dXJuIEw/TnVtYmVyKExbMV0pOm51bGx9LE49MCx6PShIKT0+e2xldCBDPS0xO2ZvcihsZXQgQT1IO0E8US0xO0ErKylpZihKW0FdPT09MjU1JiZKW0ErMV09PT0yMTYpe0M9QTticmVha31pZihDPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBBPU1hdGgubWF4KEMrMixOKTtBPFEtMTtBKyspaWYoSltBXT09PTI1NSYmSltBKzFdPT09MjE3KXJldHVybiBOPTAse3M6QyxlOkErMn07cmV0dXJuIE49TWF0aC5tYXgoQysyLFEtMSksbnVsbH0sVj0oKT0+e3doaWxlKFg8USl7bGV0IEg9RyhYKTtpZihIPj0wKXtsZXQgQT1CKFgsSCk7aWYoQSE9bnVsbCYmQT4wKXtsZXQgTD1IKzQsVT1MK0E7aWYoUTxVKWJyZWFrOyQoSi5zdWJhcnJheShMLFUpKSxYPVU7Y29udGludWV9fWVsc2UgaWYoUS1YPD1LKWJyZWFrO2xldCBDPXooWCk7aWYoIUMpYnJlYWs7JChKLnN1YmFycmF5KEMucyxDLmUpKSxYPUMuZX1pZihYPjApe2lmKFg8USlKLmNvcHlXaXRoaW4oMCxYLFEpO1EtPVgsTj1OPlg/Ti1YOjAsWD0wfX07cmV0dXJue3B1c2goSCl7aWYoSC5sZW5ndGg9PT0wKXJldHVybjtxKEgpLFYoKX19fWZ1bmN0aW9uIEs3KCQpe2xldCBKPVQobmV3IFNldCksUT13KChYKT0+e3JldHVybiBKLmN1cnJlbnQuYWRkKFgpLCgpPT57Si5jdXJyZW50LmRlbGV0ZShYKX19LFtdKTtyZXR1cm4geSgoKT0+e2lmKCEkKXJldHVybjtsZXQgWD1uZXcgQWJvcnRDb250cm9sbGVyLEs9ITEsWT1udWxsLHE9bmV3IFVSTCgkKTtxLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgRz1xLnRvU3RyaW5nKCksQj0oKT0+e2lmKEt8fFguc2lnbmFsLmFib3J0ZWR8fFkpcmV0dXJuO1k9c2V0VGltZW91dCgoKT0+e1k9bnVsbCx6KCl9LDEwMDApfSxOPShWKT0+e2lmKEouY3VycmVudC5zaXplPT09MClyZXR1cm47bGV0IEg9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbVl0se3R5cGU6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgQyBvZiBKLmN1cnJlbnQpQyhIKX0sej1hc3luYygpPT57dHJ5e2xldCBIPShhd2FpdCBmZXRjaChHLHtzaWduYWw6WC5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUgpe0IoKTtyZXR1cm59bGV0IEM9WDcoTik7d2hpbGUoITApe2xldHtkb25lOkEsdmFsdWU6TH09YXdhaXQgSC5yZWFkKCk7aWYoQSlicmVhaztpZihMJiZMLmxlbmd0aClDLnB1c2goTCl9fWNhdGNoe31maW5hbGx5e0IoKX19O3JldHVybiB6KCksKCk9PntpZihLPSEwLFkpY2xlYXJUaW1lb3V0KFkpO1guYWJvcnQoKX19LFskXSkse3N1YnNjcmliZUZyYW1lOlEsZnJhbWU6bnVsbH19ZnVuY3Rpb24gWTcoKXtsZXRbJF09ayhuMCk7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiBYMygkLEope3JldHVybiAkPT09ImZpcnN0LWZyYW1lLXRpbWVvdXQiJiZKPT09ImNvbm5lY3RlZCI/ImNvZGVjIjoidHJhbnNwb3J0In12YXIgcTc9ImFsbCI7Y2xhc3MgSzUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJXZWJSVEMgc2lnbmFsaW5nIHN0YXllZCBidXN5IGZvciB0b28gbG9uZy4gUmVsb2FkIHRvIHRyeSBhZ2Fpbi4iKTt0aGlzLm5hbWU9IldlYlJ0Y1NpZ25hbGluZ0J1c3lFcnJvciJ9fWNsYXNzIFkzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiV2ViUlRDIHNpZ25hbGluZyB0aW1lZCBvdXQuIik7dGhpcy5uYW1lPSJXZWJSdGNTaWduYWxpbmdUaW1lb3V0RXJyb3IifX1mdW5jdGlvbiBLMygkKXtyZXR1cm4gJC5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIil9ZnVuY3Rpb24gblooJCxKKXtpZihKPy5hYm9ydGVkKXJldHVybiBQcm9taXNlLnJlamVjdChLMyhKKSk7cmV0dXJuIG5ldyBQcm9taXNlKChRLFgpPT57bGV0IEs9c2V0VGltZW91dChZLCQpO2Z1bmN0aW9uIFkoKXtKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksUSgpfWZ1bmN0aW9uIHEoKXtjbGVhclRpbWVvdXQoSyksWChKP0szKEopOm5ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIikpfUo/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixxLHtvbmNlOiEwfSl9KX1hc3luYyBmdW5jdGlvbiBHNyh7dXJsOiQsc2Vzc2lvbklkOkosa2VlcGFsaXZlOlE9ITEsc2VuZEJlYWNvbjpYLGZldGNoSW1wbDpLPWZldGNofSl7bGV0IFk9SlNPTi5zdHJpbmdpZnkoe3Nlc3Npb25JZDpKfSkscT1YPz8odHlwZW9mIG5hdmlnYXRvcjwidSImJnR5cGVvZiBuYXZpZ2F0b3Iuc2VuZEJlYWNvbj09PSJmdW5jdGlvbiI/bmF2aWdhdG9yLnNlbmRCZWFjb24uYmluZChuYXZpZ2F0b3IpOnZvaWQgMCk7aWYoUSYmcSl0cnl7aWYocSgkLG5ldyBCbG9iKFtZXSx7dHlwZToidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04In0pKSlyZXR1cm59Y2F0Y2h7fWF3YWl0IEsoJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6WSxrZWVwYWxpdmU6UX0pLnRoZW4oKCk9PntyZXR1cm59LCgpPT57cmV0dXJufSl9YXN5bmMgZnVuY3Rpb24gVjcoe3VybDokLGJvZHk6SixzaWduYWw6USxyZXF1ZXN0VGltZW91dE1zOlgsYnVzeVJldHJ5SW50ZXJ2YWxNczpLLGJ1c3lSZXRyeUNvdW50OlksZmV0Y2hJbXBsOnE9ZmV0Y2h9KXtmb3IobGV0IEc9MDtHPD1ZO0crKyl7aWYoUT8uYWJvcnRlZCl0aHJvdyBLMyhRKTtsZXQgQj1uZXcgQWJvcnRDb250cm9sbGVyLE49ITEsej0oKT0+Qi5hYm9ydChRP0szKFEpOnZvaWQgMCk7UT8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHose29uY2U6ITB9KTtsZXQgVj1zZXRUaW1lb3V0KCgpPT57Tj0hMCxCLmFib3J0KCl9LFgpLEg7dHJ5e0g9YXdhaXQgcSgkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sc2lnbmFsOkIuc2lnbmFsLGJvZHk6Sn0pfWNhdGNoKEMpe2lmKE4mJiFRPy5hYm9ydGVkKXRocm93IG5ldyBZMzt0aHJvdyBDfWZpbmFsbHl7Y2xlYXJUaW1lb3V0KFYpLFE/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iix6KX1pZihILnN0YXR1cyE9PTQwOSlyZXR1cm4gSDtpZihhd2FpdCBILmJvZHk/LmNhbmNlbCgpLEc9PT1ZKXRocm93IG5ldyBLNTthd2FpdCBuWihLLFEpfXRocm93IG5ldyBLNX12YXIgclo9W3t1cmxzOlsic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMiJdfSx7dXJsczpbInN0dW46c3R1bjEubC5nb29nbGUuY29tOjE5MzAyIl19XSxhWj0zMDAwLHNaPTIwMDAwLHRaPTQwMDAsZVo9NTAwLCRYPTMwLEpYPTUwMCxRWD01MDAwO2Z1bmN0aW9uIEI3KCl7aWYodHlwZW9mIGNyeXB0by5yYW5kb21VVUlEPT09ImZ1bmN0aW9uIilyZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtsZXQgJD1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDE2KSk7JFs2XT0kWzZdJjE1fDY0LCRbOF09JFs4XSY2M3wxMjg7bGV0IEo9QXJyYXkuZnJvbSgkLChRKT0+US50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKTtyZXR1cm5gJHtKLnNsaWNlKDAsOCl9LSR7Si5zbGljZSg4LDEyKX0tJHtKLnNsaWNlKDEyLDE2KX0tJHtKLnNsaWNlKDE2LDIwKX0tJHtKLnNsaWNlKDIwKX1gfWZ1bmN0aW9uIE43KHtvZmZlclVybDokLGNsb3NlVXJsOkosZW5hYmxlZDpRLGNvZGVjOlg9ImgyNjQiLGljZVNlcnZlcnM6S30pe2xldFtZLHFdPWsobnVsbCksW0csQl09ayhudWxsKSxbTix6XT1rKG51bGwpLFtWLEhdPWsoMCksW0MsQV09ayhudWxsKSxbTCxVXT1rKG51bGwpLEY9VCh2b2lkIDApLFc9VCghMSksRT1UKDApLFA9dygoKT0+e2lmKFcuY3VycmVudD0hMCxFLmN1cnJlbnQ9MCxGLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChGLmN1cnJlbnQpLEYuY3VycmVudD12b2lkIDA7QihudWxsKSx6KG51bGwpfSxbXSk7cmV0dXJuIHkoKCk9PntFLmN1cnJlbnQ9MH0sW1EsJCxKLFgsS10pLHkoKCk9PntpZighUXx8ISQpcmV0dXJuO2lmKEIobnVsbCksdHlwZW9mIFJUQ1BlZXJDb25uZWN0aW9uPiJ1Inx8dHlwZW9mIFJUQ1J0cFJlY2VpdmVyPiJ1Iil7cShudWxsKSxVKG51bGwpLHooIldlYlJUQyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci4iKSxCKHtzZXNzaW9uSWQ6QjcoKSxraW5kOiJwZXJtYW5lbnQifSk7cmV0dXJufWxldCB4PSExLEQ9bnVsbCxuLFI9bnVsbCxkPSExLGk9bmV3IEFib3J0Q29udHJvbGxlcixyPUI3KCksbz1LPy5sZW5ndGg/SzpyWjtpZihVKHIpLHEobnVsbCksQihudWxsKSx6KG51bGwpLFcuY3VycmVudD0hMSxGLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChGLmN1cnJlbnQpLEYuY3VycmVudD12b2lkIDA7bGV0IGE9KHQ9ITEpPT57aWYoUilyZXR1cm4gUjtyZXR1cm4gUj1HNyh7dXJsOkosc2Vzc2lvbklkOnIsa2VlcGFsaXZlOnR9KSxSfSxMMT0oKT0+dm9pZCBhKCEwKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEwxKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixMMSk7bGV0IGw9KCk9PntxKG51bGwpLEQ/LmNsb3NlKCksQShudWxsKX0sbT0odCk9PntpZih4fHxkKXJldHVybjtkPSEwLHoodCksQih7c2Vzc2lvbklkOnIsa2luZDoicGVybWFuZW50In0pLGwoKSxhKCl9LFgxPSgpPT57aWYoeHx8ZClyZXR1cm47ZD0hMCxsKCksYSgpLmZpbmFsbHkoKCk9PntpZigheClCKHtzZXNzaW9uSWQ6cixraW5kOiJjb2RlYyIsY29kZWM6WH0pfSl9LFoxPSh0KT0+e2lmKHh8fGQpcmV0dXJuO2Q9ITAsQihudWxsKTtsZXQgUTE9RS5jdXJyZW50KysscTE9TWF0aC5taW4oSlgqMioqTWF0aC5taW4oUTEsNCksUVgpO3ooYCR7dH0gUmV0cnlpbmcuLi5gKSxsKCksYSgpLmZpbmFsbHkoKCk9PntpZih4KXJldHVybjtuPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57aWYoIXgpSCgoaik9PmorMSl9LHExKX0pfSxIMT0odCk9Pm5ldyBQcm9taXNlKChRMSk9PntpZih0LmljZUdhdGhlcmluZ1N0YXRlPT09ImNvbXBsZXRlIil7UTEoKTtyZXR1cm59bGV0IHExLGo9ITEscD0oKT0+e2lmKGopcmV0dXJuO2lmKGo9ITAsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJpY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSIsXykscTEhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChxMSk7UTEoKX0sXz0oKT0+e2lmKHQuaWNlR2F0aGVyaW5nU3RhdGU9PT0iY29tcGxldGUiKXAoKX07dC5hZGRFdmVudExpc3RlbmVyKCJpY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSIsXykscTE9d2luZG93LnNldFRpbWVvdXQocCxhWil9KTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtEPW5ldyBSVENQZWVyQ29ubmVjdGlvbih7aWNlU2VydmVyczpvLGljZVRyYW5zcG9ydFBvbGljeTpxN30pLEEoRCk7bGV0IHQ9RC5hZGRUcmFuc2NlaXZlcigidmlkZW8iLHtkaXJlY3Rpb246InJlY3Zvbmx5In0pLFExPVJUQ1J0cFJlY2VpdmVyLmdldENhcGFiaWxpdGllcygidmlkZW8iKSxxMT1YPT09ImgyNjQiPyJ2aWRlby9IMjY0IjpYPT09InZwOSI/InZpZGVvL1ZQOSI6InZpZGVvL1ZQOCI7aWYoUTE/LmNvZGVjcy5sZW5ndGgmJiJzZXRDb2RlY1ByZWZlcmVuY2VzImluIHQpe2xldCBnPXExLnRvTG93ZXJDYXNlKCk7dC5zZXRDb2RlY1ByZWZlcmVuY2VzKFsuLi5RMS5jb2RlY3MuZmlsdGVyKCh2KT0+di5taW1lVHlwZS50b0xvd2VyQ2FzZSgpPT09ZyksLi4uUTEuY29kZWNzLmZpbHRlcigodik9PnYubWltZVR5cGUudG9Mb3dlckNhc2UoKSE9PWcpXSl9RC5vbnRyYWNrPShnKT0+e2lmKHgpcmV0dXJuO2lmKFcuY3VycmVudD0hMSxnLnRyYWNrLm9uZW5kZWQ9KCk9PloxKCJXZWJSVEMgdmlkZW8gdHJhY2sgZW5kZWQuIikscShnLnN0cmVhbXNbMF0/P25ldyBNZWRpYVN0cmVhbShbZy50cmFja10pKSxGLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChGLmN1cnJlbnQpO0YuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+e2lmKEYuY3VycmVudD12b2lkIDAseHx8Vy5jdXJyZW50KXJldHVybjtsZXQgdj1EPy5jb25uZWN0aW9uU3RhdGU/PyJjbG9zZWQiO2lmKFgzKCJmaXJzdC1mcmFtZS10aW1lb3V0Iix2KT09PSJjb2RlYyIpWDEoKTtlbHNlIFoxKCJXZWJSVEMgZGlkIG5vdCBlc3RhYmxpc2ggYSB2aWRlbyBwYXRoLiIpfSx0Wil9LEQub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U9KCk9PntpZih4fHwhRHx8RC5jb25uZWN0aW9uU3RhdGUhPT0iZmFpbGVkIilyZXR1cm47aWYoWDMoImNvbm5lY3Rpb24tZmFpbGVkIixELmNvbm5lY3Rpb25TdGF0ZSk9PT0idHJhbnNwb3J0IilaMSgiV2ViUlRDIGNvbm5lY3Rpb24gZmFpbGVkLiIpfTtsZXQgaj1hd2FpdCBELmNyZWF0ZU9mZmVyKCk7YXdhaXQgRC5zZXRMb2NhbERlc2NyaXB0aW9uKGopLGF3YWl0IEgxKEQpO2xldCBwPUQubG9jYWxEZXNjcmlwdGlvbjtpZighcCl0aHJvdyBFcnJvcigiV2ViUlRDIG9mZmVyIHdhcyBub3QgY3JlYXRlZCIpO2xldCBfPWF3YWl0IFY3KHt1cmw6JCxzaWduYWw6aS5zaWduYWwscmVxdWVzdFRpbWVvdXRNczpzWixidXN5UmV0cnlJbnRlcnZhbE1zOmVaLGJ1c3lSZXRyeUNvdW50OiRYLGJvZHk6SlNPTi5zdHJpbmdpZnkoe3R5cGU6cC50eXBlLHNkcDpwLnNkcCxzZXNzaW9uSWQ6cixjb2RlYzpYLGljZVNlcnZlcnM6b30pfSk7aWYoIV8ub2spe2F3YWl0IF8uYm9keT8uY2FuY2VsKCksbShgV2ViUlRDIG9mZmVyIGZhaWxlZDogSFRUUCAke18uc3RhdHVzfWApO3JldHVybn1sZXQgaD1hd2FpdCBfLmpzb24oKTtpZih4KXthd2FpdCBhKCEwKTtyZXR1cm59dHJ5e2F3YWl0IEQuc2V0UmVtb3RlRGVzY3JpcHRpb24oaCl9Y2F0Y2h7bSgiV2ViUlRDIHJldHVybmVkIGFuIGludmFsaWQgc2Vzc2lvbiBkZXNjcmlwdGlvbi4iKX19Y2F0Y2godCl7aWYoeHx8aS5zaWduYWwuYWJvcnRlZClyZXR1cm47aWYodCBpbnN0YW5jZW9mIEs1KXttKHQubWVzc2FnZSk7cmV0dXJufWxldCBRMT10IGluc3RhbmNlb2YgWTM/IldlYlJUQyBzaWduYWxpbmcgdGltZWQgb3V0LiI6IldlYlJUQyBzaWduYWxpbmcgZmFpbGVkLiI7aWYoWDMoInNpZ25hbGluZy1mYWlsZWQiLEQ/LmNvbm5lY3Rpb25TdGF0ZT8/ImNsb3NlZCIpPT09InRyYW5zcG9ydCIpWjEoUTEpfX0pKCksKCk9PntpZih4PSEwLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTDEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEwxKSxpLmFib3J0KCksbiE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KG4pO2lmKEYuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KEYuY3VycmVudCksRi5jdXJyZW50PXZvaWQgMDthKCEwKSxxKG51bGwpLEEobnVsbCksVShudWxsKSxEPy5jbG9zZSgpfX0sW1EsJCxKLFgsSyxWXSkse3N0cmVhbTpZLGZhaWx1cmU6RyxlcnJvcjpOLG1hcmtGcmFtZURlY29kZWQ6UCxwZWVyQ29ubmVjdGlvbjpDLHNlc3Npb25JZDpMfX1mdW5jdGlvbiBxMygkLEosUSxYLEs9ImxlZnQiKXtsZXQgWT13KChILEMpPT5LPT09ImxlZnQiP0gtQzpDLUgsW0tdKSxxPXcoKEgpPT5NYXRoLm1heChRLE1hdGgubWluKFgsSCkpLFtRLFhdKSxbRyxCXT1rKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEo7bGV0IEg9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLEM9SCE9bnVsbD9OdW1iZXIoSCk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoQyk/cShDKTpKfSksTj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihYLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpYLHo9TWF0aC5tYXgoUSxNYXRoLm1pbihOLEcpKSxWPXcoKEgpPT57SC5wcmV2ZW50RGVmYXVsdCgpO2xldCBDPUguY2xpZW50WCxBPXosTD1ILmN1cnJlbnRUYXJnZXQ7TC5zZXRQb2ludGVyQ2FwdHVyZShILnBvaW50ZXJJZCk7bGV0IFU9KFcpPT57bGV0IEU9cShBK1koQyxXLmNsaWVudFgpKTtCKEUpfSxGPShXKT0+e0wucmVsZWFzZVBvaW50ZXJDYXB0dXJlKFcucG9pbnRlcklkKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixVKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRiksTC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixGKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoQStZKEMsVy5jbGllbnRYKSkpKX1jYXRjaHt9fTtMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixVKSxMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRiksTC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixGKX0sW3EsWSx6LCRdKTtyZXR1cm57d2lkdGg6eixvblBvaW50ZXJEb3duOlZ9fXZhciBaWD04MDAwO2Z1bmN0aW9uIFhYKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIEtYKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIHo3KHt0b2FzdDokLG9uUmV2ZWFsOkosb25EaXNtaXNzOlEsb25QYXVzZTpYLG9uUmVzdW1lOkt9KXtsZXQgWT1Cb29sZWFuKCQuZG93bmxvYWRVcmwmJiQuZG93bmxvYWROYW1lKSxxPUJvb2xlYW4oJC5wYXRoKSxbRyxCXT1rKCExKSxOPVQobnVsbCksej1UKG51bGwpLFY9KCk9PntpZih6LmN1cnJlbnQpY2xlYXJUaW1lb3V0KHouY3VycmVudCk7ei5jdXJyZW50PW51bGx9O3koKCk9PigpPT5WKCksW10pO2xldCBIPShBKT0+e2lmKCEkLnBhdGgpe0EucHJldmVudERlZmF1bHQoKTtyZXR1cm59VigpLFgoKSx6LmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e3ouY3VycmVudD1udWxsLEIoITEpLEsoKX0sWlgpLEEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLFhYKCQucGF0aCkpLEEuZGF0YVRyYW5zZmVyLnNldERhdGEoczUsJC5wYXRoKSxBLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgTD1OLmN1cnJlbnQ7aWYoTClBLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoTCxMLm9mZnNldFdpZHRoLzIsTC5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5CKCEwKSl9LEM9KEEpPT57aWYoVigpLEIoITEpLEtYKEEuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKVEoKTtlbHNlIEsoKX07cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlgsb25Nb3VzZUxlYXZlOkssY2hpbGRyZW46WyQudGh1bWImJlooImltZyIse3JlZjpOLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SixkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIiYmcSxvbkRyYWdTdGFydDpILG9uRHJhZ0VuZDpDLCJhcmlhLWxhYmVsIjpZPyJEb3dubG9hZCBzY3JlZW5zaG90IGFnYWluIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6WT8iRG93bmxvYWQgc2NyZWVuc2hvdCBhZ2FpbiI6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtHPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/WigiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOlk/IkRvd25sb2FkIGFnYWluIjoiT3BlbiBpbiBGaW5kZXIifSldfSksJC5zdGF0dXM9PT0ic2F2ZWQiJiZaKGgyLHtjbGFzc05hbWU6Im1sLWF1dG8gdGV4dC13aGl0ZS84MCBwb2ludGVyLWV2ZW50cy1ub25lIixzaXplOjE2LHN0cm9rZVdpZHRoOjIuMjV9KV19KV19KX12YXIgXzg9MzUwMCxMNz00MDAwLFlYPTFlNDtmdW5jdGlvbiBxWCgpe3JldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCItIikuc2xpY2UoMCwyMyl9ZnVuY3Rpb24gSDcoJCl7bGV0IEo9VChudWxsKSxRPVQobnVsbCksWD1UKG51bGwpLEs9VChudWxsKSxZPVQobnVsbCkscT1UKCExKSxHPXcoKCk9PntpZihYLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFguY3VycmVudCk7WC5jdXJyZW50PW51bGwsSy5jdXJyZW50PW51bGx9LFtdKSxCPXcoKEwpPT57bGV0IFU9TD8/US5jdXJyZW50Pz92b2lkIDA7aWYoRygpLFkuY3VycmVudD1udWxsLHQyLmRpc21pc3MoVSksVT09PXZvaWQgMHx8US5jdXJyZW50PT09U3RyaW5nKFUpKXtsZXQgRj1KLmN1cnJlbnQ/LmRvd25sb2FkVXJsO2lmKEYpVVJMLnJldm9rZU9iamVjdFVSTChGKTtKLmN1cnJlbnQ9bnVsbCxRLmN1cnJlbnQ9bnVsbH19LFtHXSksTj13KCgpPT57bGV0IEw9Si5jdXJyZW50O2lmKEw/LnBhdGgpSTEoYG9wZW4gLVIgJHtPMShMLnBhdGgpfWApO2Vsc2UgaWYoTD8uZG93bmxvYWRVcmwmJkwuZG93bmxvYWROYW1lKVE1KEwuZG93bmxvYWRVcmwsTC5kb3dubG9hZE5hbWUpfSxbXSksej13KChMKT0+e0coKTtsZXQgVT1NYXRoLm1heCgwLEwpLEY9US5jdXJyZW50O1kuY3VycmVudD1VLEsuY3VycmVudD1EYXRlLm5vdygpK1UsWC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkIoRj8/dm9pZCAwKSxVKX0sW0csQl0pLFY9dygoKT0+e2lmKCFYLmN1cnJlbnR8fEsuY3VycmVudD09bnVsbClyZXR1cm47WS5jdXJyZW50PU1hdGgubWF4KDAsSy5jdXJyZW50LURhdGUubm93KCkpLEcoKX0sW0ddKSxIPXcoKCk9PntsZXQgTD1ZLmN1cnJlbnQ7aWYoTD09bnVsbClyZXR1cm47eihMKX0sW3pdKSxDPXcoKEwsVT0xLzApPT57aWYoSi5jdXJyZW50PUwsUS5jdXJyZW50PUwuaWQsdDIuY3VzdG9tKChGKT0+Wih6Nyx7dG9hc3Q6TCxvblJldmVhbDpOLG9uRGlzbWlzczooKT0+QihGKSxvblBhdXNlOlYsb25SZXN1bWU6SH0pLHtpZDpMLmlkLGR1cmF0aW9uOjEvMH0pLE51bWJlci5pc0Zpbml0ZShVKSl6KFUpO2Vsc2UgRygpLFkuY3VycmVudD1udWxsfSxbRyxCLFYsSCxOLHpdKTtyZXR1cm57Y2FwdHVyZTp3KGFzeW5jKCk9PntpZighJHx8cS5jdXJyZW50KXJldHVybjtxLmN1cnJlbnQ9ITA7bGV0IEw9Y3J5cHRvLnJhbmRvbVVVSUQoKTtDKHtpZDpMLHN0YXR1czoic2F2aW5nIixwaGFzZToiaW4ifSk7bGV0IFU9YHNlcnZlLXNpbS1zY3JlZW5zaG90LSR7cVgoKX0ucG5nYCxGPW5ldyBBYm9ydENvbnRyb2xsZXIsVz1zZXRUaW1lb3V0KCgpPT57Ri5hYm9ydChFcnJvcigiU2NyZWVuc2hvdCB0aW1lZCBvdXQiKSl9LFlYKTt0cnl7aWYoIUozKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSkpe2xldCBSPWF3YWl0IHU0KCQse3NpZ25hbDpGLnNpZ25hbH0pLGQ9VVJMLmNyZWF0ZU9iamVjdFVSTChSKTtRNShkLFUpLEMoe2lkOkwsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixkb3dubG9hZFVybDpkLGRvd25sb2FkTmFtZTpVLHRodW1iOmR9LF84KTtyZXR1cm59bGV0IFA9YEY9IiR7YCRIT01FL0Rlc2t0b3AvJHtVfWB9IjsgeGNydW4gc2ltY3RsIGlvICR7TzEoJCl9IHNjcmVlbnNob3QgIiRGIiAmJiBwcmludGYgJyVzJyAiJEYiYCx4PWF3YWl0IEkxKFAse3NpZ25hbDpGLnNpZ25hbH0pLEQ9eC5zdGRvdXQudHJpbSgpO2lmKHguZXhpdENvZGUhPT0wfHwhRCl7Qyh7aWQ6TCxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6eC5zdGRlcnIudHJpbSgpfHwiU2NyZWVuc2hvdCBmYWlsZWQifSxMNyk7cmV0dXJufUMoe2lkOkwsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixwYXRoOkR9LF84KTtsZXQgbj1gL3RtcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC10aHVtYi0ke0x9LnBuZ2A7dHJ5e2xldCBkPShhd2FpdCBJMShgc2lwcyAtWiAzMjAgJHtPMShEKX0gLS1vdXQgJHtPMShuKX0gPi9kZXYvbnVsbCAyPiYxICYmIGJhc2U2NCAtaSAke08xKG4pfTsgcm0gLWYgJHtPMShuKX1gLHtzaWduYWw6Ri5zaWduYWx9KSkuc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKTtpZihkKXtsZXQgaT1KLmN1cnJlbnQ7aWYoaT8uaWQ9PT1MKUMoey4uLmksdGh1bWI6YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke2R9YH0sXzgpfX1jYXRjaHt9fWNhdGNoKEUpe0Moe2lkOkwsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOkUgaW5zdGFuY2VvZiBFcnJvcj9FLm1lc3NhZ2U6IlNjcmVlbnNob3QgZmFpbGVkIn0sTDcpfWZpbmFsbHl7Y2xlYXJUaW1lb3V0KFcpLHEuY3VycmVudD0hMX19LFskLENdKSxyZXZlYWw6TixkaXNtaXNzOkJ9fWZ1bmN0aW9uIEM3KHtkZWZhdWx0V2lkdGg6JCx2aWV3cG9ydFdpZHRoOkosdmlld3BvcnRIZWlnaHQ6USxhc3BlY3RSYXRpbzpYLG9uU3RhcnQ6S30pe2xldCBZPWQ1KCksW3EsR109ayghMSksW0IsTl09ayghMSksW3osVl09ayghMSksSD1UKG51bGwpLEM9VChbXSksQT1UKG51bGwpLEw9VChudWxsKSxVPVQobnVsbCksRj1UKG51bGwpLFc9dygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO2xldCBfPU5hTjt0cnl7bGV0IGg9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFE4KTtfPWghPW51bGw/TnVtYmVyKGgpOk5hTn1jYXRjaHt9cmV0dXJuIG82KCQsSixRLFgsXyl9LFtYLCQsUSxKXSksRT1rMSgoKT0+VygpLFtXXSksW1AseF09ayhFKSxEPVQoRSksbj1UKCQpLFI9WjgoJCxKLFEsWCksZD1NYXRoLm1pbihFNixSKSxpPVA/PyQscj10MChpLCQsSixRLFgpLG89dygoXyk9PntsZXQgaD1pNShfKTtELmN1cnJlbnQ9aCx4KGgpfSxbXSksYT13KChfKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgaD10MChfLCQsSixRLFgpO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oUTgsU3RyaW5nKGgvJCkpfWNhdGNoe319LFtYLCQsUSxKXSksTDE9dygoXyk9PntpZihVLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KFUuY3VycmVudCk7VS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntVLmN1cnJlbnQ9bnVsbCxhKF8pfSxjNil9LFthXSk7eSgoKT0+e2lmKHF8fEIpcmV0dXJuO2xldCBfPUQuY3VycmVudDtpZihfPT1udWxsKXJldHVybjtsZXQgaD10MChfLCQsSixRLFgpO2lmKGghPT1fKW8oaCl9LFtYLCQsQixxLFEsSixvXSkseSgoKT0+e2lmKG4uY3VycmVudD09PSQpcmV0dXJuO24uY3VycmVudD0kLG8oVygpKX0sWyQsVyxvXSkseSgoKT0+e2lmKCFxJiYhQilyZXR1cm47bGV0IF89ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IsaD1kb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QsZz1kb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q7cmV0dXJuIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPSJud3NlLXJlc2l6ZSIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PSJub25lIixkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLCgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Xyxkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9aCxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Z319LFtxLEJdKSx5KCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCBfPSgpPT57bGV0IGc9RC5jdXJyZW50O2lmKGc9PW51bGwpcmV0dXJuO2lmKFUuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoVS5jdXJyZW50KSxVLmN1cnJlbnQ9bnVsbDthKGcpfSxoPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpXygpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixfKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixoKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCl9fSxbYV0pO2xldCBsPXcoKF8pPT57aWYoXz5SKXJldHVybiBSK1g4KF8tUixSKTtpZihfPGQpcmV0dXJuIGQtWDgoZC1fLFIpO3JldHVybiBffSxbUixkXSksbT13KCgpPT57aWYoTC5jdXJyZW50KUwuY3VycmVudCgpLEwuY3VycmVudD1udWxsO04oITEpfSxbXSksWDE9dygoXyk9PntsZXQgaD1wZXJmb3JtYW5jZS5ub3coKSxnPUMuY3VycmVudDtnLnB1c2goe3Q6aCx4Ol99KTt3aGlsZShnLmxlbmd0aD4xJiZoLWdbMF0udD5kNilnLnNoaWZ0KCl9LFtdKSxaMT13KChfKT0+e2xldCBoPWwoXyk7aWYoQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCk7QS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0EuY3VycmVudD1udWxsLG8oaCksWDEoaCl9KX0sW2wsWDEsb10pLEgxPXcoKF8saCxnKT0+e20oKTtsZXQgdj1ELmN1cnJlbnQ/PyQ7SC5jdXJyZW50PXtwb2ludGVySWQ6XyxzdGFydFg6aCxzdGFydFk6ZyxzdGFydFdpZHRoOnZ9LEMuY3VycmVudD1be3Q6cGVyZm9ybWFuY2Uubm93KCkseDp2fV0sSygpLEcoITApfSxbbSwkLEtdKSx0PXcoKCk9PntsZXQgXz1ILmN1cnJlbnQ7aWYoSC5jdXJyZW50PW51bGwsQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCksQS5jdXJyZW50PW51bGw7aWYoXyYmXy5wb2ludGVySWQ+PTApe2xldCB3MT1GLmN1cnJlbnQ7aWYodzE/Lmhhc1BvaW50ZXJDYXB0dXJlKF8ucG9pbnRlcklkKSl3MS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoXy5wb2ludGVySWQpfUcoITEpO2xldCBoPUQuY3VycmVudD8/JCxnPXI2KEMuY3VycmVudCk7Qy5jdXJyZW50PVtdO2xldCB2PXQwKGgrZypsNiwkLEosUSxYKSxZMT1pNShpNih2LFskXSxtNikpLEcxPU1hdGguYWJzKGgtWTEpPDAuNSYmTWF0aC5hYnMoZyk8ODtpZihZfHxHMSl7byhZMSksTDEoWTEpO3JldHVybn1OKCEwKSxMLmN1cnJlbnQ9bjYoe2Zyb206aCx0bzpZMSx2ZWxvY2l0eTpnLHN0aWZmbmVzczpwNixkYW1waW5nOnU2LG9uVXBkYXRlOm8sb25Db21wbGV0ZTooKT0+e0wuY3VycmVudD1udWxsLE4oITEpLEwxKFkxKX19KX0sW1gsJCxZLEwxLFEsSixvXSk7eSgoKT0+e3JldHVybigpPT57aWYobSgpLEEuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShBLmN1cnJlbnQpO2lmKFUuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KFUuY3VycmVudCksRC5jdXJyZW50IT1udWxsKWEoRC5jdXJyZW50KX19fSxbbSxhXSkseSgoKT0+e2lmKCFxKXJldHVybjtsZXQgXz0oKT0+dCgpLGg9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIil0KCl9LGc9KHYpPT57bGV0IFkxPUguY3VycmVudDtpZighWTF8fFkxLnBvaW50ZXJJZCE9PXYucG9pbnRlcklkKXJldHVybjt2LnByZXZlbnREZWZhdWx0KCksWjEoVTcoWTEsdi5jbGllbnRYLHYuY2xpZW50WSxYKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsXyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixnLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixfLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsXywhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsXyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixnLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixfLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsXywhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCl9fSxbWCx0LHEsWjFdKTtsZXQgUTE9dygoXyk9PntsZXQgaD1ILmN1cnJlbnQ7aWYoIWh8fGgucG9pbnRlcklkIT09Xy5wb2ludGVySWQpcmV0dXJuO18ucHJldmVudERlZmF1bHQoKSxfLnN0b3BQcm9wYWdhdGlvbigpLHQoKX0sW3RdKSxxMT13KChfKT0+e2lmKF8uYnV0dG9uIT09MClyZXR1cm47Xy5wcmV2ZW50RGVmYXVsdCgpLF8uc3RvcFByb3BhZ2F0aW9uKCksXy5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKF8ucG9pbnRlcklkKSxIMShfLnBvaW50ZXJJZCxfLmNsaWVudFgsXy5jbGllbnRZKX0sW0gxXSksaj13KChfKT0+e2xldCBoPUguY3VycmVudDtpZighaHx8aC5wb2ludGVySWQhPT1fLnBvaW50ZXJJZClyZXR1cm47Xy5wcmV2ZW50RGVmYXVsdCgpLFoxKFU3KGgsXy5jbGllbnRYLF8uY2xpZW50WSxYKSl9LFtYLFoxXSkscD13KChfKT0+e2xldCBoPV8ua2V5PT09IkFycm93UmlnaHQifHxfLmtleT09PSJBcnJvd0Rvd24iPzE6Xy5rZXk9PT0iQXJyb3dMZWZ0Inx8Xy5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihoPT09MClyZXR1cm47Xy5wcmV2ZW50RGVmYXVsdCgpLG0oKTtsZXQgZz1fLnNoaWZ0S2V5PzgwOjI0LHY9aTUodDAocitoKmcsJCxKLFEsWCkpO28odiksTDEodil9LFtYLG0sciwkLEwxLFEsSixvXSk7cmV0dXJue2hhbmRsZVJlZjpGLHdpZHRoOmksY29tbWl0dGVkV2lkdGg6cixtaW5XaWR0aDpkLG1heFdpZHRoOlIsaXNSZXNpemluZzpxLGlzSW5lcnRpYTpCLGhhbmRsZUhvdmVyZWQ6eixoYW5kbGVBY3RpdmU6enx8cXx8QixzZXRIYW5kbGVIb3ZlcmVkOlYsb25Qb2ludGVyRG93bjpxMSxvblBvaW50ZXJNb3ZlOmosb25Qb2ludGVyRW5kOlExLG9uS2V5RG93bjpwfX1mdW5jdGlvbiBVNygkLEosUSxYKXtsZXQgSz1KLSQuc3RhcnRYLFk9KFEtJC5zdGFydFkpKlg7cmV0dXJuICQuc3RhcnRXaWR0aCsoTWF0aC5hYnMoSyk+PU1hdGguYWJzKFkpP0s6WSl9ZnVuY3Rpb24gTzcoKXtsZXQgJD1UKG5ldyBNYXApLEo9VChuZXcgTWFwKSxRPXcoKEcpPT57bGV0IEI9Si5jdXJyZW50LmdldChHKTtpZihCKWNsZWFyVGltZW91dChCKTtKLmN1cnJlbnQuZGVsZXRlKEcpfSxbXSksWD13KChHLEI9MS8wKT0+e3QyLmN1c3RvbSgoKT0+WihaNCx7dG9hc3Q6R30pLHtpZDpHLmlkLGR1cmF0aW9uOkJ9KX0sW10pLEs9dygoRyxCKT0+e2xldCBOPWNyeXB0by5yYW5kb21VVUlEKCksej17aWQ6TixuYW1lOkcsa2luZDpCLHN0YXR1czoidXBsb2FkaW5nIixwcm9ncmVzczowfTtyZXR1cm4gJC5jdXJyZW50LnNldChOLHopLFgoeiksTn0sW1hdKSxZPXcoKEcsQik9PntsZXQgTj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFOKXJldHVybjtRKEcpO2xldCB6PXsuLi5OLC4uLkJ9O2lmKCQuY3VycmVudC5zZXQoRyx6KSxYKHosQi5zdGF0dXM9PT0ic3VjY2VzcyJ8fEIuc3RhdHVzPT09ImVycm9yIj8zMDAwOjEvMCksQi5zdGF0dXM9PT0ic3VjY2VzcyJ8fEIuc3RhdHVzPT09ImVycm9yIil7bGV0IFY9c2V0VGltZW91dCgoKT0+eyQuY3VycmVudC5kZWxldGUoRyksSi5jdXJyZW50LmRlbGV0ZShHKX0sMzAwMCk7Si5jdXJyZW50LnNldChHLFYpfX0sW1EsWF0pLHE9dygoRyxCKT0+e2xldCBOPSQuY3VycmVudC5nZXQoRyk7aWYoIU4pcmV0dXJuO2xldCB6PXsuLi5OLHByb2dyZXNzOkJ9OyQuY3VycmVudC5zZXQoRyx6KSxYKHopfSxbWF0pO3JldHVybnthZGQ6Syx1cGRhdGU6WSxzZXRQcm9ncmVzczpxfX1mdW5jdGlvbiBGNygkLEope2xldFtRLFhdPWsoW10pLFtLLFldPWsobnVsbCksW3EsR109ayghMSksQj13KGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IE49YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLHo9YXdhaXQgTi5qc29uKCk7aWYoIU4ub2t8fHouZXJyb3IpdGhyb3cgRXJyb3Ioei5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7bGV0IFY9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3cubG9jYXRpb24sSD16LnRhcmdldHM/P1tdO1goVj9ILm1hcCgoQyk9PnM0KEMsVikpOkgpfWNhdGNoKE4pe1koTiBpbnN0YW5jZW9mIEVycm9yP04ubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7RyghMSl9fSxbJF0pO3JldHVybiB5KCgpPT57aWYoIUopcmV0dXJuO0IoKTtsZXQgTj1zZXRJbnRlcnZhbCgoKT0+dm9pZCBCKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoTil9LFtKLEJdKSx7dGFyZ2V0czpRLGVycm9yOkssbG9hZGluZzpxLHJlZnJlc2g6Qn19dmFyIEdYPTYwLFZYPTEwMDAsQlg9NjAwMDA7ZnVuY3Rpb24gQTcoJCxKKXtsZXQgUT1uZXcgVVJMKCQsd2luZG93LmxvY2F0aW9uLmhyZWYpO2ZvcihsZXRbWCxLXW9mIE9iamVjdC5lbnRyaWVzKEopKWlmKEs9PW51bGx8fEs9PT0iIilRLnNlYXJjaFBhcmFtcy5kZWxldGUoWCk7ZWxzZSBRLnNlYXJjaFBhcmFtcy5zZXQoWCxTdHJpbmcoSykpO3JldHVybmAke1EucGF0aG5hbWV9JHtRLnNlYXJjaH1gfWZ1bmN0aW9uIE03KCQsSixRLFgsSz1HWCl7bGV0W1kscV09ayhudWxsKSxbRyxCXT1rKFtdKSxbTix6XT1rKDApLFtWLEhdPWsoSyksW0MsQV09aygwKSxMPVQoWCk7TC5jdXJyZW50PVgseSgoKT0+e2lmKCFRfHwhJClyZXR1cm47bGV0IEQ9ITEsbj1hc3luYygpPT57dHJ5e2xldCBpPWF3YWl0KGF3YWl0IGZldGNoKEE3KCQse2xpbWl0OlYsb2Zmc2V0OjAsZGV2aWNlOkwuY3VycmVudH0pKSkuanNvbigpO2lmKEQpcmV0dXJuO2lmKHEoaS5kZXZpY2VzPz9bXSksdHlwZW9mIGkudG90YWw9PT0ibnVtYmVyIil6KGkudG90YWwpfWNhdGNoe2lmKCFEKXEoW10pfX07bigpO2xldCBSPXNldEludGVydmFsKG4sQlgpO3JldHVybigpPT57RD0hMCxjbGVhckludGVydmFsKFIpfX0sWyQsUSxDLFZdKSx5KCgpPT57aWYoIVF8fCFKKXJldHVybjtsZXQgRD1BMChBNyhKLHtkZXZpY2U6WH0pKTtyZXR1cm4gRC5vbm1lc3NhZ2U9KG4pPT57dHJ5e2xldCBSPUpTT04ucGFyc2Uobi5kYXRhKTtpZihBcnJheS5pc0FycmF5KFIuc3RhdHVzZXMpKUIoUi5zdGF0dXNlcyl9Y2F0Y2h7fX0sKCk9PkQuY2xvc2UoKX0sW1EsWCxKXSk7bGV0IFU9VCgiIik7eSgoKT0+e2lmKCFZfHwhSDYoWSxHLFYpKXtVLmN1cnJlbnQ9IiI7cmV0dXJufWxldCBEPUcuc2xpY2UoMCxWKS5tYXAoKG4pPT5uLmRldmljZSkuam9pbigiLCIpO2lmKEQ9PT1VLmN1cnJlbnQpcmV0dXJuO1UuY3VycmVudD1ELEEoKG4pPT5uKzEpfSxbWSxHLFZdKTtsZXQgRj1rMSgoKT0+WT09PW51bGw/bnVsbDpMNihZLEcpLFtZLEddKSxXPXcoKCk9PkgoKEQpPT5EK0spLFtLXSksRT13KCgpPT5IKFZYKSxbXSksUD13KCgpPT5IKEspLFtLXSkseD1OPihGPy5sZW5ndGg/PzApO3JldHVybntkZXZpY2VzOkYsdG90YWw6Tixsb2FkTW9yZTpXLGxvYWRBbGw6RSxyZXNldFBhZ2U6UCxoYXNNb3JlOnh9fXZhciBrNz17bWpwZWdGcHM6NjAsbWpwZWdRdWFsaXR5OjAuNyxtYXhEaW1lbnNpb246MCxoMjY0Qml0cmF0ZTo2MDAwMDAwLGgyNjRGcHM6NjB9LE5YPXt0cmFuc3BvcnQ6Imh0dHAiLGh0dHBDb2RlYzoiYXV0byIsd2ViUnRjQ29kZWM6ImgyNjQiLC4uLms3fTtmdW5jdGlvbiB6WCgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ibnVtYmVyIiYmTnVtYmVyLmlzRmluaXRlKCQpPyQ6bnVsbH1mdW5jdGlvbiBXNygkLEosUSxYKXtsZXQgSz16WCgkKTtyZXR1cm4gSz09bnVsbD9KOk1hdGgubWluKFgsTWF0aC5tYXgoUSxLKSl9ZnVuY3Rpb24gRzMoJCxKLFEsWCl7cmV0dXJuIE1hdGgucm91bmQoVzcoJCxKLFEsWCkpfWZ1bmN0aW9uIExYKCQpe2lmKCFBcnJheS5pc0FycmF5KCQpfHwkLmxlbmd0aD4xNilyZXR1cm4gbnVsbDtsZXQgSj1bXTtmb3IobGV0IFEgb2YgJCl7aWYoIVF8fHR5cGVvZiBRIT09Im9iamVjdCIpcmV0dXJuIG51bGw7bGV0IFg9US51cmxzO2lmKCFBcnJheS5pc0FycmF5KFgpfHxYLmxlbmd0aD09PTB8fFgubGVuZ3RoPjE2fHwhWC5ldmVyeSgocSk9PnR5cGVvZiBxPT09InN0cmluZyImJnEubGVuZ3RoPD0yMDQ4JiYvXihzdHVufHN0dW5zfHR1cm58dHVybnMpOi9pLnRlc3QocSkpKXJldHVybiBudWxsO2xldHt1c2VybmFtZTpLLGNyZWRlbnRpYWw6WX09UTtpZihLIT09dm9pZCAwJiZ0eXBlb2YgSyE9PSJzdHJpbmciKXJldHVybiBudWxsO2lmKFkhPT12b2lkIDAmJnR5cGVvZiBZIT09InN0cmluZyIpcmV0dXJuIG51bGw7Si5wdXNoKHt1cmxzOlgsLi4udHlwZW9mIEs9PT0ic3RyaW5nIj97dXNlcm5hbWU6S306e30sLi4udHlwZW9mIFk9PT0ic3RyaW5nIj97Y3JlZGVudGlhbDpZfTp7fX0pfXJldHVybiBKfWZ1bmN0aW9uIEQ4KCQ9e30sSj1OWCl7bGV0IFg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCQsImljZVNlcnZlcnMiKT9MWCgkLmljZVNlcnZlcnMpOkouaWNlU2VydmVycyxLPVg9PT1udWxsP0ouaWNlU2VydmVyczpYJiZYLmxlbmd0aD4wP1g6dm9pZCAwO3JldHVybnt0cmFuc3BvcnQ6JC50cmFuc3BvcnQ9PT0iaHR0cCJ8fCQudHJhbnNwb3J0PT09IndlYnJ0YyI/JC50cmFuc3BvcnQ6Si50cmFuc3BvcnQsaHR0cENvZGVjOiQuaHR0cENvZGVjPT09ImF1dG8ifHwkLmh0dHBDb2RlYz09PSJtanBlZyJ8fCQuaHR0cENvZGVjPT09ImgyNjQiPyQuaHR0cENvZGVjOkouaHR0cENvZGVjLHdlYlJ0Y0NvZGVjOiQud2ViUnRjQ29kZWM9PT0idnA4Inx8JC53ZWJSdGNDb2RlYz09PSJ2cDkifHwkLndlYlJ0Y0NvZGVjPT09ImgyNjQiPyQud2ViUnRjQ29kZWM6Si53ZWJSdGNDb2RlYywuLi5LP3tpY2VTZXJ2ZXJzOkt9Ont9LC4uLlk1KCQsSil9fWZ1bmN0aW9uIFk1KCQ9e30sSj1rNyl7cmV0dXJue21qcGVnRnBzOkczKCQubWpwZWdGcHMsSi5tanBlZ0ZwcywxLDEyMCksbWpwZWdRdWFsaXR5Olc3KCQubWpwZWdRdWFsaXR5LEoubWpwZWdRdWFsaXR5LDAuMDUsMSksbWF4RGltZW5zaW9uOkczKCQubWF4RGltZW5zaW9uLEoubWF4RGltZW5zaW9uLDAsNDA5NiksaDI2NEJpdHJhdGU6RzMoJC5oMjY0Qml0cmF0ZSxKLmgyNjRCaXRyYXRlLDFlNSw1MDAwMDAwMCksaDI2NEZwczpHMygkLmgyNjRGcHMsSi5oMjY0RnBzLDEsMTQwKX19ZnVuY3Rpb24gcTUoJCl7cmV0dXJue21qcGVnRnBzOiQubWpwZWdGcHMsbWpwZWdRdWFsaXR5OiQubWpwZWdRdWFsaXR5LG1heERpbWVuc2lvbjokLm1heERpbWVuc2lvbixoMjY0Qml0cmF0ZTokLmgyNjRCaXRyYXRlLGgyNjRGcHM6JC5oMjY0RnBzfX1mdW5jdGlvbiBfNygkKXtyZXR1cm4gJD8udHJhbnNwb3J0PT09IndlYnJ0YyJ9ZnVuY3Rpb24gRDcoJCl7bGV0IEo9JD97bWpwZWdGcHM6JC5tanBlZ0ZwcyxtanBlZ1F1YWxpdHk6JC5tanBlZ1F1YWxpdHksbWF4RGltZW5zaW9uOiQubWF4RGltZW5zaW9uLGgyNjRCaXRyYXRlOiQuaDI2NEJpdHJhdGUsaDI2NEZwczokLmgyNjRGcHN9Ont9O2lmKCQ/LnRyYW5zcG9ydD09PSJ3ZWJydGMiKXJldHVybiBEOCh7dHJhbnNwb3J0OiJ3ZWJydGMiLHdlYlJ0Y0NvZGVjOiQuY29kZWMsaWNlU2VydmVyczokLmljZVNlcnZlcnMsLi4uSn0pO3JldHVybiBEOCh7dHJhbnNwb3J0OiJodHRwIixodHRwQ29kZWM6JD8uY29kZWM/PyJhdXRvIiwuLi5KfSl9ZnVuY3Rpb24gVjMoJCxKKXtyZXR1cm4gRDgoey4uLiQsLi4uSn0sJCl9ZnVuY3Rpb24gUDcoJCxKLFE9ITEpe2lmKCFRKXJldHVybiBWMygkLEopO2xldCBYPXt9O2lmKEoud2ViUnRjQ29kZWMhPT12b2lkIDApWC53ZWJSdGNDb2RlYz1KLndlYlJ0Y0NvZGVjO2lmKEouaWNlU2VydmVycyE9PXZvaWQgMClYLmljZVNlcnZlcnM9Si5pY2VTZXJ2ZXJzO2lmKE9iamVjdC5rZXlzKFgpLmxlbmd0aD09PTApcmV0dXJuICQ7cmV0dXJuIFYzKCQsey4uLlgsdHJhbnNwb3J0OiJ3ZWJydGMifSl9ZnVuY3Rpb24gRzUoJCxKKXtsZXQgUT1xNSgkKSxYPVk1KHsuLi5RLC4uLkp9LFEpO2lmKFgubWpwZWdGcHM9PT1RLm1qcGVnRnBzJiZYLm1qcGVnUXVhbGl0eT09PVEubWpwZWdRdWFsaXR5JiZYLm1heERpbWVuc2lvbj09PVEubWF4RGltZW5zaW9uJiZYLmgyNjRCaXRyYXRlPT09US5oMjY0Qml0cmF0ZSYmWC5oMjY0RnBzPT09US5oMjY0RnBzKXJldHVybiAkO3JldHVybnsuLi4kLC4uLlh9fXZhciBJNz0ic2VydmUtc2ltOmNvZGVjIixIWD0zMDAwO2Z1bmN0aW9uIFQ3KCQpe2xldCBKPUQ3KCQpO2lmKEoudHJhbnNwb3J0IT09Imh0dHAifHxKLmh0dHBDb2RlYyE9PSJhdXRvIilyZXR1cm4gSjt0cnl7bGV0IFE9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEk3KTtpZihRPT09ImF1dG8ifHxRPT09Im1qcGVnInx8UT09PSJoMjY0IilyZXR1cm4gVjMoSix7aHR0cENvZGVjOlF9KX1jYXRjaHt9cmV0dXJuIEp9ZnVuY3Rpb24gRTcoe2RldmljZTokLGVuZHBvaW50OkosaW5pdGlhbFNldHRpbmdzOlF9KXtsZXQgWD1fNyhRKSxbSyxZXT1rKCgpPT5UNyhRKSksW3EsR109ayghMSksQj1UKEspLE49VCghMSksej1UKDApLFY9VChudWxsKSxIPVQobnVsbCk7eSgoKT0+eysrei5jdXJyZW50O2xldCBMPVQ3KFEpO2lmKFYuY3VycmVudD8uYWJvcnQoKSxILmN1cnJlbnQ/LmFib3J0KCksVi5jdXJyZW50PW51bGwsSC5jdXJyZW50PW51bGwsQi5jdXJyZW50PUwsTi5jdXJyZW50PSExLFkoTCksRyghMSksIUopcmV0dXJuO2xldCBVPSExLEY9ITEsVz1hc3luYygpPT57aWYoVXx8Ti5jdXJyZW50fHxWLmN1cnJlbnQpcmV0dXJuO2xldCB4PSsrei5jdXJyZW50LEQ9bmV3IEFib3J0Q29udHJvbGxlcjtWLmN1cnJlbnQ9RDt0cnl7bGV0IG49YXdhaXQgZmV0Y2goSix7Y2FjaGU6Im5vLXN0b3JlIixzaWduYWw6RC5zaWduYWx9KTtpZighbi5vayl0aHJvdyBFcnJvcihgU3RyZWFtIHNldHRpbmdzIHJlcXVlc3QgZmFpbGVkICgke24uc3RhdHVzfSlgKTtsZXQgUj1ZNShhd2FpdCBuLmpzb24oKSxxNShCLmN1cnJlbnQpKTtpZighRC5zaWduYWwuYWJvcnRlZCYmei5jdXJyZW50PT09eCl7bGV0IGQ9Qi5jdXJyZW50LGk9RzUoZCxSKTtpZihpIT09ZClCLmN1cnJlbnQ9aSxZKGkpfUY9ITF9Y2F0Y2gobil7aWYoIUQuc2lnbmFsLmFib3J0ZWQmJiFGKUY9ITAsY29uc29sZS53YXJuKCJGYWlsZWQgdG8gbG9hZCBzdHJlYW0gc2V0dGluZ3MiLG4pfWZpbmFsbHl7aWYoVi5jdXJyZW50PT09RClWLmN1cnJlbnQ9bnVsbH19O1coKTtsZXQgRT0oKT0+e2lmKHR5cGVvZiBkb2N1bWVudD4idSJ8fGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSE9PSJoaWRkZW4iKVcoKX0sUD1zZXRJbnRlcnZhbChFLEhYKTtpZih0eXBlb2Ygd2luZG93PCJ1Iil3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLEUpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsRSk7cmV0dXJuKCk9PntpZihVPSEwLGNsZWFySW50ZXJ2YWwoUCksdHlwZW9mIHdpbmRvdzwidSIpd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixFKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEUpO1YuY3VycmVudD8uYWJvcnQoKSxILmN1cnJlbnQ/LmFib3J0KCksVi5jdXJyZW50PW51bGwsSC5jdXJyZW50PW51bGx9fSxbJCxKLFFdKTtsZXQgQz13KChMKT0+e2lmKCFYJiZMLmh0dHBDb2RlYyE9PXZvaWQgMCl0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEk3LEwuaHR0cENvZGVjKX1jYXRjaHt9bGV0IFU9UDcoQi5jdXJyZW50LEwsWCk7aWYoVT09PUIuY3VycmVudClyZXR1cm47Qi5jdXJyZW50PVUsWShVKX0sW1hdKSxBPXcoKEwpPT57aWYoIUp8fE4uY3VycmVudHx8T2JqZWN0LmtleXMoTCkubGVuZ3RoPT09MClyZXR1cm47bGV0IFU9Qi5jdXJyZW50LEY9RzUoVSxMKTtCLmN1cnJlbnQ9RixZKEYpLFYuY3VycmVudD8uYWJvcnQoKSxWLmN1cnJlbnQ9bnVsbDtsZXQgVz0rK3ouY3VycmVudCxFPW5ldyBBYm9ydENvbnRyb2xsZXI7SC5jdXJyZW50PUUsTi5jdXJyZW50PSEwLEcoITApLGZldGNoKEose21ldGhvZDoiUEFUQ0giLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShMKSxzaWduYWw6RS5zaWduYWx9KS50aGVuKGFzeW5jKFApPT57aWYoIVAub2spdGhyb3cgRXJyb3IoYFN0cmVhbSBzZXR0aW5ncyB1cGRhdGUgZmFpbGVkICgke1Auc3RhdHVzfSlgKTtsZXQgeD1ZNShhd2FpdCBQLmpzb24oKSxxNShGKSk7aWYoIUUuc2lnbmFsLmFib3J0ZWQmJnouY3VycmVudD09PVcpe2xldCBEPUc1KEIuY3VycmVudCx4KTtCLmN1cnJlbnQ9RCxZKEQpfX0pLmNhdGNoKChQKT0+e2lmKEUuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2lmKGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHVwZGF0ZSBzdHJlYW0gc2V0dGluZ3MiLFApLHouY3VycmVudD09PVcpe2xldCB4PUc1KEIuY3VycmVudCxxNShVKSk7Qi5jdXJyZW50PXgsWSh4KX19KS5maW5hbGx5KCgpPT57aWYoSC5jdXJyZW50PT09RSlILmN1cnJlbnQ9bnVsbDtpZighRS5zaWduYWwuYWJvcnRlZCYmei5jdXJyZW50PT09VylOLmN1cnJlbnQ9ITEsRyghMSl9KX0sW0pdKTtyZXR1cm57c2V0dGluZ3M6Syx1cGRhdGVQbGF5YmFjazpDLHVwZGF0ZUVuY29kZXI6QSxwZW5kaW5nOnEsdHJhbnNwb3J0TG9ja2VkOlgsZW5jb2RlclNldHRpbmdzQXZhaWxhYmxlOiEhSn19dmFyIFA4PXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gdzcoJCxKKXtzd2l0Y2goSil7Y2FzZSJkZWNvZGVkLWZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UiZXJyb3IiOnJldHVybiAkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiBQOH19dmFyIGI3PTQwMDA7dmFyIFVYPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiB5NygkKXtyZXR1cm4gVVhbJF0/P251bGx9dmFyIFQ4PTMyMCxTNz03NjAsSTg9MzAwO2Z1bmN0aW9uIEU4KCQsSil7aWYoISQpcmV0dXJuIG51bGw7aWYoISQuZGV2aWNlKXJldHVybiAkO2lmKCEkLnByb3h5SGVscGVycylyZXR1cm4gJDtsZXQgWD1gJHskLmJhc2VQYXRoPT09Ii8iPyIiOigkLmJhc2VQYXRoPz8iIikucmVwbGFjZSgvXC8rJC8sIiIpfS9oZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJC5kZXZpY2UpfWAsSz1gJHtKLnByb3RvY29sfS8vJHtKLmhvc3R9YCxZPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiI7cmV0dXJuey4uLiQsdXJsOmAke0t9JHtYfWAsc3RyZWFtVXJsOmAke0t9JHtYfS9zdHJlYW0ubWpwZWdgLHdzVXJsOmAke1l9Ly8ke0ouaG9zdH0ke1h9L3dzYH19ZnVuY3Rpb24geDcoJCl7bGV0IEo9bmV3IFVSTFNlYXJjaFBhcmFtcygkLnNlYXJjaCkuZ2V0KCJsb2dzIik7aWYoSiE9PW51bGwpcmV0dXJuIEo9PT0iMSI7cmV0dXJuIEozKCQuaG9zdG5hbWUpfWZ1bmN0aW9uIGo3KCQsSil7bGV0IFE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEopKSxYPW5ldyBVaW50OEFycmF5KDErUS5sZW5ndGgpO3JldHVybiBYWzBdPSQsWC5zZXQoUSwxKSxYfWZ1bmN0aW9uIENYKCQsSixRPTMyKXtsZXQgWD1bLi4uJCxKXTtyZXR1cm4gWC5sZW5ndGg+UT9YLnNsaWNlKFgubGVuZ3RoLVEpOlh9ZnVuY3Rpb24gdzgoJCxKLFE9RGF0ZS5ub3coKSxYPTE1MDApe2xldCBLPUouZmlsdGVyKChZKT0+US1ZLmNyZWF0ZWRBdDw9WCk7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIEs7Zm9yKGxldCBZIG9mIEspJC5zZW5kKGo3KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiB2NygkLEosUSxYLEs9RGF0ZS5ub3coKSl7bGV0IFk9dzgoJCxKLEspO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQoajcoUSxYKS5idWZmZXIpLFk7cmV0dXJuIENYKFkse3RhZzpRLHBheWxvYWQ6WCxjcmVhdGVkQXQ6S30pfXZhciBPWD17aDI2NDpbImgyNjQiLCJ2cDgiLCJ2cDkiXSx2cDk6WyJ2cDkiLCJ2cDgiXSx2cDg6WyJ2cDgiXX07ZnVuY3Rpb24gRlgoJCxKKXtsZXQgUT1PWFskXSxYPVEuaW5kZXhPZihKKTtpZihYPT09LTEpcmV0dXJuIFFbMF0/P251bGw7cmV0dXJuIFFbWCsxXT8/bnVsbH1mdW5jdGlvbiBSNygkLEosUSl7aWYoUS5raW5kPT09InBlcm1hbmVudCIpcmV0dXJue3R5cGU6InN3aXRjaC10by1odHRwIn07aWYoUS5jb2RlYyE9PUopcmV0dXJuIG51bGw7bGV0IFg9RlgoJCxKKTtyZXR1cm4gWCYmWCE9PUo/e3R5cGU6InJldHJ5LWNvZGVjIixjb2RlYzpYfTp7dHlwZToic3dpdGNoLXRvLWh0dHAifX1mdW5jdGlvbiBoNygkKXtyZXR1cm4gJD9gJHskLmRldmljZX06JHskLnBpZH06JHskLnN0cmVhbVVybH06JHskLndzVXJsfToke0pTT04uc3RyaW5naWZ5KCQuc3RyZWFtU2V0dGluZ3M/P251bGwpfWA6IiJ9ZnVuY3Rpb24gQVgoKXtsZXRbJCxKXT1rKCgpPT5FOChhMih3aW5kb3cuX19TSU1fUFJFVklFV19fKSx3aW5kb3cubG9jYXRpb24pKSxbUSxYXT1rKCExKSxbSyxZXT1rKCgpPT57bGV0IGc9YTIod2luZG93Ll9fU0lNX1BSRVZJRVdfXyk7aWYoZylyZXR1cm4gZy5kZXZpY2U7cmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKX0pLFtxLEddPWsoITEpLFtCLE5dPWsoITEpLFt6LFZdPWsoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PUk4KzUyMH0pLHt3aWR0aDpILG9uUG9pbnRlckRvd246Q309cTMoInNlcnZlLXNpbTpkZXZpY2Utc2lkZWJhci13aWR0aCIsSTgsMjQwLDY0MCwicmlnaHQiKSxbQSxMXT1rKG51bGwpLFU9d2luZG93Ll9fU0lNX1BSRVZJRVdfXyxGPVU/LmdyaWRDYXRhbG9nRW5kcG9pbnQ/P2IxKCJncmlkL2FwaS9jYXRhbG9nIiksVz1VPy5ncmlkU3RhdHVzRW5kcG9pbnQ/P2IxKCJncmlkL2FwaS9zdGF0dXMiKSxFPVU/LmdyaWRTdGF0dXNFdmVudHNFbmRwb2ludD8/YjEoImdyaWQvYXBpL3N0YXR1cy9ldmVudHMiKSxQPVU/LmdyaWRTdGFydEVuZHBvaW50Pz9iMSgiZ3JpZC9hcGkvc3RhcnQiKSx4PVU/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9iMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbRCxuXT1rKHt9KSxbUixkXT1rKHt9KSxbaSxyXT1rKHt9KSx7ZGV2aWNlczpvLHRvdGFsOmEsbG9hZE1vcmU6TDEsbG9hZEFsbDpsLHJlc2V0UGFnZTptLGhhc01vcmU6WDF9PU03KEYsRSwhMCxLKSxaMT0hIShLJiZvPy5maW5kKChnKT0+Zy5kZXZpY2U9PT1LKT8uaGVscGVyKSxIMT13KChnKT0+e1koZyk7dHJ5e2xldCB2PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3Yuc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixnKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIix2LnRvU3RyaW5nKCkpfWNhdGNoe319LFtdKSx0PXcoYXN5bmMoZyx2PTIwMDAwKT0+e2xldCBZMT1EYXRlLm5vdygpK3Y7d2hpbGUoRGF0ZS5ub3coKTxZMSl7dHJ5e2xldCBHMT1uZXcgVVJMKFcsd2luZG93LmxvY2F0aW9uLmhyZWYpO2lmKEcxLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsZyksKChhd2FpdChhd2FpdCBmZXRjaChHMSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLnN0YXR1c2VzPz9bXSkuc29tZSgoVDEpPT5UMS5kZXZpY2U9PT1nJiZUMS5oZWxwZXIpKXJldHVybiEwfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoRzEpPT5zZXRUaW1lb3V0KEcxLDQwMCkpfXJldHVybiExfSxbV10pLFExPXcoYXN5bmMoZyk9PntuKCh2KT0+KHsuLi52LFtnXTohMH0pKSxyKCh2KT0+KHsuLi52LFtnXTpudWxsfSkpO3RyeXtsZXQgdj1hd2FpdCBmZXRjaChQLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpnfSl9KSxZMT1hd2FpdCB2Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXYub2t8fCFZMS5vayl7cigoRzEpPT4oey4uLkcxLFtnXTpZMS5lcnJvcj8/YEhUVFAgJHt2LnN0YXR1c31gfSkpO3JldHVybn1hd2FpdCB0KGcpfWNhdGNoKHYpe3IoKFkxKT0+KHsuLi5ZMSxbZ106dj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e24oKHYpPT4oey4uLnYsW2ddOiExfSkpfX0sW1AsdF0pLHExPXcoYXN5bmMoZyk9PntkKCh2KT0+KHsuLi52LFtnXTohMH0pKSxyKCh2KT0+KHsuLi52LFtnXTpudWxsfSkpO3RyeXtsZXQgdj1hd2FpdCBmZXRjaCh4LHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpnfSl9KSxZMT1hd2FpdCB2Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXYub2t8fCFZMS5vaylyKChHMSk9Pih7Li4uRzEsW2ddOlkxLmVycm9yPz9gSFRUUCAke3Yuc3RhdHVzfWB9KSl9Y2F0Y2godil7cigoWTEpPT4oey4uLlkxLFtnXTp2Py5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7ZCgodik9Pih7Li4udixbZ106ITF9KSl9fSxbeF0pO3koKCk9PntpZihLKXJldHVybjtpZigkPy5kZXZpY2Upe1koJC5kZXZpY2UpO3JldHVybn1pZighb3x8by5sZW5ndGg9PT0wKXJldHVybjtsZXQgZz1vLmZpbmQoKHYpPT52LmhlbHBlcik/P28uZmluZCgodik9PnYuc3RhdGU9PT0iQm9vdGVkIik/P29bMF07aWYoZylZKGcuZGV2aWNlKX0sW0ssJD8uZGV2aWNlLG9dKSx5KCgpPT57bGV0IGc9YCR7YjEoImFwaS9ldmVudHMiKX0ke0s/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoSyl9YDoiIn1gLHY9KEcxKT0+e0ooKHcxKT0+e2lmKEcxPUU4KGEyKEcxKSx3aW5kb3cubG9jYXRpb24pLGg3KHcxKT09PWg3KEcxKSlyZXR1cm4gdzE7aWYoRzEpd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1HMTtlbHNlIGlmKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pe2xldHtiYXNlUGF0aDpXMSxleGVjVG9rZW46VDF9PXdpbmRvdy5fX1NJTV9QUkVWSUVXX187d2luZG93Ll9fU0lNX1BSRVZJRVdfXz17YmFzZVBhdGg6VzEsZXhlY1Rva2VuOlQxfX1yZXR1cm4gRzF9KX0sWTE9QTAoZyk7cmV0dXJuIFkxLm9ubWVzc2FnZT0oRzEpPT57dHJ5e3YoYTIoSlNPTi5wYXJzZShHMS5kYXRhKSkpfWNhdGNoe319LCgpPT5ZMS5jbG9zZSgpfSxbSyxaMV0pLHkoKCk9PntpZighJD8ubG9nc0VuZHBvaW50fHwheDcod2luZG93LmxvY2F0aW9uKSlyZXR1cm47bGV0IGc9QTAoJC5sb2dzRW5kcG9pbnQpLHY9bmV3IE1hcCxZMT1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIEcxKFQxKXtsZXQgXzE9di5nZXQoVDEpO2lmKCFfMSl7bGV0IFIxPTA7Zm9yKGxldCBNMT0wO00xPFQxLmxlbmd0aDtNMSsrKVIxPShSMTw8NSktUjErVDEuY2hhckNvZGVBdChNMSl8MDtfMT1ZMVtNYXRoLmFicyhSMSklWTEubGVuZ3RoXSx2LnNldChUMSxfMSl9cmV0dXJuIF8xfWxldCB3MT0iIixXMT0hMTtyZXR1cm4gZy5vbm1lc3NhZ2U9KFQxKT0+e3RyeXtsZXQgXzE9SlNPTi5wYXJzZShUMS5kYXRhKSxSMT1fMS5wcm9jZXNzSW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz9fMS5zZW5kZXJJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/PyIiLE0xPV8xLnN1YnN5c3RlbT8/IiIscjE9XzEuY2F0ZWdvcnk/PyIiLGoxPV8xLmV2ZW50TWVzc2FnZT8/IiI7aWYoIWoxKXJldHVybjtpZihSMSE9PXcxKXtpZihXMSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IGYxPUcxKFIxKTtjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGAlYyR7UjF9JHtNMT9gICVjJHtNMX0ke3IxPyI6IityMToiIn1gOiIifWAsYGNvbG9yOiR7ZjF9O2ZvbnQtd2VpZ2h0OmJvbGRgLC4uLk0xP1siY29sb3I6Izg4ODtmb250LXdlaWdodDpub3JtYWwiXTpbXSksVzE9ITAsdzE9UjF9bGV0IEYxPShfMS5tZXNzYWdlVHlwZT8/IiIpLnRvTG93ZXJDYXNlKCksTjE9TTEmJlIxPT09dzE/YCVjJHtyMXx8TTF9JWMgYDoiIixhMT1OMT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYoRjE9PT0iZmF1bHQifHxGMT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7TjF9JWMke2oxfWAsLi4uYTEsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKEYxPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHtOMX0lYyR7ajF9YCwuLi5hMSwiY29sb3I6IzYyNzJhNCIpO2Vsc2UgY29uc29sZS5sb2coYCR7TjF9JWMke2oxfWAsLi4uYTEsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKFcxKWNvbnNvbGUuZ3JvdXBFbmQoKTtnLmNsb3NlKCl9fSxbJD8ubG9nc0VuZHBvaW50XSk7bGV0IGo9Sz8/JD8uZGV2aWNlPz9udWxsLHA9bz8uZmluZCgoZyk9PmcuZGV2aWNlPT09aik/P251bGwsXz0hISQmJiQuZGV2aWNlPT09aixoO2lmKF8mJiQpaD1aKE1YLHtjb25maWc6JCxkZXZpY2VOYW1lOnA/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpwPy5ydW50aW1lPz9udWxsLGNocm9tZTpwPy5jaHJvbWU/P251bGwsYXhPdmVybGF5RW5hYmxlZDpxLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46QixzZXREZXZ0b29sc09wZW46TixncmlkT3Blbjp6LHNldEdyaWRPcGVuOlYsZ3JpZFBhbmVsV2lkdGg6SCxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6QSxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6TCxzdHJlYW1pbmc6USxzZXRTdHJlYW1pbmc6WH0pO2Vsc2V7bGV0IGc9ej9IKzM2OjI0O2g9WigiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OmcscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpwP1ooTTYse25hbWU6cC5uYW1lLHJ1bnRpbWU6cC5ydW50aW1lLGNocm9tZTpwLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OnAucGxhY2Vob2xkZXJBc3NldD8/bnVsbCxidXN5OiEhcC5oZWxwZXJ8fCEhRFtwLmRldmljZV0sYnVzeUxhYmVsOnAuaGVscGVyPyJDb25uZWN0aW5n4oCmIjoiU3RhcnRpbmfigKYiLGVycm9yOmlbcC5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PlExKHAuZGV2aWNlKX0pOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltaKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxaKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsWigiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggQGV4cG8vc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBaKEoxLHtjaGlsZHJlbjpbaCxaKFE0LHt9KSxaKFQ2LHtvcGVuOnosb25DbG9zZTooKT0+VighMSksd2lkdGg6SCxzaWRlOiJsZWZ0IixkZXZpY2VzOm8sdG90YWw6YSxoYXNNb3JlOlgxLG9uTG9hZE1vcmU6TDEsb25Mb2FkQWxsOmwsb25SZXNldFBhZ2U6bSxzZWxlY3RlZFVkaWQ6aixvblNlbGVjdDpIMSxzdGFydGluZzpELHNodXR0aW5nRG93bjpSLG9uU2h1dGRvd246cTF9KSxaKGw1LHtwYW5lbFdpZHRoOkgsdmlzaWJsZTp6LG9uUG9pbnRlckRvd246QyxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksWih6Nix7b3Blbjp6LG9uQ2xpY2s6KCk9PlYoITApfSldfSl9ZnVuY3Rpb24gTVgoe2NvbmZpZzokLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsY2hyb21lOlgsYXhPdmVybGF5RW5hYmxlZDpLLHNldEF4T3ZlcmxheUVuYWJsZWQ6WSxkZXZ0b29sc09wZW46cSxzZXREZXZ0b29sc09wZW46RyxncmlkT3BlbjpCLHNldEdyaWRPcGVuOk4sZ3JpZFBhbmVsV2lkdGg6eixzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6VixzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6SCxzdHJlYW1pbmc6QyxzZXRTdHJlYW1pbmc6QX0pe3koKCk9Pntkb2N1bWVudC50aXRsZT1KP2BTaW11bGF0b3IgLSAke0p9YDoiU2ltdWxhdG9yIFByZXZpZXcifSxbSl0pO2xldCBMPUUwKEopLFU9RjcoJC5kZXZ0b29sc0VuZHBvaW50Pz9iMSgiZGV2dG9vbHMiKSxxKTt5KCgpPT57aWYoIXEpcmV0dXJuO2lmKFYmJlUudGFyZ2V0cy5zb21lKChPKT0+Ty5pZD09PVYpKXJldHVybjtIKFUudGFyZ2V0cy5sZW5ndGg9PT0xP1UudGFyZ2V0c1swXS5pZDpudWxsKX0sW3EsVS50YXJnZXRzLFYsSF0pLHkoKCk9PntIKG51bGwpfSxbJC5kZXZpY2UsSF0pO2xldCBGPVk3KCksVz1FNyh7ZGV2aWNlOiQuZGV2aWNlLGVuZHBvaW50OiQuc3RyZWFtU2V0dGluZ3NFbmRwb2ludCxpbml0aWFsU2V0dGluZ3M6JC5zdHJlYW1TZXR0aW5nc30pLEU9Vy5zZXR0aW5ncyxQPVcudXBkYXRlUGxheWJhY2sseD1XLnRyYW5zcG9ydExvY2tlZCxEPUUudHJhbnNwb3J0PT09IndlYnJ0YyIsbj1UKG51bGwpLFI9RCxbZCxpXT1rKG51bGwpLHI9RS53ZWJSdGNDb2RlYyxvPWQ/P3IsYT1ONyh7b2ZmZXJVcmw6djUoJCksY2xvc2VVcmw6UTYoJCksZW5hYmxlZDpSLGNvZGVjOm8saWNlU2VydmVyczpFLmljZVNlcnZlcnN9KSxbTDEsbF09bzAodzcsUDgpLFttXT1rKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLFgxPUUuaHR0cENvZGVjPT09Im1qcGVnIixaMT0hUiYmIVgxJiZGLnN1cHBvcnRlZCYmIUwxLmZlbGxCYWNrJiYhbSxIMT1LNyhaMXx8Uj9udWxsOko2KCQpKTt5KCgpPT57QSghMSksbCgicmVzZXQiKSxpKG51bGwpfSxbJC5zdHJlYW1VcmwsQSxFLnRyYW5zcG9ydCxFLmh0dHBDb2RlYyxFLndlYlJ0Y0NvZGVjXSkseSgoKT0+e2lmKCFEfHwhYS5mYWlsdXJlKXJldHVybjtpZihuLmN1cnJlbnQ9PT1hLmZhaWx1cmUuc2Vzc2lvbklkKXJldHVybjtuLmN1cnJlbnQ9YS5mYWlsdXJlLnNlc3Npb25JZDtsZXQgTz1SNyhyLG8sYS5mYWlsdXJlKTtpZighTylyZXR1cm47aWYoTy50eXBlPT09InN3aXRjaC10by1odHRwIil7aWYoeClyZXR1cm47UCh7dHJhbnNwb3J0OiJodHRwIn0pO3JldHVybn1pKE8uY29kZWMpfSxbcixvLHgsUCxELGEuZmFpbHVyZV0pO2xldCB0PXgmJmEuZmFpbHVyZSYmIWEuZXJyb3I/IldlYlJUQyBzdHJlYW1pbmcgZmFpbGVkLiBIVFRQIGZhbGxiYWNrIGlzIGRpc2FibGVkIGZvciB0aGlzIHNlc3Npb24uIjpudWxsO3koKCk9PntpZighWjEpcmV0dXJuO2xldCBPPXNldFRpbWVvdXQoKCk9PmwoInRpbWVvdXQiKSxiNyk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChPKX0sW1oxLCQuc3RyZWFtVXJsXSk7bGV0W1ExLHExXT1rKG51bGwpLFtqLHBdPWsobnVsbCksXz1qLGg9UTE/P18/P04yKEwsSiksZz1QNShMLGgpLHY9ejIoTCxoKSxZMT1ENShoKSxHMT1HMihoKSx3MT1HMT9HMS53aWR0aC9HMS5oZWlnaHQ6MSxXMT1mMChoKSxUMT0hIVgmJiFXMSxfMT1UMT9YLmZyYW1lLndpZHRoL1guc2NyZWVuLndpZHRoOjEsUjE9dipfMSxNMT1UMT9YLmZyYW1lLndpZHRoL1guZnJhbWUuaGVpZ2h0OncxLHIxPVQxP2Ake1guZnJhbWUud2lkdGh9IC8gJHtYLmZyYW1lLmhlaWdodH1gOlkxLGoxPVQobnVsbCksRjE9VChbXSk7eSgoKT0+e2xldCBPPSExLE09bnVsbCxTPW51bGw7RjEuY3VycmVudD1bXTtsZXQgYj0oKT0+e2lmKE98fE0pcmV0dXJuO009c2V0VGltZW91dCgoKT0+e009bnVsbCxjKCl9LDEwMDApfSxjPSgpPT57bGV0ICQxPW5ldyBXZWJTb2NrZXQoJC53c1VybCk7JDEuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFM9JDEsajEuY3VycmVudD0kMSwkMS5vbm9wZW49KCk9PntGMS5jdXJyZW50PXc4KCQxLEYxLmN1cnJlbnQpfSwkMS5vbm1lc3NhZ2U9KFUxKT0+e2lmKCEoVTEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IEExPW5ldyBVaW50OEFycmF5KFUxLmRhdGEpO2lmKEExLmxlbmd0aDwxfHxBMVswXSE9PTEzMClyZXR1cm47dHJ5e2xldCBvMT1KU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShBMS5zdWJhcnJheSgxKSkpO2lmKG8xLndpZHRoPD0wfHxvMS5oZWlnaHQ8PTApcmV0dXJuO3AoKFowKT0+WjAmJlowLndpZHRoPT09bzEud2lkdGgmJlowLmhlaWdodD09PW8xLmhlaWdodCYmWjAub3JpZW50YXRpb249PT1vMS5vcmllbnRhdGlvbj9aMDpvMSl9Y2F0Y2h7fX0sJDEub25jbG9zZT0oKT0+e2lmKGoxLmN1cnJlbnQ9PT0kMSlqMS5jdXJyZW50PW51bGw7YigpfSwkMS5vbmVycm9yPSgpPT57JDEuY2xvc2UoKX19O3JldHVybiBjKCksKCk9PntpZihPPSEwLE0pY2xlYXJUaW1lb3V0KE0pO2lmKGoxLmN1cnJlbnQ9PT1TKWoxLmN1cnJlbnQ9bnVsbDtTPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgTjE9dygoTyxNKT0+e0YxLmN1cnJlbnQ9djcoajEuY3VycmVudCxGMS5jdXJyZW50LE8sTSl9LFtdKSxhMT13KChPKT0+TjEoMyxPKSxbTjFdKSxmMT13KChPKT0+TjEoNSxPKSxbTjFdKSxpMT13KChPKT0+TjEoNCx7YnV0dG9uOk99KSxbTjFdKSx0MT13KCh7cGhhc2U6TyxidXR0b246TX0pPT57aWYoTS51c2FnZVBhZ2U9PW51bGx8fE0udXNhZ2U9PW51bGwpcmV0dXJuO04xKDQse2J1dHRvbjpNLm5hbWUscGFnZTpNLnVzYWdlUGFnZSx1c2FnZTpNLnVzYWdlLHBoYXNlOk99KX0sW04xXSkscTA9dygoTyk9Pk4xKDEwLHtkZWx0YTpPfSksW04xXSksRzA9dygoTyk9Pk4xKDExLE8pLFtOMV0pLGwwPXcoKE8pPT57cTEoKE0pPT5NJiZNLndpZHRoPT09Ty53aWR0aCYmTS5oZWlnaHQ9PT1PLmhlaWdodCYmTS5vcmllbnRhdGlvbj09PU8ub3JpZW50YXRpb24/TTpPKX0sW10pLHYxPXcoKE8pPT57TjEoNyx7b3JpZW50YXRpb246T30pfSxbTjFdKSxWMD1oLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiLEowPUwhPT0id2F0Y2giJiZMIT09InZpc2lvbiIsUDA9dygoTyk9PntpZighSjApcmV0dXJuO2xldCBNPShPPT09ImxlZnQiP3kyOnkzKVtWMF07djEoTSl9LFtKMCxWMCx2MV0pO3koKCk9PntxMShudWxsKSxwKG51bGwpfSxbJC5zdHJlYW1VcmxdKSx5KCgpPT57bGV0IE89XztpZighTylyZXR1cm47cTEoKE0pPT5NJiZNLndpZHRoPT09Ty53aWR0aCYmTS5oZWlnaHQ9PT1PLmhlaWdodCYmTS5vcmllbnRhdGlvbj09PU8ub3JpZW50YXRpb24/TTpudWxsKX0sW18sXz8ud2lkdGgsXz8uaGVpZ2h0LF8/Lm9yaWVudGF0aW9uXSk7bGV0IG0xPXcoKE8sTSk9PntOMSg2LHt0eXBlOk8sdXNhZ2U6TX0pfSxbTjFdKSxbZTEsUjBdPWsobnVsbCksW3kxLEIwXT1rKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7bGV0IE89TnVtYmVyKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIikpLE09TnVtYmVyLmlzRmluaXRlKE8pJiZPPjA/TzpUODtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PU0rNDgwfSkse3dpZHRoOkgwLG9uUG9pbnRlckRvd246RDF9PXEzKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLFQ4LDI0MCw3MjApLHt3aWR0aDpFMSxvblBvaW50ZXJEb3duOlEwfT1xMygic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixTNyw0MjAsMTQwMCksW04wLFUwXT1rKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbazAsSzFdPWsoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTt5KCgpPT57bGV0IE89KCk9PntVMCh3aW5kb3cuaW5uZXJXaWR0aCksSzEod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLE8pLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixPKX0sW10pLHkoKCk9PntsZXQgTz1BMCgkLmFwcFN0YXRlRW5kcG9pbnQ/P2IxKCJhcHBzdGF0ZSIpKSxNPW51bGw7cmV0dXJuIE8ub25tZXNzYWdlPShTKT0+e3RyeXtsZXQgYj1KU09OLnBhcnNlKFMuZGF0YSk7aWYoTSljbGVhclRpbWVvdXQoTSk7bGV0IGM9Yj8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtNPXNldFRpbWVvdXQoKCk9PlIwKGIpLGMpfWNhdGNoe319LCgpPT57aWYoTSljbGVhclRpbWVvdXQoTSk7Ty5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBJPXcoYXN5bmMoKT0+e20xKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKE0pPT5zZXRUaW1lb3V0KE0sMzApKSxtMSgidXAiLDIxKX0sW20xXSksdT1UKG51bGwpLFtzLEMxXT1rKDApLFtWMSxCMV09aygwKTt5KCgpPT57bGV0IE89dS5jdXJyZW50O2lmKCFPfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgTT1uZXcgUmVzaXplT2JzZXJ2ZXIoKFMpPT57bGV0IGI9U1swXT8uY29udGVudFJlY3Q7QzEoYj8ud2lkdGg/PzApLEIxKGI/LmhlaWdodD8/MCl9KTtyZXR1cm4gTS5vYnNlcnZlKE8pLCgpPT5NLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtoMSxsMV09ayghMCkscDE9VCghMCk7cDEuY3VycmVudD1oMTtsZXQgQzA9VChuZXcgU2V0KTt5KCgpPT57bGV0IE89KE0pPT57bGV0IFM9ISF1LmN1cnJlbnQ/LmNvbnRhaW5zKE0udGFyZ2V0KTtsMShTKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixPLCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLE8sITApfSxbXSkseSgoKT0+e2lmKGgxKXJldHVybjtsZXQgTz1DMC5jdXJyZW50O2lmKE8uc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgTSBvZiBPKU4xKDYse3R5cGU6InVwIix1c2FnZTpNfSk7Ty5jbGVhcigpfSxbaDEsTjFdKSx5KCgpPT57bGV0IE89KGIsYyk9PntpZighcDEuY3VycmVudClyZXR1cm47aWYoYi5jb2RlPT09IktleUgiJiZiLm1ldGFLZXkmJmIuc2hpZnRLZXkpe2lmKGIucHJldmVudERlZmF1bHQoKSxjPT09ImRvd24iJiYhYi5yZXBlYXQpTjEoNCx7YnV0dG9uOiJob21lIn0pO3JldHVybn1pZigoYi5jb2RlPT09IkFycm93TGVmdCJ8fGIuY29kZT09PSJBcnJvd1JpZ2h0IikmJmIubWV0YUtleSYmIWIuc2hpZnRLZXkmJiFiLmFsdEtleSYmIWIuY3RybEtleSl7aWYoYi5wcmV2ZW50RGVmYXVsdCgpLGM9PT0iZG93biImJiFiLnJlcGVhdClQMChiLmNvZGU9PT0iQXJyb3dMZWZ0Ij8ibGVmdCI6InJpZ2h0Iik7cmV0dXJufWlmKGIuY29kZT09PSJLZXlBIiYmYi5tZXRhS2V5JiZiLnNoaWZ0S2V5KXtpZihiLnByZXZlbnREZWZhdWx0KCksYz09PSJkb3duIiYmIWIucmVwZWF0KUkxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKFUxKT0+e2xldCBBMT1VMS5zdGRvdXQudHJpbSgpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiO3JldHVybiBJMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2UgJHtBMX1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWlmKGIuY29kZT09PSJLZXlLIiYmYi5tZXRhS2V5JiYhYi5zaGlmdEtleSYmIWIuYWx0S2V5JiYhYi5jdHJsS2V5KXtpZihiLnByZXZlbnREZWZhdWx0KCksYz09PSJkb3duIiYmIWIucmVwZWF0KU4xKDEyLHt9KTtyZXR1cm59bGV0ICQxPXk3KGIuY29kZSk7aWYoJDE9PW51bGwpcmV0dXJuO2lmKGIucHJldmVudERlZmF1bHQoKSxjPT09ImRvd24iKUMwLmN1cnJlbnQuYWRkKCQxKTtlbHNlIEMwLmN1cnJlbnQuZGVsZXRlKCQxKTtOMSg2LHt0eXBlOmMsdXNhZ2U6JDF9KX0sTT0oYik9Pk8oYiwiZG93biIpLFM9KGIpPT5PKGIsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLFMpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE0pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsUyl9fSxbTjEsJC5kZXZpY2UsUDBdKTtsZXQgbjE9TzcoKSxXMD1INygkLmRldmljZSksejA9Wjcoe2V4ZWM6STEsdWRpZDokLmRldmljZSxlbmFibGVkOkMsb25VcGxvYWRTdGFydDpuMS5hZGQsb25VcGxvYWRQcm9ncmVzczpuMS5zZXRQcm9ncmVzcyxvblVwbG9hZEVuZDooTyxNLFMpPT5uMS51cGRhdGUoTyx7c3RhdHVzOk0/InN1Y2Nlc3MiOiJlcnJvciIsbWVzc2FnZTpTfSksb25VbnN1cHBvcnRlZDooTyk9PntsZXQgTT1uMS5hZGQoTy5uYW1lLCJtZWRpYSIpO24xLnVwZGF0ZShNLHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHtPLnR5cGV8fGsyKE8pfWB9KX0sb25Ib3N0UGF0aERyb3A6VzAuZGlzbWlzc30pLFAxPUM3KHtkZWZhdWx0V2lkdGg6UjEsdmlld3BvcnRXaWR0aDpOMCx2aWV3cG9ydEhlaWdodDprMCxhc3BlY3RSYXRpbzpNMSxvblN0YXJ0OigpPT5sMSghMSl9KSxTMD0xMixfMD0yNCxRMj1zPjA/TWF0aC5taW4ocyxQMS53aWR0aCk6UDEud2lkdGgsRDI9KE8pPT57aWYoTzw9MClyZXR1cm4gMDtsZXQgTT1OMC1TMC1PLGI9TjAvMitRMi8yLShNLV8wKTtpZihiPD0wKXJldHVybiAwO2xldCBjPTIqYjtyZXR1cm4gYzw9TytfMD9jOjB9LGQwPUQyKHE/RTE6eTE/SDA6MCksTjM9RDIoQj96OjApO3JldHVybiBaKEI2LHtlbmRwb2ludDpLPyQ/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctcGFnZSBweS02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nTGVmdDoyNCtOMyxwYWRkaW5nUmlnaHQ6MjQrZDAsdHJhbnNpdGlvbjpQMS5pc1Jlc2l6aW5nfHxQMS5pc0luZXJ0aWE/Im5vbmUiOnc2fSxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6UDEud2lkdGgsdHJhbnNpdGlvbjpQMS5pc1Jlc2l6aW5nfHxQMS5pc0luZXJ0aWE/JDg6Sjh9LGNoaWxkcmVuOltaKGMxLHtleGVjOkkxLG9uUm90YXRlOnYxLG9yaWVudGF0aW9uOmgub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpDLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIHN0YXR1cyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltaKGMxLlRpdGxlLHtvbkNsaWNrOigpPT5OKChPKT0+IU8pLCJhcmlhLWxhYmVsIjoiVG9nZ2xlIHNpbXVsYXRvcnMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6Qix0aXRsZToiU2ltdWxhdG9ycyIsaGlkZVN1YnRpdGxlOiEwLGhpZGVDaGV2cm9uOiEwLHN0eWxlOnttYXhXaWR0aDoibWluKDIzMHB4LCBjYWxjKDEwMHZ3IC0gMTcwcHgpKSJ9fSksWihLNCx7c3RyZWFtaW5nOkN9KV19KSxaKCJkaXYiLHtyZWY6dSxjbGFzc05hbWU6InJlbGF0aXZlIG1heC1oLWZ1bGwiLHN0eWxlOnt3aWR0aDpQMS53aWR0aCxhc3BlY3RSYXRpbzpyMSx0cmFuc2l0aW9uOlAxLmlzUmVzaXppbmd8fFAxLmlzSW5lcnRpYT8kODpKOCx3aWxsQ2hhbmdlOlAxLmlzUmVzaXppbmd8fFAxLmlzSW5lcnRpYT8id2lkdGgiOnZvaWQgMH0sLi4uejAuZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbKCgpPT57bGV0IE89WihfNSx7dXJsOiQudXJsLHdzVXJsOiQud3NVcmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czpQMS5pc1Jlc2l6aW5nfHxQMS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOlQxPzA6Zyxjb3JuZXJTaGFwZTpUMT92b2lkIDA6InN1cGVyZWxsaXBzZSgxLjMpIiwuLi5UMT97fTp7Ym94U2hhZG93OiJpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIn19LGhpZGVDb250cm9sczohMCxvblN0cmVhbWluZ0NoYW5nZTpBLG9uU3RyZWFtVG91Y2g6YTEsb25TdHJlYW1NdWx0aVRvdWNoOmYxLG9uU3RyZWFtQnV0dG9uOmkxLG9uU3RyZWFtRGlnaXRhbENyb3duOnEwLG9uU3RyZWFtU2Nyb2xsOkcwLHN0cmVhbU1vZGU6Uj8id2VicnRjIjpaMT8iYXZjYyI6Im1qcGVnIix3ZWJSdGNTdHJlYW06YS5zdHJlYW0sb25XZWJSdGNGcmFtZTphLm1hcmtGcmFtZURlY29kZWQsc3RyZWFtRXJyb3I6Uj9hLmVycm9yPz90Om51bGwsb25BdmNjRXJyb3I6KCk9PmwoImVycm9yIiksb25BdmNjRGVjb2RlZEZyYW1lOigpPT5sKCJkZWNvZGVkLWZyYW1lIiksc3Vic2NyaWJlRnJhbWU6WjE/dm9pZCAwOkgxLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOloxP3ZvaWQgMDpIMS5mcmFtZSxzdHJlYW1Db25maWc6aCxlbmFibGVEaWdpdGFsQ3Jvd246TD09PSJ3YXRjaCIsb25TY3JlZW5Db25maWdDaGFuZ2U6bDB9KSxNPVooSjEse2NoaWxkcmVuOltPLEsmJlooVjYse30pXX0pO2lmKCFUMSlyZXR1cm4gTTtyZXR1cm4gWihwNSx7Y2hyb21lOlgsaW50ZXJhY3RpdmU6ITAsb25CdXR0b246dDEsb25Dcm93bldoZWVsOihTLGIpPT57bGV0IGM9UzIoUyxiLFYxfHwxKTtpZihjIT1udWxsKXEwKGMpfSxzY3JlZW46TX0pfSkoKSx6MC5pc0RyYWdPdmVyJiZaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpUMT92b2lkIDA6Z30sY2hpbGRyZW46W1oobzIse3NpemU6MzIsc3Ryb2tlV2lkdGg6MS41fSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSksWihzNix7c2ltdWxhdG9yUmVzaXplOlAxLGRldmljZVR5cGU6TCxzdHJlYW1Db25maWc6aCxjb250YWluZXJXaWR0aDpzfHxQMS53aWR0aCxjb250YWluZXJIZWlnaHQ6VjF8fChNMT4wP1AxLndpZHRoL00xOjApfSksWihYNCx7d2lkdGg6c3x8UDEud2lkdGgsaGVpZ2h0OlYxfHwoTTE+MD9QMS53aWR0aC9NMTowKSx2aXNpYmxlOlAxLmlzUmVzaXppbmd8fFAxLmlzSW5lcnRpYX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIG1heC13LWZ1bGwiLGNoaWxkcmVuOltaKGMxLHtleGVjOkkxLG9uUm90YXRlOnYxLG9yaWVudGF0aW9uOmgub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpDLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIGFjdGlvbnMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlclJhZGl1czoxOH0sY2hpbGRyZW46WihjMS5BY3Rpb25zLHtjaGlsZHJlbjpbZTE/LmlzUmVhY3ROYXRpdmUmJlooYzEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6IlJlbG9hZCBSZWFjdCBOYXRpdmUgYnVuZGxlIix0aXRsZToiUmVsb2FkIChSKSIsb25DbGljazooKT0+dm9pZCBJKCksY2hpbGRyZW46WihhMCx7fSl9KSxaKGMxLkhvbWVCdXR0b24se3RpdGxlOiJIb21lIn0pLFooYzEuU2NyZWVuc2hvdEJ1dHRvbix7dGl0bGU6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KE8pPT57Ty5wcmV2ZW50RGVmYXVsdCgpLFcwLmNhcHR1cmUoKX19KSxaKGMxLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSl9KSxaKGMxLHtleGVjOkkxLG9uUm90YXRlOnYxLG9yaWVudGF0aW9uOmgub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpDLCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46WihONix7b3ZlcmxheUVuYWJsZWQ6SyxzdHJlYW1pbmc6QyxvblRvZ2dsZU92ZXJsYXk6KCk9PlkoKE8pPT4hTyl9KX0pXX0pXX0pLFooImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gYmFja2Ryb3AtYmx1ci1bMTJweF0gWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gei00MCAke3kxfHxxPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W1ooImJ1dHRvbiIse29uQ2xpY2s6KCk9PntHKCExKSxCMCgoTyk9PiFPKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiB0b29scyBwYW5lbCIsImFyaWEtcHJlc3NlZCI6eTEsdGl0bGU6IlRvb2xzIixjaGlsZHJlbjpaKGwyLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFooImJ1dHRvbiIse29uQ2xpY2s6KCk9PntCMCghMSksRygoTyk9PiFPKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOnEsdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46WihwMix7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KV19KSxaKGE0LHtvcGVuOnkxLG9uQ2xvc2U6KCk9PkIwKCExKSx1ZGlkOiQuZGV2aWNlLGRldmljZVJ1bnRpbWU6USxjdXJyZW50QXBwOmUxLGV2ZW50TG9nRXZlbnRzRW5kcG9pbnQ6JC5ldmVudExvZ0V2ZW50c0VuZHBvaW50LG1ldHJpY3NFbmRwb2ludDokLm1ldHJpY3NFbmRwb2ludCxheE92ZXJsYXlFbmFibGVkOkssb25Ub2dnbGVBeE92ZXJsYXk6KCk9PlkoKE8pPT4hTyksc3RyZWFtU2V0dGluZ3M6RSxvblN0cmVhbVBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6Vy51cGRhdGVQbGF5YmFjayxvblN0cmVhbUVuY29kZXJTZXR0aW5nc0NoYW5nZTpXLnVwZGF0ZUVuY29kZXIsYWN0aXZlQ29kZWM6Uj9gd2VicnRjLyR7b31gOloxPyJoMjY0IjoibWpwZWciLHBlZXJDb25uZWN0aW9uOmEucGVlckNvbm5lY3Rpb24sd2VicnRjU2Vzc2lvbklkOmEuc2Vzc2lvbklkLHdlYnJ0Y1N0YXRzVXJsOlo2KCQpLGF2Y2NTdXBwb3J0ZWQ6Ri5zdXBwb3J0ZWQsc3RyZWFtU2V0dGluZ3NQZW5kaW5nOlcucGVuZGluZ3x8IVcuZW5jb2RlclNldHRpbmdzQXZhaWxhYmxlLHN0cmVhbVRyYW5zcG9ydExvY2tlZDp4LHdpZHRoOkgwfSksWihsNSx7cGFuZWxXaWR0aDpIMCx2aXNpYmxlOnkxLG9uUG9pbnRlckRvd246RDEsYXJpYUxhYmVsOiJSZXNpemUgdG9vbHMgcGFuZWwifSksWihRNyx7b3BlbjpxLG9uQ2xvc2U6KCk9PkcoITEpLHVkaWQ6JC5kZXZpY2UsdGFyZ2V0czpVLnRhcmdldHMsc2VsZWN0ZWRUYXJnZXRJZDpWLG9uU2VsZWN0VGFyZ2V0OkgsbG9hZGluZzpVLmxvYWRpbmcsZXJyb3I6VS5lcnJvcixvblJlZnJlc2g6KCk9PnZvaWQgVS5yZWZyZXNoKCksd2lkdGg6RTF9KSxaKGw1LHtwYW5lbFdpZHRoOkUxLHZpc2libGU6cSxvblBvaW50ZXJEb3duOlEwLGFyaWFMYWJlbDoiUmVzaXplIFdlYktpdCBEZXZUb29scyBwYW5lbCJ9KV19KX0pfUM5KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihaKEFYLHt9KSk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==","base64").toString("utf-8");return D8}function B5($){let Q=[$.name,$.runtime,$.deviceTypeIdentifier??""].join("\x00"),Z=_5.get($.udid);if(Z?.signature===Q)return Z.device;let J={device:$.udid,name:$.name,runtime:$.runtime,chrome:KQ($),placeholderAsset:WQ($)};return _5.set($.udid,{signature:Q,device:J}),J}function eX($,Q,Z){let J=bX(),Y=(W)=>{if(/iphone/i.test(W))return 0;if(/ipad/i.test(W))return 1;if(/watch/i.test(W))return 2;if(/(apple\s*tv|^tv\b)/i.test(W))return 3;if(/vision|reality/i.test(W))return 4;return 5},X=(W)=>{if(Q.has(W.udid))return 0;if(Z&&W.udid===Z)return 1;if(W.state==="Booted")return 2;if(W.udid===J)return 3;return 4},G=(W)=>{let K=W.match(/-(\d+)-(\d+)/),z=K?Number(K[1]):0,V=K?Number(K[2]):0;return-(z*1000+V)};return $.sort((W,K)=>X(W)-X(K)||Y(W.name)-Y(K.name)||W.name.localeCompare(K.name)||G(W.runtime)-G(K.runtime))}function $G(){return new Promise(($)=>{k0("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,G]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let W of G){if(W.isAvailable===!1)continue;Y.push({...W,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}async function C8($){let[Q,Z]=await Promise.all([M0(),$G()]),J=new Map(Q.map((Y)=>[Y.device,Y]));return{simulators:eX(Z,J,$),helperByUdid:J}}function R5($,Q,Z,J,Y){return $.map((X)=>{let G=Q.get(X.udid),W=G?g4(G,v4(Z),J,w$(Z),Y):null;return{device:X.udid,state:X.state,helper:W?{port:W.port,url:W.url,streamUrl:W.streamUrl,wsUrl:W.wsUrl}:null}})}function ZG(){try{let $=Number(h4("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(h4("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=h4("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let G=Z.match(X);return G?Number(G[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite($)?$:0,availableBytes:Y*(Number.isFinite(Q)?Q:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function JG(){try{let $=h4("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),Q={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of $.split(`
|
|
110
110
|
`)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let W=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(W))continue;let K=W*1024,z=G[1].toUpperCase();Q[z]=(Q[z]??0)+K,Z+=K}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function YG(){let{totalBytes:$,availableBytes:Q}=ZG(),Z=JG(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,X=Y>=268435456?"measured":"estimated",G=X==="measured"?Y:QG,W=G>0?Math.max(0,Math.floor(Q/G)):0;return{totalBytes:$,availableBytes:Q,runningSimulators:J,perSimAvgBytes:G,perSimSource:X,estimatedAdditional:W}}function q5($){if($==="auto"||$==="h264"||$==="mjpeg")return{transport:"http",codec:$};return}function XG($,Q){let Z=Buffer.from($),J=Buffer.from(Q);if(Z.length!==J.length)return!1;return PX(Z,J)}function GG($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function I5($,Q,Z,J=T5,Y=[],X=W4){if(!Z){Q.writeHead(404),Q.end("No serve-sim device");return}Q.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no",...P2($.headers.origin,Y)}),Q.write(`:
|
|
111
111
|
|
|
112
112
|
`);let G=X.subscribe(Z.device),{meta:W,unsubscribe:K}=J.subscribe(Z.device,(V)=>{if(!Q.writableEnded)Q.write("data: "+JSON.stringify(V)+`
|
|
@@ -158,7 +158,7 @@ ${R}`)}})();return}if(!j){M.destroy();return}let E=j.device??C;if(j.upstreamPath
|
|
|
158
158
|
\r
|
|
159
159
|
`);return}M.end(`HTTP/1.1 400 Bad Request\r
|
|
160
160
|
\r
|
|
161
|
-
`)};let H=async(N)=>{return AQ(V,N)},B=jQ({path:`${Z}/exec-ws`,execToken:W,ssePrefixes:[`${Z}/api/events`,`${Z}/api/event-log/events`,`${Z}/grid/api/status/events`,`${Z}/appstate`,`${Z}/logs`,`${Z}/metrics`,`${Z}/ax`],onUiRequest:z,onCommandResult:(N,M)=>V5(N,M),onSseRequest(N,M){let D=new URL(N,M.url);return H(new Request(D,{headers:{accept:"text/event-stream"}}))}});return H.handleWebSocket=(N,M)=>{if(B(N,M))return!0;if(C2(N,M,{helperProxyTarget:(D)=>A8(D,J),fallbackDevice:$?.device??null,resolveSession:(D)=>w4(D,Q)}))return!0;return!1},H.handleUpgrade=(N,M,D)=>{V.handleUpgrade?.(N,M,D)},H}var k$,G5,qX="854a02be78c7ffea104cb523636efa991bef5c5b",x$=9222,K5,T5,IX=1048576,l0=null,xX,SX,b4,M4,O8,mX="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",D8=null,_5,QG=1610612736;var S5=d(()=>{j2();N6();E2();w6();i2();h6();r4();U6();NQ();TQ();z6();DQ();k$=y$(F5(),"serve-sim"),K5=F2(),T5=D2(($)=>new F$({udid:$,deviceName:fX($)}));xX=new Set(["host.exp.Exponent","dev.expo.Exponent"]),SX=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"];b4={"Access-Control-Allow-Origin":"*","Cache-Control":"no-store"};M4={at:0,booted:null,names:new Map};O8={at:0,udid:null};_5=new Map});var M9=a8(L9(),1),{program:ZK,createCommand:JK,createArgument:YK,createOption:XK,CommanderError:GK,InvalidArgumentError:$4,InvalidOptionArgumentError:KK,Command:U9,Argument:WK,Option:zK,Help:VK}=M9.default;r4();import{execSync as Z0,spawn as k5}from"child_process";import{existsSync as
|
|
161
|
+
`)};let H=async(N)=>{return AQ(V,N)},B=jQ({path:`${Z}/exec-ws`,execToken:W,ssePrefixes:[`${Z}/api/events`,`${Z}/api/event-log/events`,`${Z}/grid/api/status/events`,`${Z}/appstate`,`${Z}/logs`,`${Z}/metrics`,`${Z}/ax`],onUiRequest:z,onCommandResult:(N,M)=>V5(N,M),onSseRequest(N,M){let D=new URL(N,M.url);return H(new Request(D,{headers:{accept:"text/event-stream"}}))}});return H.handleWebSocket=(N,M)=>{if(B(N,M))return!0;if(C2(N,M,{helperProxyTarget:(D)=>A8(D,J),fallbackDevice:$?.device??null,resolveSession:(D)=>w4(D,Q)}))return!0;return!1},H.handleUpgrade=(N,M,D)=>{V.handleUpgrade?.(N,M,D)},H}var k$,G5,qX="854a02be78c7ffea104cb523636efa991bef5c5b",x$=9222,K5,T5,IX=1048576,l0=null,xX,SX,b4,M4,O8,mX="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",D8=null,_5,QG=1610612736;var S5=d(()=>{j2();N6();E2();w6();i2();h6();r4();U6();NQ();TQ();z6();DQ();k$=y$(F5(),"serve-sim"),K5=F2(),T5=D2(($)=>new F$({udid:$,deviceName:fX($)}));xX=new Set(["host.exp.Exponent","dev.expo.Exponent"]),SX=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"];b4={"Access-Control-Allow-Origin":"*","Cache-Control":"no-store"};M4={at:0,booted:null,names:new Map};O8={at:0,udid:null};_5=new Map});var M9=a8(L9(),1),{program:ZK,createCommand:JK,createArgument:YK,createOption:XK,CommanderError:GK,InvalidArgumentError:$4,InvalidOptionArgumentError:KK,Command:U9,Argument:WK,Option:zK,Help:VK}=M9.default;r4();import{execSync as Z0,spawn as k5}from"child_process";import{existsSync as H0,mkdirSync as w8,openSync as k8,closeSync as y8,readSync as WG,readFileSync as o0,unlinkSync as i0,writeFileSync as y5}from"fs";import{createHash as zG}from"crypto";import{networkInterfaces as VG}from"os";import{join as B0,resolve as d0}from"path";function YZ(){let $={};for(let Y=0;Y<26;Y++){let X=4+Y;$[String.fromCharCode(97+Y)]={usage:X,shift:!1},$[String.fromCharCode(65+Y)]={usage:X,shift:!0}}let Q="1234567890",Z="!@#$%^&*()";for(let Y=0;Y<10;Y++){let X=30+Y;$[Q[Y]]={usage:X,shift:!1},$[Z[Y]]={usage:X,shift:!0}}let J=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[Y,X,G]of J)$[Y]={usage:G,shift:!1},$[X]={usage:G,shift:!0};return $[" "]={usage:44,shift:!1},$[`
|
|
162
162
|
`]={usage:40,shift:!1},$["\t"]={usage:43,shift:!1},$}var XZ=YZ();class t4 extends Error{char;constructor($){super(`Unsupported character: ${JSON.stringify($)}`);this.char=$}}async function _9($,Q,Z=4){return new Promise((J,Y)=>{let X=new WebSocket($);X.binaryType="arraybuffer",X.onopen=async()=>{try{for(let G of Q){let W=new TextEncoder().encode(JSON.stringify(G)),K=new Uint8Array(1+W.length);if(K[0]=6,K.set(W,1),X.send(K),Z>0)await new Promise((z)=>setTimeout(z,Z))}setTimeout(()=>{X.close(),J()},50)}catch(G){X.close(),Y(G)}},X.onerror=()=>{Y(Error(`WebSocket connection failed: ${$}`))}})}function B9($){let Q=[];for(let Z of $){if(Z==="\r")continue;let J=XZ[Z];if(!J)throw new t4(Z);if(J.shift)Q.push({type:"down",usage:225});if(Q.push({type:"down",usage:J.usage}),Q.push({type:"up",usage:J.usage}),J.shift)Q.push({type:"up",usage:225})}return Q}e4();e4();import{execSync as BZ}from"child_process";function RZ($){try{let Q=BZ(`lsof -ti tcp:${$} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!Q)return[];let Z=process.pid;return Q.split(`
|
|
163
163
|
`).map((J)=>parseInt(J,10)).filter((J)=>Number.isFinite(J)&&J!==Z)}catch{return[]}}function P9($){let Q=RZ($);if(Q.length===0)return;console.log(`\x1B[90mPort ${$} busy, killing listener pid(s): ${Q.join(", ")}\x1B[0m`);for(let Z of Q)try{process.kill(Z,"SIGKILL")}catch{}v0(100)}$$();import{appendFileSync as NZ}from"node:fs";var FZ=1000,jZ=5000,TZ=404;function I9({path:$,statsUrl:Q,fetchImpl:Z=fetch,now:J=()=>new Date().toISOString(),onError:Y=(X)=>console.error(X)}){let X=!1,G=new Set;return{sample:async(K)=>{if(G.has(K))return;G.add(K);let z;try{let V=await Z(Q(K),{signal:AbortSignal.timeout(jZ)});if(V.status===TZ)return;let H=V.ok?await V.json():null;z=JSON.stringify({at:J(),device:K,status:V.status,stats:H})}catch(V){z=JSON.stringify({at:J(),device:K,error:V instanceof Error?V.message:String(V)})}finally{G.delete(K)}try{NZ($,z+`
|
|
164
164
|
`)}catch(V){if(!X)X=!0,Y(`Could not write the stream debug log to ${$}: ${V instanceof Error?V.message:String(V)}`)}}}}function x9($,Q,Z=FZ){let J=setInterval(()=>{for(let Y of $)Q.sample(Y)},Z);return J.unref?.(),()=>clearInterval(J)}$$();import{execFileSync as Z4}from"child_process";import{chmodSync as OZ,existsSync as h0,mkdtempSync as AZ,rmSync as w9,writeFileSync as k9}from"fs";import{homedir as DZ,tmpdir as EZ}from"os";import{join as E0}from"path";var $6={camera:"kTCCServiceCamera",microphone:"kTCCServiceMicrophone",photos:"kTCCServicePhotos","photos-add":"kTCCServicePhotosAdd",contacts:"kTCCServiceAddressBook",calendar:"kTCCServiceCalendar",reminders:"kTCCServiceReminders",motion:"kTCCServiceMotion","media-library":"kTCCServiceMediaLibrary",siri:"kTCCServiceSiri",speech:"kTCCServiceSpeechRecognition",faceid:"kTCCServiceFaceID","user-tracking":"kTCCServiceUserTracking",homekit:"kTCCServiceWillow"},CZ={push:{permission:"notifications"},notification:{permission:"notifications"},"photo-library":{permission:"photos"},photo:{permission:"photos"},"location-always":{permission:"location",value:"always"},"location-in-use":{permission:"location",value:"inuse"},"location-inuse":{permission:"location",value:"inuse"},mic:{permission:"microphone"}};function y9($){if($==="notifications")return{kind:"notifications",values:["critical"]};if($==="location")return{kind:"location",values:["always","inuse","never"]};let Q=$6[$];if(Q)return{kind:"tcc",tccService:Q,tccAuthVersion:$==="photos"?2:1,values:$==="photos"?["limited"]:void 0};return null}function t$(){return["notifications","location",...Object.keys($6)]}var r$=/^[A-Za-z0-9][A-Za-z0-9.-]*$/;function PZ($){let Q,Z,J=[];for(let V=0;V<$.length;V++){let H=$[V];if(H===void 0)continue;if(H==="-d"||H==="--device"){if(Q=$[++V],!Q)return{error:"Missing value for -d/--device"}}else if(H==="--value"){if(Z=$[++V],Z===void 0)return{error:"Missing value for --value"}}else if(H.startsWith("--value="))Z=H.slice(8);else if(H.startsWith("-"))return{error:`Unknown flag: ${H}`};else J.push(H)}let Y=J[0];if(!Y)return{error:"Missing subcommand: grant | revoke | reset | list"};let X={grant:"grant",revoke:"revoke",deny:"revoke",reset:"reset",list:"list"}[Y];if(!X)return{error:`Unknown subcommand: ${Y}`};if(X==="list"){let V=J[1];if(V&&!r$.test(V))return{error:`Invalid bundle id: ${V}`};return{verb:X,bundleId:V,device:Q}}let G=J[1];if(!G)return{error:`Missing permission name for "${X}"`};if(X==="reset"&&G==="all"){let V=J[2];if(!V)return{error:"Missing bundle id for `reset all`"};if(!r$.test(V))return{error:`Invalid bundle id: ${V}`};return{verb:X,permission:"all",bundleId:V,device:Q}}let W=CZ[G];if(W){if(G=W.permission,W.value&&!Z)Z=W.value}let K=y9(G);if(!K)return{error:`Unknown permission: ${J[1]}
|
|
@@ -172,12 +172,12 @@ Usage:
|
|
|
172
172
|
serve-sim permissions reset <permission|all> <bundle-id> [-d <udid|name>]
|
|
173
173
|
serve-sim permissions list [bundle-id] [-d <udid|name>]
|
|
174
174
|
|
|
175
|
-
Permissions: ${t$().join(", ")}`),process.exit(1);let Y=J.device?t(J.device):X0();if(!Y)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(J.verb==="list"){let G={udid:Y,bundleId:J.bundleId??null,tcc:kZ(Y,J.bundleId),location:fZ(Y,J.bundleId),notifications:gZ(Y,J.bundleId)};console.log(JSON.stringify(G,null,Q?0:2)),process.exit(0)}let X=J.bundleId;try{if(J.permission==="all")for(let G of t$())S9(Y,"reset",G,void 0,X);else S9(Y,J.verb,J.permission,J.value,X)}catch(G){console.error(G?.message??String(G)),process.exit(1)}if(Q)console.log(JSON.stringify({udid:Y,verb:J.verb,permission:J.permission,value:J.value??null,bundleId:X}));else{let G=J.value?` (${J.value})`:"";console.log(`\uD83D\uDD10 ${J.verb} ${J.permission}${G} for ${X} on ${Y}`)}process.exit(0)}z6();U6();function Y2($,Q={}){let Z=new Date($.timestamp),J=Number.isNaN(Z.getTime())?$.timestamp:Z.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"}),Y=Q.deviceLabel??($.device?$.device.slice(0,8):null),X=$.status==="error"?" failed":"";return[J,Y,`${x1($)}${X?` (${X.trim()})`:""}`].filter(Boolean).join(" ")}function x1($){if($.kind==="tap"){let Q=G$($.details,"current")??G$($.details,"start");return Q?`Tap at ${_6(Q)}`:"Tap"}if($.kind==="drag"){let Q=G$($.details,"start"),Z=G$($.details,"current");if(Q&&Z)return`Drag from ${_6(Q)} to ${_6(Z)}`;return"Drag"}if($.kind==="key"){let Q=S1($.details,"key")??$.action??"key",Z=$.action==="down"?"down":$.action==="up"?"up":$.action;return Z?`Key ${Z} ${J2(Q)}`:`Key ${J2(Q)}`}if($.kind==="rotate"){let Q=$.action?X2($.action):"";return Q?`Rotate ${Q}`:"Rotate"}return k1($.msg??$.summary)}function G$($,Q){let Z=$?.[Q];if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let J=Z;return typeof J.x==="number"&&typeof J.y==="number"?{x:J.x,y:J.y}:null}function S1($,Q){let Z=$?.[Q];return typeof Z==="string"&&Z.length>0?Z:null}function _6($){return`${Z2($.x)}, ${Z2($.y)}`}function Z2($){if(!Number.isFinite($))return"?";return(Math.round((w1($,0,1)+Number.EPSILON)*100)/100).toFixed(2)}function w1($,Q,Z){return Math.min(Z,Math.max(Q,$))}function k1($){return $.replace(/\b[a-z]+(?:_[a-z]+)+\b/g,X2)}function X2($){return $.replace(/[-_]+/g," ")}function J2($){return{MetaLeft:"Left Command",MetaRight:"Right Command",AltLeft:"Left Option",AltRight:"Right Option",ControlLeft:"Left Control",ControlRight:"Right Control",ShiftLeft:"Left Shift",ShiftRight:"Right Shift",ArrowLeft:"Left Arrow",ArrowRight:"Right Arrow",ArrowUp:"Up Arrow",ArrowDown:"Down Arrow"}[$]??$}N6();P4();function O6($,Q){let Z=$.split(",").map((Y)=>Y.trim()).filter(Boolean),J=Q==="stun"?/^stuns?:/i:/^turns?:/i;if(Z.length===0||Z.length>16||Z.some((Y)=>Y.length>2048||!J.test(Y)))throw Error(`Expected one or more comma-separated ${Q.toUpperCase()} URLs`);return Z}function A6($,Q){let Z=$??{transport:"http"},J=Q??{transport:"http"};if(Z.transport!==J.transport)return!1;let Y=K4(Z),X=K4(J);if(Y.mjpegFps!==X.mjpegFps||Y.mjpegQuality!==X.mjpegQuality||Y.maxDimension!==X.maxDimension||Y.h264Bitrate!==X.h264Bitrate||Y.h264Fps!==X.h264Fps)return!1;if(Z.transport==="http"&&J.transport==="http")return(Z.codec??"auto")===(J.codec??"auto");if(Z.transport!=="webrtc"||J.transport!=="webrtc")return!1;if(Z.codec!==J.codec)return!1;let G=Z.iceServers??[],W=J.iceServers??[];if(G.length!==W.length)return!1;return G.every((K,z)=>{let V=W[z];return K.username===V.username&&K.credential===V.credential&&K.urls.length===V.urls.length&&K.urls.every((H,B)=>H===V.urls[B])})}function U2($,Q){let Z=[];for(let J of $??[])for(let Y of J.urls){let X=Y.toLowerCase();if(Q.some((G)=>X.startsWith(G)))Z.push(Y)}return Z}function c1($){for(let Q of $??[])if(Q.urls.some((Z)=>/^turns?:/i.test(Z)))return Q;return null}function p1($){if(!$)return[];let Q=[];if(Q.push("--transport",$.transport),$.transport==="http"){if($.codec)Q.push("--codec",$.codec)}else{Q.push("--webrtc-codec",$.codec);let Z=U2($.iceServers,["stun:","stuns:"]);if(Z.length)Q.push("--stun-url",Z.join(","));let J=U2($.iceServers,["turn:","turns:"]);if(J.length){Q.push("--turn-url",J.join(","));let Y=c1($.iceServers);if(Y?.username)Q.push("--turn-username",Y.username);if(Y?.credential)Q.push("--turn-credential",Y.credential)}}if($.mjpegFps!==void 0)Q.push("--mjpeg-fps",String($.mjpegFps));if($.mjpegQuality!==void 0)Q.push("--mjpeg-quality",String($.mjpegQuality));if($.maxDimension!==void 0)Q.push("--max-dimension",String($.maxDimension));if($.h264Bitrate!==void 0)Q.push("--video-bitrate",String($.h264Bitrate));if($.h264Fps!==void 0)Q.push("--video-fps",String($.h264Fps));return Q}function _2($,Q,Z,J){return[$,"--port",String(Q),"--host",Z,...p1(J)]}P4();var y0=s4(import.meta.url);function HG(){return"0.1.
|
|
175
|
+
Permissions: ${t$().join(", ")}`),process.exit(1);let Y=J.device?t(J.device):X0();if(!Y)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(J.verb==="list"){let G={udid:Y,bundleId:J.bundleId??null,tcc:kZ(Y,J.bundleId),location:fZ(Y,J.bundleId),notifications:gZ(Y,J.bundleId)};console.log(JSON.stringify(G,null,Q?0:2)),process.exit(0)}let X=J.bundleId;try{if(J.permission==="all")for(let G of t$())S9(Y,"reset",G,void 0,X);else S9(Y,J.verb,J.permission,J.value,X)}catch(G){console.error(G?.message??String(G)),process.exit(1)}if(Q)console.log(JSON.stringify({udid:Y,verb:J.verb,permission:J.permission,value:J.value??null,bundleId:X}));else{let G=J.value?` (${J.value})`:"";console.log(`\uD83D\uDD10 ${J.verb} ${J.permission}${G} for ${X} on ${Y}`)}process.exit(0)}z6();U6();function Y2($,Q={}){let Z=new Date($.timestamp),J=Number.isNaN(Z.getTime())?$.timestamp:Z.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"}),Y=Q.deviceLabel??($.device?$.device.slice(0,8):null),X=$.status==="error"?" failed":"";return[J,Y,`${x1($)}${X?` (${X.trim()})`:""}`].filter(Boolean).join(" ")}function x1($){if($.kind==="tap"){let Q=G$($.details,"current")??G$($.details,"start");return Q?`Tap at ${_6(Q)}`:"Tap"}if($.kind==="drag"){let Q=G$($.details,"start"),Z=G$($.details,"current");if(Q&&Z)return`Drag from ${_6(Q)} to ${_6(Z)}`;return"Drag"}if($.kind==="key"){let Q=S1($.details,"key")??$.action??"key",Z=$.action==="down"?"down":$.action==="up"?"up":$.action;return Z?`Key ${Z} ${J2(Q)}`:`Key ${J2(Q)}`}if($.kind==="rotate"){let Q=$.action?X2($.action):"";return Q?`Rotate ${Q}`:"Rotate"}return k1($.msg??$.summary)}function G$($,Q){let Z=$?.[Q];if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let J=Z;return typeof J.x==="number"&&typeof J.y==="number"?{x:J.x,y:J.y}:null}function S1($,Q){let Z=$?.[Q];return typeof Z==="string"&&Z.length>0?Z:null}function _6($){return`${Z2($.x)}, ${Z2($.y)}`}function Z2($){if(!Number.isFinite($))return"?";return(Math.round((w1($,0,1)+Number.EPSILON)*100)/100).toFixed(2)}function w1($,Q,Z){return Math.min(Z,Math.max(Q,$))}function k1($){return $.replace(/\b[a-z]+(?:_[a-z]+)+\b/g,X2)}function X2($){return $.replace(/[-_]+/g," ")}function J2($){return{MetaLeft:"Left Command",MetaRight:"Right Command",AltLeft:"Left Option",AltRight:"Right Option",ControlLeft:"Left Control",ControlRight:"Right Control",ShiftLeft:"Left Shift",ShiftRight:"Right Shift",ArrowLeft:"Left Arrow",ArrowRight:"Right Arrow",ArrowUp:"Up Arrow",ArrowDown:"Down Arrow"}[$]??$}N6();P4();function O6($,Q){let Z=$.split(",").map((Y)=>Y.trim()).filter(Boolean),J=Q==="stun"?/^stuns?:/i:/^turns?:/i;if(Z.length===0||Z.length>16||Z.some((Y)=>Y.length>2048||!J.test(Y)))throw Error(`Expected one or more comma-separated ${Q.toUpperCase()} URLs`);return Z}function A6($,Q){let Z=$??{transport:"http"},J=Q??{transport:"http"};if(Z.transport!==J.transport)return!1;let Y=K4(Z),X=K4(J);if(Y.mjpegFps!==X.mjpegFps||Y.mjpegQuality!==X.mjpegQuality||Y.maxDimension!==X.maxDimension||Y.h264Bitrate!==X.h264Bitrate||Y.h264Fps!==X.h264Fps)return!1;if(Z.transport==="http"&&J.transport==="http")return(Z.codec??"auto")===(J.codec??"auto");if(Z.transport!=="webrtc"||J.transport!=="webrtc")return!1;if(Z.codec!==J.codec)return!1;let G=Z.iceServers??[],W=J.iceServers??[];if(G.length!==W.length)return!1;return G.every((K,z)=>{let V=W[z];return K.username===V.username&&K.credential===V.credential&&K.urls.length===V.urls.length&&K.urls.every((H,B)=>H===V.urls[B])})}function U2($,Q){let Z=[];for(let J of $??[])for(let Y of J.urls){let X=Y.toLowerCase();if(Q.some((G)=>X.startsWith(G)))Z.push(Y)}return Z}function c1($){for(let Q of $??[])if(Q.urls.some((Z)=>/^turns?:/i.test(Z)))return Q;return null}function p1($){if(!$)return[];let Q=[];if(Q.push("--transport",$.transport),$.transport==="http"){if($.codec)Q.push("--codec",$.codec)}else{Q.push("--webrtc-codec",$.codec);let Z=U2($.iceServers,["stun:","stuns:"]);if(Z.length)Q.push("--stun-url",Z.join(","));let J=U2($.iceServers,["turn:","turns:"]);if(J.length){Q.push("--turn-url",J.join(","));let Y=c1($.iceServers);if(Y?.username)Q.push("--turn-username",Y.username);if(Y?.credential)Q.push("--turn-credential",Y.credential)}}if($.mjpegFps!==void 0)Q.push("--mjpeg-fps",String($.mjpegFps));if($.mjpegQuality!==void 0)Q.push("--mjpeg-quality",String($.mjpegQuality));if($.maxDimension!==void 0)Q.push("--max-dimension",String($.maxDimension));if($.h264Bitrate!==void 0)Q.push("--video-bitrate",String($.h264Bitrate));if($.h264Fps!==void 0)Q.push("--video-fps",String($.h264Fps));return Q}function _2($,Q,Z,J){return[$,"--port",String(Q),"--host",Z,...p1(J)]}P4();var y0=s4(import.meta.url);function HG(){return"0.1.51"}function f5(){if(!H0(L0))w8(L0,{recursive:!0})}function e($){if($)return x8(i4($));for(let Q of a4()){let Z=x8(Q);if(Z)return Z}return null}var f$={at:0,booted:null};function LG(){let $=Date.now();if(f$.booted&&$-f$.at<1000)return f$.booted;try{let Q=Z0("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),Z=JSON.parse(Q),J=new Set;for(let Y of Object.values(Z.devices))for(let X of Y)if(X.state==="Booted")J.add(X.udid);return f$={at:$,booted:J},J}catch{return null}}function x8($){try{if(!H0($))return U0("state file missing %s",$),null;let Q=JSON.parse(o0($,"utf-8"));try{process.kill(Q.pid,0)}catch{return U0("helper pid %d dead, removing stale state %s",Q.pid,$),i0($),null}let Z=LG();if(Z&&!Z.has(Q.device)){if(Q.pid===process.pid){U0("dropping own stale state for non-booted device %s",Q.device);try{i0($)}catch{}return null}U0("helper pid %d bound to non-booted device %s — killing stale helper",Q.pid,Q.device),console.error(`[serve-sim] Helper pid ${Q.pid} is bound to device ${Q.device} which is no longer booted — killing stale helper.`);try{process.kill(Q.pid,"SIGTERM")}catch{}try{i0($)}catch{}return null}return U0("state ok pid=%d device=%s port=%d",Q.pid,Q.device,Q.port),Q}catch(Q){return U0("readStateFile threw for %s: %o",$,Q),null}}function c4(){let $=[];for(let Q of a4()){let Z=x8(Q);if(Z)$.push(Z)}return $}function MG($){f5(),o4($),U0("wrote state pid=%d device=%s port=%d",$.pid,$.device,$.port)}function D0($){if($){U0("clearState device=%s",$);try{i0(i4($))}catch{}}else{U0("clearState (all)");for(let Q of a4())try{i0(Q)}catch{}}}function f8(){try{let $=Z0("xcrun simctl list devices -j",{encoding:"utf-8"}),Q=JSON.parse($),Z=Object.keys(Q.devices).filter((J)=>/SimRuntime\.iOS-/i.test(J)).sort((J,Y)=>{let X=(J.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),G=(Y.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(G[0]??0)-(X[0]??0)||(G[1]??0)-(X[1]??0)});for(let J of Z){let X=(Q.devices[J]??[]).find((G)=>G.isAvailable!==!1&&/^iPhone\b/i.test(G.name));if(X)return{udid:X.udid,name:X.name}}}catch{}return null}function w5($){return b5().get($)??null}function b5(){let $=new Map;try{let Q=Z0("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse(Q);for(let J of Object.values(Z.devices))for(let Y of J)$.set(Y.udid,Y.name)}catch{}return $}function v5($){try{let Q=Z0("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse(Q);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.udid===$)return Y.state==="Booted"}catch{}return!1}function S8($){try{return process.kill($,0),!0}catch{return!1}}function b$($){try{process.kill($,"SIGTERM")}catch{return}let Q=Date.now()+500;while(Date.now()<Q)try{process.kill($,0),v0(25)}catch{return}try{process.kill($,"SIGKILL")}catch{}let Z=Date.now()+500;while(Date.now()<Z)try{process.kill($,0),v0(25)}catch{return}}function UG($){if(!v5($))try{Z0(`xcrun simctl boot ${$}`,{encoding:"utf-8",stdio:"pipe"})}catch(Q){let Z=(Q.stderr??Q.message??"").toLowerCase();if(!Z.includes("booted")&&!Z.includes("current state"))throw Error(`Failed to boot device ${$}: ${Q.stderr||Q.message}`)}try{Z0("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function _G(){let $=VG();for(let Q of Object.values($))for(let Z of Q??[])if(Z.family==="IPv4"&&!Z.internal)return Z.address;return null}async function h5($){let Q=new Set(c4().map((Z)=>Z.port));for(let Z=$;Z<$+100;Z++){if(Q.has(Z))continue;if(await D9(Z))return Z}throw Error(`No available port found in range ${$}-${$+99}`)}async function BG($){UG($);try{Z0(`xcrun simctl bootstatus ${$} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(Q){if(!v5($))console.error(`Device ${$} failed to reach booted state: ${Q.stderr||Q.message}`),process.exit(1)}}function RG($){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],args:$};return{command:process.argv[0],args:[process.argv[1],...$]}}async function NG($,Q=150000){let Z=Date.now();while(Date.now()-Z<Q){let J=e($);if(J)return J;await new Promise((Y)=>setTimeout(Y,200))}return null}async function g5($,Q,Z){M6("startHelper udid=%s port=%d detach=%s",$,Q,Z.detach);let J="127.0.0.1";f5(),D0($),P9(Q);let Y=B0(L0,`server-${$}.log`),X=k8(Y,"w"),{command:G,args:W}=RG(_2($,Q,J,Z.stream)),K=k5(G,W,{detached:Z.detach,stdio:["ignore",X,X]});if(y8(X),Z.detach)K.unref();let z=await NG($);if(!z){if(K.pid)b$(K.pid);let V="";try{V=o0(Y,"utf-8").trim()}catch{}console.error(V?`Preview server failed:
|
|
176
176
|
${V}`:"Preview server failed to start"),process.exit(1)}return Z.detach?{pid:z.pid}:{pid:z.pid,child:K}}async function FG($,Q,Z,J,Y=!1){L6("follow devices=%o startPort=%d",$,Q);let X=$.length>0?$.map(t):(()=>{let H=X0();if(H)return[H];let B=f8();if(!B)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!Z)console.log(`No booted simulator — booting ${B.name}...`);return[B.udid]})(),G=new Map,W=[],K=Q;for(let H of X){let B=e(H);if(B)if(Y&&!A6(B.streamSettings,J))b$(B.pid),D0(H);else{if(!Z){let D=w5(H)??H;if(X.length>1)console.log(`
|
|
177
177
|
==> ${D} (${H}) <==`);console.log(` Already running on port ${B.port}`),console.log(` Stream: ${B.streamUrl}`),console.log(` WebSocket: ${B.wsUrl}`)}W.push(B);continue}K=await h5(K);let{child:N}=await g5(H,K,{detach:!1,stream:J});if(N)G.set(H,N);let M=e(H)??Q4(H,K,"/","127.0.0.1");if(W.push(M),!Z){let D=w5(H)??H;if(X.length>1)console.log(`
|
|
178
178
|
==> ${D} (${H}) <==`);console.log(` Stream: ${M.streamUrl}`),console.log(` WebSocket: ${M.wsUrl}`),console.log(` Port: ${K}`)}K++}if(W.length===1){let H=W[0];console.log(JSON.stringify({url:H.url,streamUrl:H.streamUrl,wsUrl:H.wsUrl,port:H.port,device:H.device}))}else console.log(JSON.stringify({devices:W.map((H)=>({url:H.url,streamUrl:H.streamUrl,wsUrl:H.wsUrl,port:H.port,device:H.device}))}));if(G.size===0)return;let z=!1,V=(H)=>{if(z)return;if(z=!0,!Z)console.log(`
|
|
179
179
|
Shutting down...`);for(let[B,N]of G){let M=N.pid;if(M)b$(M);D0(B)}G.clear(),process.exit(H)};for(let[H,B]of G)B.on("exit",(N)=>{if(M6("child exit udid=%s pid=%d code=%s",H,B.pid,N),z)return;if(!Z)console.error(`[${H}] Helper exited (code ${N})`);if(D0(H),G.delete(H),G.size===0)V(N??1)});process.on("SIGINT",()=>V(0)),process.on("SIGTERM",()=>V(0)),process.on("SIGHUP",()=>V(0)),process.on("exit",()=>{for(let[H,B]of G){try{if(B.pid)process.kill(B.pid,"SIGTERM")}catch{}try{D0(H)}catch{}}}),await new Promise(()=>{})}async function jG($,Q,Z,J=!1){L6("detach devices=%o startPort=%d",$,Q);let Y=$.length>0?$.map(t):(()=>{let W=X0();if(W)return[W];let K=f8();if(!K)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[K.udid]})(),X=[],G=Q;for(let W of Y){let K=e(W);if(K)if(J&&!A6(K.streamSettings,Z))b$(K.pid),D0(W);else{X.push(K);continue}G=await h5(G),await g5(W,G,{detach:!0,stream:Z}),X.push(e(W)??Q4(W,G,"/","127.0.0.1")),G++}return X}function TG($){if($.length===1){let Q=$[0];console.log(JSON.stringify({url:Q.url,streamUrl:Q.streamUrl,wsUrl:Q.wsUrl,port:Q.port,device:Q.device}))}else console.log(JSON.stringify({devices:$.map((Q)=>({url:Q.url,streamUrl:Q.streamUrl,wsUrl:Q.wsUrl,port:Q.port,device:Q.device}))}))}function OG($){if($){let Z=t($),J=e(Z);if(!J)console.log(JSON.stringify({running:!1,device:Z}));else console.log(JSON.stringify({running:!0,url:J.url,streamUrl:J.streamUrl,wsUrl:J.wsUrl,port:J.port,device:J.device,pid:J.pid}));return}let Q=c4();if(Q.length===0)console.log(JSON.stringify({running:!1}));else if(Q.length===1){let Z=Q[0];console.log(JSON.stringify({running:!0,url:Z.url,streamUrl:Z.streamUrl,wsUrl:Z.wsUrl,port:Z.port,device:Z.device,pid:Z.pid}))}else console.log(JSON.stringify({running:!0,streams:Q.map((Z)=>({url:Z.url,streamUrl:Z.streamUrl,wsUrl:Z.wsUrl,port:Z.port,device:Z.device,pid:Z.pid}))}))}function AG($){if($){let Q=t($),Z=e(Q);if(!Z){console.log(JSON.stringify({disconnected:!0,device:Q}));return}try{process.kill(Z.pid,"SIGTERM")}catch{}D0(Q),console.log(JSON.stringify({disconnected:!0,device:Z.device}))}else{let Q=c4();if(Q.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let Z=[];for(let J of Q){try{process.kill(J.pid,"SIGTERM")}catch{}Z.push(J.device)}D0(),console.log(JSON.stringify({disconnected:!0,devices:Z}))}}async function DG($,Q={}){let Z=$?t($):void 0,J=e(Z);if(!J)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let Y=new URL("/api/event-log",J.url);if(Z)Y.searchParams.set("device",J.device);let X=EG(Q.limit);if(X!=null)Y.searchParams.set("limit",String(X));let G;try{let K=await fetch(Y);if(!K.ok)throw Error(`HTTP ${K.status}`);G=await K.json()}catch(K){console.error(`Failed to read event log: ${K instanceof Error?K.message:String(K)}`),process.exit(1)}if(Q.json){console.log(JSON.stringify(G,null,2));return}if(G.events.length===0){console.log("No events.");return}let W=CG(G.events);for(let K of G.events)console.log(Y2(K,{deviceLabel:K.device?W.get(K.device):null}))}function EG($){if($==null)return;let Q=Number($);if(!Number.isFinite(Q)||Q<=0)console.error("event-log --limit must be a positive number"),process.exit(1);return Math.floor(Q)}function CG($){let Q=[...new Set($.map((G)=>G.device).filter((G)=>!!G))],Z=new Map,J=b5();for(let G of Q)Z.set(G,J.get(G)??G.slice(0,8));let Y=new Map;for(let G of Z.values())Y.set(G,(Y.get(G)??0)+1);let X=new Map;for(let[G,W]of Z)X.set(G,Y.get(W)>1?`${W} (${G.slice(0,8)})`:W);return X}async function PG($,Q){let Z=e(Q);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J;try{J=JSON.parse($)}catch{console.error("Invalid JSON:",$),process.exit(1)}return new Promise((Y,X)=>{let G=new WebSocket(Z.wsUrl);G.binaryType="arraybuffer",G.onopen=()=>{let W=new TextEncoder().encode(JSON.stringify(J)),K=new Uint8Array(1+W.length);K[0]=3,K.set(W,1),G.send(K),setTimeout(()=>{G.close(),Y()},50)},G.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),X(Error("WebSocket connection failed"))}})}async function qG($,Q,Z){let J=Number($),Y=Number(Q);if(!Number.isFinite(J)||!Number.isFinite(Y)||J<0||J>1||Y<0||Y>1)console.error("Usage: serve-sim tap <x> <y> [-d udid]"),console.error(" x, y are normalized 0..1 of the simulator screen"),console.error(" Example: serve-sim tap 0.5 0.9 # near bottom-center"),process.exit(1);let X=e(Z);if(!X)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((G,W)=>{let K=new WebSocket(X.wsUrl);K.binaryType="arraybuffer";let z=(V)=>{let H=new TextEncoder().encode(JSON.stringify({type:V,x:J,y:Y})),B=new Uint8Array(1+H.length);B[0]=3,B.set(H,1),K.send(B)};K.onopen=()=>{z("begin"),setTimeout(()=>{z("end"),setTimeout(()=>{K.close(),G()},50)},40)},K.onerror=()=>{console.error("Failed to connect to serve-sim server at",X.wsUrl),W(Error("WebSocket connection failed"))}})}async function IG($,Q){let Z=Q.device,J=Q.stdin??!1,Y=Q.file,X=[$.length>0,J,Y!=null].filter(Boolean).length;if(X===0||X>1)console.error("Usage: serve-sim type <text> [-d udid]"),console.error(" serve-sim type --stdin [-d udid]"),console.error(" serve-sim type --file <path> [-d udid]"),console.error(""),console.error("Only US-keyboard ASCII characters are supported (A-Z, a-z, 0-9,"),console.error("space, newline, tab, and standard punctuation)."),process.exit(1);let G;if(J)G=o0(0,"utf8");else if(Y)try{G=o0(Y,"utf8")}catch(z){console.error(`Failed to read file '${Y}': ${z.message}`),process.exit(1)}else G=$.join(" ");let W;try{W=B9(G)}catch(z){if(z instanceof t4)console.error(z.message),console.error("Supported: A-Z, a-z, 0-9, space, newline, tab, and standard punctuation."),process.exit(1);throw z}let K=e(Z);if(!K)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);await _9(K.wsUrl,W)}async function xG($,Q){let Z=e(Q);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!$||!J.has($))console.error(`Usage: serve-sim rotate <${[...J].join("|")}> [-d udid]`),process.exit(1);return new Promise((Y,X)=>{let G=new WebSocket(Z.wsUrl);G.binaryType="arraybuffer",G.onopen=()=>{let W=new TextEncoder().encode(JSON.stringify({orientation:$})),K=new Uint8Array(1+W.length);K[0]=7,K.set(W,1),G.send(K),setTimeout(()=>{G.close(),Y()},50)},G.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),X(Error("WebSocket connection failed"))}})}var SG={power:{page:12,usage:48},"volume-up":{page:12,usage:233},"volume-down":{page:12,usage:234},action:{page:11,usage:45},"side-button":{page:12,usage:149},"digital-crown":{page:12,usage:64},"left-side-button":{page:65281,usage:512}};async function wG($="home",Q){let Z=e(Q);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J=SG[$],Y=J?{button:$,...J}:{button:$};return new Promise((X,G)=>{let W=new WebSocket(Z.wsUrl);W.binaryType="arraybuffer",W.onopen=()=>{let K=new TextEncoder().encode(JSON.stringify(Y)),z=new Uint8Array(1+K.length);z[0]=4,z.set(K,1),W.send(z),setTimeout(()=>{W.close(),X()},50)},W.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),G(Error("WebSocket connection failed"))}})}async function kG($,Q,Z){let J=(Q??"").toLowerCase(),Y=J==="on"||J==="1"||J==="true",X={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},G=$?X[$]??$:void 0;if(!G||!["on","off","1","0","true","false"].includes(J))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
|
|
180
|
-
option shortcuts: ${Object.keys(X).join(", ")}`),process.exit(1);let W=e(Z);if(!W)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((K,z)=>{let V=new WebSocket(W.wsUrl);V.binaryType="arraybuffer",V.onopen=()=>{let H=new TextEncoder().encode(JSON.stringify({option:G,enabled:Y})),B=new Uint8Array(1+H.length);B[0]=8,B.set(H,1),V.send(B),setTimeout(()=>{V.close(),K()},50)},V.onerror=()=>{console.error("Failed to connect to serve-sim server at",W.wsUrl),z(Error("WebSocket connection failed"))}})}async function yG($){let Q=e($);if(!Q)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((Z,J)=>{let Y=new WebSocket(Q.wsUrl);Y.binaryType="arraybuffer",Y.onopen=()=>{Y.send(new Uint8Array([9])),setTimeout(()=>{Y.close(),Z()},50)},Y.onerror=()=>{console.error("Failed to connect to serve-sim server at",Q.wsUrl),J(Error("WebSocket connection failed"))}})}function u5(){let $=[B0(y0,"..","dist","simcam","libSimCameraInjector.dylib"),B0(y0,"simcam","libSimCameraInjector.dylib"),B0(y0,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let Q of $)if(
|
|
180
|
+
option shortcuts: ${Object.keys(X).join(", ")}`),process.exit(1);let W=e(Z);if(!W)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((K,z)=>{let V=new WebSocket(W.wsUrl);V.binaryType="arraybuffer",V.onopen=()=>{let H=new TextEncoder().encode(JSON.stringify({option:G,enabled:Y})),B=new Uint8Array(1+H.length);B[0]=8,B.set(H,1),V.send(B),setTimeout(()=>{V.close(),K()},50)},V.onerror=()=>{console.error("Failed to connect to serve-sim server at",W.wsUrl),z(Error("WebSocket connection failed"))}})}async function yG($){let Q=e($);if(!Q)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((Z,J)=>{let Y=new WebSocket(Q.wsUrl);Y.binaryType="arraybuffer",Y.onopen=()=>{Y.send(new Uint8Array([9])),setTimeout(()=>{Y.close(),Z()},50)},Y.onerror=()=>{console.error("Failed to connect to serve-sim server at",Q.wsUrl),J(Error("WebSocket connection failed"))}})}function u5(){let $=[B0(y0,"..","dist","simcam","libSimCameraInjector.dylib"),B0(y0,"simcam","libSimCameraInjector.dylib"),B0(y0,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let Q of $)if(H0(Q))return d0(Q);return null}function fG(){let $=B0(y0,"..","Sources","SimCameraInjector","build.sh");if(!H0($))throw Error("SimCameraInjector source not found — this build of serve-sim does not "+"include camera support sources. Reinstall from a recent release.");console.error("[serve-sim] building libSimCameraInjector.dylib (one-time)…"),Z0(`bash "${$}"`,{stdio:"inherit"});let Q=u5();if(!Q)throw Error("Build succeeded but dylib not found.");return Q}function b8(){let $=[B0(y0,"..","dist","simcam","serve-sim-camera-helper"),B0(y0,"simcam","serve-sim-camera-helper")];for(let Q of $)if(H0(Q))return d0(Q);return null}function m5(){let $=B0(y0,"..","Sources","SimCameraHelper","build.sh");if(!H0($))throw Error("SimCameraHelper source not found — webcam support requires building "+"from a checkout that includes Sources/SimCameraHelper.");console.error("[serve-sim] building serve-sim-camera-helper (one-time)…"),Z0(`bash "${$}"`,{stdio:"inherit"});let Q=b8();if(!Q)throw Error("Build succeeded but helper binary not found.");return Q}function bG($){return`/serve-sim-cam-${zG("sha1").update($).digest("hex").slice(0,8)}`}function vG($,Q,Z){let J=z$($),Y=J.includes(Q)?J:[...J,Q],X={helperPid:Z,bundleIds:Y};if(!H0(C0))w8(C0,{recursive:!0});y5(K$($),JSON.stringify(X))}function c5($){try{i0(K$($))}catch{}}function p5($){let Q=E4($);if(!H0(Q))return;let Z=Number(o0(Q,"utf-8").trim());if(Number.isFinite(Z)&&S8(Z)){try{process.kill(Z,"SIGTERM")}catch{}let J=Date.now();while(S8(Z)&&Date.now()-J<1500)v0(50)}try{i0(Q)}catch{}c5($)}function hG($){if(!H0(C0))w8(C0,{recursive:!0});let Q=B0(C0,`${$.udid}.log`),Z=k8(Q,"a"),J=["--shm",$.shmName,"--socket",$.socketPath,"--source",$.source];if($.arg)J.push("--arg",$.arg);if($.width)J.push("--width",String($.width));if($.height)J.push("--height",String($.height));let Y=k5($.helperBin,J,{detached:!0,stdio:["ignore",Z,Z]});if(Y.unref(),y8(Z),!Y.pid)throw Error("failed to spawn camera helper");y5(E4($.udid),String(Y.pid)),c5($.udid);let X=Date.now();while(Date.now()-X<3000){if(!S8(Y.pid))throw Error(`camera helper exited early — see log at ${Q}`);if(H0($.socketPath))break;v0(50)}return Y.pid}var gG=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),uG=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function l5($){let Q=$.toLowerCase().split(".").pop()??"";if(gG.has(Q))return"video";if(uG.has(Q))return"image";let Z;try{let J=k8($,"r");Z=Buffer.alloc(16),WG(J,Z,0,Z.length,0),y8(J)}catch{return null}if(Z.length>=8&&Z.slice(4,8).toString("ascii")==="ftyp")return"video";if(Z.slice(0,4).toString("ascii")==="RIFF"&&Z.length>=12){let J=Z.slice(8,12).toString("ascii");if(J==="AVI ")return"video";if(J==="WEBP")return"image"}if(Z[0]===26&&Z[1]===69&&Z[2]===223&&Z[3]===163)return"video";if(Z[0]===137&&Z[1]===80&&Z[2]===78&&Z[3]===71)return"image";if(Z[0]===255&&Z[1]===216&&Z[2]===255)return"image";if(Z.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(Z[0]===66&&Z[1]===77)return"image";return null}function mG($){if($.file){let Q=d0($.file),Z=l5(Q);if(!Z)throw Error(`Could not detect image/video type for: ${Q}`);return{kind:Z,arg:Q}}if($.webcam)return{kind:"webcam",arg:typeof $.webcam==="string"?$.webcam:void 0};return{kind:"placeholder"}}async function cG($){let Q=bG($.udid),Z=W$($.udid);if(C4($.udid)){let X=await G4($.udid,{action:"switch",source:$.source.kind,arg:$.source.arg});if(!X.ok)throw Error(X.error||"helper rejected switch");return{helperPid:Number(o0(E4($.udid),"utf-8").trim()),shmName:Q,relaunched:!1}}p5($.udid);let J=!$.forceBuild&&b8()||m5();return{helperPid:hG({udid:$.udid,helperBin:J,shmName:Q,socketPath:Z,source:$.source.kind,arg:$.source.arg}),shmName:Q,relaunched:!0}}async function pG($){let Q,Z,J,Y=!1,X=!1,G=!1,W=!1,K="auto",z=[];for(let R=0;R<$.length;R++){let L=$[R];if(L==="--device"||L==="-d"){Q=$[++R];continue}if(L==="--file"||L==="-f"||L==="--image"||L==="-i"||L==="--video"){Z=$[++R];continue}if(L==="--webcam"){let U=$[R+1];if(U&&!U.startsWith("-"))J=U,R++;else J=!0;continue}if(L==="--list-webcams"){X=!0;continue}if(L==="--stop-webcam"){Y=!0;continue}if(L==="--build"){G=!0;continue}if(L==="--quiet"||L==="-q"){W=!0;continue}if(L==="--mirror"){let U=$[R+1];if(U==="on"||U==="off"||U==="auto")K=U,R++;else K="on";continue}if(L==="--no-mirror"){K="off";continue}if(L==="--help"||L==="-h"){console.log(`Usage: serve-sim camera <bundle-id> [-d udid] [source-options] [--build]
|
|
181
181
|
serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]
|
|
182
182
|
serve-sim camera mirror <auto|on|off> [-d udid]
|
|
183
183
|
serve-sim camera --list-webcams
|
|
@@ -215,7 +215,7 @@ Examples:
|
|
|
215
215
|
serve-sim camera switch placeholder # back to placeholder
|
|
216
216
|
serve-sim camera switch ~/Movies/loop.mp4 # hot-swap to file
|
|
217
217
|
serve-sim camera --list-webcams
|
|
218
|
-
serve-sim camera --stop-webcam`);return}z.push(L)}if(X){let R=b8()??m5();Z0(`"${R}" --list`,{stdio:"inherit"});return}if(Y){let R=Q?t(Q):X0();if(!R)console.error("No booted simulator."),process.exit(1);let L=z$(R),U=[];for(let _ of L)try{Z0(`xcrun simctl terminate "${R}" "${_}"`,{stdio:"ignore"}),U.push(_)}catch{}if(p5(R),W)console.log(JSON.stringify({udid:R,stopped:!0,terminated:U}));else if(console.log(`Stopped camera helper for ${R}`),U.length>0)console.log(`Terminated injected apps: ${U.join(", ")}`);return}if(z[0]==="mirror"){let R=Q?t(Q):X0();if(!R)console.error("No booted simulator."),process.exit(1);let L=z[1];if(L!=="auto"&&L!=="on"&&L!=="off")console.error("Usage: serve-sim camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!C4(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let U=await G4(R,{action:"setMirror",mode:L});if(!U.ok)console.error(`mirror failed: ${U.error??"?"}`),process.exit(1);if(W)console.log(JSON.stringify({udid:R,mirror:L,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${L} on ${R}`)}catch(U){console.error(`mirror failed: ${U?.message??U}`),process.exit(1)}return}if(z[0]==="switch"){let R=Q?t(Q):X0();if(!R)console.error("No booted simulator."),process.exit(1);let L=z[1],U=z[2];if(L&&L!=="placeholder"&&L!=="webcam"&&L!=="image"&&L!=="video"&&L!=="file"){let _=d0(L);if(
|
|
218
|
+
serve-sim camera --stop-webcam`);return}z.push(L)}if(X){let R=b8()??m5();Z0(`"${R}" --list`,{stdio:"inherit"});return}if(Y){let R=Q?t(Q):X0();if(!R)console.error("No booted simulator."),process.exit(1);let L=z$(R),U=[];for(let _ of L)try{Z0(`xcrun simctl terminate "${R}" "${_}"`,{stdio:"ignore"}),U.push(_)}catch{}if(p5(R),W)console.log(JSON.stringify({udid:R,stopped:!0,terminated:U}));else if(console.log(`Stopped camera helper for ${R}`),U.length>0)console.log(`Terminated injected apps: ${U.join(", ")}`);return}if(z[0]==="mirror"){let R=Q?t(Q):X0();if(!R)console.error("No booted simulator."),process.exit(1);let L=z[1];if(L!=="auto"&&L!=="on"&&L!=="off")console.error("Usage: serve-sim camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!C4(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let U=await G4(R,{action:"setMirror",mode:L});if(!U.ok)console.error(`mirror failed: ${U.error??"?"}`),process.exit(1);if(W)console.log(JSON.stringify({udid:R,mirror:L,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${L} on ${R}`)}catch(U){console.error(`mirror failed: ${U?.message??U}`),process.exit(1)}return}if(z[0]==="switch"){let R=Q?t(Q):X0();if(!R)console.error("No booted simulator."),process.exit(1);let L=z[1],U=z[2];if(L&&L!=="placeholder"&&L!=="webcam"&&L!=="image"&&L!=="video"&&L!=="file"){let _=d0(L);if(H0(_))U=_,L="file"}if(L==="file"){if(!U)console.error("camera switch file <path>"),process.exit(1);U=d0(U);let _=l5(U);if(!_)console.error(`Could not detect image/video type for: ${U}`),process.exit(1);L=_}if(!L||L!=="placeholder"&&L!=="webcam"&&L!=="image"&&L!=="video")console.error("Usage: serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if((L==="image"||L==="video")&&U)U=d0(U);if(!C4(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let _=await G4(R,{action:"switch",source:L,arg:U});if(!_.ok)console.error(`switch failed: ${_.error??"?"}`),process.exit(1);if(W)console.log(JSON.stringify({udid:R,..._}));else console.log(`\uD83D\uDCF7 Switched ${R} → ${_.source}${_.arg?` (${_.arg})`:""}`)}catch(_){console.error(`switch failed: ${_?.message??_}`),process.exit(1)}return}if(z[0]==="status"){let R=Q?t(Q):X0();if(!R){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}console.log(JSON.stringify(await V$(R)));return}let V=z[0];if(!V)console.error("Usage: serve-sim camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let H=Q?t(Q):X0();if(!H)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let B=G?null:u5();if(!B)try{B=fG()}catch(R){console.error(`Failed to obtain camera dylib: ${R?.message??R}`),process.exit(1)}if(Z&&J)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(Z){if(Z=d0(Z),!H0(Z))console.error(`File not found: ${Z}`),process.exit(1)}let N;try{N=mG({file:Z,webcam:J})}catch(R){console.error(R?.message??String(R)),process.exit(1)}let M=await cG({udid:H,source:N,forceBuild:G}),D=M.shmName,q=M.helperPid;if(K!=="auto"||!M.relaunched)try{await G4(H,{action:"setMirror",mode:K})}catch{}try{Z0(`xcrun simctl privacy "${H}" grant camera "${V}"`,{stdio:"ignore"})}catch{}try{Z0(`xcrun simctl terminate "${H}" "${V}"`,{stdio:"ignore"})}catch{}let C={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:B,SIMCTL_CHILD_SIMCAM_SHM_NAME:D,...K!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:K}:{}},j="";try{j=Z0(`xcrun simctl launch "${H}" "${V}"`,{env:C,encoding:"utf-8"})}catch(R){console.error(`simctl launch failed: ${R?.stderr??R?.message??R}`),process.exit(1)}let A=j.trim().match(/:\s*(\d+)\s*$/),E=A?Number(A[1]):null;if(q)vG(H,V,q);let P={udid:H,bundleId:V,pid:E,dylib:B,source:N.kind,arg:N.arg??null,shm:D,helperPid:q,mirror:K,hotSwapped:!1,helperRelaunched:M.relaunched};if(W)console.log(JSON.stringify(P));else{let R=M.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${R} camera into ${V} (pid ${E??"?"}) on ${H}`),console.log(` source: ${N.kind}${N.arg?` (${N.arg})`:""}`),q)console.log(` helper pid: ${q} (shm ${D})`);console.log(` dylib: ${B}`)}}function lG($){if($.length>0)return $.map(t);let Q=c4();if(Q.length>0)return[Q[0].device];let Z=X0();if(Z)return[Z];let J=f8();if(!J)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[J.udid]}async function nG($,Q,Z,J,Y={}){let X=lG(Q);if(Q.length===0&&c4().length===0)console.log("Starting simulator stream...");for(let q of X)await BG(q);let G=X[0],{simMiddleware:W}=await Promise.resolve().then(() => (S5(),x5)),K=W({basePath:"/",device:G,streamSettings:Y.stream,proxyHelpers:!0,metricsCorsOrigins:Y.metricsCorsOrigins??[]}),z=Z?1:50,V=$,H,B=!1;for(let q=0;q<z;q++){let C=$+q;try{await dG(C,K,J),V=C,B=!0;break}catch(j){if(H=j,j?.code!=="EADDRINUSE")break}}if(!B){if(H?.code==="EADDRINUSE")if(Z)console.error(`Port ${$} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${$}-${$+z-1}.`);else console.error(`Failed to start preview server: ${H?.message??H}`);process.exit(1)}for(let q of X)MG(Q4(q,V,"/",J,Y.stream));let N=()=>{for(let q of X)try{D0(q)}catch{}};if(process.on("exit",N),Y.debugStreamPath){let q=I9({path:Y.debugStreamPath,statsUrl:(C)=>`http://127.0.0.1:${V}/helper/${encodeURIComponent(C)}/webrtc/stats`});x9(X,q),console.log(` - Stream debug: recording to ${Y.debugStreamPath}`)}let M=J!=="127.0.0.1"&&J!=="localhost"&&J!=="::1",D=_G();if(console.log(""),console.log(` - Local: http://localhost:${V}`),M&&D)console.log(` - Network: http://${D}:${V}`);else if(D)console.log(` - Network: \x1B[2muse --host 0.0.0.0 to expose on http://${D}:${V}\x1B[0m`);else console.log(" - Network: \x1B[2muse --host 0.0.0.0 to expose on the LAN\x1B[0m");console.log(""),process.on("SIGINT",()=>process.exit(0)),process.on("SIGTERM",()=>process.exit(0)),await new Promise(()=>{})}function dG($,Q,Z){return C9({port:$,middleware:Q,host:Z})}function m4($,Q,Z,J,Y=!1){let X=Number($);if(!Number.isFinite(X)||Y&&!Number.isInteger(X)||X<Z||X>J)throw new $4(`${Q} must be a ${Y?"integer":"number"} from ${Z} to ${J}.`);return X}var J0=new U9;J0.name("serve-sim").description("Stream iOS Simulator to the browser").version(HG(),"-v, --version","Output the serve-sim version").helpOption("-h, --help","Show this help").argument("[devices...]","Simulator(s) to target (udid or name; default: booted)").option("-p, --port <port>","Starting port (preview default: 3200; helper default: 3100)",($)=>parseInt($,10)).option("--host <addr>","Interface to bind the preview server to. Use 0.0.0.0 to expose on the "+"LAN — only on trusted networks: the preview exposes a token-gated "+"shell-exec route.","127.0.0.1").option("--detach","Spawn helper and exit (daemon mode)").option("-q, --quiet","Suppress human-readable output, JSON only").option("--no-preview","Skip the web preview server; stream in foreground only").option("--transport <http|webrtc>","Stream transport","http").option("--codec <codec>","Stream codec for the preview UI: 'auto', 'h264', or 'mjpeg'. Use --transport webrtc for WebRTC.",($)=>{let Q=$.toLowerCase(),Z=["auto","h264","mjpeg"];if(!Z.includes(Q))throw new $4(`Unsupported codec '${$}'. Supported: ${Z.join(", ")}.`);return Q}).option("--webrtc-codec <vp8|vp9|h264>","WebRTC video codec",($)=>{let Q=$.toLowerCase();if(Q!=="vp8"&&Q!=="vp9"&&Q!=="h264")throw new $4(`Unsupported WebRTC codec '${$}'. Supported: vp8, vp9, h264.`);return Q},"h264").option("--stun-url <url[,url...]>","STUN URL(s) for WebRTC ICE",($)=>{try{return O6($,"stun")}catch(Q){throw new $4(Q.message)}}).option("--turn-url <url[,url...]>","TURN URL(s) for WebRTC ICE",($)=>{try{return O6($,"turn")}catch(Q){throw new $4(Q.message)}}).option("--turn-username <username>","TURN username").option("--turn-credential <credential>","TURN credential").option("--mjpeg-fps <fps>",`MJPEG frame rate (1-${F6})`,($)=>m4($,"--mjpeg-fps",1,F6,!0)).option("--mjpeg-quality <quality>","MJPEG quality (0.05-1)",($)=>m4($,"--mjpeg-quality",0.05,1)).option("--max-dimension <pixels>","Maximum captured width or height; 0 keeps native resolution (0-4096)",($)=>m4($,"--max-dimension",0,4096,!0)).option("--video-bitrate <bits-per-second>","H.264/WebRTC target bitrate (100000-50000000)",($)=>m4($,"--video-bitrate",1e5,50000000,!0)).option("--video-fps <fps>",`H.264/WebRTC frame rate (1-${j6})`,($)=>m4($,"--video-fps",1,j6,!0)).option("--debug-stream <path>","Record sender-side stream statistics once a second to an NDJSON file. Needs the preview server and --transport webrtc.").option("--metrics-cors-origin <origin>","Allow this origin to read the /metrics stream cross-origin (repeatable). Loopback origins are always allowed.",($,Q)=>[...Q,$],[]).option("-l, --list [device]","List running streams").option("-k, --kill [device]","Kill running stream(s)").addHelpText("after",`
|
|
219
219
|
Examples:
|
|
220
220
|
serve-sim Open simulator preview at localhost:3200
|
|
221
221
|
serve-sim -p 8080 Preview on a custom port
|
|
@@ -227,5 +227,5 @@ Examples:
|
|
|
227
227
|
serve-sim --list Show all running streams
|
|
228
228
|
serve-sim --kill Stop all streams`).action(async($,Q)=>{if(Q.list!==void 0){OG(typeof Q.list==="string"?Q.list:void 0);return}if(Q.kill!==void 0){AG(typeof Q.kill==="string"?Q.kill:void 0);return}if(Q.transport!=="http"&&Q.transport!=="webrtc")console.error("--transport must be one of: http, webrtc."),process.exit(1);let Z=(B)=>J0.getOptionValueSource(B)==="cli",J=["webrtcCodec","stunUrl","turnUrl","turnUsername","turnCredential"].some(Z);if(Q.transport==="http"&&J)console.error("WebRTC options require --transport webrtc."),process.exit(1);if(Q.transport==="webrtc"&&Z("codec"))console.error("--codec configures HTTP streaming; use --webrtc-codec with --transport webrtc."),process.exit(1);if(Q.turnUsername===void 0!==(Q.turnCredential===void 0))console.error("--turn-username and --turn-credential must be provided together."),process.exit(1);if((Q.turnUsername!==void 0||Q.turnCredential!==void 0)&&!Q.turnUrl)console.error("--turn-username and --turn-credential require --turn-url."),process.exit(1);let Y=Q.stunUrl??[],X=[];if(Y.length)X.push({urls:Y});if(Q.turnUrl)X.push({urls:Q.turnUrl,username:Q.turnUsername,credential:Q.turnCredential});let G=["mjpegFps","mjpegQuality","maxDimension","videoBitrate","videoFps"],W={...Z("mjpegFps")?{mjpegFps:Q.mjpegFps}:{},...Z("mjpegQuality")?{mjpegQuality:Q.mjpegQuality}:{},...Z("maxDimension")?{maxDimension:Q.maxDimension}:{},...Z("videoBitrate")?{h264Bitrate:Q.videoBitrate}:{},...Z("videoFps")?{h264Fps:Q.videoFps}:{}},K=Q.transport==="webrtc"?{transport:"webrtc",codec:Q.webrtcCodec,...X.length?{iceServers:X}:{},...W}:{transport:"http",codec:Q.codec,...W},z=Q.port,V=Z("transport")||Z("codec")||J||G.some(Z),H=Q.debugStream?.trim();if(Q.debugStream!==void 0){let B=!H?"--debug-stream needs a file path, for example --debug-stream ./stream.ndjson":Q.detach||Q.preview===!1?"--debug-stream needs the preview server, so drop --detach/--no-preview.":K.transport!=="webrtc"?"--debug-stream records sender statistics, which only exist on --transport webrtc.":null;if(B!==null)console.error(B),process.exit(1)}if(Q.detach){let B=await jG($,z??3100,K,V);TG(B)}else if(Q.preview===!1)await FG($,z??3100,!!Q.quiet,K,V);else await nG(z??3200,$,z!==void 0,Q.host,{stream:K,metricsCorsOrigins:Q.metricsCorsOrigin,debugStreamPath:H})});var f0=["-d, --device <udid>","Target a specific simulator (udid or name)"];J0.command("gesture").description("Send a touch gesture").argument("<json>",`Gesture JSON, e.g. '{"type":"begin","x":0.5,"y":0.5}'`).option(...f0).action(($,Q)=>PG($,Q.device));J0.command("tap").description("Tap at normalized 0..1 coords").argument("<x>","X coord, normalized 0..1").argument("<y>","Y coord, normalized 0..1").option(...f0).action(($,Q,Z)=>qG($,Q,Z.device));J0.command("button").description("Send a hardware button press").argument("[name]","Button name","home").option(...f0).action(($,Q)=>wG($,Q.device));J0.command("type").description("Type text (US keyboard only)").argument("[text...]","Text to type").option(...f0).option("--stdin","Read text from stdin").option("--file <path>","Read text from a file").action(($,Q)=>IG($,{device:Q.device,stdin:Q.stdin,file:Q.file}));J0.command("rotate").description("Set device orientation (portrait|portrait_upside_down|landscape_left|landscape_right)").argument("<orientation>").option(...f0).action(($,Q)=>xG($,Q.device));J0.command("ca-debug").description("Toggle a CoreAnimation debug render flag (blended|copies|misaligned|offscreen|slow-animations)").argument("<option>").argument("<state>","on|off").option(...f0).action(($,Q,Z)=>kG($,Q,Z.device));J0.command("memory-warning").description("Simulate a memory warning on the device").option(...f0).action(($)=>yG($.device));J0.command("event-log").description("Show recent simulator events").option(...f0).option("-j, --json","Print JSON").option("-n, --limit <count>","Maximum number of events").action(($)=>DG($.device,{json:$.json,limit:$.limit}));J0.command("camera").description("Inject a synthetic camera feed and launch an app (see `camera --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action(($)=>pG($));J0.command("permissions").description("Manage app permissions (see `permissions` with no args for usage)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action(($)=>h9($));J0.command("ui").description("Get or set simulator-wide UI options (see `ui --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action(($)=>n9($));await J0.parseAsync(process.argv);
|
|
229
229
|
|
|
230
|
-
//# debugId=
|
|
230
|
+
//# debugId=7CC6B5369E1D1E6E64756E2164756E21
|
|
231
231
|
//# sourceMappingURL=serve-sim.js.map
|