serve-sim 0.1.45 → 0.1.46
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/Package.swift +8 -0
- package/README.md +2 -0
- package/Sources/SimNative/CaptureEngine.swift +23 -6
- package/Sources/SimNative/DeviceHubKeyboardBridge.swift +300 -0
- package/Sources/SimNative/FrameCapture.swift +87 -11
- package/Sources/SimNative/H264Encoder.swift +14 -10
- package/Sources/SimNative/HIDInjector.swift +19 -5
- package/Sources/SimNativeSupport/DeviceHubKeyboardRouting.swift +147 -0
- package/Sources/SimNativeSupport/FramebufferSurfaceSelector.swift +55 -0
- package/Tests/SimNativeSupportTests/DeviceHubKeyboardRoutingTests.swift +123 -0
- package/Tests/SimNativeSupportTests/FramebufferSurfaceSelectorTests.swift +68 -0
- package/dist/middleware.js +43 -43
- package/dist/native/serve-sim-native.node +0 -0
- package/dist/serve-sim.js +63 -63
- package/package.json +4 -1
- package/src/middleware.ts +5 -1
- package/src/native.ts +10 -10
- package/src/simctl.ts +11 -0
package/dist/serve-sim.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as
|
|
3
|
-
`)}displayWidth($){return
|
|
2
|
+
import{createRequire as o4}from"node:module";var u4=Object.create;var{getPrototypeOf:g4,defineProperty:O8,getOwnPropertyNames:c4}=Object;var m4=Object.prototype.hasOwnProperty;function l4($){return this[$]}var p4,d4,B6=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?p4??=new WeakMap:d4??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?u4(g4($)):{};let G=Q||!$||!$.__esModule?O8(Z,"default",{value:$,enumerable:!0}):Z;for(let V of c4($))if(!m4.call(G,V))O8(G,V,{get:l4.bind($,V),enumerable:!0});if(J)Y.set($,G);return G};var X$=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports);var n4=($)=>$;function i4($,Q){this[$]=n4.bind(null,Q)}var F6=($,Q)=>{for(var Z in Q)O8($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:i4.bind(Q,Z)})};var s=($,Q)=>()=>($&&(Q=$($=0)),Q);var R$=o4(import.meta.url);var W0=X$((a4)=>{class E8 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 T6 extends E8{constructor($){super(1,"commander.invalidArgument",$);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}a4.CommanderError=E8;a4.InvalidArgumentError=T6});var k0=X$(($5)=>{var{InvalidArgumentError:s4}=W0();class j6{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 s4(`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 e4($){let Q=$.name()+($.variadic===!0?"...":"");return $.required?"<"+Q+">":"["+Q+"]"}$5.Argument=j6;$5.humanReadableArgName=e4});var q8=X$((Y5)=>{var{humanReadableArgName:J5}=k0();class O6{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)=>J5(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(K,R){return Q.formatItem(K,Z,R,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 V=Q.visibleArguments($).map((K)=>{return Y(Q.styleArgumentTerm(Q.argumentTerm(K)),Q.styleArgumentDescription(Q.argumentDescription(K)))});if(X=X.concat(this.formatItemList("Arguments:",V,Q)),this.groupItems($.options,Q.visibleOptions($),(K)=>K.helpGroupHeading??"Options:").forEach((K,R)=>{let H=K.map((T)=>{return Y(Q.styleOptionTerm(Q.optionTerm(T)),Q.styleOptionDescription(Q.optionDescription(T)))});X=X.concat(this.formatItemList(R,H,Q))}),Q.showGlobalOptions){let K=Q.visibleGlobalOptions($).map((R)=>{return Y(Q.styleOptionTerm(Q.optionTerm(R)),Q.styleOptionDescription(Q.optionDescription(R)))});X=X.concat(this.formatItemList("Global Options:",K,Q))}return this.groupItems($.commands,Q.visibleCommands($),(K)=>K.helpGroup()||"Commands:").forEach((K,R)=>{let H=K.map((T)=>{return Y(Q.styleSubcommandTerm(Q.subcommandTerm(T)),Q.styleSubcommandDescription(Q.subcommandDescription(T)))});X=X.concat(this.formatItemList(R,H,Q))}),X.join(`
|
|
3
|
+
`)}displayWidth($){return E6($).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($)),V=2,z=(this.helpWidth??80)-Q-V-2,K;if(z<this.minWidthToWrap||J.preformatted(Z))K=Z;else K=J.boxWrap(Z,z).replace(/\n/g,`
|
|
4
4
|
`+" ".repeat(Q+V));return X+G+" ".repeat(V)+K.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 V=[G.shift()],W=this.displayWidth(V[0]);G.forEach((z)=>{let K=this.displayWidth(z);if(W+K<=Q){V.push(z),W+=K;return}Y.push(V.join(""));let R=z.trimStart();V=[R],W=this.displayWidth(R)}),Y.push(V.join(""))}),Y.join(`
|
|
6
|
-
`)}}function
|
|
6
|
+
`)}}function E6($){let Q=/\x1b\[\d*(;\d*)*m/g;return $.replace(Q,"")}Y5.Help=O6;Y5.stripColor=E6});var A8=X$((W5)=>{var{InvalidArgumentError:z5}=W0();class A6{constructor($,Q){this.flags=$,this.description=Q||"",this.required=$.includes("<"),this.optional=$.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test($),this.mandatory=!1;let Z=K5($);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 z5(`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 q6(this.name().replace(/^no-/,""));return q6(this.name())}helpGroup($){return this.helpGroupHeading=$,this}is($){return this.short===$||this.long===$}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class D6{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 q6($){return $.split("-").reduce((Q,Z)=>{return Q+Z[0].toUpperCase()+Z.slice(1)})}function K5($){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],V=`option creation failed due to '${G}' in option flags '${$}'`;if(/^-[^-][^-]/.test(G))throw Error(`${V}
|
|
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(`${V}
|
|
10
10
|
- too many short flags`);if(Y.test(G))throw Error(`${V}
|
|
11
11
|
- too many long flags`);throw Error(`${V}
|
|
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}}
|
|
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}}W5.Option=A6;W5.DualOptions=D6});var C6=X$((L5)=>{function H5($,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 R5($,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 V=H5($,G),W=Math.max($.length,G.length);if((W-V)/W>X){if(V<Y)Y=V,J=[G];else if(V===Y)J.push(G)}}),J.sort((G,V)=>G.localeCompare(V)),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""}
|
|
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
|
|
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
|
|
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 V=this.getOptionValue(Z);if(Y!==null&&$.parseArg)Y=this._callParseArg($,Y,V,X);else if(Y!==null&&$.variadic)Y=$._collectValue(Y,V);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
|
|
14
|
+
(Did you mean ${J[0]}?)`;return""}L5.suggestSimilar=R5});var w6=X$((O5)=>{var _5=R$("node:events").EventEmitter,D8=R$("node:child_process"),L$=R$("node:path"),S0=R$("node:fs"),g=R$("node:process"),{Argument:N5,humanReadableArgName:B5}=k0(),{CommanderError:C8}=W0(),{Help:F5,stripColor:T5}=q8(),{Option:P6,DualOptions:j5}=A8(),{suggestSimilar:I6}=C6();class I8 extends _5{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)=>g.stdout.write(Q),writeErr:(Q)=>g.stderr.write(Q),outputError:(Q,Z)=>Z(Q),getOutHelpWidth:()=>g.stdout.isTTY?g.stdout.columns:void 0,getErrHelpWidth:()=>g.stderr.isTTY?g.stderr.columns:void 0,getOutHasColors:()=>P8()??(g.stdout.isTTY&&g.stdout.hasColors?.()),getErrHasColors:()=>P8()??(g.stderr.isTTY&&g.stderr.hasColors?.()),stripColor:(Q)=>T5(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(/([^ ]+) *(.*)/),V=this.createCommand(X);if(J)V.description(J),V._executableHandler=!0;if(Y.isDefault)this._defaultCommandName=V._name;if(V._hidden=!!(Y.noHelp||Y.hidden),V._executableFile=Y.executableFile||null,G)V.arguments(G);if(this._registerCommand(V),V.parent=this,V.copyInheritedSettings(this),J)return this;return V}createCommand($){return new I8($)}createHelp(){return Object.assign(new F5,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
|
+
- 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 N5($,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
|
+
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 C8($,Q,Z));g.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 P6($,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
|
+
- 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 V=this.getOptionValue(Z);if(Y!==null&&$.parseArg)Y=this._callParseArg($,Y,V,X);else if(Y!==null&&$.variadic)Y=$._collectValue(Y,V);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 P6)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=(V,W)=>{let z=G.exec(V);return z?z[0]:W},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(g.versions?.electron)Q.from="electron";let J=g.execArgv??[];if(J.includes("-e")||J.includes("--eval")||J.includes("-p")||J.includes("--print"))Q.from="eval"}if($===void 0)$=g.argv;this.rawArgs=$.slice();let Z;switch(Q.from){case void 0:case"node":this._scriptPath=$[1],Z=$.slice(2);break;case"electron":if(g.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.
|
|
18
18
|
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable($,Q,Z){if(S0.existsSync($))return;let J=Q?`searched for local subcommand relative to directory '${Q}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",Y=`'${$}' does not exist
|
|
19
19
|
- if '${Z}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
20
20
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
21
|
-
- ${J}`;throw Error(Y)}_executeSubCommand($,Q){Q=Q.slice();let Z=!1,J=[".js",".ts",".tsx",".mjs",".cjs"];function Y(z,K){let R=L$.resolve(z,K);if(S0.existsSync(R))return R;if(J.includes(L$.extname(K)))return;let H=J.find((T)=>S0.existsSync(`${R}${T}`));if(H)return`${R}${H}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let X=$._executableFile||`${this._name}-${$._name}`,G=this._executableDir||"";if(this._scriptPath){let z;try{z=S0.realpathSync(this._scriptPath)}catch{z=this._scriptPath}G=L$.resolve(L$.dirname(z),G)}if(G){let z=Y(G,X);if(!z&&!$._executableFile&&this._scriptPath){let K=L$.basename(this._scriptPath,L$.extname(this._scriptPath));if(K!==this._name)z=Y(G,`${K}-${$._name}`)}X=z||X}Z=J.includes(L$.extname(X));let V;if(g.platform!=="win32")if(Z)Q.unshift(X),Q=
|
|
21
|
+
- ${J}`;throw Error(Y)}_executeSubCommand($,Q){Q=Q.slice();let Z=!1,J=[".js",".ts",".tsx",".mjs",".cjs"];function Y(z,K){let R=L$.resolve(z,K);if(S0.existsSync(R))return R;if(J.includes(L$.extname(K)))return;let H=J.find((T)=>S0.existsSync(`${R}${T}`));if(H)return`${R}${H}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let X=$._executableFile||`${this._name}-${$._name}`,G=this._executableDir||"";if(this._scriptPath){let z;try{z=S0.realpathSync(this._scriptPath)}catch{z=this._scriptPath}G=L$.resolve(L$.dirname(z),G)}if(G){let z=Y(G,X);if(!z&&!$._executableFile&&this._scriptPath){let K=L$.basename(this._scriptPath,L$.extname(this._scriptPath));if(K!==this._name)z=Y(G,`${K}-${$._name}`)}X=z||X}Z=J.includes(L$.extname(X));let V;if(g.platform!=="win32")if(Z)Q.unshift(X),Q=x6(g.execArgv).concat(Q),V=D8.spawn(g.argv[0],Q,{stdio:"inherit"});else V=D8.spawn(X,Q,{stdio:"inherit"});else this._checkForMissingExecutable(X,G,$._name),Q.unshift(X),Q=x6(g.execArgv).concat(Q),V=D8.spawn(g.execPath,Q,{stdio:"inherit"});if(!V.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((K)=>{g.on(K,()=>{if(V.killed===!1&&V.exitCode===null)V.kill(K)})});let W=this._exitCallback;V.on("close",(z)=>{if(z=z??1,!W)g.exit(z);else W(new C8(z,"commander.executeSubCommandAsync","(close)"))}),V.on("error",(z)=>{if(z.code==="ENOENT")this._checkForMissingExecutable(X,G,$._name);else if(z.code==="EACCES")throw Error(`'${X}' not executable`);if(!W)g.exit(1);else{let K=new C8(1,"commander.executeSubCommandAsync","(error)");K.nestedError=z,W(K)}}),this.runningCommand=V}_dispatchSubcommand($,Q,Z){let J=this._findCommand($);if(!J)this.help({error:!0});J._prepareForParse();let Y;return Y=this._chainOrCallSubCommandHook(Y,J,"preSubcommand"),Y=this._chainOrCall(Y,()=>{if(J._executableHandler)this._executeSubCommand(J,Q.concat(Z));else return J._parseCommand(Q,Z)}),Y}_dispatchHelpCommand($){if(!$)this.help();let Q=this._findCommand($);if(Q&&!Q._executableHandler)Q.help();return this._dispatchSubcommand($,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach(($,Q)=>{if($.required&&this.args[Q]==null)this.missingArgument($.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let $=(Z,J,Y)=>{let X=J;if(J!==null&&Z.parseArg){let G=`error: command-argument value '${J}' is invalid for argument '${Z.name()}'.`;X=this._callParseArg(Z,J,Y,G)}return X};this._checkNumberOfArguments();let Q=[];this.registeredArguments.forEach((Z,J)=>{let Y=Z.defaultValue;if(Z.variadic){if(J<this.args.length){if(Y=this.args.slice(J),Z.parseArg)Y=Y.reduce((X,G)=>{return $(Z,G,X)},Z.defaultValue)}else if(Y===void 0)Y=[]}else if(J<this.args.length){if(Y=this.args[J],Z.parseArg)Y=$(Z,Y,Z.defaultValue)}Q[J]=Y}),this.processedArgs=Q}_chainOrCall($,Q){if($?.then&&typeof $.then==="function")return $.then(()=>Q());return Q()}_chainOrCallHooks($,Q){let Z=$,J=[];if(this._getCommandAndAncestors().reverse().filter((Y)=>Y._lifeCycleHooks[Q]!==void 0).forEach((Y)=>{Y._lifeCycleHooks[Q].forEach((X)=>{J.push({hookedCommand:Y,callback:X})})}),Q==="postAction")J.reverse();return J.forEach((Y)=>{Z=this._chainOrCall(Z,()=>{return Y.callback(Y.hookedCommand,this)})}),Z}_chainOrCallSubCommandHook($,Q,Z){let J=$;if(this._lifeCycleHooks[Z]!==void 0)this._lifeCycleHooks[Z].forEach((Y)=>{J=this._chainOrCall(J,()=>{return Y(this,Q)})});return J}_parseCommand($,Q){let Z=this.parseOptions(Q);if(this._parseOptionsEnv(),this._parseOptionsImplied(),$=$.concat(Z.operands),Q=Z.unknown,this.args=$.concat(Q),$&&this._findCommand($[0]))return this._dispatchSubcommand($[0],$.slice(1),Q);if(this._getHelpCommand()&&$[0]===this._getHelpCommand().name())return this._dispatchHelpCommand($[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(Q),this._dispatchSubcommand(this._defaultCommandName,$,Q);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(Z.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let J=()=>{if(Z.unknown.length>0)this.unknownOption(Z.unknown[0])},Y=`command:${this.name()}`;if(this._actionHandler){J(),this._processArguments();let X;if(X=this._chainOrCallHooks(X,"preAction"),X=this._chainOrCall(X,()=>this._actionHandler(this.processedArgs)),this.parent)X=this._chainOrCall(X,()=>{this.parent.emit(Y,$,Q)});return X=this._chainOrCallHooks(X,"postAction"),X}if(this.parent?.listenerCount(Y))J(),this._processArguments(),this.parent.emit(Y,$,Q);else if($.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",$,Q);if(this.listenerCount("command:*"))this.emit("command:*",$,Q);else if(this.commands.length)this.unknownCommand();else J(),this._processArguments()}else if(this.commands.length)J(),this.help({error:!0});else J(),this._processArguments()}_findCommand($){if(!$)return;return this.commands.find((Q)=>Q._name===$||Q._aliases.includes($))}_findOption($){return this.options.find((Q)=>Q.is($))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(($)=>{$.options.forEach((Q)=>{if(Q.mandatory&&$.getOptionValue(Q.attributeName())===void 0)$.missingMandatoryOptionValue(Q)})})}_checkForConflictingLocalOptions(){let $=this.options.filter((Z)=>{let J=Z.attributeName();if(this.getOptionValue(J)===void 0)return!1;return this.getOptionValueSource(J)!=="default"});$.filter((Z)=>Z.conflictsWith.length>0).forEach((Z)=>{let J=$.find((Y)=>Z.conflictsWith.includes(Y.attributeName()));if(J)this._conflictingOption(Z,J)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(($)=>{$._checkForConflictingLocalOptions()})}parseOptions($){let Q=[],Z=[],J=Q;function Y(z){return z.length>1&&z[0]==="-"}let X=(z)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(z))return!1;return!this._getCommandAndAncestors().some((K)=>K.options.map((R)=>R.short).some((R)=>/^-\d$/.test(R)))},G=null,V=null,W=0;while(W<$.length||V){let z=V??$[W++];if(V=null,z==="--"){if(J===Z)J.push(z);J.push(...$.slice(W));break}if(G&&(!Y(z)||X(z))){this.emit(`option:${G.name()}`,z);continue}if(G=null,Y(z)){let K=this._findOption(z);if(K){if(K.required){let R=$[W++];if(R===void 0)this.optionMissingArgument(K);this.emit(`option:${K.name()}`,R)}else if(K.optional){let R=null;if(W<$.length&&(!Y($[W])||X($[W])))R=$[W++];this.emit(`option:${K.name()}`,R)}else this.emit(`option:${K.name()}`);G=K.variadic?K:null;continue}}if(z.length>2&&z[0]==="-"&&z[1]!=="-"){let K=this._findOption(`-${z[1]}`);if(K){if(K.required||K.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${K.name()}`,z.slice(2));else this.emit(`option:${K.name()}`),V=`-${z.slice(2)}`;continue}}if(/^--[^=]+=/.test(z)){let K=z.indexOf("="),R=this._findOption(z.slice(0,K));if(R&&(R.required||R.optional)){this.emit(`option:${R.name()}`,z.slice(K+1));continue}}if(J===Q&&Y(z)&&!(this.commands.length===0&&X(z)))J=Z;if((this._enablePositionalOptions||this._passThroughOptions)&&Q.length===0&&Z.length===0){if(this._findCommand(z)){Q.push(z),Z.push(...$.slice(W));break}else if(this._getHelpCommand()&&z===this._getHelpCommand().name()){Q.push(z,...$.slice(W));break}else if(this._defaultCommandName){Z.push(z,...$.slice(W));break}}if(this._passThroughOptions){J.push(z,...$.slice(W));break}J.push(z)}return{operands:Q,unknown:Z}}opts(){if(this._storeOptionsAsProperties){let $={},Q=this.options.length;for(let Z=0;Z<Q;Z++){let J=this.options[Z].attributeName();$[J]=J===this._versionOptionName?this._version:this[J]}return $}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce(($,Q)=>Object.assign($,Q.opts()),{})}error($,Q){if(this._outputConfiguration.outputError(`${$}
|
|
22
22
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
23
23
|
`);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(`
|
|
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 g.env){let Q=$.attributeName();if(this.getOptionValue(Q)===void 0||["default","config","env"].includes(this.getOptionValueSource(Q)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,g.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new
|
|
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
|
|
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 g.env){let Q=$.attributeName();if(this.getOptionValue(Q)===void 0||["default","config","env"].includes(this.getOptionValueSource(Q)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,g.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new j5(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(),V=this.getOptionValue(G),W=this.options.find((K)=>K.negate&&G===K.attributeName()),z=this.options.find((K)=>!K.negate&&G===K.attributeName());if(W&&(W.presetArg===void 0&&V===!1||W.presetArg!==void 0&&V===W.presetArg))return W;return z||X},J=(X)=>{let G=Z(X),V=G.attributeName();if(this.getOptionValueSource(V)==="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=I6($,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=I6($,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
|
+
`),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 B5(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=L$.basename($,L$.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(g.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
|
|
27
|
+
`)}),this}_outputHelpIfRequested($){let Q=this._getHelpOption();if(Q&&$.find((J)=>Q.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function x6($){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 P8(){if(g.env.NO_COLOR||g.env.FORCE_COLOR==="0"||g.env.FORCE_COLOR==="false")return!1;if(g.env.FORCE_COLOR||g.env.CLICOLOR_FORCE!==void 0)return!0;return}O5.Command=I8;O5.useColor=P8});var f6=X$((C5)=>{var{Argument:k6}=k0(),{Command:x8}=w6(),{CommanderError:A5,InvalidArgumentError:S6}=W0(),{Help:D5}=q8(),{Option:y6}=A8();C5.program=new x8;C5.createCommand=($)=>new x8($);C5.createOption=($,Q)=>new y6($,Q);C5.createArgument=($,Q)=>new k6($,Q);C5.Command=x8;C5.Option=y6;C5.Argument=k6;C5.Help=D5;C5.CommanderError=A5;C5.InvalidArgumentError=S6;C5.InvalidOptionArgumentError=S6});import{tmpdir as u5}from"os";import{join as f0}from"path";import{readdirSync as g5,mkdirSync as c5,writeFileSync as m5,renameSync as l5}from"fs";function V0($){return f0(W$,`server-${$}.json`)}function i$($,Q,Z="/",J="127.0.0.1"){let Y=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,X=Z.replace(/^\/+/,"").replace(/\/+$/,""),G=X===""?"":`/${X}`;return{pid:process.pid,port:Q,device:$,url:`http://${Y}:${Q}`,streamUrl:`http://${Y}:${Q}${G}/helper/${$}/stream.mjpeg`,wsUrl:`ws://${Y}:${Q}${G}/helper/${$}/ws`}}function h6($){c5(W$,{recursive:!0});let Q=V0($.device),Z=`${Q}.${process.pid}.tmp`;m5(Z,JSON.stringify($,null,2)),l5(Z,Q)}function b0(){try{return g5(W$).filter(($)=>$.startsWith("server-")&&$.endsWith(".json")).map(($)=>f0(W$,$))}catch{return[]}}var W$,BX;var v0=s(()=>{W$=f0(u5(),"serve-sim"),BX=f0(W$,"server.json")});import{fileURLToPath as n5}from"url";import{dirname as i5}from"path";import{createServer as o5}from"http";import{createConnection as a5,createServer as c6}from"net";function u0($){return i5(n5($))}function I$($){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,$)}async function m6($){return new Promise((Q)=>{let Z=c6();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($)})}function r5($){let Q=$.indexOf(`\r
|
|
28
28
|
\r
|
|
29
29
|
`);if(Q===-1)return null;let Z=$.subarray(0,Q).toString("latin1").split(`\r
|
|
30
|
-
`),[J,Y,X]=(Z.shift()??"").split(" ");if(!J||!Y||!X?.startsWith("HTTP/"))return null;let G={};for(let V of Z){let W=V.indexOf(":");if(W===-1)continue;let z=V.slice(0,W).trim().toLowerCase(),K=V.slice(W+1).trim(),R=G[z];if(Array.isArray(R))R.push(K);else if(R!=null)G[z]=[R,K];else G[z]=K}return{method:J,url:Y,httpVersion:X.slice(5),headers:G,headEnd:Q+4}}function
|
|
30
|
+
`),[J,Y,X]=(Z.shift()??"").split(" ");if(!J||!Y||!X?.startsWith("HTTP/"))return null;let G={};for(let V of Z){let W=V.indexOf(":");if(W===-1)continue;let z=V.slice(0,W).trim().toLowerCase(),K=V.slice(W+1).trim(),R=G[z];if(Array.isArray(R))R.push(K);else if(R!=null)G[z]=[R,K];else G[z]=K}return{method:J,url:Y,httpVersion:X.slice(5),headers:G,headEnd:Q+4}}function t5($){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 s5($,Q,Z){let J=a5(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 e5($,Q){return c6((Z)=>{let J=Buffer.alloc(0),Y=(X)=>{if(J=Buffer.concat([J,X]),J.length>65536){Z.destroy();return}let G=r5(J);if(!G)return;Z.removeListener("data",Y);let V=new URL(G.url,"http://serve-sim.local").pathname,W=V==="/exec-ws"||V.endsWith("/exec-ws");if($.handleUpgrade&&t5(G.headers)&&!W){let z=J.subarray(G.headEnd),K={method:G.method,url:G.url,headers:G.headers,httpVersion:G.httpVersion,socket:Z};$.handleUpgrade(K,Z,z);return}s5(Z,J,Q)};Z.on("data",Y),Z.on("error",()=>Z.destroy())})}async function l6($){let Q=!!process.versions.bun,Z=o5({highWaterMark:5242880},async(X,G)=>{try{return await $.middleware(X,G,async()=>{if(!G.headersSent)G.statusCode=404;G.end("Not found")})}catch(V){if(console.error("Middleware error:",V),!G.headersSent)G.statusCode=500,G.end("Internal Server Error");else G.end()}});Z.keepAliveTimeout=0,Z.headersTimeout=0,Z.requestTimeout=0,Z.timeout=0,Z.on("upgrade",(X,G,V)=>{if($.middleware.handleUpgrade){$.middleware.handleUpgrade(X,G,V);return}G.destroy()}),await new Promise((X,G)=>{let V=(z)=>{Z.removeListener("listening",W),G(z)},W=()=>{Z.removeListener("error",V),X()};if(Z.once("error",V),Z.once("listening",W),Q)Z.listen(0,"127.0.0.1");else Z.listen($.port,$.host??"127.0.0.1")});let J=Z.address();if(!J||typeof J==="string")throw Z.close(),Error("Failed to bind preview HTTP server");let Y;if(Q){let X=e5($.middleware,J.port);Y=X,await new Promise((G,V)=>{let W=(K)=>{X.removeListener("listening",z),Z.close(()=>V(K))},z=()=>{X.removeListener("error",W),G()};X.once("error",W),X.once("listening",z),X.listen($.port,$.host??"127.0.0.1")})}return{stop:()=>{Z.close(),Y?.close()}}}var g0=()=>{};import{execSync as d6}from"child_process";function Q$(){try{let $=d6("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 o($){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=d6("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 c0=()=>{};import{execFile as TZ}from"child_process";import{existsSync as Z7}from"fs";import{join as v8,resolve as jZ}from"path";function u8($,Q){let Z=U$[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(qZ.has(J))return"on";if(AZ.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 V=$[G];if(V==="-d"||V==="--device"){if(G+1>=$.length)return{command:"get",json:J,error:`${V} requires a value`};Z=$[++G]}else if(V==="--json")J=!0;else Q.push(V)}if(Q.length===0||Q[0]==="status")return{command:"status",json:J,...Z?{device:Z}:{}};let Y=Q[0].toLowerCase();if(!U$[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=u8(Y,Q[1]);if(X===null){let G=U$[Y],V=[...G.values,...G.extraValues??[]].join("|");return{command:"set",option:Y,json:J,error:`invalid value for ${Y}: ${Q[1]} (accepted: ${V})`}}return{command:"set",option:Y,value:X,json:J,...Z?{device:Z}:{}}}function $7(){let $=[v8(h8,"..","dist","simax","serve-sim-ax-settings"),v8(h8,"simax","serve-sim-ax-settings")];for(let Q of $)if(Z7(Q))return jZ(Q);return null}function CZ(){return m0??=(async()=>{let $=$7();if($)return $;let Q=v8(h8,"..","Sources","SimAXSettings","build.sh");if(!Z7(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 g8("bash",[Q]);let Z=$7();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),m0.catch(()=>{m0=null}),m0}function g8($,Q){return new Promise((Z,J)=>{TZ($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function Y7($,Q,Z){let J=["simctl","ui",$,Q];if(Z!==void 0)J.push(Z);return g8("xcrun",J)}async function c8($,...Q){let Z=await CZ();return g8("xcrun",["simctl","spawn",$,Z,...Q])}function PZ($){return $==="enabled"?"on":"off"}function IZ($){return $==="on"?"enabled":"disabled"}async function X7($,Q){let Z=U$[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return c8($,"get",Q);let J=(await Y7($,Z.via)).toLowerCase();return Z.toggle?PZ(J):J}async function R0($,Q,Z){let J=U$[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await c8($,"set",Q,Z);return}await Y7($,J.via,J.toggle?IZ(Z):Z)}async function m8($){let Q=Object.entries(U$).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([c8($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>X7($,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(U$))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],G)=>{Y[X]=J[G]}),Y}async function G7($){if($.includes("-h")||$.includes("--help")){console.log(Q7);return}let Q=DZ($);if(Q.error)console.error(Q.error),console.error(Q7),process.exit(1);let Z=Q.device?o(Q.device):Q$();if(!Z)console.error("No booted simulator found. Boot one or pass -d <udid>."),process.exit(1);if(Q.command==="status"){let J=await m8(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 X7(Z,Q.option));return}await R0(Z,Q.option,Q.value)}var h8,J7,OZ,EZ,H0,qZ,AZ,U$,m0=null,Q7;var l8=s(()=>{c0();g0();h8=u0(import.meta.url),J7=["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"],OZ=["none","grayscale","red-green","green-red","blue-yellow"],EZ={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},H0=["on","off"],qZ=new Set(["on","true","enabled","1","yes"]),AZ=new Set(["off","false","disabled","0","no"]),U$={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:OZ,aliases:EZ},"text-size":{via:"content_size",values:J7,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:H0,toggle:!0},"increase-contrast":{via:"increase_contrast",values:H0,toggle:!0},"show-borders":{via:"ax",values:H0,toggle:!0},"reduce-transparency":{via:"ax",values:H0,toggle:!0},voiceover:{via:"ax",values:H0,toggle:!0}};Q7=`Usage: serve-sim ui [status] [--json] [-d udid]
|
|
31
31
|
serve-sim ui <option> [-d udid] Print the current value
|
|
32
32
|
serve-sim ui <option> <value> [-d udid] Change the value
|
|
33
33
|
|
|
@@ -36,43 +36,43 @@ Simulator-wide UI options:
|
|
|
36
36
|
liquid-glass clear | tinted
|
|
37
37
|
color-filter none | grayscale | red-green | green-red | blue-yellow
|
|
38
38
|
(protanopia/deuteranopia/tritanopia aliases accepted)
|
|
39
|
-
text-size ${
|
|
39
|
+
text-size ${J7.slice(0,4).join(" | ")} | …
|
|
40
40
|
(12 content-size categories, or increment | decrement)
|
|
41
41
|
reduce-motion on | off
|
|
42
42
|
increase-contrast on | off
|
|
43
43
|
show-borders on | off
|
|
44
44
|
reduce-transparency on | off
|
|
45
|
-
voiceover on | off`});var
|
|
45
|
+
voiceover on | off`});var K7=X$((lX,z7)=>{var a$=1000,r$=a$*60,t$=r$*60,w$=t$*24,xZ=w$*7,wZ=w$*365.25;z7.exports=function($,Q){Q=Q||{};var Z=typeof $;if(Z==="string"&&$.length>0)return kZ($);else if(Z==="number"&&isFinite($))return Q.long?yZ($):SZ($);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify($))};function kZ($){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*wZ;case"weeks":case"week":case"w":return Z*xZ;case"days":case"day":case"d":return Z*w$;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*t$;case"minutes":case"minute":case"mins":case"min":case"m":return Z*r$;case"seconds":case"second":case"secs":case"sec":case"s":return Z*a$;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function SZ($){var Q=Math.abs($);if(Q>=w$)return Math.round($/w$)+"d";if(Q>=t$)return Math.round($/t$)+"h";if(Q>=r$)return Math.round($/r$)+"m";if(Q>=a$)return Math.round($/a$)+"s";return $+"ms"}function yZ($){var Q=Math.abs($);if(Q>=w$)return l0($,Q,w$,"day");if(Q>=t$)return l0($,Q,t$,"hour");if(Q>=r$)return l0($,Q,r$,"minute");if(Q>=a$)return l0($,Q,a$,"second");return $+" ms"}function l0($,Q,Z,J){var Y=Q>=Z*1.5;return Math.round($/Z)+" "+J+(Y?"s":"")}});var p8=X$((pX,W7)=>{function fZ($){Z.debug=Z,Z.default=Z,Z.coerce=W,Z.disable=G,Z.enable=Y,Z.enabled=V,Z.humanize=K7(),Z.destroy=z,Object.keys($).forEach((K)=>{Z[K]=$[K]}),Z.names=[],Z.skips=[],Z.formatters={};function Q(K){let R=0;for(let H=0;H<K.length;H++)R=(R<<5)-R+K.charCodeAt(H),R|=0;return Z.colors[Math.abs(R)%Z.colors.length]}Z.selectColor=Q;function Z(K){let R,H=null,T,O;function q(...C){if(!q.enabled)return;let D=q,j=Number(new Date),F=j-(R||j);if(D.diff=F,D.prev=R,D.curr=j,R=j,C[0]=Z.coerce(C[0]),typeof C[0]!=="string")C.unshift("%O");let E=0;C[0]=C[0].replace(/%([a-zA-Z%])/g,(L,M)=>{if(L==="%%")return"%";E++;let U=Z.formatters[M];if(typeof U==="function"){let _=C[E];L=U.call(D,_),C.splice(E,1),E--}return L}),Z.formatArgs.call(D,C),(D.log||Z.log).apply(D,C)}if(q.namespace=K,q.useColors=Z.useColors(),q.color=Z.selectColor(K),q.extend=J,q.destroy=Z.destroy,Object.defineProperty(q,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(H!==null)return H;if(T!==Z.namespaces)T=Z.namespaces,O=Z.enabled(K);return O},set:(C)=>{H=C}}),typeof Z.init==="function")Z.init(q);return q}function J(K,R){let H=Z(this.namespace+(typeof R>"u"?":":R)+K);return H.log=this.log,H}function Y(K){Z.save(K),Z.namespaces=K,Z.names=[],Z.skips=[];let R=(typeof K==="string"?K:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let H of R)if(H[0]==="-")Z.skips.push(H.slice(1));else Z.names.push(H)}function X(K,R){let H=0,T=0,O=-1,q=0;while(H<K.length)if(T<R.length&&(R[T]===K[H]||R[T]==="*"))if(R[T]==="*")O=T,q=H,T++;else H++,T++;else if(O!==-1)T=O+1,q++,H=q;else return!1;while(T<R.length&&R[T]==="*")T++;return T===R.length}function G(){let K=[...Z.names,...Z.skips.map((R)=>"-"+R)].join(",");return Z.enable(""),K}function V(K){for(let R of Z.skips)if(X(K,R))return!1;for(let R of Z.names)if(X(K,R))return!0;return!1}function W(K){if(K instanceof Error)return K.stack||K.message;return K}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}W7.exports=fZ});var M7=X$((V7,p0)=>{V7.formatArgs=vZ;V7.save=hZ;V7.load=uZ;V7.useColors=bZ;V7.storage=gZ();V7.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`.")}})();V7.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 bZ(){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 vZ($){if($[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+$[0]+(this.useColors?"%c ":" ")+"+"+p0.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)}V7.log=console.debug||console.log||(()=>{});function hZ($){try{if($)V7.storage.setItem("debug",$);else V7.storage.removeItem("debug")}catch(Q){}}function uZ(){let $;try{$=V7.storage.getItem("debug")||V7.storage.getItem("DEBUG")}catch(Q){}if(!$&&typeof process<"u"&&"env"in process)$=process.env.DEBUG;return $}function gZ(){try{return localStorage}catch($){}}p0.exports=p8()(V7);var{formatters:cZ}=p0.exports;cZ.j=function($){try{return JSON.stringify($)}catch(Q){return"[UnexpectedJSONParseError]: "+Q.message}}});var U7=X$((R7,n0)=>{var aZ=R$("tty"),d0=R$("util");R7.init=Z1;R7.log=eZ;R7.formatArgs=tZ;R7.save=$1;R7.load=Q1;R7.useColors=rZ;R7.destroy=d0.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");R7.colors=[6,2,3,4,5,1];try{let $=(()=>{throw new Error("Cannot require module "+"supports-color");})();if($&&($.stderr||$).level>=2)R7.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($){}R7.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 rZ(){return"colors"in R7.inspectOpts?Boolean(R7.inspectOpts.colors):aZ.isatty(process.stderr.fd)}function tZ($){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
|
-
`+X),$.push(Y+"m+"+
|
|
48
|
-
`)}function
|
|
49
|
-
`).map((Q)=>Q.trim()).join(" ")};
|
|
50
|
-
`);if(H<0)return;try{K(void 0,
|
|
51
|
-
`)})}function
|
|
47
|
+
`+X),$.push(Y+"m+"+n0.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=sZ()+Q+" "+$[0]}function sZ(){if(R7.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function eZ(...$){return process.stderr.write(d0.formatWithOptions(R7.inspectOpts,...$)+`
|
|
48
|
+
`)}function $1($){if($)process.env.DEBUG=$;else delete process.env.DEBUG}function Q1(){return process.env.DEBUG}function Z1($){$.inspectOpts={};let Q=Object.keys(R7.inspectOpts);for(let Z=0;Z<Q.length;Z++)$.inspectOpts[Q[Z]]=R7.inspectOpts[Q[Z]]}n0.exports=p8()(R7);var{formatters:H7}=n0.exports;H7.o=function($){return this.inspectOpts.colors=this.useColors,d0.inspect($,this.inspectOpts).split(`
|
|
49
|
+
`).map((Q)=>Q.trim()).join(" ")};H7.O=function($){return this.inspectOpts.colors=this.useColors,d0.inspect($,this.inspectOpts)}});var _7=X$((iX,d8)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)d8.exports=M7();else d8.exports=U7()});var U0,n8,i8,V$,_0;var o8=s(()=>{U0=B6(_7(),1),n8=U0.default("serve-sim:cli"),i8=U0.default("serve-sim:helper"),V$=U0.default("serve-sim:state"),_0=U0.default("serve-sim:mw")});import{createHash as L1}from"crypto";import{existsSync as q7,readFileSync as A7}from"fs";import{join as r8}from"path";function N0($){return r8(T$,`${$}.pid`)}function o0($){return r8(T$,`${$}.bundles.json`)}function a0($){return`/tmp/serve-sim-cam-${L1("sha1").update($).digest("hex").slice(0,12)}.sock`}function _1($){try{return process.kill($,0),!0}catch{return!1}}function t8($){try{let Q=Number(A7(N0($),"utf-8").trim());return Number.isInteger(Q)&&Q>0?Q:null}catch{return null}}function N1($){if(!$||typeof $!=="object"||Array.isArray($))throw Error("invalid camera helper reply");return $}async function s$($,Q){let Z=a0($);if(!q7(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 V="",W=!1,z,K=(R,H)=>{if(W)return;if(W=!0,z)clearTimeout(z);if(R)X(R);else Y(H??{})};G.on("data",(R)=>{V+=R;let H=V.indexOf(`
|
|
50
|
+
`);if(H<0)return;try{K(void 0,N1(JSON.parse(V.slice(0,H))))}catch(T){K(T)}G.end()}),G.on("error",K),G.on("close",()=>K(Error("socket closed"))),z=setTimeout(()=>{G.destroy(),K(Error("helper timeout"))},U1),G.write(JSON.stringify(Q)+`
|
|
51
|
+
`)})}function B0($){let Q=t8($);return Q!==null&&_1(Q)&&q7(a0($))}function r0($){let Q;try{let J=JSON.parse(A7(o0($),"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=t8($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function t0($){if(!B0($))return{udid:$,alive:!1};let Q=t8($),Z=r0($);try{return{...await s$($,{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 T$,U1=3000;var s8=s(()=>{v0();T$=r8(W$,"simcam")});function s0($){return["simctl","bootstatus",$]}var $Q="Accessibility unavailable on this simulator.";import{createRequire as B1}from"module";import{dirname as QQ,join as ZQ}from"path";import{existsSync as F1}from"fs";import{fileURLToPath as D7}from"url";function A1(){let $=[ZQ(QQ(process.execPath),"native","serve-sim-native.node"),ZQ(QQ(D7(import.meta.url)),"native","serve-sim-native.node"),ZQ(QQ(D7(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let Q of $)if(F1(Q))return Q;throw Error(`serve-sim-native.node not found. Looked in:
|
|
52
52
|
${$.join(`
|
|
53
53
|
`)}
|
|
54
|
-
Run \`bun run build.ts\` to build the native addon.`)}function
|
|
54
|
+
Run \`bun run build.ts\` to build the native addon.`)}function e0(){if(!JQ)JQ=T1(A1());return JQ}class YQ{handle;constructor($){this.handle=new(e0()).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 XQ{handle;constructor($){this.handle=new(e0()).SimCapture($)}start(){return this.handle.start()}subscribeMjpeg($){return this.handle.subscribe(j1,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J})})}subscribeAvcc($){return this.handle.subscribe(O1,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J,isDescription:(Y&E1)!==0,isKeyframe:(Y&q1)!==0})})}stop(){return this.handle.stop()}}function $8($){return e0().axDescribe($)}function Q8($){return e0().axFrontmost($)}var T1,j1=0,O1=1,E1=1,q1=2,F0,JQ;var Z8=s(()=>{T1=B1(import.meta.url),F0={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4}});function P1($){return $[0]?.frame??{x:0,y:0,width:1,height:1}}function I1($,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 x1($){let Q=P1($),Z=[],J=(Y,X)=>{if(Z.length>=GQ)return;let G=Y.frame;if(!I1(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 W=0;W<Y.children.length&&Z.length<GQ;W++)J(Y.children[W],`${X}.${W}`)};for(let Y=0;Y<$.length&&Z.length<GQ;Y++)J($[Y],String(Y));return{screen:{width:Q.width,height:Q.height},elements:Z}}async function w1($){let Q;try{Q=JSON.parse(await $8($))}catch{return{screen:{width:1,height:1},elements:[],errors:[$Q]}}return x1(Q)}function k1($){return $?.errors?.includes($Q)??!1}function S1($){return $.elements.length>0&&$.screen.width>1&&$.screen.height>1}async function y1($){let Q=[];try{let Z=await w1($);if(Z.errors?.length)return Z;if(!S1(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 f1($){return`data: ${JSON.stringify($)}
|
|
55
55
|
|
|
56
|
-
`}function
|
|
56
|
+
`}function b1({udid:$}){let Q=new Set,Z=null,J=null,Y=C7,X=!1,G=!1,V=()=>{if(G||Q.size===0||Z)return;Z=setTimeout(W,Y)},W=async()=>{if(Z=null,G||X||Q.size===0){V();return}X=!0;try{let z=await y1($),K=f1(z);if(K!==J){for(let R of Q)R.write(K);Y=C7}else Y=Math.min(Y*2,D1);if(J=K,k1(z))Y=C1}finally{X=!1,V()}};return{addClient(z){if(G)return()=>{};if(Q.add(z),J)z.write(J);return W(),()=>{if(Q.delete(z),Q.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(G)return;if(G=!0,Z)clearTimeout(Z),Z=null;Q.clear(),J=null}}}function P7(){let $=new Map;return{get(Q){let Z=$.get(Q);if(Z)return Z;let J=b1({udid:Q});return $.set(Q,J),J},prune(Q){let Z=Q instanceof Set?Q:new Set(Q);for(let[J,Y]of $)if(!Z.has(J))Y.dispose(),$.delete(J)},size(){return $.size}}}var GQ=500,C7=500,D1=2000,C1=15000;var I7=s(()=>{Z8()});function w7($){for(let Q of KQ)try{Q($)}catch{}}function j$($){let Q={...$,id:h1++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(_$.push(Q),_$.length>500)_$=_$.slice(_$.length-500);return w7(Q),Q}function VQ($,Q,Z={}){let J=_$.findIndex((X)=>X.id===$);if(J<0)return null;let Y={..._$[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(_$[J]=Y,Z.notify!==!1)w7(Y);return Y}function MQ($={}){let{device:Q,sinceId:Z}=$,J=u1($.limit),Y=_$.filter((X)=>{if(Q&&X.device!==Q)return!1;if(Z!=null&&X.id<=Z)return!1;return!0});return Y.slice(Math.max(0,Y.length-J))}function k7($){return KQ.add($),()=>KQ.delete($)}function S7($,Q,Z,J){let Y=g1(Z);if(!Y)return null;switch(Q){case 3:{let X=S$(Y.type),G=e$(Y.x),V=e$(Y.y);if(!X||G==null||V==null)return null;return{device:$,source:"hid",kind:"touch",action:X,summary:`Touch ${X} ${$0(G,V)}`,details:zQ({...Y,x:G,y:V},J)}}case 4:{let X=S$(Y.button);if(!X)return null;let G=S$(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:X,summary:G==="press"?`Button ${X}`:`Button ${X} ${G}`,details:{...Y,phase:G}}}case 5:{let X=S$(Y.type);if(!X)return null;return{device:$,source:"hid",kind:"multi-touch",action:X,summary:`Multi-touch ${X}`,details:zQ(Y,J)}}case 6:{let X=S$(Y.type),G=e$(Y.usage);if(!X||G==null)return null;let V=m1(G),W=l1(G),z={...Y};if(W)delete z.usage,z.key="character",z.redacted=!0;else z.usage=G,z.key=V;return{device:$,source:"hid",kind:"key",action:X,summary:W?`Key ${X} character`:`Key ${X} ${V}`,details:z}}case 7:{let X=S$(Y.orientation);if(!X)return null;return{device:$,source:"hid",kind:"rotate",action:X,summary:`Rotate ${X}`,details:Y}}case 8:{let X=S$(Y.option),G=c1(Y.enabled);if(!X||G==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:X,summary:`CoreAnimation ${X} ${G?"on":"off"}`,details:{...Y,enabled:G}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let X=e$(Y.delta);if(X==null)return null;return{device:$,source:"hid",kind:"digital-crown",action:"rotate",summary:`Digital Crown ${X>0?"up":"down"}`,details:{...Y,delta:X}}}case 11:{let X=e$(Y.dx),G=e$(Y.dy);if(X==null||G==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${p1(X,G)}`,details:zQ({...Y,dx:X,dy:G},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};default:return null}}function y7($,Q){let Z=n1($);if(Z.length===0)return null;if(i1(Z))return null;let J=f7(Q?.exitCode),Y=d1(Q),X=o1(Z);if(X){let{verb:V,args:W}=X;if(V==="install"&&W.length>=2){let[z]=W;return{device:z,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(V==="addmedia"&&W.length>=2){let[z]=W;return{device:z,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(V==="launch"&&W.length>=2){let[z,K]=W,R=K==="com.apple.springboard";return{device:z,source:"exec",kind:R?"button":"app",action:R?"home":"launch",status:J,summary:R?"Home":`Launch ${K}`,details:{...Y,bundleId:K}}}if(V==="terminate"&&W.length>=2){let[z,K]=W;return{device:z,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${K}`,details:{...Y,bundleId:K}}}if(V==="io"&&W.length>=2&&W[1]==="screenshot")return{device:W[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let G=a1(Z);if(G){let{verb:V,args:W}=G,z=r1(W);if(V==="button"){let K=T0(W)??"home";return{device:z,source:"exec",kind:"button",action:K,status:J,summary:`Button ${K}`,details:Y}}if(V==="tap"){let[K,R]=W;return{device:z,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${$0(Number(K),Number(R))}`,details:Y}}if(V==="gesture")return{device:z,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(V==="rotate"){let K=T0(W);return{device:z,source:"exec",kind:"rotate",action:K,status:J,summary:K?`Rotate ${K}`:"Rotate",details:Y}}if(V==="memory-warning")return{device:z,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(V==="ca-debug"){let K=T0(W),R=W.find((H)=>H==="on"||H==="off");return{device:z,source:"exec",kind:"ca-debug",action:K,status:J,summary:`CoreAnimation ${K??"debug"}${R?` ${R}`:""}`,details:Y}}if(V==="camera"){let K=s1(W);if(K==="status"||K==="list-webcams")return null;return{device:z,source:"exec",kind:"camera",action:K??"start",status:J,summary:K?`Camera ${K}`:"Camera",details:Y}}if(V==="ui"){let K=T0(W);return{device:z,source:"exec",kind:"ui-setting",action:K,status:J,summary:K?`UI ${K}`:"UI setting",details:Y}}}if(Z[0]==="osascript"&&$.includes('menu item "Home"'))return{source:"exec",kind:"button",action:"home",status:J,summary:"Home",details:Y};return null}function u1($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function g1($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function S$($){return typeof $==="string"&&$.length>0?$:null}function e$($){return typeof $==="number"&&Number.isFinite($)?$:null}function c1($){return typeof $==="boolean"?$:null}function m1($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return v1[$]??`usage ${$}`}function l1($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function zQ($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function $0($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${WQ($)},${WQ(Q)}`}function p1($,Q){return`${x7($)},${x7(Q)}`}function WQ($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function x7($){let Q=WQ($);return $>0?`+${Q}`:Q}function f7($){if($==null)return;return $===0?"ok":"error"}function d1($){return f7($?.exitCode)?{exitCode:$?.exitCode}:{}}function n1($){let Q=[],Z="",J=null,Y=!1;for(let X of $){if(Y){Z+=X,Y=!1;continue}if(X==="\\"&&J!=="'"){Y=!0;continue}if((X==="'"||X==='"')&&J===null){J=X;continue}if(X===J){J=null;continue}if(/\s/.test(X)&&J===null){if(Z)Q.push(Z),Z="";continue}Z+=X}if(Z)Q.push(Z);return Q}function i1($){if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("echo "))return!0;if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("rm -f "))return!0;if($[0]==="rm"&&$[1]==="-f")return!0;return!1}function o1($){let Q=$.findIndex((J)=>J==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function a1($){let Q=$.findIndex((J)=>J==="serve-sim"||/(?:^|\/)serve-sim(?:\.js)?$/.test(J));if(Q<0)return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function r1($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function T0($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if(Z==="-d"||Z==="--device"){Q++;continue}if(Z.startsWith("-"))continue;return Z}return}function t1($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return T0($)}function s1($){let Q=t1($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var v1,h1=1,_$,KQ;var HQ=s(()=>{v1={40:"Enter",41:"Escape",42:"Backspace",43:"Tab",44:"Space",45:"-",46:"=",47:"[",48:"]",49:"\\",50:"#",51:";",52:"'",53:"`",54:",",55:".",56:"/",57:"CapsLock",58:"F1",59:"F2",60:"F3",61:"F4",62:"F5",63:"F6",64:"F7",65:"F8",66:"F9",67:"F10",68:"F11",69:"F12",70:"PrintScreen",71:"ScrollLock",72:"Pause",73:"Insert",74:"Home",75:"PageUp",76:"Delete",77:"End",78:"PageDown",79:"ArrowRight",80:"ArrowLeft",81:"ArrowDown",82:"ArrowUp",83:"NumLock",84:"NumpadDivide",85:"NumpadMultiply",86:"NumpadSubtract",87:"NumpadAdd",88:"NumpadEnter",89:"Numpad1",90:"Numpad2",91:"Numpad3",92:"Numpad4",93:"Numpad5",94:"Numpad6",95:"Numpad7",96:"Numpad8",97:"Numpad9",98:"Numpad0",99:"NumpadDecimal",224:"ControlLeft",225:"ShiftLeft",226:"AltLeft",227:"MetaLeft",228:"ControlRight",229:"ShiftRight",230:"AltRight",231:"MetaRight"},_$=[],KQ=new Set});function J8($){return`Drag ${$0($.startX,$.startY)} -> ${$0($.lastX,$.lastY)}`}function v7($){let Q=$.lastX-$.startX,Z=$.lastY-$.startY;return Math.hypot(Q,Z)>Z2}function h7($){return{startX:$.x,startY:$.y,lastX:$.x,lastY:$.y,moveCount:0,edge:$.edge}}function J2($){return Buffer.from(`--frame\r
|
|
57
57
|
Content-Type: image/jpeg\r
|
|
58
58
|
Content-Length: ${$}\r
|
|
59
59
|
\r
|
|
60
|
-
`,"ascii")}function
|
|
61
|
-
`,"ascii");Z1={portrait:B0.portrait,portrait_upside_down:B0.portraitUpsideDown,landscape_left:B0.landscapeLeft,landscape_right:B0.landscapeRight};Z8=new Map});import{execFileSync as J8}from"child_process";import{createHash as d9}from"crypto";import{existsSync as e,mkdirSync as n9,readdirSync as J1,readFileSync as B$,renameSync as i9,statSync as o9,unlinkSync as u9}from"fs";import{tmpdir as a9}from"os";import{basename as r9,dirname as jQ,join as p}from"path";import{inflateSync as Y1}from"zlib";function G8($){return $.startsWith(g9)?$.slice(g9.length):$}function OQ($){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]),V=Math.abs(X-J),W=Math.abs(G-Y);return V>0&&W>0?{width:V,height:W}:null}function G1($,Q){let Z=j1($);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=p(Y,`${J}.pdf`);if(!e(X))return null;let G=OQ(B$(X));if(!G)return null;let V=E1(Q);return{width:G.width/V,height:G.height/V}}function t9($){let Q=qQ($),Z=Q;if(_Q.has(Z))return _Q.get(Z)??null;let J=V1(Q);return _Q.set(Z,J),J}function e9($){let Q=qQ($);if(NQ.has(Q))return NQ.get(Q)??null;let Z=z1($);return NQ.set(Q,Z),Z}function z1($){let Q=H1($),Z=Q?J4(Q):null,J=R1(Z)??L1($.name);if(!J)return null;let Y=Z4(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function $4($,Q){let Z=G8($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){Q0(Q,400,"Invalid chrome asset request");return}let Y=G4(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){Q0(Q,404,"Chrome asset not found");return}let X=AQ(Z,J);if(!e(X)){Q0(Q,404,"Chrome asset not found");return}try{let G=z4(Z,J,X),V=B$(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(V.byteLength)}),Q.end(V)}catch(G){Q0(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function Q4($,Q){let Z=$.searchParams.get("name")??"";try{let J=Z4(Z);if(!J){Q0(Q,404,"Placeholder asset not found");return}let Y=B$(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){Q0(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function Z4($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(FQ.has($))return FQ.get($)??null;let Q=K1($),Z=Q?O1($,Q):null;return FQ.set($,Z),Z}function K1($){let Z=W1($)?.paths.find((Y)=>e(Y));if(Z)return Z;if(!X4().some((Y)=>Y.iconName===$))return null;let J=p(E$,`${$}.icns`);return e(J)?J:null}function W1($){return Object.prototype.hasOwnProperty.call(l9,$)?l9[$]:null}function V1($){let Q=Y4($);if(!e(Q))return null;let Z=J4(Q);if(!Z?.chromeIdentifier)return null;let J=G4(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=TQ(J.identifier,J.compositeImage);let X=J.compositeImage?D1(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?A1(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 V=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},W={x:J.devicePadding.left,y:J.devicePadding.top,width:V.width,height:V.height},z={width:V.width+J.devicePadding.left+J.devicePadding.right,height:V.height+J.devicePadding.top+J.devicePadding.bottom},K={x:W.x+(V.width-G.width)/2,y:W.y+(V.height-G.height)/2,width:G.width,height:G.height},R=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,H=J.slice?TQ(J.identifier,J.slice.topLeft):null,T=J.identifier.startsWith("watch"),E=J.buttons.flatMap((q)=>{let C=TQ(J.identifier,q.image);if(!C)return[];let D=B1(q,C,V,J.devicePadding),j={x:C.width>0?(q.rolloverOffset.x-q.normalOffset.x)/C.width:0,y:C.height>0?(q.rolloverOffset.y-q.normalOffset.y)/C.height:0};return[{name:q.name,image:q.image,imageDown:q.imageDown,onTop:q.onTop||T,frame:{...D,...C},hover:j,usagePage:q.usagePage,usage:q.usage}]});return{identifier:J.identifier,frame:z,body:W,screen:K,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:R,compositeImage:J.compositeImage,slice:J.slice,corner:H,buttons:E}}function J4($){let Q=Y8($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?G8(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?G1({...Q,__profileDir:jQ($)},J):null,framebufferMaskSize:M1({...Q,__profileDir:jQ($)})}}function M1($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=p(Z,`${Q}.pdf`);if(!e(J))return null;return OQ(B$(J))}function qQ($){return F1($.deviceTypeIdentifier)??$.name}function H1($){let Q=Y4(qQ($));return e(Q)?Q:null}function Y4($){return p(EQ,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function R1($){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 X4())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function L1($){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 X4(){if(BQ)return BQ;let $=Y8(p(E$,"MobileDevices-Info.plist"))??Y8(p(jQ(E$),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=G$(J),X=a(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=p(E$,X);if(!e(G))continue;let W=G$(Y.UTTypeTagSpecification)["com.apple.device-model-code"],z=Array.isArray(W)?W.filter((K)=>typeof K==="string"&&K.length>0):[];if(z.length===0)continue;Z.push({description:a(Y.UTTypeDescription)??"",iconFile:X,iconName:r9(X,".icns"),modelCodes:z})}return BQ=Z,Z}function G4($){let Q=G8($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(UQ.has(Q))return UQ.get(Q)??null;let Z=p(s9,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(B$(Z,"utf-8"));J=U1(Y)}catch{J=null}return UQ.set(Q,J),J}function U1($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=G8(Q),J=G$($.images),Y=G$(J.sizing),X=G$($.paths),G=N$(G$(X.simpleOutsideBorder).cornerRadiusX),V={top:N$(Y.topHeight),left:N$(Y.leftWidth),bottom:N$(Y.bottomHeight),right:N$(Y.rightWidth)},W=G$(J.devicePadding),z={top:N$(W.top),left:N$(W.left),bottom:N$(W.bottom),right:N$(W.right)},K=typeof J.composite==="string"?J.composite:null,R=_1(J),H=Array.isArray($.inputs)?$.inputs.flatMap((E)=>{let q=N1(G$(E));return q?[q]:[]}):[],T=new Set;for(let E of Object.values(J))if(typeof E==="string")T.add(E);for(let E of H)T.add(E.image);if(Array.isArray($.inputs))for(let E of $.inputs){let q=G$(E);if(typeof q.imageDown==="string")T.add(q.imageDown)}return{identifier:Z,insets:V,devicePadding:z,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(V.left,V.top),0),compositeImage:K,slice:R,buttons:H,allowedImages:T}}function _1($){let Q=a($.topLeft),Z=a($.top),J=a($.topRight),Y=a($.right),X=a($.bottomRight),G=a($.bottom),V=a($.bottomLeft),W=a($.left);if(!Q||!Z||!J||!Y||!X||!G||!V||!W)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:V,left:W}}function N1($){let Q=a($.name),Z=a($.image);if(!Q||!Z)return null;let J=a($.anchor),Y=a($.align),X=G$($.offsets),G=p9(G$(X.normal)),V=p9(G$(X.rollover));return{name:Q,image:Z,imageDown:a($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??V??{x:0,y:0},rolloverOffset:V??G??{x:0,y:0},usagePage:O$($.usagePage),usage:O$($.usage)}}function B1($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,V=2*$.normalOffset.y-$.rolloverOffset.y,W=$.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+V};case"top":return{x:W,y:X+V-Q.height};case"bottom":return{x:W,y:X+Z.height+V}}}function F1($){if(!$)return null;if(!LQ)LQ=T1();return LQ.get($)??null}function T1(){let $=new Map;try{for(let Q of J1(EQ)){if(!Q.endsWith(".simdevicetype"))continue;let Z=p(EQ,Q),J=Y8(p(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:r9(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function Y8($){try{let Q=J8("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function j1($){let Q=O$($.mainScreenWidth),Z=O$($.mainScreenHeight),J=O$($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function E1($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function TQ($,Q){let Z=AQ($,Q);if(!e(Z))return null;return OQ(B$(Z))}function AQ($,Q){return p(s9,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function z4($,Q,Z){n9(c9,{recursive:!0});let J=o9(Z),Y=d9("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=p(c9,`${$}-${Y}.png`);if(e(X))return X;let G=`${X}.${process.pid}.tmp`;return J8("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),i9(G,X),X}function O1($,Q){n9(m9,{recursive:!0});let Z=o9(Q),J=d9("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=p(m9,`${$}-${J}.png`);if(e(Y)){let V=X8(B$(Y));return{sourcePath:Q,pngPath:Y,width:V.width,height:V.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{J8("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let V=B$(G),W=q1(V)??{x:0,y:0,...X8(V)};return J8("sips",["-c",String(W.height),String(W.width),"--cropOffset",String(W.y),String(W.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),i9(X,Y),{sourcePath:Q,pngPath:Y,width:W.width,height:W.height}}finally{try{if(e(G))u9(G)}catch{}try{if(e(X))u9(X)}catch{}}}function X8($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function K4($,Q){let{width:Z,height:J}=X8($),Y=8,X=0,G=0,V=[];while(Y<$.byteLength){let q=$.readUInt32BE(Y);Y+=4;let C=$.toString("ascii",Y,Y+4);Y+=4;let D=$.subarray(Y,Y+q);if(Y+=q+4,C==="IHDR")X=D[8]??0,G=D[9]??0;else if(C==="IDAT")V.push(D);else if(C==="IEND")break}let W=G===6?4:G===4?2:0;if(X!==8||W===0||V.length===0)return null;let z=G===6,K=Y1(Buffer.concat(V)),R=Z*W,H=new Uint8Array(Z*J),T=Buffer.alloc(R),E=0;for(let q=0;q<J;q++){let C=K[E++]??0,D=Buffer.from(K.subarray(E,E+R));E+=R,P1(D,T,W,C);for(let j=0;j<Z;j++){let F=j*W,O=D[F]??0,B=z?D[F+1]??0:O,L=z?D[F+2]??0:O,M=D[F+W-1]??0;if(Q(O,B,L,M))H[q*Z+j]=1}T=D}return{width:Z,height:J,mask:H}}function q1($){let{width:Q,height:Z}=X8($),J=K4($,(W,z,K,R)=>R>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,V=-1;for(let W=0;W<Z;W++)for(let z=0;z<Q;z++){if(!J.mask[W*Q+z])continue;if(z<Y)Y=z;if(W<X)X=W;if(z>G)G=z;if(W>V)V=W}if(G<Y||V<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:V-X+1}}function A1($,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 D1($,Q){let Z=C1($,Q);if(!Z)return null;let J=K4(Z,(j,F,O,B)=>B>200&&j<30&&F<30&&O<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,V=Math.floor(Y/2),W=Math.floor(X/2),z=(j,F)=>j>=0&&F>=0&&j<Y&&F<X&&G[F*Y+j]===1;if(!z(V,W))return null;let K=V;while(K>0&&z(K-1,W))K--;let R=V;while(R<Y-1&&z(R+1,W))R++;let H=W;while(H>0&&z(V,H-1))H--;let T=W;while(T<X-1&&z(V,T+1))T++;let E=T-H,q=(j,F)=>{let O=0;while(O<E&&!z(j,F?H+O:T-O))O++;return O},C=[q(K,!0),q(R,!0),q(K,!1),q(R,!1)],D=C.reduce((j,F)=>j+F,0)/C.length;return{x:K,y:H,width:R-K+1,height:T-H+1,radius:D}}function C1($,Q){let Z=AQ($,Q);if(!e(Z))return null;try{return B$(z4($,Q,Z))}catch{return null}}function P1($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,V=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]+I1(X,G,V)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function I1($,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 Q0($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function N$($){return O$($)??0}function O$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function a($){return typeof $==="string"&&$?$:null}function G$($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function p9($){let Q=O$($.x),Z=O$($.y);return Q===null||Z===null?null:{x:Q,y:Z}}var EQ="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",s9="/Library/Developer/DeviceKit/Chrome",g9="com.apple.dt.devicekit.chrome.",c9,m9,E$="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",X1="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",l9,LQ=null,UQ,_Q,NQ,BQ=null,FQ;var W4=t(()=>{c9=p(a9(),"serve-sim-devicekit-chrome"),m9=p(a9(),"serve-sim-device-placeholder-assets"),l9={"vision-pro":{paths:[p(E$,"com.apple.vision-pro.icns"),p(X1,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[p(E$,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[p(E$,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[p(E$,"com.apple.ipad-air-m3-1.icns")]}},UQ=new Map,_Q=new Map,NQ=new Map,FQ=new Map});import{exec as x1}from"child_process";import{createHash as V4,timingSafeEqual as w1}from"crypto";import{request as S1}from"http";import{WebSocketServer as k1}from"ws";function b1($,Q){let Z=V4("sha256").update($).digest(),J=V4("sha256").update(Q).digest();return w1(Z,J)}function v1($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(z)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(z))},V=setTimeout(()=>{if(!J)$.close()},y1);V.unref?.();let W=(z,K)=>{if(Y.has(z))return;let R=K.split("?")[0];if(!K.startsWith("/")||!X.some((T)=>R===T)){G({sub:z,end:!0,error:"path not allowed"});return}if(!Q){G({sub:z,end:!0,error:"no local port"});return}let H=S1({host:"127.0.0.1",port:Q,path:K,headers:{accept:"text/event-stream"}},(T)=>{T.on("data",(E)=>G({sub:z,data:E.toString("utf-8")})),T.on("end",()=>{Y.delete(z),G({sub:z,end:!0})})});H.on("error",()=>{Y.delete(z),G({sub:z,end:!0})}),H.end(),Y.set(z,{destroy:()=>H.destroy()})};$.on("message",(z)=>{let K;try{K=JSON.parse(z.toString())}catch{return}if(!J){if(typeof K.token==="string"&&b1(K.token,Z.execToken))J=!0,clearTimeout(V),G({ready:!0});else $.close();return}if(typeof K.unsub==="number"){Y.get(K.unsub)?.destroy(),Y.delete(K.unsub);return}if(typeof K.sub==="number"&&typeof K.path==="string"){W(K.sub,K.path);return}if(typeof K.id==="number"&&K.ui!==void 0){let{id:T}=K;if(!Z.onUiRequest){G({id:T,error:"ui requests not supported"});return}Z.onUiRequest(K.ui).then((E)=>G({id:T,...E})).catch((E)=>G({id:T,error:E instanceof Error?E.message:String(E)}));return}if(typeof K.id!=="number"||typeof K.command!=="string"||!K.command)return;let{id:R,command:H}=K;x1(H,{maxBuffer:16777216},(T,E,q)=>{let C={id:R,stdout:E.toString(),stderr:q.toString(),exitCode:T?T.code??1:0};try{Z.onCommandResult?.(H,C)}catch{}G(C)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(V);for(let z of Y.values())z.destroy();Y.clear()})}function M4($){let Q=new k1({noServer:!0,maxPayload:f1});return function(J,Y,X){let G=J.url??"",V=G.indexOf("?"),W=V===-1?G:G.slice(0,V);if(W!==$.path&&W!==`${$.path}/`)return!1;let z=J.headers.origin;if(z)try{if(new URL(z).host!==J.headers.host)return Y.destroy(),!0}catch{return Y.destroy(),!0}let K=Y.localPort;if(!K){let R=Number((J.headers.host??"").split(":")[1]);if(Number.isFinite(R)&&R>0)K=R}return Q.handleUpgrade(J,Y,X,(R)=>{v1(R,K,$)}),!0}}var y1=1e4,f1=4194304;var H4=()=>{};var m4={};N6(m4,{startCdpServer:()=>G3,startBunCdpServer:()=>H3,listTargets:()=>R3,listDevices:()=>g4});import{createRequire as h1}from"node:module";import*as O4 from"node:net";import*as C4 from"node:net";import{spawnSync as z2}from"node:child_process";import*as x4 from"node:tls";import*as y4 from"node:http";function l1($){return this[$]}function L4($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&":Q==="<"?"<":Q===">"?">":Q==="'"?"'":""")}function t1($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function e1($){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 wQ($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${L4($)}</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>${t1($)}</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)=>wQ(X,Q+"\t")).join(`
|
|
60
|
+
`,"ascii")}function Y2($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=e1,Q.set($,5),Q}function u7($){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)})}async function g7($,Q){if(await u7($),$.writableEnded||$.destroyed)return!1;if(!Q()||$.writableNeedDrain)await u7($);return!$.writableEnded&&!$.destroyed}class c7{udid;capture;hid;unsubscribeMjpeg;phase="unstarted";startPromise;width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;streamResponses=new Set;touchGestureLog;constructor($,Q){this.udid=$;this.hid=Q?.hid??new YQ($),this.capture=Q?.capture??new XQ($)}start(){if(this.phase==="stopped")return Promise.reject(Error(`Device session ${this.udid} is closed`));if(this.startPromise)return this.startPromise;this.phase="starting";let $=(async()=>{if(await this.capture.start(),this.isStopped())throw Error(`Device session ${this.udid} closed while starting`);let Q=await this.capture.subscribeMjpeg((Z)=>this.onSharedMjpegFrame(Z));if(this.isStopped())throw await Q(),Error(`Device session ${this.udid} closed while starting`);this.unsubscribeMjpeg=Q,this.phase="running"})().catch((Q)=>{if(this.phase==="starting")this.phase="failed";throw Q});return $.catch(()=>{}),this.startPromise=$,$}isStopped(){return this.phase==="stopped"}close(){if(this.phase==="stopped")return;this.phase="stopped";for(let $ of this.hidSockets)this.runCleanup("HID socket close",()=>$.close());for(let $ of this.streamResponses)this.runCleanup("stream response close",()=>{$.destroy()});if(this.streamResponses.clear(),this.unsubscribeMjpeg)this.runCleanup("shared MJPEG unsubscribe",this.unsubscribeMjpeg);this.hidSockets.clear(),this.runCleanup("capture stop",()=>this.capture.stop())}async onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(Q!==this.width||Z!==this.height)this.width=Q,this.height=Z,this.broadcastConfig();if(!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}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}writeMjpegFrame($,Q){let Z=$.write(J2(Q.length)),J=$.write(Q),Y=$.write(Q2);return Z&&J&&Y}handleMjpeg($,Q){this.serveMjpeg($,Q).catch((Z)=>this.handleStreamError(Q,Z))}async serveMjpeg($,Q){if(await this.start(),Q.writableEnded||Q.destroyed)return;let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";if(Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...RQ}),!this.trackStreamResponse(Q))return;let J=!1,Y=0,X=async(z)=>{if(J||Q.writableEnded||Q.destroyed)return;J=!0;try{if(await g7(Q,()=>this.writeMjpegFrame(Q,z)))Y=Date.now()}catch(K){if(!Q.destroyed)Q.destroy(K instanceof Error?K:Error(String(K)))}finally{J=!1}},G=this.latestJpeg();if(G)await X(Buffer.from(G));let V=await this.capture.subscribeMjpeg(async(z)=>{await X(z.data)}),W=setInterval(()=>{if(Q.writableEnded||Q.destroyed)return;if(Date.now()-Y<b7)return;let z=this.latestJpeg();if(z)X(Buffer.from(z))},b7);this.bindSubscription(Q,async()=>{clearInterval(W),await V()})}handleAvcc($,Q){this.serveAvcc(Q).catch((Z)=>this.handleStreamError(Q,Z))}async serveAvcc($){if(await this.start(),$.writableEnded||$.destroyed)return;if($.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...RQ}),!this.trackStreamResponse($))return;let Q=this.latestJpeg();if(Q)$.write(Y2(Q));let Z=await this.capture.subscribeAvcc(async(J)=>{await g7($,()=>$.write(J.data))});this.bindSubscription($,Z)}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}handleAx($,Q){return this.serveAxJson(Q,()=>$8(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>Q8(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 V=X2[G.orientation];if(V!=null&&await this.hid.orientation(V)){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=h7($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=h7($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(v7(Q))if(Q.eventId==null){let Z=j$({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:J8(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else VQ(Q.eventId,{kind:"drag",action:"drag",summary:J8(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&&v7(Q))if(Q.eventId==null)j$({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:J8(Q),details:this.touchGestureDetails(Q,"drag","end")});else VQ(Q.eventId,{kind:"drag",action:"drag",summary:J8(Q),details:this.touchGestureDetails(Q,"drag","end")});else j$({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${$0($.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=S7(this.udid,$,Q,this.eventLogScreen());if(Z)j$(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([$2]),Buffer.from(JSON.stringify(this.screenConfig()))])}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}bindSubscription($,Q){let Z=!1,J=()=>{if(Z)return;Z=!0,this.streamResponses.delete($),this.runCleanup("stream unsubscribe",Q)};if($.writableEnded||$.destroyed){J();return}$.once("close",J),$.once("error",J)}trackStreamResponse($){if(this.isStopped()||$.writableEnded||$.destroyed){if(!$.writableEnded&&!$.destroyed)$.destroy();return!1}this.streamResponses.add($);let Q=()=>{$.off("close",Q),$.off("error",Q),this.streamResponses.delete($)};return $.once("close",Q),$.once("error",Q),!0}runCleanup($,Q){try{Promise.resolve(Q()).catch((Z)=>this.logCleanupError($,Z))}catch(Z){this.logCleanupError($,Z)}}logCleanupError($,Q){console.error(`[capture] ${$} failed for ${this.udid}:`,Q instanceof Error?Q.message:Q)}handleStreamError($,Q){if($.writableEnded||$.destroyed)return;if($.headersSent){$.destroy(Q instanceof Error?Q:Error(String(Q)));return}this.sendJson($,503,{error:"capture_unavailable",message:Q instanceof Error?Q.message:String(Q)})}sendJson($,Q,Z){this.sendJsonString($,Q,JSON.stringify(Z))}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),...RQ}),$.end(J)}}function LQ($){let Q=Q0.get($);if(!Q){let Z=new c7($);Q=Z,Q0.set($,Z),Z.start().catch(()=>{if(Q0.get($)!==Z)return;Q0.delete($),Z.close()})}return Q}function UQ($){let Q=Q0.get($);if(Q)Q.close(),Q0.delete($)}var RQ,e1=4,$2=130,Q2,b7=1000,Z2=0.004,X2,Q0;var m7=s(()=>{Z8();HQ();RQ={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},Q2=Buffer.from(`\r
|
|
61
|
+
`,"ascii");X2={portrait:F0.portrait,portrait_upside_down:F0.portraitUpsideDown,landscape_left:F0.landscapeLeft,landscape_right:F0.landscapeRight};Q0=new Map});import{execFileSync as Y8}from"child_process";import{createHash as a7}from"crypto";import{existsSync as e,mkdirSync as r7,readdirSync as G2,readFileSync as B$,renameSync as t7,statSync as s7,unlinkSync as l7}from"fs";import{tmpdir as e7}from"os";import{basename as $9,dirname as EQ,join as p}from"path";import{inflateSync as z2}from"zlib";function z8($){return $.startsWith(p7)?$.slice(p7.length):$}function AQ($){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]),V=Math.abs(X-J),W=Math.abs(G-Y);return V>0&&W>0?{width:V,height:W}:null}function W2($,Q){let Z=q2($);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=p(Y,`${J}.pdf`);if(!e(X))return null;let G=AQ(B$(X));if(!G)return null;let V=A2(Q);return{width:G.width/V,height:G.height/V}}function Z9($){let Q=DQ($),Z=Q;if(BQ.has(Z))return BQ.get(Z)??null;let J=R2(Q);return BQ.set(Z,J),J}function J9($){let Q=DQ($);if(FQ.has(Q))return FQ.get(Q)??null;let Z=V2($);return FQ.set(Q,Z),Z}function V2($){let Q=U2($),Z=Q?z9(Q):null,J=_2(Z)??N2($.name);if(!J)return null;let Y=G9(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function Y9($,Q){let Z=z8($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){Z0(Q,400,"Invalid chrome asset request");return}let Y=V9(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){Z0(Q,404,"Chrome asset not found");return}let X=CQ(Z,J);if(!e(X)){Z0(Q,404,"Chrome asset not found");return}try{let G=M9(Z,J,X),V=B$(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(V.byteLength)}),Q.end(V)}catch(G){Z0(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function X9($,Q){let Z=$.searchParams.get("name")??"";try{let J=G9(Z);if(!J){Z0(Q,404,"Placeholder asset not found");return}let Y=B$(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){Z0(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function G9($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(jQ.has($))return jQ.get($)??null;let Q=M2($),Z=Q?D2($,Q):null;return jQ.set($,Z),Z}function M2($){let Z=H2($)?.paths.find((Y)=>e(Y));if(Z)return Z;if(!W9().some((Y)=>Y.iconName===$))return null;let J=p(O$,`${$}.icns`);return e(J)?J:null}function H2($){return Object.prototype.hasOwnProperty.call(i7,$)?i7[$]:null}function R2($){let Q=K9($);if(!e(Q))return null;let Z=z9(Q);if(!Z?.chromeIdentifier)return null;let J=V9(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=OQ(J.identifier,J.compositeImage);let X=J.compositeImage?I2(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?P2(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 V=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},W={x:J.devicePadding.left,y:J.devicePadding.top,width:V.width,height:V.height},z={width:V.width+J.devicePadding.left+J.devicePadding.right,height:V.height+J.devicePadding.top+J.devicePadding.bottom},K={x:W.x+(V.width-G.width)/2,y:W.y+(V.height-G.height)/2,width:G.width,height:G.height},R=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,H=J.slice?OQ(J.identifier,J.slice.topLeft):null,T=J.identifier.startsWith("watch"),O=J.buttons.flatMap((q)=>{let C=OQ(J.identifier,q.image);if(!C)return[];let D=j2(q,C,V,J.devicePadding),j={x:C.width>0?(q.rolloverOffset.x-q.normalOffset.x)/C.width:0,y:C.height>0?(q.rolloverOffset.y-q.normalOffset.y)/C.height:0};return[{name:q.name,image:q.image,imageDown:q.imageDown,onTop:q.onTop||T,frame:{...D,...C},hover:j,usagePage:q.usagePage,usage:q.usage}]});return{identifier:J.identifier,frame:z,body:W,screen:K,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:R,compositeImage:J.compositeImage,slice:J.slice,corner:H,buttons:O}}function z9($){let Q=X8($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?z8(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?W2({...Q,__profileDir:EQ($)},J):null,framebufferMaskSize:L2({...Q,__profileDir:EQ($)})}}function L2($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=p(Z,`${Q}.pdf`);if(!e(J))return null;return AQ(B$(J))}function DQ($){return O2($.deviceTypeIdentifier)??$.name}function U2($){let Q=K9(DQ($));return e(Q)?Q:null}function K9($){return p(qQ,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function _2($){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 W9())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function N2($){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 W9(){if(TQ)return TQ;let $=X8(p(O$,"MobileDevices-Info.plist"))??X8(p(EQ(O$),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=G$(J),X=a(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=p(O$,X);if(!e(G))continue;let W=G$(Y.UTTypeTagSpecification)["com.apple.device-model-code"],z=Array.isArray(W)?W.filter((K)=>typeof K==="string"&&K.length>0):[];if(z.length===0)continue;Z.push({description:a(Y.UTTypeDescription)??"",iconFile:X,iconName:$9(X,".icns"),modelCodes:z})}return TQ=Z,Z}function V9($){let Q=z8($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(NQ.has(Q))return NQ.get(Q)??null;let Z=p(Q9,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(B$(Z,"utf-8"));J=B2(Y)}catch{J=null}return NQ.set(Q,J),J}function B2($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=z8(Q),J=G$($.images),Y=G$(J.sizing),X=G$($.paths),G=N$(G$(X.simpleOutsideBorder).cornerRadiusX),V={top:N$(Y.topHeight),left:N$(Y.leftWidth),bottom:N$(Y.bottomHeight),right:N$(Y.rightWidth)},W=G$(J.devicePadding),z={top:N$(W.top),left:N$(W.left),bottom:N$(W.bottom),right:N$(W.right)},K=typeof J.composite==="string"?J.composite:null,R=F2(J),H=Array.isArray($.inputs)?$.inputs.flatMap((O)=>{let q=T2(G$(O));return q?[q]:[]}):[],T=new Set;for(let O of Object.values(J))if(typeof O==="string")T.add(O);for(let O of H)T.add(O.image);if(Array.isArray($.inputs))for(let O of $.inputs){let q=G$(O);if(typeof q.imageDown==="string")T.add(q.imageDown)}return{identifier:Z,insets:V,devicePadding:z,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(V.left,V.top),0),compositeImage:K,slice:R,buttons:H,allowedImages:T}}function F2($){let Q=a($.topLeft),Z=a($.top),J=a($.topRight),Y=a($.right),X=a($.bottomRight),G=a($.bottom),V=a($.bottomLeft),W=a($.left);if(!Q||!Z||!J||!Y||!X||!G||!V||!W)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:V,left:W}}function T2($){let Q=a($.name),Z=a($.image);if(!Q||!Z)return null;let J=a($.anchor),Y=a($.align),X=G$($.offsets),G=o7(G$(X.normal)),V=o7(G$(X.rollover));return{name:Q,image:Z,imageDown:a($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??V??{x:0,y:0},rolloverOffset:V??G??{x:0,y:0},usagePage:E$($.usagePage),usage:E$($.usage)}}function j2($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,V=2*$.normalOffset.y-$.rolloverOffset.y,W=$.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+V};case"top":return{x:W,y:X+V-Q.height};case"bottom":return{x:W,y:X+Z.height+V}}}function O2($){if(!$)return null;if(!_Q)_Q=E2();return _Q.get($)??null}function E2(){let $=new Map;try{for(let Q of G2(qQ)){if(!Q.endsWith(".simdevicetype"))continue;let Z=p(qQ,Q),J=X8(p(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:$9(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function X8($){try{let Q=Y8("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function q2($){let Q=E$($.mainScreenWidth),Z=E$($.mainScreenHeight),J=E$($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function A2($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function OQ($,Q){let Z=CQ($,Q);if(!e(Z))return null;return AQ(B$(Z))}function CQ($,Q){return p(Q9,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function M9($,Q,Z){r7(d7,{recursive:!0});let J=s7(Z),Y=a7("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=p(d7,`${$}-${Y}.png`);if(e(X))return X;let G=`${X}.${process.pid}.tmp`;return Y8("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),t7(G,X),X}function D2($,Q){r7(n7,{recursive:!0});let Z=s7(Q),J=a7("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=p(n7,`${$}-${J}.png`);if(e(Y)){let V=G8(B$(Y));return{sourcePath:Q,pngPath:Y,width:V.width,height:V.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{Y8("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let V=B$(G),W=C2(V)??{x:0,y:0,...G8(V)};return Y8("sips",["-c",String(W.height),String(W.width),"--cropOffset",String(W.y),String(W.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),t7(X,Y),{sourcePath:Q,pngPath:Y,width:W.width,height:W.height}}finally{try{if(e(G))l7(G)}catch{}try{if(e(X))l7(X)}catch{}}}function G8($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function H9($,Q){let{width:Z,height:J}=G8($),Y=8,X=0,G=0,V=[];while(Y<$.byteLength){let q=$.readUInt32BE(Y);Y+=4;let C=$.toString("ascii",Y,Y+4);Y+=4;let D=$.subarray(Y,Y+q);if(Y+=q+4,C==="IHDR")X=D[8]??0,G=D[9]??0;else if(C==="IDAT")V.push(D);else if(C==="IEND")break}let W=G===6?4:G===4?2:0;if(X!==8||W===0||V.length===0)return null;let z=G===6,K=z2(Buffer.concat(V)),R=Z*W,H=new Uint8Array(Z*J),T=Buffer.alloc(R),O=0;for(let q=0;q<J;q++){let C=K[O++]??0,D=Buffer.from(K.subarray(O,O+R));O+=R,w2(D,T,W,C);for(let j=0;j<Z;j++){let F=j*W,E=D[F]??0,B=z?D[F+1]??0:E,L=z?D[F+2]??0:E,M=D[F+W-1]??0;if(Q(E,B,L,M))H[q*Z+j]=1}T=D}return{width:Z,height:J,mask:H}}function C2($){let{width:Q,height:Z}=G8($),J=H9($,(W,z,K,R)=>R>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,V=-1;for(let W=0;W<Z;W++)for(let z=0;z<Q;z++){if(!J.mask[W*Q+z])continue;if(z<Y)Y=z;if(W<X)X=W;if(z>G)G=z;if(W>V)V=W}if(G<Y||V<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:V-X+1}}function P2($,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 I2($,Q){let Z=x2($,Q);if(!Z)return null;let J=H9(Z,(j,F,E,B)=>B>200&&j<30&&F<30&&E<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,V=Math.floor(Y/2),W=Math.floor(X/2),z=(j,F)=>j>=0&&F>=0&&j<Y&&F<X&&G[F*Y+j]===1;if(!z(V,W))return null;let K=V;while(K>0&&z(K-1,W))K--;let R=V;while(R<Y-1&&z(R+1,W))R++;let H=W;while(H>0&&z(V,H-1))H--;let T=W;while(T<X-1&&z(V,T+1))T++;let O=T-H,q=(j,F)=>{let E=0;while(E<O&&!z(j,F?H+E:T-E))E++;return E},C=[q(K,!0),q(R,!0),q(K,!1),q(R,!1)],D=C.reduce((j,F)=>j+F,0)/C.length;return{x:K,y:H,width:R-K+1,height:T-H+1,radius:D}}function x2($,Q){let Z=CQ($,Q);if(!e(Z))return null;try{return B$(M9($,Q,Z))}catch{return null}}function w2($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,V=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]+k2(X,G,V)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function k2($,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 Z0($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function N$($){return E$($)??0}function E$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function a($){return typeof $==="string"&&$?$:null}function G$($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function o7($){let Q=E$($.x),Z=E$($.y);return Q===null||Z===null?null:{x:Q,y:Z}}var qQ="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",Q9="/Library/Developer/DeviceKit/Chrome",p7="com.apple.dt.devicekit.chrome.",d7,n7,O$="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",K2="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",i7,_Q=null,NQ,BQ,FQ,TQ=null,jQ;var R9=s(()=>{d7=p(e7(),"serve-sim-devicekit-chrome"),n7=p(e7(),"serve-sim-device-placeholder-assets"),i7={"vision-pro":{paths:[p(O$,"com.apple.vision-pro.icns"),p(K2,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[p(O$,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[p(O$,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[p(O$,"com.apple.ipad-air-m3-1.icns")]}},NQ=new Map,BQ=new Map,FQ=new Map,jQ=new Map});import{exec as S2}from"child_process";import{createHash as L9,timingSafeEqual as y2}from"crypto";import{request as f2}from"http";import{WebSocketServer as b2}from"ws";function u2($,Q){let Z=L9("sha256").update($).digest(),J=L9("sha256").update(Q).digest();return y2(Z,J)}function g2($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(z)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(z))},V=setTimeout(()=>{if(!J)$.close()},v2);V.unref?.();let W=(z,K)=>{if(Y.has(z))return;let R=K.split("?")[0];if(!K.startsWith("/")||!X.some((T)=>R===T)){G({sub:z,end:!0,error:"path not allowed"});return}if(!Q){G({sub:z,end:!0,error:"no local port"});return}let H=f2({host:"127.0.0.1",port:Q,path:K,headers:{accept:"text/event-stream"}},(T)=>{T.on("data",(O)=>G({sub:z,data:O.toString("utf-8")})),T.on("end",()=>{Y.delete(z),G({sub:z,end:!0})})});H.on("error",()=>{Y.delete(z),G({sub:z,end:!0})}),H.end(),Y.set(z,{destroy:()=>H.destroy()})};$.on("message",(z)=>{let K;try{K=JSON.parse(z.toString())}catch{return}if(!J){if(typeof K.token==="string"&&u2(K.token,Z.execToken))J=!0,clearTimeout(V),G({ready:!0});else $.close();return}if(typeof K.unsub==="number"){Y.get(K.unsub)?.destroy(),Y.delete(K.unsub);return}if(typeof K.sub==="number"&&typeof K.path==="string"){W(K.sub,K.path);return}if(typeof K.id==="number"&&K.ui!==void 0){let{id:T}=K;if(!Z.onUiRequest){G({id:T,error:"ui requests not supported"});return}Z.onUiRequest(K.ui).then((O)=>G({id:T,...O})).catch((O)=>G({id:T,error:O instanceof Error?O.message:String(O)}));return}if(typeof K.id!=="number"||typeof K.command!=="string"||!K.command)return;let{id:R,command:H}=K;S2(H,{maxBuffer:16777216},(T,O,q)=>{let C={id:R,stdout:O.toString(),stderr:q.toString(),exitCode:T?T.code??1:0};try{Z.onCommandResult?.(H,C)}catch{}G(C)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(V);for(let z of Y.values())z.destroy();Y.clear()})}function U9($){let Q=new b2({noServer:!0,maxPayload:h2});return function(J,Y,X){let G=J.url??"",V=G.indexOf("?"),W=V===-1?G:G.slice(0,V);if(W!==$.path&&W!==`${$.path}/`)return!1;let z=J.headers.origin;if(z)try{if(new URL(z).host!==J.headers.host)return Y.destroy(),!0}catch{return Y.destroy(),!0}let K=Y.localPort;if(!K){let R=Number((J.headers.host??"").split(":")[1]);if(Number.isFinite(R)&&R>0)K=R}return Q.handleUpgrade(J,Y,X,(R)=>{g2(R,K,$)}),!0}}var v2=1e4,h2=4194304;var _9=()=>{};var n9={};F6(n9,{startCdpServer:()=>W3,startBunCdpServer:()=>U3,listTargets:()=>_3,listDevices:()=>p9});import{createRequire as c2}from"node:module";import*as C9 from"node:net";import*as w9 from"node:net";import{spawnSync as VJ}from"node:child_process";import*as y9 from"node:tls";import*as h9 from"node:http";function n2($){return this[$]}function B9($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&":Q==="<"?"<":Q===">"?">":Q==="'"?"'":""")}function QJ($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function ZJ($){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 SQ($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${B9($)}</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>${QJ($)}</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)=>SQ(X,Q+"\t")).join(`
|
|
62
62
|
`);return`${Q}<array>
|
|
63
63
|
${Y}
|
|
64
|
-
${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${
|
|
65
|
-
`+
|
|
64
|
+
${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${B9(Y)}</key>
|
|
65
|
+
`+SQ($[Y],Q+"\t")).join(`
|
|
66
66
|
`);return`${Q}<dict>
|
|
67
67
|
${J}
|
|
68
|
-
${Q}</dict>`}function
|
|
69
|
-
`||$==="\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
|
|
70
|
-
`)){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 I4($){let Q=new V8;return new Promise((Z,J)=>{let Y=C4.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),gQ(Y,Q),Z({socket:Y,stream:Q})})})}async function DQ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return W8(J)}function CQ($,Q){let Z=uQ({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function PQ($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function N4($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new V8,V=x4.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),W=(z)=>{z$(`${J} tls error:`,z),G.close(z),X(z)};V.once("error",W),V.once("secureConnect",()=>{z$(`${J} tls handshake complete`),V.off("error",W);let z=gQ(V,G);Y({socket:V,stream:G,detach:z})})})}class M8{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){z$("connecting usbmux tunnel to lockdown port",_4);let{socket:Z,stream:J,detach:Y}=await U4($.DeviceID,_4),X=new M8(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);z$("sending QueryType"),CQ(Z,{Request:"QueryType"});let G=await DQ(J);if(z$("QueryType reply:",G),PQ(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){z$("StartSession with HostID",this.pair.HostID),CQ(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await DQ(this.stream);if(z$("StartSession reply:",$),PQ($,"StartSession"),$.EnableSessionSSL){z$("upgrading to TLS");let Q=await N4(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,z$("TLS upgrade complete")}}async startService($){z$("StartService",$),CQ(this.socket,{Request:"StartService",Service:$});let Q=await DQ(this.stream);return z$("StartService reply:",Q),PQ(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){z$("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await U4(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await N4(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function K2($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return Q2(J)}function W2($,Q){let Z=uQ(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function V2(){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 E0{socket;stream;connectionId=V2();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await K2(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){W2(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 z8{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 V=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))V="target::error";let W=this.filters.get(V);if(!W)return this.sendToTools($);let z=Q;for(let K of W){if(!z)break;z=await K(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 H2(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function v($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function R2($,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 L2($,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 U2($,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((W)=>({functionName:W.functionName??"",scriptId:W.scriptId??"",url:W.url??"",lineNumber:Number(W.lineNumber??0),columnNumber:Number(W.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,V=Date.now();if(J.source==="console-api"){let W=J.type==="log"?J.level??"log":J.type??"log",z=_2(W),K=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],R={type:z,args:K,executionContextId:Q.pageExecCtx.id||1,timestamp:V,stackTrace:G};return Q.lastConsoleApiCalled.value=R,$.fireEventToTools("Runtime.consoleAPICalled",R),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:V,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:N2(J.level??J.type??"log"),text:String(J.text??""),timestamp:V,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 _2($){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 N2($){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 B2($){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 F2($){$.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 T2($,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"}),V=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:V.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return S4(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return yQ(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",{}),V=k4(G?.frameTree);yQ(V),$.fireResultToTools(X.id,{frameTree:V})}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 S4($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function yQ($){if(!$)return;if(S4($.frame),Array.isArray($.childFrames))$.childFrames.forEach(yQ)}function k4($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(k4);return Q}function j2($){$.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 E2($){$.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 IQ($){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 x2($){if(!$)return $;return{...P2,...$,hasPostData:$.postData!=null}}function w2($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...I2,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function S2($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function k2($){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 y2($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),V=(z)=>{let K=G.then(z,z);return G=K.catch(()=>{}),K};for(let[z,K]of Object.entries(O2))$.addMessageFilter(`tools::${z}`,(R)=>{return R.method=K,Promise.resolve(R)});$.addMessageFilter("tools::Network.setCacheDisabled",(z)=>{if(z.params&&"cacheDisabled"in z.params)z.params={disabled:!!z.params.cacheDisabled};return Promise.resolve(z)});let W=async(z)=>{try{let K=await $.callTarget("Page.getCookies",{}),R=Array.isArray(K?.cookies)?K.cookies.map(k2):[];$.fireResultToTools(z.id,{cookies:R})}catch(K){$.fireErrorToTools(z.id,{message:K?.message??String(K)})}return null};$.addMessageFilter("tools::Network.getCookies",W),$.addMessageFilter("tools::Network.getAllCookies",W),$.addMessageFilter("tools::Network.setCookie",(z)=>{let K=z.params??{};return z.method="Page.setCookie",z.params={cookie:{name:K.name,value:K.value,domain:K.domain??"",path:K.path??"/",expires:K.expires??-1,session:!1,httpOnly:!!K.httpOnly,secure:!!K.secure,sameSite:K.sameSite??"None"}},Promise.resolve(z)}),$.addMessageFilter("tools::Network.setCookies",async(z)=>{let K=Array.isArray(z.params?.cookies)?z.params.cookies:[];try{await Promise.all(K.map((R)=>$.callTarget("Page.setCookie",{cookie:R}))),$.fireResultToTools(z.id,{})}catch(R){$.fireErrorToTools(z.id,{message:R?.message??String(R)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(z)=>{let K=z.params??{},R=K.url??`https://${(K.domain??"").replace(/^\./,"")}${K.path??"/"}`;return z.method="Page.deleteCookie",z.params={cookieName:K.name,url:R},Promise.resolve(z)}),$.addMessageFilter("tools::Network.deleteCookie",(z)=>{return z.method="Page.deleteCookie",Promise.resolve(z)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(z)=>{try{let K=await $.callTarget("Page.getCookies",{}),R=Array.isArray(K?.cookies)?K.cookies:[];await Promise.all(R.map((H)=>$.callTarget("Page.deleteCookie",{cookieName:H.name,url:`${H.secure?"https":"http"}://${(H.domain??"").replace(/^\./,"")}${H.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(z.id,{})}catch(K){$.fireErrorToTools(z.id,{message:K?.message??String(K)})}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 K=z.params?.requestId,R=typeof K==="string"?Z.get(K):void 0;if(!R)return $.fireErrorToTools(z.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(R.method&&R.method.toUpperCase()!=="GET")return $.fireErrorToTools(z.id,{message:`Network.getResponseBody: cannot recover ${R.method} response body (bridge re-fetch is GET-only)`}),null;if(R.bytes===0)return $.fireResultToTools(z.id,{body:"",base64Encoded:!1}),null;return V(async()=>{try{let H={};for(let[B,L]of Object.entries(R.headers??{})){let M=B.toLowerCase();if(M==="if-none-match"||M==="if-modified-since"||M==="host"||M==="connection")continue;H[B]=String(L)}let T=new AbortController,E=setTimeout(()=>T.abort(),1e4),q;try{q=await fetch(R.url,{headers:H,redirect:"follow",signal:T.signal})}finally{clearTimeout(E)}let C=Number(q.headers.get("content-length")??"");if(Number.isFinite(C)&&C>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${C} bytes > ${"4194304"}) — skipped re-fetch`});try{await q.arrayBuffer()}catch{}return}let D=Buffer.from(await q.arrayBuffer());if(D.byteLength>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${D.byteLength} bytes > 4194304)`});return}let j=((q.headers.get("content-type")??"").split(";")[0]??"").trim(),F=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(j),O=F?D.toString("utf8"):D.toString("base64");$.fireResultToTools(z.id,{body:O,base64Encoded:!F})}catch(H){$.fireErrorToTools(z.id,{message:`Network.getResponseBody re-fetch failed: ${H?.message??String(H)}`})}}),null});for(let[z,K]of Object.entries(q2))$.addMessageFilter(`target::${z}`,(R)=>{return S2(R.params,K),Promise.resolve(R)});$.addMessageFilter("target::Network.requestWillBeSent",(z)=>{let K=z.params;if(K){if(Object.assign(K,{...A2,...K}),K.request=x2(K.request),K.type=IQ(K.type),typeof K.requestId==="string"&&typeof K.request?.url==="string"){if(Z.size>=1024){let R=Z.keys().next().value;if(R!==void 0)Z.delete(R)}Z.set(K.requestId,{url:K.request.url,method:K.request.method,headers:K.request.headers,frameId:K.frameId,bytes:0})}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.responseReceived",(z)=>{let K=z.params;if(K)Object.assign(K,{...D2,...K}),K.response=w2(K.response),K.type=IQ(K.type);return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFinished",(z)=>{let K=z.params;if(K){let R=K.metrics?.responseBodyBytesReceived;if(typeof R==="number"&&K.encodedDataLength==null)K.encodedDataLength=R;if(Object.assign(K,{...C2,...K}),typeof K.requestId==="string"&&typeof R==="number"){let H=Z.get(K.requestId);if(H&&R>H.bytes)H.bytes=R}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.dataReceived",(z)=>{let K=z.params;if(K&&typeof K.requestId==="string"){let R=Z.get(K.requestId);if(R){let H=Number(K.dataLength)||0;R.bytes+=H}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFailed",(z)=>{let K=z.params;if(K){if(K.type=IQ(K.type),!("canceled"in K))K.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 K=z.params??{};if(!Q)return $.fireResultToTools(z.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let R=await $.callTarget("Network.loadResource",{frameId:K.frameId,url:K.url}),H=!!R?.content&&(R?.status??0)>=200&&(R?.status??0)<300,T;if(H)T=`network-resource:${K.frameId??""}:${K.url}`,Q.set(T,String(R.content));$.fireResultToTools(z.id,{resource:{success:H,stream:T,httpStatusCode:R?.status,headers:R?.headers,mimeType:R?.mimeType}})}catch(R){$.fireResultToTools(z.id,{resource:{success:!1,netError:2,netErrorName:R?.message??"ERR_FAILED"}})}return null})}function f2($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>v($,Z,{}))}function b2($){$.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 h2($){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 fQ($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:f$($.style),selectorList:c2($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:g2[Z.type]}));return Q}function p2($){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 V=G?.rules??[];for(let W=0;W<V.length;W++)if(v2(V[W]?.style?.range,X))return{styleSheetId:Y,ordinal:W};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=h2(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:f$(X.inlineStyle),attributesStyle:f$(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:f$(X?.inlineStyle),attributesStyle:f$(X?.attributesStyle),matchedCSSRules:lQ(G?.matchedCSSRules),pseudoElements:m2(G?.pseudoElements),inherited:l2(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 V of X)try{let W=await J(V.styleSheetId,V.range),z=await $.callTarget("CSS.setStyleText",{styleId:W,text:V.text});G.push(f$(z?.style)),Z.delete(V.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:V.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:V}=Y.params??{};try{let W=await J(X,G);Y.params={ruleId:W,selector:V}}catch(W){return $.fireErrorToTools(Y.id,{message:W?.message??String(W)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:fQ(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 V=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:fQ(V?.rule)})}catch(V){$.fireErrorToTools(Y.id,{message:V?.message??String(V)})}return null})}function n2($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>v($,Q,d2)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>v($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>v($,Q,{}))}function o2($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function a2($){let Q=async(Z)=>{let J=Z.params??{},Y=o2(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let V={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},W=`(${i2}, __sd_simulate(${JSON.stringify(V)}))`;await $.callTarget("Runtime.evaluate",{expression:W})}$.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 s2($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||r2,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 V=G.slice(X,X+Y),W=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:V,eof:W,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 t2($){$.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 Q3($){for(let[Z,J]of Object.entries($3))$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J));for(let Z of e2)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 bQ($){let Q=H2();Q3($);let Z=s2($);R2($,Q),L2($,Q),U2($,Q),B2($),F2($),T2($,Q),j2($),E2($),y2($,Z),f2($),b2($),p2($),n2($),a2($),t2($)}function f4($){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 Z0($){return $.replace(/[&<>"']/g,(Q)=>Z3[Q])}function b4($){return y4.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 xQ(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return xQ(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return xQ(Z,{});if(J.pathname==="/")return J3(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function xQ($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function J3($,Q,Z){let J=Q.listTargets(Z),Y=J.map((W)=>`<li><strong>${Z0(W.title||W.url||W.id)}</strong><br><small>${Z0(W.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${Z0(W.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">${Z0(Z)}</code>.</p>`,V=`<!doctype html><meta charset=utf-8><title>${Z0(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>${Z0(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(V)}function v4($,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 h4($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(W,z)=>Q?`\x1B[${W}m${z}\x1B[0m`:z,J=(W)=>Z("1",W),Y=(W)=>Z("2",W),X=(W)=>Z("36",W),G=(W)=>Z("32",W),V=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(V)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function Y3($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,V=new Map,W=null;function z(F){if($.readyState!==1)return;let O=JSON.stringify(F);if(Z)console.error(`[browser] tools<< ${O.slice(0,240)}`);$.send(O)}function K(F,O){let B={method:F,params:O};if(W)B.sessionId=W;z(B)}function R(F,O){return{targetId:F.targetId,type:F.type==="page"?"page":F.type||"other",title:F.title||"",url:F.url||"",attached:O,canAccessOpener:!1,browserContextId:"default"}}function H(F){for(let O of J.values())if(O.targetId===F)return!0;return!1}function T(F,O){let B=Q.listEntries().find((_)=>_.targetId===F);if(!B)return null;let L=crypto.randomUUID(),M=(_)=>{let A;try{A=JSON.parse(_)}catch{return}A.sessionId=L,z(A)},U=Q.createPageSession(F,M);if(!U)return null;return J.set(L,{handle:U,targetId:F}),K("Target.attachedToTarget",{sessionId:L,targetInfo:R(B,!0),waitingForDebugger:O}),{sessionId:L,entry:B}}function E(F){let O=J.get(F);if(!O)return!1;try{O.handle.close()}catch{}return J.delete(F),K("Target.detachedFromTarget",{sessionId:F,targetId:O.targetId}),!0}function q(){let F=Q.listEntries(),O=new Set;for(let B of F){O.add(B.targetId);let L=V.get(B.targetId);if(!L){if(V.set(B.targetId,B),Y)K("Target.targetCreated",{targetInfo:R(B,H(B.targetId))});if(X&&!H(B.targetId))T(B.targetId,G)}else if(L.title!==B.title||L.url!==B.url){if(V.set(B.targetId,B),Y)K("Target.targetInfoChanged",{targetInfo:R(B,H(B.targetId))})}}for(let B of[...V.keys()]){if(O.has(B))continue;V.delete(B);for(let[L,M]of J)if(M.targetId===B)E(L);if(Y)K("Target.targetDestroyed",{targetId:B})}}let C=setInterval(q,Q.refreshMs??1000);function D(F,O){if(F)O.sessionId=F;z(O)}function j(F,O){let{id:B,method:L}=F,M=F.params??{};switch(L){case"Browser.getVersion":return D(O,{id:B,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(!W)W=crypto.randomUUID();return D(O,{id:B,result:{sessionId:W}})}case"Target.setDiscoverTargets":{if(Y=!!M.discover,Y)for(let U of Q.listEntries())V.set(U.targetId,U),K("Target.targetCreated",{targetInfo:R(U,H(U.targetId))});if(typeof B==="number")D(O,{id:B,result:{}});return}case"Target.getTargets":{let U=Q.listEntries().map((_)=>R(_,H(_.targetId)));return D(O,{id:B,result:{targetInfos:U}})}case"Target.setAutoAttach":{if(X=!!M.autoAttach,G=!!M.waitForDebuggerOnStart,X){for(let U of Q.listEntries())if(!H(U.targetId))T(U.targetId,G)}if(typeof B==="number")D(O,{id:B,result:{}});return}case"Target.attachToTarget":{for(let[_,A]of J)if(A.targetId===M.targetId){if(typeof B==="number")D(O,{id:B,result:{sessionId:_}});return}let U=T(M.targetId,!1);if(!U){if(typeof B==="number")D(O,{id:B,error:{code:-32000,message:"No target with given id found"}});return}if(typeof B==="number")D(O,{id:B,result:{sessionId:U.sessionId}});return}case"Target.detachFromTarget":{if(E(M.sessionId),typeof B==="number")D(O,{id:B,result:{}});return}case"Target.sendMessageToTarget":{let U=J.get(M.sessionId);if(U)U.handle.onMessageFromTools(M.message);if(typeof B==="number")D(O,{id:B,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof B==="number")D(O,{id:B,result:{}});return;case"Target.getBrowserContexts":{if(typeof B==="number")D(O,{id:B,result:{browserContextIds:["default"]}});return}}if(typeof B==="number")D(O,{id:B,error:{code:-32601,message:`Browser-level method '${L??"?"}' not implemented`}})}$.on("message",(F,O)=>{let B=O?new TextDecoder().decode(F):F.toString();if(Z)console.error(`[browser] tools>> ${B.slice(0,240)}`);let L;try{L=JSON.parse(B)}catch{return}if(typeof L.sessionId==="string"){if(L.sessionId===W){let _={...L};return delete _.sessionId,j(_,L.sessionId)}let M=J.get(L.sessionId);if(!M){if(typeof L.id==="number")z({id:L.id,sessionId:L.sessionId,error:{code:-32000,message:`Session ${L.sessionId} not found`}});return}let U={...L};delete U.sessionId,M.handle.onMessageFromTools(JSON.stringify(U));return}j(L,void 0)}),$.on("close",()=>{clearInterval(C);for(let[,F]of J)try{F.handle.close()}catch{}J.clear()})}async function G3($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await z3();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 L of J)G.set(L,[]),X.set(L,new Set),L.wi.subscribe((M)=>{let{__selector:U,__argument:_}=M;if(!U||!_)return;if(U==="_rpc_reportConnectedApplicationList:"){let A=_.WIRApplicationDictionaryKey??{},P=Object.entries(A).map(([w,k])=>({appId:w,bundleId:k.WIRApplicationBundleIdentifierKey,name:k.WIRApplicationNameKey??k.WIRApplicationBundleIdentifierKey??w,isProxy:Boolean(k.WIRIsApplicationProxyKey)}));G.set(L,P);let I=X.get(L);for(let w of P){if(w.isProxy||I.has(w.appId))continue;I.add(w.appId),L.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:w.appId})}}else if(U==="_rpc_applicationConnected:"){let A=_,P=G.get(L)??[];if(!P.find((I)=>I.appId===A.WIRApplicationIdentifierKey))P.push({appId:A.WIRApplicationIdentifierKey,bundleId:A.WIRApplicationBundleIdentifierKey,name:A.WIRApplicationNameKey??A.WIRApplicationBundleIdentifierKey,isProxy:Boolean(A.WIRIsApplicationProxyKey)}),G.set(L,P);if(!A.WIRIsApplicationProxyKey){let I=X.get(L);if(!I.has(A.WIRApplicationIdentifierKey))I.add(A.WIRApplicationIdentifierKey),L.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:A.WIRApplicationIdentifierKey})}}else if(U==="_rpc_applicationDisconnected:"){let A=G.get(L)??[];G.set(L,A.filter((P)=>P.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${L.id}:${_.WIRApplicationIdentifierKey}`)}else if(U==="_rpc_applicationSentListing:"){let A=_.WIRApplicationIdentifierKey,P=_.WIRListingKey??{},I=new Map;for(let[w,k]of Object.entries(P))I.set(w,{pageId:Number(k.WIRPageIdentifierKey??0),title:k.WIRTitleKey??"",url:k.WIRURLKey??"",type:k.WIRTypeKey??"",connectionId:typeof k.WIRConnectionIdentifierKey==="string"?k.WIRConnectionIdentifierKey:null});Y.set(`${L.id}:${A}`,I)}}),L.wi.send("_rpc_reportIdentifier:",{}),L.wi.send("_rpc_getConnectedApplications:",{});let V=setInterval(()=>{for(let L of J){let M=G.get(L)??[];for(let U of M){if(U.isProxy)continue;L.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:U.appId})}}},X3),W=new Map;function z(){let L=[];for(let M of J){let U=G.get(M)??[];for(let _ of U){if(_.isProxy)continue;let A=Y.get(`${M.id}:${_.appId}`);if(!A)continue;for(let P of A.values()){let I=!!P.connectionId&&P.connectionId!==M.wi.connection;L.push({targetId:`${M.id}:${_.appId}:${P.pageId}`,source:M,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:P.pageId,title:P.title,url:P.url,type:P.type,inUseByOtherInspector:I})}}}return L}let K=crypto.randomUUID(),R=b4({brand:"",version:(L)=>({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://${L}/devtools/browser/${K}`}),listTargets:(L)=>z().map((M)=>f4({reqHost:L,id:M.targetId,description:`${M.source.label}${M.bundleId?` (${M.bundleId})`:""}`,title:M.title||M.appName,url:/^https?:/i.test(M.url)?M.url:"about:blank",type:F4(M.type)}))}),H=new w4.default({noServer:!0}),T=`/devtools/browser/${K}`;R.on("upgrade",(L,M,U)=>{let _=new URL(L.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===T){H.handleUpgrade(L,M,U,(P)=>{Y3(P,{listEntries:()=>z().map((I)=>({targetId:I.targetId,type:F4(I.type),title:I.title||I.appName,url:I.url})),createPageSession:(I,w)=>{let k=z().find((y)=>y.targetId===I);if(!k)return null;return E(k,w)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),M.destroy();return}let A=decodeURIComponent(_.pathname.slice(15));H.handleUpgrade(L,M,U,(P)=>{B(P,A)})});function E(L,M){let U=crypto.randomUUID(),A=new z8({readyState:1,send:(w)=>M(w)},L.source.wi,L.appId,L.pageId,U);bQ(A),W.set(U,A);let P=!!process.env.INSPECT_WEBKIT_DEBUG,I=L.source.wi.subscribe((w)=>{if(w.__selector!=="_rpc_applicationSentData:")return;let k=w.__argument;if(!k)return;if(k.WIRDestinationKey&&k.WIRDestinationKey!==U)return;if(k.WIRApplicationIdentifierKey!==L.appId)return;if(k.WIRPageIdentifierKey!==void 0&&Number(k.WIRPageIdentifierKey)!==L.pageId)return;let y=k.WIRMessageDataKey??k.WIRSocketDataKey;if(!y)return;let u=typeof y==="string"?y:new TextDecoder().decode(y);if(P)console.error(`[cdp] target>> ${u.slice(0,240)}`);A.onMessageFromTarget(u)});return L.source.wi.forwardSocketSetup(L.appId,L.pageId,U),console.error(`# devtools attached: ${L.source.label} :: ${L.appName} :: ${L.title||L.url}`),{onMessageFromTools(w){if(P)console.error(`[cdp] tools>> ${w.slice(0,300)}`);A.onMessageFromTools(w)},close(){I();try{A.wi.forwardDidClose(A.appId,A.pageId,A.senderKey)}catch{}W.delete(A.senderKey)}}}let q=new Map,C=8000;function D(L){let M=q.get(L);if(M)return M;let U=z().find((y)=>y.targetId===L);if(!U)return null;let _=crypto.randomUUID(),P=new z8({readyState:1,send:()=>{}},U.source.wi,U.appId,U.pageId,_);bQ(P),W.set(_,P);let I=U.source.wi.subscribe((y)=>{if(y.__selector!=="_rpc_applicationSentData:")return;let u=y.__argument;if(!u)return;if(u.WIRDestinationKey&&u.WIRDestinationKey!==_)return;if(u.WIRApplicationIdentifierKey!==U.appId)return;if(u.WIRPageIdentifierKey!==void 0&&Number(u.WIRPageIdentifierKey)!==U.pageId)return;let b=u.WIRMessageDataKey??u.WIRSocketDataKey;if(!b)return;let S=typeof b==="string"?b:new TextDecoder().decode(b);P.onMessageFromTarget(S)});U.source.wi.forwardSocketSetup(U.appId,U.pageId,_);let w=Promise.race([P.callTarget("DOM.getDocument",{depth:0}).then((y)=>y?.root?.nodeId),new Promise((y,u)=>setTimeout(()=>u(Error("DOM.getDocument timeout")),5000))]),k={cdp:P,rootNodeIdPromise:w,idleTimer:null,close(){if(k.idleTimer)clearTimeout(k.idleTimer);I();try{P.wi.forwardDidClose(P.appId,P.pageId,P.senderKey)}catch{}W.delete(_),q.delete(L)}};return q.set(L,k),w.catch(()=>k.close()),k}function j(L){if(L.idleTimer)clearTimeout(L.idleTimer);L.idleTimer=setTimeout(()=>L.close(),C)}function F(L){if(L){q.get(L)?.close();return}for(let M of q.values())M.close()}async function O(L,M){let U=D(L);if(!U)return;j(U);try{if(M){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 B(L,M){let U=z().find((I)=>I.targetId===M);if(!U){console.error(`# ws closed: unknown target ${M} (known: ${z().map((I)=>I.targetId).join(", ")||"none"})`),L.close(1011,`unknown target ${M}`);return}let _=E(U,(I)=>{if(L.readyState===1)L.send(I)}),A=!0;L.on("pong",()=>{A=!0});let P=setInterval(()=>{if(!A){try{L.terminate()}catch{}return}A=!1;try{L.ping()}catch{}},15000);L.on("message",(I,w)=>{let k=w?new TextDecoder().decode(I):I.toString();_.onMessageFromTools(k)}),L.on("close",()=>{clearInterval(P),_.close()})}return await v4(R,Z,Q),h4({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(V);for(let L of q.values())L.close();H.close(),R.close();for(let L of J)try{L.wi.close(),L.lockdown?.close()}catch{}},getTargets(){return z()},highlightTarget(L,M){return O(L,M)},releaseHighlight(L){F(L)}}}async function z3(){let[$,Q]=await Promise.all([K3(),V3()]);return[...$,...Q]}async function K3(){let $=[];try{$=await A4()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(W3))).filter((Z)=>Z!==null)}async function W3($){try{let Q=await D4($.Properties.SerialNumber),Z=await M8.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new E0(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 V3(){let $=[];try{$=await P4()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(M3))).filter((Z)=>Z!==null)}async function M3($){try{let{socket:Q,stream:Z}=await I4($.socketPath),J=new E0(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 F4($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class u4{url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new B4($),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!==B4.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function H3($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=b4({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(V)=>J.map((W)=>f4({reqHost:V,id:encodeURIComponent(W.url),description:W.label??"bun",title:W.label??W.url,url:W.url,type:"node"}))}),X=new w4.default({noServer:!0});Y.on("upgrade",(V,W,z)=>{let K=new URL(V.url??"/","http://placeholder");if(!K.pathname.startsWith("/devtools/page/")){W.destroy();return}let R=decodeURIComponent(K.pathname.slice(15)),H=J.find((T)=>T.url===R);if(!H){W.destroy();return}X.handleUpgrade(V,W,z,(T)=>{G(T,H).catch((E)=>{console.error(`# bun attach failed: ${E.message}`);try{T.close(1011,E.message)}catch{}})})});async function G(V,W){let z=!!process.env.INSPECT_WEBKIT_DEBUG,K=new u4(W.url);await K.ready();let R=crypto.randomUUID(),H=new z8(V,K,"bun",0,R);bQ(H);let T=K.onFrame((E)=>{if(z)console.error(`[bun] target>> ${E.slice(0,240)}`);H.onMessageFromTarget(E)});V.on("message",(E,q)=>{let C=q?new TextDecoder().decode(E):E.toString();if(z)console.error(`[bun] tools>> ${C.slice(0,300)}`);H.onMessageFromTools(C)}),V.on("close",()=>{T(),K.close()}),console.error(`# devtools attached: ${W.label??W.url}`)}return await v4(Y,Z,Q),h4({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function g4(){return A4()}async function R3(){let[$,Q]=await Promise.all([L3(),U3()]);return[...$.flat(),...Q.flat()]}async function L3(){let $=await g4();return Promise.all($.map(_3))}async function U3(){let $=await P4();return Promise.all($.map(N3))}async function _3($){let Q=null;try{return Q=await B3($),await c4(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 N3($){let Q=null;try{let{socket:Z,stream:J}=await I4($.socketPath);return Q=new E0(Z,J),await Q.reportIdentifier(),await c4(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function B3($){let Q=await D4($.Properties.SerialNumber),Z=await M8.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new E0(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function c4($,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 V of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:V.pageId,title:V.title,url:V.url,type:V.type})}return Y}var u1,g1,R4,c1,m1,p1,d1,q$=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?p1??=new WeakMap:d1??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?u1(g1($)):{};let G=Q||!$||!$.__esModule?R4(Z,"default",{value:$,enumerable:!0}):Z;for(let V of c1($))if(!m1.call(G,V))R4(G,V,{get:l1.bind($,V),enumerable:!0});if(J)Y.set($,G);return G},J$=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),n,A$,K8,n1,T0,j0,T4,j4,i1,vQ,hQ,o1,E4,a1,r1=`<?xml version="1.0" encoding="UTF-8"?>
|
|
68
|
+
${Q}</dict>`}function cQ($){let Q=SQ($,"");return new TextEncoder().encode(e2+Q+$J)}class P9{src;pos=0;constructor($){this.src=$}skip(){while(this.pos<this.src.length){let $=this.src[this.pos];if($===" "||$==="\t"||$===`
|
|
69
|
+
`||$==="\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 yQ($,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=ZJ($.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?fQ(Y.name):yQ($,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?fQ(G.name):yQ($,G.name)}}default:throw Error(`unknown plist tag <${Q}>`)}}function fQ($){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 V8($){let Q=typeof $==="string"?$:new TextDecoder().decode($),Z=new P9(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?fQ(J.name):yQ(Z,J.name)}function y$($,Q,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+$[Q+Y];return J}function JJ($){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=y$($,Z+8,8),G=y$($,Z+16,8),V=y$($,Z+24,8),W=Array(X);for(let R=0;R<X;R++)W[R]=y$($,V+R*J,J);function z(R){return y$($,R,Y)}function K(R){let H=W[R],T=$[H],O=T>>4,q=T&15;function C(D){if(q!==15)return{len:q,next:D};let j=$[D];if((j&240)!==16)throw Error("expected int marker for length");let F=1<<(j&15);return{len:y$($,D+1,F),next:D+1+F}}switch(O){case 0:if(q===0)return null;if(q===8)return!1;if(q===9)return!0;if(q===15)return null;throw Error(`unknown singleton ${q}`);case 1:{let D=1<<q,j=y$($,H+1,D);if(D===8&&j>Number.MAX_SAFE_INTEGER)return BigInt(j);return j}case 2:{let D=1<<q,j=new DataView($.buffer,$.byteOffset+H+1,D);return D===4?j.getFloat32(0,!1):j.getFloat64(0,!1)}case 3:{let j=new DataView($.buffer,$.byteOffset+H+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+j*1000)}case 4:{let{len:D,next:j}=C(H+1);return $.slice(j,j+D)}case 5:{let{len:D,next:j}=C(H+1);return new TextDecoder("ascii").decode($.slice(j,j+D))}case 6:{let{len:D,next:j}=C(H+1),F=$.slice(j,j+D*2),E=new Uint8Array(F.length);for(let B=0;B<F.length;B+=2)E[B]=F[B+1],E[B+1]=F[B];return new TextDecoder("utf-16le").decode(E)}case 10:{let{len:D,next:j}=C(H+1),F=[];for(let E=0;E<D;E++)F.push(K(z(j+E*Y)));return F}case 13:{let{len:D,next:j}=C(H+1),F={};for(let E=0;E<D;E++){let B=K(z(j+E*Y)),L=K(z(j+(D+E)*Y));if(typeof B!=="string")throw Error(`non-string dict key: ${typeof B}`);F[B]=L}return F}default:throw Error(`unknown bplist marker 0x${T.toString(16)} at ${H}`)}}return K(G)}function YJ($){if($.length>=8){if(new TextDecoder().decode($.slice(0,8))==="bplist00")return JJ($)}return V8($)}class M8{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 mQ($,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 lQ(){let $=new M8;return new Promise((Q,Z)=>{let J=C9.createConnection({path:zJ}),Y=(X)=>{$.close(X),Z(X)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let X=mQ(J,$);Q({socket:J,stream:$,detach:X})})})}async function KJ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!0);return(await $.read(Z-4)).slice(12)}function WJ($,Q,Z){let J=16+Z.length,Y=new Uint8Array(16),X=new DataView(Y.buffer);X.setUint32(0,J,!0),X.setUint32(4,XJ,!0),X.setUint32(8,GJ,!0),X.setUint32(12,Q,!0),$.write(Y),$.write(Z)}async function pQ($,Q,Z,J){let Y=cQ({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});WJ($,Z,Y);let X=await KJ(Q);return V8(X)}async function I9(){let{socket:$,stream:Q}=await lQ();try{return(await pQ($,Q,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{$.end()}}async function x9($){let{socket:Q,stream:Z}=await lQ();try{let Y=(await pQ(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 V8(Y)}finally{Q.end()}}async function F9($,Q){let{socket:Z,stream:J,detach:Y}=await lQ(),X=(Q&255)<<8|Q>>8&255,G=await pQ(Z,J,1,{MessageType:"Connect",DeviceID:$,PortNumber:X});if(G.MessageType!=="Result"||G.Number!==0){Z.end();let V=G.Number??"?";throw Error(`Connect to device ${$} port ${Q} failed (code ${V})`)}return{socket:Z,stream:J,detach:Y}}async function k9(){let $=VJ("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(`
|
|
70
|
+
`)){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 S9($){let Q=new M8;return new Promise((Z,J)=>{let Y=w9.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),mQ(Y,Q),Z({socket:Y,stream:Q})})})}async function PQ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return V8(J)}function IQ($,Q){let Z=cQ({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function xQ($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function j9($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new M8,V=y9.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),W=(z)=>{z$(`${J} tls error:`,z),G.close(z),X(z)};V.once("error",W),V.once("secureConnect",()=>{z$(`${J} tls handshake complete`),V.off("error",W);let z=mQ(V,G);Y({socket:V,stream:G,detach:z})})})}class H8{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){z$("connecting usbmux tunnel to lockdown port",T9);let{socket:Z,stream:J,detach:Y}=await F9($.DeviceID,T9),X=new H8(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);z$("sending QueryType"),IQ(Z,{Request:"QueryType"});let G=await PQ(J);if(z$("QueryType reply:",G),xQ(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){z$("StartSession with HostID",this.pair.HostID),IQ(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await PQ(this.stream);if(z$("StartSession reply:",$),xQ($,"StartSession"),$.EnableSessionSSL){z$("upgrading to TLS");let Q=await j9(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,z$("TLS upgrade complete")}}async startService($){z$("StartService",$),IQ(this.socket,{Request:"StartService",Service:$});let Q=await PQ(this.stream);return z$("StartService reply:",Q),xQ(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){z$("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await F9(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await j9(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function MJ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return YJ(J)}function HJ($,Q){let Z=cQ(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function RJ(){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 E0{socket;stream;connectionId=RJ();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await MJ(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){HJ(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 K8{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 V=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))V="target::error";let W=this.filters.get(V);if(!W)return this.sendToTools($);let z=Q;for(let K of W){if(!z)break;z=await K(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 UJ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function v($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function _J($,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 NJ($,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 BJ($,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((W)=>({functionName:W.functionName??"",scriptId:W.scriptId??"",url:W.url??"",lineNumber:Number(W.lineNumber??0),columnNumber:Number(W.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,V=Date.now();if(J.source==="console-api"){let W=J.type==="log"?J.level??"log":J.type??"log",z=FJ(W),K=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],R={type:z,args:K,executionContextId:Q.pageExecCtx.id||1,timestamp:V,stackTrace:G};return Q.lastConsoleApiCalled.value=R,$.fireEventToTools("Runtime.consoleAPICalled",R),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:V,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:TJ(J.level??J.type??"log"),text:String(J.text??""),timestamp:V,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 FJ($){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 TJ($){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 jJ($){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 OJ($){$.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 EJ($,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"}),V=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:V.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return b9(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return bQ(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",{}),V=v9(G?.frameTree);bQ(V),$.fireResultToTools(X.id,{frameTree:V})}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 b9($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function bQ($){if(!$)return;if(b9($.frame),Array.isArray($.childFrames))$.childFrames.forEach(bQ)}function v9($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(v9);return Q}function qJ($){$.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 AJ($){$.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 wQ($){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 SJ($){if(!$)return $;return{...wJ,...$,hasPostData:$.postData!=null}}function yJ($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...kJ,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function fJ($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function bJ($){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 vJ($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),V=(z)=>{let K=G.then(z,z);return G=K.catch(()=>{}),K};for(let[z,K]of Object.entries(DJ))$.addMessageFilter(`tools::${z}`,(R)=>{return R.method=K,Promise.resolve(R)});$.addMessageFilter("tools::Network.setCacheDisabled",(z)=>{if(z.params&&"cacheDisabled"in z.params)z.params={disabled:!!z.params.cacheDisabled};return Promise.resolve(z)});let W=async(z)=>{try{let K=await $.callTarget("Page.getCookies",{}),R=Array.isArray(K?.cookies)?K.cookies.map(bJ):[];$.fireResultToTools(z.id,{cookies:R})}catch(K){$.fireErrorToTools(z.id,{message:K?.message??String(K)})}return null};$.addMessageFilter("tools::Network.getCookies",W),$.addMessageFilter("tools::Network.getAllCookies",W),$.addMessageFilter("tools::Network.setCookie",(z)=>{let K=z.params??{};return z.method="Page.setCookie",z.params={cookie:{name:K.name,value:K.value,domain:K.domain??"",path:K.path??"/",expires:K.expires??-1,session:!1,httpOnly:!!K.httpOnly,secure:!!K.secure,sameSite:K.sameSite??"None"}},Promise.resolve(z)}),$.addMessageFilter("tools::Network.setCookies",async(z)=>{let K=Array.isArray(z.params?.cookies)?z.params.cookies:[];try{await Promise.all(K.map((R)=>$.callTarget("Page.setCookie",{cookie:R}))),$.fireResultToTools(z.id,{})}catch(R){$.fireErrorToTools(z.id,{message:R?.message??String(R)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(z)=>{let K=z.params??{},R=K.url??`https://${(K.domain??"").replace(/^\./,"")}${K.path??"/"}`;return z.method="Page.deleteCookie",z.params={cookieName:K.name,url:R},Promise.resolve(z)}),$.addMessageFilter("tools::Network.deleteCookie",(z)=>{return z.method="Page.deleteCookie",Promise.resolve(z)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(z)=>{try{let K=await $.callTarget("Page.getCookies",{}),R=Array.isArray(K?.cookies)?K.cookies:[];await Promise.all(R.map((H)=>$.callTarget("Page.deleteCookie",{cookieName:H.name,url:`${H.secure?"https":"http"}://${(H.domain??"").replace(/^\./,"")}${H.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(z.id,{})}catch(K){$.fireErrorToTools(z.id,{message:K?.message??String(K)})}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 K=z.params?.requestId,R=typeof K==="string"?Z.get(K):void 0;if(!R)return $.fireErrorToTools(z.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(R.method&&R.method.toUpperCase()!=="GET")return $.fireErrorToTools(z.id,{message:`Network.getResponseBody: cannot recover ${R.method} response body (bridge re-fetch is GET-only)`}),null;if(R.bytes===0)return $.fireResultToTools(z.id,{body:"",base64Encoded:!1}),null;return V(async()=>{try{let H={};for(let[B,L]of Object.entries(R.headers??{})){let M=B.toLowerCase();if(M==="if-none-match"||M==="if-modified-since"||M==="host"||M==="connection")continue;H[B]=String(L)}let T=new AbortController,O=setTimeout(()=>T.abort(),1e4),q;try{q=await fetch(R.url,{headers:H,redirect:"follow",signal:T.signal})}finally{clearTimeout(O)}let C=Number(q.headers.get("content-length")??"");if(Number.isFinite(C)&&C>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${C} bytes > ${"4194304"}) — skipped re-fetch`});try{await q.arrayBuffer()}catch{}return}let D=Buffer.from(await q.arrayBuffer());if(D.byteLength>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${D.byteLength} bytes > 4194304)`});return}let j=((q.headers.get("content-type")??"").split(";")[0]??"").trim(),F=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(j),E=F?D.toString("utf8"):D.toString("base64");$.fireResultToTools(z.id,{body:E,base64Encoded:!F})}catch(H){$.fireErrorToTools(z.id,{message:`Network.getResponseBody re-fetch failed: ${H?.message??String(H)}`})}}),null});for(let[z,K]of Object.entries(CJ))$.addMessageFilter(`target::${z}`,(R)=>{return fJ(R.params,K),Promise.resolve(R)});$.addMessageFilter("target::Network.requestWillBeSent",(z)=>{let K=z.params;if(K){if(Object.assign(K,{...PJ,...K}),K.request=SJ(K.request),K.type=wQ(K.type),typeof K.requestId==="string"&&typeof K.request?.url==="string"){if(Z.size>=1024){let R=Z.keys().next().value;if(R!==void 0)Z.delete(R)}Z.set(K.requestId,{url:K.request.url,method:K.request.method,headers:K.request.headers,frameId:K.frameId,bytes:0})}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.responseReceived",(z)=>{let K=z.params;if(K)Object.assign(K,{...IJ,...K}),K.response=yJ(K.response),K.type=wQ(K.type);return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFinished",(z)=>{let K=z.params;if(K){let R=K.metrics?.responseBodyBytesReceived;if(typeof R==="number"&&K.encodedDataLength==null)K.encodedDataLength=R;if(Object.assign(K,{...xJ,...K}),typeof K.requestId==="string"&&typeof R==="number"){let H=Z.get(K.requestId);if(H&&R>H.bytes)H.bytes=R}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.dataReceived",(z)=>{let K=z.params;if(K&&typeof K.requestId==="string"){let R=Z.get(K.requestId);if(R){let H=Number(K.dataLength)||0;R.bytes+=H}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFailed",(z)=>{let K=z.params;if(K){if(K.type=wQ(K.type),!("canceled"in K))K.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 K=z.params??{};if(!Q)return $.fireResultToTools(z.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let R=await $.callTarget("Network.loadResource",{frameId:K.frameId,url:K.url}),H=!!R?.content&&(R?.status??0)>=200&&(R?.status??0)<300,T;if(H)T=`network-resource:${K.frameId??""}:${K.url}`,Q.set(T,String(R.content));$.fireResultToTools(z.id,{resource:{success:H,stream:T,httpStatusCode:R?.status,headers:R?.headers,mimeType:R?.mimeType}})}catch(R){$.fireResultToTools(z.id,{resource:{success:!1,netError:2,netErrorName:R?.message??"ERR_FAILED"}})}return null})}function hJ($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>v($,Z,{}))}function uJ($){$.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 cJ($){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 vQ($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:f$($.style),selectorList:pJ($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:lJ[Z.type]}));return Q}function iJ($){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 V=G?.rules??[];for(let W=0;W<V.length;W++)if(gJ(V[W]?.style?.range,X))return{styleSheetId:Y,ordinal:W};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=cJ(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:f$(X.inlineStyle),attributesStyle:f$(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:f$(X?.inlineStyle),attributesStyle:f$(X?.attributesStyle),matchedCSSRules:dQ(G?.matchedCSSRules),pseudoElements:dJ(G?.pseudoElements),inherited:nJ(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 V of X)try{let W=await J(V.styleSheetId,V.range),z=await $.callTarget("CSS.setStyleText",{styleId:W,text:V.text});G.push(f$(z?.style)),Z.delete(V.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:V.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:V}=Y.params??{};try{let W=await J(X,G);Y.params={ruleId:W,selector:V}}catch(W){return $.fireErrorToTools(Y.id,{message:W?.message??String(W)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:vQ(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 V=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:vQ(V?.rule)})}catch(V){$.fireErrorToTools(Y.id,{message:V?.message??String(V)})}return null})}function aJ($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>v($,Q,oJ)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>v($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>v($,Q,{}))}function tJ($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function sJ($){let Q=async(Z)=>{let J=Z.params??{},Y=tJ(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let V={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},W=`(${rJ}, __sd_simulate(${JSON.stringify(V)}))`;await $.callTarget("Runtime.evaluate",{expression:W})}$.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 $3($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||eJ,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 V=G.slice(X,X+Y),W=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:V,eof:W,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 Q3($){$.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 Y3($){for(let[Z,J]of Object.entries(J3))$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J));for(let Z of Z3)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 hQ($){let Q=UJ();Y3($);let Z=$3($);_J($,Q),NJ($,Q),BJ($,Q),jJ($),OJ($),EJ($,Q),qJ($),AJ($),vJ($,Z),hJ($),uJ($),iJ($),aJ($),sJ($),Q3($)}function u9($){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 J0($){return $.replace(/[&<>"']/g,(Q)=>X3[Q])}function g9($){return h9.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 kQ(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return kQ(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return kQ(Z,{});if(J.pathname==="/")return G3(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function kQ($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function G3($,Q,Z){let J=Q.listTargets(Z),Y=J.map((W)=>`<li><strong>${J0(W.title||W.url||W.id)}</strong><br><small>${J0(W.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${J0(W.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">${J0(Z)}</code>.</p>`,V=`<!doctype html><meta charset=utf-8><title>${J0(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>${J0(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(V)}function c9($,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 m9($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(W,z)=>Q?`\x1B[${W}m${z}\x1B[0m`:z,J=(W)=>Z("1",W),Y=(W)=>Z("2",W),X=(W)=>Z("36",W),G=(W)=>Z("32",W),V=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(V)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function z3($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,V=new Map,W=null;function z(F){if($.readyState!==1)return;let E=JSON.stringify(F);if(Z)console.error(`[browser] tools<< ${E.slice(0,240)}`);$.send(E)}function K(F,E){let B={method:F,params:E};if(W)B.sessionId=W;z(B)}function R(F,E){return{targetId:F.targetId,type:F.type==="page"?"page":F.type||"other",title:F.title||"",url:F.url||"",attached:E,canAccessOpener:!1,browserContextId:"default"}}function H(F){for(let E of J.values())if(E.targetId===F)return!0;return!1}function T(F,E){let B=Q.listEntries().find((_)=>_.targetId===F);if(!B)return null;let L=crypto.randomUUID(),M=(_)=>{let A;try{A=JSON.parse(_)}catch{return}A.sessionId=L,z(A)},U=Q.createPageSession(F,M);if(!U)return null;return J.set(L,{handle:U,targetId:F}),K("Target.attachedToTarget",{sessionId:L,targetInfo:R(B,!0),waitingForDebugger:E}),{sessionId:L,entry:B}}function O(F){let E=J.get(F);if(!E)return!1;try{E.handle.close()}catch{}return J.delete(F),K("Target.detachedFromTarget",{sessionId:F,targetId:E.targetId}),!0}function q(){let F=Q.listEntries(),E=new Set;for(let B of F){E.add(B.targetId);let L=V.get(B.targetId);if(!L){if(V.set(B.targetId,B),Y)K("Target.targetCreated",{targetInfo:R(B,H(B.targetId))});if(X&&!H(B.targetId))T(B.targetId,G)}else if(L.title!==B.title||L.url!==B.url){if(V.set(B.targetId,B),Y)K("Target.targetInfoChanged",{targetInfo:R(B,H(B.targetId))})}}for(let B of[...V.keys()]){if(E.has(B))continue;V.delete(B);for(let[L,M]of J)if(M.targetId===B)O(L);if(Y)K("Target.targetDestroyed",{targetId:B})}}let C=setInterval(q,Q.refreshMs??1000);function D(F,E){if(F)E.sessionId=F;z(E)}function j(F,E){let{id:B,method:L}=F,M=F.params??{};switch(L){case"Browser.getVersion":return D(E,{id:B,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(!W)W=crypto.randomUUID();return D(E,{id:B,result:{sessionId:W}})}case"Target.setDiscoverTargets":{if(Y=!!M.discover,Y)for(let U of Q.listEntries())V.set(U.targetId,U),K("Target.targetCreated",{targetInfo:R(U,H(U.targetId))});if(typeof B==="number")D(E,{id:B,result:{}});return}case"Target.getTargets":{let U=Q.listEntries().map((_)=>R(_,H(_.targetId)));return D(E,{id:B,result:{targetInfos:U}})}case"Target.setAutoAttach":{if(X=!!M.autoAttach,G=!!M.waitForDebuggerOnStart,X){for(let U of Q.listEntries())if(!H(U.targetId))T(U.targetId,G)}if(typeof B==="number")D(E,{id:B,result:{}});return}case"Target.attachToTarget":{for(let[_,A]of J)if(A.targetId===M.targetId){if(typeof B==="number")D(E,{id:B,result:{sessionId:_}});return}let U=T(M.targetId,!1);if(!U){if(typeof B==="number")D(E,{id:B,error:{code:-32000,message:"No target with given id found"}});return}if(typeof B==="number")D(E,{id:B,result:{sessionId:U.sessionId}});return}case"Target.detachFromTarget":{if(O(M.sessionId),typeof B==="number")D(E,{id:B,result:{}});return}case"Target.sendMessageToTarget":{let U=J.get(M.sessionId);if(U)U.handle.onMessageFromTools(M.message);if(typeof B==="number")D(E,{id:B,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof B==="number")D(E,{id:B,result:{}});return;case"Target.getBrowserContexts":{if(typeof B==="number")D(E,{id:B,result:{browserContextIds:["default"]}});return}}if(typeof B==="number")D(E,{id:B,error:{code:-32601,message:`Browser-level method '${L??"?"}' not implemented`}})}$.on("message",(F,E)=>{let B=E?new TextDecoder().decode(F):F.toString();if(Z)console.error(`[browser] tools>> ${B.slice(0,240)}`);let L;try{L=JSON.parse(B)}catch{return}if(typeof L.sessionId==="string"){if(L.sessionId===W){let _={...L};return delete _.sessionId,j(_,L.sessionId)}let M=J.get(L.sessionId);if(!M){if(typeof L.id==="number")z({id:L.id,sessionId:L.sessionId,error:{code:-32000,message:`Session ${L.sessionId} not found`}});return}let U={...L};delete U.sessionId,M.handle.onMessageFromTools(JSON.stringify(U));return}j(L,void 0)}),$.on("close",()=>{clearInterval(C);for(let[,F]of J)try{F.handle.close()}catch{}J.clear()})}async function W3($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await V3();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 L of J)G.set(L,[]),X.set(L,new Set),L.wi.subscribe((M)=>{let{__selector:U,__argument:_}=M;if(!U||!_)return;if(U==="_rpc_reportConnectedApplicationList:"){let A=_.WIRApplicationDictionaryKey??{},P=Object.entries(A).map(([w,S])=>({appId:w,bundleId:S.WIRApplicationBundleIdentifierKey,name:S.WIRApplicationNameKey??S.WIRApplicationBundleIdentifierKey??w,isProxy:Boolean(S.WIRIsApplicationProxyKey)}));G.set(L,P);let I=X.get(L);for(let w of P){if(w.isProxy||I.has(w.appId))continue;I.add(w.appId),L.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:w.appId})}}else if(U==="_rpc_applicationConnected:"){let A=_,P=G.get(L)??[];if(!P.find((I)=>I.appId===A.WIRApplicationIdentifierKey))P.push({appId:A.WIRApplicationIdentifierKey,bundleId:A.WIRApplicationBundleIdentifierKey,name:A.WIRApplicationNameKey??A.WIRApplicationBundleIdentifierKey,isProxy:Boolean(A.WIRIsApplicationProxyKey)}),G.set(L,P);if(!A.WIRIsApplicationProxyKey){let I=X.get(L);if(!I.has(A.WIRApplicationIdentifierKey))I.add(A.WIRApplicationIdentifierKey),L.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:A.WIRApplicationIdentifierKey})}}else if(U==="_rpc_applicationDisconnected:"){let A=G.get(L)??[];G.set(L,A.filter((P)=>P.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${L.id}:${_.WIRApplicationIdentifierKey}`)}else if(U==="_rpc_applicationSentListing:"){let A=_.WIRApplicationIdentifierKey,P=_.WIRListingKey??{},I=new Map;for(let[w,S]of Object.entries(P))I.set(w,{pageId:Number(S.WIRPageIdentifierKey??0),title:S.WIRTitleKey??"",url:S.WIRURLKey??"",type:S.WIRTypeKey??"",connectionId:typeof S.WIRConnectionIdentifierKey==="string"?S.WIRConnectionIdentifierKey:null});Y.set(`${L.id}:${A}`,I)}}),L.wi.send("_rpc_reportIdentifier:",{}),L.wi.send("_rpc_getConnectedApplications:",{});let V=setInterval(()=>{for(let L of J){let M=G.get(L)??[];for(let U of M){if(U.isProxy)continue;L.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:U.appId})}}},K3),W=new Map;function z(){let L=[];for(let M of J){let U=G.get(M)??[];for(let _ of U){if(_.isProxy)continue;let A=Y.get(`${M.id}:${_.appId}`);if(!A)continue;for(let P of A.values()){let I=!!P.connectionId&&P.connectionId!==M.wi.connection;L.push({targetId:`${M.id}:${_.appId}:${P.pageId}`,source:M,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:P.pageId,title:P.title,url:P.url,type:P.type,inUseByOtherInspector:I})}}}return L}let K=crypto.randomUUID(),R=g9({brand:"",version:(L)=>({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://${L}/devtools/browser/${K}`}),listTargets:(L)=>z().map((M)=>u9({reqHost:L,id:M.targetId,description:`${M.source.label}${M.bundleId?` (${M.bundleId})`:""}`,title:M.title||M.appName,url:/^https?:/i.test(M.url)?M.url:"about:blank",type:E9(M.type)}))}),H=new f9.default({noServer:!0}),T=`/devtools/browser/${K}`;R.on("upgrade",(L,M,U)=>{let _=new URL(L.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===T){H.handleUpgrade(L,M,U,(P)=>{z3(P,{listEntries:()=>z().map((I)=>({targetId:I.targetId,type:E9(I.type),title:I.title||I.appName,url:I.url})),createPageSession:(I,w)=>{let S=z().find((y)=>y.targetId===I);if(!S)return null;return O(S,w)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),M.destroy();return}let A=decodeURIComponent(_.pathname.slice(15));H.handleUpgrade(L,M,U,(P)=>{B(P,A)})});function O(L,M){let U=crypto.randomUUID(),A=new K8({readyState:1,send:(w)=>M(w)},L.source.wi,L.appId,L.pageId,U);hQ(A),W.set(U,A);let P=!!process.env.INSPECT_WEBKIT_DEBUG,I=L.source.wi.subscribe((w)=>{if(w.__selector!=="_rpc_applicationSentData:")return;let S=w.__argument;if(!S)return;if(S.WIRDestinationKey&&S.WIRDestinationKey!==U)return;if(S.WIRApplicationIdentifierKey!==L.appId)return;if(S.WIRPageIdentifierKey!==void 0&&Number(S.WIRPageIdentifierKey)!==L.pageId)return;let y=S.WIRMessageDataKey??S.WIRSocketDataKey;if(!y)return;let u=typeof y==="string"?y:new TextDecoder().decode(y);if(P)console.error(`[cdp] target>> ${u.slice(0,240)}`);A.onMessageFromTarget(u)});return L.source.wi.forwardSocketSetup(L.appId,L.pageId,U),console.error(`# devtools attached: ${L.source.label} :: ${L.appName} :: ${L.title||L.url}`),{onMessageFromTools(w){if(P)console.error(`[cdp] tools>> ${w.slice(0,300)}`);A.onMessageFromTools(w)},close(){I();try{A.wi.forwardDidClose(A.appId,A.pageId,A.senderKey)}catch{}W.delete(A.senderKey)}}}let q=new Map,C=8000;function D(L){let M=q.get(L);if(M)return M;let U=z().find((y)=>y.targetId===L);if(!U)return null;let _=crypto.randomUUID(),P=new K8({readyState:1,send:()=>{}},U.source.wi,U.appId,U.pageId,_);hQ(P),W.set(_,P);let I=U.source.wi.subscribe((y)=>{if(y.__selector!=="_rpc_applicationSentData:")return;let u=y.__argument;if(!u)return;if(u.WIRDestinationKey&&u.WIRDestinationKey!==_)return;if(u.WIRApplicationIdentifierKey!==U.appId)return;if(u.WIRPageIdentifierKey!==void 0&&Number(u.WIRPageIdentifierKey)!==U.pageId)return;let b=u.WIRMessageDataKey??u.WIRSocketDataKey;if(!b)return;let k=typeof b==="string"?b:new TextDecoder().decode(b);P.onMessageFromTarget(k)});U.source.wi.forwardSocketSetup(U.appId,U.pageId,_);let w=Promise.race([P.callTarget("DOM.getDocument",{depth:0}).then((y)=>y?.root?.nodeId),new Promise((y,u)=>setTimeout(()=>u(Error("DOM.getDocument timeout")),5000))]),S={cdp:P,rootNodeIdPromise:w,idleTimer:null,close(){if(S.idleTimer)clearTimeout(S.idleTimer);I();try{P.wi.forwardDidClose(P.appId,P.pageId,P.senderKey)}catch{}W.delete(_),q.delete(L)}};return q.set(L,S),w.catch(()=>S.close()),S}function j(L){if(L.idleTimer)clearTimeout(L.idleTimer);L.idleTimer=setTimeout(()=>L.close(),C)}function F(L){if(L){q.get(L)?.close();return}for(let M of q.values())M.close()}async function E(L,M){let U=D(L);if(!U)return;j(U);try{if(M){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 B(L,M){let U=z().find((I)=>I.targetId===M);if(!U){console.error(`# ws closed: unknown target ${M} (known: ${z().map((I)=>I.targetId).join(", ")||"none"})`),L.close(1011,`unknown target ${M}`);return}let _=O(U,(I)=>{if(L.readyState===1)L.send(I)}),A=!0;L.on("pong",()=>{A=!0});let P=setInterval(()=>{if(!A){try{L.terminate()}catch{}return}A=!1;try{L.ping()}catch{}},15000);L.on("message",(I,w)=>{let S=w?new TextDecoder().decode(I):I.toString();_.onMessageFromTools(S)}),L.on("close",()=>{clearInterval(P),_.close()})}return await c9(R,Z,Q),m9({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(V);for(let L of q.values())L.close();H.close(),R.close();for(let L of J)try{L.wi.close(),L.lockdown?.close()}catch{}},getTargets(){return z()},highlightTarget(L,M){return E(L,M)},releaseHighlight(L){F(L)}}}async function V3(){let[$,Q]=await Promise.all([M3(),R3()]);return[...$,...Q]}async function M3(){let $=[];try{$=await I9()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(H3))).filter((Z)=>Z!==null)}async function H3($){try{let Q=await x9($.Properties.SerialNumber),Z=await H8.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new E0(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 R3(){let $=[];try{$=await k9()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(L3))).filter((Z)=>Z!==null)}async function L3($){try{let{socket:Q,stream:Z}=await S9($.socketPath),J=new E0(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 E9($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class l9{url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new O9($),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!==O9.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function U3($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=g9({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(V)=>J.map((W)=>u9({reqHost:V,id:encodeURIComponent(W.url),description:W.label??"bun",title:W.label??W.url,url:W.url,type:"node"}))}),X=new f9.default({noServer:!0});Y.on("upgrade",(V,W,z)=>{let K=new URL(V.url??"/","http://placeholder");if(!K.pathname.startsWith("/devtools/page/")){W.destroy();return}let R=decodeURIComponent(K.pathname.slice(15)),H=J.find((T)=>T.url===R);if(!H){W.destroy();return}X.handleUpgrade(V,W,z,(T)=>{G(T,H).catch((O)=>{console.error(`# bun attach failed: ${O.message}`);try{T.close(1011,O.message)}catch{}})})});async function G(V,W){let z=!!process.env.INSPECT_WEBKIT_DEBUG,K=new l9(W.url);await K.ready();let R=crypto.randomUUID(),H=new K8(V,K,"bun",0,R);hQ(H);let T=K.onFrame((O)=>{if(z)console.error(`[bun] target>> ${O.slice(0,240)}`);H.onMessageFromTarget(O)});V.on("message",(O,q)=>{let C=q?new TextDecoder().decode(O):O.toString();if(z)console.error(`[bun] tools>> ${C.slice(0,300)}`);H.onMessageFromTools(C)}),V.on("close",()=>{T(),K.close()}),console.error(`# devtools attached: ${W.label??W.url}`)}return await c9(Y,Z,Q),m9({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function p9(){return I9()}async function _3(){let[$,Q]=await Promise.all([N3(),B3()]);return[...$.flat(),...Q.flat()]}async function N3(){let $=await p9();return Promise.all($.map(F3))}async function B3(){let $=await k9();return Promise.all($.map(T3))}async function F3($){let Q=null;try{return Q=await j3($),await d9(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 T3($){let Q=null;try{let{socket:Z,stream:J}=await S9($.socketPath);return Q=new E0(Z,J),await Q.reportIdentifier(),await d9(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function j3($){let Q=await x9($.Properties.SerialNumber),Z=await H8.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new E0(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function d9($,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 V of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:V.pageId,title:V.title,url:V.url,type:V.type})}return Y}var m2,l2,N9,p2,d2,i2,o2,q$=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?i2??=new WeakMap:o2??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?m2(l2($)):{};let G=Q||!$||!$.__esModule?N9(Z,"default",{value:$,enumerable:!0}):Z;for(let V of p2($))if(!d2.call(G,V))N9(G,V,{get:n2.bind($,V),enumerable:!0});if(J)Y.set($,G);return G},Z$=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),n,A$,W8,a2,j0,O0,q9,A9,r2,uQ,gQ,t2,D9,s2,e2=`<?xml version="1.0" encoding="UTF-8"?>
|
|
71
71
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
72
72
|
<plist version="1.0">
|
|
73
|
-
|
|
73
|
+
`,$J=`
|
|
74
74
|
</plist>
|
|
75
|
-
`,
|
|
75
|
+
`,XJ=1,GJ=8,zJ="/var/run/usbmuxd",T9=62078,z$=(...$)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...$)},xG,wG,kG,SG,yG,fG,LJ,f9,O9,DJ,CJ,PJ,IJ,xJ,wJ,kJ,gJ=($,Q)=>!!$&&!!Q&&$.startLine===Q.startLine&&$.endLine===Q.endLine&&$.startColumn===Q.startColumn&&$.endColumn===Q.endColumn,mJ=($)=>$&&{name:$.name,value:$.value,text:$.text,implicit:$.implicit,parsedOk:$.parsedOk!==!1,important:!!$.priority,disabled:$.status==="disabled",range:$.range},f$=($)=>$&&{styleSheetId:$.styleId?.styleSheetId,cssText:$.cssText,range:$.range,shorthandEntries:$.shorthandEntries??[],cssProperties:Array.isArray($.cssProperties)?$.cssProperties.map(mJ):[]},lJ,pJ=($)=>$&&{text:$.text,selectors:Array.isArray($.selectors)?$.selectors.map((Q)=>({text:Q.text,range:Q.range??$.range})):[]},dQ=($)=>Array.isArray($)?$.map((Q)=>({matchingSelectors:Q.matchingSelectors,rule:vQ(Q.rule)})):[],dJ=($)=>Array.isArray($)?$.map((Q)=>({pseudoType:Q.pseudoId,matches:dQ(Q.matches)})):[],nJ=($)=>Array.isArray($)?$.map((Q)=>({inlineStyle:f$(Q.inlineStyle),matchedCSSRules:dQ(Q.matchedCSSRules)})):[],oJ,rJ=`
|
|
76
76
|
function __sd_simulate(p){
|
|
77
77
|
var el = document.elementFromPoint(p.x, p.y);
|
|
78
78
|
if (!el) return false;
|
|
@@ -87,71 +87,71 @@ function __sd_simulate(p){
|
|
|
87
87
|
});
|
|
88
88
|
el.dispatchEvent(ev);
|
|
89
89
|
return true;
|
|
90
|
-
}`,r2=65536,e2,$3,Z3,X3=1500;var l4=t(()=>{u1=Object.create,g1=Object.getPrototypeOf,R4=Object.defineProperty,c1=Object.getOwnPropertyNames,m1=Object.prototype.hasOwnProperty;n=h1(import.meta.url),A$=J$(($,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:()=>{}}}),K8=J$(($,Q)=>{var{EMPTY_BUFFER:Z}=A$(),J=Buffer[Symbol.species];function Y(z,K){if(z.length===0)return Z;if(z.length===1)return z[0];let R=Buffer.allocUnsafe(K),H=0;for(let T=0;T<z.length;T++){let E=z[T];R.set(E,H),H+=E.length}if(H<K)return new J(R.buffer,R.byteOffset,H);return R}function X(z,K,R,H,T){for(let E=0;E<T;E++)R[H+E]=z[E]^K[E&3]}function G(z,K){for(let R=0;R<z.length;R++)z[R]^=K[R&3]}function V(z){if(z.length===z.buffer.byteLength)return z.buffer;return z.buffer.slice(z.byteOffset,z.byteOffset+z.length)}function W(z){if(W.readOnly=!0,Buffer.isBuffer(z))return z;let K;if(z instanceof ArrayBuffer)K=new J(z);else if(ArrayBuffer.isView(z))K=new J(z.buffer,z.byteOffset,z.byteLength);else K=Buffer.from(z),W.readOnly=!1;return K}if(Q.exports={concat:Y,mask:X,toArrayBuffer:V,toBuffer:W,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let z=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(K,R,H,T,E){if(E<48)X(K,R,H,T,E);else z.mask(K,R,H,T,E)},Q.exports.unmask=function(K,R){if(K.length<32)G(K,R);else z.unmask(K,R)}}catch(z){}}),n1=J$(($,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}),T0=J$(($,Q)=>{var Z=n("zlib"),J=K8(),Y=n1(),{kStatusCode:X}=A$(),G=Buffer[Symbol.species],V=Buffer.from([0,0,255,255]),W=Symbol("permessage-deflate"),z=Symbol("total-length"),K=Symbol("callback"),R=Symbol("buffers"),H=Symbol("error"),T;class E{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,!T){let F=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;T=new Y(F)}}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[K];if(this._deflate.close(),this._deflate=null,j)j(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(j){let F=this._options,O=j.find((B)=>{if(F.serverNoContextTakeover===!1&&B.server_no_context_takeover||B.server_max_window_bits&&(F.serverMaxWindowBits===!1||typeof F.serverMaxWindowBits==="number"&&F.serverMaxWindowBits>B.server_max_window_bits)||typeof F.clientMaxWindowBits==="number"&&!B.client_max_window_bits)return!1;return!0});if(!O)throw Error("None of the extension offers can be accepted");if(F.serverNoContextTakeover)O.server_no_context_takeover=!0;if(F.clientNoContextTakeover)O.client_no_context_takeover=!0;if(typeof F.serverMaxWindowBits==="number")O.server_max_window_bits=F.serverMaxWindowBits;if(typeof F.clientMaxWindowBits==="number")O.client_max_window_bits=F.clientMaxWindowBits;else if(O.client_max_window_bits===!0||F.clientMaxWindowBits===!1)delete O.client_max_window_bits;return O}acceptAsClient(j){let F=j[0];if(this._options.clientNoContextTakeover===!1&&F.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!F.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")F.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&F.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return F}normalizeParams(j){return j.forEach((F)=>{Object.keys(F).forEach((O)=>{let B=F[O];if(B.length>1)throw Error(`Parameter "${O}" must have only a single value`);if(B=B[0],O==="client_max_window_bits"){if(B!==!0){let L=+B;if(!Number.isInteger(L)||L<8||L>15)throw TypeError(`Invalid value for parameter "${O}": ${B}`);B=L}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${O}": ${B}`)}else if(O==="server_max_window_bits"){let L=+B;if(!Number.isInteger(L)||L<8||L>15)throw TypeError(`Invalid value for parameter "${O}": ${B}`);B=L}else if(O==="client_no_context_takeover"||O==="server_no_context_takeover"){if(B!==!0)throw TypeError(`Invalid value for parameter "${O}": ${B}`)}else throw Error(`Unknown parameter "${O}"`);F[O]=B})}),j}decompress(j,F,O){T.add((B)=>{this._decompress(j,F,(L,M)=>{B(),O(L,M)})})}compress(j,F,O){T.add((B)=>{this._compress(j,F,(L,M)=>{B(),O(L,M)})})}_decompress(j,F,O){let B=this._isServer?"client":"server";if(!this._inflate){let L=`${B}_max_window_bits`,M=typeof this.params[L]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[L];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:M}),this._inflate[W]=this,this._inflate[z]=0,this._inflate[R]=[],this._inflate.on("error",D),this._inflate.on("data",C)}if(this._inflate[K]=O,this._inflate.write(j),F)this._inflate.write(V);this._inflate.flush(()=>{let L=this._inflate[H];if(L){this._inflate.close(),this._inflate=null,O(L);return}let M=J.concat(this._inflate[R],this._inflate[z]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[z]=0,this._inflate[R]=[],F&&this.params[`${B}_no_context_takeover`])this._inflate.reset();O(null,M)})}_compress(j,F,O){let B=this._isServer?"server":"client";if(!this._deflate){let L=`${B}_max_window_bits`,M=typeof this.params[L]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[L];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:M}),this._deflate[z]=0,this._deflate[R]=[],this._deflate.on("data",q)}this._deflate[K]=O,this._deflate.write(j),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let L=J.concat(this._deflate[R],this._deflate[z]);if(F)L=new G(L.buffer,L.byteOffset,L.length-4);if(this._deflate[K]=null,this._deflate[z]=0,this._deflate[R]=[],F&&this.params[`${B}_no_context_takeover`])this._deflate.reset();O(null,L)})}}Q.exports=E;function q(j){this[R].push(j),this[z]+=j.length}function C(j){if(this[z]+=j.length,this[W]._maxPayload<1||this[z]<=this[W]._maxPayload){this[R].push(j);return}this[H]=RangeError("Max payload size exceeded"),this[H].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[H][X]=1009,this.removeListener("data",C),this.reset()}function D(j){if(this[W]._inflate=null,this[H]){this[K](this[H]);return}j[X]=1007,this[K](j)}}),j0=J$(($,Q)=>{var{isUtf8:Z}=n("buffer"),{hasBlob:J}=A$(),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(W){return W>=1000&&W<=1014&&W!==1004&&W!==1005&&W!==1006||W>=3000&&W<=4999}function G(W){let z=W.length,K=0;while(K<z)if((W[K]&128)===0)K++;else if((W[K]&224)===192){if(K+1===z||(W[K+1]&192)!==128||(W[K]&254)===192)return!1;K+=2}else if((W[K]&240)===224){if(K+2>=z||(W[K+1]&192)!==128||(W[K+2]&192)!==128||W[K]===224&&(W[K+1]&224)===128||W[K]===237&&(W[K+1]&224)===160)return!1;K+=3}else if((W[K]&248)===240){if(K+3>=z||(W[K+1]&192)!==128||(W[K+2]&192)!==128||(W[K+3]&192)!==128||W[K]===240&&(W[K+1]&240)===128||W[K]===244&&W[K+1]>143||W[K]>244)return!1;K+=4}else return!1;return!0}function V(W){return J&&typeof W==="object"&&typeof W.arrayBuffer==="function"&&typeof W.type==="string"&&typeof W.stream==="function"&&(W[Symbol.toStringTag]==="Blob"||W[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:V,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(W){return W.length<24?G(W):Z(W)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let W=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(z){return z.length<32?G(z):W(z)}}catch(W){}}),T4=J$(($,Q)=>{var{Writable:Z}=n("stream"),J=T0(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:V}=A$(),{concat:W,toArrayBuffer:z,unmask:K}=K8(),{isValidStatusCode:R,isValidUTF8:H}=j0(),T=Buffer[Symbol.species],E=0,q=1,C=2,D=3,j=4,F=5,O=6;class B extends Z{constructor(L={}){super();this._allowSynchronousEvents=L.allowSynchronousEvents!==void 0?L.allowSynchronousEvents:!0,this._binaryType=L.binaryType||Y[0],this._extensions=L.extensions||{},this._isServer=!!L.isServer,this._maxPayload=L.maxPayload|0,this._skipUTF8Validation=!!L.skipUTF8Validation,this[V]=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=E}_write(L,M,U){if(this._opcode===8&&this._state==E)return U();this._bufferedBytes+=L.length,this._buffers.push(L),this.startLoop(U)}consume(L){if(this._bufferedBytes-=L,L===this._buffers[0].length)return this._buffers.shift();if(L<this._buffers[0].length){let U=this._buffers[0];return this._buffers[0]=new T(U.buffer,U.byteOffset+L,U.length-L),new T(U.buffer,U.byteOffset,L)}let M=Buffer.allocUnsafe(L);do{let U=this._buffers[0],_=M.length-L;if(L>=U.length)M.set(this._buffers.shift(),_);else M.set(new Uint8Array(U.buffer,U.byteOffset,L),_),this._buffers[0]=new T(U.buffer,U.byteOffset+L,U.length-L);L-=U.length}while(L>0);return M}startLoop(L){this._loop=!0;do switch(this._state){case E:this.getInfo(L);break;case q:this.getPayloadLength16(L);break;case C:this.getPayloadLength64(L);break;case D:this.getMask();break;case j:this.getData(L);break;case F:case O:this._loop=!1;return}while(this._loop);if(!this._errored)L()}getInfo(L){if(this._bufferedBytes<2){this._loop=!1;return}let M=this.consume(2);if((M[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");L(_);return}let U=(M[0]&64)===64;if(U&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");L(_);return}if(this._fin=(M[0]&128)===128,this._opcode=M[0]&15,this._payloadLength=M[1]&127,this._opcode===0){if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");L(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");L(_);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");L(_);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");L(_);return}if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");L(_);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");L(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");L(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(M[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");L(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");L(_);return}if(this._payloadLength===126)this._state=q;else if(this._payloadLength===127)this._state=C;else this.haveLength(L)}getPayloadLength16(L){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(L)}getPayloadLength64(L){if(this._bufferedBytes<8){this._loop=!1;return}let M=this.consume(8),U=M.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");L(_);return}this._payloadLength=U*Math.pow(2,32)+M.readUInt32BE(4),this.haveLength(L)}haveLength(L){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let M=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");L(M);return}}if(this._masked)this._state=D;else this._state=j}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=j}getData(L){let M=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(M=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)K(M,this._mask)}if(this._opcode>7){this.controlMessage(M,L);return}if(this._compressed){this._state=F,this.decompress(M,L);return}if(M.length)this._messageLength=this._totalPayloadLength,this._fragments.push(M);this.dataMessage(L)}decompress(L,M){this._extensions[J.extensionName].decompress(L,this._fin,(_,A)=>{if(_)return M(_);if(A.length){if(this._messageLength+=A.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let P=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");M(P);return}this._fragments.push(A)}if(this.dataMessage(M),this._state===E)this.startLoop(M)})}dataMessage(L){if(!this._fin){this._state=E;return}let M=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")_=W(U,M);else if(this._binaryType==="arraybuffer")_=z(W(U,M));else if(this._binaryType==="blob")_=new Blob(U);else _=U;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=E;else this._state=O,setImmediate(()=>{this.emit("message",_,!0),this._state=E,this.startLoop(L)})}else{let _=W(U,M);if(!this._skipUTF8Validation&&!H(_)){let A=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");L(A);return}if(this._state===F||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=E;else this._state=O,setImmediate(()=>{this.emit("message",_,!1),this._state=E,this.startLoop(L)})}}controlMessage(L,M){if(this._opcode===8){if(L.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let U=L.readUInt16BE(0);if(!R(U)){let A=this.createError(RangeError,`invalid status code ${U}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");M(A);return}let _=new T(L.buffer,L.byteOffset+2,L.length-2);if(!this._skipUTF8Validation&&!H(_)){let A=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");M(A);return}this._loop=!1,this.emit("conclude",U,_),this.end()}this._state=E;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",L),this._state=E;else this._state=O,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",L),this._state=E,this.startLoop(M)})}createError(L,M,U,_,A){this._loop=!1,this._errored=!0;let P=new L(U?`Invalid WebSocket frame: ${M}`:M);return Error.captureStackTrace(P,this.createError),P.code=A,P[G]=_,P}}Q.exports=B}),j4=J$(($,Q)=>{var{Duplex:Z}=n("stream"),{randomFillSync:J}=n("crypto"),Y=T0(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:V}=A$(),{isBlob:W,isValidStatusCode:z}=j0(),{mask:K,toBuffer:R}=K8(),H=Symbol("kByteLength"),T=Buffer.alloc(4),E=8192,q,C=E,D=0,j=1,F=2;class O{constructor(M,U,_){if(this._extensions=U||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=M,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=D,this.onerror=V,this[G]=void 0}static frame(M,U){let _,A=!1,P=2,I=!1;if(U.mask){if(_=U.maskBuffer||T,U.generateMask)U.generateMask(_);else{if(C===E){if(q===void 0)q=Buffer.alloc(E);J(q,0,E),C=0}_[0]=q[C++],_[1]=q[C++],_[2]=q[C++],_[3]=q[C++]}I=(_[0]|_[1]|_[2]|_[3])===0,P=6}let w;if(typeof M==="string")if((!U.mask||I)&&U[H]!==void 0)w=U[H];else M=Buffer.from(M),w=M.length;else w=M.length,A=U.mask&&U.readOnly&&!I;let k=w;if(w>=65536)P+=8,k=127;else if(w>125)P+=2,k=126;let y=Buffer.allocUnsafe(A?w+P:P);if(y[0]=U.fin?U.opcode|128:U.opcode,U.rsv1)y[0]|=64;if(y[1]=k,k===126)y.writeUInt16BE(w,2);else if(k===127)y[2]=y[3]=0,y.writeUIntBE(w,4,6);if(!U.mask)return[y,M];if(y[1]|=128,y[P-4]=_[0],y[P-3]=_[1],y[P-2]=_[2],y[P-1]=_[3],I)return[y,M];if(A)return K(M,_,y,P,w),[y];return K(M,_,M,0,w),[y,M]}close(M,U,_,A){let P;if(M===void 0)P=X;else if(typeof M!=="number"||!z(M))throw TypeError("First argument must be a valid error code number");else if(U===void 0||!U.length)P=Buffer.allocUnsafe(2),P.writeUInt16BE(M,0);else{let w=Buffer.byteLength(U);if(w>123)throw RangeError("The message must not be greater than 123 bytes");if(P=Buffer.allocUnsafe(2+w),P.writeUInt16BE(M,0),typeof U==="string")P.write(U,2);else P.set(U,2)}let I={[H]:P.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==D)this.enqueue([this.dispatch,P,!1,I,A]);else this.sendFrame(O.frame(P,I),A)}ping(M,U,_){let A,P;if(typeof M==="string")A=Buffer.byteLength(M),P=!1;else if(W(M))A=M.size,P=!1;else M=R(M),A=M.length,P=R.readOnly;if(A>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[H]:A,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:9,readOnly:P,rsv1:!1};if(W(M))if(this._state!==D)this.enqueue([this.getBlobData,M,!1,I,_]);else this.getBlobData(M,!1,I,_);else if(this._state!==D)this.enqueue([this.dispatch,M,!1,I,_]);else this.sendFrame(O.frame(M,I),_)}pong(M,U,_){let A,P;if(typeof M==="string")A=Buffer.byteLength(M),P=!1;else if(W(M))A=M.size,P=!1;else M=R(M),A=M.length,P=R.readOnly;if(A>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[H]:A,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:10,readOnly:P,rsv1:!1};if(W(M))if(this._state!==D)this.enqueue([this.getBlobData,M,!1,I,_]);else this.getBlobData(M,!1,I,_);else if(this._state!==D)this.enqueue([this.dispatch,M,!1,I,_]);else this.sendFrame(O.frame(M,I),_)}send(M,U,_){let A=this._extensions[Y.extensionName],P=U.binary?2:1,I=U.compress,w,k;if(typeof M==="string")w=Buffer.byteLength(M),k=!1;else if(W(M))w=M.size,k=!1;else M=R(M),w=M.length,k=R.readOnly;if(this._firstFragment){if(this._firstFragment=!1,I&&A&&A.params[A._isServer?"server_no_context_takeover":"client_no_context_takeover"])I=w>=A._threshold;this._compress=I}else I=!1,P=0;if(U.fin)this._firstFragment=!0;let y={[H]:w,fin:U.fin,generateMask:this._generateMask,mask:U.mask,maskBuffer:this._maskBuffer,opcode:P,readOnly:k,rsv1:I};if(W(M))if(this._state!==D)this.enqueue([this.getBlobData,M,this._compress,y,_]);else this.getBlobData(M,this._compress,y,_);else if(this._state!==D)this.enqueue([this.dispatch,M,this._compress,y,_]);else this.dispatch(M,this._compress,y,_)}getBlobData(M,U,_,A){this._bufferedBytes+=_[H],this._state=F,M.arrayBuffer().then((P)=>{if(this._socket.destroyed){let w=Error("The socket was closed while the blob was being read");process.nextTick(B,this,w,A);return}this._bufferedBytes-=_[H];let I=R(P);if(!U)this._state=D,this.sendFrame(O.frame(I,_),A),this.dequeue();else this.dispatch(I,U,_,A)}).catch((P)=>{process.nextTick(L,this,P,A)})}dispatch(M,U,_,A){if(!U){this.sendFrame(O.frame(M,_),A);return}let P=this._extensions[Y.extensionName];this._bufferedBytes+=_[H],this._state=j,P.compress(M,_.fin,(I,w)=>{if(this._socket.destroyed){let k=Error("The socket was closed while data was being compressed");B(this,k,A);return}this._bufferedBytes-=_[H],this._state=D,_.readOnly=!1,this.sendFrame(O.frame(w,_),A),this.dequeue()})}dequeue(){while(this._state===D&&this._queue.length){let M=this._queue.shift();this._bufferedBytes-=M[3][H],Reflect.apply(M[0],this,M.slice(1))}}enqueue(M){this._bufferedBytes+=M[3][H],this._queue.push(M)}sendFrame(M,U){if(M.length===2)this._socket.cork(),this._socket.write(M[0]),this._socket.write(M[1],U),this._socket.uncork();else this._socket.write(M[0],U)}}Q.exports=O;function B(M,U,_){if(typeof _==="function")_(U);for(let A=0;A<M._queue.length;A++){let P=M._queue[A],I=P[P.length-1];if(typeof I==="function")I(U)}}function L(M,U,_){B(M,U,_),M.onerror(U)}}),i1=J$(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=A$(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),V=Symbol("kMessage"),W=Symbol("kReason"),z=Symbol("kTarget"),K=Symbol("kType"),R=Symbol("kWasClean");class H{constructor(j){this[z]=null,this[K]=j}get target(){return this[z]}get type(){return this[K]}}Object.defineProperty(H.prototype,"target",{enumerable:!0}),Object.defineProperty(H.prototype,"type",{enumerable:!0});class T extends H{constructor(j,F={}){super(j);this[Y]=F.code===void 0?0:F.code,this[W]=F.reason===void 0?"":F.reason,this[R]=F.wasClean===void 0?!1:F.wasClean}get code(){return this[Y]}get reason(){return this[W]}get wasClean(){return this[R]}}Object.defineProperty(T.prototype,"code",{enumerable:!0}),Object.defineProperty(T.prototype,"reason",{enumerable:!0}),Object.defineProperty(T.prototype,"wasClean",{enumerable:!0});class E extends H{constructor(j,F={}){super(j);this[G]=F.error===void 0?null:F.error,this[V]=F.message===void 0?"":F.message}get error(){return this[G]}get message(){return this[V]}}Object.defineProperty(E.prototype,"error",{enumerable:!0}),Object.defineProperty(E.prototype,"message",{enumerable:!0});class q extends H{constructor(j,F={}){super(j);this[X]=F.data===void 0?null:F.data}get data(){return this[X]}}Object.defineProperty(q.prototype,"data",{enumerable:!0});var C={addEventListener(j,F,O={}){for(let L of this.listeners(j))if(!O[Z]&&L[J]===F&&!L[Z])return;let B;if(j==="message")B=function(M,U){let _=new q("message",{data:U?M:M.toString()});_[z]=this,D(F,this,_)};else if(j==="close")B=function(M,U){let _=new T("close",{code:M,reason:U.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[z]=this,D(F,this,_)};else if(j==="error")B=function(M){let U=new E("error",{error:M,message:M.message});U[z]=this,D(F,this,U)};else if(j==="open")B=function(){let M=new H("open");M[z]=this,D(F,this,M)};else return;if(B[Z]=!!O[Z],B[J]=F,O.once)this.once(j,B);else this.on(j,B)},removeEventListener(j,F){for(let O of this.listeners(j))if(O[J]===F&&!O[Z]){this.removeListener(j,O);break}}};Q.exports={CloseEvent:T,ErrorEvent:E,Event:H,EventTarget:C,MessageEvent:q};function D(j,F,O){if(typeof j==="object"&&j.handleEvent)j.handleEvent.call(j,O);else j.call(F,O)}}),vQ=J$(($,Q)=>{var{tokenChars:Z}=j0();function J(G,V,W){if(G[V]===void 0)G[V]=[W];else G[V].push(W)}function Y(G){let V=Object.create(null),W=Object.create(null),z=!1,K=!1,R=!1,H,T,E=-1,q=-1,C=-1,D=0;for(;D<G.length;D++)if(q=G.charCodeAt(D),H===void 0)if(C===-1&&Z[q]===1){if(E===-1)E=D}else if(D!==0&&(q===32||q===9)){if(C===-1&&E!==-1)C=D}else if(q===59||q===44){if(E===-1)throw SyntaxError(`Unexpected character at index ${D}`);if(C===-1)C=D;let F=G.slice(E,C);if(q===44)J(V,F,W),W=Object.create(null);else H=F;E=C=-1}else throw SyntaxError(`Unexpected character at index ${D}`);else if(T===void 0)if(C===-1&&Z[q]===1){if(E===-1)E=D}else if(q===32||q===9){if(C===-1&&E!==-1)C=D}else if(q===59||q===44){if(E===-1)throw SyntaxError(`Unexpected character at index ${D}`);if(C===-1)C=D;if(J(W,G.slice(E,C),!0),q===44)J(V,H,W),W=Object.create(null),H=void 0;E=C=-1}else if(q===61&&E!==-1&&C===-1)T=G.slice(E,D),E=C=-1;else throw SyntaxError(`Unexpected character at index ${D}`);else if(K){if(Z[q]!==1)throw SyntaxError(`Unexpected character at index ${D}`);if(E===-1)E=D;else if(!z)z=!0;K=!1}else if(R)if(Z[q]===1){if(E===-1)E=D}else if(q===34&&E!==-1)R=!1,C=D;else if(q===92)K=!0;else throw SyntaxError(`Unexpected character at index ${D}`);else if(q===34&&G.charCodeAt(D-1)===61)R=!0;else if(C===-1&&Z[q]===1){if(E===-1)E=D}else if(E!==-1&&(q===32||q===9)){if(C===-1)C=D}else if(q===59||q===44){if(E===-1)throw SyntaxError(`Unexpected character at index ${D}`);if(C===-1)C=D;let F=G.slice(E,C);if(z)F=F.replace(/\\/g,""),z=!1;if(J(W,T,F),q===44)J(V,H,W),W=Object.create(null),H=void 0;T=void 0,E=C=-1}else throw SyntaxError(`Unexpected character at index ${D}`);if(E===-1||R||q===32||q===9)throw SyntaxError("Unexpected end of input");if(C===-1)C=D;let j=G.slice(E,C);if(H===void 0)J(V,j,W);else{if(T===void 0)J(W,j,!0);else if(z)J(W,T,j.replace(/\\/g,""));else J(W,T,j);J(V,H,W)}return V}function X(G){return Object.keys(G).map((V)=>{let W=G[V];if(!Array.isArray(W))W=[W];return W.map((z)=>{return[V].concat(Object.keys(z).map((K)=>{let R=z[K];if(!Array.isArray(R))R=[R];return R.map((H)=>H===!0?K:`${K}=${H}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),hQ=J$(($,Q)=>{var Z=n("events"),J=n("https"),Y=n("http"),X=n("net"),G=n("tls"),{randomBytes:V,createHash:W}=n("crypto"),{Duplex:z,Readable:K}=n("stream"),{URL:R}=n("url"),H=T0(),T=T4(),E=j4(),{isBlob:q}=j0(),{BINARY_TYPES:C,CLOSE_TIMEOUT:D,EMPTY_BUFFER:j,GUID:F,kForOnEventAttribute:O,kListener:B,kStatusCode:L,kWebSocket:M,NOOP:U}=A$(),{EventTarget:{addEventListener:_,removeEventListener:A}}=i1(),{format:P,parse:I}=vQ(),{toBuffer:w}=K8(),k=Symbol("kAborted"),y=[8,13],u=["CONNECTING","OPEN","CLOSING","CLOSED"],b=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class S extends Z{constructor(N,x,h){super();if(this._binaryType=C[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=S.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,N!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,x===void 0)x=[];else if(!Array.isArray(x))if(typeof x==="object"&&x!==null)h=x,x=[];else x=[x];i(this,N,x,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(N){if(!C.includes(N))return;if(this._binaryType=N,this._receiver)this._receiver._binaryType=N}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(N,x,h){let c=new T({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),f=new E(N,this._extensions,h.generateMask);if(this._receiver=c,this._sender=f,this._socket=N,c[M]=this,f[M]=this,N[M]=this,c.on("conclude",C5),c.on("drain",P5),c.on("error",I5),c.on("message",x5),c.on("ping",w5),c.on("pong",S5),f.onerror=k5,N.setTimeout)N.setTimeout(0);if(N.setNoDelay)N.setNoDelay();if(x.length>0)N.unshift(x);N.on("close",z6),N.on("data",x0),N.on("end",K6),N.on("error",W6),this._readyState=S.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=S.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[H.extensionName])this._extensions[H.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=S.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(N,x){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){Q$(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===S.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=S.CLOSING,this._sender.close(N,x,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),G6(this)}pause(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;this._paused=!0,this._socket.pause()}ping(N,x,h){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof N==="function")h=N,N=x=void 0;else if(typeof x==="function")h=x,x=void 0;if(typeof N==="number")N=N.toString();if(this.readyState!==S.OPEN){B8(this,N,h);return}if(x===void 0)x=!this._isServer;this._sender.ping(N||j,x,h)}pong(N,x,h){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof N==="function")h=N,N=x=void 0;else if(typeof x==="function")h=x,x=void 0;if(typeof N==="number")N=N.toString();if(this.readyState!==S.OPEN){B8(this,N,h);return}if(x===void 0)x=!this._isServer;this._sender.pong(N||j,x,h)}resume(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(N,x,h){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof x==="function")h=x,x={};if(typeof N==="number")N=N.toString();if(this.readyState!==S.OPEN){B8(this,N,h);return}let c={binary:typeof N!=="string",mask:!this._isServer,compress:!0,fin:!0,...x};if(!this._extensions[H.extensionName])c.compress=!1;this._sender.send(N||j,c,h)}terminate(){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){Q$(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=S.CLOSING,this._socket.destroy()}}Object.defineProperty(S,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(S.prototype,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(S,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(S.prototype,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(S,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(S.prototype,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(S,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),Object.defineProperty(S.prototype,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((N)=>{Object.defineProperty(S.prototype,N,{enumerable:!0})}),["open","error","close","message"].forEach((N)=>{Object.defineProperty(S.prototype,`on${N}`,{enumerable:!0,get(){for(let x of this.listeners(N))if(x[O])return x[B];return null},set(x){for(let h of this.listeners(N))if(h[O]){this.removeListener(N,h);break}if(typeof x!=="function")return;this.addEventListener(N,x,{[O]:!0})}})}),S.prototype.addEventListener=_,S.prototype.removeEventListener=A,Q.exports=S;function i(N,x,h,c){let f={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:D,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(N._autoPong=f.autoPong,N._closeTimeout=f.closeTimeout,!y.includes(f.protocolVersion))throw RangeError(`Unsupported protocol version: ${f.protocolVersion} (supported versions: ${y.join(", ")})`);let l;if(x instanceof R)l=x;else try{l=new R(x)}catch{throw SyntaxError(`Invalid URL: ${x}`)}if(l.protocol==="http:")l.protocol="ws:";else if(l.protocol==="https:")l.protocol="wss:";N._url=l.href;let l$=l.protocol==="wss:",p$=l.protocol==="ws+unix:",J0;if(l.protocol!=="ws:"&&!l$&&!p$)J0=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(p$&&!l.pathname)J0="The URL's pathname is empty";else if(l.hash)J0="The URL contains a fragment identifier";if(J0){let m=SyntaxError(J0);if(N._redirects===0)throw m;else{H$(N,m);return}}let V6=l$?443:80,M6=V(16).toString("base64"),H6=l$?J.request:Y.request,Y0=new Set,X0;if(f.createConnection=f.createConnection||(l$?N8:_8),f.defaultPort=f.defaultPort||V6,f.port=l.port||V6,f.host=l.hostname.startsWith("[")?l.hostname.slice(1,-1):l.hostname,f.headers={...f.headers,"Sec-WebSocket-Version":f.protocolVersion,"Sec-WebSocket-Key":M6,Connection:"Upgrade",Upgrade:"websocket"},f.path=l.pathname+l.search,f.timeout=f.handshakeTimeout,f.perMessageDeflate)X0=new H({...f.perMessageDeflate,isServer:!1,maxPayload:f.maxPayload}),f.headers["Sec-WebSocket-Extensions"]=P({[H.extensionName]:X0.offer()});if(h.length){for(let m of h){if(typeof m!=="string"||!b.test(m)||Y0.has(m))throw SyntaxError("An invalid or duplicated subprotocol was specified");Y0.add(m)}f.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(f.origin)if(f.protocolVersion<13)f.headers["Sec-WebSocket-Origin"]=f.origin;else f.headers.Origin=f.origin;if(l.username||l.password)f.auth=`${l.username}:${l.password}`;if(p$){let m=f.path.split(":");f.socketPath=m[0],f.path=m[1]}let d;if(f.followRedirects){if(N._redirects===0){N._originalIpc=p$,N._originalSecure=l$,N._originalHostOrSocketPath=p$?f.socketPath:l.host;let m=c&&c.headers;if(c={...c,headers:{}},m)for(let[s,d$]of Object.entries(m))c.headers[s.toLowerCase()]=d$}else if(N.listenerCount("redirect")===0){let m=p$?N._originalIpc?f.socketPath===N._originalHostOrSocketPath:!1:N._originalIpc?!1:l.host===N._originalHostOrSocketPath;if(!m||N._originalSecure&&!l$){if(delete f.headers.authorization,delete f.headers.cookie,!m)delete f.headers.host;f.auth=void 0}}if(f.auth&&!c.headers.authorization)c.headers.authorization="Basic "+Buffer.from(f.auth).toString("base64");if(d=N._req=H6(f),N._redirects)N.emit("redirect",N.url,d)}else d=N._req=H6(f);if(f.timeout)d.on("timeout",()=>{Q$(N,d,"Opening handshake has timed out")});if(d.on("error",(m)=>{if(d===null||d[k])return;d=N._req=null,H$(N,m)}),d.on("response",(m)=>{let s=m.headers.location,d$=m.statusCode;if(s&&f.followRedirects&&d$>=300&&d$<400){if(++N._redirects>f.maxRedirects){Q$(N,d,"Maximum redirects exceeded");return}d.abort();let G0;try{G0=new R(s,x)}catch(R6){let n$=SyntaxError(`Invalid URL: ${s}`);H$(N,n$);return}i(N,G0,h,c)}else if(!N.emit("unexpected-response",d,m))Q$(N,d,`Unexpected server response: ${m.statusCode}`)}),d.on("upgrade",(m,s,d$)=>{if(N.emit("upgrade",m),N.readyState!==S.CONNECTING)return;d=N._req=null;let G0=m.headers.upgrade;if(G0===void 0||G0.toLowerCase()!=="websocket"){Q$(N,s,"Invalid Upgrade header");return}let R6=W("sha1").update(M6+F).digest("base64");if(m.headers["sec-websocket-accept"]!==R6){Q$(N,s,"Invalid Sec-WebSocket-Accept header");return}let n$=m.headers["sec-websocket-protocol"],z0;if(n$!==void 0){if(!Y0.size)z0="Server sent a subprotocol but none was requested";else if(!Y0.has(n$))z0="Server sent an invalid subprotocol"}else if(Y0.size)z0="Server sent no subprotocol";if(z0){Q$(N,s,z0);return}if(n$)N._protocol=n$;let L6=m.headers["sec-websocket-extensions"];if(L6!==void 0){if(!X0){Q$(N,s,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let F8;try{F8=I(L6)}catch(T8){Q$(N,s,"Invalid Sec-WebSocket-Extensions header");return}let U6=Object.keys(F8);if(U6.length!==1||U6[0]!==H.extensionName){Q$(N,s,"Server indicated an extension that was not requested");return}try{X0.accept(F8[H.extensionName])}catch(T8){Q$(N,s,"Invalid Sec-WebSocket-Extensions header");return}N._extensions[H.extensionName]=X0}N.setSocket(s,d$,{allowSynchronousEvents:f.allowSynchronousEvents,generateMask:f.generateMask,maxPayload:f.maxPayload,skipUTF8Validation:f.skipUTF8Validation})}),f.finishRequest)f.finishRequest(d,N);else d.end()}function H$(N,x){N._readyState=S.CLOSING,N._errorEmitted=!0,N.emit("error",x),N.emitClose()}function _8(N){return N.path=N.socketPath,X.connect(N)}function N8(N){if(N.path=void 0,!N.servername&&N.servername!=="")N.servername=X.isIP(N.host)?"":N.host;return G.connect(N)}function Q$(N,x,h){N._readyState=S.CLOSING;let c=Error(h);if(Error.captureStackTrace(c,Q$),x.setHeader){if(x[k]=!0,x.abort(),x.socket&&!x.socket.destroyed)x.socket.destroy();process.nextTick(H$,N,c)}else x.destroy(c),x.once("error",N.emit.bind(N,"error")),x.once("close",N.emitClose.bind(N))}function B8(N,x,h){if(x){let c=q(x)?x.size:w(x).length;if(N._socket)N._sender._bufferedBytes+=c;else N._bufferedAmount+=c}if(h){let c=Error(`WebSocket is not open: readyState ${N.readyState} (${u[N.readyState]})`);process.nextTick(h,c)}}function C5(N,x){let h=this[M];if(h._closeFrameReceived=!0,h._closeMessage=x,h._closeCode=N,h._socket[M]===void 0)return;if(h._socket.removeListener("data",x0),process.nextTick(X6,h._socket),N===1005)h.close();else h.close(N,x)}function P5(){let N=this[M];if(!N.isPaused)N._socket.resume()}function I5(N){let x=this[M];if(x._socket[M]!==void 0)x._socket.removeListener("data",x0),process.nextTick(X6,x._socket),x.close(N[L]);if(!x._errorEmitted)x._errorEmitted=!0,x.emit("error",N)}function Y6(){this[M].emitClose()}function x5(N,x){this[M].emit("message",N,x)}function w5(N){let x=this[M];if(x._autoPong)x.pong(N,!this._isServer,U);x.emit("ping",N)}function S5(N){this[M].emit("pong",N)}function X6(N){N.resume()}function k5(N){let x=this[M];if(x.readyState===S.CLOSED)return;if(x.readyState===S.OPEN)x._readyState=S.CLOSING,G6(x);if(this._socket.end(),!x._errorEmitted)x._errorEmitted=!0,x.emit("error",N)}function G6(N){N._closeTimer=setTimeout(N._socket.destroy.bind(N._socket),N._closeTimeout)}function z6(){let N=this[M];if(this.removeListener("close",z6),this.removeListener("data",x0),this.removeListener("end",K6),N._readyState=S.CLOSING,!this._readableState.endEmitted&&!N._closeFrameReceived&&!N._receiver._writableState.errorEmitted&&this._readableState.length!==0){let x=this.read(this._readableState.length);N._receiver.write(x)}if(N._receiver.end(),this[M]=void 0,clearTimeout(N._closeTimer),N._receiver._writableState.finished||N._receiver._writableState.errorEmitted)N.emitClose();else N._receiver.on("error",Y6),N._receiver.on("finish",Y6)}function x0(N){if(!this[M]._receiver.write(N))this.pause()}function K6(){let N=this[M];N._readyState=S.CLOSING,N._receiver.end(),this.end()}function W6(){let N=this[M];if(this.removeListener("error",W6),this.on("error",U),N)N._readyState=S.CLOSING,this.destroy()}}),o1=J$(($,Q)=>{var Z=hQ(),{Duplex:J}=n("stream");function Y(W){W.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(W){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",W)}function V(W,z){let K=!0,R=new J({...z,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return W.on("message",function(T,E){let q=!E&&R._readableState.objectMode?T.toString():T;if(!R.push(q))W.pause()}),W.once("error",function(T){if(R.destroyed)return;K=!1,R.destroy(T)}),W.once("close",function(){if(R.destroyed)return;R.push(null)}),R._destroy=function(H,T){if(W.readyState===W.CLOSED){T(H),process.nextTick(Y,R);return}let E=!1;if(W.once("error",function(C){E=!0,T(C)}),W.once("close",function(){if(!E)T(H);process.nextTick(Y,R)}),K)W.terminate()},R._final=function(H){if(W.readyState===W.CONNECTING){W.once("open",function(){R._final(H)});return}if(W._socket===null)return;if(W._socket._writableState.finished){if(H(),R._readableState.endEmitted)R.destroy()}else W._socket.once("finish",function(){H()}),W.close()},R._read=function(){if(W.isPaused)W.resume()},R._write=function(H,T,E){if(W.readyState===W.CONNECTING){W.once("open",function(){R._write(H,T,E)});return}W.send(H,E)},R.on("end",X),R.on("error",G),R}Q.exports=V}),E4=J$(($,Q)=>{var{tokenChars:Z}=j0();function J(Y){let X=new Set,G=-1,V=-1,W=0;for(W;W<Y.length;W++){let K=Y.charCodeAt(W);if(V===-1&&Z[K]===1){if(G===-1)G=W}else if(W!==0&&(K===32||K===9)){if(V===-1&&G!==-1)V=W}else if(K===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${W}`);if(V===-1)V=W;let R=Y.slice(G,V);if(X.has(R))throw SyntaxError(`The "${R}" subprotocol is duplicated`);X.add(R),G=V=-1}else throw SyntaxError(`Unexpected character at index ${W}`)}if(G===-1||V!==-1)throw SyntaxError("Unexpected end of input");let z=Y.slice(G,W);if(X.has(z))throw SyntaxError(`The "${z}" subprotocol is duplicated`);return X.add(z),X}Q.exports={parse:J}}),a1=J$(($,Q)=>{var Z=n("events"),J=n("http"),{Duplex:Y}=n("stream"),{createHash:X}=n("crypto"),G=vQ(),V=T0(),W=E4(),z=hQ(),{CLOSE_TIMEOUT:K,GUID:R,kWebSocket:H}=A$(),T=/^[+/0-9A-Za-z]{22}==$/,E=0,q=1,C=2;class D extends Z{constructor(M,U){super();if(M={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:K,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:z,...M},M.port==null&&!M.server&&!M.noServer||M.port!=null&&(M.server||M.noServer)||M.server&&M.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(M.port!=null)this._server=J.createServer((_,A)=>{let P=J.STATUS_CODES[426];A.writeHead(426,{"Content-Length":P.length,"Content-Type":"text/plain"}),A.end(P)}),this._server.listen(M.port,M.host,M.backlog,U);else if(M.server)this._server=M.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:(A,P,I)=>{this.handleUpgrade(A,P,I,_)}})}if(M.perMessageDeflate===!0)M.perMessageDeflate={};if(M.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=M,this._state=E}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(M){if(this._state===C){if(M)this.once("close",()=>{M(Error("The server is not running"))});process.nextTick(F,this);return}if(M)this.once("close",M);if(this._state===q)return;if(this._state=q,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(F,this);else this._shouldEmitClose=!0;else process.nextTick(F,this)}else{let U=this._server;this._removeListeners(),this._removeListeners=this._server=null,U.close(()=>{F(this)})}}shouldHandle(M){if(this.options.path){let U=M.url.indexOf("?");if((U!==-1?M.url.slice(0,U):M.url)!==this.options.path)return!1}return!0}handleUpgrade(M,U,_,A){U.on("error",O);let P=M.headers["sec-websocket-key"],I=M.headers.upgrade,w=+M.headers["sec-websocket-version"];if(M.method!=="GET"){L(this,M,U,405,"Invalid HTTP method");return}if(I===void 0||I.toLowerCase()!=="websocket"){L(this,M,U,400,"Invalid Upgrade header");return}if(P===void 0||!T.test(P)){L(this,M,U,400,"Missing or invalid Sec-WebSocket-Key header");return}if(w!==13&&w!==8){L(this,M,U,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(M)){B(U,400);return}let k=M.headers["sec-websocket-protocol"],y=new Set;if(k!==void 0)try{y=W.parse(k)}catch(S){L(this,M,U,400,"Invalid Sec-WebSocket-Protocol header");return}let u=M.headers["sec-websocket-extensions"],b={};if(this.options.perMessageDeflate&&u!==void 0){let S=new V({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let i=G.parse(u);if(i[V.extensionName])S.accept(i[V.extensionName]),b[V.extensionName]=S}catch(i){L(this,M,U,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let S={origin:M.headers[`${w===8?"sec-websocket-origin":"origin"}`],secure:!!(M.socket.authorized||M.socket.encrypted),req:M};if(this.options.verifyClient.length===2){this.options.verifyClient(S,(i,H$,_8,N8)=>{if(!i)return B(U,H$||401,_8,N8);this.completeUpgrade(b,P,y,M,U,_,A)});return}if(!this.options.verifyClient(S))return B(U,401)}this.completeUpgrade(b,P,y,M,U,_,A)}completeUpgrade(M,U,_,A,P,I,w){if(!P.readable||!P.writable)return P.destroy();if(P[H])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>E)return B(P,503);let y=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(U+R).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(_.size){let b=this.options.handleProtocols?this.options.handleProtocols(_,A):_.values().next().value;if(b)y.push(`Sec-WebSocket-Protocol: ${b}`),u._protocol=b}if(M[V.extensionName]){let b=M[V.extensionName].params,S=G.format({[V.extensionName]:[b]});y.push(`Sec-WebSocket-Extensions: ${S}`),u._extensions=M}if(this.emit("headers",y,A),P.write(y.concat(`\r
|
|
90
|
+
}`,eJ=65536,Z3,J3,X3,K3=1500;var i9=s(()=>{m2=Object.create,l2=Object.getPrototypeOf,N9=Object.defineProperty,p2=Object.getOwnPropertyNames,d2=Object.prototype.hasOwnProperty;n=c2(import.meta.url),A$=Z$(($,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:()=>{}}}),W8=Z$(($,Q)=>{var{EMPTY_BUFFER:Z}=A$(),J=Buffer[Symbol.species];function Y(z,K){if(z.length===0)return Z;if(z.length===1)return z[0];let R=Buffer.allocUnsafe(K),H=0;for(let T=0;T<z.length;T++){let O=z[T];R.set(O,H),H+=O.length}if(H<K)return new J(R.buffer,R.byteOffset,H);return R}function X(z,K,R,H,T){for(let O=0;O<T;O++)R[H+O]=z[O]^K[O&3]}function G(z,K){for(let R=0;R<z.length;R++)z[R]^=K[R&3]}function V(z){if(z.length===z.buffer.byteLength)return z.buffer;return z.buffer.slice(z.byteOffset,z.byteOffset+z.length)}function W(z){if(W.readOnly=!0,Buffer.isBuffer(z))return z;let K;if(z instanceof ArrayBuffer)K=new J(z);else if(ArrayBuffer.isView(z))K=new J(z.buffer,z.byteOffset,z.byteLength);else K=Buffer.from(z),W.readOnly=!1;return K}if(Q.exports={concat:Y,mask:X,toArrayBuffer:V,toBuffer:W,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let z=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(K,R,H,T,O){if(O<48)X(K,R,H,T,O);else z.mask(K,R,H,T,O)},Q.exports.unmask=function(K,R){if(K.length<32)G(K,R);else z.unmask(K,R)}}catch(z){}}),a2=Z$(($,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}),j0=Z$(($,Q)=>{var Z=n("zlib"),J=W8(),Y=a2(),{kStatusCode:X}=A$(),G=Buffer[Symbol.species],V=Buffer.from([0,0,255,255]),W=Symbol("permessage-deflate"),z=Symbol("total-length"),K=Symbol("callback"),R=Symbol("buffers"),H=Symbol("error"),T;class O{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,!T){let F=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;T=new Y(F)}}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[K];if(this._deflate.close(),this._deflate=null,j)j(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(j){let F=this._options,E=j.find((B)=>{if(F.serverNoContextTakeover===!1&&B.server_no_context_takeover||B.server_max_window_bits&&(F.serverMaxWindowBits===!1||typeof F.serverMaxWindowBits==="number"&&F.serverMaxWindowBits>B.server_max_window_bits)||typeof F.clientMaxWindowBits==="number"&&!B.client_max_window_bits)return!1;return!0});if(!E)throw Error("None of the extension offers can be accepted");if(F.serverNoContextTakeover)E.server_no_context_takeover=!0;if(F.clientNoContextTakeover)E.client_no_context_takeover=!0;if(typeof F.serverMaxWindowBits==="number")E.server_max_window_bits=F.serverMaxWindowBits;if(typeof F.clientMaxWindowBits==="number")E.client_max_window_bits=F.clientMaxWindowBits;else if(E.client_max_window_bits===!0||F.clientMaxWindowBits===!1)delete E.client_max_window_bits;return E}acceptAsClient(j){let F=j[0];if(this._options.clientNoContextTakeover===!1&&F.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!F.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")F.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&F.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return F}normalizeParams(j){return j.forEach((F)=>{Object.keys(F).forEach((E)=>{let B=F[E];if(B.length>1)throw Error(`Parameter "${E}" must have only a single value`);if(B=B[0],E==="client_max_window_bits"){if(B!==!0){let L=+B;if(!Number.isInteger(L)||L<8||L>15)throw TypeError(`Invalid value for parameter "${E}": ${B}`);B=L}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${E}": ${B}`)}else if(E==="server_max_window_bits"){let L=+B;if(!Number.isInteger(L)||L<8||L>15)throw TypeError(`Invalid value for parameter "${E}": ${B}`);B=L}else if(E==="client_no_context_takeover"||E==="server_no_context_takeover"){if(B!==!0)throw TypeError(`Invalid value for parameter "${E}": ${B}`)}else throw Error(`Unknown parameter "${E}"`);F[E]=B})}),j}decompress(j,F,E){T.add((B)=>{this._decompress(j,F,(L,M)=>{B(),E(L,M)})})}compress(j,F,E){T.add((B)=>{this._compress(j,F,(L,M)=>{B(),E(L,M)})})}_decompress(j,F,E){let B=this._isServer?"client":"server";if(!this._inflate){let L=`${B}_max_window_bits`,M=typeof this.params[L]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[L];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:M}),this._inflate[W]=this,this._inflate[z]=0,this._inflate[R]=[],this._inflate.on("error",D),this._inflate.on("data",C)}if(this._inflate[K]=E,this._inflate.write(j),F)this._inflate.write(V);this._inflate.flush(()=>{let L=this._inflate[H];if(L){this._inflate.close(),this._inflate=null,E(L);return}let M=J.concat(this._inflate[R],this._inflate[z]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[z]=0,this._inflate[R]=[],F&&this.params[`${B}_no_context_takeover`])this._inflate.reset();E(null,M)})}_compress(j,F,E){let B=this._isServer?"server":"client";if(!this._deflate){let L=`${B}_max_window_bits`,M=typeof this.params[L]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[L];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:M}),this._deflate[z]=0,this._deflate[R]=[],this._deflate.on("data",q)}this._deflate[K]=E,this._deflate.write(j),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let L=J.concat(this._deflate[R],this._deflate[z]);if(F)L=new G(L.buffer,L.byteOffset,L.length-4);if(this._deflate[K]=null,this._deflate[z]=0,this._deflate[R]=[],F&&this.params[`${B}_no_context_takeover`])this._deflate.reset();E(null,L)})}}Q.exports=O;function q(j){this[R].push(j),this[z]+=j.length}function C(j){if(this[z]+=j.length,this[W]._maxPayload<1||this[z]<=this[W]._maxPayload){this[R].push(j);return}this[H]=RangeError("Max payload size exceeded"),this[H].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[H][X]=1009,this.removeListener("data",C),this.reset()}function D(j){if(this[W]._inflate=null,this[H]){this[K](this[H]);return}j[X]=1007,this[K](j)}}),O0=Z$(($,Q)=>{var{isUtf8:Z}=n("buffer"),{hasBlob:J}=A$(),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(W){return W>=1000&&W<=1014&&W!==1004&&W!==1005&&W!==1006||W>=3000&&W<=4999}function G(W){let z=W.length,K=0;while(K<z)if((W[K]&128)===0)K++;else if((W[K]&224)===192){if(K+1===z||(W[K+1]&192)!==128||(W[K]&254)===192)return!1;K+=2}else if((W[K]&240)===224){if(K+2>=z||(W[K+1]&192)!==128||(W[K+2]&192)!==128||W[K]===224&&(W[K+1]&224)===128||W[K]===237&&(W[K+1]&224)===160)return!1;K+=3}else if((W[K]&248)===240){if(K+3>=z||(W[K+1]&192)!==128||(W[K+2]&192)!==128||(W[K+3]&192)!==128||W[K]===240&&(W[K+1]&240)===128||W[K]===244&&W[K+1]>143||W[K]>244)return!1;K+=4}else return!1;return!0}function V(W){return J&&typeof W==="object"&&typeof W.arrayBuffer==="function"&&typeof W.type==="string"&&typeof W.stream==="function"&&(W[Symbol.toStringTag]==="Blob"||W[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:V,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(W){return W.length<24?G(W):Z(W)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let W=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(z){return z.length<32?G(z):W(z)}}catch(W){}}),q9=Z$(($,Q)=>{var{Writable:Z}=n("stream"),J=j0(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:V}=A$(),{concat:W,toArrayBuffer:z,unmask:K}=W8(),{isValidStatusCode:R,isValidUTF8:H}=O0(),T=Buffer[Symbol.species],O=0,q=1,C=2,D=3,j=4,F=5,E=6;class B extends Z{constructor(L={}){super();this._allowSynchronousEvents=L.allowSynchronousEvents!==void 0?L.allowSynchronousEvents:!0,this._binaryType=L.binaryType||Y[0],this._extensions=L.extensions||{},this._isServer=!!L.isServer,this._maxPayload=L.maxPayload|0,this._skipUTF8Validation=!!L.skipUTF8Validation,this[V]=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=O}_write(L,M,U){if(this._opcode===8&&this._state==O)return U();this._bufferedBytes+=L.length,this._buffers.push(L),this.startLoop(U)}consume(L){if(this._bufferedBytes-=L,L===this._buffers[0].length)return this._buffers.shift();if(L<this._buffers[0].length){let U=this._buffers[0];return this._buffers[0]=new T(U.buffer,U.byteOffset+L,U.length-L),new T(U.buffer,U.byteOffset,L)}let M=Buffer.allocUnsafe(L);do{let U=this._buffers[0],_=M.length-L;if(L>=U.length)M.set(this._buffers.shift(),_);else M.set(new Uint8Array(U.buffer,U.byteOffset,L),_),this._buffers[0]=new T(U.buffer,U.byteOffset+L,U.length-L);L-=U.length}while(L>0);return M}startLoop(L){this._loop=!0;do switch(this._state){case O:this.getInfo(L);break;case q:this.getPayloadLength16(L);break;case C:this.getPayloadLength64(L);break;case D:this.getMask();break;case j:this.getData(L);break;case F:case E:this._loop=!1;return}while(this._loop);if(!this._errored)L()}getInfo(L){if(this._bufferedBytes<2){this._loop=!1;return}let M=this.consume(2);if((M[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");L(_);return}let U=(M[0]&64)===64;if(U&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");L(_);return}if(this._fin=(M[0]&128)===128,this._opcode=M[0]&15,this._payloadLength=M[1]&127,this._opcode===0){if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");L(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");L(_);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");L(_);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");L(_);return}if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");L(_);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");L(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");L(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(M[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");L(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");L(_);return}if(this._payloadLength===126)this._state=q;else if(this._payloadLength===127)this._state=C;else this.haveLength(L)}getPayloadLength16(L){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(L)}getPayloadLength64(L){if(this._bufferedBytes<8){this._loop=!1;return}let M=this.consume(8),U=M.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");L(_);return}this._payloadLength=U*Math.pow(2,32)+M.readUInt32BE(4),this.haveLength(L)}haveLength(L){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let M=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");L(M);return}}if(this._masked)this._state=D;else this._state=j}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=j}getData(L){let M=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(M=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)K(M,this._mask)}if(this._opcode>7){this.controlMessage(M,L);return}if(this._compressed){this._state=F,this.decompress(M,L);return}if(M.length)this._messageLength=this._totalPayloadLength,this._fragments.push(M);this.dataMessage(L)}decompress(L,M){this._extensions[J.extensionName].decompress(L,this._fin,(_,A)=>{if(_)return M(_);if(A.length){if(this._messageLength+=A.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let P=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");M(P);return}this._fragments.push(A)}if(this.dataMessage(M),this._state===O)this.startLoop(M)})}dataMessage(L){if(!this._fin){this._state=O;return}let M=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")_=W(U,M);else if(this._binaryType==="arraybuffer")_=z(W(U,M));else if(this._binaryType==="blob")_=new Blob(U);else _=U;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=O;else this._state=E,setImmediate(()=>{this.emit("message",_,!0),this._state=O,this.startLoop(L)})}else{let _=W(U,M);if(!this._skipUTF8Validation&&!H(_)){let A=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");L(A);return}if(this._state===F||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=O;else this._state=E,setImmediate(()=>{this.emit("message",_,!1),this._state=O,this.startLoop(L)})}}controlMessage(L,M){if(this._opcode===8){if(L.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let U=L.readUInt16BE(0);if(!R(U)){let A=this.createError(RangeError,`invalid status code ${U}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");M(A);return}let _=new T(L.buffer,L.byteOffset+2,L.length-2);if(!this._skipUTF8Validation&&!H(_)){let A=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");M(A);return}this._loop=!1,this.emit("conclude",U,_),this.end()}this._state=O;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",L),this._state=O;else this._state=E,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",L),this._state=O,this.startLoop(M)})}createError(L,M,U,_,A){this._loop=!1,this._errored=!0;let P=new L(U?`Invalid WebSocket frame: ${M}`:M);return Error.captureStackTrace(P,this.createError),P.code=A,P[G]=_,P}}Q.exports=B}),A9=Z$(($,Q)=>{var{Duplex:Z}=n("stream"),{randomFillSync:J}=n("crypto"),Y=j0(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:V}=A$(),{isBlob:W,isValidStatusCode:z}=O0(),{mask:K,toBuffer:R}=W8(),H=Symbol("kByteLength"),T=Buffer.alloc(4),O=8192,q,C=O,D=0,j=1,F=2;class E{constructor(M,U,_){if(this._extensions=U||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=M,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=D,this.onerror=V,this[G]=void 0}static frame(M,U){let _,A=!1,P=2,I=!1;if(U.mask){if(_=U.maskBuffer||T,U.generateMask)U.generateMask(_);else{if(C===O){if(q===void 0)q=Buffer.alloc(O);J(q,0,O),C=0}_[0]=q[C++],_[1]=q[C++],_[2]=q[C++],_[3]=q[C++]}I=(_[0]|_[1]|_[2]|_[3])===0,P=6}let w;if(typeof M==="string")if((!U.mask||I)&&U[H]!==void 0)w=U[H];else M=Buffer.from(M),w=M.length;else w=M.length,A=U.mask&&U.readOnly&&!I;let S=w;if(w>=65536)P+=8,S=127;else if(w>125)P+=2,S=126;let y=Buffer.allocUnsafe(A?w+P:P);if(y[0]=U.fin?U.opcode|128:U.opcode,U.rsv1)y[0]|=64;if(y[1]=S,S===126)y.writeUInt16BE(w,2);else if(S===127)y[2]=y[3]=0,y.writeUIntBE(w,4,6);if(!U.mask)return[y,M];if(y[1]|=128,y[P-4]=_[0],y[P-3]=_[1],y[P-2]=_[2],y[P-1]=_[3],I)return[y,M];if(A)return K(M,_,y,P,w),[y];return K(M,_,M,0,w),[y,M]}close(M,U,_,A){let P;if(M===void 0)P=X;else if(typeof M!=="number"||!z(M))throw TypeError("First argument must be a valid error code number");else if(U===void 0||!U.length)P=Buffer.allocUnsafe(2),P.writeUInt16BE(M,0);else{let w=Buffer.byteLength(U);if(w>123)throw RangeError("The message must not be greater than 123 bytes");if(P=Buffer.allocUnsafe(2+w),P.writeUInt16BE(M,0),typeof U==="string")P.write(U,2);else P.set(U,2)}let I={[H]:P.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==D)this.enqueue([this.dispatch,P,!1,I,A]);else this.sendFrame(E.frame(P,I),A)}ping(M,U,_){let A,P;if(typeof M==="string")A=Buffer.byteLength(M),P=!1;else if(W(M))A=M.size,P=!1;else M=R(M),A=M.length,P=R.readOnly;if(A>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[H]:A,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:9,readOnly:P,rsv1:!1};if(W(M))if(this._state!==D)this.enqueue([this.getBlobData,M,!1,I,_]);else this.getBlobData(M,!1,I,_);else if(this._state!==D)this.enqueue([this.dispatch,M,!1,I,_]);else this.sendFrame(E.frame(M,I),_)}pong(M,U,_){let A,P;if(typeof M==="string")A=Buffer.byteLength(M),P=!1;else if(W(M))A=M.size,P=!1;else M=R(M),A=M.length,P=R.readOnly;if(A>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[H]:A,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:10,readOnly:P,rsv1:!1};if(W(M))if(this._state!==D)this.enqueue([this.getBlobData,M,!1,I,_]);else this.getBlobData(M,!1,I,_);else if(this._state!==D)this.enqueue([this.dispatch,M,!1,I,_]);else this.sendFrame(E.frame(M,I),_)}send(M,U,_){let A=this._extensions[Y.extensionName],P=U.binary?2:1,I=U.compress,w,S;if(typeof M==="string")w=Buffer.byteLength(M),S=!1;else if(W(M))w=M.size,S=!1;else M=R(M),w=M.length,S=R.readOnly;if(this._firstFragment){if(this._firstFragment=!1,I&&A&&A.params[A._isServer?"server_no_context_takeover":"client_no_context_takeover"])I=w>=A._threshold;this._compress=I}else I=!1,P=0;if(U.fin)this._firstFragment=!0;let y={[H]:w,fin:U.fin,generateMask:this._generateMask,mask:U.mask,maskBuffer:this._maskBuffer,opcode:P,readOnly:S,rsv1:I};if(W(M))if(this._state!==D)this.enqueue([this.getBlobData,M,this._compress,y,_]);else this.getBlobData(M,this._compress,y,_);else if(this._state!==D)this.enqueue([this.dispatch,M,this._compress,y,_]);else this.dispatch(M,this._compress,y,_)}getBlobData(M,U,_,A){this._bufferedBytes+=_[H],this._state=F,M.arrayBuffer().then((P)=>{if(this._socket.destroyed){let w=Error("The socket was closed while the blob was being read");process.nextTick(B,this,w,A);return}this._bufferedBytes-=_[H];let I=R(P);if(!U)this._state=D,this.sendFrame(E.frame(I,_),A),this.dequeue();else this.dispatch(I,U,_,A)}).catch((P)=>{process.nextTick(L,this,P,A)})}dispatch(M,U,_,A){if(!U){this.sendFrame(E.frame(M,_),A);return}let P=this._extensions[Y.extensionName];this._bufferedBytes+=_[H],this._state=j,P.compress(M,_.fin,(I,w)=>{if(this._socket.destroyed){let S=Error("The socket was closed while data was being compressed");B(this,S,A);return}this._bufferedBytes-=_[H],this._state=D,_.readOnly=!1,this.sendFrame(E.frame(w,_),A),this.dequeue()})}dequeue(){while(this._state===D&&this._queue.length){let M=this._queue.shift();this._bufferedBytes-=M[3][H],Reflect.apply(M[0],this,M.slice(1))}}enqueue(M){this._bufferedBytes+=M[3][H],this._queue.push(M)}sendFrame(M,U){if(M.length===2)this._socket.cork(),this._socket.write(M[0]),this._socket.write(M[1],U),this._socket.uncork();else this._socket.write(M[0],U)}}Q.exports=E;function B(M,U,_){if(typeof _==="function")_(U);for(let A=0;A<M._queue.length;A++){let P=M._queue[A],I=P[P.length-1];if(typeof I==="function")I(U)}}function L(M,U,_){B(M,U,_),M.onerror(U)}}),r2=Z$(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=A$(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),V=Symbol("kMessage"),W=Symbol("kReason"),z=Symbol("kTarget"),K=Symbol("kType"),R=Symbol("kWasClean");class H{constructor(j){this[z]=null,this[K]=j}get target(){return this[z]}get type(){return this[K]}}Object.defineProperty(H.prototype,"target",{enumerable:!0}),Object.defineProperty(H.prototype,"type",{enumerable:!0});class T extends H{constructor(j,F={}){super(j);this[Y]=F.code===void 0?0:F.code,this[W]=F.reason===void 0?"":F.reason,this[R]=F.wasClean===void 0?!1:F.wasClean}get code(){return this[Y]}get reason(){return this[W]}get wasClean(){return this[R]}}Object.defineProperty(T.prototype,"code",{enumerable:!0}),Object.defineProperty(T.prototype,"reason",{enumerable:!0}),Object.defineProperty(T.prototype,"wasClean",{enumerable:!0});class O extends H{constructor(j,F={}){super(j);this[G]=F.error===void 0?null:F.error,this[V]=F.message===void 0?"":F.message}get error(){return this[G]}get message(){return this[V]}}Object.defineProperty(O.prototype,"error",{enumerable:!0}),Object.defineProperty(O.prototype,"message",{enumerable:!0});class q extends H{constructor(j,F={}){super(j);this[X]=F.data===void 0?null:F.data}get data(){return this[X]}}Object.defineProperty(q.prototype,"data",{enumerable:!0});var C={addEventListener(j,F,E={}){for(let L of this.listeners(j))if(!E[Z]&&L[J]===F&&!L[Z])return;let B;if(j==="message")B=function(M,U){let _=new q("message",{data:U?M:M.toString()});_[z]=this,D(F,this,_)};else if(j==="close")B=function(M,U){let _=new T("close",{code:M,reason:U.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[z]=this,D(F,this,_)};else if(j==="error")B=function(M){let U=new O("error",{error:M,message:M.message});U[z]=this,D(F,this,U)};else if(j==="open")B=function(){let M=new H("open");M[z]=this,D(F,this,M)};else return;if(B[Z]=!!E[Z],B[J]=F,E.once)this.once(j,B);else this.on(j,B)},removeEventListener(j,F){for(let E of this.listeners(j))if(E[J]===F&&!E[Z]){this.removeListener(j,E);break}}};Q.exports={CloseEvent:T,ErrorEvent:O,Event:H,EventTarget:C,MessageEvent:q};function D(j,F,E){if(typeof j==="object"&&j.handleEvent)j.handleEvent.call(j,E);else j.call(F,E)}}),uQ=Z$(($,Q)=>{var{tokenChars:Z}=O0();function J(G,V,W){if(G[V]===void 0)G[V]=[W];else G[V].push(W)}function Y(G){let V=Object.create(null),W=Object.create(null),z=!1,K=!1,R=!1,H,T,O=-1,q=-1,C=-1,D=0;for(;D<G.length;D++)if(q=G.charCodeAt(D),H===void 0)if(C===-1&&Z[q]===1){if(O===-1)O=D}else if(D!==0&&(q===32||q===9)){if(C===-1&&O!==-1)C=D}else if(q===59||q===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${D}`);if(C===-1)C=D;let F=G.slice(O,C);if(q===44)J(V,F,W),W=Object.create(null);else H=F;O=C=-1}else throw SyntaxError(`Unexpected character at index ${D}`);else if(T===void 0)if(C===-1&&Z[q]===1){if(O===-1)O=D}else if(q===32||q===9){if(C===-1&&O!==-1)C=D}else if(q===59||q===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${D}`);if(C===-1)C=D;if(J(W,G.slice(O,C),!0),q===44)J(V,H,W),W=Object.create(null),H=void 0;O=C=-1}else if(q===61&&O!==-1&&C===-1)T=G.slice(O,D),O=C=-1;else throw SyntaxError(`Unexpected character at index ${D}`);else if(K){if(Z[q]!==1)throw SyntaxError(`Unexpected character at index ${D}`);if(O===-1)O=D;else if(!z)z=!0;K=!1}else if(R)if(Z[q]===1){if(O===-1)O=D}else if(q===34&&O!==-1)R=!1,C=D;else if(q===92)K=!0;else throw SyntaxError(`Unexpected character at index ${D}`);else if(q===34&&G.charCodeAt(D-1)===61)R=!0;else if(C===-1&&Z[q]===1){if(O===-1)O=D}else if(O!==-1&&(q===32||q===9)){if(C===-1)C=D}else if(q===59||q===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${D}`);if(C===-1)C=D;let F=G.slice(O,C);if(z)F=F.replace(/\\/g,""),z=!1;if(J(W,T,F),q===44)J(V,H,W),W=Object.create(null),H=void 0;T=void 0,O=C=-1}else throw SyntaxError(`Unexpected character at index ${D}`);if(O===-1||R||q===32||q===9)throw SyntaxError("Unexpected end of input");if(C===-1)C=D;let j=G.slice(O,C);if(H===void 0)J(V,j,W);else{if(T===void 0)J(W,j,!0);else if(z)J(W,T,j.replace(/\\/g,""));else J(W,T,j);J(V,H,W)}return V}function X(G){return Object.keys(G).map((V)=>{let W=G[V];if(!Array.isArray(W))W=[W];return W.map((z)=>{return[V].concat(Object.keys(z).map((K)=>{let R=z[K];if(!Array.isArray(R))R=[R];return R.map((H)=>H===!0?K:`${K}=${H}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),gQ=Z$(($,Q)=>{var Z=n("events"),J=n("https"),Y=n("http"),X=n("net"),G=n("tls"),{randomBytes:V,createHash:W}=n("crypto"),{Duplex:z,Readable:K}=n("stream"),{URL:R}=n("url"),H=j0(),T=q9(),O=A9(),{isBlob:q}=O0(),{BINARY_TYPES:C,CLOSE_TIMEOUT:D,EMPTY_BUFFER:j,GUID:F,kForOnEventAttribute:E,kListener:B,kStatusCode:L,kWebSocket:M,NOOP:U}=A$(),{EventTarget:{addEventListener:_,removeEventListener:A}}=r2(),{format:P,parse:I}=uQ(),{toBuffer:w}=W8(),S=Symbol("kAborted"),y=[8,13],u=["CONNECTING","OPEN","CLOSING","CLOSED"],b=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class k extends Z{constructor(N,x,h){super();if(this._binaryType=C[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=k.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,N!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,x===void 0)x=[];else if(!Array.isArray(x))if(typeof x==="object"&&x!==null)h=x,x=[];else x=[x];i(this,N,x,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(N){if(!C.includes(N))return;if(this._binaryType=N,this._receiver)this._receiver._binaryType=N}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(N,x,h){let c=new T({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),f=new O(N,this._extensions,h.generateMask);if(this._receiver=c,this._sender=f,this._socket=N,c[M]=this,f[M]=this,N[M]=this,c.on("conclude",w4),c.on("drain",k4),c.on("error",S4),c.on("message",y4),c.on("ping",f4),c.on("pong",b4),f.onerror=v4,N.setTimeout)N.setTimeout(0);if(N.setNoDelay)N.setNoDelay();if(x.length>0)N.unshift(x);N.on("close",W6),N.on("data",w0),N.on("end",V6),N.on("error",M6),this._readyState=k.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=k.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[H.extensionName])this._extensions[H.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=k.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(N,x){if(this.readyState===k.CLOSED)return;if(this.readyState===k.CONNECTING){$$(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===k.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=k.CLOSING,this._sender.close(N,x,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),K6(this)}pause(){if(this.readyState===k.CONNECTING||this.readyState===k.CLOSED)return;this._paused=!0,this._socket.pause()}ping(N,x,h){if(this.readyState===k.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof N==="function")h=N,N=x=void 0;else if(typeof x==="function")h=x,x=void 0;if(typeof N==="number")N=N.toString();if(this.readyState!==k.OPEN){F8(this,N,h);return}if(x===void 0)x=!this._isServer;this._sender.ping(N||j,x,h)}pong(N,x,h){if(this.readyState===k.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof N==="function")h=N,N=x=void 0;else if(typeof x==="function")h=x,x=void 0;if(typeof N==="number")N=N.toString();if(this.readyState!==k.OPEN){F8(this,N,h);return}if(x===void 0)x=!this._isServer;this._sender.pong(N||j,x,h)}resume(){if(this.readyState===k.CONNECTING||this.readyState===k.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(N,x,h){if(this.readyState===k.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof x==="function")h=x,x={};if(typeof N==="number")N=N.toString();if(this.readyState!==k.OPEN){F8(this,N,h);return}let c={binary:typeof N!=="string",mask:!this._isServer,compress:!0,fin:!0,...x};if(!this._extensions[H.extensionName])c.compress=!1;this._sender.send(N||j,c,h)}terminate(){if(this.readyState===k.CLOSED)return;if(this.readyState===k.CONNECTING){$$(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=k.CLOSING,this._socket.destroy()}}Object.defineProperty(k,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(k.prototype,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(k,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(k.prototype,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(k,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(k.prototype,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(k,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),Object.defineProperty(k.prototype,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((N)=>{Object.defineProperty(k.prototype,N,{enumerable:!0})}),["open","error","close","message"].forEach((N)=>{Object.defineProperty(k.prototype,`on${N}`,{enumerable:!0,get(){for(let x of this.listeners(N))if(x[E])return x[B];return null},set(x){for(let h of this.listeners(N))if(h[E]){this.removeListener(N,h);break}if(typeof x!=="function")return;this.addEventListener(N,x,{[E]:!0})}})}),k.prototype.addEventListener=_,k.prototype.removeEventListener=A,Q.exports=k;function i(N,x,h,c){let f={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:D,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(N._autoPong=f.autoPong,N._closeTimeout=f.closeTimeout,!y.includes(f.protocolVersion))throw RangeError(`Unsupported protocol version: ${f.protocolVersion} (supported versions: ${y.join(", ")})`);let l;if(x instanceof R)l=x;else try{l=new R(x)}catch{throw SyntaxError(`Invalid URL: ${x}`)}if(l.protocol==="http:")l.protocol="ws:";else if(l.protocol==="https:")l.protocol="wss:";N._url=l.href;let l$=l.protocol==="wss:",p$=l.protocol==="ws+unix:",Y0;if(l.protocol!=="ws:"&&!l$&&!p$)Y0=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(p$&&!l.pathname)Y0="The URL's pathname is empty";else if(l.hash)Y0="The URL contains a fragment identifier";if(Y0){let m=SyntaxError(Y0);if(N._redirects===0)throw m;else{H$(N,m);return}}let H6=l$?443:80,R6=V(16).toString("base64"),L6=l$?J.request:Y.request,X0=new Set,G0;if(f.createConnection=f.createConnection||(l$?B8:N8),f.defaultPort=f.defaultPort||H6,f.port=l.port||H6,f.host=l.hostname.startsWith("[")?l.hostname.slice(1,-1):l.hostname,f.headers={...f.headers,"Sec-WebSocket-Version":f.protocolVersion,"Sec-WebSocket-Key":R6,Connection:"Upgrade",Upgrade:"websocket"},f.path=l.pathname+l.search,f.timeout=f.handshakeTimeout,f.perMessageDeflate)G0=new H({...f.perMessageDeflate,isServer:!1,maxPayload:f.maxPayload}),f.headers["Sec-WebSocket-Extensions"]=P({[H.extensionName]:G0.offer()});if(h.length){for(let m of h){if(typeof m!=="string"||!b.test(m)||X0.has(m))throw SyntaxError("An invalid or duplicated subprotocol was specified");X0.add(m)}f.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(f.origin)if(f.protocolVersion<13)f.headers["Sec-WebSocket-Origin"]=f.origin;else f.headers.Origin=f.origin;if(l.username||l.password)f.auth=`${l.username}:${l.password}`;if(p$){let m=f.path.split(":");f.socketPath=m[0],f.path=m[1]}let d;if(f.followRedirects){if(N._redirects===0){N._originalIpc=p$,N._originalSecure=l$,N._originalHostOrSocketPath=p$?f.socketPath:l.host;let m=c&&c.headers;if(c={...c,headers:{}},m)for(let[t,d$]of Object.entries(m))c.headers[t.toLowerCase()]=d$}else if(N.listenerCount("redirect")===0){let m=p$?N._originalIpc?f.socketPath===N._originalHostOrSocketPath:!1:N._originalIpc?!1:l.host===N._originalHostOrSocketPath;if(!m||N._originalSecure&&!l$){if(delete f.headers.authorization,delete f.headers.cookie,!m)delete f.headers.host;f.auth=void 0}}if(f.auth&&!c.headers.authorization)c.headers.authorization="Basic "+Buffer.from(f.auth).toString("base64");if(d=N._req=L6(f),N._redirects)N.emit("redirect",N.url,d)}else d=N._req=L6(f);if(f.timeout)d.on("timeout",()=>{$$(N,d,"Opening handshake has timed out")});if(d.on("error",(m)=>{if(d===null||d[S])return;d=N._req=null,H$(N,m)}),d.on("response",(m)=>{let t=m.headers.location,d$=m.statusCode;if(t&&f.followRedirects&&d$>=300&&d$<400){if(++N._redirects>f.maxRedirects){$$(N,d,"Maximum redirects exceeded");return}d.abort();let z0;try{z0=new R(t,x)}catch(U6){let n$=SyntaxError(`Invalid URL: ${t}`);H$(N,n$);return}i(N,z0,h,c)}else if(!N.emit("unexpected-response",d,m))$$(N,d,`Unexpected server response: ${m.statusCode}`)}),d.on("upgrade",(m,t,d$)=>{if(N.emit("upgrade",m),N.readyState!==k.CONNECTING)return;d=N._req=null;let z0=m.headers.upgrade;if(z0===void 0||z0.toLowerCase()!=="websocket"){$$(N,t,"Invalid Upgrade header");return}let U6=W("sha1").update(R6+F).digest("base64");if(m.headers["sec-websocket-accept"]!==U6){$$(N,t,"Invalid Sec-WebSocket-Accept header");return}let n$=m.headers["sec-websocket-protocol"],K0;if(n$!==void 0){if(!X0.size)K0="Server sent a subprotocol but none was requested";else if(!X0.has(n$))K0="Server sent an invalid subprotocol"}else if(X0.size)K0="Server sent no subprotocol";if(K0){$$(N,t,K0);return}if(n$)N._protocol=n$;let _6=m.headers["sec-websocket-extensions"];if(_6!==void 0){if(!G0){$$(N,t,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let T8;try{T8=I(_6)}catch(j8){$$(N,t,"Invalid Sec-WebSocket-Extensions header");return}let N6=Object.keys(T8);if(N6.length!==1||N6[0]!==H.extensionName){$$(N,t,"Server indicated an extension that was not requested");return}try{G0.accept(T8[H.extensionName])}catch(j8){$$(N,t,"Invalid Sec-WebSocket-Extensions header");return}N._extensions[H.extensionName]=G0}N.setSocket(t,d$,{allowSynchronousEvents:f.allowSynchronousEvents,generateMask:f.generateMask,maxPayload:f.maxPayload,skipUTF8Validation:f.skipUTF8Validation})}),f.finishRequest)f.finishRequest(d,N);else d.end()}function H$(N,x){N._readyState=k.CLOSING,N._errorEmitted=!0,N.emit("error",x),N.emitClose()}function N8(N){return N.path=N.socketPath,X.connect(N)}function B8(N){if(N.path=void 0,!N.servername&&N.servername!=="")N.servername=X.isIP(N.host)?"":N.host;return G.connect(N)}function $$(N,x,h){N._readyState=k.CLOSING;let c=Error(h);if(Error.captureStackTrace(c,$$),x.setHeader){if(x[S]=!0,x.abort(),x.socket&&!x.socket.destroyed)x.socket.destroy();process.nextTick(H$,N,c)}else x.destroy(c),x.once("error",N.emit.bind(N,"error")),x.once("close",N.emitClose.bind(N))}function F8(N,x,h){if(x){let c=q(x)?x.size:w(x).length;if(N._socket)N._sender._bufferedBytes+=c;else N._bufferedAmount+=c}if(h){let c=Error(`WebSocket is not open: readyState ${N.readyState} (${u[N.readyState]})`);process.nextTick(h,c)}}function w4(N,x){let h=this[M];if(h._closeFrameReceived=!0,h._closeMessage=x,h._closeCode=N,h._socket[M]===void 0)return;if(h._socket.removeListener("data",w0),process.nextTick(z6,h._socket),N===1005)h.close();else h.close(N,x)}function k4(){let N=this[M];if(!N.isPaused)N._socket.resume()}function S4(N){let x=this[M];if(x._socket[M]!==void 0)x._socket.removeListener("data",w0),process.nextTick(z6,x._socket),x.close(N[L]);if(!x._errorEmitted)x._errorEmitted=!0,x.emit("error",N)}function G6(){this[M].emitClose()}function y4(N,x){this[M].emit("message",N,x)}function f4(N){let x=this[M];if(x._autoPong)x.pong(N,!this._isServer,U);x.emit("ping",N)}function b4(N){this[M].emit("pong",N)}function z6(N){N.resume()}function v4(N){let x=this[M];if(x.readyState===k.CLOSED)return;if(x.readyState===k.OPEN)x._readyState=k.CLOSING,K6(x);if(this._socket.end(),!x._errorEmitted)x._errorEmitted=!0,x.emit("error",N)}function K6(N){N._closeTimer=setTimeout(N._socket.destroy.bind(N._socket),N._closeTimeout)}function W6(){let N=this[M];if(this.removeListener("close",W6),this.removeListener("data",w0),this.removeListener("end",V6),N._readyState=k.CLOSING,!this._readableState.endEmitted&&!N._closeFrameReceived&&!N._receiver._writableState.errorEmitted&&this._readableState.length!==0){let x=this.read(this._readableState.length);N._receiver.write(x)}if(N._receiver.end(),this[M]=void 0,clearTimeout(N._closeTimer),N._receiver._writableState.finished||N._receiver._writableState.errorEmitted)N.emitClose();else N._receiver.on("error",G6),N._receiver.on("finish",G6)}function w0(N){if(!this[M]._receiver.write(N))this.pause()}function V6(){let N=this[M];N._readyState=k.CLOSING,N._receiver.end(),this.end()}function M6(){let N=this[M];if(this.removeListener("error",M6),this.on("error",U),N)N._readyState=k.CLOSING,this.destroy()}}),t2=Z$(($,Q)=>{var Z=gQ(),{Duplex:J}=n("stream");function Y(W){W.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(W){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",W)}function V(W,z){let K=!0,R=new J({...z,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return W.on("message",function(T,O){let q=!O&&R._readableState.objectMode?T.toString():T;if(!R.push(q))W.pause()}),W.once("error",function(T){if(R.destroyed)return;K=!1,R.destroy(T)}),W.once("close",function(){if(R.destroyed)return;R.push(null)}),R._destroy=function(H,T){if(W.readyState===W.CLOSED){T(H),process.nextTick(Y,R);return}let O=!1;if(W.once("error",function(C){O=!0,T(C)}),W.once("close",function(){if(!O)T(H);process.nextTick(Y,R)}),K)W.terminate()},R._final=function(H){if(W.readyState===W.CONNECTING){W.once("open",function(){R._final(H)});return}if(W._socket===null)return;if(W._socket._writableState.finished){if(H(),R._readableState.endEmitted)R.destroy()}else W._socket.once("finish",function(){H()}),W.close()},R._read=function(){if(W.isPaused)W.resume()},R._write=function(H,T,O){if(W.readyState===W.CONNECTING){W.once("open",function(){R._write(H,T,O)});return}W.send(H,O)},R.on("end",X),R.on("error",G),R}Q.exports=V}),D9=Z$(($,Q)=>{var{tokenChars:Z}=O0();function J(Y){let X=new Set,G=-1,V=-1,W=0;for(W;W<Y.length;W++){let K=Y.charCodeAt(W);if(V===-1&&Z[K]===1){if(G===-1)G=W}else if(W!==0&&(K===32||K===9)){if(V===-1&&G!==-1)V=W}else if(K===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${W}`);if(V===-1)V=W;let R=Y.slice(G,V);if(X.has(R))throw SyntaxError(`The "${R}" subprotocol is duplicated`);X.add(R),G=V=-1}else throw SyntaxError(`Unexpected character at index ${W}`)}if(G===-1||V!==-1)throw SyntaxError("Unexpected end of input");let z=Y.slice(G,W);if(X.has(z))throw SyntaxError(`The "${z}" subprotocol is duplicated`);return X.add(z),X}Q.exports={parse:J}}),s2=Z$(($,Q)=>{var Z=n("events"),J=n("http"),{Duplex:Y}=n("stream"),{createHash:X}=n("crypto"),G=uQ(),V=j0(),W=D9(),z=gQ(),{CLOSE_TIMEOUT:K,GUID:R,kWebSocket:H}=A$(),T=/^[+/0-9A-Za-z]{22}==$/,O=0,q=1,C=2;class D extends Z{constructor(M,U){super();if(M={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:K,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:z,...M},M.port==null&&!M.server&&!M.noServer||M.port!=null&&(M.server||M.noServer)||M.server&&M.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(M.port!=null)this._server=J.createServer((_,A)=>{let P=J.STATUS_CODES[426];A.writeHead(426,{"Content-Length":P.length,"Content-Type":"text/plain"}),A.end(P)}),this._server.listen(M.port,M.host,M.backlog,U);else if(M.server)this._server=M.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:(A,P,I)=>{this.handleUpgrade(A,P,I,_)}})}if(M.perMessageDeflate===!0)M.perMessageDeflate={};if(M.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=M,this._state=O}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(M){if(this._state===C){if(M)this.once("close",()=>{M(Error("The server is not running"))});process.nextTick(F,this);return}if(M)this.once("close",M);if(this._state===q)return;if(this._state=q,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(F,this);else this._shouldEmitClose=!0;else process.nextTick(F,this)}else{let U=this._server;this._removeListeners(),this._removeListeners=this._server=null,U.close(()=>{F(this)})}}shouldHandle(M){if(this.options.path){let U=M.url.indexOf("?");if((U!==-1?M.url.slice(0,U):M.url)!==this.options.path)return!1}return!0}handleUpgrade(M,U,_,A){U.on("error",E);let P=M.headers["sec-websocket-key"],I=M.headers.upgrade,w=+M.headers["sec-websocket-version"];if(M.method!=="GET"){L(this,M,U,405,"Invalid HTTP method");return}if(I===void 0||I.toLowerCase()!=="websocket"){L(this,M,U,400,"Invalid Upgrade header");return}if(P===void 0||!T.test(P)){L(this,M,U,400,"Missing or invalid Sec-WebSocket-Key header");return}if(w!==13&&w!==8){L(this,M,U,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(M)){B(U,400);return}let S=M.headers["sec-websocket-protocol"],y=new Set;if(S!==void 0)try{y=W.parse(S)}catch(k){L(this,M,U,400,"Invalid Sec-WebSocket-Protocol header");return}let u=M.headers["sec-websocket-extensions"],b={};if(this.options.perMessageDeflate&&u!==void 0){let k=new V({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let i=G.parse(u);if(i[V.extensionName])k.accept(i[V.extensionName]),b[V.extensionName]=k}catch(i){L(this,M,U,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let k={origin:M.headers[`${w===8?"sec-websocket-origin":"origin"}`],secure:!!(M.socket.authorized||M.socket.encrypted),req:M};if(this.options.verifyClient.length===2){this.options.verifyClient(k,(i,H$,N8,B8)=>{if(!i)return B(U,H$||401,N8,B8);this.completeUpgrade(b,P,y,M,U,_,A)});return}if(!this.options.verifyClient(k))return B(U,401)}this.completeUpgrade(b,P,y,M,U,_,A)}completeUpgrade(M,U,_,A,P,I,w){if(!P.readable||!P.writable)return P.destroy();if(P[H])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>O)return B(P,503);let y=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(U+R).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(_.size){let b=this.options.handleProtocols?this.options.handleProtocols(_,A):_.values().next().value;if(b)y.push(`Sec-WebSocket-Protocol: ${b}`),u._protocol=b}if(M[V.extensionName]){let b=M[V.extensionName].params,k=G.format({[V.extensionName]:[b]});y.push(`Sec-WebSocket-Extensions: ${k}`),u._extensions=M}if(this.emit("headers",y,A),P.write(y.concat(`\r
|
|
91
91
|
`).join(`\r
|
|
92
|
-
`)),P.removeListener("error",
|
|
92
|
+
`)),P.removeListener("error",E),u.setSocket(P,I,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(u),u.on("close",()=>{if(this.clients.delete(u),this._shouldEmitClose&&!this.clients.size)process.nextTick(F,this)});w(u,A)}}Q.exports=D;function j(M,U){for(let _ of Object.keys(U))M.on(_,U[_]);return function(){for(let A of Object.keys(U))M.removeListener(A,U[A])}}function F(M){M._state=C,M.emit("close")}function E(){this.destroy()}function B(M,U,_,A){_=_||J.STATUS_CODES[U],A={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(_),...A},M.once("finish",M.destroy),M.end(`HTTP/1.1 ${U} ${J.STATUS_CODES[U]}\r
|
|
93
93
|
`+Object.keys(A).map((P)=>`${P}: ${A[P]}`).join(`\r
|
|
94
94
|
`)+`\r
|
|
95
95
|
\r
|
|
96
|
-
`+_)}function L(M,U,_,A,P,I){if(M.listenerCount("wsClientError")){let w=Error(P);Error.captureStackTrace(w,L),M.emit("wsClientError",w,_,U)}else B(_,A,P,I)}});AG=q$(o1(),1),DG=q$(vQ(),1),CG=q$(T0(),1),PG=q$(T4(),1),IG=q$(j4(),1),xG=q$(E4(),1),M2=q$(hQ(),1),w4=q$(a1(),1),B4=M2.default;O2={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},q2={"Network.requestWillBeSent":{walltime:"wallTime"}},A2={hasUserGesture:!1,redirectHasExtraInfo:!1},D2={hasExtraInfo:!1},C2={encodedDataLength:0,shouldReportCorbBlocking:!1},P2={initialPriority:"Medium",referrerPolicy:"origin"},I2={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};g2={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};d2={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};e2=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],$3={"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};Z3={"&":"&","<":"<",">":">",'"':""","'":"'"}});var H5={};N6(H5,{startDeviceInProcess:()=>V5,simMiddleware:()=>GY,selectServeSimState:()=>v$,rewriteStateForRequestHost:()=>D0,readServeSimStates:()=>D$,previewConfigForState:()=>L8,parseGridPaging:()=>z5,parseForegroundAppLogMessage:()=>G5,matchInstalledAppByDisplayName:()=>f3});import{readdirSync as F3,readFileSync as T3,existsSync as Y5,unlinkSync as p4,watch as j3}from"fs";import{execSync as C0,spawn as E3,exec as O3,execFile as h$}from"child_process";import{tmpdir as q3}from"os";import{join as oQ}from"path";import{createServer as A3}from"net";import{createHash as D3,randomBytes as C3,timingSafeEqual as P3}from"crypto";import{WebSocket as d4}from"ws";function o4($){let Q=new URL($,"http://x").searchParams.get("limit");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function a4($){let Q=new URL($,"http://x").searchParams.get("since");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function r4($,Q){try{let Z=S9($,Q);if(Z)j$(Z)}catch{}}function s4($){return!k3.test($)}function X5($){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($)}function y3($,Q,Z){if(Q&&X5($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}function G5($){let Q=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec($);if(!Q)return null;return{bundleId:Q[1],pid:parseInt(Q[2],10)}}function t4($,Q){if(w3.has(Q))return Promise.resolve(!0);return new Promise((Z)=>{h$("xcrun",["simctl","get_app_container",$,Q,"app"],{timeout:2000},(J,Y)=>{if(J)return Z(!1);let X=Y.trim();if(!X)return Z(!1);for(let G of S3)if(Y5(oQ(X,G)))return Z(!0);Z(!1)})})}function e4($){return $.trim().replace(/\s+/g," ").toLowerCase()}function f3($,Q){let Z=e4(Q);if(!Z)return null;for(let[J,Y]of Object.entries($))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((G)=>typeof G==="string").some((G)=>e4(G)===Z))return Y.CFBundleIdentifier||J;return null}async function b3(){let $=Date.now();if(A0.booted&&$-A0.at<1500)return A0.booted;try{let Q=await new Promise((Y,X)=>{h$("xcrun",["simctl","list","devices","booted","-j"],{encoding:"utf-8",timeout:3000},(G,V)=>{if(G)X(G);else Y(V)})}),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 A0={at:$,booted:J},J}catch{return null}}function v3(){let $=Date.now();if($-pQ.at<1500)return pQ.udid;let Q=null;try{Q=C0("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{Q=null}return pQ={at:$,udid:Q},Q}async function D$(){let $;try{$=F3(iQ).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let Q=await b3(),Z=[];for(let J of $){let Y=oQ(iQ,J);try{let X=JSON.parse(T3(Y,"utf-8"));try{process.kill(X.pid,0)}catch{U0("helper pid=%d gone, removing %s",X.pid,Y);try{p4(Y)}catch{}continue}let G=y3(X,Q,process.pid);if(G!=="keep"){if(G==="recycle-self")U0("closing in-process session for shut-down device %s (own pid %d)",X.device,X.pid),RQ(X.device);else{U0("recycling stale helper pid=%d (device %s no longer booted)",X.pid,X.device);try{process.kill(X.pid,"SIGTERM")}catch{}}try{p4(Y)}catch{}continue}Z.push(X)}catch{}}return Z}function v$($,Q){if(Q)return $.find((Z)=>Z.device===Q)??null;return $[0]??null}function $5($){let Q=$.indexOf("?");if(Q===-1)return null;return new URLSearchParams($.slice(Q+1)).get("device")}function z5($){let Q=$.indexOf("?");if(Q===-1)return{limit:null,offset:0};let Z=new URLSearchParams($.slice(Q+1)),J=Z.get("limit"),Y=Z.get("offset"),X=J==null||!/^\d+$/.test(J)?null:Math.min(Math.max(Number(J),1),1000),G=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:X,offset:G}}function O0($){let Q=$.headers?.host;if(Q)return Q;let Z=$.socket.localPort;return Z?`localhost:${Z}`:void 0}function q0($,Q,Z){return`${`${$}${Q}`}?device=${encodeURIComponent(Z)}`}function D0($,Q,Z="",J="http",Y=!1){if(!Q)return $;if(!Y){let K;try{K=new URL(`http://${Q}`).hostname}catch{return $}if(K==="localhost"||K==="127.0.0.1"||K==="[::1]")return $;let R=(H)=>H.replace("127.0.0.1",K);return{...$,url:R($.url),streamUrl:R($.streamUrl),wsUrl:R($.wsUrl)}}let V=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent($.device)}`,W=`${J}://${Q}`,z=`${J==="https"?"wss":"ws"}://${Q}`;return{...$,url:`${W}${V}`,streamUrl:`${W}${V}/stream.mjpeg`,wsUrl:`${z}${V}/ws`}}function h3($){return`${$==="/"?"":$}/helper`}function u3($){return`${$==="/"?"":$}/devtools`}function g3($,Q){let Z=new URL($,"http://serve-sim.local");if(!Z.pathname.startsWith(`${Q}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice(Q.length)}${Z.search}`}}function Q5($,Q){let Z=new URL($,"http://serve-sim.local");if(Z.pathname!==Q&&!Z.pathname.startsWith(`${Q}/`))return null;let Y=Z.pathname.slice(Q.length).replace(/^\/+/,"").split("/").filter(Boolean),X=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","ws"]),G=Z.searchParams.get("device"),V=Y;if(Y[0]&&!X.has(Y[0]))G=decodeURIComponent(Y[0]),V=Y.slice(1);let W=V.length>0?`/${V.join("/")}`:"/";return Z.searchParams.delete("device"),{device:G,upstreamPath:`${W}${Z.search}`}}function aQ($,Q){let Z=Q.length,J;if(Z<126)J=Buffer.from([128|$,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|$,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|$,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,Q])}function K5($){if($.length<2)return null;let Q=$[0]&15,Z=($[1]&128)!==0,J=$[1]&127,Y=2;if(J===126){if($.length<Y+2)return null;J=$.readUInt16BE(Y),Y+=2}else if(J===127){if($.length<Y+8)return null;let V=$.readBigUInt64BE(Y);if(V>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(V),Y+=8}let X=Y;if(Z)Y+=4;if($.length<Y+J)return null;let G=Buffer.from($.subarray(Y,Y+J));if(Z){let V=$.subarray(X,X+4);for(let W=0;W<G.length;W++)G[W]=G[W]^V[W%4]}return{opcode:Q,payload:G,consumed:Y+J}}function P0($,Q,Z=Buffer.alloc(0)){if($.destroyed||!$.writable)return;$.write(aQ(Q,Z))}function Z5($){let Q=new Uint8Array($.length);return Q.set($),Q}function W5($,Q){let Z=$.headers["sec-websocket-key"];if(typeof Z!=="string")return Q.end(`HTTP/1.1 400 Bad Request\r
|
|
96
|
+
`+_)}function L(M,U,_,A,P,I){if(M.listenerCount("wsClientError")){let w=Error(P);Error.captureStackTrace(w,L),M.emit("wsClientError",w,_,U)}else B(_,A,P,I)}});xG=q$(t2(),1),wG=q$(uQ(),1),kG=q$(j0(),1),SG=q$(q9(),1),yG=q$(A9(),1),fG=q$(D9(),1),LJ=q$(gQ(),1),f9=q$(s2(),1),O9=LJ.default;DJ={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},CJ={"Network.requestWillBeSent":{walltime:"wallTime"}},PJ={hasUserGesture:!1,redirectHasExtraInfo:!1},IJ={hasExtraInfo:!1},xJ={encodedDataLength:0,shouldReportCorbBlocking:!1},wJ={initialPriority:"Medium",referrerPolicy:"origin"},kJ={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};lJ={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};oJ={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};Z3=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],J3={"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};X3={"&":"&","<":"<",">":">",'"':""","'":"'"}});var _4={};F6(_4,{startDeviceInProcess:()=>L4,simMiddleware:()=>WY,selectServeSimState:()=>v$,rewriteStateForRequestHost:()=>C0,readServeSimStates:()=>D$,previewConfigForState:()=>U8,parseGridPaging:()=>M4,parseForegroundAppLogMessage:()=>V4,matchInstalledAppByDisplayName:()=>h3});import{readdirSync as O3,readFileSync as E3,existsSync as K4,unlinkSync as o9,watch as q3}from"fs";import{execSync as P0,spawn as A3,exec as D3,execFile as h$}from"child_process";import{tmpdir as C3}from"os";import{join as rQ}from"path";import{createServer as P3}from"net";import{createHash as I3,randomBytes as x3,timingSafeEqual as w3}from"crypto";import{WebSocket as a9}from"ws";function s9($){let Q=new URL($,"http://x").searchParams.get("limit");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function e9($){let Q=new URL($,"http://x").searchParams.get("since");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function $4($,Q){try{let Z=y7($,Q);if(Z)j$(Z)}catch{}}function Q4($){return!b3.test($)}function W4($){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($)}function v3($,Q,Z){if(Q&&W4($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}function V4($){let Q=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec($);if(!Q)return null;return{bundleId:Q[1],pid:parseInt(Q[2],10)}}function Z4($,Q){if(y3.has(Q))return Promise.resolve(!0);return new Promise((Z)=>{h$("xcrun",["simctl","get_app_container",$,Q,"app"],{timeout:2000},(J,Y)=>{if(J)return Z(!1);let X=Y.trim();if(!X)return Z(!1);for(let G of f3)if(K4(rQ(X,G)))return Z(!0);Z(!1)})})}function J4($){return $.trim().replace(/\s+/g," ").toLowerCase()}function h3($,Q){let Z=J4(Q);if(!Z)return null;for(let[J,Y]of Object.entries($))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((G)=>typeof G==="string").some((G)=>J4(G)===Z))return Y.CFBundleIdentifier||J;return null}async function u3(){let $=Date.now();if(D0.booted&&$-D0.at<1500)return D0.booted;try{let Q=await new Promise((Y,X)=>{h$("xcrun",["simctl","list","devices","booted","-j"],{encoding:"utf-8",timeout:3000},(G,V)=>{if(G)X(G);else Y(V)})}),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 D0={at:$,booted:J},J}catch{return null}}function g3(){let $=Date.now();if($-nQ.at<1500)return nQ.udid;let Q=null;try{Q=P0("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{Q=null}return nQ={at:$,udid:Q},Q}async function D$(){let $;try{$=O3(aQ).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let Q=await u3(),Z=[];for(let J of $){let Y=rQ(aQ,J);try{let X=JSON.parse(E3(Y,"utf-8"));try{process.kill(X.pid,0)}catch{_0("helper pid=%d gone, removing %s",X.pid,Y);try{o9(Y)}catch{}continue}let G=v3(X,Q,process.pid);if(G!=="keep"){if(G==="recycle-self")_0("closing in-process session for shut-down device %s (own pid %d)",X.device,X.pid),UQ(X.device);else{_0("recycling stale helper pid=%d (device %s no longer booted)",X.pid,X.device);try{process.kill(X.pid,"SIGTERM")}catch{}}try{o9(Y)}catch{}continue}Z.push(X)}catch{}}return Z}function v$($,Q){if(Q)return $.find((Z)=>Z.device===Q)??null;return $[0]??null}function Y4($){let Q=$.indexOf("?");if(Q===-1)return null;return new URLSearchParams($.slice(Q+1)).get("device")}function M4($){let Q=$.indexOf("?");if(Q===-1)return{limit:null,offset:0};let Z=new URLSearchParams($.slice(Q+1)),J=Z.get("limit"),Y=Z.get("offset"),X=J==null||!/^\d+$/.test(J)?null:Math.min(Math.max(Number(J),1),1000),G=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:X,offset:G}}function q0($){let Q=$.headers?.host;if(Q)return Q;let Z=$.socket.localPort;return Z?`localhost:${Z}`:void 0}function A0($,Q,Z){return`${`${$}${Q}`}?device=${encodeURIComponent(Z)}`}function C0($,Q,Z="",J="http",Y=!1){if(!Q)return $;if(!Y){let K;try{K=new URL(`http://${Q}`).hostname}catch{return $}if(K==="localhost"||K==="127.0.0.1"||K==="[::1]")return $;let R=(H)=>H.replace("127.0.0.1",K);return{...$,url:R($.url),streamUrl:R($.streamUrl),wsUrl:R($.wsUrl)}}let V=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent($.device)}`,W=`${J}://${Q}`,z=`${J==="https"?"wss":"ws"}://${Q}`;return{...$,url:`${W}${V}`,streamUrl:`${W}${V}/stream.mjpeg`,wsUrl:`${z}${V}/ws`}}function c3($){return`${$==="/"?"":$}/helper`}function m3($){return`${$==="/"?"":$}/devtools`}function l3($,Q){let Z=new URL($,"http://serve-sim.local");if(!Z.pathname.startsWith(`${Q}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice(Q.length)}${Z.search}`}}function X4($,Q){let Z=new URL($,"http://serve-sim.local");if(Z.pathname!==Q&&!Z.pathname.startsWith(`${Q}/`))return null;let Y=Z.pathname.slice(Q.length).replace(/^\/+/,"").split("/").filter(Boolean),X=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","ws"]),G=Z.searchParams.get("device"),V=Y;if(Y[0]&&!X.has(Y[0]))G=decodeURIComponent(Y[0]),V=Y.slice(1);let W=V.length>0?`/${V.join("/")}`:"/";return Z.searchParams.delete("device"),{device:G,upstreamPath:`${W}${Z.search}`}}function tQ($,Q){let Z=Q.length,J;if(Z<126)J=Buffer.from([128|$,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|$,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|$,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,Q])}function H4($){if($.length<2)return null;let Q=$[0]&15,Z=($[1]&128)!==0,J=$[1]&127,Y=2;if(J===126){if($.length<Y+2)return null;J=$.readUInt16BE(Y),Y+=2}else if(J===127){if($.length<Y+8)return null;let V=$.readBigUInt64BE(Y);if(V>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(V),Y+=8}let X=Y;if(Z)Y+=4;if($.length<Y+J)return null;let G=Buffer.from($.subarray(Y,Y+J));if(Z){let V=$.subarray(X,X+4);for(let W=0;W<G.length;W++)G[W]=G[W]^V[W%4]}return{opcode:Q,payload:G,consumed:Y+J}}function I0($,Q,Z=Buffer.alloc(0)){if($.destroyed||!$.writable)return;$.write(tQ(Q,Z))}function G4($){let Q=new Uint8Array($.length);return Q.set($),Q}function R4($,Q){let Z=$.headers["sec-websocket-key"];if(typeof Z!=="string")return Q.end(`HTTP/1.1 400 Bad Request\r
|
|
97
97
|
\r
|
|
98
|
-
`),!1;let J=
|
|
98
|
+
`),!1;let J=I3("sha1").update(Z+p3).digest("base64");return Q.write(`HTTP/1.1 101 Switching Protocols\r
|
|
99
99
|
Upgrade: websocket\r
|
|
100
100
|
Connection: Upgrade\r
|
|
101
101
|
Sec-WebSocket-Accept: ${J}\r
|
|
102
102
|
\r
|
|
103
|
-
`),Q.resume(),!0}function m3($,Q,Z,J){if(!W5($,Q))return;let Y=new d4(J);Y.binaryType="arraybuffer";let X=!1,G=!1,V=[],W=Buffer.from(Z),z=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(aQ(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},K=(H)=>{if(X&&Y.readyState===d4.OPEN){Y.send(H.opcode===1?H.payload.toString("utf8"):Z5(H.payload));return}V.push({opcode:H.opcode,payload:Buffer.from(H.payload)})},R=()=>{try{while(W.length>0){let H=K5(W);if(!H)break;if(W=W.subarray(H.consumed),H.opcode===8){P0(Q,8,H.payload),z();return}if(H.opcode===9){P0(Q,10,H.payload);continue}if(H.opcode===1||H.opcode===2)K({opcode:H.opcode,payload:H.payload})}}catch{z()}};Y.onopen=()=>{X=!0;for(let H of V)Y.send(H.opcode===1?H.payload.toString("utf8"):Z5(H.payload));V=[]},Y.onmessage=(H)=>{let T=H.data,E=typeof T==="string"?Buffer.from(T):Buffer.from(T);P0(Q,typeof T==="string"?1:2,E)},Y.onerror=z,Y.onclose=z,Q.on("data",(H)=>{if(typeof H==="string")H=Buffer.from(H);W=Buffer.concat([W,H]),R()}),Q.on("error",z),Q.on("close",z),R()}async function l3($,Q,Z){if(!X5(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 r0(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 p3($,Q,Z,J){if(!Z)return!1;let Y=J.split("?")[0];if(Y==="/camera/status")return l3($,Q,Z),!0;let X;try{X=HQ(Z)}catch{return!1}switch(Y){case"/stream.mjpeg":return X.handleMjpeg($,Q),!0;case"/stream.avcc":return X.handleAvcc($,Q),!0;case"/config":return X.handleConfig($,Q),!0;case"/health":return X.handleHealth($,Q),!0;case"/ax":return X.handleAx($,Q),!0;case"/foreground":return X.handleForeground($,Q),!0;default:return!1}}async function V5($,Q,Z){if(await new Promise((Y)=>h$("xcrun",["simctl","boot",$],()=>Y())),!await new Promise((Y)=>{h$("xcrun",["simctl","bootstatus",$,"-b"],{timeout:180000},(X)=>Y(!X))})){if(!await new Promise((X)=>{h$("xcrun",["simctl","list","devices","-j"],(G,V)=>{if(G)return X(!1);try{let W=JSON.parse(V);X(Object.values(W.devices).flat().some((z)=>z.udid===$&&z.state==="Booted"))}catch{X(!1)}})}))return`Device ${$} failed to reach booted state`}return b6(i$($,Q,Z)),null}function d3($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let z of J)z()},V=()=>{G();try{$.end(aQ(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},W=()=>{for(;;){let z;try{z=K5(Y)}catch{V();return}if(!z)return;if(Y=Y.subarray(z.consumed),z.opcode===8)return V();if(z.opcode===9){P0($,10,z.payload);continue}if(z.opcode===1||z.opcode===2)for(let K of Z)K(z.payload)}};if($.on("data",(z)=>{Y=Buffer.concat([Y,z]),W()}),$.on("close",G),$.on("error",G),Q.length)W();return{send(z){P0($,2,z)},on(z,K){if(z==="message")Z.push(K);else J.push(K)},close:V}}function n3($,Q,Z,J){if(!J)return!1;let Y;try{Y=HQ(J)}catch{return!1}if(!W5($,Q))return!0;return Y.attachHidSocket(d3(Q,Z)),!0}function L8($,Q,Z,J,Y,X=!1,G){let V=(Q===""?"":Q)+"/grid/api";return{...$,basePath:Q,appStateEndpoint:q0(Q,"/appstate",$.device),eventLogEndpoint:q0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:q0(Q,"/api/event-log/events",$.device),axEndpoint:q0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:q0(Q,"/devtools",$.device),serveSimBin:Z,gridApiEndpoint:V,gridStartEndpoint:V+"/start",gridShutdownEndpoint:V+"/shutdown",gridMemoryEndpoint:V+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,...Y?{codec:Y}:{},...G?{initialState:G}:{},...X?{proxyHelpers:!0}:{}}}async function i3($){return new Promise((Q)=>{let Z=A3();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function J5($){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 W=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:W,bundleId:z}})}}}catch{return null}}async function o3(){if(b$)try{return await(await b$).listTargets(),b$}catch{b$=null}return b$=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (l4(),m4));for(let Q=H8;Q<H8+50;Q++){if(!await i3(Q)){let Z=await J5(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 J5(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${H8}-${H8+49}`)})().catch(($)=>{throw b$=null,$}),b$}function a3($){return Array.isArray($)?$[0]:$}function M5($){return a3($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function r3($){return M5($)==="https"?"wss":"ws"}function R8($){return M5($)==="https"?"https":"http"}function s3($,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 nQ(){try{let $=process.argv;if($[1]&&Y5($[1]))return $[1]}catch{}return"serve-sim"}function t3(){if(!dQ)dQ=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1sZWFkaW5nLXNudWc6MS4zNzU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzp2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpOy0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQ6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50KTstLWNvbG9yLXBhbmVsLW92ZXJsYXk6IzE4MTgxOGE2Oy0tY29sb3ItcGFuZWwtZGVlcDojMTExMTEzOy0tY29sb3ItcGFnZTojMGEwYTBhOy0tY29sb3ItYWNjZW50OiNhNWI0ZmM7LS1jb2xvci1zdWNjZXNzLWVtZXJhbGQ6IzM0ZDM5OTstLWNvbG9yLWRhbmdlcjojZjg3MTcxOy0tY29sb3ItZGFuZ2VyLXNvZnQ6I2ZjYTVhNTstLWNvbG9yLXdhcm5pbmc6I2ZiYmYyNDstLWNvbG9yLXdhcm5pbmctc29mdDojZmNkMzRkOy0tZm9udC1zeXN0ZW06LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweDtoZWlnaHQ6MH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAoIG5vdCAoLXdlYmtpdC1hcHBlYXJhbmNlOiAtYXBwbGUtcGF5LWJ1dHRvbikpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOiAxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsY3VycmVudGNvbG9yIDUwJSx0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle3RleHQtYWxpZ246aW5oZXJpdDttaW4taGVpZ2h0OjFsaH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b257YXBwZWFyYW5jZTpidXR0b259aW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBsYXllciB1dGlsaXRpZXN7LlxbY29udGFpbmVyLXR5cGVcOmlubGluZS1zaXplXF17Y29udGFpbmVyLXR5cGU6aW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZml4ZWR7cG9zaXRpb246Zml4ZWR9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we2luc2V0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnRvcC0we3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0udG9wLTN7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnRvcC1cWzJweFxde3RvcDoycHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0ucmlnaHQtMHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5yaWdodC0wXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5yaWdodC0yXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucmlnaHQtM3tyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5sZWZ0LTN7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC1hdXRve21hcmdpbi1sZWZ0OmF1dG99LmJveC1ib3JkZXJ7Ym94LXNpemluZzpib3JkZXItYm94fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5cW2FzcGVjdC1yYXRpb1w6MTZcLzExXF17YXNwZWN0LXJhdGlvOjE2LzExfS5zaXplLTFcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5zaXplLTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uc2l6ZS01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1weHt3aWR0aDoxcHh9Lm1heC13LTkwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LXctMTIwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEyMCl9Lm1heC13LVxbMTUwcHhcXXttYXgtd2lkdGg6MTUwcHh9Lm1heC13LVxbMzYwcHhcXXttYXgtd2lkdGg6MzYwcHh9Lm1heC13LWZ1bGx7bWF4LXdpZHRoOjEwMCV9Lm1pbi13LTB7bWluLXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmt7ZmxleC1zaHJpbms6MX0uc2hyaW5rLTB7ZmxleC1zaHJpbms6MH0uZ3Jvd3tmbGV4LWdyb3c6MX0uLXRyYW5zbGF0ZS14LTFcLzJ7LS10dy10cmFuc2xhdGUteDpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2xhdGUteC0xey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS4tdHJhbnNsYXRlLXktMVwvMnstLXR3LXRyYW5zbGF0ZS15OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zZm9ybXt0cmFuc2Zvcm06dmFyKC0tdHctcm90YXRlLXgsKXZhcigtLXR3LXJvdGF0ZS15LCl2YXIoLS10dy1yb3RhdGUteiwpdmFyKC0tdHctc2tldy14LCl2YXIoLS10dy1za2V3LXksKX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC43c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuOHNfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuOHMgbGluZWFyIGluZmluaXRlfS5jdXJzb3ItY29sLXJlc2l6ZXtjdXJzb3I6Y29sLXJlc2l6ZX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1ub3QtYWxsb3dlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3ItcHJvZ3Jlc3N7Y3Vyc29yOnByb2dyZXNzfS5jdXJzb3ItdGV4dHtjdXJzb3I6dGV4dH0udG91Y2gtbm9uZXt0b3VjaC1hY3Rpb246bm9uZX0ucmVzaXple3Jlc2l6ZTpib3RofS5saXN0LW5vbmV7bGlzdC1zdHlsZS10eXBlOm5vbmV9LmFwcGVhcmFuY2Utbm9uZXthcHBlYXJhbmNlOm5vbmV9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fbWlubWF4XCgwXCwxZnJcKV9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gbWlubWF4KDAsMWZyKWF1dG99LmdyaWQtY29scy1cWzU2cHhfMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTZweCAxZnIgYXV0b30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXB9LnBsYWNlLWl0ZW1zLWNlbnRlcntwbGFjZS1pdGVtczogY2VudGVyfS5pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uaXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmdhcC0wXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uZ2FwLTF7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMSl9LmdhcC0xXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LmdhcC0ye2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5nYXAtMlwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5nYXAtM3tnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uZ2FwLTV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqNSl9LmdhcC1cWzVweFxde2dhcDo1cHh9LmdhcC1weHtnYXA6MXB4fS5qdXN0aWZ5LXNlbGYtZW5ke2p1c3RpZnktc2VsZjpmbGV4LWVuZH0udHJ1bmNhdGV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLVxbMnB4XF17Ym9yZGVyLXJhZGl1czoycHh9LnJvdW5kZWQtXFszcHhcXXtib3JkZXItcmFkaXVzOjNweH0ucm91bmRlZC1cWzRweFxde2JvcmRlci1yYWRpdXM6NHB4fS5yb3VuZGVkLVxbNXB4XF17Ym9yZGVyLXJhZGl1czo1cHh9LnJvdW5kZWQtXFs3cHhcXXtib3JkZXItcmFkaXVzOjdweH0ucm91bmRlZC1cWzhweFxde2JvcmRlci1yYWRpdXM6OHB4fS5yb3VuZGVkLVxbOXB4XF17Ym9yZGVyLXJhZGl1czo5cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQtbm9uZXtib3JkZXItcmFkaXVzOjB9LnJvdW5kZWQteGx7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteGwpfS5yb3VuZGVkLXhze2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXhzKX0ucm91bmRlZC10LVxbMTBweFxde2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MTBweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoxMHB4fS5ib3JkZXJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLTB7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjB9LmJvcmRlci0ye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoycHh9LmJvcmRlci10e2JvcmRlci10b3Atc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLXJ7Ym9yZGVyLXJpZ2h0LXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweH0uYm9yZGVyLWRhc2hlZHstLXR3LWJvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXN0eWxlOmRhc2hlZH0uYm9yZGVyLW5vbmV7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXCFib3JkZXItXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjZcKVxde2JvcmRlci1jb2xvcjojMGE4NGZmOTkhaW1wb3J0YW50fS5ib3JkZXItXFtcIzNiNWY5OVxde2JvcmRlci1jb2xvcjojM2I1Zjk5fS5ib3JkZXItXFtcIzVmNjI2OFxde2JvcmRlci1jb2xvcjojNWY2MjY4fS5ib3JkZXItXFtcIzIyMlxde2JvcmRlci1jb2xvcjojMjIyfS5ib3JkZXItXFtcI2ZmNDUzYVxdXC81MHtib3JkZXItY29sb3I6I2ZmNDUzYTgwO2JvcmRlci1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjUpO2JvcmRlci1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly41KX0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOiNmODcxNzE0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8zMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8yNXtib3JkZXItY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8zMHtib3JkZXItY29sb3I6I2ZmZmZmZjRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJvcmRlci10LVxbXCNmNGY0ZjVcXXtib3JkZXItdG9wLWNvbG9yOiNmNGY0ZjV9LmJvcmRlci10LXdoaXRle2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LlwhYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjA4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYxNCFpbXBvcnRhbnR9LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZiFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhMGEwY1xde2JhY2tncm91bmQtY29sb3I6IzBhMGEwY30uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtcIzFjMWMxY1xde2JhY2tncm91bmQtY29sb3I6IzFjMWMxY30uYmctXFtcIzZlNmU3Mlxde2JhY2tncm91bmQtY29sb3I6IzZlNmU3Mn0uYmctXFtcIzlhOWE5ZVxde2JhY2tncm91bmQtY29sb3I6IzlhOWE5ZX0uYmctXFtcIzIwMmIzYVxde2JhY2tncm91bmQtY29sb3I6IzIwMmIzYX0uYmctXFtcIzIyMlxde2JhY2tncm91bmQtY29sb3I6IzIyMn0uYmctXFtcIzI2MzY0Y1xde2JhY2tncm91bmQtY29sb3I6IzI2MzY0Y30uYmctXFtcIzEwMTAxMFxde2JhY2tncm91bmQtY29sb3I6IzEwMTAxMH0uYmctXFtcI2Y4NzE3MVxde2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MX0uYmctXFtcI2ZmNDUzYVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ1M2ExYTtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yKGRpc3BsYXktcDMgLjkyMjY3MyAuMzMzMTM0IC4yNzE1MS8uMSk7YmFja2dyb3VuZC1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly4xKX0uYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjIyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYzOH0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0yXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTNcLjV7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnByLVxbMjZweFxde3BhZGRpbmctcmlnaHQ6MjZweH0ucGItMFwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucGItMXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wYi0xXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucGItMntwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wYi1cWzJweFxde3BhZGRpbmctYm90dG9tOjJweH0ucGwtMntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGwtMlwuNXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wbC0ze3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5wbC03e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5wbC1cWzI2cHhcXXtwYWRkaW5nLWxlZnQ6MjZweH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy1zbnVney0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXNudWcpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctc251Zyl9LmxlYWRpbmctdGlnaHR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctdGlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctdGlnaHQpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1zZW1pYm9sZHstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCl9LnRyYWNraW5nLVxbMFwuMWVtXF17LS10dy10cmFja2luZzouMWVtO2xldHRlci1zcGFjaW5nOi4xZW19LnRyYWNraW5nLVxbMFwuMDJlbVxdey0tdHctdHJhY2tpbmc6LjAyZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19LnRyYWNraW5nLVxbMFwuMDRlbVxdey0tdHctdHJhY2tpbmc6LjA0ZW07bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLVxbMFwuMDZlbVxdey0tdHctdHJhY2tpbmc6LjA2ZW07bGV0dGVyLXNwYWNpbmc6LjA2ZW19LnRyYWNraW5nLVxbMFwuMDhlbVxdey0tdHctdHJhY2tpbmc6LjA4ZW07bGV0dGVyLXNwYWNpbmc6LjA4ZW19LnRyYWNraW5nLXdpZGV7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlKTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy13aWRlKX0uYnJlYWstd29yZHN7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS50ZXh0LWVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0uXCF0ZXh0LXdoaXRle2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKSFpbXBvcnRhbnR9LnRleHQtXFtcIzBhMGEwY1xde2NvbG9yOiMwYTBhMGN9LnRleHQtXFtcIzhlOGU5M1xde2NvbG9yOiM4ZThlOTN9LnRleHQtXFtcIzM0ZDM5OVxde2NvbG9yOiMzNGQzOTl9LnRleHQtXFtcIzA2MjAxOFxde2NvbG9yOiMwNjIwMTh9LnRleHQtXFtcI2M4ZDdmZlxde2NvbG9yOiNjOGQ3ZmZ9LnRleHQtXFtcI2QyZTdmZlxde2NvbG9yOiNkMmU3ZmZ9LnRleHQtXFtcI2ZmYjNhZFxde2NvbG9yOiNmZmIzYWR9LnRleHQtYWNjZW50e2NvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LnRleHQtZGFuZ2Vye2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlcil9LnRleHQtZGFuZ2VyLXNvZnR7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS50ZXh0LXdhcm5pbmctc29mdHtjb2xvcjp2YXIoLS1jb2xvci13YXJuaW5nLXNvZnQpfS50ZXh0LXdoaXRle2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0udGV4dC13aGl0ZVwvMzV7Y29sb3I6I2ZmZmZmZjU5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzM1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzNSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNDB7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNDB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80NXtjb2xvcjojZmZmZmZmNzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNDV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQ1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC81MHtjb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC81NXtjb2xvcjojZmZmZmZmOGN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC82MHtjb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC82MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzY1e2NvbG9yOiNmZmZmZmZhNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC82NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzcwe2NvbG9yOiNmZmZmZmZiM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC83MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNzAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzc1e2NvbG9yOiNmZmZmZmZiZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC83NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNzUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzgwe2NvbG9yOiNmZmZjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzgwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODV7Y29sb3I6I2ZmZmZmZmQ5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzg1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvOTB7Y29sb3I6I2ZmZmZmZmU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzkwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvOTV7Y29sb3I6I2ZmZmZmZmYyfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzk1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC40Mlxde2NvbG9yOiNmZmZmZmY2Yn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQyJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQ4XF17Y29sb3I6I2ZmZmZmZjdhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDglLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNThcXXtjb2xvcjojZmZmZmZmOTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1OC4wJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjkyXF17Y29sb3I6I2ZmZmZmZmVifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTIlLHRyYW5zcGFyZW50KX19Lmxvd2VyY2FzZXt0ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2V9LnVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lml0YWxpY3tmb250LXN0eWxlOml0YWxpY30udGFidWxhci1udW1zey0tdHctbnVtZXJpYy1zcGFjaW5nOnRhYnVsYXItbnVtcztmb250LXZhcmlhbnQtbnVtZXJpYzp2YXIoLS10dy1vcmRpbmFsLCl2YXIoLS10dy1zbGFzaGVkLXplcm8sKXZhcigtLXR3LW51bWVyaWMtZmlndXJlLCl2YXIoLS10dy1udW1lcmljLXNwYWNpbmcsKXZhcigtLXR3LW51bWVyaWMtZnJhY3Rpb24sKX0uXFtmb250LXZhcmlhbnQtbnVtZXJpY1w6dGFidWxhci1udW1zXF17Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5uby11bmRlcmxpbmV7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZX0uYW50aWFsaWFzZWR7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4MCk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjQ1XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNzMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xMnB4XzQwcHhfcmdiYVwoMFwsMFwsMFwsMFwuNTVcKVxdey0tdHctc2hhZG93OjAgMTJweCA0MHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwOGMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbOHB4XzBfMzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4zNVwpXF17LS10dy1zaGFkb3c6OHB4IDAgMzJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDU5KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmcsLnJpbmctMXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmctMnstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCg3NFwsMjIyXCwxMjhcLDBcLjdcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjNGFkZTgwYjN9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCgyNDhcLDExM1wsMTEzXCwwXC41NVwpXF17Ym94LXNoYWRvdzowIDAgNnB4ICNmODcxNzE4Y30ucmluZy1cW1wjMWMxYzFlXF17LS10dy1yaW5nLWNvbG9yOiMxYzFjMWV9LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5ibHVyey0tdHctYmx1cjpibHVyKDhweCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5ncmF5c2NhbGV7LS10dy1ncmF5c2NhbGU6Z3JheXNjYWxlKDEwMCUpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1cnstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cig4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxMnB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMTJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzE4cHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLW1key0tdHctYmFja2Ryb3AtYmx1cjpibHVyKHZhcigtLWJsdXItbWQpKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1zYXR1cmF0ZS0xNTB7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTpzYXR1cmF0ZSgxNTAlKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1maWx0ZXJ7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sdHJhbnNsYXRlLHNjYWxlLHJvdGF0ZSxmaWx0ZXIsLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIsYmFja2Ryb3AtZmlsdGVyLGRpc3BsYXksY29udGVudC12aXNpYmlsaXR5LG92ZXJsYXkscG9pbnRlci1ldmVudHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW2JvcmRlci1jb2xvclwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW3dpZHRoXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTp3aWR0aCxiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG87dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xNTB7LS10dy1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwey0tdHctZHVyYXRpb246LjJzO3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5kdXJhdGlvbi0zMDB7LS10dy1kdXJhdGlvbjouM3M7dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtkaXNwbGF5Om5vbmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eTowfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMTAwOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MX19LnBsYWNlaG9sZGVyXDp0ZXh0LXdoaXRlXC80MDo6cGxhY2Vob2xkZXJ7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy13aXRoaW5cOmJnLXdoaXRlXC8xMDpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xNlwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyOX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzEyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjJlfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmNDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNy4wJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZTpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvODU6aG92ZXJ7Y29sb3I6I2ZmZmZmZmQ5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6I2ZmZmZmZmU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19fS5mb2N1c1w6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjRcKVxdOmZvY3Vze2JvcmRlci1jb2xvcjojZmZmZmZmM2R9LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3BhY2l0eS0xMDA6Zm9jdXMtdmlzaWJsZXtvcGFjaXR5OjF9LmZvY3VzLXZpc2libGVcOlxbb3V0bGluZVw6MVwuNXB4X3NvbGlkX3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNTVcKVxdOmZvY3VzLXZpc2libGV7b3V0bGluZToxLjVweCBzb2xpZCAjMGE4NGZmOGN9LmZvY3VzLXZpc2libGVcOm91dGxpbmU6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW9mZnNldC0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW9mZnNldC00OmZvY3VzLXZpc2libGV7b3V0bGluZS1vZmZzZXQ6NHB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6b3V0bGluZS13aGl0ZVwvNjA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0uYWN0aXZlXDpzY2FsZS1cWzBcLjk3XF06YWN0aXZle3NjYWxlOi45N31AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctXFtcIzJhMmEyY1xdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmEyYTJjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE3fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMzh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LVxbXCMwYTBhMGNcXTplbmFibGVkOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC13aGl0ZTplbmFibGVkOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpicmlnaHRuZXNzLVxbMVwuMDhcXTplbmFibGVkOmhvdmVyey0tdHctYnJpZ2h0bmVzczpicmlnaHRuZXNzKDEuMDgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX19LmRpc2FibGVkXDpjdXJzb3ItZGVmYXVsdDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5kaXNhYmxlZFw6b3BhY2l0eS00MDpkaXNhYmxlZHtvcGFjaXR5Oi40fS5kaXNhYmxlZFw6b3BhY2l0eS01MDpkaXNhYmxlZHtvcGFjaXR5Oi41fUBtZWRpYSAobWF4LXdpZHRoOjg5OS45OTlweCl7Lm1heC1cWzkwMHB4XF1cOmhpZGRlbntkaXNwbGF5Om5vbmV9fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXByb2dyZXNze2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpiZy1cW3ZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpXF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpib3JkZXItbm9uZTo6LW1vei1yYW5nZS10aHVtYnstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGU6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6aC1cWzRweFxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6XFtiYWNrZ3JvdW5kXDpsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCx2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwscmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjJcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwpXF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKXZhcigtLXNsaWRlci1maWxsKSwjZmZmZmZmMzggdmFyKC0tc2xpZGVyLWZpbGwpKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDotbXQtXFs0XC41cHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7bWFyZ2luLXRvcDotNC41cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDphcHBlYXJhbmNlLW5vbmU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2FwcGVhcmFuY2U6bm9uZX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaGFkb3ctXFswXzFweF8zcHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdOjotd2Via2l0LXNsaWRlci10aHVtYnstLXR3LXNoYWRvdzowIDFweCAzcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fX06cm9vdHstLWJ1bmNzcy1saWdodDogOy0tYnVuY3NzLWRhcms6aW5pdGlhbDtjb2xvci1zY2hlbWU6ZGFyazstLXNlcnZlLXNpbS1wYW5lbC1iZzojMTgxODE4Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50OiMxODE4MThjNzstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudDojMTgxODE4MDB9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOiNmZmZ9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjojZmZmZmZmZDkhaW1wb3J0YW50fS5sZW0tY2hldnJvbnt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTZzLGNvbG9yIC4xMnN9QGNvbnRhaW5lciAod2lkdGg8PTIxMHB4KXtbZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWxde2Rpc3BsYXk6bm9uZX19QGtleWZyYW1lcyBncmlkLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMjUwJSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTJweClzY2FsZSguOTYpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3Atb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpc2NhbGUoLjk2KX19LnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRle2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlfS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzVhMWQxZDtib3JkZXItY29sb3I6I2EzM30uZ3JpZC10aWxlOmhvdmVye2JvcmRlci1jb2xvcjojNTU1IWltcG9ydGFudH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yb3RhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ib3JkZXItc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWxlYWRpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1mb250LXdlaWdodHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXRyYWNraW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3JkaW5hbHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNsYXNoZWQtemVyb3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZmlndXJle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1zcGFjaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1mcmFjdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXJpbmctaW5zZXR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC13aWR0aHtzeW50YXg6IjxsZW5ndGg+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOiNmZmZ9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctb3V0bGluZS1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LXNpemV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1lYXNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QGxheWVyIHByb3BlcnRpZXN7QHN1cHBvcnRzICgoLXdlYmtpdC1oeXBoZW5zOiBub25lKSBhbmQgKCBub3QgKG1hcmdpbi10cmltOiBpbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDogaW5saW5lKSBhbmQgKCBub3QgKGNvbG9yOnJnYihmcm9tIHJlZCByIGcgYikpKSl7Kiw6YmVmb3JlLDphZnRlciw6OmJhY2tkcm9wey0tdHctdHJhbnNsYXRlLXg6MDstLXR3LXRyYW5zbGF0ZS15OjA7LS10dy10cmFuc2xhdGUtejowOy0tdHctcm90YXRlLXg6aW5pdGlhbDstLXR3LXJvdGF0ZS15OmluaXRpYWw7LS10dy1yb3RhdGUtejppbml0aWFsOy0tdHctc2tldy14OmluaXRpYWw7LS10dy1za2V3LXk6aW5pdGlhbDstLXR3LWJvcmRlci1zdHlsZTpzb2xpZDstLXR3LWxlYWRpbmc6aW5pdGlhbDstLXR3LWZvbnQtd2VpZ2h0OmluaXRpYWw7LS10dy10cmFja2luZzppbml0aWFsOy0tdHctb3JkaW5hbDppbml0aWFsOy0tdHctc2xhc2hlZC16ZXJvOmluaXRpYWw7LS10dy1udW1lcmljLWZpZ3VyZTppbml0aWFsOy0tdHctbnVtZXJpYy1zcGFjaW5nOmluaXRpYWw7LS10dy1udW1lcmljLWZyYWN0aW9uOmluaXRpYWw7LS10dy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWluc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctcmluZy1jb2xvcjppbml0aWFsOy0tdHctcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtcmluZy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctcmluZy1pbnNldDppbml0aWFsOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6MHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6I2ZmZjstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1vdXRsaW5lLXN0eWxlOnNvbGlkOy0tdHctYmx1cjppbml0aWFsOy0tdHctYnJpZ2h0bmVzczppbml0aWFsOy0tdHctY29udHJhc3Q6aW5pdGlhbDstLXR3LWdyYXlzY2FsZTppbml0aWFsOy0tdHctaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctaW52ZXJ0OmluaXRpYWw7LS10dy1vcGFjaXR5OmluaXRpYWw7LS10dy1zYXR1cmF0ZTppbml0aWFsOy0tdHctc2VwaWE6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93OmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWRyb3Atc2hhZG93LXNpemU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJsdXI6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWludmVydDppbml0aWFsOy0tdHctYmFja2Ryb3Atb3BhY2l0eTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNlcGlhOmluaXRpYWw7LS10dy1kdXJhdGlvbjppbml0aWFsOy0tdHctZWFzZTppbml0aWFsfX19Cjwvc3R5bGU+CjwvaGVhZD48Ym9keT4KPGRpdiBpZD0icm9vdCI+PC9kaXY+CjwhLS1fX1NJTV9QUkVWSUVXX0NPTkZJR19fLS0+CjxzY3JpcHQgdHlwZT0ibW9kdWxlIj52YXIgVjIsbix1MyxxNCxFMCxmMyxsMyxkMyxFNSxtMixxMixjMyx4NSxJNSx5NSxyMyxwMj17fSx1Mj1bXSxHND0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLEIyPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gazAoJCxRKXtmb3IodmFyIEogaW4gUSkkW0pdPVFbSl07cmV0dXJuICR9ZnVuY3Rpb24gdjUoJCl7JCYmJC5wYXJlbnROb2RlJiYkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoJCl9ZnVuY3Rpb24gdjEoJCxRLEope3ZhciBaLFgsWSxxPXt9O2ZvcihZIGluIFEpWT09ImtleSI/Wj1RW1ldOlk9PSJyZWYiP1g9UVtZXTpxW1ldPVFbWV07aWYoYXJndW1lbnRzLmxlbmd0aD4yJiYocS5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/VjIuY2FsbChhcmd1bWVudHMsMik6SiksdHlwZW9mICQ9PSJmdW5jdGlvbiImJiQuZGVmYXVsdFByb3BzIT1udWxsKWZvcihZIGluICQuZGVmYXVsdFByb3BzKXFbWV09PT12b2lkIDAmJihxW1ldPSQuZGVmYXVsdFByb3BzW1ldKTtyZXR1cm4gRzIoJCxxLFosWCxudWxsKX1mdW5jdGlvbiBHMigkLFEsSixaLFgpe3ZhciBZPXt0eXBlOiQscHJvcHM6USxrZXk6SixyZWY6WixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6WD09bnVsbD8rK3UzOlgsX19pOi0xLF9fdTowfTtyZXR1cm4gWD09bnVsbCYmbi52bm9kZSE9bnVsbCYmbi52bm9kZShZKSxZfWZ1bmN0aW9uIE4yKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19ZnVuY3Rpb24gJDEoJCl7cmV0dXJuICQuY2hpbGRyZW59ZnVuY3Rpb24gcDEoJCxRKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PVF9ZnVuY3Rpb24gdTAoJCxRKXtpZihRPT1udWxsKXJldHVybiAkLl9fP3UwKCQuX18sJC5fX2krMSk6bnVsbDtmb3IodmFyIEo7UTwkLl9fay5sZW5ndGg7USsrKWlmKChKPSQuX19rW1FdKSE9bnVsbCYmSi5fX2UhPW51bGwpcmV0dXJuIEouX19lO3JldHVybiB0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iP3UwKCQpOm51bGx9ZnVuY3Rpb24gVjQoJCl7aWYoJC5fX1AmJiQuX19kKXt2YXIgUT0kLl9fdixKPVEuX19lLFo9W10sWD1bXSxZPWswKHt9LFEpO1kuX192PVEuX192KzEsbi52bm9kZSYmbi52bm9kZShZKSxqNSgkLl9fUCxZLFEsJC5fX24sJC5fX1AubmFtZXNwYWNlVVJJLDMyJlEuX191P1tKXTpudWxsLFosSj09bnVsbD91MChRKTpKLCEhKDMyJlEuX191KSxYKSxZLl9fdj1RLl9fdixZLl9fLl9fa1tZLl9faV09WSxhMyhaLFksWCksUS5fX2U9US5fXz1udWxsLFkuX19lIT1KJiZvMyhZKX19ZnVuY3Rpb24gbzMoJCl7aWYoKCQ9JC5fXykhPW51bGwmJiQuX19jIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPW51bGwsJC5fX2suc29tZShmdW5jdGlvbihRKXtpZihRIT1udWxsJiZRLl9fZSE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1RLl9fZX0pLG8zKCQpfWZ1bmN0aW9uIGI1KCQpeyghJC5fX2QmJigkLl9fZD0hMCkmJkUwLnB1c2goJCkmJiFsMi5fX3IrK3x8ZjMhPW4uZGVib3VuY2VSZW5kZXJpbmcpJiYoKGYzPW4uZGVib3VuY2VSZW5kZXJpbmcpfHxsMykobDIpfWZ1bmN0aW9uIGwyKCl7dHJ5e2Zvcih2YXIgJCxRPTE7RTAubGVuZ3RoOylFMC5sZW5ndGg+USYmRTAuc29ydChkMyksJD1FMC5zaGlmdCgpLFE9RTAubGVuZ3RoLFY0KCQpfWZpbmFsbHl7RTAubGVuZ3RoPWwyLl9fcj0wfX1mdW5jdGlvbiBpMygkLFEsSixaLFgsWSxxLEcsTixCLFUpe3ZhciBWLEMsTCxGLHosSCxrLF89WiYmWi5fX2t8fHUyLFM9US5sZW5ndGg7Zm9yKE49QjQoSixRLF8sTixTKSxWPTA7VjxTO1YrKykoTD1KLl9fa1tWXSkhPW51bGwmJihDPUwuX19pIT0tMSYmX1tMLl9faV18fHAyLEwuX19pPVYsSD1qNSgkLEwsQyxYLFkscSxHLE4sQixVKSxGPUwuX19lLEwucmVmJiZDLnJlZiE9TC5yZWYmJihDLnJlZiYmUjUoQy5yZWYsbnVsbCxMKSxVLnB1c2goTC5yZWYsTC5fX2N8fEYsTCkpLHo9PW51bGwmJkYhPW51bGwmJih6PUYpLChrPSEhKDQmTC5fX3UpKXx8Qy5fX2s9PT1MLl9faz8oTj1uMyhMLE4sJCxrKSxrJiZDLl9fZSYmKEMuX19lPW51bGwpKTp0eXBlb2YgTC50eXBlPT0iZnVuY3Rpb24iJiZIIT09dm9pZCAwP049SDpGJiYoTj1GLm5leHRTaWJsaW5nKSxMLl9fdSY9LTcpO3JldHVybiBKLl9fZT16LE59ZnVuY3Rpb24gQjQoJCxRLEosWixYKXt2YXIgWSxxLEcsTixCLFU9Si5sZW5ndGgsVj1VLEM9MDtmb3IoJC5fX2s9QXJyYXkoWCksWT0wO1k8WDtZKyspKHE9UVtZXSkhPW51bGwmJnR5cGVvZiBxIT0iYm9vbGVhbiImJnR5cGVvZiBxIT0iZnVuY3Rpb24iPyh0eXBlb2YgcT09InN0cmluZyJ8fHR5cGVvZiBxPT0ibnVtYmVyInx8dHlwZW9mIHE9PSJiaWdpbnQifHxxLmNvbnN0cnVjdG9yPT1TdHJpbmc/cT0kLl9fa1tZXT1HMihudWxsLHEsbnVsbCxudWxsLG51bGwpOkIyKHEpP3E9JC5fX2tbWV09RzIoJDEse2NoaWxkcmVuOnF9LG51bGwsbnVsbCxudWxsKTpxLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZxLl9fYj4wP3E9JC5fX2tbWV09RzIocS50eXBlLHEucHJvcHMscS5rZXkscS5yZWY/cS5yZWY6bnVsbCxxLl9fdik6JC5fX2tbWV09cSxOPVkrQyxxLl9fPSQscS5fX2I9JC5fX2IrMSxHPW51bGwsKEI9cS5fX2k9TjQocSxKLE4sVikpIT0tMSYmKFYtLSwoRz1KW0JdKSYmKEcuX191fD0yKSksRz09bnVsbHx8Ry5fX3Y9PW51bGw/KEI9PS0xJiYoWD5VP0MtLTpYPFUmJkMrKyksdHlwZW9mIHEudHlwZSE9ImZ1bmN0aW9uIiYmKHEuX191fD00KSk6QiE9TiYmKEI9PU4tMT9DLS06Qj09TisxP0MrKzooQj5OP0MtLTpDKysscS5fX3V8PTQpKSk6JC5fX2tbWV09bnVsbDtpZihWKWZvcihZPTA7WTxVO1krKykoRz1KW1ldKSE9bnVsbCYmKDImRy5fX3UpPT0wJiYoRy5fX2U9PVomJihaPXUwKEcpKSx0MyhHLEcpKTtyZXR1cm4gWn1mdW5jdGlvbiBuMygkLFEsSixaKXt2YXIgWCxZO2lmKHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihYPSQuX19rLFk9MDtYJiZZPFgubGVuZ3RoO1krKylYW1ldJiYoWFtZXS5fXz0kLFE9bjMoWFtZXSxRLEosWikpO3JldHVybiBRfSQuX19lIT1RJiYoWiYmKFEmJiQudHlwZSYmIVEucGFyZW50Tm9kZSYmKFE9dTAoJCkpLEouaW5zZXJ0QmVmb3JlKCQuX19lLFF8fG51bGwpKSxRPSQuX19lKTtkbyBRPVEmJlEubmV4dFNpYmxpbmc7d2hpbGUoUSE9bnVsbCYmUS5ub2RlVHlwZT09OCk7cmV0dXJuIFF9ZnVuY3Rpb24gUTAoJCxRKXtyZXR1cm4gUT1RfHxbXSwkPT1udWxsfHx0eXBlb2YgJD09ImJvb2xlYW4ifHwoQjIoJCk/JC5zb21lKGZ1bmN0aW9uKEope1EwKEosUSl9KTpRLnB1c2goJCkpLFF9ZnVuY3Rpb24gTjQoJCxRLEosWil7dmFyIFgsWSxxLEc9JC5rZXksTj0kLnR5cGUsQj1RW0pdLFU9QiE9bnVsbCYmKDImQi5fX3UpPT0wO2lmKEI9PT1udWxsJiZHPT1udWxsfHxVJiZHPT1CLmtleSYmTj09Qi50eXBlKXJldHVybiBKO2lmKFo+KFU/MTowKSl7Zm9yKFg9Si0xLFk9SisxO1g+PTB8fFk8US5sZW5ndGg7KWlmKChCPVFbcT1YPj0wP1gtLTpZKytdKSE9bnVsbCYmKDImQi5fX3UpPT0wJiZHPT1CLmtleSYmTj09Qi50eXBlKXJldHVybiBxfXJldHVybi0xfWZ1bmN0aW9uIG0zKCQsUSxKKXtRWzBdPT0iLSI/JC5zZXRQcm9wZXJ0eShRLEo9PW51bGw/IiI6Sik6JFtRXT1KPT1udWxsPyIiOnR5cGVvZiBKIT0ibnVtYmVyInx8RzQudGVzdChRKT9KOkorInB4In1mdW5jdGlvbiBmMigkLFEsSixaLFgpe3ZhciBZLHE7JDppZihRPT0ic3R5bGUiKWlmKHR5cGVvZiBKPT0ic3RyaW5nIikkLnN0eWxlLmNzc1RleHQ9SjtlbHNle2lmKHR5cGVvZiBaPT0ic3RyaW5nIiYmKCQuc3R5bGUuY3NzVGV4dD1aPSIiKSxaKWZvcihRIGluIFopSiYmUSBpbiBKfHxtMygkLnN0eWxlLFEsIiIpO2lmKEopZm9yKFEgaW4gSilaJiZKW1FdPT1aW1FdfHxtMygkLnN0eWxlLFEsSltRXSl9ZWxzZSBpZihRWzBdPT0ibyImJlFbMV09PSJuIilZPVEhPShRPVEucmVwbGFjZShjMywiJDEiKSkscT1RLnRvTG93ZXJDYXNlKCksUT1xIGluICR8fFE9PSJvbkZvY3VzT3V0Inx8UT09Im9uRm9jdXNJbiI/cS5zbGljZSgyKTpRLnNsaWNlKDIpLCQubHx8KCQubD17fSksJC5sW1ErWV09SixKP1o/SltxMl09WltxMl06KEpbcTJdPXg1LCQuYWRkRXZlbnRMaXN0ZW5lcihRLFk/eTU6STUsWSkpOiQucmVtb3ZlRXZlbnRMaXN0ZW5lcihRLFk/eTU6STUsWSk7ZWxzZXtpZihYPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKVE9US5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZihRIT0id2lkdGgiJiZRIT0iaGVpZ2h0IiYmUSE9ImhyZWYiJiZRIT0ibGlzdCImJlEhPSJmb3JtIiYmUSE9InRhYkluZGV4IiYmUSE9ImRvd25sb2FkIiYmUSE9InJvd1NwYW4iJiZRIT0iY29sU3BhbiImJlEhPSJyb2xlIiYmUSE9InBvcG92ZXIiJiZRIGluICQpdHJ5eyRbUV09Sj09bnVsbD8iIjpKO2JyZWFrICR9Y2F0Y2goRyl7fXR5cGVvZiBKPT0iZnVuY3Rpb24ifHwoSj09bnVsbHx8Sj09PSExJiZRWzRdIT0iLSI/JC5yZW1vdmVBdHRyaWJ1dGUoUSk6JC5zZXRBdHRyaWJ1dGUoUSxRPT0icG9wb3ZlciImJko9PTE/IiI6SikpfX1mdW5jdGlvbiBwMygkKXtyZXR1cm4gZnVuY3Rpb24oUSl7aWYodGhpcy5sKXt2YXIgSj10aGlzLmxbUS50eXBlKyRdO2lmKFFbbTJdPT1udWxsKVFbbTJdPXg1Kys7ZWxzZSBpZihRW20yXTxKW3EyXSlyZXR1cm47cmV0dXJuIEoobi5ldmVudD9uLmV2ZW50KFEpOlEpfX19ZnVuY3Rpb24gajUoJCxRLEosWixYLFkscSxHLE4sQil7dmFyIFUsVixDLEwsRix6LEgsayxfLFMsRSx5LHgsWTEsZix1PVEudHlwZTtpZihRLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZKLl9fdSYmKE49ISEoMzImSi5fX3UpLFk9W0c9US5fX2U9Si5fX2VdKSwoVT1uLl9fYikmJlUoUSk7JDppZih0eXBlb2YgdT09ImZ1bmN0aW9uIil0cnl7aWYoaz1RLnByb3BzLF89dS5wcm90b3R5cGUmJnUucHJvdG90eXBlLnJlbmRlcixTPShVPXUuY29udGV4dFR5cGUpJiZaW1UuX19jXSxFPVU/Uz9TLnByb3BzLnZhbHVlOlUuX186WixKLl9fYz9IPShWPVEuX19jPUouX19jKS5fXz1WLl9fRTooXz9RLl9fYz1WPW5ldyB1KGssRSk6KFEuX19jPVY9bmV3IHAxKGssRSksVi5jb25zdHJ1Y3Rvcj11LFYucmVuZGVyPUw0KSxTJiZTLnN1YihWKSxWLnN0YXRlfHwoVi5zdGF0ZT17fSksVi5fX249WixDPVYuX19kPSEwLFYuX19oPVtdLFYuX3NiPVtdKSxfJiZWLl9fcz09bnVsbCYmKFYuX19zPVYuc3RhdGUpLF8mJnUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIT1udWxsJiYoVi5fX3M9PVYuc3RhdGUmJihWLl9fcz1rMCh7fSxWLl9fcykpLGswKFYuX19zLHUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKGssVi5fX3MpKSksTD1WLnByb3BzLEY9Vi5zdGF0ZSxWLl9fdj1RLEMpXyYmdS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJlYuY29tcG9uZW50V2lsbE1vdW50IT1udWxsJiZWLmNvbXBvbmVudFdpbGxNb3VudCgpLF8mJlYuY29tcG9uZW50RGlkTW91bnQhPW51bGwmJlYuX19oLnB1c2goVi5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZihfJiZ1LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmayE9PUwmJlYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9bnVsbCYmVi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGssRSksUS5fX3Y9PUouX192fHwhVi5fX2UmJlYuc2hvdWxkQ29tcG9uZW50VXBkYXRlIT1udWxsJiZWLnNob3VsZENvbXBvbmVudFVwZGF0ZShrLFYuX19zLEUpPT09ITEpe1EuX192IT1KLl9fdiYmKFYucHJvcHM9ayxWLnN0YXRlPVYuX19zLFYuX19kPSExKSxRLl9fZT1KLl9fZSxRLl9faz1KLl9fayxRLl9fay5zb21lKGZ1bmN0aW9uKGMpe2MmJihjLl9fPVEpfSksdTIucHVzaC5hcHBseShWLl9faCxWLl9zYiksVi5fc2I9W10sVi5fX2gubGVuZ3RoJiZxLnB1c2goVik7YnJlYWsgJH1WLmNvbXBvbmVudFdpbGxVcGRhdGUhPW51bGwmJlYuY29tcG9uZW50V2lsbFVwZGF0ZShrLFYuX19zLEUpLF8mJlYuY29tcG9uZW50RGlkVXBkYXRlIT1udWxsJiZWLl9faC5wdXNoKGZ1bmN0aW9uKCl7Vi5jb21wb25lbnREaWRVcGRhdGUoTCxGLHopfSl9aWYoVi5jb250ZXh0PUUsVi5wcm9wcz1rLFYuX19QPSQsVi5fX2U9ITEseT1uLl9fcix4PTAsXylWLnN0YXRlPVYuX19zLFYuX19kPSExLHkmJnkoUSksVT1WLnJlbmRlcihWLnByb3BzLFYuc3RhdGUsVi5jb250ZXh0KSx1Mi5wdXNoLmFwcGx5KFYuX19oLFYuX3NiKSxWLl9zYj1bXTtlbHNlIGRvIFYuX19kPSExLHkmJnkoUSksVT1WLnJlbmRlcihWLnByb3BzLFYuc3RhdGUsVi5jb250ZXh0KSxWLnN0YXRlPVYuX19zO3doaWxlKFYuX19kJiYrK3g8MjUpO1Yuc3RhdGU9Vi5fX3MsVi5nZXRDaGlsZENvbnRleHQhPW51bGwmJihaPWswKGswKHt9LFopLFYuZ2V0Q2hpbGRDb250ZXh0KCkpKSxfJiYhQyYmVi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKHo9Vi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShMLEYpKSxZMT1VIT1udWxsJiZVLnR5cGU9PT0kMSYmVS5rZXk9PW51bGw/czMoVS5wcm9wcy5jaGlsZHJlbik6VSxHPWkzKCQsQjIoWTEpP1kxOltZMV0sUSxKLFosWCxZLHEsRyxOLEIpLFYuYmFzZT1RLl9fZSxRLl9fdSY9LTE2MSxWLl9faC5sZW5ndGgmJnEucHVzaChWKSxIJiYoVi5fX0U9Vi5fXz1udWxsKX1jYXRjaChjKXtpZihRLl9fdj1udWxsLE58fFkhPW51bGwpaWYoYy50aGVuKXtmb3IoUS5fX3V8PU4/MTYwOjEyODtHJiZHLm5vZGVUeXBlPT04JiZHLm5leHRTaWJsaW5nOylHPUcubmV4dFNpYmxpbmc7WVtZLmluZGV4T2YoRyldPW51bGwsUS5fX2U9R31lbHNle2ZvcihmPVkubGVuZ3RoO2YtLTspdjUoWVtmXSk7UzUoUSl9ZWxzZSBRLl9fZT1KLl9fZSxRLl9faz1KLl9fayxjLnRoZW58fFM1KFEpO24uX19lKGMsUSxKKX1lbHNlIFk9PW51bGwmJlEuX192PT1KLl9fdj8oUS5fX2s9Si5fX2ssUS5fX2U9Si5fX2UpOkc9US5fX2U9VTQoSi5fX2UsUSxKLFosWCxZLHEsTixCKTtyZXR1cm4oVT1uLmRpZmZlZCkmJlUoUSksMTI4JlEuX191P3ZvaWQgMDpHfWZ1bmN0aW9uIFM1KCQpeyQmJigkLl9fYyYmKCQuX19jLl9fZT0hMCksJC5fX2smJiQuX19rLnNvbWUoUzUpKX1mdW5jdGlvbiBhMygkLFEsSil7Zm9yKHZhciBaPTA7WjxKLmxlbmd0aDtaKyspUjUoSltaXSxKWysrWl0sSlsrK1pdKTtuLl9fYyYmbi5fX2MoUSwkKSwkLnNvbWUoZnVuY3Rpb24oWCl7dHJ5eyQ9WC5fX2gsWC5fX2g9W10sJC5zb21lKGZ1bmN0aW9uKFkpe1kuY2FsbChYKX0pfWNhdGNoKFkpe24uX19lKFksWC5fX3YpfX0pfWZ1bmN0aW9uIHMzKCQpe3JldHVybiB0eXBlb2YgJCE9Im9iamVjdCJ8fCQ9PW51bGx8fCQuX19iPjA/JDpCMigkKT8kLm1hcChzMyk6azAoe30sJCl9ZnVuY3Rpb24gVTQoJCxRLEosWixYLFkscSxHLE4pe3ZhciBCLFUsVixDLEwsRix6LEg9Si5wcm9wc3x8cDIsaz1RLnByb3BzLF89US50eXBlO2lmKF89PSJzdmciP1g9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpfPT0ibWF0aCI/WD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6WHx8KFg9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxZIT1udWxsKXtmb3IoQj0wO0I8WS5sZW5ndGg7QisrKWlmKChMPVlbQl0pJiYic2V0QXR0cmlidXRlImluIEw9PSEhXyYmKF8/TC5sb2NhbE5hbWU9PV86TC5ub2RlVHlwZT09MykpeyQ9TCxZW0JdPW51bGw7YnJlYWt9fWlmKCQ9PW51bGwpe2lmKF89PW51bGwpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspOyQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFgsXyxrLmlzJiZrKSxHJiYobi5fX20mJm4uX19tKFEsWSksRz0hMSksWT1udWxsfWlmKF89PW51bGwpSD09PWt8fEcmJiQuZGF0YT09a3x8KCQuZGF0YT1rKTtlbHNle2lmKFk9WSYmVjIuY2FsbCgkLmNoaWxkTm9kZXMpLCFHJiZZIT1udWxsKWZvcihIPXt9LEI9MDtCPCQuYXR0cmlidXRlcy5sZW5ndGg7QisrKUhbKEw9JC5hdHRyaWJ1dGVzW0JdKS5uYW1lXT1MLnZhbHVlO2ZvcihCIGluIEgpTD1IW0JdLEI9PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/Vj1MOkI9PSJjaGlsZHJlbiJ8fChCIGluIGspfHxCPT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBrKXx8Qj09ImNoZWNrZWQiJiYoImRlZmF1bHRDaGVja2VkImluIGspfHxmMigkLEIsbnVsbCxMLFgpO2ZvcihCIGluIGspTD1rW0JdLEI9PSJjaGlsZHJlbiI/Qz1MOkI9PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/VT1MOkI9PSJ2YWx1ZSI/Rj1MOkI9PSJjaGVja2VkIj96PUw6RyYmdHlwZW9mIEwhPSJmdW5jdGlvbiJ8fEhbQl09PT1MfHxmMigkLEIsTCxIW0JdLFgpO2lmKFUpR3x8ViYmKFUuX19odG1sPT1WLl9faHRtbHx8VS5fX2h0bWw9PSQuaW5uZXJIVE1MKXx8KCQuaW5uZXJIVE1MPVUuX19odG1sKSxRLl9faz1bXTtlbHNlIGlmKFYmJigkLmlubmVySFRNTD0iIiksaTMoUS50eXBlPT0idGVtcGxhdGUiPyQuY29udGVudDokLEIyKEMpP0M6W0NdLFEsSixaLF89PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6WCxZLHEsWT9ZWzBdOkouX19rJiZ1MChKLDApLEcsTiksWSE9bnVsbClmb3IoQj1ZLmxlbmd0aDtCLS07KXY1KFlbQl0pO0d8fChCPSJ2YWx1ZSIsXz09InByb2dyZXNzIiYmRj09bnVsbD8kLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTpGIT1udWxsJiYoRiE9PSRbQl18fF89PSJwcm9ncmVzcyImJiFGfHxfPT0ib3B0aW9uIiYmRiE9SFtCXSkmJmYyKCQsQixGLEhbQl0sWCksQj0iY2hlY2tlZCIseiE9bnVsbCYmeiE9JFtCXSYmZjIoJCxCLHosSFtCXSxYKSl9cmV0dXJuICR9ZnVuY3Rpb24gUjUoJCxRLEope3RyeXtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIil7dmFyIFo9dHlwZW9mICQuX191PT0iZnVuY3Rpb24iO1omJiQuX191KCksWiYmUT09bnVsbHx8KCQuX191PSQoUSkpfWVsc2UgJC5jdXJyZW50PVF9Y2F0Y2goWCl7bi5fX2UoWCxKKX19ZnVuY3Rpb24gdDMoJCxRLEope3ZhciBaLFg7aWYobi51bm1vdW50JiZuLnVubW91bnQoJCksKFo9JC5yZWYpJiYoWi5jdXJyZW50JiZaLmN1cnJlbnQhPSQuX19lfHxSNShaLG51bGwsUSkpLChaPSQuX19jKSE9bnVsbCl7aWYoWi5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7Wi5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKFkpe24uX19lKFksUSl9Wi5iYXNlPVouX19QPW51bGx9aWYoWj0kLl9faylmb3IoWD0wO1g8Wi5sZW5ndGg7WCsrKVpbWF0mJnQzKFpbWF0sUSxKfHx0eXBlb2YgJC50eXBlIT0iZnVuY3Rpb24iKTtKfHx2NSgkLl9fZSksJC5fX2M9JC5fXz0kLl9fZT12b2lkIDB9ZnVuY3Rpb24gTDQoJCxRLEope3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKCQsSil9ZnVuY3Rpb24gVDAoJCxRLEope3ZhciBaLFgsWSxxO1E9PWRvY3VtZW50JiYoUT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLG4uX18mJm4uX18oJCxRKSxYPShaPXR5cGVvZiBKPT0iZnVuY3Rpb24iKT9udWxsOkomJkouX19rfHxRLl9fayxZPVtdLHE9W10sajUoUSwkPSghWiYmSnx8USkuX19rPXYxKCQxLG51bGwsWyRdKSxYfHxwMixwMixRLm5hbWVzcGFjZVVSSSwhWiYmSj9bSl06WD9udWxsOlEuZmlyc3RDaGlsZD9WMi5jYWxsKFEuY2hpbGROb2Rlcyk6bnVsbCxZLCFaJiZKP0o6WD9YLl9fZTpRLmZpcnN0Q2hpbGQsWixxKSxhMyhZLCQscSl9ZnVuY3Rpb24gZDIoJCxRKXtUMCgkLFEsZDIpfWZ1bmN0aW9uIGc1KCQsUSxKKXt2YXIgWixYLFkscSxHPWswKHt9LCQucHJvcHMpO2ZvcihZIGluICQudHlwZSYmJC50eXBlLmRlZmF1bHRQcm9wcyYmKHE9JC50eXBlLmRlZmF1bHRQcm9wcyksUSlZPT0ia2V5Ij9aPVFbWV06WT09InJlZiI/WD1RW1ldOkdbWV09UVtZXT09PXZvaWQgMCYmcSE9bnVsbD9xW1ldOlFbWV07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MiYmKEcuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP1YyLmNhbGwoYXJndW1lbnRzLDIpOkopLEcyKCQudHlwZSxHLFp8fCQua2V5LFh8fCQucmVmLG51bGwpfWZ1bmN0aW9uIFUwKCQpe2Z1bmN0aW9uIFEoSil7dmFyIFosWDtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChaPW5ldyBTZXQsKFg9e30pW1EuX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFh9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtaPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMucHJvcHMudmFsdWUhPVkudmFsdWUmJlouZm9yRWFjaChmdW5jdGlvbihxKXtxLl9fZT0hMCxiNShxKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihZKXtaLmFkZChZKTt2YXIgcT1ZLmNvbXBvbmVudFdpbGxVbm1vdW50O1kuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtaJiZaLmRlbGV0ZShZKSxxJiZxLmNhbGwoWSl9fSksSi5jaGlsZHJlbn1yZXR1cm4gUS5fX2M9Il9fY0MiK3IzKyssUS5fXz0kLFEuUHJvdmlkZXI9US5fX2w9KFEuQ29uc3VtZXI9ZnVuY3Rpb24oSixaKXtyZXR1cm4gSi5jaGlsZHJlbihaKX0pLmNvbnRleHRUeXBlPVEsUX1WMj11Mi5zbGljZSxuPXtfX2U6ZnVuY3Rpb24oJCxRLEosWil7Zm9yKHZhciBYLFkscTtRPVEuX187KWlmKChYPVEuX19jKSYmIVguX18pdHJ5e2lmKChZPVguY29uc3RydWN0b3IpJiZZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKFguc2V0U3RhdGUoWS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoJCkpLHE9WC5fX2QpLFguY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihYLmNvbXBvbmVudERpZENhdGNoKCQsWnx8e30pLHE9WC5fX2QpLHEpcmV0dXJuIFguX19FPVh9Y2F0Y2goRyl7JD1HfXRocm93ICR9fSx1Mz0wLHE0PWZ1bmN0aW9uKCQpe3JldHVybiAkIT1udWxsJiYkLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxwMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oJCxRKXt2YXIgSjtKPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1rMCh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKCQ9JChrMCh7fSxKKSx0aGlzLnByb3BzKSksJCYmazAoSiwkKSwkIT1udWxsJiZ0aGlzLl9fdiYmKFEmJnRoaXMuX3NiLnB1c2goUSksYjUodGhpcykpfSxwMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oJCl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCwkJiZ0aGlzLl9faC5wdXNoKCQpLGI1KHRoaXMpKX0scDEucHJvdG90eXBlLnJlbmRlcj0kMSxFMD1bXSxsMz10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsZDM9ZnVuY3Rpb24oJCxRKXtyZXR1cm4gJC5fX3YuX19iLVEuX192Ll9fYn0sbDIuX19yPTAsRTU9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxtMj0iX19kIitFNSxxMj0iX19hIitFNSxjMz0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSx4NT0wLEk1PXAzKCExKSx5NT1wMyghMCkscjM9MDt2YXIgSTAsRDEsaDUsZTMsbDA9MCxxOD1bXSxiMT1uLCQ4PWIxLl9fYixROD1iMS5fX3IsSjg9YjEuZGlmZmVkLEs4PWIxLl9fYyxaOD1iMS51bm1vdW50LFg4PWIxLl9fO2Z1bmN0aW9uIGQwKCQsUSl7YjEuX19oJiZiMS5fX2goRDEsJCxsMHx8USksbDA9MDt2YXIgSj1EMS5fX0h8fChEMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiAkPj1KLl9fLmxlbmd0aCYmSi5fXy5wdXNoKHt9KSxKLl9fWyRdfWZ1bmN0aW9uIE0oJCl7cmV0dXJuIGwwPTEsUzAoRzgsJCl9ZnVuY3Rpb24gUzAoJCxRLEope3ZhciBaPWQwKEkwKyssMik7aWYoWi50PSQsIVouX19jJiYoWi5fXz1bSj9KKFEpOkc4KHZvaWQgMCxRKSxmdW5jdGlvbihHKXt2YXIgTj1aLl9fTj9aLl9fTlswXTpaLl9fWzBdLEI9Wi50KE4sRyk7TiE9PUImJihaLl9fTj1bQixaLl9fWzFdXSxaLl9fYy5zZXRTdGF0ZSh7fSkpfV0sWi5fX2M9RDEsIUQxLl9fZikpe3ZhciBYPWZ1bmN0aW9uKEcsTixCKXtpZighWi5fX2MuX19IKXJldHVybiEwO3ZhciBVPVouX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJuIEMuX19jfSk7aWYoVS5ldmVyeShmdW5jdGlvbihDKXtyZXR1cm4hQy5fX059KSlyZXR1cm4hWXx8WS5jYWxsKHRoaXMsRyxOLEIpO3ZhciBWPVouX19jLnByb3BzIT09RztyZXR1cm4gVS5zb21lKGZ1bmN0aW9uKEMpe2lmKEMuX19OKXt2YXIgTD1DLl9fWzBdO0MuX189Qy5fX04sQy5fX049dm9pZCAwLEwhPT1DLl9fWzBdJiYoVj0hMCl9fSksWSYmWS5jYWxsKHRoaXMsRyxOLEIpfHxWfTtEMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpZLGNvbXBvbmVudFdpbGxVcGRhdGU6cX09RDE7RDEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihHLE4sQil7aWYodGhpcy5fX2Upe3ZhciBVPVk7WT12b2lkIDAsWChHLE4sQiksWT1VfXEmJnEuY2FsbCh0aGlzLEcsTixCKX0sRDEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVh9cmV0dXJuIFouX19OfHxaLl9ffWZ1bmN0aW9uIGIoJCxRKXt2YXIgSj1kMChJMCsrLDMpOyFiMS5fX3MmJm01KEouX19ILFEpJiYoSi5fXz0kLEoudT1RLEQxLl9fSC5fX2gucHVzaChKKSl9ZnVuY3Rpb24gQTAoJCxRKXt2YXIgSj1kMChJMCsrLDQpOyFiMS5fX3MmJm01KEouX19ILFEpJiYoSi5fXz0kLEoudT1RLEQxLl9faC5wdXNoKEopKX1mdW5jdGlvbiBJKCQpe3JldHVybiBsMD01LF8xKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6JH19LFtdKX1mdW5jdGlvbiByMigkLFEsSil7bDA9NixBMChmdW5jdGlvbigpe2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj0kKFEoKSk7cmV0dXJuIGZ1bmN0aW9uKCl7JChudWxsKSxaJiZ0eXBlb2YgWj09ImZ1bmN0aW9uIiYmWigpfX1pZigkKXJldHVybiAkLmN1cnJlbnQ9USgpLGZ1bmN0aW9uKCl7cmV0dXJuICQuY3VycmVudD1udWxsfX0sSj09bnVsbD9KOkouY29uY2F0KCQpKX1mdW5jdGlvbiBfMSgkLFEpe3ZhciBKPWQwKEkwKyssNyk7cmV0dXJuIG01KEouX19ILFEpJiYoSi5fXz0kKCksSi5fX0g9USxKLl9faD0kKSxKLl9ffWZ1bmN0aW9uIFQoJCxRKXtyZXR1cm4gbDA9OCxfMShmdW5jdGlvbigpe3JldHVybiAkfSxRKX1mdW5jdGlvbiBMMCgkKXt2YXIgUT1EMS5jb250ZXh0WyQuX19jXSxKPWQwKEkwKyssOSk7cmV0dXJuIEouYz0kLFE/KEouX189PW51bGwmJihKLl9fPSEwLFEuc3ViKEQxKSksUS5wcm9wcy52YWx1ZSk6JC5fX31mdW5jdGlvbiBvMigkLFEpe2IxLnVzZURlYnVnVmFsdWUmJmIxLnVzZURlYnVnVmFsdWUoUT9RKCQpOiQpfWZ1bmN0aW9uIGMwKCl7dmFyICQ9ZDAoSTArKywxMSk7aWYoISQuX18pe2Zvcih2YXIgUT1EMS5fX3Y7USE9PW51bGwmJiFRLl9fbSYmUS5fXyE9PW51bGw7KVE9US5fXzt2YXIgSj1RLl9fbXx8KFEuX19tPVswLDBdKTskLl9fPSJQIitKWzBdKyItIitKWzFdKyt9cmV0dXJuICQuX199ZnVuY3Rpb24gQzQoKXtmb3IodmFyICQ7JD1xOC5zaGlmdCgpOyl7dmFyIFE9JC5fX0g7aWYoJC5fX1AmJlEpdHJ5e1EuX19oLnNvbWUoYzIpLFEuX19oLnNvbWUoZjUpLFEuX19oPVtdfWNhdGNoKEope1EuX19oPVtdLGIxLl9fZShKLCQuX192KX19fWIxLl9fYj1mdW5jdGlvbigkKXtEMT1udWxsLCQ4JiYkOCgkKX0sYjEuX189ZnVuY3Rpb24oJCxRKXskJiZRLl9fayYmUS5fX2suX19tJiYoJC5fX209US5fX2suX19tKSxYOCYmWDgoJCxRKX0sYjEuX19yPWZ1bmN0aW9uKCQpe1E4JiZROCgkKSxJMD0wO3ZhciBRPShEMT0kLl9fYykuX19IO1EmJihoNT09PUQxPyhRLl9faD1bXSxEMS5fX2g9W10sUS5fXy5zb21lKGZ1bmN0aW9uKEope0ouX19OJiYoSi5fXz1KLl9fTiksSi51PUouX19OPXZvaWQgMH0pKTooUS5fX2guc29tZShjMiksUS5fX2guc29tZShmNSksUS5fX2g9W10sSTA9MCkpLGg1PUQxfSxiMS5kaWZmZWQ9ZnVuY3Rpb24oJCl7SjgmJko4KCQpO3ZhciBRPSQuX19jO1EmJlEuX19IJiYoUS5fX0guX19oLmxlbmd0aCYmKHE4LnB1c2goUSkhPT0xJiZlMz09PWIxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChlMz1iMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHx6NCkoQzQpKSxRLl9fSC5fXy5zb21lKGZ1bmN0aW9uKEope0oudSYmKEouX19IPUoudSksSi51PXZvaWQgMH0pKSxoNT1EMT1udWxsfSxiMS5fX2M9ZnVuY3Rpb24oJCxRKXtRLnNvbWUoZnVuY3Rpb24oSil7dHJ5e0ouX19oLnNvbWUoYzIpLEouX19oPUouX19oLmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4hWi5fX3x8ZjUoWil9KX1jYXRjaChaKXtRLnNvbWUoZnVuY3Rpb24oWCl7WC5fX2gmJihYLl9faD1bXSl9KSxRPVtdLGIxLl9fZShaLEouX192KX19KSxLOCYmSzgoJCxRKX0sYjEudW5tb3VudD1mdW5jdGlvbigkKXtaOCYmWjgoJCk7dmFyIFEsSj0kLl9fYztKJiZKLl9fSCYmKEouX19ILl9fLnNvbWUoZnVuY3Rpb24oWil7dHJ5e2MyKFopfWNhdGNoKFgpe1E9WH19KSxKLl9fSD12b2lkIDAsUSYmYjEuX19lKFEsSi5fX3YpKX07dmFyIFk4PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gejQoJCl7dmFyIFEsSj1mdW5jdGlvbigpe2NsZWFyVGltZW91dChaKSxZOCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoUSksc2V0VGltZW91dCgkKX0sWj1zZXRUaW1lb3V0KEosMzUpO1k4JiYoUT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoSikpfWZ1bmN0aW9uIGMyKCQpe3ZhciBRPUQxLEo9JC5fX2M7dHlwZW9mIEo9PSJmdW5jdGlvbiImJigkLl9fYz12b2lkIDAsSigpKSxEMT1RfWZ1bmN0aW9uIGY1KCQpe3ZhciBRPUQxOyQuX19jPSQuX18oKSxEMT1RfWZ1bmN0aW9uIG01KCQsUSl7cmV0dXJuISR8fCQubGVuZ3RoIT09US5sZW5ndGh8fFEuc29tZShmdW5jdGlvbihKLFope3JldHVybiBKIT09JFtaXX0pfWZ1bmN0aW9uIEc4KCQsUSl7cmV0dXJuIHR5cGVvZiBRPT0iZnVuY3Rpb24iP1EoJCk6UX1mdW5jdGlvbiBINCgkLFEpe2Zvcih2YXIgSiBpbiBRKSRbSl09UVtKXTtyZXR1cm4gJH1mdW5jdGlvbiBWOCgkLFEpe2Zvcih2YXIgSiBpbiAkKWlmKEohPT0iX19zb3VyY2UiJiYhKEogaW4gUSkpcmV0dXJuITA7Zm9yKHZhciBaIGluIFEpaWYoWiE9PSJfX3NvdXJjZSImJiRbWl0hPT1RW1pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEI4KCQsUSl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1RfShCOC5wcm90b3R5cGU9bmV3IHAxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxCOC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsUSl7cmV0dXJuIFY4KHRoaXMucHJvcHMsJCl8fFY4KHRoaXMuc3RhdGUsUSl9O3ZhciBOOD1uLl9fYjtuLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCksTjgmJk44KCQpfTt2YXIgRjQ9bi5fX2U7bi5fX2U9ZnVuY3Rpb24oJCxRLEosWil7aWYoJC50aGVuKXtmb3IodmFyIFgsWT1RO1k9WS5fXzspaWYoKFg9WS5fX2MpJiZYLl9fYylyZXR1cm4gUS5fX2U9PW51bGwmJihRLl9fZT1KLl9fZSxRLl9faz1KLl9fayksWC5fX2MoJCxRKX1GNCgkLFEsSixaKX07dmFyIFU4PW4udW5tb3VudDtmdW5jdGlvbiBrOCgkLFEsSil7cmV0dXJuICQmJigkLl9fYyYmJC5fX2MuX19IJiYoJC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWil7dHlwZW9mIFouX19jPT0iZnVuY3Rpb24iJiZaLl9fYygpfSksJC5fX2MuX19IPW51bGwpLCgkPUg0KHt9LCQpKS5fX2MhPW51bGwmJigkLl9fYy5fX1A9PT1KJiYoJC5fX2MuX19QPVEpLCQuX19jLl9fZT0hMCwkLl9fYz1udWxsKSwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBrOChaLFEsSil9KSksJH1mdW5jdGlvbiBBOCgkLFEsSil7cmV0dXJuICQmJkomJigkLl9fdj1udWxsLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIEE4KFosUSxKKX0pLCQuX19jJiYkLl9fYy5fX1A9PT1RJiYoJC5fX2UmJkouYXBwZW5kQ2hpbGQoJC5fX2UpLCQuX19jLl9fZT0hMCwkLl9fYy5fX1A9SikpLCR9ZnVuY3Rpb24gcDUoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gTzgoJCl7dmFyIFE9JC5fXyYmJC5fXy5fX2M7cmV0dXJuIFEmJlEuX19hJiZRLl9fYSgkKX1mdW5jdGlvbiBpMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfW4udW5tb3VudD1mdW5jdGlvbigkKXt2YXIgUT0kLl9fYztRJiYoUS5fX3o9ITApLFEmJlEuX19SJiZRLl9fUigpLFEmJjMyJiQuX191JiYoJC50eXBlPW51bGwpLFU4JiZVOCgkKX0sKHA1LnByb3RvdHlwZT1uZXcgcDEpLl9fYz1mdW5jdGlvbigkLFEpe3ZhciBKPVEuX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKEopO3ZhciBYPU84KFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsSi5fX1I9bnVsbCxYP1goTik6TigpKX07Si5fX1I9cTt2YXIgRz1KLl9fUDtKLl9fUD1udWxsO3ZhciBOPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgQj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09QTgoQixCLl9fYy5fX1AsQi5fX2MuX19PKX12YXIgVTtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtVPVouby5wb3AoKTspVS5fX1A9RyxVLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZRLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxwNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LHA1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxRKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPWs4KHRoaXMuX19iLEosWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIFg9US5fX2EmJnYxKCQxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIFgmJihYLl9fdSY9LTMzKSxbdjEoJDEsbnVsbCxRLl9fYT9udWxsOiQuY2hpbGRyZW4pLFhdfTt2YXIgTDg9ZnVuY3Rpb24oJCxRLEope2lmKCsrSlsxXT09PUpbMF0mJiQubC5kZWxldGUoUSksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKEo9JC5pO0o7KXtmb3IoO0oubGVuZ3RoPjM7KUoucG9wKCkoKTtpZihKWzFdPEpbMF0pYnJlYWs7JC5pPUo9SlsyXX19OyhpMi5wcm90b3R5cGU9bmV3IHAxKS5fX2E9ZnVuY3Rpb24oJCl7dmFyIFE9dGhpcyxKPU84KFEuX192KSxaPVEubC5nZXQoJCk7cmV0dXJuIFpbMF0rKyxmdW5jdGlvbihYKXt2YXIgWT1mdW5jdGlvbigpe1EucHJvcHMucmV2ZWFsT3JkZXI/KFoucHVzaChYKSxMOChRLCQsWikpOlgoKX07Sj9KKFkpOlkoKX19LGkyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIFE9UTAoJC5jaGlsZHJlbik7JC5yZXZlYWxPcmRlciYmJC5yZXZlYWxPcmRlclswXT09PSJiIiYmUS5yZXZlcnNlKCk7Zm9yKHZhciBKPVEubGVuZ3RoO0otLTspdGhpcy5sLnNldChRW0pdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiAkLmNoaWxkcmVufSxpMi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWkyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciAkPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oUSxKKXtMOCgkLEosUSl9KX07dmFyIGs0PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLEE0PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxPND0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLE00PS9bQS1aMC05XS9nLF80PXR5cGVvZiBkb2N1bWVudDwidSIsVzQ9ZnVuY3Rpb24oJCl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KCQpfTtmdW5jdGlvbiBNOCgkLFEsSil7cmV0dXJuIFEuX19rPT1udWxsJiYoUS50ZXh0Q29udGVudD0iIiksVDAoJCxRKSx0eXBlb2YgSj09ImZ1bmN0aW9uIiYmSigpLCQ/JC5fX2M6bnVsbH1wMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocDEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihRKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6UX0pfX0pfSk7dmFyIEM4PW4uZXZlbnQ7bi5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gQzgmJigkPUM4KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgXzgsUDQ9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHo4PW4udm5vZGU7bi52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oUSl7dmFye3Byb3BzOkosdHlwZTpafT1RLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIEope3ZhciBHPUpbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gSikmJkc9PW51bGx8fF80JiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgTj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gSiYmSi52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJkc9PT0hMD9HPSIiOk49PT0idHJhbnNsYXRlIiYmRz09PSJubyI/Rz0hMTpOWzBdPT09Im8iJiZOWzFdPT09Im4iP049PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6TiE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8VzQoSi50eXBlKT9OPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Tj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOk80LnRlc3QocSkmJihxPU4pOk49cT0ib25pbnB1dCI6WSYmQTQudGVzdChxKT9xPXEucmVwbGFjZShNNCwiLSQmIikudG9Mb3dlckNhc2UoKTpHPT09bnVsbCYmKEc9dm9pZCAwKSxOPT09Im9uaW5wdXQiJiZYW3E9Tl0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09R319Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1RMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9UTAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PUIucHJvcHMudmFsdWV9KSkpLEouY2xhc3MmJiFKLmNsYXNzTmFtZT8oWC5jbGFzcz1KLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLFA0KSk6Si5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPUouY2xhc3NOYW1lKSxRLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9azQsejgmJno4KCQpfTt2YXIgSDg9bi5fX3I7bi5fX3I9ZnVuY3Rpb24oJCl7SDgmJkg4KCQpLF84PSQuX19jfTt2YXIgRjg9bi5kaWZmZWQ7bi5kaWZmZWQ9ZnVuY3Rpb24oJCl7RjgmJkY4KCQpO3Zhcntwcm9wczpRLF9fZTpKfT0kO0ohPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBRJiZRLnZhbHVlIT09Si52YWx1ZSYmKEoudmFsdWU9US52YWx1ZT09bnVsbD8iIjpRLnZhbHVlKSxfOD1udWxsfTtmdW5jdGlvbiBXOCgkKXtyZXR1cm4hISQuX19rJiYoVDAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gUDgoJCl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihRKXtNOChRLCQpfSx1bm1vdW50OmZ1bmN0aW9uKCl7VzgoJCl9fX1mdW5jdGlvbiB4OCgkLFEpe2Zvcih2YXIgSiBpbiBRKSRbSl09UVtKXTtyZXR1cm4gJH1mdW5jdGlvbiBsNSgkLFEpe2Zvcih2YXIgSiBpbiAkKWlmKEohPT0iX19zb3VyY2UiJiYhKEogaW4gUSkpcmV0dXJuITA7Zm9yKHZhciBaIGluIFEpaWYoWiE9PSJfX3NvdXJjZSImJiRbWl0hPT1RW1pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHY4KCQsUSl7dmFyIEo9USgpLFo9TSh7dDp7X186Six1OlF9fSksWD1aWzBdLnQsWT1aWzFdO3JldHVybiBBMChmdW5jdGlvbigpe1guX189SixYLnU9USx1NShYKSYmWSh7dDpYfSl9LFskLEosUV0pLGIoZnVuY3Rpb24oKXtyZXR1cm4gdTUoWCkmJlkoe3Q6WH0pLCQoZnVuY3Rpb24oKXt1NShYKSYmWSh7dDpYfSl9KX0sWyRdKSxKfWZ1bmN0aW9uIHU1KCQpe3RyeXtyZXR1cm4hKChRPSQuX18pPT09KEo9JC51KCkpJiYoUSE9PTB8fDEvUT09MS9KKXx8USE9USYmSiE9Sil9Y2F0Y2goWil7cmV0dXJuITB9dmFyIFEsSn1mdW5jdGlvbiBqOCgkKXskKCl9ZnVuY3Rpb24gUjgoJCl7cmV0dXJuICR9ZnVuY3Rpb24gZzgoKXtyZXR1cm5bITEsajhdfXZhciBoOD1BMDtmdW5jdGlvbiBkNSgkLFEpe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9UX1mdW5jdGlvbiB4MCgkLFEpe2Z1bmN0aW9uIEooWCl7dmFyIFk9dGhpcy5wcm9wcy5yZWY7cmV0dXJuIFkhPVgucmVmJiZZJiYodHlwZW9mIFk9PSJmdW5jdGlvbiI/WShudWxsKTpZLmN1cnJlbnQ9bnVsbCksUT8hUSh0aGlzLnByb3BzLFgpfHxZIT1YLnJlZjpsNSh0aGlzLnByb3BzLFgpfWZ1bmN0aW9uIFooWCl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPUosdjEoJCxYKX1yZXR1cm4gWi5kaXNwbGF5TmFtZT0iTWVtbygiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixaLl9fZj1aLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFoudHlwZT0kLFp9KGQ1LnByb3RvdHlwZT1uZXcgcDEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGQ1LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxRKXtyZXR1cm4gbDUodGhpcy5wcm9wcywkKXx8bDUodGhpcy5zdGF0ZSxRKX07dmFyIEQ4PW4uX19iO24uX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxEOCYmRDgoJCl9O3ZhciBEND10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBIMCgkKXtmdW5jdGlvbiBRKEope3ZhciBaPXg4KHt9LEopO3JldHVybiBkZWxldGUgWi5yZWYsJChaLEoucmVmfHxudWxsKX1yZXR1cm4gUS4kJHR5cGVvZj1ENCxRLnJlbmRlcj0kLFEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9US5fX2Y9ITAsUS5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixRfXZhciBUOD1mdW5jdGlvbigkLFEpe3JldHVybiAkPT1udWxsP251bGw6UTAoUTAoJCkubWFwKFEpKX0sVDQ9e21hcDpUOCxmb3JFYWNoOlQ4LGNvdW50OmZ1bmN0aW9uKCQpe3JldHVybiAkP1EwKCQpLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKCQpe3ZhciBRPVEwKCQpO2lmKFEubGVuZ3RoIT09MSl0aHJvdyJDaGlsZHJlbi5vbmx5IjtyZXR1cm4gUVswXX0sdG9BcnJheTpRMH0sdzQ9bi5fX2U7bi5fX2U9ZnVuY3Rpb24oJCxRLEosWil7aWYoJC50aGVuKXtmb3IodmFyIFgsWT1RO1k9WS5fXzspaWYoKFg9WS5fX2MpJiZYLl9fYylyZXR1cm4gUS5fX2U9PW51bGwmJihRLl9fZT1KLl9fZSxRLl9faz1KLl9fayksWC5fX2MoJCxRKX13NCgkLFEsSixaKX07dmFyIHc4PW4udW5tb3VudDtmdW5jdGlvbiBmOCgkLFEsSil7cmV0dXJuICQmJigkLl9fYyYmJC5fX2MuX19IJiYoJC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWil7dHlwZW9mIFouX19jPT0iZnVuY3Rpb24iJiZaLl9fYygpfSksJC5fX2MuX19IPW51bGwpLCgkPXg4KHt9LCQpKS5fX2MhPW51bGwmJigkLl9fYy5fX1A9PT1KJiYoJC5fX2MuX19QPVEpLCQuX19jLl9fZT0hMCwkLl9fYz1udWxsKSwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBmOChaLFEsSil9KSksJH1mdW5jdGlvbiBtOCgkLFEsSil7cmV0dXJuICQmJkomJigkLl9fdj1udWxsLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIG04KFosUSxKKX0pLCQuX19jJiYkLl9fYy5fX1A9PT1RJiYoJC5fX2UmJkouYXBwZW5kQ2hpbGQoJC5fX2UpLCQuX19jLl9fZT0hMCwkLl9fYy5fX1A9SikpLCR9ZnVuY3Rpb24gbjIoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gcDgoJCl7dmFyIFE9JC5fXyYmJC5fXy5fX2M7cmV0dXJuIFEmJlEuX19hJiZRLl9fYSgkKX1mdW5jdGlvbiBFNCgkKXt2YXIgUSxKLFosWD1udWxsO2Z1bmN0aW9uIFkocSl7aWYoUXx8KFE9JCgpKS50aGVuKGZ1bmN0aW9uKEcpe0cmJihYPUcuZGVmYXVsdHx8RyksWj0hMH0sZnVuY3Rpb24oRyl7Sj1HLFo9ITB9KSxKKXRocm93IEo7aWYoIVopdGhyb3cgUTtyZXR1cm4gWD92MShYLHEpOm51bGx9cmV0dXJuIFkuZGlzcGxheU5hbWU9IkxhenkiLFkuX19mPSEwLFl9ZnVuY3Rpb24gVTIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1uLnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIFE9JC5fX2M7USYmKFEuX196PSEwKSxRJiZRLl9fUiYmUS5fX1IoKSxRJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSx3OCYmdzgoJCl9LChuMi5wcm90b3R5cGU9bmV3IHAxKS5fX2M9ZnVuY3Rpb24oJCxRKXt2YXIgSj1RLl9fYyxaPXRoaXM7Wi5vPT1udWxsJiYoWi5vPVtdKSxaLm8ucHVzaChKKTt2YXIgWD1wOChaLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Wi5fX3p8fChZPSEwLEouX19SPW51bGwsWD9YKE4pOk4oKSl9O0ouX19SPXE7dmFyIEc9Si5fX1A7Si5fX1A9bnVsbDt2YXIgTj1mdW5jdGlvbigpe2lmKCEtLVouX191KXtpZihaLnN0YXRlLl9fYSl7dmFyIEI9Wi5zdGF0ZS5fX2E7Wi5fX3YuX19rWzBdPW04KEIsQi5fX2MuX19QLEIuX19jLl9fTyl9dmFyIFU7Zm9yKFouc2V0U3RhdGUoe19fYTpaLl9fYj1udWxsfSk7VT1aLm8ucG9wKCk7KVUuX19QPUcsVS5mb3JjZVVwZGF0ZSgpfX07Wi5fX3UrK3x8MzImUS5fX3V8fFouc2V0U3RhdGUoe19fYTpaLl9fYj1aLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sbjIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxuMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsUSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1mOCh0aGlzLl9fYixKLFouX19PPVouX19QKX10aGlzLl9fYj1udWxsfXZhciBYPVEuX19hJiZ2MSgkMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBYJiYoWC5fX3UmPS0zMyksW3YxKCQxLG51bGwsUS5fX2E/bnVsbDokLmNoaWxkcmVuKSxYXX07dmFyIEU4PWZ1bmN0aW9uKCQsUSxKKXtpZigrK0pbMV09PT1KWzBdJiYkLmwuZGVsZXRlKFEpLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihKPSQuaTtKOyl7Zm9yKDtKLmxlbmd0aD4zOylKLnBvcCgpKCk7aWYoSlsxXTxKWzBdKWJyZWFrOyQuaT1KPUpbMl19fTtmdW5jdGlvbiBJNCgkKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gJC5jb250ZXh0fSwkLmNoaWxkcmVufWZ1bmN0aW9uIHk0KCQpe3ZhciBRPXRoaXMsSj0kLmg7aWYoUS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1QwKG51bGwsUS52KSxRLnY9bnVsbCxRLmg9bnVsbH0sUS5oJiZRLmghPT1KJiZRLmNvbXBvbmVudFdpbGxVbm1vdW50KCksIVEudil7Zm9yKHZhciBaPVEuX192O1ohPT1udWxsJiYhWi5fX20mJlouX18hPT1udWxsOylaPVouX187US5oPUosUS52PXtub2RlVHlwZToxLHBhcmVudE5vZGU6SixjaGlsZE5vZGVzOltdLF9fazp7X19tOlouX19tfSxjb250YWluczpmdW5jdGlvbigpe3JldHVybiEwfSxuYW1lc3BhY2VVUkk6Si5uYW1lc3BhY2VVUkksaW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKFgsWSl7dGhpcy5jaGlsZE5vZGVzLnB1c2goWCksUS5oLmluc2VydEJlZm9yZShYLFkpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihYKXt0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKFgpPj4+MSwxKSxRLmgucmVtb3ZlQ2hpbGQoWCl9fX1UMCh2MShJNCx7Y29udGV4dDpRLmNvbnRleHR9LCQuX192KSxRLnYpfWZ1bmN0aW9uIGM1KCQsUSl7dmFyIEo9djEoeTQse19fdjokLGg6UX0pO3JldHVybiBKLmNvbnRhaW5lckluZm89USxKfShVMi5wcm90b3R5cGU9bmV3IHAxKS5fX2E9ZnVuY3Rpb24oJCl7dmFyIFE9dGhpcyxKPXA4KFEuX192KSxaPVEubC5nZXQoJCk7cmV0dXJuIFpbMF0rKyxmdW5jdGlvbihYKXt2YXIgWT1mdW5jdGlvbigpe1EucHJvcHMucmV2ZWFsT3JkZXI/KFoucHVzaChYKSxFOChRLCQsWikpOlgoKX07Sj9KKFkpOlkoKX19LFUyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIFE9UTAoJC5jaGlsZHJlbik7JC5yZXZlYWxPcmRlciYmJC5yZXZlYWxPcmRlclswXT09PSJiIiYmUS5yZXZlcnNlKCk7Zm9yKHZhciBKPVEubGVuZ3RoO0otLTspdGhpcy5sLnNldChRW0pdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiAkLmNoaWxkcmVufSxVMi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPVUyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciAkPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oUSxKKXtFOCgkLEosUSl9KX07dmFyIHU4PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLGI0PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxTND0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLHg0PS9bQS1aMC05XS9nLHY0PXR5cGVvZiBkb2N1bWVudDwidSIsajQ9ZnVuY3Rpb24oJCl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KCQpfTtmdW5jdGlvbiBSNCgkLFEsSil7cmV0dXJuIFEuX19rPT1udWxsJiYoUS50ZXh0Q29udGVudD0iIiksVDAoJCxRKSx0eXBlb2YgSj09ImZ1bmN0aW9uIiYmSigpLCQ/JC5fX2M6bnVsbH1mdW5jdGlvbiBnNCgkLFEsSil7cmV0dXJuIGQyKCQsUSksdHlwZW9mIEo9PSJmdW5jdGlvbiImJkooKSwkPyQuX19jOm51bGx9cDEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHAxLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oUSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlF9KX19KX0pO3ZhciBJOD1uLmV2ZW50O24uZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIEk4JiYoJD1JOCgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIHI1LGg0PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSx5OD1uLnZub2RlO24udm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKFEpe3Zhcntwcm9wczpKLHR5cGU6Wn09USxYPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBKKXt2YXIgRz1KW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEopJiZHPT1udWxsfHx2NCYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIE49cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEomJkoudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpOPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6TlswXT09PSJvIiYmTlsxXT09PSJuIj9OPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOk4hPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fGo0KEoudHlwZSk/Tj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOk49PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpTNC50ZXN0KHEpJiYocT1OKTpOPXE9Im9uaW5wdXQiOlkmJmI0LnRlc3QocSk/cT1xLnJlcGxhY2UoeDQsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksTj09PSJvbmlucHV0IiYmWFtxPU5dJiYocT0ib25pbnB1dENhcHR1cmUiKSxYW3FdPUd9fVo9PSJzZWxlY3QiJiYoWC5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShYLnZhbHVlKSYmKFgudmFsdWU9UTAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgudmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTF9KSksWC5kZWZhdWx0VmFsdWUhPW51bGwmJihYLnZhbHVlPVEwKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLm11bHRpcGxlP1guZGVmYXVsdFZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xOlguZGVmYXVsdFZhbHVlPT1CLnByb3BzLnZhbHVlfSkpKSxKLmNsYXNzJiYhSi5jbGFzc05hbWU/KFguY2xhc3M9Si5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2xhc3NOYW1lIixoNCkpOkouY2xhc3NOYW1lJiYoWC5jbGFzcz1YLmNsYXNzTmFtZT1KLmNsYXNzTmFtZSksUS5wcm9wcz1YfSgkKSwkLiQkdHlwZW9mPXU4LHk4JiZ5OCgkKX07dmFyIGI4PW4uX19yO24uX19yPWZ1bmN0aW9uKCQpe2I4JiZiOCgkKSxyNT0kLl9fY307dmFyIFM4PW4uZGlmZmVkO24uZGlmZmVkPWZ1bmN0aW9uKCQpe1M4JiZTOCgkKTt2YXJ7cHJvcHM6USxfX2U6Sn09JDtKIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gUSYmUS52YWx1ZSE9PUoudmFsdWUmJihKLnZhbHVlPVEudmFsdWU9PW51bGw/IiI6US52YWx1ZSkscjU9bnVsbH07dmFyIGY0PXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOntjdXJyZW50OntyZWFkQ29udGV4dDpmdW5jdGlvbigkKXtyZXR1cm4gcjUuX19uWyQuX19jXS5wcm9wcy52YWx1ZX0sdXNlQ2FsbGJhY2s6VCx1c2VDb250ZXh0OkwwLHVzZURlYnVnVmFsdWU6bzIsdXNlRGVmZXJyZWRWYWx1ZTpSOCx1c2VFZmZlY3Q6Yix1c2VJZDpjMCx1c2VJbXBlcmF0aXZlSGFuZGxlOnIyLHVzZUluc2VydGlvbkVmZmVjdDpoOCx1c2VMYXlvdXRFZmZlY3Q6QTAsdXNlTWVtbzpfMSx1c2VSZWR1Y2VyOlMwLHVzZVJlZjpJLHVzZVN0YXRlOk0sdXNlU3luY0V4dGVybmFsU3RvcmU6djgsdXNlVHJhbnNpdGlvbjpnOH19fTtmdW5jdGlvbiBtNCgkKXtyZXR1cm4gdjEuYmluZChudWxsLCQpfWZ1bmN0aW9uIGEyKCQpe3JldHVybiEhJCYmJC4kJHR5cGVvZj09PXU4fWZ1bmN0aW9uIHA0KCQpe3JldHVybiBhMigkKSYmJC50eXBlPT09JDF9ZnVuY3Rpb24gdTQoJCl7cmV0dXJuISEkJiZ0eXBlb2YgJC5kaXNwbGF5TmFtZT09InN0cmluZyImJiQuZGlzcGxheU5hbWUuaW5kZXhPZigiTWVtbygiKT09MH1mdW5jdGlvbiBsNCgkKXtyZXR1cm4gYTIoJCk/ZzUuYXBwbHkobnVsbCxhcmd1bWVudHMpOiR9ZnVuY3Rpb24gZDQoJCl7cmV0dXJuISEkLl9fayYmKFQwKG51bGwsJCksITApfWZ1bmN0aW9uIGM0KCQpe3JldHVybiAkJiYoJC5iYXNlfHwkLm5vZGVUeXBlPT09MSYmJCl8fG51bGx9dmFyIHI0PWZ1bmN0aW9uKCQsUSl7cmV0dXJuICQoUSl9LG80PWZ1bmN0aW9uKCQsUSl7dmFyIEo9bi5kZWJvdW5jZVJlbmRlcmluZztuLmRlYm91bmNlUmVuZGVyaW5nPWZ1bmN0aW9uKFgpe3JldHVybiBYKCl9O3ZhciBaPSQoUSk7cmV0dXJuIG4uZGVib3VuY2VSZW5kZXJpbmc9SixafSxpND1hMixqPXt1c2VTdGF0ZTpNLHVzZUlkOmMwLHVzZVJlZHVjZXI6UzAsdXNlRWZmZWN0OmIsdXNlTGF5b3V0RWZmZWN0OkEwLHVzZUluc2VydGlvbkVmZmVjdDpoOCx1c2VUcmFuc2l0aW9uOmc4LHVzZURlZmVycmVkVmFsdWU6UjgsdXNlU3luY0V4dGVybmFsU3RvcmU6djgsc3RhcnRUcmFuc2l0aW9uOmo4LHVzZVJlZjpJLHVzZUltcGVyYXRpdmVIYW5kbGU6cjIsdXNlTWVtbzpfMSx1c2VDYWxsYmFjazpULHVzZUNvbnRleHQ6TDAsdXNlRGVidWdWYWx1ZTpvMix2ZXJzaW9uOiIxOC4zLjEiLENoaWxkcmVuOlQ0LHJlbmRlcjpSNCxoeWRyYXRlOmc0LHVubW91bnRDb21wb25lbnRBdE5vZGU6ZDQsY3JlYXRlUG9ydGFsOmM1LGNyZWF0ZUVsZW1lbnQ6djEsY3JlYXRlQ29udGV4dDpVMCxjcmVhdGVGYWN0b3J5Om00LGNsb25lRWxlbWVudDpsNCxjcmVhdGVSZWY6TjIsRnJhZ21lbnQ6JDEsaXNWYWxpZEVsZW1lbnQ6YTIsaXNFbGVtZW50Omk0LGlzRnJhZ21lbnQ6cDQsaXNNZW1vOnU0LGZpbmRET01Ob2RlOmM0LENvbXBvbmVudDpwMSxQdXJlQ29tcG9uZW50OmQ1LG1lbW86eDAsZm9yd2FyZFJlZjpIMCxmbHVzaFN5bmM6bzQsdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6cjQsU3RyaWN0TW9kZTokMSxTdXNwZW5zZTpuMixTdXNwZW5zZUxpc3Q6VTIsbGF6eTpFNCxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDpmNH07dmFyIEwyPXtwb3J0cmFpdDoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdCJ9LG81PXtwb3J0cmFpdDoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdCJ9O3ZhciByMD0zO2Z1bmN0aW9uIGk1KCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIG41KCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIHkwKCQpe3JldHVybiEhJCYmKG41KCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBvMCgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IFE9bjUoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsSj1RP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFo9UT9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihKPT09JC53aWR0aCYmWj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOkosaGVpZ2h0Olp9fWZ1bmN0aW9uIGkwKCQpe2xldCBRPW8wKCQpLEo9bDgoJD8ub3JpZW50YXRpb24pLFo9TWF0aC5hYnMoSik9PT05MCxYPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPUo9PT0xODB8fFomJiFYO3JldHVybntkaXNwbGF5Q29uZmlnOlEscm90YXRpb25EZWdyZWVzOlk/SjowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBsOCgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBuMCgkLFEsSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OkoseToxLVF9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUoseTpRfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLVEseToxLUp9O2RlZmF1bHQ6cmV0dXJue3g6USx5Okp9fX1mdW5jdGlvbiBkOCgkLFEsSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybntkeDpKLGR5Oi1RfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue2R4Oi1KLGR5OlF9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybntkeDotUSxkeTotSn07ZGVmYXVsdDpyZXR1cm57ZHg6USxkeTpKfX19ZnVuY3Rpb24gYTUoJCxRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6c3dpdGNoKFEpe2Nhc2UgMTpyZXR1cm4gMztjYXNlIDQ6cmV0dXJuIDI7Y2FzZSAyOnJldHVybiAxO2Nhc2UgMzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiBRfWNhc2UibGFuZHNjYXBlX3JpZ2h0Ijpzd2l0Y2goUSl7Y2FzZSAxOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gMztjYXNlIDI6cmV0dXJuIDQ7Y2FzZSAzOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIFF9Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6c3dpdGNoKFEpe2Nhc2UgMTpyZXR1cm4gNDtjYXNlIDQ6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAzO2Nhc2UgMzpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiBRfWRlZmF1bHQ6cmV0dXJuIFF9fXZhciBjOD0xNjtmdW5jdGlvbiBDMigkLFEsSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gbnVsbDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjEsWD1RPT09MT8kKjE2OlE9PT0yPyQqWjokLFk9TWF0aC5tYXgoLTIwMCxNYXRoLm1pbigyMDAsWCkpO3JldHVybiBNYXRoLmFicyhZKTwwLjAxP251bGw6WX1mdW5jdGlvbiBzNSgkLFEsSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gMDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjE7aWYoUT09PTEpcmV0dXJuICQqYzg7aWYoUT09PTIpcmV0dXJuICQqWjtyZXR1cm4gJH1mdW5jdGlvbiByOCgkLFEsSil7aWYoIVF8fFEud2lkdGg8PTB8fFEuaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBaPVEub3JpZW50YXRpb249PT12b2lkIDAmJiQ/Lm9yaWVudGF0aW9uP3suLi5RLG9yaWVudGF0aW9uOiQub3JpZW50YXRpb259OlE7aWYoJCYmJC53aWR0aD09PVoud2lkdGgmJiQuaGVpZ2h0PT09Wi5oZWlnaHQmJiQub3JpZW50YXRpb249PT1aLm9yaWVudGF0aW9uKXJldHVybiBudWxsO3JldHVybntjb25maWc6Wixub3RpZnlQYXJlbnQ6Sj09PSJyZXBvcnRlZCJ9fXZhciBuND17WzFdOiJkZXNjcmlwdGlvbiIsWzJdOiJrZXlmcmFtZSIsWzNdOiJkZWx0YSIsWzRdOiJzZWVkIn07Y2xhc3MgczJ7YnVmZmVyPW5ldyBVaW50OEFycmF5KDY1NTM2KTtsZW49MDtzdGFydD0wO2FwcGVuZCgkKXtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2lmKHRoaXMuc3RhcnQ+MCl0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbiksdGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wO2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7bGV0IFE9dGhpcy5idWZmZXIubGVuZ3RoO3doaWxlKFE8dGhpcy5sZW4rJC5sZW5ndGgpUSo9MjtsZXQgSj1uZXcgVWludDhBcnJheShRKTtKLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLHRoaXMubGVuKSksdGhpcy5idWZmZXI9Sn19dGhpcy5idWZmZXIuc2V0KCQsdGhpcy5sZW4pLHRoaXMubGVuKz0kLmxlbmd0aH1wdXNoKCQpe2lmKCQubGVuZ3RoPjApdGhpcy5hcHBlbmQoJCk7bGV0IFE9W10sSj10aGlzLmJ1ZmZlcjt3aGlsZSh0aGlzLmxlbi10aGlzLnN0YXJ0Pj00KXtsZXQgWj10aGlzLnN0YXJ0LFg9KEpbWl08PDI0fEpbWisxXTw8MTZ8SltaKzJdPDw4fEpbWiszXSk+Pj4wO2lmKHRoaXMubGVuLVotNDxYKWJyZWFrO2lmKFg8MSl7dGhpcy5zdGFydCs9NDtjb250aW51ZX1sZXQgWT1KW1orNF0scT1uNFtZXTtpZihxKVEucHVzaCh7dHlwZTpxLHBheWxvYWQ6Si5zbGljZShaKzUsWis0K1gpfSk7dGhpcy5zdGFydCs9NCtYfWlmKHRoaXMuc3RhcnQ+MCl7aWYodGhpcy5zdGFydDx0aGlzLmxlbil0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbik7dGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wfXJldHVybiBRfXJlc2V0KCl7dGhpcy5sZW49MCx0aGlzLnN0YXJ0PTB9fWZ1bmN0aW9uIHQ1KCQpe2lmKCQubGVuZ3RoPDQpcmV0dXJuImF2YzEuNDJFMDFFIjtsZXQgUT0oSik9PkoudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4iYXZjMS4iK1EoJFsxXSkrUSgkWzJdKStRKCRbM10pfWZ1bmN0aW9uIHYwKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmdHlwZW9mIGdsb2JhbFRoaXMuVmlkZW9EZWNvZGVyPCJ1In12YXIgYTQ9MTAwMCxzND0xNjY2NztmdW5jdGlvbiBlNSh7dXJsOiQsZW5hYmxlZDpRLGNhbnZhc1JlZjpKLG9uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pe2xldCBHPUkoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pO0cuY3VycmVudD17b25GaXJzdEZyYW1lOlosb25GcmFtZTpYLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSxiKCgpPT57aWYoIVF8fCEkfHwhdjAoKSlyZXR1cm47bGV0IE49bmV3IEFib3J0Q29udHJvbGxlcixCPW5ldyBzMixVPSExLFY9ITEsQz0wLEw9bnVsbCxGPW51bGwsej0oKT0+IVUmJiFOLnNpZ25hbC5hYm9ydGVkLEg9KHUpPT57aWYoRy5jdXJyZW50Lm9uRGVjb2RlckVycm9yKUcuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgRy5jdXJyZW50Lm9uRXJyb3I/Lih1KX0saz0odSxjLFExKT0+e2lmKCF6KCkpcmV0dXJuO2xldCBVMT1KLmN1cnJlbnQ7aWYoIVUxKXJldHVybjtpZihVMS53aWR0aCE9PWN8fFUxLmhlaWdodCE9PVExKVUxLndpZHRoPWMsVTEuaGVpZ2h0PVExO2xldCBLMT1VMS5nZXRDb250ZXh0KCIyZCIpO2lmKCFLMSlyZXR1cm47aWYoSzEuZHJhd0ltYWdlKHUsMCwwLGMsUTEpLEcuY3VycmVudC5vbkZyYW1lPy4oKSwhVilWPSEwLEcuY3VycmVudC5vbkZpcnN0RnJhbWU/LigpfSxfPSgpPT5uZXcgVmlkZW9EZWNvZGVyKHtvdXRwdXQ6KHUpPT57dHJ5e2lmKHooKSlrKHUsdS5kaXNwbGF5V2lkdGgsdS5kaXNwbGF5SGVpZ2h0KX1maW5hbGx5e3UuY2xvc2UoKX19LGVycm9yOih1KT0+SChgZGVjb2RlcjogJHt1Lm1lc3NhZ2V9YCl9KSxTPWFzeW5jKHUpPT57bGV0IGM9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEJsb2IoW3VdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTt0cnl7aWYoeigpKWsoYyxjLndpZHRoLGMuaGVpZ2h0KX1maW5hbGx5e2MuY2xvc2UoKX19LEU9KHUpPT57aWYoIUZ8fEYuc3RhdGU9PT0iY2xvc2VkIilGPV8oKTt0cnl7Ri5jb25maWd1cmUoe2NvZGVjOnQ1KHUpLGRlc2NyaXB0aW9uOnUsb3B0aW1pemVGb3I6ImxhdGVuY3kiLGhhcmR3YXJlQWNjZWxlcmF0aW9uOiJwcmVmZXItaGFyZHdhcmUifSl9Y2F0Y2goYyl7SChgY29uZmlnOiAke2MubWVzc2FnZX1gKX19LHk9KHUsYyk9PntpZihGPy5zdGF0ZSE9PSJjb25maWd1cmVkIilyZXR1cm47dHJ5e0YuZGVjb2RlKG5ldyBFbmNvZGVkVmlkZW9DaHVuayh7dHlwZTp1PT09ImtleWZyYW1lIj8ia2V5IjoiZGVsdGEiLHRpbWVzdGFtcDpDLGRhdGE6Y30pKSxDKz1zNH1jYXRjaHt9fSx4PSh1LGMpPT57c3dpdGNoKHUpe2Nhc2Uic2VlZCI6UyhjKS5jYXRjaCgoKT0+e30pO3JldHVybjtjYXNlImRlc2NyaXB0aW9uIjpFKGMpO3JldHVybjtjYXNlImtleWZyYW1lIjpjYXNlImRlbHRhIjp5KHUsYyk7cmV0dXJufX0sWTE9KCk9PntpZigheigpfHxMKXJldHVybjtMPXNldFRpbWVvdXQoKCk9PntMPW51bGwsZigpfSxhNCl9LGY9YXN5bmMoKT0+e0IucmVzZXQoKTt0cnl7bGV0IGM9KGF3YWl0IGZldGNoKGAkeyR9L3N0cmVhbS5hdmNjYCx7c2lnbmFsOk4uc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFjKXJldHVybjtmb3IoOzspe2xldHtkb25lOlExLHZhbHVlOlUxfT1hd2FpdCBjLnJlYWQoKTtpZihRMSlicmVhaztpZighVTEpY29udGludWU7Zm9yKGxldCBLMSBvZiBCLnB1c2goVTEpKXgoSzEudHlwZSxLMS5wYXlsb2FkKX19Y2F0Y2h7fWZpbmFsbHl7aWYoeigpKVkxKCl9fTtyZXR1cm4gZigpLCgpPT57aWYoVT0hMCxMKWNsZWFyVGltZW91dChMKTtpZihOLmFib3J0KCksQi5yZXNldCgpLEYmJkYuc3RhdGUhPT0iY2xvc2VkIil0cnl7Ri5jbG9zZSgpfWNhdGNoe31GPW51bGx9fSxbJCxRLEpdKX12YXIgdDQ9MDtmdW5jdGlvbiBLKCQsUSxKLFosWCxZKXtRfHwoUT17fSk7dmFyIHEsRyxOPVE7aWYoInJlZiJpbiBOKWZvcihHIGluIE49e30sUSlHPT0icmVmIj9xPVFbR106TltHXT1RW0ddO3ZhciBCPXt0eXBlOiQscHJvcHM6TixrZXk6SixyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS10NCxfX2k6LTEsX191OjAsX19zb3VyY2U6WCxfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoRyBpbiBxKU5bR109PT12b2lkIDAmJihOW0ddPXFbR10pO3JldHVybiBuLnZub2RlJiZuLnZub2RlKEIpLEJ9dmFyIG84PWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAsZTQ9MS4wMDQsJDc9MyxRNz00LEo3PTUsSzc9MTAsWjc9MTE7ZnVuY3Rpb24gdDIoe3VybDokLHdzVXJsOlEsc3R5bGU6SixpbWFnZVN0eWxlOlosY2xhc3NOYW1lOlgsb25Ib21lUHJlc3M6WSxvblN0cmVhbVRvdWNoOnEsb25TdHJlYW1NdWx0aVRvdWNoOkcsb25TdHJlYW1CdXR0b246TixvblN0cmVhbURpZ2l0YWxDcm93bjpCLG9uU3RyZWFtU2Nyb2xsOlUsZW5hYmxlRGlnaXRhbENyb3duOlYsc3Vic2NyaWJlRnJhbWU6QyxzdHJlYW1GcmFtZTpMLHN0cmVhbUNvbmZpZzpGLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOnosaGlkZUNvbnRyb2xzOkgsb25TdHJlYW1pbmdDaGFuZ2U6ayxjb25uZWN0aW9uUXVhbGl0eTpfLGNvZGVjOlM9ImF2Y2MiLG9uQXZjY0Vycm9yOkV9KXtsZXQgeT0hIXEseD1TPT09ImF2Y2MiJiZ2MCgpLFkxPUkobnVsbCksZj1JKG51bGwpLHU9SShudWxsKSxjPUkobnVsbCksUTE9SShudWxsKSxVMT1JKG51bGwpLFtLMSxBMV09TSghMSksW20sZ109TShudWxsKSxbcyxxMV09TShudWxsKSxWMT1JKG51bGwpLE4xPUkoeik7TjEuY3VycmVudD16O2xldCB6MT1JKG51bGwpLFtMMSx2XT1NKG51bGwpO2IoKCk9PntsZXQgdz16MS5jdXJyZW50O2lmKCF3fHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgTz1uZXcgUmVzaXplT2JzZXJ2ZXIoKEEpPT57bGV0IFc9QVswXT8uY29udGVudFJlY3Q7aWYoVyl2KHt3aWR0aDpXLndpZHRoLGhlaWdodDpXLmhlaWdodH0pfSk7cmV0dXJuIE8ub2JzZXJ2ZSh3KSwoKT0+Ty5kaXNjb25uZWN0KCl9LFtdKTtsZXRbYSxsXT1NKDApLFoxPUkoMCksW1AxLERdPU0oITEpLHI9SShudWxsKTtiKCgpPT57aWYoXz09PSJwb29yIil7aWYoRCghMCksci5jdXJyZW50KWNsZWFyVGltZW91dChyLmN1cnJlbnQpO3IuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57RCghMSksci5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoRCghMSksci5jdXJyZW50KWNsZWFyVGltZW91dChyLmN1cnJlbnQpLHIuY3VycmVudD1udWxsO3JldHVybigpPT57aWYoci5jdXJyZW50KWNsZWFyVGltZW91dChyLmN1cnJlbnQpfX0sW19dKTtsZXQgZT1gJHskfS9zdHJlYW0ubWpwZWdgO2IoKCk9PntWMS5jdXJyZW50PW51bGwscTEobnVsbCl9LFskXSk7bGV0IGQ9VCgodyxPPSJyZXBvcnRlZCIpPT57bGV0IEE9cjgoVjEuY3VycmVudCx3LE8pO2lmKCFBKXJldHVybjtpZihWMS5jdXJyZW50PUEuY29uZmlnLHExKEEuY29uZmlnKSxBLm5vdGlmeVBhcmVudClOMS5jdXJyZW50Py4oQS5jb25maWcpfSxbXSksUj1JKGspO1IuY3VycmVudD1rLGIoKCk9PntSLmN1cnJlbnQ/LihLMSl9LFtLMV0pLGIoKCk9PntpZih5JiZGKWQoRiwiZXh0ZXJuYWwiKX0sW3ksRixkXSk7bGV0IE8xPUkoITEpO08xLmN1cnJlbnQ9SzE7bGV0IFgxPUkobnVsbCksbTE9SShudWxsKTtiKCgpPT57aWYoIXl8fCFDfHx4KXJldHVybjtsZXQgTz1zZXRUaW1lb3V0KCgpPT57aWYoIU8xLmN1cnJlbnQpZygiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLEE9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG8oKXtsZXQgaD1YMS5jdXJyZW50O2lmKGgpe1gxLmN1cnJlbnQ9bnVsbDtsZXQgRzE9dS5jdXJyZW50O2lmKEcxKXtpZihtMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwobTEuY3VycmVudCk7bTEuY3VycmVudD1oLEcxLnNyYz1oLFoxLmN1cnJlbnQrK31lbHNlIFVSTC5yZXZva2VPYmplY3RVUkwoaCl9QT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobyl9KSxXPUMoKG8pPT57aWYoZDEuY3VycmVudD1EYXRlLm5vdygpLFgxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChYMS5jdXJyZW50KTtpZihYMS5jdXJyZW50PW8sIU8xLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE8pLEExKCEwKSxnKG51bGwpfSk7cmV0dXJuKCk9PntpZihjbGVhclRpbWVvdXQoTyksY2FuY2VsQW5pbWF0aW9uRnJhbWUoQSksVz8uKCksWDEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKFgxLmN1cnJlbnQpLFgxLmN1cnJlbnQ9bnVsbDtpZihtMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwobTEuY3VycmVudCksbTEuY3VycmVudD1udWxsfX0sW3ksQyx4XSk7bGV0IHMxPVQoKCk9PntkMS5jdXJyZW50PURhdGUubm93KCksQTEoITApLGcobnVsbCl9LFtdKSxuMT1UKCgpPT57aWYoWjEuY3VycmVudCsrLGQxLmN1cnJlbnQ9RGF0ZS5ub3coKSwhTzEuY3VycmVudClBMSghMCksZyhudWxsKX0sW10pO2U1KHt1cmw6JCxlbmFibGVkOngsY2FudmFzUmVmOmYsb25GaXJzdEZyYW1lOnMxLG9uRnJhbWU6bjEsb25FcnJvcjpnLG9uRGVjb2RlckVycm9yOkV9KTtsZXQgdzE9VCgodyk9PntsZXQgTz1pMChWMS5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEE9bjAoTyx3Lngsdy55KSxXPXcuZWRnZT09PXZvaWQgMD92b2lkIDA6YTUoTyx3LmVkZ2UpLG89Vz09PXZvaWQgMD97dHlwZTp3LnR5cGUsLi4uQX06e3R5cGU6dy50eXBlLC4uLkEsZWRnZTpXfTtpZih5KXtxPy4obyk7cmV0dXJufWxldCBoPVUxLmN1cnJlbnQ7aWYoIWh8fGgucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgRzE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG8pKSxDMT1uZXcgVWludDhBcnJheSgxK0cxLmxlbmd0aCk7QzFbMF09JDcsQzEuc2V0KEcxLDEpLGguc2VuZChDMSl9LFt5LHFdKSxqMT1UKCh3KT0+e2lmKHkpe04/Lih3KTtyZXR1cm59bGV0IE89VTEuY3VycmVudDtpZighT3x8Ty5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBBPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7YnV0dG9uOnd9KSksVz1uZXcgVWludDhBcnJheSgxK0EubGVuZ3RoKTtXWzBdPVE3LFcuc2V0KEEsMSksTy5zZW5kKFcpfSxbeSxOXSksWTA9VCgodyk9PntpZighTnVtYmVyLmlzRmluaXRlKHcpfHx3PT09MClyZXR1cm47aWYoeSl7Qj8uKHcpO3JldHVybn1sZXQgTz1VMS5jdXJyZW50O2lmKCFPfHxPLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtkZWx0YTp3fSkpLFc9bmV3IFVpbnQ4QXJyYXkoMStBLmxlbmd0aCk7V1swXT1LNyxXLnNldChBLDEpLE8uc2VuZChXKX0sW3ksQl0pLHEwPVQoKHcsTyxBLFcpPT57aWYoIU51bWJlci5pc0Zpbml0ZSh3KXx8IU51bWJlci5pc0Zpbml0ZShPKXx8dz09PTAmJk89PT0wKXJldHVybjtsZXQgbz1pMChWMS5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLGg9ZDgobyx3LE8pLEcxPW4wKG8sQSxXKSxDMT17ZHg6aC5keCxkeTpoLmR5LHg6RzEueCx5OkcxLnl9O2lmKHkpe1U/LihDMSk7cmV0dXJufWxldCBjMT1VMS5jdXJyZW50O2lmKCFjMXx8YzEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgRjA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEMxKSksJDA9bmV3IFVpbnQ4QXJyYXkoMStGMC5sZW5ndGgpOyQwWzBdPVo3LCQwLnNldChGMCwxKSxjMS5zZW5kKCQwKX0sW3ksVV0pLE0xPVQoKHcpPT57bGV0IE89aTAoVjEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixBPW4wKE8sdy54MSx3LnkxKSxXPW4wKE8sdy54Mix3LnkyKSxvPXt0eXBlOncudHlwZSx4MTpBLngseTE6QS55LHgyOlcueCx5MjpXLnl9O2lmKHkpe0c/LihvKTtyZXR1cm59bGV0IGg9VTEuY3VycmVudDtpZighaHx8aC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBHMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkobykpLEMxPW5ldyBVaW50OEFycmF5KDErRzEubGVuZ3RoKTtDMVswXT1KNyxDMS5zZXQoRzEsMSksaC5zZW5kKEMxKX0sW3ksR10pO2IoKCk9PntpZih5KXJldHVybjtsZXQgdz1RPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixPPW5ldyBXZWJTb2NrZXQodyk7Ty5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsVTEuY3VycmVudD1PLE8ub25tZXNzYWdlPShHMSk9PntpZighKEcxLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCBDMT1uZXcgVWludDhBcnJheShHMS5kYXRhKTtpZihDMS5sZW5ndGg8MXx8QzFbMF0hPT0xMzApcmV0dXJuO3RyeXtkKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKEMxLnN1YmFycmF5KDEpKSkpfWNhdGNoe319LE8ub25vcGVuPSgpPT57aWYoIXgpQTEoITApO2cobnVsbCl9LE8ub25jbG9zZT0oKT0+e0ExKCExKX0sTy5vbmVycm9yPSgpPT57ZygiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksQTEoITEpfTtsZXQgQT1uZXcgQWJvcnRDb250cm9sbGVyLFc9c2V0SW50ZXJ2YWwoKCk9PntsKFoxLmN1cnJlbnQpLFoxLmN1cnJlbnQ9MH0sMTAwMCksbz0hMSxoPXg/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIW8pZygiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApO2lmKCF4KShhc3luYygpPT57dHJ5e2xldCBDMT0oYXdhaXQgZmV0Y2goZSx7c2lnbmFsOkEuc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFDMSlyZXR1cm47bGV0IGMxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgiLS1mcmFtZSIpO3doaWxlKCEwKXtsZXR7ZG9uZTpGMCx2YWx1ZTokMH09YXdhaXQgQzEucmVhZCgpO2lmKEYwKWJyZWFrO2lmKCQwKWZvcihsZXQgRDA9MDtEMDw9JDAubGVuZ3RoLWMxLmxlbmd0aDtEMCsrKXtsZXQgaDM9ITA7Zm9yKGxldCBoMj0wO2gyPGMxLmxlbmd0aDtoMisrKWlmKCQwW0QwK2gyXSE9PWMxW2gyXSl7aDM9ITE7YnJlYWt9aWYoaDMpe2lmKFoxLmN1cnJlbnQrKywhbyl7aWYobz0hMCxoKWNsZWFyVGltZW91dChoKX19fX19Y2F0Y2h7fX0pKCk7cmV0dXJuKCk9PntpZihBLmFib3J0KCksY2xlYXJJbnRlcnZhbChXKSxoKWNsZWFyVGltZW91dChoKTtPLmNsb3NlKCksVTEuY3VycmVudD1udWxsfX0sWyQsZSx5LGQsUSx4XSk7bGV0IGQxPUkoMCk7YigoKT0+e2lmKCF5KXJldHVybjtsZXQgdz0yMDAwLE89KCk9PntsZXQgbz1kMS5jdXJyZW50O2lmKCFvfHwhTzEuY3VycmVudClyZXR1cm47aWYoRGF0ZS5ub3coKS1vPncpQTEoITEpfSxBPXNldEludGVydmFsKCgpPT57bChaMS5jdXJyZW50KSxaMS5jdXJyZW50PTAsTygpfSwxMDAwKSxXPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilPKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixXKSwoKT0+e2NsZWFySW50ZXJ2YWwoQSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsVyl9fSxbeV0pO2xldCBDMD1UKCgpPT57aWYoeClyZXR1cm4gZi5jdXJyZW50O3JldHVybiB5P3UuY3VycmVudDpZMS5jdXJyZW50fSxbeSx4XSkseDE9VCgoKT0+e3JldHVybiBjLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9DMCgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW0MwXSkscjE9VCgodyxPKT0+e2xldCBBPXgxKCk7aWYoIUEpcmV0dXJuO2xldCBXPShPLmNsaWVudFgtQS5sZWZ0KS9BLndpZHRoLG89KE8uY2xpZW50WS1BLnRvcCkvQS5oZWlnaHQ7dzEoe3R5cGU6dyx4OlcseTpvfSl9LFt4MSx3MV0pLEcwPVQoKHcsTyk9PntsZXQgVz14MSgpPy5oZWlnaHR8fDEsbz1DMih3LE8sVyk7aWYobz09PW51bGwpcmV0dXJuITE7cmV0dXJuIFkwKG8pLCEwfSxbeDEsWTBdKSxFMT1JKCExKSxJMT1JKCExKSx0MT1JKCExKSxWMD1JKHtkeDowLGR5OjB9KSxvMT1JKCExKSxbQjAsdzBdPU0oITEpLFcwPUkoe3g6MC41LHk6MC41fSksW2ExLFIxXT1NKG51bGwpO2IoKCk9PntsZXQgdz0oQSk9PntpZihBLmtleT09PSJBbHQiKXcwKCEwKX0sTz0oQSk9PntpZihBLmtleT09PSJBbHQiKXtpZih3MCghMSksIUkxLmN1cnJlbnQpUjEobnVsbCl9fTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHcpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsTyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixPKX19LFtdKSxiKCgpPT57aWYoQjAmJiFJMS5jdXJyZW50KXtsZXQgdz1XMC5jdXJyZW50O1IxKHt4MTp3LngseTE6dy55LHgyOjEtdy54LHkyOjEtdy55fSl9ZWxzZSBpZighQjAmJiFJMS5jdXJyZW50KVIxKG51bGwpfSxbQjBdKTtsZXQgUzE9SShudWxsKSxnMT1JKCExKSxpMT1JKDApLE4wPVQoKHcsTyk9PntnMS5jdXJyZW50PSEwO2xldCBBPVMxLmN1cnJlbnQ7aWYoQSljYW5jZWxBbmltYXRpb25GcmFtZShpMS5jdXJyZW50KSxpMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0Euc3R5bGUubGVmdD1gJHt3KjEwMH0lYCxBLnN0eWxlLnRvcD1gJHtPKjEwMH0lYCxBLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn0pfSxbXSksUDA9VCgodyxPKT0+e2lmKCFnMS5jdXJyZW50KXJldHVybjtsZXQgQT1TMS5jdXJyZW50O2lmKEEpY2FuY2VsQW5pbWF0aW9uRnJhbWUoaTEuY3VycmVudCksaTEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntBLnN0eWxlLmxlZnQ9YCR7dyoxMDB9JWAsQS5zdHlsZS50b3A9YCR7TyoxMDB9JWB9KX0sW10pLGUxPVQoKCk9PntnMS5jdXJyZW50PSExO2xldCB3PVMxLmN1cnJlbnQ7aWYodyljYW5jZWxBbmltYXRpb25GcmFtZShpMS5jdXJyZW50KSx3LnN0eWxlLmRpc3BsYXk9Im5vbmUifSxbXSksSjE9VCgodyk9PntpZihnMS5jdXJyZW50fHxJMS5jdXJyZW50KXJldHVybiExO2xldCBPPXgxKCk7aWYoIU8pcmV0dXJuITE7bGV0IEE9czUody5kZWx0YVgsdy5kZWx0YU1vZGUsTy53aWR0aCksVz1zNSh3LmRlbHRhWSx3LmRlbHRhTW9kZSxPLmhlaWdodCk7aWYoQT09PTAmJlc9PT0wKXJldHVybiExO2xldCBvPU1hdGgubWluKE1hdGgubWF4KCh3LmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLDApLDEpLGg9TWF0aC5taW4oTWF0aC5tYXgoKHcuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQsMCksMSk7cmV0dXJuIHEwKEEvTy53aWR0aCxXL08uaGVpZ2h0LG8saCksITB9LFt4MSxxMF0pO2IoKCk9PntsZXQgdz1RMS5jdXJyZW50O2lmKCF3KXJldHVybjtsZXQgTz0oQSk9PntpZighKFY/RzAoQS5kZWx0YVksQS5kZWx0YU1vZGUpOkoxKEEpKSlyZXR1cm47QS5wcmV2ZW50RGVmYXVsdCgpLEEuc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiB3LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixPLHtwYXNzaXZlOiExfSksKCk9PncucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLE8pfSxbVixHMCxKMV0pO2xldCBQPUkoMCkscD1JKG51bGwpLHQ9VCgoKT0+e2xldCB3PURhdGUubm93KCksTz13LVAuY3VycmVudDtpZihQLmN1cnJlbnQ9dyxPPDMwMCl7aWYocC5jdXJyZW50KWNsZWFyVGltZW91dChwLmN1cnJlbnQpLHAuY3VycmVudD1udWxsO2lmKFkpWSgpO2Vsc2UgajEoImFwcF9zd2l0Y2hlciIpfWVsc2UgcC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIGoxKCJob21lIik7cC5jdXJyZW50PW51bGx9LDMwMCl9LFtqMSxZXSksSDE9aTAocyksQjE9SDEuZGlzcGxheUNvbmZpZyxpPSgoKT0+e2lmKCFCMXx8IUwxKXJldHVybiBudWxsO2lmKEwxLndpZHRoPT09MHx8TDEuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgdz1NYXRoLm1pbihMMS53aWR0aC9CMS53aWR0aCxMMS5oZWlnaHQvQjEuaGVpZ2h0KTtyZXR1cm57d2lkdGg6QjEud2lkdGgqdyxoZWlnaHQ6QjEuaGVpZ2h0Knd9fSkoKSx5MT1IMS5yb3RhdGlvbkRlZ3JlZXMsaDE9SDEubmVlZHNDc3NSb3RhdGlvbiYmTWF0aC5hYnMoeTEpPT09OTAsbDE9WixaMD17cG9zaXRpb246ImFic29sdXRlIix0b3A6IjUwJSIsbGVmdDoiNTAlIix3aWR0aDpoMSYmaT9gJHtpLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpoMSYmaT9gJHtpLndpZHRofXB4YDoiMTAwJSIsdHJhbnNmb3JtOmB0cmFuc2xhdGUoLTUwJSwgLTUwJSkke3kxPT09MD8iIjpgIHJvdGF0ZSgke3kxfWRlZylgfWAsdHJhbnNmb3JtT3JpZ2luOiJjZW50ZXIgY2VudGVyIixjdXJzb3I6bzgsZGlzcGxheToiYmxvY2siLHVzZXJTZWxlY3Q6Im5vbmUiLFdlYmtpdFVzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIiwuLi5aLC4uLnkxPT09MD97fTp7Ym9yZGVyUmFkaXVzOjAsY29ybmVyU2hhcGU6dm9pZCAwfX0sejA9ey4uLlowLHRyYW5zZm9ybTpgJHtaMC50cmFuc2Zvcm0/PyIifSBzY2FsZSgke2U0fSlgfTtyZXR1cm4gSygiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLkg/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLkp9LGNsYXNzTmFtZTpYLGNoaWxkcmVuOltLKCJkaXYiLHtyZWY6ejEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46SygiZGl2Iix7cmVmOmMsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6aT9gJHtpLndpZHRofXB4YDoiMTAwJSIsaGVpZ2h0Omk/YCR7aS5oZWlnaHR9cHhgOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIixib3JkZXJSYWRpdXM6bDE/LmJvcmRlclJhZGl1cyxjb3JuZXJTaGFwZTpsMT8uY29ybmVyU2hhcGV9LGNoaWxkcmVuOlt4P0soImNhbnZhcyIse3JlZjpmLHN0eWxlOnowfSk6SygiaW1nIix7cmVmOlkxLHNyYzp5P3ZvaWQgMDplLGRyYWdnYWJsZTohMSxvbkxvYWQ6KHcpPT57bGV0IE89dy5jdXJyZW50VGFyZ2V0O2lmKE8ubmF0dXJhbFdpZHRoPjAmJk8ubmF0dXJhbEhlaWdodD4wKWQoe3dpZHRoOk8ubmF0dXJhbFdpZHRoLGhlaWdodDpPLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6eT97ZGlzcGxheToibm9uZSJ9OlowfSkseSYmIXgmJksoImltZyIse3JlZjp1LGRyYWdnYWJsZTohMSxvbkxvYWQ6KHcpPT57bGV0IE89dy5jdXJyZW50VGFyZ2V0O2lmKE8ubmF0dXJhbFdpZHRoPjAmJk8ubmF0dXJhbEhlaWdodD4wKWQoe3dpZHRoOk8ubmF0dXJhbFdpZHRoLGhlaWdodDpPLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6WjB9KSxLKCJkaXYiLHtyZWY6UTEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6bzgsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjoodyk9Pnt3LnByZXZlbnREZWZhdWx0KCk7bGV0IE89eDEoKTtpZighTylyZXR1cm47bGV0IEE9KHcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsVz0ody5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZih3LmFsdEtleSl7STEuY3VycmVudD0hMCx0MS5jdXJyZW50PXcuc2hpZnRLZXk7bGV0IGg9e3gxOkEseTE6Vyx4MjoxLUEseTI6MS1XfTtWMC5jdXJyZW50PXtkeDoxLUEtQSxkeToxLVctV30sUjEoaCksTTEoe3R5cGU6ImJlZ2luIiwuLi5ofSk7cmV0dXJufU4wKEEsVyk7bGV0IG89aTUoVyk7aWYobyE9PXZvaWQgMClFMS5jdXJyZW50PSEwLHcxKHt0eXBlOiJiZWdpbiIseDpBLHk6VyxlZGdlOm99KTtlbHNlIEUxLmN1cnJlbnQ9ITEscjEoImJlZ2luIix3KX0sb25Nb3VzZU1vdmU6KHcpPT57bGV0IE89eDEoKTtpZighTylyZXR1cm47bGV0IEE9KHcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsVz0ody5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihXMC5jdXJyZW50PXt4OkEseTpXfSx3LmJ1dHRvbnM9PT0wKXtpZih3LmFsdEtleSlSMSh7eDE6QSx5MTpXLHgyOjEtQSx5MjoxLVd9KTtyZXR1cm59aWYoSTEuY3VycmVudCl7bGV0IG87aWYodDEuY3VycmVudCl7bGV0IGg9VjAuY3VycmVudDtvPXt4MTpBLHkxOlcseDI6QStoLmR4LHkyOlcraC5keX19ZWxzZSBvPXt4MTpBLHkxOlcseDI6MS1BLHkyOjEtV307UjEobyksTTEoe3R5cGU6Im1vdmUiLC4uLm99KTtyZXR1cm59aWYoUDAoQSxXKSxFMS5jdXJyZW50KXcxKHt0eXBlOiJtb3ZlIix4OkEseTpXLGVkZ2U6cjB9KTtlbHNlIHIxKCJtb3ZlIix3KX0sb25Nb3VzZVVwOih3KT0+e2lmKEkxLmN1cnJlbnQpe2xldCBPPXgxKCk7aWYoTyl7bGV0IEE9KHcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsVz0ody5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZih0MS5jdXJyZW50KXtsZXQgbz1WMC5jdXJyZW50O00xKHt0eXBlOiJlbmQiLHgxOkEseTE6Vyx4MjpBK28uZHgseTI6VytvLmR5fSl9ZWxzZSBNMSh7dHlwZToiZW5kIix4MTpBLHkxOlcseDI6MS1BLHkyOjEtV30pfWlmKEkxLmN1cnJlbnQ9ITEsIXcuYWx0S2V5KVIxKG51bGwpO3JldHVybn1pZihlMSgpLEUxLmN1cnJlbnQpe2xldCBPPXgxKCk7aWYoTyl7bGV0IEE9KHcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsVz0ody5jbGllbnRZLU8udG9wKS9PLmhlaWdodDt3MSh7dHlwZToiZW5kIix4OkEseTpXLGVkZ2U6cjB9KX1FMS5jdXJyZW50PSExO3JldHVybn1yMSgiZW5kIix3KX0sb25Nb3VzZUxlYXZlOih3KT0+e2lmKEkxLmN1cnJlbnQpe2lmKGExKU0xKHt0eXBlOiJlbmQiLC4uLmExfSk7STEuY3VycmVudD0hMSxSMShudWxsKTtyZXR1cm59aWYoZTEoKSxFMS5jdXJyZW50KXtsZXQgTz14MSgpO2lmKE8pe2xldCBBPSh3LmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLFc9KHcuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7dzEoe3R5cGU6ImVuZCIseDpBLHk6VyxlZGdlOnIwfSl9RTEuY3VycmVudD0hMTtyZXR1cm59aWYody5idXR0b25zPjApcjEoImVuZCIsdyk7UjEobnVsbCl9LG9uVG91Y2hTdGFydDoodyk9Pnt3LnByZXZlbnREZWZhdWx0KCk7bGV0IE89eDEoKTtpZighTylyZXR1cm47aWYody50b3VjaGVzLmxlbmd0aD49Mil7ZTEoKTtsZXQgRzE9dy50b3VjaGVzWzBdLEMxPXcudG91Y2hlc1sxXSxjMT17eDE6KEcxLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOihHMS5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjooQzEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTI6KEMxLmNsaWVudFktTy50b3ApL08uaGVpZ2h0fTtpZighbzEuY3VycmVudCYmIUUxLmN1cnJlbnQpdzEoe3R5cGU6ImVuZCIseDpjMS54MSx5OmMxLnkxfSk7bzEuY3VycmVudD0hMCxJMS5jdXJyZW50PSEwLEUxLmN1cnJlbnQ9ITEsUjEoYzEpLE0xKHt0eXBlOiJiZWdpbiIsLi4uYzF9KTtyZXR1cm59bGV0IEE9dy50b3VjaGVzWzBdO2lmKCFBKXJldHVybjtsZXQgVz0oQS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxvPShBLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O04wKFcsbyk7bGV0IGg9aTUobyk7aWYoaCE9PXZvaWQgMClFMS5jdXJyZW50PSEwLHcxKHt0eXBlOiJiZWdpbiIseDpXLHk6byxlZGdlOmh9KTtlbHNlIEUxLmN1cnJlbnQ9ITEsdzEoe3R5cGU6ImJlZ2luIix4OlcseTpvfSl9LG9uVG91Y2hNb3ZlOih3KT0+e3cucHJldmVudERlZmF1bHQoKTtsZXQgTz14MSgpO2lmKCFPKXJldHVybjtpZihvMS5jdXJyZW50JiZ3LnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgaD13LnRvdWNoZXNbMF0sRzE9dy50b3VjaGVzWzFdLEMxPXt4MTooaC5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx5MTooaC5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjooRzEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTI6KEcxLmNsaWVudFktTy50b3ApL08uaGVpZ2h0fTtSMShDMSksTTEoe3R5cGU6Im1vdmUiLC4uLkMxfSk7cmV0dXJufWxldCBBPXcudG91Y2hlc1swXTtpZighQSlyZXR1cm47bGV0IFc9KEEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsbz0oQS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihQMChXLG8pLEUxLmN1cnJlbnQpdzEoe3R5cGU6Im1vdmUiLHg6Vyx5Om8sZWRnZTpyMH0pO2Vsc2UgdzEoe3R5cGU6Im1vdmUiLHg6Vyx5Om99KX0sb25Ub3VjaEVuZDoodyk9Pnt3LnByZXZlbnREZWZhdWx0KCk7bGV0IE89eDEoKTtpZighTylyZXR1cm47aWYobzEuY3VycmVudCl7aWYody50b3VjaGVzLmxlbmd0aDwyKXtsZXQgaD13LmNoYW5nZWRUb3VjaGVzWzBdLEcxPWExO2lmKGgmJkcxKU0xKHt0eXBlOiJlbmQiLHgxOihoLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOihoLmNsaWVudFktTy50b3ApL08uaGVpZ2h0LHgyOkcxLngyLHkyOkcxLnkyfSk7ZWxzZSBpZihHMSlNMSh7dHlwZToiZW5kIiwuLi5HMX0pO28xLmN1cnJlbnQ9ITEsSTEuY3VycmVudD0hMSxSMShudWxsKX1yZXR1cm59bGV0IEE9dy5jaGFuZ2VkVG91Y2hlc1swXTtpZighQSlyZXR1cm47bGV0IFc9KEEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsbz0oQS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihlMSgpLEUxLmN1cnJlbnQpdzEoe3R5cGU6ImVuZCIseDpXLHk6byxlZGdlOnIwfSksRTEuY3VycmVudD0hMTtlbHNlIHcxKHt0eXBlOiJlbmQiLHg6Vyx5Om99KX19KSxLKCJkaXYiLHtyZWY6UzEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxhMSYmSygkMSx7Y2hpbGRyZW46W0soImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOmE4KGExLngxLGExLnkxKX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOmE4KGExLngyLGExLnkyKX0pXX0pLCFLMSYmIW0mJksoImRpdiIse3N0eWxlOnsuLi5pOCwuLi5afHx7fX0sY2hpbGRyZW46Sygic3BhbiIse3N0eWxlOntjb2xvcjoiIzg4OCIsZm9udFNpemU6MTR9LGNoaWxkcmVuOiJDb25uZWN0aW5nLi4uIn0pfSksbSYmSygiZGl2Iix7c3R5bGU6aTgsY2hpbGRyZW46Sygic3BhbiIse3N0eWxlOntjb2xvcjoiI2Y0NCIsZm9udFNpemU6MTQscGFkZGluZzoyMCx0ZXh0QWxpZ246ImNlbnRlciJ9LGNoaWxkcmVuOm19KX0pLFAxJiZLKCJkaXYiLHtzdHlsZTpYNyxjaGlsZHJlbjpLKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZmJiZjI0Iixmb250U2l6ZToxMyxmb250RmFtaWx5OiJtb25vc3BhY2UifSxjaGlsZHJlbjoiU2xvdyBjb25uZWN0aW9uIn0pfSldfSl9KSwhSCYmSygiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLHBhZGRpbmc6IjRweCA4cHgiLGJvcmRlclRvcDoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazp0LHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxLKCJzcGFuIix7c3R5bGU6e2NvbG9yOmE+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W18mJksoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpfPT09Imdvb2QiPyIjNGFkZTgwIjpfPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLGEsIiBmcHMiXX0pXX0pXX0pfXZhciBYNz17cG9zaXRpb246ImFic29sdXRlIix0b3A6OCxsZWZ0OiI1MCUiLHRyYW5zZm9ybToidHJhbnNsYXRlWCgtNTAlKSIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjcpIixib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI0cHggMTJweCIscG9pbnRlckV2ZW50czoibm9uZSJ9LGk4PXtwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuOCkifSxuOD0yMDtmdW5jdGlvbiBhOCgkLFEpe3JldHVybntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6YCR7JCoxMDB9JWAsdG9wOmAke1EqMTAwfSVgLHdpZHRoOm44LGhlaWdodDpuOCxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSIsYm9yZGVyOiIxLjI1cHggc29saWQgcmdiYSgwLDAsMCwwLjU1KSIsYm94U2hhZG93OiIwIDFweCAzcHggcmdiYSgwLDAsMCwwLjQ1KSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX1mdW5jdGlvbiBPMCgkKXtpZighJClyZXR1cm4iaXBob25lIjtsZXQgUT0kLnRvTG93ZXJDYXNlKCk7aWYoUS5pbmNsdWRlcygiaXBhZCIpKXJldHVybiJpcGFkIjtpZihRLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiJ3YXRjaCI7aWYoUS5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuInZpc2lvbiI7cmV0dXJuImlwaG9uZSJ9dmFyIFQxPXtpcGhvbmU6e3dpZHRoOjQyNyxoZWlnaHQ6ODgxLGJlemVsWDoxOCxiZXplbFk6MTgsaW5uZXJSYWRpdXM6NTV9LGlwYWQ6e3dpZHRoOjQzMCxoZWlnaHQ6NjA1LGJlemVsWDoxNixiZXplbFk6MTYsaW5uZXJSYWRpdXM6MTJ9LHdhdGNoOnt3aWR0aDoyNzQsaGVpZ2h0OjMyMixiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjc5fSx2aXNpb246e3dpZHRoOjY0MCxoZWlnaHQ6NDAwLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6MzJ9fSxwSj1UMS5pcGhvbmUud2lkdGgsdUo9VDEuaXBob25lLmhlaWdodCxsSj1UMS5pcGhvbmUuYmV6ZWxYLGRKPVQxLmlwaG9uZS5iZXplbFksY0o9VDEuaXBob25lLmlubmVyUmFkaXVzLHM4PXsiaVBob25lIDE3IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE3IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTciOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIEFpciI6e3dpZHRoOjEyNjAsaGVpZ2h0OjI3MzZ9LCJpUGhvbmUgMTYgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTYgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNiBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNiI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTZlIjp7d2lkdGg6MTE3MCxoZWlnaHQ6MjUzMn0sImlQaG9uZSAxNSBQcm8gTWF4Ijp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSBQcm8iOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE1IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQYWQgUHJvIDEzLWluY2ggKE01KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNSkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBQcm8gMTMtaW5jaCAoTTQpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE00KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIEFpciAxMy1pbmNoIChNMykiOnt3aWR0aDoyMDQ4LGhlaWdodDoyNzMyfSwiaVBhZCBBaXIgMTEtaW5jaCAoTTMpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgKEExNikiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCBtaW5pIChBMTcgUHJvKSI6e3dpZHRoOjE0ODgsaGVpZ2h0OjIyNjZ9LCJBcHBsZSBXYXRjaCBVbHRyYSAzICg0OW1tKSI6e3dpZHRoOjQyMixoZWlnaHQ6NTE0fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMiAoNDltbSkiOnt3aWR0aDo0MTAsaGVpZ2h0OjUwMn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNFIDMgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAzICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgV2F0Y2ggU0UgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFZpc2lvbiBQcm8iOnt3aWR0aDoxOTIwLGhlaWdodDoxMDgwfX07ZnVuY3Rpb24gZTIoJCxRKXtsZXQgSj0kJiYkLndpZHRoPjAmJiQuaGVpZ2h0PjA/JDpRLFo9bzAoSik7aWYoWilyZXR1cm5gJHtaLndpZHRofSAvICR7Wi5oZWlnaHR9YDtyZXR1cm5gJHtUMS5pcGhvbmUud2lkdGgtMipUMS5pcGhvbmUuYmV6ZWxYfSAvICR7VDEuaXBob25lLmhlaWdodC0yKlQxLmlwaG9uZS5iZXplbFl9YH1mdW5jdGlvbiBhMCgkPSJpcGhvbmUiLFEpe2xldCBKPVE/czhbUV06bnVsbDtpZihKKXJldHVybiBKO2xldCBaPVQxWyRdO3JldHVybnt3aWR0aDpaLndpZHRoLTIqWi5iZXplbFgsaGVpZ2h0OlouaGVpZ2h0LTIqWi5iZXplbFl9fWZ1bmN0aW9uIHMwKCQ9ImlwaG9uZSIsUSl7aWYoeTAoUSkpc3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDcyMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2RlZmF1bHQ6cmV0dXJuIDYyMH1zd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNDAwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7ZGVmYXVsdDpyZXR1cm4gMzIwfX1mdW5jdGlvbiAkNSgkPSJpcGhvbmUiLFEpe2xldCBKPVQxWyRdLFo9Si53aWR0aC0yKkouYmV6ZWxYLFg9Si5oZWlnaHQtMipKLmJlemVsWTtpZihaPFgmJnkwKFEpKXJldHVybmAke0ouaW5uZXJSYWRpdXMvWCoxMDB9JSAvICR7Si5pbm5lclJhZGl1cy9aKjEwMH0lYDtyZXR1cm5gJHtKLmlubmVyUmFkaXVzL1oqMTAwfSUgLyAke0ouaW5uZXJSYWRpdXMvWCoxMDB9JWB9ZnVuY3Rpb24gdDgoJCl7bGV0IFE9VDFbJC50eXBlXSxKPVEud2lkdGgtMipRLmJlemVsWCxaPVEuaGVpZ2h0LTIqUS5iZXplbFksWCxZO2lmKEo8WiYmeTAoJC5jb25maWc/P251bGwpKVg9US5pbm5lclJhZGl1cy9aLFk9US5pbm5lclJhZGl1cy9KO2Vsc2UgWD1RLmlubmVyUmFkaXVzL0osWT1RLmlubmVyUmFkaXVzL1o7bGV0IHE9WCokLmNvbnRhaW5lcldpZHRoLEc9WSokLmNvbnRhaW5lckhlaWdodCxOPU1hdGguc3FydChNYXRoLm1heChxKkcsMCkpO3JldHVybntyeDpxLHJ5Okcsckdlb206Tn19dmFyIHE3PTEzLEc3PTYyO2Z1bmN0aW9uICQzKCQpe2xldHtjb250YWluZXJXaWR0aDpRLGNvbnRhaW5lckhlaWdodDpKfT0kLFo9KEgpPT5ILnRvRml4ZWQoMyksWD0oSCxrKT0+e2xldCBfPWssUz1rLEU9RzcvMiooTWF0aC5QSS8xODApLHk9MjI1Kk1hdGguUEkvMTgwLHg9eStFLFkxPXktRSxmPV8rSCpNYXRoLmNvcyh4KSx1PVMrSCpNYXRoLnNpbih4KSxjPV8rSCpNYXRoLmNvcyhZMSksUTE9UytIKk1hdGguc2luKFkxKSxVMT1gTSAke1ooZil9ICR7Wih1KX0gQSAke1ooSCl9ICR7WihIKX0gMCAwIDEgJHtaKGMpfSAke1ooUTEpfWAsSzE9YE0gJHtaKGMpfSAke1ooUTEpfSBBICR7WihIKX0gJHtaKEgpfSAwIDAgMCAke1ooZil9ICR7Wih1KX1gO3JldHVybntkOlUxLGRGaWxsOksxfX07aWYoIShRPjApfHwhKEo+MCkpe2xldCBIPXE3LGs9TWF0aC5jZWlsKEgrMTQpLHtkOl8sZEZpbGw6U309WChILGspO3JldHVybntkOl8sZEZpbGw6Uyx2aWV3Qm94U2l6ZTprfX1sZXR7ckdlb206WX09dDgoJCkscT1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKFEsSikpKSxHPVkqMC4zNCtxLE49TWF0aC5taW4oUSxKKSxCPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLE4qMC4wNTIpKTtHPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLEcsQikpO2xldCBMPU1hdGgubWF4KDI2LE1hdGguY2VpbChHKzEzKSkse2Q6RixkRmlsbDp6fT1YKEcsTCk7cmV0dXJue2Q6RixkRmlsbDp6LHZpZXdCb3hTaXplOkx9fWZ1bmN0aW9uIFE1KHt0eXBlOiQ9ImlwaG9uZSIsc3RyZWFtaW5nOlE9ITF9KXtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gSyhCNyx7c3RyZWFtaW5nOlF9KTtjYXNlIndhdGNoIjpyZXR1cm4gSyhONyx7c3RyZWFtaW5nOlF9KTtjYXNlInZpc2lvbiI6cmV0dXJuIEsoVTcse3N0cmVhbWluZzpRfSk7ZGVmYXVsdDpyZXR1cm4gSyhWNyx7c3RyZWFtaW5nOlF9KX19ZnVuY3Rpb24gVjcoe3N0cmVhbWluZzokPSExfSl7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6IjAgMCA0MjcgODgxIixzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpbSygiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIwIix4OiItMC4xNjY5OTIiLHk6IjAuMTY2NTA0Iix3aWR0aDoiNDI3IixoZWlnaHQ6Ijg4MC42NjciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIxIix4OiI2LjMzMjM2Iix5OiI2LjMzMzgyIix3aWR0aDoiNDE0IixoZWlnaHQ6Ijg2OCIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIzLjgzMjY4Iix5OiIzLjgzMzY2Iix3aWR0aDoiNDE5IixoZWlnaHQ6Ijg3MyIscng6IjY2LjE2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQuMzMzMzMifSksSygicmVjdCIse3g6IjAuODMzMzMzIix5OiIwLjgzMzMzMyIsd2lkdGg6IjQyNSIsaGVpZ2h0OiI4NzkiLHJ4OiI2OS4xNjY3IixzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pLEsoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMCkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiIxLjY2NjAyIix5OiIyIix3aWR0aDoiNDIzLjMzMyIsaGVpZ2h0OiI4NzciLHJ4OiI2OC42NjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pfSksSygiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIxKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjcuMzMyNjgiLHk6IjcuMzMzNjYiLHdpZHRoOiI0MTIiLGhlaWdodDoiODY2IixyeDoiNjIuNjY2NyIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjY2NjcifSl9KSxLKCJyZWN0Iix7eDoiMTUxLjY2NiIseToiMzEuNjY3Iix3aWR0aDoiMTIzLjMzMyIsaGVpZ2h0OiIzNiIscng6IjE4IixmaWxsOiJibGFjayIsc3R5bGU6e29wYWNpdHk6JD8wOjEsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIEI3KHtzdHJlYW1pbmc6JD0hMX0pe2xldCBRPVQxLmlwYWQud2lkdGgsSj1UMS5pcGFkLmhlaWdodCxaPTMwLFg9MjY7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke1F9ICR7Sn1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6USxoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLEsoImZpbHRlciIse2lkOiJpcGFkLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpRLTEwLGhlaWdodDpKLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiYmx1ciJ9KV19KV19KSxLKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOlEtNyxoZWlnaHQ6Si03LHJ4OjI2LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6US0xLjY2NixoZWlnaHQ6Si0xLjY2NixyeDozMCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MCkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6US0zLGhlaWdodDpKLTMscng6Mjksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxLKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MSkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpRLTEyLGhlaWdodDpKLTEyLHJ4OjI0LHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksSygiY2lyY2xlIix7Y3g6US8yLGN5OlQxLmlwYWQuYmV6ZWxZLzIrMSxyOiIzIixmaWxsOiIjMWExYTFhIixzdHlsZTp7b3BhY2l0eTokPzA6MC44LHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KSxLKCJyZWN0Iix7eDooUS0xMjApLzIseTpKLVQxLmlwYWQuYmV6ZWxZLzItMi41LHdpZHRoOiIxMjAiLGhlaWdodDoiNSIscng6IjIuNSIsZmlsbDoid2hpdGUiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjM1LG1peEJsZW5kTW9kZToiZGlmZmVyZW5jZSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIE43KHtzdHJlYW1pbmc6JD0hMX0pe2xldCBRPVQxLndhdGNoLndpZHRoLEo9VDEud2F0Y2guaGVpZ2h0LFo9ODgsWD04MixZPTgscT0zNixHPUovMi0xOC0xNixOPTIyLEI9Si8yLTExKzE2O3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6InZpc2libGUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46SygiZmlsdGVyIix7aWQ6IndhdGNoLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpRKzEyLGhlaWdodDpKLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSl9KSxLKCJyZWN0Iix7eDpRLTIseTpHLHdpZHRoOjgsaGVpZ2h0OjM2LHJ4OiIzIixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxIn0pLEsoInJlY3QiLHt4OlEtMSx5OkIsd2lkdGg6NixoZWlnaHQ6MjIscng6IjIuNSIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMC44In0pLEsoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6US03LGhlaWdodDpKLTcscng6ODIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMy41In0pLEsoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOlEtMS42NjYsaGVpZ2h0OkotMS42NjYscng6ODgsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksSygiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3dhdGNoLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpRLTMsaGVpZ2h0OkotMyxyeDo4NyxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pXX0pfWZ1bmN0aW9uIFU3KHtzdHJlYW1pbmc6JD0hMX0pe2xldCBRPVQxLnZpc2lvbi53aWR0aCxKPVQxLnZpc2lvbi5oZWlnaHQsWj00MCxYPTM0O3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpbSygiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6USxoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLEsoImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOlEtMTAsaGVpZ2h0OkotMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMyIscmVzdWx0OiJibHVyIn0pXX0pLEsoImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNTU1NTU4IixzdG9wT3BhY2l0eToiMC4zIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzNhM2EzZCIsc3RvcE9wYWNpdHk6IjAuMSJ9KV19KV19KSxLKCJyZWN0Iix7eDoiMCIseToiMCIsd2lkdGg6USxoZWlnaHQ6SixyeDo0MCxmaWxsOiJ1cmwoI3Zpc2lvbi1nbGFzcykifSksSygicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpRLTcsaGVpZ2h0OkotNyxyeDozNCxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzIn0pLEsoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOlEtMS42NjYsaGVpZ2h0OkotMS42NjYscng6NDAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksSygiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MCkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6US0zLGhlaWdodDpKLTMscng6Mzksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxLKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cxKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOlEtMTIsaGVpZ2h0OkotMTIscng6MzIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxLKCJlbGxpcHNlIix7Y3g6US8yLGN5OkovMixyeDpRLzItMzAscnk6Si8yLTI0LHN0cm9rZToiIzRhNGE0ZCIsc3Ryb2tlV2lkdGg6IjAuNSIsb3BhY2l0eToiMC4zIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX12YXIgUTM9VTAobnVsbCk7ZnVuY3Rpb24gSjUoJCl7bGV0IFE9TDAoUTMpO2lmKCFRKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4keyR9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gUX12YXIgQzc9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm94U2hhZG93OiIwIDFweCAycHggcmdiYSgwLDAsMCwwLjIpIixtaW5XaWR0aDoyNDAsd2lkdGg6IjEwMCUifTtmdW5jdGlvbiB6Nyh7ZXhlYzokLG9uUm90YXRlOlEsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlosZGV2aWNlTmFtZTpYLGRldmljZVJ1bnRpbWU6WSxzdHJlYW1pbmc6cT0hMSxkaXNhYmxlZDpHPSExLGNoaWxkcmVuOk4sc3R5bGU6QiwuLi5VfSl7bGV0IFY9TzAoWCksTD17ZXhlYzokLG9uUm90YXRlOlEsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlosZGV2aWNlTmFtZTpYLGRldmljZVJ1bnRpbWU6WSxkZXZpY2VUeXBlOlYsc3RyZWFtaW5nOnEsZGlzYWJsZWQ6R3x8IVp8fCFxfTtyZXR1cm4gSyhRMy5Qcm92aWRlcix7dmFsdWU6TCxjaGlsZHJlbjpLKCJkaXYiLHsiZGF0YS1zaW11bGF0b3ItdG9vbGJhciI6ITAsc3R5bGU6ey4uLkM3LC4uLkJ9LC4uLlUsY2hpbGRyZW46Tn0pfSl9dmFyIEg3PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHRleHRBbGlnbjoibGVmdCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNmZmYiLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSxGNz1IMChmdW5jdGlvbih7bmFtZTpRLHN1YnRpdGxlOkosaGlkZUNoZXZyb246WixoaWRlU3VidGl0bGU6WCxzdHlsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLC4uLk59LEIpe2xldCBVPUo1KCJUaXRsZSIpLFtWLENdPU0oITEpLEw9UT8/VS5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixGPUo/PyhVLmRldmljZVJ1bnRpbWU/VS5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gSygiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOih6KT0+e0MoITApLHE/Lih6KX0sb25Nb3VzZUxlYXZlOih6KT0+e0MoITEpLEc/Lih6KX0sc3R5bGU6ey4uLkg3LGJhY2tncm91bmQ6Vj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLC4uLll9LC4uLk4sY2hpbGRyZW46W0soInNwYW4iLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZm9udFNpemU6MTIsZm9udFdlaWdodDo2MDAsY29sb3I6IiNmZmYiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbTCwhWiYmSygic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsZmxleFNocmluazowfSxjaGlsZHJlbjpLKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSwhWCYmSygic3BhbiIse3N0eWxlOntmb250U2l6ZToxMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46Rn0pXX0pfSksazc9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZmxleFNocmluazowfTtmdW5jdGlvbiBBNyh7c3R5bGU6JCwuLi5RfSl7cmV0dXJuIEsoImRpdiIse3N0eWxlOnsuLi5rNywuLi4kfSwuLi5RfSl9dmFyIE83PXtiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjEyLGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMiLHBvc2l0aW9uOiJyZWxhdGl2ZSIsb3ZlcmZsb3c6InZpc2libGUifSxLNT1IMChmdW5jdGlvbih7Zm9yY2VEaXNhYmxlZDpRLHRvb2x0aXA6SixzdHlsZTpaLGRpc2FibGVkOlgsdGl0bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6RyxvblBvaW50ZXJEb3duOk4sb25Gb2N1czpCLG9uQmx1cjpVLG9uQ2xpY2s6VixjaGlsZHJlbjpDLCJhcmlhLWxhYmVsIjpMLC4uLkZ9LHope2xldCBIPUwwKFEzKSxrPVh8fFF8fEg/LmRpc2FibGVkLFtfLFNdPU0oITEpLFtFLHldPU0oITEpLHg9SSghMSksWTE9YzAoKSxmPUo/P1k/Pyh0eXBlb2YgTD09PSJzdHJpbmciP0w6bnVsbCksdT0hIWYmJiFrJiYoX3x8RSk7cmV0dXJuIEsoImJ1dHRvbiIse3JlZjp6LHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6aywiYXJpYS1sYWJlbCI6TCwiYXJpYS1kZXNjcmliZWRieSI6Zj9ZMTp2b2lkIDAsb25Qb2ludGVyRG93bjooYyk9Pnt4LmN1cnJlbnQ9ITAsTj8uKGMpfSxvbk1vdXNlRW50ZXI6KGMpPT57UyghMCkscT8uKGMpfSxvbk1vdXNlTGVhdmU6KGMpPT57UyghMSksRz8uKGMpfSxvbkZvY3VzOihjKT0+e3koIXguY3VycmVudCksQj8uKGMpfSxvbkJsdXI6KGMpPT57eC5jdXJyZW50PSExLHkoITEpLFU/LihjKX0sb25DbGljazooYyk9PntTKCExKSx5KCExKSxjLmN1cnJlbnRUYXJnZXQuYmx1cigpLFY/LihjKX0sc3R5bGU6ey4uLk83LGNvbG9yOms/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6XyYmIWs/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6az8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5afSwuLi5GLGNoaWxkcmVuOltDLGYmJksoInNwYW4iLHtpZDpZMSxyb2xlOiJ0b29sdGlwIiwiYXJpYS1oaWRkZW4iOiF1LHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6IjUwJSIsYm90dG9tOiJjYWxjKDEwMCUgKyA4cHgpIix0cmFuc2Zvcm06YHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgke3U/MDoyfXB4KWAsb3BhY2l0eTp1PzE6MCxwb2ludGVyRXZlbnRzOiJub25lIix3aGl0ZVNwYWNlOiJub3dyYXAiLHBhZGRpbmc6IjRweCA3cHgiLGJvcmRlclJhZGl1czo2LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTIpIixmb250U2l6ZToxMSxmb250V2VpZ2h0OjUwMCxsaW5lSGVpZ2h0OjEsYm94U2hhZG93OiIwIDRweCAxNHB4IHJnYmEoMCwwLDAsMC4zMikiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xMnMgZWFzZSwgdHJhbnNmb3JtIDAuMTJzIGVhc2UiLHpJbmRleDoxMDB9LGNoaWxkcmVuOmZ9KV19KX0pO2Z1bmN0aW9uIE03KCQsUSl7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIF83KCk7aWYoUSlyZXR1cm5geGNydW4gc2ltY3RsIGxhdW5jaCAke1F9IGNvbS5hcHBsZS5zcHJpbmdib2FyZGA7cmV0dXJuInNlcnZlLXNpbSBidXR0b24gaG9tZSJ9ZnVuY3Rpb24gXzcoKXtyZXR1cm5bJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBzZXQgZnJvbnRtb3N0IHRvIHRydWUnLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gcGVyZm9ybSBhY3Rpb24gIkFYUmFpc2UiIG9mIChmaXJzdCB3aW5kb3cgd2hvc2UgbmFtZSBjb250YWlucyAid2F0Y2hPUyIpJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIGNsaWNrIG1lbnUgaXRlbSAiSG9tZSIgb2YgbWVudSAiRGV2aWNlIiBvZiBtZW51IGJhciBpdGVtICJEZXZpY2UiIG9mIG1lbnUgYmFyIDEnXS5tYXAoKFEpPT5gLWUgJyR7UX0nYCkucmVkdWNlKChRLEopPT5gJHtRfSAke0p9YCwib3Nhc2NyaXB0Iil9dmFyIFc3PUsoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMyAxMC41IDEyIDNsOSA3LjVWMjBhMSAxIDAgMCAxLTEgMWgtNXYtN2gtNnY3SDRhMSAxIDAgMCAxLTEtMXoifSl9KSxQNz1LKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCA0NCA0NCIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpLKCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixmaWxsOiJjdXJyZW50Q29sb3IiLGQ6Ik00My42ODc1IDEyLjQ2ODhWOC4yNzM0NEM0My42ODc1IDUuNzI2NTYgNDIuOTUzMSAzLjcxMDk0IDQxLjQ4NDQgMi4yMjY1NkM0MC4wMTU2IDAuNzQyMTg4IDM4IDAgMzUuNDM3NSAwSDMxLjE0ODRDMzAuNjAxNiAwIDMwLjEzMjggMC4xOTUzMTIgMjkuNzQyMiAwLjU4NTkzOEMyOS4zNTE2IDAuOTc2NTYyIDI5LjE1NjIgMS40NDUzMSAyOS4xNTYyIDEuOTkyMTlDMjkuMTU2MiAyLjUyMzQ0IDI5LjM1MTYgMi45ODQzOCAyOS43NDIyIDMuMzc1QzMwLjEzMjggMy43NjU2MiAzMC42MDE2IDMuOTYwOTQgMzEuMTQ4NCAzLjk2MDk0SDM1LjQzNzVDMzYuNzgxMiAzLjk2MDk0IDM3LjgzNTkgNC4zNDM3NSAzOC42MDE2IDUuMTA5MzhDMzkuMzUxNiA1Ljg3NSAzOS43MjY2IDYuOTI5NjkgMzkuNzI2NiA4LjI3MzQ0VjEyLjQ2ODhDMzkuNzI2NiAxMyAzOS45MjE5IDEzLjQ2MDkgNDAuMzEyNSAxMy44NTE2QzQwLjcwMzEgMTQuMjQyMiA0MS4xNzE5IDE0LjQzNzUgNDEuNzE4OCAxNC40Mzc1QzQyLjI1IDE0LjQzNzUgNDIuNzEwOSAxNC4yNDIyIDQzLjEwMTYgMTMuODUxNkM0My40OTIyIDEzLjQ2MDkgNDMuNjg3NSAxMyA0My42ODc1IDEyLjQ2ODhaTTAgMTIuNDY4OEMwIDEzIDAuMTk1MzEyIDEzLjQ2MDkgMC41ODU5MzggMTMuODUxNkMwLjk3NjU2MiAxNC4yNDIyIDEuNDM3NSAxNC40Mzc1IDEuOTY4NzUgMTQuNDM3NUMyLjUgMTQuNDM3NSAyLjk2MDk0IDE0LjI0MjIgMy4zNTE1NiAxMy44NTE2QzMuNzQyMTkgMTMuNDYwOSAzLjkzNzUgMTMgMy45Mzc1IDEyLjQ2ODhWOC4yNzM0NEMzLjkzNzUgNi45Mjk2OSA0LjMyMDMxIDUuODc1IDUuMDg1OTQgNS4xMDkzOEM1LjgzNTk0IDQuMzQzNzUgNi44OTA2MiAzLjk2MDk0IDguMjUgMy45NjA5NEgxMi41MzkxQzEzLjA4NTkgMy45NjA5NCAxMy41NTQ3IDMuNzY1NjIgMTMuOTQ1MyAzLjM3NUMxNC4zMjAzIDIuOTg0MzggMTQuNTA3OCAyLjUyMzQ0IDE0LjUwNzggMS45OTIxOUMxNC41MDc4IDEuNDQ1MzEgMTQuMzIwMyAwLjk3NjU2MiAxMy45NDUzIDAuNTg1OTM4QzEzLjU1NDcgMC4xOTUzMTIgMTMuMDg1OSAwIDEyLjUzOTEgMEg4LjI1QzUuNjg3NSAwIDMuNjcxODggMC43NDIxODggMi4yMDMxMiAyLjIyNjU2QzAuNzM0Mzc1IDMuNzEwOTQgMCA1LjcyNjU2IDAgOC4yNzM0NFYxMi40Njg4Wk00My42ODc1IDMxLjI0MjJDNDMuNjg3NSAzMC43MTA5IDQzLjQ5MjIgMzAuMjUgNDMuMTAxNiAyOS44NTk0QzQyLjcxMDkgMjkuNDY4OCA0Mi4yNSAyOS4yNzM0IDQxLjcxODggMjkuMjczNEM0MS4xNzE5IDI5LjI3MzQgNDAuNzAzMSAyOS40Njg4IDQwLjMxMjUgMjkuODU5NEMzOS45MjE5IDMwLjI1IDM5LjcyNjYgMzAuNzEwOSAzOS43MjY2IDMxLjI0MjJWMzUuNDM3NUMzOS43MjY2IDM2Ljc4MTIgMzkuMzUxNiAzNy44MzU5IDM4LjYwMTYgMzguNjAxNkMzNy44MzU5IDM5LjM2NzIgMzYuNzgxMiAzOS43NSAzNS40Mzc1IDM5Ljc1SDMxLjE0ODRDMzAuNjAxNiAzOS43NSAzMC4xMzI4IDM5Ljk0NTMgMjkuNzQyMiA0MC4zMzU5QzI5LjM1MTYgNDAuNzI2NiAyOS4xNTYyIDQxLjE4NzUgMjkuMTU2MiA0MS43MTg4QzI5LjE1NjIgNDIuMjY1NiAyOS4zNTE2IDQyLjcyNjYgMjkuNzQyMiA0My4xMDE2QzMwLjEzMjggNDMuNDkyMiAzMC42MDE2IDQzLjY4NzUgMzEuMTQ4NCA0My42ODc1SDM1LjQzNzVDMzggNDMuNjg3NSA0MC4wMTU2IDQyLjk0NTMgNDEuNDg0NCA0MS40NjA5QzQyLjk1MzEgMzkuOTkyMiA0My42ODc1IDM3Ljk4NDQgNDMuNjg3NSAzNS40Mzc1VjMxLjI0MjJaTTAgMzEuMjQyMlYzNS40Mzc1QzAgMzcuOTg0NCAwLjczNDM3NSAzOS45OTIyIDIuMjAzMTIgNDEuNDYwOUMzLjY3MTg4IDQyLjk0NTMgNS42ODc1IDQzLjY4NzUgOC4yNSA0My42ODc1SDEyLjUzOTFDMTMuMDg1OSA0My42ODc1IDEzLjU1NDcgNDMuNDkyMiAxMy45NDUzIDQzLjEwMTZDMTQuMzIwMyA0Mi43MjY2IDE0LjUwNzggNDIuMjY1NiAxNC41MDc4IDQxLjcxODhDMTQuNTA3OCA0MS4xODc1IDE0LjMyMDMgNDAuNzI2NiAxMy45NDUzIDQwLjMzNTlDMTMuNTU0NyAzOS45NDUzIDEzLjA4NTkgMzkuNzUgMTIuNTM5MSAzOS43NUg4LjI1QzYuODkwNjIgMzkuNzUgNS44MzU5NCAzOS4zNjcyIDUuMDg1OTQgMzguNjAxNkM0LjMyMDMxIDM3LjgzNTkgMy45Mzc1IDM2Ljc4MTIgMy45Mzc1IDM1LjQzNzVWMzEuMjQyMkMzLjkzNzUgMzAuNzEwOSAzLjc0MjE5IDMwLjI1IDMuMzUxNTYgMjkuODU5NEMyLjk2MDk0IDI5LjQ2ODggMi41IDI5LjI3MzQgMS45Njg3NSAyOS4yNzM0QzEuNDM3NSAyOS4yNzM0IDAuOTc2NTYyIDI5LjQ2ODggMC41ODU5MzggMjkuODU5NEMwLjE5NTMxMiAzMC4yNSAwIDMwLjcxMDkgMCAzMS4yNDIyWk0zMS41OTM4IDMxLjgwNDdDMzIuNzgxMiAzMS44MDQ3IDMzLjY3MTkgMzEuNTE1NiAzNC4yNjU2IDMwLjkzNzVDMzQuODU5NCAzMC4zNDM4IDM1LjE1NjIgMjkuNDY4OCAzNS4xNTYyIDI4LjMxMjVWMTYuNzEwOUMzNS4xNTYyIDE1LjUzOTEgMzQuODU5NCAxNC42NjQxIDM0LjI2NTYgMTQuMDg1OUMzMy42NzE5IDEzLjQ5MjIgMzIuNzgxMiAxMy4xOTUzIDMxLjU5MzggMTMuMTk1M0gyOC44OTg0QzI4LjQ2MDkgMTMuMTk1MyAyOC4xNDg0IDEzLjE0MDYgMjcuOTYwOSAxMy4wMzEyQzI3Ljc1NzggMTIuOTIxOSAyNy41MjM0IDEyLjcyNjYgMjcuMjU3OCAxMi40NDUzTDI2LjM2NzIgMTEuNTA3OEMyNi4wODU5IDExLjE5NTMgMjUuNzgxMiAxMC45Njg4IDI1LjQ1MzEgMTAuODI4MUMyNS4xMDk0IDEwLjY3MTkgMjQuNjU2MiAxMC41OTM4IDI0LjA5MzggMTAuNTkzOEgxOS42MTcyQzE5LjA1NDcgMTAuNTkzOCAxOC42MDk0IDEwLjY3MTkgMTguMjgxMiAxMC44MjgxQzE3LjkzNzUgMTAuOTY4OCAxNy42MjUgMTEuMTk1MyAxNy4zNDM4IDExLjUwNzhMMTYuNDc2NiAxMi40NDUzQzE2LjIxMDkgMTIuNzQyMiAxNS45NzY2IDEyLjk0NTMgMTUuNzczNCAxMy4wNTQ3QzE1LjU1NDcgMTMuMTQ4NCAxNS4yMzQ0IDEzLjE5NTMgMTQuODEyNSAxMy4xOTUzSDEyLjA0NjlDMTAuODkwNiAxMy4xOTUzIDEwLjAxNTYgMTMuNDkyMiA5LjQyMTg4IDE0LjA4NTlDOC44MTI1IDE0LjY2NDEgOC41MDc4MSAxNS41MzkxIDguNTA3ODEgMTYuNzEwOVYyOC4zMTI1QzguNTA3ODEgMjkuNDY4OCA4LjgxMjUgMzAuMzQzOCA5LjQyMTg4IDMwLjkzNzVDMTAuMDE1NiAzMS41MTU2IDEwLjg5MDYgMzEuODA0NyAxMi4wNDY5IDMxLjgwNDdIMzEuNTkzOFpNMjEuNzk2OSAyOC45NDUzQzIwLjU5MzggMjguOTQ1MyAxOS41IDI4LjY2NDEgMTguNTE1NiAyOC4xMDE2QzE3LjUxNTYgMjcuNTIzNCAxNi43MjY2IDI2Ljc0MjIgMTYuMTQ4NCAyNS43NTc4QzE1LjU1NDcgMjQuNzU3OCAxNS4yNTc4IDIzLjYzMjggMTUuMjU3OCAyMi4zODI4QzE1LjI1NzggMjEuMTc5NyAxNS41NTQ3IDIwLjA4NTkgMTYuMTQ4NCAxOS4xMDE2QzE2LjcyNjYgMTguMTAxNiAxNy41MTU2IDE3LjMxMjUgMTguNTE1NiAxNi43MzQ0QzE5LjUgMTYuMTQwNiAyMC41OTM4IDE1Ljg0MzggMjEuNzk2OSAxNS44NDM4QzIzLjAxNTYgMTUuODQzOCAyNC4xMjUgMTYuMTQwNiAyNS4xMjUgMTYuNzM0NEMyNi4xMDk0IDE3LjMxMjUgMjYuODk4NCAxOC4xMDE2IDI3LjQ5MjIgMTkuMTAxNkMyOC4wNzAzIDIwLjA4NTkgMjguMzU5NCAyMS4xNzk3IDI4LjM1OTQgMjIuMzgyOEMyOC4zNTk0IDIzLjYxNzIgMjguMDcwMyAyNC43MjY2IDI3LjQ5MjIgMjUuNzEwOUMyNi44OTg0IDI2LjY5NTMgMjYuMTA5NCAyNy40ODQ0IDI1LjEyNSAyOC4wNzgxQzI0LjEyNSAyOC42NTYyIDIzLjAxNTYgMjguOTQ1MyAyMS43OTY5IDI4Ljk0NTNaTTIxLjgyMDMgMjYuOTA2MkMyMi42NDg0IDI2LjkwNjIgMjMuNDA2MiAyNi43MTA5IDI0LjA5MzggMjYuMzIwM0MyNC43ODEyIDI1LjkxNDEgMjUuMzI4MSAyNS4zNjcyIDI1LjczNDQgMjQuNjc5N0MyNi4xMjUgMjMuOTkyMiAyNi4zMjAzIDIzLjIyNjYgMjYuMzIwMyAyMi4zODI4QzI2LjMyMDMgMjEuNTcwMyAyNi4xMjUgMjAuODIwMyAyNS43MzQ0IDIwLjEzMjhDMjUuMzI4MSAxOS40NDUzIDI0Ljc4MTIgMTguOTA2MiAyNC4wOTM4IDE4LjUxNTZDMjMuNDA2MiAxOC4xMDk0IDIyLjY0ODQgMTcuOTA2MiAyMS44MjAzIDE3LjkwNjJDMjAuOTkyMiAxNy45MDYyIDIwLjI0MjIgMTguMTA5NCAxOS41NzAzIDE4LjUxNTZDMTguODgyOCAxOC45MDYyIDE4LjMzNTkgMTkuNDQ1MyAxNy45Mjk3IDIwLjEzMjhDMTcuNTIzNCAyMC44MjAzIDE3LjMyMDMgMjEuNTcwMyAxNy4zMjAzIDIyLjM4MjhDMTcuMzIwMyAyMy4yMjY2IDE3LjUyMzQgMjMuOTkyMiAxNy45Mjk3IDI0LjY3OTdDMTguMzM1OSAyNS4zNjcyIDE4Ljg4MjggMjUuOTE0MSAxOS41NzAzIDI2LjMyMDNDMjAuMjQyMiAyNi43MTA5IDIwLjk5MjIgMjYuOTA2MiAyMS44MjAzIDI2LjkwNjJaTTEyLjYzMjggMTguOTg0NEMxMi4yMTA5IDE4Ljk4NDQgMTEuODU5NCAxOC44MzU5IDExLjU3ODEgMTguNTM5MUMxMS4yODEyIDE4LjI0MjIgMTEuMTMyOCAxNy44OTA2IDExLjEzMjggMTcuNDg0NEMxMS4xMzI4IDE3LjA2MjUgMTEuMjgxMiAxNi43MTA5IDExLjU3ODEgMTYuNDI5N0MxMS44NTk0IDE2LjEzMjggMTIuMjEwOSAxNS45ODQ0IDEyLjYzMjggMTUuOTg0NEMxMy4wMzkxIDE1Ljk4NDQgMTMuMzkwNiAxNi4xMzI4IDEzLjY4NzUgMTYuNDI5N0MxMy45ODQ0IDE2LjcxMDkgMTQuMTMyOCAxNy4wNjI1IDE0LjEzMjggMTcuNDg0NEMxNC4xMzI4IDE3Ljg5MDYgMTMuOTg0NCAxOC4yNDIyIDEzLjY4NzUgMTguNTM5MUMxMy4zOTA2IDE4LjgzNTkgMTMuMDM5MSAxOC45ODQ0IDEyLjYzMjggMTguOTg0NFoifSl9KSxENz1LKCJzdmciLHt3aWR0aDoiMjEiLGhlaWdodDoiMjEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksSygicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxLKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLFQ3PUgwKGZ1bmN0aW9uKHtvbkNsaWNrOlEsLi4uSn0sWil7bGV0IFg9SjUoIkhvbWVCdXR0b24iKTtyZXR1cm4gSyhLNSx7cmVmOlosImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihZKT0+e2lmKFE/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO1guZXhlYyhNNyhYLmRldmljZVR5cGUsWC5kZXZpY2VVZGlkKSl9LC4uLkosY2hpbGRyZW46Vzd9KX0pLHc3PUgwKGZ1bmN0aW9uKHtvbkNsaWNrOlEsLi4uSn0sWil7bGV0IFg9SjUoIlNjcmVlbnNob3RCdXR0b24iKTtyZXR1cm4gSyhLNSx7cmVmOlosImFyaWEtbGFiZWwiOiJTY3JlZW5zaG90IixvbkNsaWNrOihZKT0+e2lmKFE/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFguZGV2aWNlVWRpZClYLmV4ZWMoYHhjcnVuIHNpbWN0bCBpbyAke1guZGV2aWNlVWRpZH0gc2NyZWVuc2hvdCB+L0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJChkYXRlICslcykucG5nYCl9LC4uLkosY2hpbGRyZW46UDd9KX0pLEU3PUgwKGZ1bmN0aW9uKHtvbkNsaWNrOlEsZm9yY2VEaXNhYmxlZDpKLC4uLlp9LFgpe2xldCBZPUo1KCJSb3RhdGVCdXR0b24iKSxxPVkuZGV2aWNlVHlwZT09PSJ3YXRjaCJ8fFkuZGV2aWNlVHlwZT09PSJ2aXNpb24iLFtHLE5dPU0oInBvcnRyYWl0Iik7cmV0dXJuIGIoKCk9PntOKFkub3JpZW50YXRpb24/PyJwb3J0cmFpdCIpfSxbWS5kZXZpY2VVZGlkLFkub3JpZW50YXRpb25dKSxLKEs1LHtyZWY6WCwiYXJpYS1sYWJlbCI6IlJvdGF0ZSBkZXZpY2UiLGZvcmNlRGlzYWJsZWQ6Snx8cSxvbkNsaWNrOihCKT0+e2lmKFE/LihCKSxCLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKCFZLmRldmljZVVkaWR8fHEpcmV0dXJuO2xldCBVPUwyW1kub3JpZW50YXRpb24/P0ddO2lmKE4oVSksWS5vblJvdGF0ZSlZLm9uUm90YXRlKFUpO2Vsc2UgWS5leGVjKGBzZXJ2ZS1zaW0gcm90YXRlICR7VX0gLWQgJHtZLmRldmljZVVkaWR9YCl9LC4uLlosY2hpbGRyZW46RDd9KX0pLHUxPXo3O3UxLlRpdGxlPUY3O3UxLkFjdGlvbnM9QTc7dTEuQnV0dG9uPUs1O3UxLkhvbWVCdXR0b249VDc7dTEuU2NyZWVuc2hvdEJ1dHRvbj13Nzt1MS5Sb3RhdGVCdXR0b249RTc7dmFyIFo1PSguLi4kKT0+JC5maWx0ZXIoKFEsSixaKT0+e3JldHVybiBCb29sZWFuKFEpJiZRLnRyaW0oKSE9PSIiJiZaLmluZGV4T2YoUSk9PT1KfSkuam9pbigiICIpLnRyaW0oKTt2YXIgZTg9KCQpPT4kLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKTt2YXIgJDk9KCQpPT4kLnJlcGxhY2UoL14oW0EtWl0pfFtccy1fXSsoXHcpL2csKFEsSixaKT0+Wj9aLnRvVXBwZXJDYXNlKCk6Si50b0xvd2VyQ2FzZSgpKTt2YXIgSjM9KCQpPT57bGV0IFE9JDkoJCk7cmV0dXJuIFEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrUS5zbGljZSgxKX07dmFyIFg1PXt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOjI0LGhlaWdodDoyNCx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoyLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTt2YXIgUTk9KCQpPT57Zm9yKGxldCBRIGluICQpaWYoUS5zdGFydHNXaXRoKCJhcmlhLSIpfHxRPT09InJvbGUifHxRPT09InRpdGxlIilyZXR1cm4hMDtyZXR1cm4hMX07dmFyIEk3PVUwKHt9KTt2YXIgSjk9KCk9PkwwKEk3KTt2YXIgSzk9SDAoKHtjb2xvcjokLHNpemU6USxzdHJva2VXaWR0aDpKLGFic29sdXRlU3Ryb2tlV2lkdGg6WixjbGFzc05hbWU6WD0iIixjaGlsZHJlbjpZLGljb25Ob2RlOnEsLi4uR30sTik9PntsZXR7c2l6ZTpCPTI0LHN0cm9rZVdpZHRoOlU9MixhYnNvbHV0ZVN0cm9rZVdpZHRoOlY9ITEsY29sb3I6Qz0iY3VycmVudENvbG9yIixjbGFzc05hbWU6TD0iIn09SjkoKT8/e30sRj1aPz9WP051bWJlcihKPz9VKSoyNC9OdW1iZXIoUT8/Qik6Sj8/VTtyZXR1cm4gdjEoInN2ZyIse3JlZjpOLC4uLlg1LHdpZHRoOlE/P0I/P1g1LndpZHRoLGhlaWdodDpRPz9CPz9YNS5oZWlnaHQsc3Ryb2tlOiQ/P0Msc3Ryb2tlV2lkdGg6RixjbGFzc05hbWU6WjUoImx1Y2lkZSIsTCxYKSwuLi4hWSYmIVE5KEcpJiZ7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LC4uLkd9LFsuLi5xLm1hcCgoW3osSF0pPT52MSh6LEgpKSwuLi5BcnJheS5pc0FycmF5KFkpP1k6W1ldXSl9KTt2YXIgazE9KCQsUSk9PntsZXQgSj1IMCgoe2NsYXNzTmFtZTpaLC4uLlh9LFkpPT52MShLOSx7cmVmOlksaWNvbk5vZGU6USxjbGFzc05hbWU6WjUoYGx1Y2lkZS0ke2U4KEozKCQpKX1gLGBsdWNpZGUtJHskfWAsWiksLi4uWH0pKTtyZXR1cm4gSi5kaXNwbGF5TmFtZT1KMygkKSxKfTt2YXIgeTc9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik05IDN2MTgiLGtleToiZmgzaHFhIn1dXSxNMD1rMSgicGFuZWwtbGVmdCIseTcpO3ZhciBiNz1bWyJwYXRoIix7ZDoiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IixrZXk6Inh3bnppcCJ9XSxbInBhdGgiLHtkOiJNMjEgMTFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYiLGtleToiMTRyc3ZxIn1dXSxiMD1rMSgic3F1YXJlLW1vdXNlLXBvaW50ZXIiLGI3KTt2YXIgUzc9W1sicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNiIscng6IjIiLGtleToiaXp4bGFvIn1dLFsicGF0aCIse2Q6Ik0xMCA0djQiLGtleToicHA4dTgwIn1dLFsicGF0aCIse2Q6Ik0yIDhoMjAiLGtleToiZDExY3M3In1dLFsicGF0aCIse2Q6Ik02IDR2NCIsa2V5OiIxc3Z0ancifV1dLHoyPWsxKCJhcHAtd2luZG93IixTNyk7dmFyIHg3PVtbInBhdGgiLHtkOiJNNyA3aDEwdjEwIixrZXk6IjF0aXZuOSJ9XSxbInBhdGgiLHtkOiJNNyAxNyAxNyA3IixrZXk6IjF2a2l6YSJ9XV0sSDI9azEoImFycm93LXVwLXJpZ2h0Iix4Nyk7dmFyIHY3PVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSxGMj1rMSgiY2hlY2siLHY3KTt2YXIgajc9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLGsyPWsxKCJjaGV2cm9uLWRvd24iLGo3KTt2YXIgUjc9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSxBMj1rMSgiY2hldnJvbi1yaWdodCIsUjcpO3ZhciBnNz1bWyJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoiLGtleToiYjE5aDVxIn1dLFsicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIsa2V5OiJoN2g1Z2UifV1dLE8yPWsxKCJmYXN0LWZvcndhcmQiLGc3KTt2YXIgaDc9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3IixrZXk6ImNvdWhpNyJ9XSxbInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjciLGtleToiNm91aWE3In1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIixrZXk6IjFsaDFrZyJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiIsa2V5OiI4amN4dWQifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiIsa2V5OiIxd29xaXYifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV1dLE0yPWsxKCJmbGlwLWhvcml6b250YWwtMiIsaDcpO3ZhciBmNz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIixrZXk6IjEzbzF6bCJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCIsa2V5OiI5aTRwdTQifV1dLF8yPWsxKCJnbG9iZSIsZjcpO3ZhciBtNz1bWyJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIsa2V5OiI5a3p5MzUifV0sWyJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiIsa2V5OiIxdDBmMHQifV0sWyJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IiLGtleToiMW9idXM2In1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIiLGtleToiMWd2aGJ5In1dXSxXMj1rMSgiaW1hZ2VzIixtNyk7dmFyIHA3PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCIsa2V5OiIxNG52cDAifV1dLFAyPWsxKCJwYW5lbC1yaWdodCIscDcpO3ZhciB1Nz1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIsa2V5OiIxMzU3ZTMifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUiLGtleToiMXhocThhIn1dXSxEMj1rMSgicm90YXRlLWNjdyIsdTcpO3ZhciBsNz1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCIsa2V5OiIxNGo3cmoifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCIsa2V5OiI0ZWo5N3UifV1dLFQyPWsxKCJzZWFyY2giLGw3KTt2YXIgZDc9W1sicGF0aCIse2Q6Ik0xMiAzdjEyIixrZXk6IjF4MGo1cyJ9XSxbInBhdGgiLHtkOiJtMTcgOC01LTUtNSA1IixrZXk6IjdxOTdyOCJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV1dLHcyPWsxKCJ1cGxvYWQiLGQ3KTt2YXIgYzc9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSxYMD1rMSgieCIsYzcpO2Z1bmN0aW9uIEUyKHtvcGVuOiR9KXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjbGFzc05hbWU6ImxlbS1jaGV2cm9uIHRleHQtd2hpdGUvNTAiLHN0eWxlOnt0cmFuc2Zvcm06JD8icm90YXRlKDE4MGRlZykiOiJyb3RhdGUoMGRlZykifSxjaGlsZHJlbjpLKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KX1mdW5jdGlvbiBZNSh7ZGlyOiR9KXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZToibXItWzNweF0iLGNoaWxkcmVuOiQ9PT0idXAiP0soInBvbHlnb24iLHtwb2ludHM6IjEyLDQgMjAsMTggNCwxOCJ9KTpLKCJwb2x5Z29uIix7cG9pbnRzOiI0LDYgMjAsNiAxMiwyMCJ9KX0pfWZ1bmN0aW9uIEkyKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOksoInBvbHlnb24iLHtwb2ludHM6IjYsNCAyMCwxMiA2LDIwIn0pfSl9ZnVuY3Rpb24gSzMoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W0soInJlY3QiLHt4OiI2Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KSxLKCJyZWN0Iix7eDoiMTQiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pXX0pfWZ1bmN0aW9uIHkyKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOksoInJlY3QiLHt4OiI1Iix5OiI1Iix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIxLjUifSl9KX1mdW5jdGlvbiBaMygpe3JldHVybiBLKE8yLHtzaXplOjEyLHN0cm9rZVdpZHRoOjIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KX1mdW5jdGlvbiBYMygpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNCAyIDkgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTYuMDA4NTIgMTQuODA1NEM1Ljg5MTgxIDE0LjkzNSA1Ljc1ODE1IDE0Ljk5OTggNS42MDc1NiAxNC45OTk4QzUuNDU2OTYgMTUuMDAzMyA1LjMyMzMgMTQuOTYxMyA1LjIwNjU5IDE0Ljg3MzdDNS4wOTM2NCAxNC43ODYxIDUuMDI1ODcgMTQuNjcyMyA1LjAwMzI4IDE0LjUzMjJDNC45ODQ0NiAxNC4zOTIxIDUuMDQ2NTggMTQuMjQ1IDUuMTg5NjUgMTQuMDkwOUw2Ljk0NTk5IDEyLjE1MjJMNy4yNDUzIDEwLjg3NTVMOC4xOTk3MSAxMS45ODkzTDguMDU4NTMgMTIuMzkzOUM4LjAyMDg4IDEyLjQ5NTUgNy45ODY5OSAxMi41NzA4IDcuOTU2ODcgMTIuNjE5OEM3LjkzMDUyIDEyLjY2ODggNy44NzQwNCAxMi43NDA2IDcuNzg3NDUgMTIuODM1Mkw2LjAwODUyIDE0LjgwNTRaTTEwLjM0NTcgMTQuNjQyNUw5LjEwMzI5IDEyLjMwNDZDOS4wNzY5NCAxMi4yNjI1IDkuMDU0MzUgMTIuMjIyMyA5LjAzNTUzIDEyLjE4MzdDOS4wMTY3IDEyLjE0NTIgOC45NzcxNyAxMi4wOTA5IDguOTE2OTMgMTIuMDIwOUw3LjcxOTY4IDEwLjYxODFDNy40OTM3OSAxMC4zNTU0IDcuMzM3NTQgMTAuMTI5NSA3LjI1MDk1IDkuOTQwMzRDNy4xNjQzNSA5Ljc0NzcgNy4xMzQyNCA5LjQ5OTAxIDcuMTYwNTkgOS4xOTQyOUw3LjI2MjI0IDcuOTgwNjVDNy4yNjk3NyA3LjkwNzEgNy4yMzIxMiA3Ljg1NDU2IDcuMTQ5MjkgNy44MjMwNEM3LjA2NjQ3IDcuNzkxNTEgNi45ODU1MiA3LjgwOTAzIDYuOTA2NDYgNy44NzU1N0w2LjQ3MTYxIDguMjQzMzRMNi4zNDE3MiA5LjY3MjM5QzYuMzIyODkgOS44NDc1MiA2LjI2NDU0IDkuOTc4ODcgNi4xNjY2NSAxMC4wNjY0QzYuMDY4NzYgMTAuMTU0IDUuOTM4ODcgMTAuMTkyNSA1Ljc3Njk4IDEwLjE4MkM1LjYxMTMyIDEwLjE3NSA1LjQ4MzMxIDEwLjExOSA1LjM5Mjk1IDEwLjAxMzlDNS4zMDYzNiA5LjkwODgyIDUuMjY4NzEgOS43NzM5NyA1LjI4MDAxIDkuNjA5MzVMNS4zODczMSA4LjMwNjM5QzUuNDAyMzcgOC4xMjc3NiA1LjQzODEzIDcuOTc1NCA1LjQ5NDYxIDcuODQ5MzFDNS41NTQ4NSA3LjcyMzIxIDUuNjYwMjYgNy41OTE4NyA1LjgxMDg2IDcuNDU1MjdMNi43MTQ0NSA2LjYyNTE2QzcuMDA0MzUgNi4zNjI0NyA3LjI2OTc3IDYuMTYxMDcgNy41MTA3MyA2LjAyMDk2QzcuNzUxNjggNS44NzczNiA4LjAyODQxIDUuODA1NTYgOC4zNDA5IDUuODA1NTZDOC43NTg4IDUuODA1NTYgOS4wNzg4MiA1LjkzMzQgOS4zMDA5NSA2LjE4OTA5QzkuNTI2ODUgNi40NDQ3OCA5LjYyNDc0IDYuNzYxNzYgOS41OTQ2MiA3LjE0MDA0TDkuNDc2MDIgOC43MzE5NUM5LjQ1MzQzIDkuMDE1NjYgOS40MTk1NSA5LjI2MjU5IDkuMzc0MzcgOS40NzI3NUM5LjMyOTE5IDkuNjgyOSA5LjI1Mzg5IDkuOTI5ODMgOS4xNDg0NyAxMC4yMTM1TDkuMDkyIDEwLjM2MDZMOS44NjU2OSAxMS4zNzk5QzkuOTIyMTcgMTEuNDUzNCA5Ljk4MDUyIDExLjUzNCAxMC4wNDA4IDExLjYyMTZDMTAuMTAxIDExLjcwOTEgMTAuMTUzNyAxMS43OTY3IDEwLjE5ODkgMTEuODg0M0wxMS40MDc0IDE0LjE2NDRDMTEuNTA1MyAxNC4zNTAxIDExLjUyNDEgMTQuNTExMiAxMS40NjM5IDE0LjY0NzhDMTEuNDAzNyAxNC43ODQ0IDExLjMwMiAxNC44ODI1IDExLjE1ODkgMTQuOTQyQzExLjAxOTYgMTUuMDAxNSAxMC44NzA5IDE1LjAxMDMgMTAuNzEyOCAxNC45NjgzQzEwLjU1ODQgMTQuOTI2MiAxMC40MzYxIDE0LjgxNzcgMTAuMzQ1NyAxNC42NDI1Wk0xMi40MDcgNy45NjQ4OUMxMi41ODQgNy45NjQ4OSAxMi43MjcgOC4wMTA0MiAxMi44MzYyIDguMTAxNDlDMTIuOTQ1NCA4LjE4OTA1IDEzIDguMzA2MzkgMTMgOC40NTM1QzEzIDguNjExMTEgMTIuOTQ1NCA4LjczMzcgMTIuODM2MiA4LjgyMTI3QzEyLjczMDggOC45MDg4MyAxMi41ODc3IDguOTUyNjEgMTIuNDA3IDguOTUyNjFIMTEuMTMwN0MxMC45NTM4IDguOTUyNjEgMTAuODE0NSA4LjkzNjg1IDEwLjcxMjggOC45MDUzM0MxMC42MTEyIDguODcwMyAxMC41MTMzIDguODA3MjYgMTAuNDE5MSA4LjcxNjE5TDEwLjA1MjEgOC4zNzk5NEwxMC4xNDI0IDcuMDQwMjFMMTEuMDM0NyA3Ljk2NDg5SDEyLjQwN1pNOS4wMDE2NCA1LjMxMTY5QzguNzcxOTggNS4zMTE2OSA4LjU2MzAzIDUuMjYwOTEgOC4zNzQ3OCA1LjE1OTMzQzguMTg2NTMgNS4wNTQyNiA4LjAzNTk0IDQuOTE0MTUgNy45MjI5OSA0LjczOTAzQzcuODEzODEgNC41NjM5IDcuNzU5MjEgNC4zNjk1IDcuNzU5MjEgNC4xNTU4NUM3Ljc1OTIxIDMuOTQyMTkgNy44MTM4MSAzLjc0NzggNy45MjI5OSAzLjU3MjY3QzguMDM1OTQgMy4zOTc1NCA4LjE4NjUzIDMuMjU5MTkgOC4zNzQ3OCAzLjE1NzYyQzguNTYzMDMgMy4wNTI1NCA4Ljc3MTk4IDMgOS4wMDE2NCAzQzkuMjMxMyAzIDkuNDQwMjYgMy4wNTI1NCA5LjYyODUgMy4xNTc2MkM5LjgxNjc1IDMuMjU5MTkgOS45NjU0NiAzLjM5NzU0IDEwLjA3NDYgMy41NzI2N0MxMC4xODc2IDMuNzQ3OCAxMC4yNDQxIDMuOTQyMTkgMTAuMjQ0MSA0LjE1NTg1QzEwLjI0NDEgNC4zNjk1IDEwLjE4NzYgNC41NjM5IDEwLjA3NDYgNC43MzkwM0M5Ljk2NTQ2IDQuOTE0MTUgOS44MTY3NSA1LjA1NDI2IDkuNjI4NSA1LjE1OTMzQzkuNDQwMjYgNS4yNjA5MSA5LjIzMTMgNS4zMTE2OSA5LjAwMTY0IDUuMzExNjlaIn0pfSl9ZnVuY3Rpb24gWTMoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIyNiAxIDEyIDE0IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zMy4yNDM3IDQuNTg0NTlDMzMuMDAwOCA0LjU4NDU5IDMyLjc4MTcgNC41MjcyOCAzMi41ODY2IDQuNDEyNjhDMzIuMzkxNSA0LjI5NDEyIDMyLjIzNDIgNC4xMzgwMSAzMi4xMTQ3IDMuOTQ0MzdDMzEuOTk5MiAzLjc0Njc3IDMxLjk0MTQgMy41Mjk0MSAzMS45NDE0IDMuMjkyMjlDMzEuOTQxNCAzLjA1MTIyIDMxLjk5OTIgMi44MzM4NyAzMi4xMTQ3IDIuNjQwMjJDMzIuMjM0MiAyLjQ0NjU3IDMyLjM5MTUgMi4yOTI0NSAzMi41ODY2IDIuMTc3ODRDMzIuNzgxNyAyLjA1OTI4IDMzLjAwMDggMiAzMy4yNDM3IDJDMzMuNDgyNiAyIDMzLjY5OTcgMi4wNTkyOCAzMy44OTQ4IDIuMTc3ODRDMzQuMDkzOSAyLjI5MjQ1IDM0LjI1MTIgMi40NDY1NyAzNC4zNjY3IDIuNjQwMjJDMzQuNDg2MiAyLjgzMzg3IDM0LjU0NTkgMy4wNTEyMiAzNC41NDU5IDMuMjkyMjlDMzQuNTQ1OSAzLjUyOTQxIDM0LjQ4NjIgMy43NDY3NyAzNC4zNjY3IDMuOTQ0MzdDMzQuMjUxMiA0LjEzODAxIDM0LjA5MzkgNC4yOTQxMiAzMy44OTQ4IDQuNDEyNjhDMzMuNjk5NyA0LjUyNzI4IDMzLjQ4MjYgNC41ODQ1OSAzMy4yNDM3IDQuNTg0NTlaTTMxLjIwMDcgOS43NDE5MUMzMS4wNzMzIDkuNjcwNzcgMzAuOTQxOSA5LjU5NTY4IDMwLjgwNjUgOS41MTY2NEMzMC42NzUgOS40Mzc2IDMwLjU1OTYgOS4zNDI3NiAzMC40NiA5LjIzMjFDMzAuMzYwNCA5LjExNzQ5IDMwLjI5MjcgOC45NzcyIDMwLjI1NjkgOC44MTEyMkMzMC4yMjUgOC42NDEyOCAzMC4yNDQ5IDguNDI5ODUgMzAuMzE2NiA4LjE3NjkzTDMwLjgwNjUgNi40ODE1M0MzMC44MzgzIDYuMzY2OTIgMzAuODE4NCA2LjI3OTk4IDMwLjc0NjcgNi4yMjA3QzMwLjY3OSA2LjE1NzQ3IDMwLjU5NzQgNi4xMjk4MSAzMC41MDE4IDYuMTM3NzFMMjkuNjU5NSA2LjE5Njk5TDI5LjQwMjcgNy45MjIwMkMyOS4zNzg4IDguMTA3NzcgMjkuMzE1MSA4LjI0NjA5IDI5LjIxMTUgOC4zMzY5OEMyOS4xMDggOC40Mjc4OCAyOC45NzI2IDguNDY1NDIgMjguODA1MyA4LjQ0OTYxQzI4LjY0MiA4LjQzMzggMjguNTE4NiA4LjM2NjYyIDI4LjQzNDkgOC4yNDgwNkMyOC4zNTEzIDguMTI5NSAyOC4zMjE0IDcuOTc3MzUgMjguMzQ1MyA3Ljc5MTYxTDI4LjYyNjEgNS42ODEyNkMyOC42NSA1LjUxMTMyIDI4LjcxNTcgNS4zNzQ5OCAyOC44MjMyIDUuMjcyMjNDMjguOTMwOCA1LjE2OTQ4IDI5LjA2ODEgNS4xMTIxNyAyOS4yMzU0IDUuMTAwMzJMMzEuMzMyMSA0Ljk1MjEyQzMxLjg4MTcgNC45MTI2IDMyLjMzNTcgNC45Njk5IDMyLjY5NDEgNS4xMjQwM0MzMy4wNTI1IDUuMjc4MTYgMzMuMzY3MSA1LjUzODk5IDMzLjYzNzkgNS45MDY1MkwzNC42NzE0IDcuMzIzM0wzNi4xNzA4IDYuNjY1M0MzNi4zMzggNi41OTAyMSAzNi40ODkzIDYuNTc0NCAzNi42MjQ4IDYuNjE3ODdDMzYuNzYwMiA2LjY1NzM5IDM2Ljg2NTcgNi43NTIyNCAzNi45NDE0IDYuOTAyNDJDMzcuMDEzIDcuMDUyNTkgMzcuMDE5IDcuMTk0ODYgMzYuOTU5MyA3LjMyOTIzQzM2LjkwMzUgNy40NjM2IDM2Ljc5MiA3LjU2ODMyIDM2LjYyNDggNy42NDM0MUwzNC43MzExIDguNDc5MjVDMzQuNjAzNyA4LjUzODUzIDM0LjQ3NDMgOC41NTAzOSAzNC4zNDI4IDguNTE0ODJDMzQuMjE1NCA4LjQ3NTMgMzQuMTEzOCA4LjQwMDIxIDM0LjAzODIgOC4yODk1NkwzMy4zODExIDcuMzM1MTZDMzMuMzEzNCA3LjI0MDMxIDMzLjIyOTggNy4xOTg4MSAzMy4xMzAyIDcuMjEwNjdDMzMuMDMwNiA3LjIyMjUzIDMyLjk2NDkgNy4yODM3OCAzMi45MzMxIDcuMzk0NDRMMzIuNDkxIDguOTI5NzhMMzQuNzMxMSAxMC4zODgxQzM0Ljg0MjYgMTAuNDU5MiAzNC45MjIzIDEwLjU1NiAzNC45NzAxIDEwLjY3ODVDMzUuMDE3OSAxMC44MDEgMzUuMDI5OCAxMC45MjU1IDM1LjAwNTkgMTEuMDUyQzM0Ljk4NiAxMS4xNzQ1IDM0LjkyODIgMTEuMjc1MyAzNC44MzI3IDExLjM1NDNMMzIuNzcxOCAxMy4wOTcxQzMyLjYwODUgMTMuMjM1NCAzMi40NDUyIDEzLjI5ODcgMzIuMjgxOSAxMy4yODY4QzMyLjEyMjYgMTMuMjc1IDMxLjk5MzIgMTMuMjEzNyAzMS44OTM3IDEzLjEwMzFDMzEuNzk4MSAxMi45OTY0IDMxLjc1NDMgMTIuODY1OSAzMS43NjIyIDEyLjcxMThDMzEuNzcwMiAxMi41NTM3IDMxLjg1MzggMTIuNDA3NSAzMi4wMTMxIDEyLjI3MzFMMzMuNDg4NiAxMS4wMTY0TDMxLjIwMDcgOS43NDE5MVpNMjcuMjA0NCAxNC44NjM3QzI3LjA4NDkgMTQuNzU3IDI3LjAxNzIgMTQuNjE4NiAyNy4wMDEzIDE0LjQ0ODdDMjYuOTg5MyAxNC4yNzg4IDI3LjA2MSAxNC4xMTY3IDI3LjIxNjMgMTMuOTYyNkwyOS4yMjM1IDExLjk3NjdMMjkuOTM0MyA5LjQ4MTA4QzMwLjA0MTggOS42MTU0NCAzMC4xNzUzIDkuNzQ1ODYgMzAuMzM0NSA5Ljg3MjMyQzMwLjQ5NzggOS45OTQ4MyAzMC42OTMgMTAuMTE3MyAzMC45MiAxMC4yMzk5TDMxLjExNzEgMTAuMzQ2NkwzMC4zMDQ3IDEyLjQzMzJDMzAuMjUyOSAxMi41NTU3IDMwLjIwOTEgMTIuNjQwNyAzMC4xNzMzIDEyLjY4ODFDMzAuMTQxNCAxMi43MzU1IDMwLjA4NTYgMTIuNzk4OCAzMC4wMDYgMTIuODc3OEwyOC4wNzA2IDE0Ljc4MDdDMjcuOTE5MiAxNC45MjY5IDI3Ljc2MzkgMTUgMjcuNjA0NiAxNUMyNy40NDkzIDE1IDI3LjMxNTkgMTQuOTU0NiAyNy4yMDQ0IDE0Ljg2MzdaIn0pfSl9ZnVuY3Rpb24gcTMoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0OSAzIDE2IDEyIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik01Ny4wMDI4IDExLjk0OUM1Ni44NDggMTEuOTQ5IDU2LjcxNzIgMTEuODk4NyA1Ni42MTAzIDExLjc5OEM1Ni41MDM1IDExLjY5MzkgNTYuNDUwMSAxMS41NzA3IDU2LjQ1MDEgMTEuNDI4NFY5LjAyODYzTDU0LjQyMTYgNy4xMDc3NkM1NC4yMjI3IDYuOTIwMzUgNTQuMDk1NSA2LjY5ODI1IDU0LjA0MDMgNi40NDE0NEM1My45ODUgNi4xODExNiA1NC4wMTA4IDUuOTI3ODIgNTQuMTE3NiA1LjY4MTQyQzU0LjIyODIgNS40Mzg0OSA1NC4zOTc3IDUuMjQ0MTQgNTQuNjI2MSA1LjA5ODM5QzU0Ljg1ODMgNC45NDkxNiA1NS4xMTYyIDQuODc0NTQgNTUuMzk5OSA0Ljg3NDU0SDU4LjExMzdDNTguNDIzMiA0Ljg3NDU0IDU4LjY4NDggNC45NzY5MiA1OC44OTg1IDUuMTgxNjhDNTkuMTE1OSA1LjM4Mjk2IDU5LjIyNDYgNS42MjkzNiA1OS4yMjQ2IDUuOTIwODdWNy43NjM2Nkg2MC44OTkzQzYxLjA1MDQgNy43NjM2NiA2MS4xNzk0IDcuODEzOTkgNjEuMjg2MiA3LjkxNDYzQzYxLjM5MzEgOC4wMTUyNyA2MS40NDY1IDguMTM4NDcgNjEuNDQ2NSA4LjI4NDIzQzYxLjQ0NjUgOC40MjY1MSA2MS4zOTMxIDguNTQ3OTggNjEuMjg2MiA4LjY0ODYyQzYxLjE3OTQgOC43NDkyNiA2MS4wNTA0IDguNzk5NTggNjAuODk5MyA4Ljc5OTU4SDU4LjY3MTlDNTguNTIwOSA4Ljc5OTU4IDU4LjM5MDEgOC43NDkyNiA1OC4yNzk1IDguNjQ4NjJDNTguMTcyNyA4LjU0Nzk4IDU4LjExOTIgOC40MjY1MSA1OC4xMTkyIDguMjg0MjNWNi45ODgwM0M1OC4xMTkyIDYuOTE4NjIgNTguMDk5IDYuODU0NDIgNTguMDU4NCA2Ljc5NTQyQzU4LjAxNzkgNi43MzI5NSA1Ny45NDQyIDYuNzAxNzIgNTcuODM3MyA2LjcwMTcySDU2LjA2MzJDNTUuOTkzMiA2LjcwMTcyIDU1Ljk0NTMgNi43Mjk0OCA1NS45MTk1IDYuNzg1MDFDNTUuODk3NCA2LjgzNzA2IDU1LjkwODQgNi44ODczOSA1NS45NTI2IDYuOTM1OTdMNTcuNDAwNyA4LjQ1NjAxQzU3LjUwMzkgOC41NjM2IDU3LjU1NTUgOC42ODE1OSA1Ny41NTU1IDguODA5OTlWMTEuNDI4NEM1Ny41NTU1IDExLjU3MDcgNTcuNTAwMiAxMS42OTM5IDU3LjM4OTcgMTEuNzk4QzU3LjI4MjggMTEuODk4NyA1Ny4xNTM4IDExLjk0OSA1Ny4wMDI4IDExLjk0OVpNNTMuMDAxMiAxNEM1Mi41ODQ4IDE0IDUyLjE5NDIgMTMuOTI3MSA1MS44Mjk1IDEzLjc4MTRDNTEuNDY4NCAxMy42MzU2IDUxLjE0OTYgMTMuNDMyNiA1MC44NzMzIDEzLjE3MjNDNTAuNjAwNiAxMi45MTIgNTAuMzg2OSAxMi42MTE4IDUwLjIzMjEgMTIuMjcxN0M1MC4wNzc0IDExLjkyODIgNTAgMTEuNTYwMyA1MCAxMS4xNjgxQzUwIDEwLjc3NiA1MC4wNzc0IDEwLjQwOTkgNTAuMjMyMSAxMC4wNjk4QzUwLjM4NjkgOS43MjYxOCA1MC42MDA2IDkuNDI0MjYgNTAuODczMyA5LjE2Mzk4QzUxLjE0OTYgOC45MDM3IDUxLjQ2ODQgOC43MDA2OCA1MS44Mjk1IDguNTU0OTJDNTIuMTk0MiA4LjQwOTE2IDUyLjU4NDggOC4zMzYyOCA1My4wMDEyIDguMzM2MjhDNTMuNDIxMiA4LjMzNjI4IDUzLjgxMTggOC40MDkxNiA1NC4xNzI5IDguNTU0OTJDNTQuNTM3NyA4LjcwMDY4IDU0Ljg1NjQgOC45MDM3IDU1LjEyOTEgOS4xNjM5OEM1NS40MDU0IDkuNDI0MjYgNTUuNjIxIDkuNzI2MTggNTUuNzc1OCAxMC4wNjk4QzU1LjkzMDUgMTAuNDA5OSA1Ni4wMDc5IDEwLjc3NiA1Ni4wMDc5IDExLjE2ODFDNTYuMDA3OSAxMS41NjAzIDU1LjkzMDUgMTEuOTI4MiA1NS43NzU4IDEyLjI3MTdDNTUuNjIxIDEyLjYxMTggNTUuNDA1NCAxMi45MTIgNTUuMTI5MSAxMy4xNzIzQzU0Ljg1NjQgMTMuNDMyNiA1NC41Mzc3IDEzLjYzNTYgNTQuMTcyOSAxMy43ODE0QzUzLjgxMTggMTMuOTI3MSA1My40MjEyIDE0IDUzLjAwMTIgMTRaTTUzLjAwMTIgMTMuMjY2QzUzLjQxMDIgMTMuMjY2IDUzLjc4MjMgMTMuMTcwNiA1NC4xMTc2IDEyLjk3OTdDNTQuNDU2NiAxMi43OTIzIDU0LjcyNTYgMTIuNTQwNyA1NC45MjQ2IDEyLjIyNDlDNTUuMTI3MyAxMS45MDU2IDU1LjIyODYgMTEuNTUzNCA1NS4yMjg2IDExLjE2ODFDNTUuMjI4NiAxMC43ODI5IDU1LjEyNzMgMTAuNDMyNCA1NC45MjQ2IDEwLjExNjZDNTQuNzI1NiA5Ljc5NzMzIDU0LjQ1NjYgOS41NDM5OSA1NC4xMTc2IDkuMzU2NTlDNTMuNzgyMyA5LjE2NTcxIDUzLjQxMDIgOS4wNzAyOCA1My4wMDEyIDkuMDcwMjhDNTIuNTk1OSA5LjA3MDI4IDUyLjIyMzcgOS4xNjU3MSA1MS44ODQ3IDkuMzU2NTlDNTEuNTQ5NCA5LjU0Mzk5IDUxLjI4MDQgOS43OTczMyA1MS4wNzc4IDEwLjExNjZDNTAuODc4OCAxMC40MzI0IDUwLjc3OTMgMTAuNzgyOSA1MC43NzkzIDExLjE2ODFDNTAuNzc5MyAxMS41NTM0IDUwLjg3ODggMTEuOTA1NiA1MS4wNzc4IDEyLjIyNDlDNTEuMjgwNCAxMi41NDA3IDUxLjU0OTQgMTIuNzkyMyA1MS44ODQ3IDEyLjk3OTdDNTIuMjIzNyAxMy4xNzA2IDUyLjU5NTkgMTMuMjY2IDUzLjAwMTIgMTMuMjY2Wk02Mi40ODAxIDkuNjExNjZDNjIuMzYyMiA5LjUxNDQ5IDYyLjMwMTQgOS40MTU1OCA2Mi4yOTc3IDkuMzE0OTRDNjIuMjk3NyA5LjIxMDgzIDYyLjMzMDggOS4xMjQwNyA2Mi4zOTcyIDkuMDU0NjZDNjIuNDY3MiA4Ljk4NTI1IDYyLjU1MzggOC45NDUzNCA2Mi42NTY5IDguOTM0OTNDNjIuNzYzOCA4LjkyMTA1IDYyLjg2ODggOC45NTU3NSA2Mi45NzIgOS4wMzkwNEM2My4yODg5IDkuMzAyNzkgNjMuNTM5NCA5LjYxNjg3IDYzLjcyMzYgOS45ODEyNkM2My45MDc5IDEwLjM0NTcgNjQgMTAuNzQxMyA2NCAxMS4xNjgxQzY0IDExLjU2MDMgNjMuOTIyNiAxMS45MjgyIDYzLjc2NzkgMTIuMjcxN0M2My42MTMxIDEyLjYxMTggNjMuMzk3NiAxMi45MTIgNjMuMTIxMiAxMy4xNzIzQzYyLjg0ODUgMTMuNDMyNiA2Mi41Mjk4IDEzLjYzNTYgNjIuMTY1IDEzLjc4MTRDNjEuODAzOSAxMy45MjcxIDYxLjQxNTIgMTQgNjAuOTk4OCAxNEM2MC41ODI0IDE0IDYwLjE5MTkgMTMuOTI3MSA1OS44MjcxIDEzLjc4MTRDNTkuNDYyMyAxMy42MzU2IDU5LjE0MTcgMTMuNDMyNiA1OC44NjU0IDEzLjE3MjNDNTguNTkyNyAxMi45MTIgNTguMzc5IDEyLjYxMTggNTguMjI0MiAxMi4yNzE3QzU4LjA2OTUgMTEuOTI4MiA1Ny45OTIxIDExLjU2MDMgNTcuOTkyMSAxMS4xNjgxQzU3Ljk5MjEgMTAuOTYzNCA1OC4wMTQyIDEwLjc2NTYgNTguMDU4NCAxMC41NzQ3QzU4LjEwNjMgMTAuMzgwNCA1OC4xNzI3IDEwLjE5MyA1OC4yNTc0IDEwLjAxMjVDNTguMzA5IDkuOTAxNDQgNTguMzgwOCA5LjgzMDMgNTguNDczIDkuNzk5MDZDNTguNTY4OCA5Ljc2NDM2IDU4LjY2MjcgOS43NjQzNiA1OC43NTQ4IDkuNzk5MDZDNTguODUwNiA5LjgzMDMgNTguOTIyNSA5Ljg5Mjc2IDU4Ljk3MDQgOS45ODY0N0M1OS4wMTgzIDEwLjA4MDIgNTkuMDEwOSAxMC4xOTgyIDU4Ljk0ODMgMTAuMzQwNEM1OC44MzA0IDEwLjYwMDcgNTguNzcxNCAxMC44NzY2IDU4Ljc3MTQgMTEuMTY4MUM1OC43NzE0IDExLjU1MzQgNTguODcwOSAxMS45MDU2IDU5LjA2OTkgMTIuMjI0OUM1OS4yNzI1IDEyLjU0MDcgNTkuNTQxNSAxMi43OTIzIDU5Ljg3NjggMTIuOTc5N0M2MC4yMTU4IDEzLjE3MDYgNjAuNTg5OCAxMy4yNjYgNjAuOTk4OCAxMy4yNjZDNjEuNDA3OCAxMy4yNjYgNjEuNzggMTMuMTcwNiA2Mi4xMTUzIDEyLjk3OTdDNjIuNDUwNiAxMi43OTIzIDYyLjcxNzcgMTIuNTQwNyA2Mi45MTY3IDEyLjIyNDlDNjMuMTE5NCAxMS45MDU2IDYzLjIyMDcgMTEuNTUzNCA2My4yMjA3IDExLjE2ODFDNjMuMjIwNyAxMC44NTkzIDYzLjE1MjUgMTAuNTcxMiA2My4wMTYyIDEwLjMwNEM2Mi44ODM1IDEwLjAzMzMgNjIuNzA0OCA5LjgwMjUzIDYyLjQ4MDEgOS42MTE2NlpNNjAuOTk4OCA2LjI3NDg2QzYwLjc3NCA2LjI3NDg2IDYwLjU2OTUgNi4yMjQ1NCA2MC4zODUzIDYuMTIzODlDNjAuMjAxMSA2LjAxOTc4IDYwLjA1MzcgNS44ODI3IDU5Ljk0MzIgNS43MTI2NUM1OS44MzYzIDUuNTM5MTMgNTkuNzgyOSA1LjM0NjUyIDU5Ljc4MjkgNS4xMzQ4M0M1OS43ODI5IDQuOTI2NiA1OS44MzYzIDQuNzM3NDYgNTkuOTQzMiA0LjU2NzQxQzYwLjA1MzcgNC4zOTM4OSA2MC4yMDExIDQuMjU2ODEgNjAuMzg1MyA0LjE1NjE3QzYwLjU2OTUgNC4wNTIwNiA2MC43NzQgNCA2MC45OTg4IDRDNjEuMjE5OSA0IDYxLjQyMDcgNC4wNTIwNiA2MS42MDEzIDQuMTU2MTdDNjEuNzgxOCA0LjI1NjgxIDYxLjkyNTUgNC4zOTM4OSA2Mi4wMzI0IDQuNTY3NDFDNjIuMTQyOSA0LjczNzQ2IDYyLjE5ODIgNC45MjY2IDYyLjE5ODIgNS4xMzQ4M0M2Mi4xOTgyIDUuMzQ2NTIgNjIuMTQyOSA1LjUzOTEzIDYyLjAzMjQgNS43MTI2NUM2MS45MjU1IDUuODgyNyA2MS43ODE4IDYuMDE5NzggNjEuNjAxMyA2LjEyMzg5QzYxLjQyMDcgNi4yMjQ1NCA2MS4yMTk5IDYuMjc0ODYgNjAuOTk4OCA2LjI3NDg2WiJ9KX0pfWZ1bmN0aW9uIEczKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNzAgNSAxOCA5IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik04NS41NzIgMTIuMTAzOEM4Ni4wNiAxMi4xMDM4IDg2LjQyMDcgMTEuOTg5MiA4Ni42NTQyIDExLjc2MDFDODYuODg0NyAxMS41MjgxIDg3IDExLjE2NDEgODcgMTAuNjY4MVYxMC4xMTEyQzg3IDkuNzY5MDEgODYuOTIwNyA5LjQ2MzAyIDg2Ljc2MiA5LjE5MzI5Qzg2LjYwMzMgOC45MjA2NSA4Ni4zNzU4IDguNjk3MzMgODYuMDc5NCA4LjUyMzMxQzg1Ljc4MDEgOC4zNDkyOSA4NS40MjIzIDguMjM3NjIgODUuMDA2MiA4LjE4ODMyTDgzLjAxNjggNy45NTMzOUw4MS4xOTgxIDYuODQ4MzVDODAuOTIyNyA2LjY4MDEzIDgwLjY2MDggNi41NDIzNyA4MC40MTIzIDYuNDM1MDVDODAuMTYwOCA2LjMyNDg0IDc5Ljg5NzQgNi4yMzc4MyA3OS42MjE5IDYuMTc0MDJDNzkuMzQ2NSA2LjExMDIxIDc5LjAzODIgNi4wNjUyNiA3OC42OTY5IDYuMDM5MTVDNzguMzUyNiA2LjAxMzA1IDc3Ljk1MTQgNiA3Ny40OTM0IDZINzYuODEwOEM3Ni4zODg3IDYgNzUuOTk1IDYuMDQ5MzEgNzUuNjI5OCA2LjE0NzkyQzc1LjI2MTYgNi4yNDM2MyA3NC45MTg4IDYuMzcxMjUgNzQuNjAxNSA2LjUzMDc2Qzc0LjI4MTEgNi42OTAyOCA3My45ODYyIDYuODY1NzYgNzMuNzE2OCA3LjA1NzE4QzczLjQ0NDQgNy4yNDg2IDczLjE5NTkgNy40MzcxMiA3Mi45NzE0IDcuNjIyNzVMNzIuMjU3NCA3Ljg1MzMzQzcxLjgzMjMgNy45ODY3NCA3MS41MTY0IDguMTgzOTcgNzEuMzA5OSA4LjQ0NUM3MS4xMDMzIDguNzAzMTMgNzEgOS4wMzM3NyA3MSA5LjQzNjkyVjEwLjY0MkM3MSAxMS4xNDY3IDcxLjExNTMgMTEuNTE2NSA3MS4zNDU4IDExLjc1MTRDNzEuNTc2MyAxMS45ODYzIDcxLjkzNyAxMi4xMDM4IDcyLjQyOCAxMi4xMDM4SDcyLjcxNTRDNzIuNzAwNCAxMi4wMzcxIDcyLjY4ODUgMTEuOTcwNCA3Mi42Nzk1IDExLjkwMzdDNzIuNjcwNSAxMS44MzQxIDcyLjY2NiAxMS43NjQ1IDcyLjY2NiAxMS42OTQ4QzcyLjY2NiAxMS4zNTU1IDcyLjc0OTggMTEuMDQ5NSA3Mi45MTc1IDEwLjc3NjlDNzMuMDg1MSAxMC41MDQyIDczLjMxMTIgMTAuMjg4MiA3My41OTU2IDEwLjEyODdDNzMuODc3IDkuOTY2MjMgNzQuMTkyOCA5Ljg4NTAyIDc0LjU0MzEgOS44ODUwMkM3NC44OTA0IDkuODg1MDIgNzUuMjA2MiA5Ljk2NjIzIDc1LjQ5MDYgMTAuMTI4N0M3NS43NzIgMTAuMjg4MiA3NS45OTY1IDEwLjUwNDIgNzYuMTY0MiAxMC43NzY5Qzc2LjMzMTggMTEuMDQ5NSA3Ni40MTU3IDExLjM1NTUgNzYuNDE1NyAxMS42OTQ4Qzc2LjQxNTcgMTEuNzY0NSA3Ni40MTEyIDExLjgzNDEgNzYuNDAyMiAxMS45MDM3Qzc2LjM5MzIgMTEuOTcwNCA3Ni4zODI3IDEyLjAzNzEgNzYuMzcwOCAxMi4xMDM4SDgxLjYzODJDODEuNjIwMyAxMi4wMzcxIDgxLjYwODMgMTEuOTcwNCA4MS42MDIzIDExLjkwMzdDODEuNTkzMyAxMS44MzQxIDgxLjU4ODggMTEuNzY0NSA4MS41ODg4IDExLjY5NDhDODEuNTg4OCAxMS4zNTU1IDgxLjY3MjcgMTEuMDQ5NSA4MS44NDAzIDEwLjc3NjlDODIuMDA1IDEwLjUwNDIgODIuMjI5NSAxMC4yODgyIDgyLjUxMzkgMTAuMTI4N0M4Mi43OTUzIDkuOTY2MjMgODMuMTExMSA5Ljg4NTAyIDgzLjQ2MTQgOS44ODUwMkM4My44MTE3IDkuODg1MDIgODQuMTI5IDkuOTY2MjMgODQuNDEzNCAxMC4xMjg3Qzg0LjY5NDggMTAuMjg4MiA4NC45MTk0IDEwLjUwNDIgODUuMDg3IDEwLjc3NjlDODUuMjUxNyAxMS4wNDk1IDg1LjMzNCAxMS4zNTU1IDg1LjMzNCAxMS42OTQ4Qzg1LjMzNCAxMS43NjQ1IDg1LjMzMSAxMS44MzQxIDg1LjMyNSAxMS45MDM3Qzg1LjMxNiAxMS45NzA0IDg1LjMwNDEgMTIuMDM3MSA4NS4yODkxIDEyLjEwMzhIODUuNTcyWk04My40NjE0IDEzQzgzLjcxMjkgMTMgODMuOTQwNCAxMi45NDIgODQuMTQ0IDEyLjgyNkM4NC4zNDc2IDEyLjcxIDg0LjUwOTIgMTIuNTUzMyA4NC42MjkgMTIuMzU2MUM4NC43NDg3IDEyLjE1ODkgODQuODA4NiAxMS45Mzg1IDg0LjgwODYgMTEuNjk0OEM4NC44MDg2IDExLjQ1MTIgODQuNzQ4NyAxMS4yMzA4IDg0LjYyOSAxMS4wMzM2Qzg0LjUwOTIgMTAuODM2MyA4NC4zNDc2IDEwLjY3OTcgODQuMTQ0IDEwLjU2MzdDODMuOTQwNCAxMC40NDc3IDgzLjcxMjkgMTAuMzg5NyA4My40NjE0IDEwLjM4OTdDODMuMjA2OSAxMC4zODk3IDgyLjk3NzkgMTAuNDQ3NyA4Mi43NzQzIDEwLjU2MzdDODIuNTcwOCAxMC42Nzk3IDgyLjQwOTEgMTAuODM2MyA4Mi4yODk0IDExLjAzMzZDODIuMTY5NiAxMS4yMzA4IDgyLjEwOTcgMTEuNDUxMiA4Mi4xMDk3IDExLjY5NDhDODIuMTA5NyAxMS45Mzg1IDgyLjE2OTYgMTIuMTU4OSA4Mi4yODk0IDEyLjM1NjFDODIuNDA5MSAxMi41NTMzIDgyLjU3MDggMTIuNzEgODIuNzc0MyAxMi44MjZDODIuOTc3OSAxMi45NDIgODMuMjA2OSAxMyA4My40NjE0IDEzWk03NC41NDMxIDEzQzc0Ljc5NDYgMTMgNzUuMDIyMSAxMi45NDIgNzUuMjI1NyAxMi44MjZDNzUuNDI5MiAxMi43MSA3NS41OTA5IDEyLjU1MzMgNzUuNzEwNiAxMi4zNTYxQzc1LjgzMDQgMTIuMTU4OSA3NS44OTAzIDExLjkzODUgNzUuODkwMyAxMS42OTQ4Qzc1Ljg5MDMgMTEuNDUxMiA3NS44MzA0IDExLjIzMDggNzUuNzEwNiAxMS4wMzM2Qzc1LjU5MDkgMTAuODM2MyA3NS40MjkyIDEwLjY3OTcgNzUuMjI1NyAxMC41NjM3Qzc1LjAyMjEgMTAuNDQ3NyA3NC43OTQ2IDEwLjM4OTcgNzQuNTQzMSAxMC4zODk3Qzc0LjI4ODYgMTAuMzg5NyA3NC4wNTk2IDEwLjQ0NzcgNzMuODU2IDEwLjU2MzdDNzMuNjUyNCAxMC42Nzk3IDczLjQ5MDggMTAuODM2MyA3My4zNzEgMTEuMDMzNkM3My4yNTEzIDExLjIzMDggNzMuMTkxNCAxMS40NTEyIDczLjE5MTQgMTEuNjk0OEM3My4xOTE0IDExLjkzODUgNzMuMjUxMyAxMi4xNTg5IDczLjM3MSAxMi4zNTYxQzczLjQ5MDggMTIuNTUzMyA3My42NTI0IDEyLjcxIDczLjg1NiAxMi44MjZDNzQuMDU5NiAxMi45NDIgNzQuMjg4NiAxMyA3NC41NDMxIDEzWiJ9KX0pfWZ1bmN0aW9uIGowKHtzaXplOiQ9MTgsc3Ryb2tlV2lkdGg6UT0yfSl7cmV0dXJuIEsoRDIse3NpemU6JCxzdHJva2VXaWR0aDpRfSl9dmFyIFo5PSJBY2Nlc3NpYmlsaXR5IHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiI7ZnVuY3Rpb24gcTUoJCl7cmV0dXJuICQ/LmVycm9ycz8uaW5jbHVkZXMoWjkpPz8hMX1mdW5jdGlvbiBHNSgkLFEpe2lmKCQ9PT1RKXJldHVybiEwO2lmKCQuaWQhPT1RLmlkfHwkLnBhdGghPT1RLnBhdGh8fCQubGFiZWwhPT1RLmxhYmVsfHwkLnZhbHVlIT09US52YWx1ZXx8JC5yb2xlIT09US5yb2xlfHwkLnR5cGUhPT1RLnR5cGV8fCQuZW5hYmxlZCE9PVEuZW5hYmxlZClyZXR1cm4hMTtsZXQgSj0kLmZyYW1lLFo9US5mcmFtZTtyZXR1cm4gSj09PVp8fEoueD09PVoueCYmSi55PT09Wi55JiZKLndpZHRoPT09Wi53aWR0aCYmSi5oZWlnaHQ9PT1aLmhlaWdodH1mdW5jdGlvbiBWNSgkLFEpe2xldCBKPSQubGFiZWx8fCQucm9sZXx8YGVsZW1lbnQgJHtRKzF9YCxaPSQucm9sZXx8JC50eXBlO3JldHVybntpZDokLmlkLHBhdGg6JC5wYXRoLGxhYmVsOkosdmFsdWU6JC52YWx1ZSxyb2xlOlosdHlwZTokLnR5cGUsZW5hYmxlZDokLmVuYWJsZWQsZnJhbWU6JC5mcmFtZX19ZnVuY3Rpb24gWDkoJCxRKXtsZXQgSj1NYXRoLm1heCgwLCQueCksWj1NYXRoLm1heCgwLCQueSksWD1NYXRoLm1pbihRLndpZHRoLCQueCskLndpZHRoKSxZPU1hdGgubWluKFEuaGVpZ2h0LCQueSskLmhlaWdodCkscT1NYXRoLm1heCgwLFgtSiksRz1NYXRoLm1heCgwLFktWik7cmV0dXJuIHE+MCYmRz4wP3t4OkoseTpaLHdpZHRoOnEsaGVpZ2h0Okd9Om51bGx9ZnVuY3Rpb24gUjAoJCl7cmV0dXJuICQuaWR9ZnVuY3Rpb24gVjMoJCl7cmV0dXJuYCR7JC54fSwkeyQueX0gJHskLndpZHRofXgkeyQuaGVpZ2h0fWB9ZnVuY3Rpb24gWTkoJCl7cmV0dXJuW2BBWCBsYWJlbDogJHskLmxhYmVsfHwiVW5sYWJlbGVkIn1gLCQucm9sZT9gcm9sZTogJHskLnJvbGV9YDoiIiwkLnR5cGU/YHR5cGU6ICR7JC50eXBlfWA6IiIsJC52YWx1ZT9gdmFsdWU6ICR7JC52YWx1ZX1gOiIiLCQuaWQ/YGlkOiAkeyQuaWR9YDoiIixgcGF0aDogJHskLnBhdGh9YCxgZnJhbWU6ICR7VjMoJC5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9ZnVuY3Rpb24gYjIoJCl7cmV0dXJuICQmJnR5cGVvZiAkLmRldmljZT09PSJzdHJpbmciJiZ0eXBlb2YgJC51cmw9PT0ic3RyaW5nIj8kOm51bGx9ZnVuY3Rpb24gZjEoJCl7bGV0IEo9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiBKPT09Ii8iP2AvJHskfWA6YCR7Sn0vJHskfWB9dmFyIHI3PTUwMDAsbzc9MjAwMCxTMj1udWxsLEIzPW51bGwsaTc9MSxuNz0xLGUwPW5ldyBNYXAsdDA9bmV3IE1hcDtmdW5jdGlvbiBhNygpe2xldCAkPW5ldyBVUkwoZjEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gczcoJCl7Zm9yKGxldCBRIG9mIGUwLnZhbHVlcygpKVEucmVqZWN0KCQpO2UwLmNsZWFyKCl9ZnVuY3Rpb24gcTkoKXtyZXR1cm4gUzI/Pz1uZXcgUHJvbWlzZSgoJCxRKT0+e2xldCBKPSExLFo7dHJ5e1o9bmV3IFdlYlNvY2tldChhNygpKX1jYXRjaChxKXtTMj1udWxsLFEocSk7cmV0dXJufWxldCBYPXNldFRpbWVvdXQoKCk9PntpZighSilKPSEwLFMyPW51bGwsUShFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFouY2xvc2UoKX0scjcpO1oub25vcGVuPSgpPT57Wi5zZW5kKEpTT04uc3RyaW5naWZ5KHt0b2tlbjp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4/PyIifSkpfSxaLm9ubWVzc2FnZT0ocSk9PntsZXQgRzt0cnl7Rz1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoRy5yZWFkeSl7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCksQjM9WiwkKFopO3JldHVybn1pZih0eXBlb2YgRy5zdWI9PT0ibnVtYmVyIil7bGV0IEI9dDAuZ2V0KEcuc3ViKTtpZighQilyZXR1cm47aWYoRy5lbmQpdDAuZGVsZXRlKEcuc3ViKSxCLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgRy5kYXRhPT09InN0cmluZyIpQi5vbkRhdGEoRy5kYXRhKTtyZXR1cm59aWYodHlwZW9mIEcuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IE49ZTAuZ2V0KEcuaWQpO2lmKCFOKXJldHVybjtlMC5kZWxldGUoRy5pZCksTi5yZXNvbHZlKEcpfTtsZXQgWT0oKT0+e1MyPW51bGwsQjM9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO3M3KHEpO2xldCBHPVsuLi50MC52YWx1ZXMoKV07dDAuY2xlYXIoKTtmb3IobGV0IE4gb2YgRylOLm9uRW5kKCk7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCksUShxKX07Wi5vbmVycm9yPVksWi5vbmNsb3NlPVl9KSxTMn1hc3luYyBmdW5jdGlvbiBHOSgkLFEpe2xldCBKPWF3YWl0IHE5KCk7aWYoSi5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChaLFgpPT57bGV0IFk9aTcrKyxxPSgpPT57ZTAuZGVsZXRlKFkpLFgoUT8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoUSl7aWYoUS5hYm9ydGVkKXtxKCk7cmV0dXJufVEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX1lMC5zZXQoWSx7cmVzb2x2ZTooRyk9PntRPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWihHKX0scmVqZWN0OihHKT0+e1E/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxYKEcpfX0pLEouc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24gVzEoJCxRKXtsZXQgSj1hd2FpdCBHOSh7Y29tbWFuZDokfSxRPy5zaWduYWwpO3JldHVybntzdGRvdXQ6Si5zdGRvdXQ/PyIiLHN0ZGVycjpKLnN0ZGVycj8/IiIsZXhpdENvZGU6Si5leGl0Q29kZT8/MX19YXN5bmMgZnVuY3Rpb24gTjMoJCxRKXtsZXQgSj1hd2FpdCBHOSh7dWk6JH0sUT8uc2lnbmFsKTtpZihKLmVycm9yKXRocm93IEVycm9yKEouZXJyb3IpO3JldHVybiBKLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiBnMCgkKXtsZXQgUT17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sSj0hMSxaPW51bGwsWD1udWxsLFk9IiIscT0oQik9PntZKz1CLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCBVO3doaWxlKChVPVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IFY9WS5zbGljZSgwLFUpO1k9WS5zbGljZShVKzIpO2xldCBDPVYuc3BsaXQoYApgKS5maWx0ZXIoKEwpPT5MLnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoTCk9Pkwuc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKEMpUS5vbm1lc3NhZ2U/Lih7ZGF0YTpDfSl9fSxHPSgpPT57aWYoSnx8WClyZXR1cm47US5vbmVycm9yPy4oKSxYPXNldFRpbWVvdXQoKCk9PntYPW51bGwsTigpfSxvNyl9LE49YXN5bmMoKT0+e2lmKEopcmV0dXJuO3RyeXtsZXQgQj1hd2FpdCBxOSgpO2lmKEopcmV0dXJuO1k9IiIsWj1uNysrLHQwLnNldChaLHtvbkRhdGE6cSxvbkVuZDpHfSksQi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WixwYXRoOiR9KSl9Y2F0Y2h7RygpfX07cmV0dXJuIE4oKSxRLmNsb3NlPSgpPT57aWYoSj0hMCxYKWNsZWFyVGltZW91dChYKTtpZihaIT09bnVsbCl7dDAuZGVsZXRlKFopO3RyeXtCMz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6Wn0pKX1jYXRjaHt9Wj1udWxsfX0sUX1mdW5jdGlvbiBGMSgkKXtyZXR1cm5gJyR7JC5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9ZnVuY3Rpb24gVjkoJCl7bGV0W1EsSl09TShudWxsKSxbWixYXT1NKCJBWCBvZmYiKTtyZXR1cm4gYigoKT0+e2lmKCEkKXtKKG51bGwpLFgoIkFYIG9mZiIpO3JldHVybn1KKG51bGwpLFgoIkFYIHdhaXRpbmciKTtsZXQgWT1nMCgkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBHPUpTT04ucGFyc2UocS5kYXRhKTtKKEcpLFgocTUoRyk/IkFYIHVuYXZhaWxhYmxlIjpgJHtHLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtYKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57WCgiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90OlEsc3RhdHVzOlp9fXZhciBVMz1VMCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxMMz1VMChudWxsKTtmdW5jdGlvbiAkMigpe3JldHVybiBMMChVMyl9ZnVuY3Rpb24gQjUoKXtsZXQgJD1MMChMMyk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIEI5PXgwKGZ1bmN0aW9uKHtlbGVtZW50OlEsaW5kZXg6SixzY3JlZW46WixoaWdobGlnaHRlZDpYLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpHfSl7bGV0IE49UjAoUSksQj1WNShRLEopLFU9WDkoUS5mcmFtZSxaKTtpZighVSlyZXR1cm4gbnVsbDtsZXQgVj1ZOShCKTtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOk4sImRhdGEtYXgtaWQiOkIuaWQsImRhdGEtYXgtcGF0aCI6Qi5wYXRoLCJkYXRhLWF4LWxhYmVsIjpCLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpCLnZhbHVlLCJkYXRhLWF4LXJvbGUiOkIucm9sZSwiZGF0YS1heC10eXBlIjpCLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKEIuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOlYzKEIuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOlEubGFiZWx8fFYsdGl0bGU6VixvbkNsaWNrOigpPT5HKE4pLG9uTW91c2VFbnRlcjooKT0+cShOKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtVLngvWi53aWR0aCoxMDB9JWAsdG9wOmAke1UueS9aLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7VS53aWR0aC9aLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7VS5oZWlnaHQvWi5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOlg/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6WD8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsUSk9PiQuaW5kZXg9PT1RLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09US5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PVEuc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1RLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09US5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1RLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09US5zY3JlZW4uaGVpZ2h0JiZHNSgkLmVsZW1lbnQsUS5lbGVtZW50KSk7ZnVuY3Rpb24gTjkoKXtsZXR7c25hcHNob3Q6JH09JDIoKSx7aGlnaGxpZ2h0ZWRLZXk6USxzZWxlY3RlZEtleTpKLHNldEhpZ2hsaWdodGVkS2V5Olosc2V0U2VsZWN0ZWRLZXk6WH09QjUoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChZLHEpPT57bGV0IEc9UjAoWSk7cmV0dXJuIEsoQjkse2VsZW1lbnQ6WSxpbmRleDpxLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpHPT09USxzZWxlY3RlZDpHPT09SixvbkhpZ2hsaWdodDpaLG9uU2VsZWN0Olh9LEcpfSl9KX1mdW5jdGlvbiBVOSh7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpRfSl7bGV0e3NuYXBzaG90Okosc3RhdHVzOlp9PVY5KCQpLFtYLFldPU0obnVsbCksW3EsR109TShudWxsKTtiKCgpPT57aWYoISQpWShudWxsKSxHKG51bGwpfSxbJF0pO2xldCBOPV8xKCgpPT4oe3NuYXBzaG90Okosc3RhdHVzOlp9KSxbSixaXSksQj1fMSgoKT0+KHtoaWdobGlnaHRlZEtleTpYLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpHfSksW1gscV0pO3JldHVybiBLKFUzLHt2YWx1ZTpOLGNoaWxkcmVuOksoTDMse3ZhbHVlOkIsY2hpbGRyZW46UX0pfSl9ZnVuY3Rpb24gTDkoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOlEsb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c3RhdHVzOlp9PSQyKCksW1gsWV09TSghMSkscT0kJiZRO3JldHVybiBLKHUxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6WixvbkNsaWNrOkosb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6WD8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOksoYjAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gTjUoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIEsoImEiLHtocmVmOiJodHRwczovL2dpdGh1Yi5jb20vRXZhbkJhY29uL3NlcnZlLXNpbSIsdGFyZ2V0OiJfYmxhbmsiLHJlbDoibm9yZWZlcnJlciIsY2xhc3NOYW1lOmBpbmxpbmUtZmxleCBoLVszMHB4XSBtaW4tdy0wIGl0ZW1zLWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHB4LTEuNSBmb250LW1vbm8gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzY1IG5vLXVuZGVybGluZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlLzg1IGZvY3VzLXZpc2libGU6b3V0bGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXdoaXRlLzYwICR7JH1gLnRyaW0oKSwiYXJpYS1sYWJlbCI6Ik9wZW4gc2VydmUtc2ltIix0aXRsZToiT3BlbiBzZXJ2ZS1zaW0iLGNoaWxkcmVuOiJzZXJ2ZS1zaW0ifSl9ZnVuY3Rpb24gQzkoe29wZW46JCxvbkNsaWNrOlF9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgei0zMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSAkeyQ/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazpRLGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpLKE0wLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLEsoTjUse30pXX0pfWZ1bmN0aW9uIHo5KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQiI7bGV0IFE9JC8xMDczNzQxODI0O2lmKFE+PTEpcmV0dXJuYCR7US50b0ZpeGVkKFE+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoJC8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24gVTUoJCl7bGV0IFE9JC5tYXRjaCgvXihbYS16QS1aXSspLSguKykkLyk7aWYoIVEpcmV0dXJue29zOiQsdmVyc2lvbjoiIn07cmV0dXJue29zOlFbMV0sdmVyc2lvbjpRWzJdLnJlcGxhY2UoLy0vZywiLiIpfX1mdW5jdGlvbiBIOSgkKXtyZXR1cm4gVTUoJCkudmVyc2lvbnx8JH1mdW5jdGlvbiBMNSgkKXtsZXR7b3M6USx2ZXJzaW9uOkp9PVU1KCQpO3JldHVybiBKP2Ake1F9ICR7Sn1gOlF9ZnVuY3Rpb24gejUoe2Nocm9tZTokLHNjcmVlbjpRLGludGVyYWN0aXZlOko9ITEsb25CdXR0b246WixvbkNyb3duV2hlZWw6WH0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAiLGNoaWxkcmVuOlskLmJ1dHRvbnMubWFwKChZKT0+SyhlNyx7Y2hyb21lOiQsYnV0dG9uOlksaW50ZXJhY3RpdmU6SixvbkJ1dHRvbjpaLG9uV2hlZWw6SiYmWS5uYW1lPT09ImRpZ2l0YWwtY3Jvd24iP1g6dm9pZCAwfSxgYnV0dG9uLSR7WS5uYW1lfWApKSwkLmNvbXBvc2l0ZUltYWdlP0soazkse2Nocm9tZTokLGltYWdlOiQuY29tcG9zaXRlSW1hZ2UscmVjdDokLmJvZHksekluZGV4OjF9KTokLnNsaWNlJiYkLmNvcm5lcj9LKCQkLHtjaHJvbWU6JH0pOm51bGwsSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBvdmVyZmxvdy1oaWRkZW4gYmctYmxhY2siLHN0eWxlOnsuLi5DMygkLCQuc2NyZWVuLDIpLGJvcmRlclJhZGl1czp0NygkKX0sY2hpbGRyZW46UX0pXX0pfWZ1bmN0aW9uIHQ3KCQpe3JldHVybmAkeyQuc2NyZWVuUmFkaXVzLyQuc2NyZWVuLndpZHRoKjEwMH0lIC8gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi5oZWlnaHQqMTAwfSVgfWZ1bmN0aW9uIGU3KHtjaHJvbWU6JCxidXR0b246USxpbnRlcmFjdGl2ZTpKLG9uQnV0dG9uOlosb25XaGVlbDpYfSl7bGV0W1kscV09TSghMSksW0csTl09TSghMSksQj1JKG51bGwpLFU9SShudWxsKSxWPUkoWCk7Vi5jdXJyZW50PVgsYigoKT0+e2xldCB5PVUuY3VycmVudDtpZigheXx8IVgpcmV0dXJuO2xldCB4PShZMSk9PntZMS5wcmV2ZW50RGVmYXVsdCgpLFkxLnN0b3BQcm9wYWdhdGlvbigpLFYuY3VycmVudD8uKFkxLmRlbHRhWSxZMS5kZWx0YU1vZGUpfTtyZXR1cm4geS5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIseCx7cGFzc2l2ZTohMX0pLCgpPT55LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix4KX0sWyEhWF0pO2xldCBDPUomJlEudXNhZ2VQYWdlIT1udWxsJiZRLnVzYWdlIT1udWxsLEw9VCgoKT0+e2lmKEIuY3VycmVudD09PW51bGwpcmV0dXJuO0IuY3VycmVudD1udWxsLE4oITEpLFo/Lih7cGhhc2U6InVwIixidXR0b246UX0pfSxbUSxaXSksRj1UKCh5KT0+e2lmKHkuYnV0dG9uIT09MCYmeS5wb2ludGVyVHlwZT09PSJtb3VzZSIpcmV0dXJuO3kucHJldmVudERlZmF1bHQoKSx5LnN0b3BQcm9wYWdhdGlvbigpLEIuY3VycmVudD15LnBvaW50ZXJJZDt0cnl7eS5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKHkucG9pbnRlcklkKX1jYXRjaHt9TighMCksWj8uKHtwaGFzZToiZG93biIsYnV0dG9uOlF9KX0sW1EsWl0pLHo9US5vblRvcD81OjAsSD1DJiYoWXx8Ryksaz0oSD9RLmhvdmVyLng6MCkqMTAwLF89KEg/US5ob3Zlci55OjApKjEwMCxTPUcmJlEuaW1hZ2VEb3duP1EuaW1hZ2VEb3duOlEuaW1hZ2UsRT1DP3tvblBvaW50ZXJEb3duOkYsb25Qb2ludGVyVXA6TCxvblBvaW50ZXJDYW5jZWw6TCxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PntxKCExKSxMKCl9fTp7fTtyZXR1cm4gSygiZGl2Iix7cmVmOlUscm9sZTpDPyJidXR0b24iOnZvaWQgMCwiYXJpYS1sYWJlbCI6Qz9GOShRLm5hbWUpOnZvaWQgMCwiYXJpYS1oaWRkZW4iOkM/dm9pZCAwOiEwLHRpdGxlOkM/RjkoUS5uYW1lKTp2b2lkIDAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLkMzKCQsUS5mcmFtZSx6KSx0cmFuc2Zvcm06a3x8Xz9gdHJhbnNsYXRlKCR7a30lLCAke199JSlgOnZvaWQgMCx0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsY3Vyc29yOkM/InBvaW50ZXIiOnZvaWQgMCxwb2ludGVyRXZlbnRzOkM/ImF1dG8iOiJub25lIix0b3VjaEFjdGlvbjoibm9uZSJ9LC4uLkUsY2hpbGRyZW46UyYmSygiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpBOSgkLmlkZW50aWZpZXIsUyksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBzZWxlY3Qtbm9uZSIsc3R5bGU6e29iamVjdEZpdDoiZmlsbCIsZmlsdGVyOkcmJiFRLmltYWdlRG93bj8iYnJpZ2h0bmVzcygxLjQpIjp2b2lkIDAsdHJhbnNpdGlvbjoiZmlsdGVyIDAuMTJzIGVhc2UiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX0pfWZ1bmN0aW9uIEY5KCQpe3JldHVybiAkLnNwbGl0KCItIikubWFwKChRKT0+US5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStRLnNsaWNlKDEpKS5qb2luKCIgIil9ZnVuY3Rpb24gJCQoe2Nocm9tZTokfSl7aWYoISQuc2xpY2V8fCEkLmNvcm5lcilyZXR1cm4gbnVsbDtsZXR7Ym9keTpRLGNvcm5lcjpKLHNsaWNlOlp9PSQsWD1NYXRoLm1heChRLndpZHRoLUoud2lkdGgqMiwwKSxZPU1hdGgubWF4KFEuaGVpZ2h0LUouaGVpZ2h0KjIsMCkscT1be2tleToidG9wLWxlZnQiLGltYWdlOloudG9wTGVmdCxyZWN0Ont4OlEueCx5OlEueSx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6InRvcC1yaWdodCIsaW1hZ2U6Wi50b3BSaWdodCxyZWN0Ont4OlEueCtRLndpZHRoLUoud2lkdGgseTpRLnksd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJib3R0b20tbGVmdCIsaW1hZ2U6Wi5ib3R0b21MZWZ0LHJlY3Q6e3g6US54LHk6US55K1EuaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToiYm90dG9tLXJpZ2h0IixpbWFnZTpaLmJvdHRvbVJpZ2h0LHJlY3Q6e3g6US54K1Eud2lkdGgtSi53aWR0aCx5OlEueStRLmhlaWdodC1KLmhlaWdodCx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6InRvcCIsaW1hZ2U6Wi50b3AscmVjdDp7eDpRLngrSi53aWR0aCx5OlEueSx3aWR0aDpYLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImJvdHRvbSIsaW1hZ2U6Wi5ib3R0b20scmVjdDp7eDpRLngrSi53aWR0aCx5OlEueStRLmhlaWdodC1KLmhlaWdodCx3aWR0aDpYLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImxlZnQiLGltYWdlOloubGVmdCxyZWN0Ont4OlEueCx5OlEueStKLmhlaWdodCx3aWR0aDpKLndpZHRoLGhlaWdodDpZfX0se2tleToicmlnaHQiLGltYWdlOloucmlnaHQscmVjdDp7eDpRLngrUS53aWR0aC1KLndpZHRoLHk6US55K0ouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0Oll9fV07cmV0dXJuIEsoJDEse2NoaWxkcmVuOnEuZmlsdGVyKChHKT0+Ry5yZWN0LndpZHRoPjAmJkcucmVjdC5oZWlnaHQ+MCkubWFwKChHKT0+SyhrOSx7Y2hyb21lOiQsaW1hZ2U6Ry5pbWFnZSxyZWN0OkcucmVjdCx6SW5kZXg6MX0sRy5rZXkpKX0pfWZ1bmN0aW9uIGs5KHtjaHJvbWU6JCxpbWFnZTpRLHJlY3Q6Six6SW5kZXg6Wn0pe3JldHVybiBLKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkE5KCQuaWRlbnRpZmllcixRKSxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4uQzMoJCxKLFopLG9iamVjdEZpdDoiZmlsbCIscG9pbnRlckV2ZW50czoibm9uZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIEE5KCQsUSl7bGV0IEo9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChRKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7Sn1gOmYxKEopfWZ1bmN0aW9uIEMzKCQsUSxKKXtyZXR1cm57bGVmdDpDNShRLngsJC5mcmFtZS53aWR0aCksdG9wOkM1KFEueSwkLmZyYW1lLmhlaWdodCksd2lkdGg6QzUoUS53aWR0aCwkLmZyYW1lLndpZHRoKSxoZWlnaHQ6QzUoUS5oZWlnaHQsJC5mcmFtZS5oZWlnaHQpLHpJbmRleDpKfX1mdW5jdGlvbiBDNSgkLFEpe3JldHVybmAkeyQvUSoxMDB9JWB9ZnVuY3Rpb24gTzkoe25hbWU6JCxydW50aW1lOlEsY2hyb21lOkoscGxhY2Vob2xkZXJBc3NldDpaLGJ1c3k6WCxidXN5TGFiZWw6WT0iU3RhcnRpbmfigKYiLGVycm9yOnEsb25TdGFydDpHfSl7bGV0IE49TzAoJCksQj1UMVtOXSxVPVo/P251bGwsVj1VP251bGw6Sj8/bnVsbCxDPVY/e3dpZHRoOlYuc2NyZWVuLndpZHRoLGhlaWdodDpWLnNjcmVlbi5oZWlnaHR9OmEwKE4sJCksTD1zMChOLEMpLEY9VT9RJChOLFUubmFtZSk6Vj9MKlYuZnJhbWUud2lkdGgvVi5zY3JlZW4ud2lkdGg6TCpCLndpZHRoLyhCLndpZHRoLTIqQi5iZXplbFgpLHo9VT97d2lkdGg6VS53aWR0aCxoZWlnaHQ6VS5oZWlnaHR9OlY/e3dpZHRoOlYuZnJhbWUud2lkdGgsaGVpZ2h0OlYuZnJhbWUuaGVpZ2h0fTp7d2lkdGg6Qi53aWR0aCxoZWlnaHQ6Qi5oZWlnaHR9LEg9YCR7ei53aWR0aH0gLyAke3ouaGVpZ2h0fWAsaz0oei53aWR0aC96LmhlaWdodCpKJChOKSkudG9GaXhlZCgyKSxfPU49PT0idmlzaW9uIj9LKFgkLHt9KTpLKEskLHt0eXBlOk59KTtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtNSBtaW4tdy0wIHctZnVsbCIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIixzdHlsZTp7d2lkdGg6YG1pbigxMDAlLCAke0Z9cHgsICR7a31kdmgpYCxtYXhXaWR0aDpGLGFzcGVjdFJhdGlvOkh9LGNoaWxkcmVuOlU/SyhaJCx7bmFtZTpVLm5hbWUsZmFsbGJhY2s6X30pOlY/SygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOksoejUse2Nocm9tZTpWfSl9KTpffSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTdweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjokfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbTDUoUSksIiBTaW11bGF0b3IiXX0pXX0pLHEmJksoImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTJweF0gZm9udC1tb25vIG1heC13LTkwIHRleHQtY2VudGVyIixjaGlsZHJlbjpxfSksSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcsZGlzYWJsZWQ6WCxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTUgcHktMiByb3VuZGVkLWZ1bGwgdGV4dC1bMTRweF0gZm9udC1tZWRpdW0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtYPyJiZy13aGl0ZS84IHRleHQtd2hpdGUvNTUgY3Vyc29yLWRlZmF1bHQiOiJiZy13aGl0ZS8xMiB0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzE4IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltYJiZLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InNpemUtMy41IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOSkifX0pLFg/WToiU3RhcnQiXX0pXX0pfWZ1bmN0aW9uIFEkKCQsUSl7aWYoJD09PSJ3YXRjaCIpe2lmKFEuaW5jbHVkZXMoInVsdHJhIikpcmV0dXJuIDI1NTtpZihRLmluY2x1ZGVzKCJ3YXRjaC1zZS0iKXx8US5pbmNsdWRlcygiYXBwbGUtd2F0Y2gtc2UtIikpcmV0dXJuIDIzODtyZXR1cm4gMjUwfWlmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzkwO2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDM0MDtyZXR1cm4gMjgwfWZ1bmN0aW9uIEokKCQpe2lmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzQ7aWYoJD09PSJpcGFkIilyZXR1cm4gNTA7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIDU2O3JldHVybiA1Mn1mdW5jdGlvbiBLJCh7dHlwZTokfSl7bGV0IFE9VDFbJF07cmV0dXJuIEsoJDEse2NoaWxkcmVuOltLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRLndpZHRofSAke1EuaGVpZ2h0fWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpLKCJsaW5lYXJHcmFkaWVudCIse2lkOiJwbGFjZWhvbGRlci1zY3JlZW4iLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzZmYThlNiJ9KSxLKCJzdG9wIix7b2Zmc2V0OiI1NSUiLHN0b3BDb2xvcjoiIzViOTNkNiJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiM1MTg4Y2YifSldfSl9KSxLKCJyZWN0Iix7eDpRLmJlemVsWCx5OlEuYmV6ZWxZLHdpZHRoOlEud2lkdGgtMipRLmJlemVsWCxoZWlnaHQ6US5oZWlnaHQtMipRLmJlemVsWSxyeDpRLmlubmVyUmFkaXVzLGZpbGw6InVybCgjcGxhY2Vob2xkZXItc2NyZWVuKSJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46SyhRNSx7dHlwZTokfSl9KV19KX1mdW5jdGlvbiBaJCh7bmFtZTokLGZhbGxiYWNrOlF9KXtsZXRbSixaXT1NKCJsb2FkaW5nIik7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W0ohPT0ibG9hZGVkIiYmUSxKIT09ImVycm9yIiYmSygiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpZJCgkKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIG9iamVjdC1jb250YWluIixzdHlsZTp7V2Via2l0VXNlckRyYWc6Im5vbmUifSxvbkxvYWQ6KCk9PlooImxvYWRlZCIpLG9uRXJyb3I6KCk9PlooImVycm9yIil9KV19KX1mdW5jdGlvbiBYJCgpe2xldHt3aWR0aDokLGhlaWdodDpRfT1UMS52aXNpb247cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAkeyR9ICR7UX1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6ITAsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpbSygibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyODI4MmIifSksSygic3RvcCIse29mZnNldDoiNTQlIixzdG9wQ29sb3I6IiMxMjEyMTQifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDcwNzA4In0pXX0pLEsoImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMzEzNTNhIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjQ4JSIsc3RvcENvbG9yOiIjMGEwYjBkIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KSxLKCJyYWRpYWxHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItbGVucyIsY3g6IjUwJSIsY3k6IjQ2JSIscjoiNjAlIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzIwMjgzMiJ9KSxLKCJzdG9wIix7b2Zmc2V0OiI3MiUiLHN0b3BDb2xvcjoiIzA5MGEwZCJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSldfSksSygicGF0aCIse2Q6Ik05NSAxNzdDOTUgMTE5IDE0NyA4NiAyMTggOTFDMjU3IDk0IDI4NiAxMTEgMzIwIDExMUMzNTQgMTExIDM4MyA5NCA0MjIgOTFDNDkzIDg2IDU0NSAxMTkgNTQ1IDE3N1YyMjJDNTQ1IDI3OCA1MDEgMzExIDQ0MyAzMTBDMzk4IDMwOSAzNzEgMjg2IDM0NSAyNjhDMzI5IDI1NyAzMTEgMjU3IDI5NSAyNjhDMjY5IDI4NiAyNDIgMzA5IDE5NyAzMTBDMTM5IDMxMSA5NSAyNzggOTUgMjIyVjE3N1oiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsKSIsc3Ryb2tlOiIjM2QzZDQyIixzdHJva2VXaWR0aDoiNyJ9KSxLKCJwYXRoIix7ZDoiTTExNyAxODFDMTE3IDEzNCAxNTcgMTEyIDIyMCAxMTZDMjYwIDExOSAyODcgMTM2IDMyMCAxMzZDMzUzIDEzNiAzODAgMTE5IDQyMCAxMTZDNDgzIDExMiA1MjMgMTM0IDUyMyAxODFWMjE3QzUyMyAyNjMgNDg4IDI4NyA0MzkgMjg3QzM5OSAyODcgMzY5IDI2NCAzNDUgMjUwQzMyOSAyNDAgMzExIDI0MCAyOTUgMjUwQzI3MSAyNjQgMjQxIDI4NyAyMDEgMjg3QzE1MiAyODcgMTE3IDI2MyAxMTcgMjE3VjE4MVoiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzKSIsc3Ryb2tlOiIjMTcxODFiIixzdHJva2VXaWR0aDoiNSJ9KSxLKCJwYXRoIix7ZDoiTTE0MyAxODZDMTQ1IDE0OCAxNzYgMTM1IDIyNiAxMzhDMjY0IDE0MSAyODkgMTU2IDMyMCAxNTZDMzUxIDE1NiAzNzYgMTQxIDQxNCAxMzhDNDY0IDEzNSA0OTUgMTQ4IDQ5NyAxODZWMjEzQzQ5NyAyNTAgNDY5IDI2NiA0MzIgMjY2QzM5NCAyNjYgMzY5IDI0NiAzNDMgMjM1QzMyOCAyMjkgMzEyIDIyOSAyOTcgMjM1QzI3MSAyNDYgMjQ2IDI2NiAyMDggMjY2QzE3MSAyNjYgMTQzIDI1MCAxNDMgMjEzVjE4NloiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMpIixzdHJva2U6IiMyNjJhMmYiLHN0cm9rZVdpZHRoOiIyIn0pLEsoInBhdGgiLHtkOiJNMTUxIDE3MUMxNzkgMTUwIDIxNyAxNDcgMjUxIDE1NE0zODkgMTU0QzQyMyAxNDcgNDYxIDE1MCA0ODkgMTcxIixzdHJva2U6IiM0ZTUzNWEiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KSxLKCJwYXRoIix7ZDoiTTI3NyAyMzNDMjg5IDIyNCAzMDQgMjE5IDMyMCAyMTlDMzM2IDIxOSAzNTEgMjI0IDM2MyAyMzMiLHN0cm9rZToiIzNiNDA0NiIsc3Ryb2tlV2lkdGg6IjQiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pfWZ1bmN0aW9uIFkkKCQpe2xldCBRPWBncmlkL2FwaS9kZXZpY2UtcGxhY2Vob2xkZXItYXNzZXQ/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOmYxKFEpfWZ1bmN0aW9uIFEyKHtvcGVuOiQsd2lkdGg6USxjaGlsZHJlbjpKLHN0eWxlOlosc2lkZTpYPSJyaWdodCJ9KXtyZXR1cm4gSygiYXNpZGUiLHtjbGFzc05hbWU6YGZpeGVkIHotMzUgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gYmctcGFuZWwtYmcgdGV4dC13aGl0ZS85MCBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wgJHtYPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCBsZWZ0LTAgcm91bmRlZC1ub25lIGJvcmRlci0wIGJvcmRlci1yIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzhweF8wXzMycHhfcmdiYSgwLDAsMCwwLjM1KV0iOiJ0b3AtMyBib3R0b20tMyByaWdodC0zIHJvdW5kZWQtWzE0cHhdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSJ9YCxzdHlsZTp7d2lkdGg6USx0cmFuc2Zvcm06JD8idHJhbnNsYXRlWCgwKSI6WD09PSJsZWZ0Ij8idHJhbnNsYXRlWCgtMTAwJSkiOiJ0cmFuc2xhdGVYKGNhbGMoMTAwJSArIDI0cHgpKSIsb3BhY2l0eTokPzE6MCxwb2ludGVyRXZlbnRzOiQ/ImF1dG8iOiJub25lIiwuLi5afSwiYXJpYS1oaWRkZW4iOiEkLGNoaWxkcmVuOkp9KX1mdW5jdGlvbiBKMih7Y2hpbGRyZW46JCxzdHlsZTpRfSl7cmV0dXJuIEsoImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yLjUgcHgtMi41IHB5LTEuNSBwbC0zIixzdHlsZTpRLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBNOSh7Y2hpbGRyZW46JH0pe3JldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gSDUoe29uQ2xpY2s6JCxhcmlhTGFiZWw6UT0iQ2xvc2UgcGFuZWwiLHRpdGxlOkosaWNvblNpemU6Wj0xNn0pe3JldHVybiBLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6JCxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgcC0wIHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjpRLHRpdGxlOkosY2hpbGRyZW46SyhYMCx7c2l6ZTpaLHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIF85KCQsUSl7bGV0W0osWl09TShudWxsKTtyZXR1cm4gYigoKT0+e2lmKCFRfHwhJClyZXR1cm47bGV0IFg9ITEsWT1hc3luYygpPT57dHJ5e2xldCBOPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFYKVooTil9Y2F0Y2h7fX07WSgpO2xldCBxPXNldEludGVydmFsKFksNTAwMCk7cmV0dXJuKCk9PntYPSEwLGNsZWFySW50ZXJ2YWwocSl9fSxbJCxRXSksSn1mdW5jdGlvbiBXOSh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPT09MClyZXR1cm4gbnVsbDtsZXR7ZXN0aW1hdGVkQWRkaXRpb25hbDpRLGF2YWlsYWJsZUJ5dGVzOkosdG90YWxCeXRlczpaLHJ1bm5pbmdTaW11bGF0b3JzOlh9PSQsWT1NYXRoLm1heCgwLE1hdGgubWluKDEsMS1KL1opKSxxPVgrUSxHPVE9PT0wPyIjZTY2IjpRPD0xPyIjZTlhMTNiIjoiIzNiMyIsTj1ZPjAuOT8iI2U2NiI6WT4wLjc1PyIjZTlhMTNiIjoiIzNiMyI7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggbWF4LXctZnVsbCBtaW4tdy0wIGZsZXgtbm93cmFwIGl0ZW1zLWNlbnRlciBnYXAtMS41IG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6R319KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIHRydW5jYXRlIixjaGlsZHJlbjpbSygic3BhbiIse2NoaWxkcmVuOltYLCIvIixxLCIgc2ltcyJdfSksSygic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80MCIsY2hpbGRyZW46IiDCtyAifSksSygic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W3o5KEopLCIgZnJlZSJdfSldfSksSygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gc2hyaW5rLTAgYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Sygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhZKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOk59fSl9KV19KX1mdW5jdGlvbiBQOSh7dHlwZTokLHNpemU6UT0yMCxzY3JlZW5PbjpKPSExfSl7bGV0IFo9e3dpZHRoOlEsaGVpZ2h0OlEsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS42LHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gSygic3ZnIix7Li4uWixjaGlsZHJlbjpbSiYmSygicmVjdCIse3g6IjUiLHk6IjMiLHdpZHRoOiIxNSIsaGVpZ2h0OiIxOSIscng6IjEuNjUiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxLKCJyZWN0Iix7eDoiNCIseToiMi41Iix3aWR0aDoiMTYiLGhlaWdodDoiMTkiLHJ4OiIyLjUifSksSygibGluZSIse3gxOiIxMiIseTE6IjE4LjUiLHgyOiIxMiIseTI6IjE4LjUifSldfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46W0soInJlY3QiLHt4OiI2LjUiLHk6IjciLHdpZHRoOiIxMSIsaGVpZ2h0OiIxMCIscng6IjMifSksSygicGF0aCIse2Q6Ik04LjUgN2wuNi0zLjJBMS41IDEuNSAwIDAgMSAxMC42IDIuNWgyLjhhMS41IDEuNSAwIDAgMSAxLjUgMS4zTDE1LjUgNyJ9KSxLKCJwYXRoIix7ZDoiTTguNSAxN2wuNiAzLjJhMS41IDEuNSAwIDAgMCAxLjUgMS4zaDIuOGExLjUgMS41IDAgMCAwIDEuNS0xLjNsLjYtMy4yIn0pXX0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gSygic3ZnIix7Li4uWixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTMgMTFhNCA0IDAgMCAxIDQtNGgxMGE0IDQgMCAwIDEgNCA0djIuNWEyLjUgMi41IDAgMCAxLTIuNSAyLjVjLTEuOCAwLTIuNS0xLjItMy41LTEuOC0uOS0uNS0xLjYtLjctMi41LS43cy0xLjYuMi0yLjUuN2MtMSAuNi0xLjcgMS44LTMuNSAxLjhBMi41IDIuNSAwIDAgMSAzIDEzLjV6In0pfSk7ZGVmYXVsdDpyZXR1cm4gSygic3ZnIix7Li4uWixjaGlsZHJlbjpbSiYmSygicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxLKCJyZWN0Iix7eDoiNi41Iix5OiIyLjUiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIuOCJ9KSxLKCJsaW5lIix7eDE6IjEwLjUiLHkxOiI1Iix4MjoiMTMuNSIseTI6IjUifSldfSl9fWZ1bmN0aW9uIEQ5KHtkZXZpY2U6JCxhY3RpdmU6USxzdGFydGluZzpKLHNodXR0aW5nRG93bjpaLG9uU2VsZWN0Olgsb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsRz0kLnN0YXRlPT09IkJvb3RlZCIsTj1PMCgkLm5hbWUpLEI9SDkoJC5ydW50aW1lKSxVPXE/IlN0cmVhbWluZyI6Sj9HPyJTdGFydGluZ+KApiI6IkJvb3RpbmfigKYiOlo/IlNodXR0aW5nIGRvd27igKYiOkc/IkJvb3RlZCI6bnVsbCxWPXE/IiMzNGQzOTkiOkc/IiNlOWExM2IiOm51bGwsQz1xfHxHLEw9cT9RPyJiZy1bIzI2MzY0Y10iOiJiZy1bIzIwMmIzYV0iOlE/ImJnLXdoaXRlLzE1IjoiYmctd2hpdGUvNiIsRj1xPyJ0ZXh0LVsjZDJlN2ZmXSI6UT8idGV4dC13aGl0ZS85MCI6InRleHQtd2hpdGUvNTUiO3JldHVybiBLKCJkaXYiLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjAsImFyaWEtcHJlc3NlZCI6USxvbkNsaWNrOlgsb25LZXlEb3duOih6KT0+e2lmKHoua2V5PT09IkVudGVyInx8ei5rZXk9PT0iICIpei5wcmV2ZW50RGVmYXVsdCgpLFgoKX0sY2xhc3NOYW1lOmBncm91cCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10gJHtRPyJiZy13aGl0ZS8xMCB0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS84In1gLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6YHJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiAke0x9YCxjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZTpGLGNoaWxkcmVuOksoUDkse3R5cGU6TixzY3JlZW5PbjpCb29sZWFuKHEpfSl9KSxWJiYhcSYmSygic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAuNSByaWdodC0wLjUgc2l6ZS0xLjUgcm91bmRlZC1mdWxsIHJpbmctMiByaW5nLVsjMWMxYzFlXSIsc3R5bGU6e2JhY2tncm91bmQ6Vn19KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiQubmFtZX0pLFUmJksoImRpdiIse2NsYXNzTmFtZTpgdHJ1bmNhdGUgdGV4dC1bMTFweF0gbGVhZGluZy10aWdodCAke3E/InRleHQtWyMzNGQzOTldIjpRPyJ0ZXh0LXdoaXRlLzc1IjoidGV4dC13aGl0ZS80NSJ9YCxjaGlsZHJlbjpVfSldfSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy10cmFpbGluZy1zbG90IixjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIHctOCBoLTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0YWJ1bGFyLW51bXMgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEyc10gJHtRPyJ0ZXh0LXdoaXRlLzg1IjoidGV4dC13aGl0ZS80MCJ9ICR7Qz8iZ3JvdXAtaG92ZXI6b3BhY2l0eS0wIGdyb3VwLWZvY3VzLXdpdGhpbjpvcGFjaXR5LTAiOiIifWAsY2hpbGRyZW46Qn0pLEMmJksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsdGl0bGU6Wj8iU2h1dHRpbmcgZG93buKApiI6IlNodXQgZG93biBzaW11bGF0b3IiLCJhcmlhLWxhYmVsIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsb25DbGljazooeik9Pnt6LnByZXZlbnREZWZhdWx0KCksei5zdG9wUHJvcGFnYXRpb24oKSxZKCl9LGRpc2FibGVkOlosY2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTUgcm91bmRlZC1tZCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpvcGFjaXR5LTEwMCBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzLGJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdICR7UT8idGV4dC13aGl0ZS84MCBob3ZlcjpiZy13aGl0ZS8yMCI6InRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMTIgaG92ZXI6dGV4dC13aGl0ZSJ9YCxjaGlsZHJlbjpLKFgwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjIuMn0pfSldfSldfSl9dmFyIEsyPSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpIix6Mz0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50KSI7dmFyIHEkPTEyO2Z1bmN0aW9uIFQ5KHtvcGVuOiQsb25DbG9zZTpRLHdpZHRoOkosc2lkZTpaPSJyaWdodCIsZGV2aWNlczpYLHRvdGFsOlk9MCxoYXNNb3JlOnE9ITEsb25Mb2FkTW9yZTpHLG9uTG9hZEFsbDpOLG9uUmVzZXRQYWdlOkIsc2VsZWN0ZWRVZGlkOlUsb25TZWxlY3Q6VixzdGFydGluZzpDLHNodXR0aW5nRG93bjpMLG9uU2h1dGRvd246Rn0pe2xldCBIPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpmMSgiZ3JpZC9hcGkvbWVtb3J5IikpLGs9XzkoSCwkKSxbXyxTXT1NKCIiKSxFPV8xKCgpPT57bGV0IGY9Xy50cmltKCkudG9Mb3dlckNhc2UoKTtpZighZnx8IVgpcmV0dXJuIFg7cmV0dXJuIFguZmlsdGVyKCh1KT0+dS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZil8fEw1KHUucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmKSl9LFtYLF9dKSx5PUkoITEpO2IoKCk9PntsZXQgZj0hIV8udHJpbSgpO2lmKGYmJnEpTj8uKCk7ZWxzZSBpZighZiYmeS5jdXJyZW50KUI/LigpO3kuY3VycmVudD1mfSxbXyxxLE4sQl0pO2xldCB4PUkobnVsbCk7cmV0dXJuIEsoUTIse29wZW46JCx3aWR0aDpKLHNpZGU6WixzdHlsZTp7YmFja2dyb3VuZENvbG9yOksyfSxjaGlsZHJlbjpbSyhKMix7c3R5bGU6e2p1c3RpZnlDb250ZW50OiJmbGV4LXN0YXJ0IixwYWRkaW5nTGVmdDoxNixwYWRkaW5nVG9wOjE2LGdhcDo0fSxjaGlsZHJlbjpbSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlEsY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiQ2xvc2UgZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjohMCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46SyhNMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxLKE41LHt9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6InB4LTQgcGItMiBwdC0wLjUgc2hyaW5rLTAiLGNoaWxkcmVuOksoImxhYmVsIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgaC04IHJvdW5kZWQtbGcgYmctd2hpdGUvNiBmb2N1cy13aXRoaW46Ymctd2hpdGUvMTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10iLGNoaWxkcmVuOltLKFQyLHtzaXplOjE0LHN0cm9rZVdpZHRoOjIsY2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIHNocmluay0wIn0pLEsoImlucHV0Iix7dmFsdWU6XyxvbkNoYW5nZTooZik9PlMoZi50YXJnZXQudmFsdWUpLHBsYWNlaG9sZGVyOiJTZWFyY2giLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgb3V0bGluZS1ub25lIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvOTAgcGxhY2Vob2xkZXI6dGV4dC13aGl0ZS80MCJ9KSxfJiZLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc2VhcmNoIixvbkNsaWNrOigpPT5TKCIiKSxjbGFzc05hbWU6InNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNCByb3VuZGVkLWZ1bGwgYmctd2hpdGUvMTUgdGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8yNSIsY2hpbGRyZW46SyhYMCx7c2l6ZTo5LHN0cm9rZVdpZHRoOjN9KX0pXX0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4LTEgbWluLWgtMCIsY2hpbGRyZW46W0soImRpdiIse3JlZjp4LG9uU2Nyb2xsOigpPT57aWYoXy50cmltKCl8fCFxfHwhRylyZXR1cm47bGV0IGY9eC5jdXJyZW50O2lmKCFmKXJldHVybjtpZihmLnNjcm9sbFRvcCtmLmNsaWVudEhlaWdodD49Zi5zY3JvbGxIZWlnaHQtMjQwKUcoKX0sY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcHgtNCBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOkU9PT1udWxsP0soRyQse30pOkUubGVuZ3RoPT09MD9LKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktNiB0ZXh0LXdoaXRlLzQwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpfPyJObyBtYXRjaGluZyBzaW11bGF0b3JzLiI6Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6SygkMSx7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicHQtMSBwYi0xIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIixjaGlsZHJlbjpFLm1hcCgoZik9PksoRDkse2RldmljZTpmLGFjdGl2ZTpmLmRldmljZT09PVUsc3RhcnRpbmc6ISFDW2YuZGV2aWNlXSxzaHV0dGluZ0Rvd246ISFMW2YuZGV2aWNlXSxvblNlbGVjdDooKT0+VihmLmRldmljZSksb25TaHV0ZG93bjooKT0+RihmLmRldmljZSl9LGYuZGV2aWNlKSl9KSwhXyYmcSYmSygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTIgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zNSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46WD9gJHtYLmxlbmd0aH0gb2YgJHtZfWA6bnVsbH0pXX0pfSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtdG9wLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICR7SzJ9IDAlLCAke3ozfSAxMDAlKWB9fSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byB0b3AsICR7SzJ9IDAlLCAke3ozfSAxMDAlKWB9fSldfSksSyhCJCx7cmVwb3J0Omt9KV19KX1mdW5jdGlvbiBHJCgpe3JldHVybiBLKCQxLHtjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOnEkfSwoJCxRKT0+SyhWJCx7aW5kZXg6UX0sUSkpfSldfSl9ZnVuY3Rpb24gViQoe2luZGV4OiR9KXtsZXQgUT1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLEo9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxaPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxLKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7UX1gfSksSygic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke0p9YH0pXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtafWB9KV19KX1mdW5jdGlvbiBCJCh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpLKFc5LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gRjUoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOlEsb25Qb2ludGVyRG93bjpKLGFyaWFMYWJlbDpaLHNpZGU6WD0icmlnaHQifSl7bGV0W1kscV09TSghMSksW0csTl09TSghMSksQj1ZfHxHLFU9KFg9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBLKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpaLCJhcmlhLWhpZGRlbiI6IVEsb25Qb2ludGVyRG93bjooQyk9PntOKCEwKSxKKEMpfSxvblBvaW50ZXJVcDooKT0+TighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5OKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtYPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7UT8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOlg9PT0ibGVmdCI/e2xlZnQ6VX06e3JpZ2h0OlV9LGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Qj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEsoImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Qj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIHc5KCl7bGV0WyQsUV09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIGIoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgSj13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWj0oKT0+UShKLm1hdGNoZXMpO3JldHVybiBaKCksSi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5KLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfWZ1bmN0aW9uIGs1KCl7bGV0WyQsUV09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gYigoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBKPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFo9KCk9PlEoSi5tYXRjaGVzKTtyZXR1cm4gWigpLEouYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+Si5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH12YXIgRTk9MjgwO3ZhciBIMz0id2lkdGggNzBtcyBsaW5lYXIiLEYzPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLEk5PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIseTk9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixPNT0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsYjk9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsUzk9IjAuMTZzIix4OT0iMC4ycyIsdjk9NSxqOT17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxSOT17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSxnOT17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxoOT17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxBNT1udWxsO2Z1bmN0aW9uIGY5KCl7aWYoQTUhPW51bGwpcmV0dXJuIEE1O2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gQTU9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksQTV9dmFyIE4kPTQwLG05PTE0LHA5PTI0MCx1OT0zMCxsOT0wLjE1LFUkPTgwLGQ5PTE1MCxjOT0yNTAsazM9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uIE01KCQsUSxKLFope2xldCBYPSQqMyxZPVE+MD9NYXRoLm1heCgxODAsUS00OCk6WCxxPUo+MCYmTnVtYmVyLmlzRmluaXRlKFopJiZaPjA/TWF0aC5tYXgoMTgwLChKLTEzNikqWik6WDtyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKFgsWSxxKSl9ZnVuY3Rpb24gaDAoJCxRLEosWixYKXtsZXQgWT1NNShRLEosWixYKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiByOSgkLFEsSixaLFgpe2xldCBZPU51bWJlci5pc0Zpbml0ZShYKT8kKlg6JDtyZXR1cm4gaDAoWSwkLFEsSixaKX1mdW5jdGlvbiBfNSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBRPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpRKS9RfWZ1bmN0aW9uIEEzKCQsUSl7aWYoJDw9MHx8UTw9MClyZXR1cm4gMDtsZXQgSj0wLjU1LFo9JCpRKkovKFErSiokKTtyZXR1cm4gTWF0aC5taW4oTiQsWil9ZnVuY3Rpb24gbzkoJCxRLEope2xldCBaPSQsWD1KO2ZvcihsZXQgWSBvZiBRKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8WClaPVksWD1xfXJldHVybiBafWZ1bmN0aW9uIGk5KCQpe2xldHtmcm9tOlEsdG86Six2ZWxvY2l0eTpaLHN0aWZmbmVzczpYLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxOPTAuNCxCPTAuMDMzMzMzMzMzMzMzMzMzMzMsVT1RLFY9WixDPXBlcmZvcm1hbmNlLm5vdygpLEw9MCxGPSExLHo9KEgpPT57aWYoRilyZXR1cm47bGV0IGs9TWF0aC5taW4oKEgtQykvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTtDPUg7bGV0IF89LVgqKFUtSiktWSpWO2lmKFYrPV8qayxVKz1WKmssTWF0aC5hYnMoVik8MC40JiZNYXRoLmFicyhVLUopPDAuNCl7cShKKSxHPy4oKTtyZXR1cm59cShVKSxMPXJlcXVlc3RBbmltYXRpb25GcmFtZSh6KX07cmV0dXJuIEw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHopLCgpPT57aWYoRj0hMCxMKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwpfX1mdW5jdGlvbiBuOSgkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBRPSRbJC5sZW5ndGgtMV0sSj0kWzBdO2ZvcihsZXQgWD0kLmxlbmd0aC0xO1g+PTA7WC0tKWlmKFEudC0kW1hdLnQ+PVUkKXtKPSRbWF07YnJlYWt9bGV0IFo9KFEudC1KLnQpLzEwMDA7cmV0dXJuIFo+MD8oUS54LUoueCkvWjowfXZhciBhOT0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIEwkKHthcmM6JCxwaGFzZTpRLHJlZHVjZWRNb3Rpb246SixoaWdoQ29udHJhc3Q6Wixmb2N1c1Zpc2libGU6WH0pe2xldCBZPVEhPT0iaWRsZSIscT1aPzEuMTI6MSxHPUo/MTpqOVtRXSxOPWc5W1FdKnEsQj1aPzE6aDlbUV0sVT1ZP1M5Ong5LFY9WT95OTpPNSxDPVkmJmY5KCk/Yjk6VixMPUo/Im5vbmUiOmB0cmFuc2Zvcm0gJHtVfSAke0N9YCxGPUo/Im5vbmUiOmBzdHJva2UgJHtVfSAke1Z9LCBzdHJva2Utd2lkdGggJHtVfSAke1Z9YCx6PSQudmlld0JveFNpemUsSD0kLmQsaz17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOkwsd2lsbENoYW5nZTpKP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gSygic3ZnIix7d2lkdGg6eixoZWlnaHQ6eix2aWV3Qm94OmAwIDAgJHt6fSAke3p9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbSygiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soInBhdGgiLHtkOkgsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOih2OSoyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpYPzAuOTU6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7TzV9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLEsoInBhdGgiLHtkOkgsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olg/MC43OjAsdHJhbnNpdGlvbjpKPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke081fWB9fSldfSksSygiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOmssY2hpbGRyZW46SygiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soInBhdGgiLHtkOkgsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpOKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxCKzAuMDgpLHRyYW5zaXRpb246YCR7Rn0sIG9wYWNpdHkgJHtVfSAke1Z9YCxmaWx0ZXI6YTl9fSksSygicGF0aCIse2Q6SCxzdHJva2U6UjlbUV0sc3Ryb2tlV2lkdGg6TixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OkIsdHJhbnNpdGlvbjpgJHtGfSwgb3BhY2l0eSAke1V9ICR7Vn1gLGZpbHRlcjphOX19KV19KX0pXX0pfWZ1bmN0aW9uIHM5KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOlEsc3RyZWFtQ29uZmlnOkosY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pe2xldCBZPWs1KCkscT13OSgpLFtHLE5dPU0oITEpLEI9XzEoKCk9PiQzKHt0eXBlOlEsY29uZmlnOko/P251bGwsY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pLFtRLEosWixYXSksVT0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIEsoImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooVik9PntOKFYuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5OKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46SyhMJCx7YXJjOkIscGhhc2U6VSxyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfWZ1bmN0aW9uIEMkKCQpe2lmKCEkfHx0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybjtsZXQgUT1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtKLnR5cGU9InRleHQvY3NzIixRLmFwcGVuZENoaWxkKEopLEouc3R5bGVTaGVldD9KLnN0eWxlU2hlZXQuY3NzVGV4dD0kOkouYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJCkpfXZhciB6JD0oJCk9Pntzd2l0Y2goJCl7Y2FzZSJzdWNjZXNzIjpyZXR1cm4gayQ7Y2FzZSJpbmZvIjpyZXR1cm4gTyQ7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gQSQ7Y2FzZSJlcnJvciI6cmV0dXJuIE0kO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxIJD1BcnJheSgxMikuZmlsbCgwKSxGJD0oe3Zpc2libGU6JCxjbGFzc05hbWU6UX0pPT57cmV0dXJuIGouY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlsic29ubmVyLWxvYWRpbmctd3JhcHBlciIsUV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwiZGF0YS12aXNpYmxlIjokfSxqLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLXNwaW5uZXIifSxIJC5tYXAoKEosWik9PmouY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItbG9hZGluZy1iYXIiLGtleTpgc3Bpbm5lci1iYXItJHtafWB9KSkpKX0sayQ9ai5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxqLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuODU3LTkuODA5YS43NS43NSAwIDAwLTEuMjE0LS44ODJsLTMuNDgzIDQuNzktMS44OC0xLjg4YS43NS43NSAwIDEwLTEuMDYgMS4wNjFsMi41IDIuNWEuNzUuNzUgMCAwMDEuMTM3LS4wODlsNC01LjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksQSQ9ai5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxqLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxPJD1qLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGouY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03LTRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek05IDlhLjc1Ljc1IDAgMDAwIDEuNWguMjUzYS4yNS4yNSAwIDAxLjI0NC4zMDRsLS40NTkgMi4wNjZBMS43NSAxLjc1IDAgMDAxMC43NDcgMTVIMTFhLjc1Ljc1IDAgMDAwLTEuNWgtLjI1M2EuMjUuMjUgMCAwMS0uMjQ0LS4zMDRsLjQ1OS0yLjA2NkExLjc1IDEuNzUgMCAwMDkuMjUzIDlIOXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxNJD1qLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGouY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS04LTVhLjc1Ljc1IDAgMDEuNzUuNzV2NC41YS43NS43NSAwIDAxLTEuNSAwdi00LjVBLjc1Ljc1IDAgMDExMCA1em0wIDEwYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyeiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLF8kPWouY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxqLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLGouY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpLFckPSgpPT57bGV0WyQsUV09ai51c2VTdGF0ZShkb2N1bWVudC5oaWRkZW4pO3JldHVybiBqLnVzZUVmZmVjdCgoKT0+e2xldCBKPSgpPT57UShkb2N1bWVudC5oaWRkZW4pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsSiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixKKX0sW10pLCR9LE8zPTE7Y2xhc3MgJDZ7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmliZT0oJCk9PntyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKCQpLCgpPT57bGV0IFE9dGhpcy5zdWJzY3JpYmVycy5pbmRleE9mKCQpO3RoaXMuc3Vic2NyaWJlcnMuc3BsaWNlKFEsMSl9fSx0aGlzLnB1Ymxpc2g9KCQpPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChRKT0+USgkKSl9LHRoaXMuYWRkVG9hc3Q9KCQpPT57dGhpcy5wdWJsaXNoKCQpLHRoaXMudG9hc3RzPVsuLi50aGlzLnRvYXN0cywkXX0sdGhpcy5jcmVhdGU9KCQpPT57dmFyIFE7bGV0e21lc3NhZ2U6SiwuLi5afT0kLFg9dHlwZW9mKCQ9PW51bGw/dm9pZCAwOiQuaWQpPT09Im51bWJlciJ8fCgoUT0kLmlkKT09bnVsbD92b2lkIDA6US5sZW5ndGgpPjA/JC5pZDpPMysrLFk9dGhpcy50b2FzdHMuZmluZCgoRyk9PntyZXR1cm4gRy5pZD09PVh9KSxxPSQuZGlzbWlzc2libGU9PT12b2lkIDA/ITA6JC5kaXNtaXNzaWJsZTtpZih0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoWCkpdGhpcy5kaXNtaXNzZWRUb2FzdHMuZGVsZXRlKFgpO2lmKFkpdGhpcy50b2FzdHM9dGhpcy50b2FzdHMubWFwKChHKT0+e2lmKEcuaWQ9PT1YKXJldHVybiB0aGlzLnB1Ymxpc2goey4uLkcsLi4uJCxpZDpYLHRpdGxlOkp9KSx7Li4uRywuLi4kLGlkOlgsZGlzbWlzc2libGU6cSx0aXRsZTpKfTtyZXR1cm4gR30pO2Vsc2UgdGhpcy5hZGRUb2FzdCh7dGl0bGU6SiwuLi5aLGRpc21pc3NpYmxlOnEsaWQ6WH0pO3JldHVybiBYfSx0aGlzLmRpc21pc3M9KCQpPT57aWYoJCl0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoJCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKFEpPT5RKHtpZDokLGRpc21pc3M6ITB9KSkpO2Vsc2UgdGhpcy50b2FzdHMuZm9yRWFjaCgoUSk9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEopPT5KKHtpZDpRLmlkLGRpc21pc3M6ITB9KSl9KTtyZXR1cm4gJH0sdGhpcy5tZXNzYWdlPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLG1lc3NhZ2U6JH0pfSx0aGlzLmVycm9yPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLG1lc3NhZ2U6JCx0eXBlOiJlcnJvciJ9KX0sdGhpcy5zdWNjZXNzPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLHR5cGU6InN1Y2Nlc3MiLG1lc3NhZ2U6JH0pfSx0aGlzLmluZm89KCQsUSk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLlEsdHlwZToiaW5mbyIsbWVzc2FnZTokfSl9LHRoaXMud2FybmluZz0oJCxRKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uUSx0eXBlOiJ3YXJuaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5sb2FkaW5nPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6JH0pfSx0aGlzLnByb21pc2U9KCQsUSk9PntpZighUSlyZXR1cm47bGV0IEo9dm9pZCAwO2lmKFEubG9hZGluZyE9PXZvaWQgMClKPXRoaXMuY3JlYXRlKHsuLi5RLHByb21pc2U6JCx0eXBlOiJsb2FkaW5nIixtZXNzYWdlOlEubG9hZGluZyxkZXNjcmlwdGlvbjp0eXBlb2YgUS5kZXNjcmlwdGlvbiE9PSJmdW5jdGlvbiI/US5kZXNjcmlwdGlvbjp2b2lkIDB9KTtsZXQgWj1Qcm9taXNlLnJlc29sdmUoJCBpbnN0YW5jZW9mIEZ1bmN0aW9uPyQoKTokKSxYPUohPT12b2lkIDAsWSxxPVoudGhlbihhc3luYyhOKT0+e2lmKFk9WyJyZXNvbHZlIixOXSxqLmlzVmFsaWRFbGVtZW50KE4pKVg9ITEsdGhpcy5jcmVhdGUoe2lkOkosdHlwZToiZGVmYXVsdCIsbWVzc2FnZTpOfSk7ZWxzZSBpZihEJChOKSYmIU4ub2spe1g9ITE7bGV0IFU9dHlwZW9mIFEuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IFEuZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtOLnN0YXR1c31gKTpRLmVycm9yLFY9dHlwZW9mIFEuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IFEuZGVzY3JpcHRpb24oYEhUVFAgZXJyb3IhIHN0YXR1czogJHtOLnN0YXR1c31gKTpRLmRlc2NyaXB0aW9uLEw9dHlwZW9mIFU9PT0ib2JqZWN0IiYmIWouaXNWYWxpZEVsZW1lbnQoVSk/VTp7bWVzc2FnZTpVfTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246ViwuLi5MfSl9ZWxzZSBpZihOIGluc3RhbmNlb2YgRXJyb3Ipe1g9ITE7bGV0IFU9dHlwZW9mIFEuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IFEuZXJyb3IoTik6US5lcnJvcixWPXR5cGVvZiBRLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBRLmRlc2NyaXB0aW9uKE4pOlEuZGVzY3JpcHRpb24sTD10eXBlb2YgVT09PSJvYmplY3QiJiYhai5pc1ZhbGlkRWxlbWVudChVKT9VOnttZXNzYWdlOlV9O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpWLC4uLkx9KX1lbHNlIGlmKFEuc3VjY2VzcyE9PXZvaWQgMCl7WD0hMTtsZXQgVT10eXBlb2YgUS5zdWNjZXNzPT09ImZ1bmN0aW9uIj9hd2FpdCBRLnN1Y2Nlc3MoTik6US5zdWNjZXNzLFY9dHlwZW9mIFEuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IFEuZGVzY3JpcHRpb24oTik6US5kZXNjcmlwdGlvbixMPXR5cGVvZiBVPT09Im9iamVjdCImJiFqLmlzVmFsaWRFbGVtZW50KFUpP1U6e21lc3NhZ2U6VX07dGhpcy5jcmVhdGUoe2lkOkosdHlwZToic3VjY2VzcyIsZGVzY3JpcHRpb246ViwuLi5MfSl9fSkuY2F0Y2goYXN5bmMoTik9PntpZihZPVsicmVqZWN0IixOXSxRLmVycm9yIT09dm9pZCAwKXtYPSExO2xldCBCPXR5cGVvZiBRLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBRLmVycm9yKE4pOlEuZXJyb3IsVT10eXBlb2YgUS5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgUS5kZXNjcmlwdGlvbihOKTpRLmRlc2NyaXB0aW9uLEM9dHlwZW9mIEI9PT0ib2JqZWN0IiYmIWouaXNWYWxpZEVsZW1lbnQoQik/Qjp7bWVzc2FnZTpCfTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246VSwuLi5DfSl9fSkuZmluYWxseSgoKT0+e2lmKFgpdGhpcy5kaXNtaXNzKEopLEo9dm9pZCAwO1EuZmluYWxseT09bnVsbHx8US5maW5hbGx5LmNhbGwoUSl9KSxHPSgpPT5uZXcgUHJvbWlzZSgoTixCKT0+cS50aGVuKCgpPT5ZWzBdPT09InJlamVjdCI/QihZWzFdKTpOKFlbMV0pKS5jYXRjaChCKSk7aWYodHlwZW9mIEohPT0ic3RyaW5nIiYmdHlwZW9mIEohPT0ibnVtYmVyIilyZXR1cm57dW53cmFwOkd9O2Vsc2UgcmV0dXJuIE9iamVjdC5hc3NpZ24oSix7dW53cmFwOkd9KX0sdGhpcy5jdXN0b209KCQsUSk9PntsZXQgSj0oUT09bnVsbD92b2lkIDA6US5pZCl8fE8zKys7cmV0dXJuIHRoaXMuY3JlYXRlKHtqc3g6JChKKSxpZDpKLC4uLlF9KSxKfSx0aGlzLmdldEFjdGl2ZVRvYXN0cz0oKT0+e3JldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKCQpPT4hdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKCQuaWQpKX0sdGhpcy5zdWJzY3JpYmVycz1bXSx0aGlzLnRvYXN0cz1bXSx0aGlzLmRpc21pc3NlZFRvYXN0cz1uZXcgU2V0fX12YXIgSjA9bmV3ICQ2LFAkPSgkLFEpPT57bGV0IEo9KFE9PW51bGw/dm9pZCAwOlEuaWQpfHxPMysrO3JldHVybiBKMC5hZGRUb2FzdCh7dGl0bGU6JCwuLi5RLGlkOkp9KSxKfSxEJD0oJCk9PntyZXR1cm4gJCYmdHlwZW9mICQ9PT0ib2JqZWN0IiYmIm9rImluICQmJnR5cGVvZiAkLm9rPT09ImJvb2xlYW4iJiYic3RhdHVzImluICQmJnR5cGVvZiAkLnN0YXR1cz09PSJudW1iZXIifSxUJD1QJCx3JD0oKT0+SjAudG9hc3RzLEUkPSgpPT5KMC5nZXRBY3RpdmVUb2FzdHMoKSx4Mj1PYmplY3QuYXNzaWduKFQkLHtzdWNjZXNzOkowLnN1Y2Nlc3MsaW5mbzpKMC5pbmZvLHdhcm5pbmc6SjAud2FybmluZyxlcnJvcjpKMC5lcnJvcixjdXN0b206SjAuY3VzdG9tLG1lc3NhZ2U6SjAubWVzc2FnZSxwcm9taXNlOkowLnByb21pc2UsZGlzbWlzczpKMC5kaXNtaXNzLGxvYWRpbmc6SjAubG9hZGluZ30se2dldEhpc3Rvcnk6dyQsZ2V0VG9hc3RzOkUkfSk7QyQoIltkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9bHRyXSxodG1sW2Rpcj1sdHJdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6LTNweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDo0cHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0Oi0xcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDowcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OmF1dG87LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OjA7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoLTM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxdLGh0bWxbZGlyPXJ0bF17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDo0cHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6LTNweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6MHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6LTFweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6MDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOmF1dG87LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgzNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1mYW1pbHk6dWktc2Fucy1zZXJpZixzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLEhlbHZldGljYSBOZXVlLEFyaWFsLE5vdG8gU2FucyxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppOy0tZ3JheTE6aHNsKDAsIDAlLCA5OSUpOy0tZ3JheTI6aHNsKDAsIDAlLCA5Ny4zJSk7LS1ncmF5Mzpoc2woMCwgMCUsIDk1LjElKTstLWdyYXk0OmhzbCgwLCAwJSwgOTMlKTstLWdyYXk1OmhzbCgwLCAwJSwgOTAuOSUpOy0tZ3JheTY6aHNsKDAsIDAlLCA4OC43JSk7LS1ncmF5Nzpoc2woMCwgMCUsIDg1LjglKTstLWdyYXk4OmhzbCgwLCAwJSwgNzglKTstLWdyYXk5OmhzbCgwLCAwJSwgNTYuMSUpOy0tZ3JheTEwOmhzbCgwLCAwJSwgNTIuMyUpOy0tZ3JheTExOmhzbCgwLCAwJSwgNDMuNSUpOy0tZ3JheTEyOmhzbCgwLCAwJSwgOSUpOy0tYm9yZGVyLXJhZGl1czo4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7b3V0bGluZTowO3otaW5kZXg6OTk5OTk5OTk5O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlfUBtZWRpYSAoaG92ZXI6bm9uZSkgYW5kIChwb2ludGVyOmNvYXJzZSl7W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtbGlmdGVkPXRydWVde3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDp2YXIoLS1vZmZzZXQtcmlnaHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rdey0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpO3otaW5kZXg6dmFyKC0tei1pbmRleCk7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RyYW5zZm9ybTp2YXIoLS15KTt0b3VjaC1hY3Rpb246bm9uZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMsb3BhY2l0eSAuNHMsaGVpZ2h0IC40cyxib3gtc2hhZG93IC4ycztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO292ZXJmbG93LXdyYXA6YW55d2hlcmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtwYWRkaW5nOjE2cHg7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JvcmRlci1yYWRpdXM6dmFyKC0tYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9W2RhdGEtc29ubmVyLXRvYXN0XTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6MDstLXk6dHJhbnNsYXRlWSgtMTAwJSk7LS1saWZ0OjE7LS1saWZ0LWFtb3VudDpjYWxjKDEgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTowOy0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdDotMTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiMzZjNmM2Z9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6I2U4ZThlOH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLXRpdGxlXXtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXByb21pc2U9dHJ1ZV0gW2RhdGEtaWNvbl0+c3Zne29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1pbiAuM3MgZWFzZSBmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dPip7ZmxleC1zaHJpbms6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dIHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXXtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLW5vcm1hbC1iZyk7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtdGV4dCk7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKTtib3JkZXI6bm9uZTtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzLGJveC1zaGFkb3cgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMCwwLDAsLjQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA4KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25de3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0KTtyaWdodDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tZW5kKTt0b3A6MDtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tZ3JheTEyKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ncmF5NCk7dHJhbnNmb3JtOnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm0pO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzLGJhY2tncm91bmQgLjJzLGJvcmRlci1jb2xvciAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRpc2FibGVkPXRydWVde2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdOmhvdmVyIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ncmF5Mik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyYXk1KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAwJTtyaWdodDotMTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4Oi0xfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Ym90dG9tOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle3RvcDo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPWZhbHNlXVtkYXRhLXJlbW92ZWQ9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7dHJhbnNmb3JtOnNjYWxlWSgyKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2hlaWdodDpjYWxjKHZhcigtLWdhcCkgKyAxcHgpO2JvdHRvbToxMDAlO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoMCk7b3BhY2l0eToxfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV17LS1zY2FsZTp2YXIoLS10b2FzdHMtYmVmb3JlKSAqIDAuMDUgKyAxOy0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdC1hbW91bnQpICogdmFyKC0tdG9hc3RzLWJlZm9yZSkpKSBzY2FsZShjYWxjKC0xICogdmFyKC0tc2NhbGUpKSk7aGVpZ2h0OnZhcigtLWZyb250LXRvYXN0LWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246b3BhY2l0eSAuNHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zdHlsZWQ9dHJ1ZV0+KntvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkpKTtoZWlnaHQ6dmFyKC0taW5pdGlhbC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9dHJ1ZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSArIHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKDQwJSk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC41cyxvcGFjaXR5IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXTo6YmVmb3Jle2hlaWdodDpjYWxjKHZhcigtLWluaXRpYWwtaGVpZ2h0KSArIDIwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV17dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXksMCkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgsMCkpO3RyYW5zaXRpb246bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGVkPXRydWVde3VzZXItc2VsZWN0Om5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXSxbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj10b3Bde2FuaW1hdGlvbi1kdXJhdGlvbjouMnM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249bGVmdF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWxlZnR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1yaWdodF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXJpZ2h0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249dXBde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC11cH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWRvd25de2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1kb3dufUBrZXlmcmFtZXMgc3dpcGUtb3V0LWxlZnR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXJpZ2h0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgKyAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC11cHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtZG93bntmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpICsgMTAwJSkpO29wYWNpdHk6MH19QG1lZGlhIChtYXgtd2lkdGg6NjAwcHgpe1tkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF17bGVmdDpjYWxjKHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAtMSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdIFtkYXRhLXNvbm5lci10b2FzdF17bGVmdDowO3JpZ2h0OjA7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIDIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tbW9iaWxlLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tbW9iaWxlLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTQpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKTstLXN1Y2Nlc3MtYmc6aHNsKDE0MywgODUlLCA5NiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NSwgOTIlLCA4NyUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNDAsIDEwMCUsIDI3JSk7LS1pbmZvLWJnOmhzbCgyMDgsIDEwMCUsIDk3JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIxLCA5MSUsIDkzJSk7LS1pbmZvLXRleHQ6aHNsKDIxMCwgOTIlLCA0NSUpOy0td2FybmluZy1iZzpoc2woNDksIDEwMCUsIDk3JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNDksIDkxJSwgODQlKTstLXdhcm5pbmctdGV4dDpoc2woMzEsIDkyJSwgNDUlKTstLWVycm9yLWJnOmhzbCgzNTksIDEwMCUsIDk3JSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1OSwgMTAwJSwgOTQlKTstLWVycm9yLXRleHQ6aHNsKDM2MCwgMTAwJSwgNDUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXkzKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYmctaG92ZXI6aHNsKDAsIDAlLCAxMiUpOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtYm9yZGVyLWhvdmVyOmhzbCgwLCAwJSwgMjUlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKTstLXN1Y2Nlc3MtYmc6aHNsKDE1MCwgMTAwJSwgNiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NywgMTAwJSwgMTIlKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTUwLCA4NiUsIDY1JSk7LS1pbmZvLWJnOmhzbCgyMTUsIDEwMCUsIDYlKTstLWluZm8tYm9yZGVyOmhzbCgyMjMsIDQzJSwgMTclKTstLWluZm8tdGV4dDpoc2woMjE2LCA4NyUsIDY1JSk7LS13YXJuaW5nLWJnOmhzbCg2NCwgMTAwJSwgNiUpOy0td2FybmluZy1ib3JkZXI6aHNsKDYwLCAxMDAlLCA5JSk7LS13YXJuaW5nLXRleHQ6aHNsKDQ2LCA4NyUsIDY1JSk7LS1lcnJvci1iZzpoc2woMzU4LCA3NiUsIDEwJSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1NywgODklLCAxNiUpOy0tZXJyb3ItdGV4dDpoc2woMzU4LCAxMDAlLCA4MSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZy1ob3Zlcik7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXItaG92ZXIpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc117YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb117YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ117YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3Jde2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3JdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJ7LS1zaXplOjE2cHg7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDoxMH0uc29ubmVyLWxvYWRpbmctd3JhcHBlcltkYXRhLXZpc2libGU9ZmFsc2Vde3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9LnNvbm5lci1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpfS5zb25uZXItbG9hZGluZy1iYXJ7YW5pbWF0aW9uOnNvbm5lci1zcGluIDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQ6dmFyKC0tZ3JheTExKTtib3JkZXItcmFkaXVzOjZweDtoZWlnaHQ6OCU7bGVmdDotMTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMy45JTt3aWR0aDoyNCV9LnNvbm5lci1sb2FkaW5nLWJhcjpmaXJzdC1jaGlsZHthbmltYXRpb24tZGVsYXk6LTEuMnM7dHJhbnNmb3JtOnJvdGF0ZSguMDAwMWRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDIpe2FuaW1hdGlvbi1kZWxheTotMS4xczt0cmFuc2Zvcm06cm90YXRlKDMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi0xczt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNCl7YW5pbWF0aW9uLWRlbGF5Oi0uOXM7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDUpe2FuaW1hdGlvbi1kZWxheTotLjhzO3RyYW5zZm9ybTpyb3RhdGUoMTIwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi0uN3M7dHJhbnNmb3JtOnJvdGF0ZSgxNTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg3KXthbmltYXRpb24tZGVsYXk6LS42czt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDgpe2FuaW1hdGlvbi1kZWxheTotLjVzO3RyYW5zZm9ybTpyb3RhdGUoMjEwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOSl7YW5pbWF0aW9uLWRlbGF5Oi0uNHM7dHJhbnNmb3JtOnJvdGF0ZSgyNDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMCl7YW5pbWF0aW9uLWRlbGF5Oi0uM3M7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMSl7YW5pbWF0aW9uLWRlbGF5Oi0uMnM7dHJhbnNmb3JtOnJvdGF0ZSgzMDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMil7YW5pbWF0aW9uLWRlbGF5Oi0uMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBzb25uZXItZmFkZS1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfX1Aa2V5ZnJhbWVzIHNvbm5lci1zcGluezAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6LjE1fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5zb25uZXItbG9hZGluZy1iYXIsW2RhdGEtc29ubmVyLXRvYXN0XSxbZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDthbmltYXRpb246bm9uZSFpbXBvcnRhbnR9fS5zb25uZXItbG9hZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30uc29ubmVyLWxvYWRlcltkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZSgtNTAlLC01MCUpfSIpO2Z1bmN0aW9uIFc1KCQpe3JldHVybiAkLmxhYmVsIT09dm9pZCAwfXZhciBJJD0zLHkkPSIyNHB4IixiJD0iMTZweCIsdDk9NDAwMCxTJD0zNTYseCQ9MTQsdiQ9NDUsaiQ9MjAwO2Z1bmN0aW9uIF8wKC4uLiQpe3JldHVybiAkLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9ZnVuY3Rpb24gUiQoJCl7bGV0W1EsSl09JC5zcGxpdCgiLSIpLFo9W107aWYoUSlaLnB1c2goUSk7aWYoSilaLnB1c2goSik7cmV0dXJuIFp9dmFyIGckPSgkKT0+e3ZhciBRLEosWixYLFkscSxHLE4sQjtsZXR7aW52ZXJ0OlUsdG9hc3Q6Vix1bnN0eWxlZDpDLGludGVyYWN0aW5nOkwsc2V0SGVpZ2h0czpGLHZpc2libGVUb2FzdHM6eixoZWlnaHRzOkgsaW5kZXg6ayx0b2FzdHM6XyxleHBhbmRlZDpTLHJlbW92ZVRvYXN0OkUsZGVmYXVsdFJpY2hDb2xvcnM6eSxjbG9zZUJ1dHRvbjp4LHN0eWxlOlkxLGNhbmNlbEJ1dHRvblN0eWxlOmYsYWN0aW9uQnV0dG9uU3R5bGU6dSxjbGFzc05hbWU6Yz0iIixkZXNjcmlwdGlvbkNsYXNzTmFtZTpRMT0iIixkdXJhdGlvbjpVMSxwb3NpdGlvbjpLMSxnYXA6QTEsZXhwYW5kQnlEZWZhdWx0Om0sY2xhc3NOYW1lczpnLGljb25zOnMsY2xvc2VCdXR0b25BcmlhTGFiZWw6cTE9IkNsb3NlIHRvYXN0In09JCxbVjEsTjFdPWoudXNlU3RhdGUobnVsbCksW3oxLEwxXT1qLnVzZVN0YXRlKG51bGwpLFt2LGFdPWoudXNlU3RhdGUoITEpLFtsLFoxXT1qLnVzZVN0YXRlKCExKSxbUDEsRF09ai51c2VTdGF0ZSghMSksW3IsZV09ai51c2VTdGF0ZSghMSksW2QsUl09ai51c2VTdGF0ZSghMSksW08xLFgxXT1qLnVzZVN0YXRlKDApLFttMSxzMV09ai51c2VTdGF0ZSgwKSxuMT1qLnVzZVJlZihWLmR1cmF0aW9ufHxVMXx8dDkpLHcxPWoudXNlUmVmKG51bGwpLGoxPWoudXNlUmVmKG51bGwpLFkwPWs9PT0wLHEwPWsrMTw9eixNMT1WLnR5cGUsZDE9Vi5kaXNtaXNzaWJsZSE9PSExLEMwPVYuY2xhc3NOYW1lfHwiIix4MT1WLmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixyMT1qLnVzZU1lbW8oKCk9PkguZmluZEluZGV4KChKMSk9PkoxLnRvYXN0SWQ9PT1WLmlkKXx8MCxbSCxWLmlkXSksRzA9ai51c2VNZW1vKCgpPT57dmFyIEoxO3JldHVybihKMT1WLmNsb3NlQnV0dG9uKSE9bnVsbD9KMTp4fSxbVi5jbG9zZUJ1dHRvbix4XSksRTE9ai51c2VNZW1vKCgpPT5WLmR1cmF0aW9ufHxVMXx8dDksW1YuZHVyYXRpb24sVTFdKSxJMT1qLnVzZVJlZigwKSx0MT1qLnVzZVJlZigwKSxWMD1qLnVzZVJlZigwKSxvMT1qLnVzZVJlZihudWxsKSxbQjAsdzBdPUsxLnNwbGl0KCItIiksVzA9ai51c2VNZW1vKCgpPT57cmV0dXJuIEgucmVkdWNlKChKMSxQLHApPT57aWYocD49cjEpcmV0dXJuIEoxO3JldHVybiBKMStQLmhlaWdodH0sMCl9LFtILHIxXSksYTE9VyQoKSxSMT1WLmludmVydHx8VSxTMT1NMT09PSJsb2FkaW5nIjt0MS5jdXJyZW50PWoudXNlTWVtbygoKT0+cjEqQTErVzAsW3IxLFcwXSksai51c2VFZmZlY3QoKCk9PntuMS5jdXJyZW50PUUxfSxbRTFdKSxqLnVzZUVmZmVjdCgoKT0+e2EoITApfSxbXSksai51c2VFZmZlY3QoKCk9PntsZXQgSjE9ajEuY3VycmVudDtpZihKMSl7bGV0IFA9SjEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiBzMShQKSxGKChwKT0+W3t0b2FzdElkOlYuaWQsaGVpZ2h0OlAscG9zaXRpb246Vi5wb3NpdGlvbn0sLi4ucF0pLCgpPT5GKChwKT0+cC5maWx0ZXIoKHQpPT50LnRvYXN0SWQhPT1WLmlkKSl9fSxbRixWLmlkXSksai51c2VMYXlvdXRFZmZlY3QoKCk9PntpZighdilyZXR1cm47bGV0IEoxPWoxLmN1cnJlbnQsUD1KMS5zdHlsZS5oZWlnaHQ7SjEuc3R5bGUuaGVpZ2h0PSJhdXRvIjtsZXQgcD1KMS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7SjEuc3R5bGUuaGVpZ2h0PVAsczEocCksRigodCk9PntpZighdC5maW5kKChCMSk9PkIxLnRvYXN0SWQ9PT1WLmlkKSlyZXR1cm5be3RvYXN0SWQ6Vi5pZCxoZWlnaHQ6cCxwb3NpdGlvbjpWLnBvc2l0aW9ufSwuLi50XTtlbHNlIHJldHVybiB0Lm1hcCgoQjEpPT5CMS50b2FzdElkPT09Vi5pZD97Li4uQjEsaGVpZ2h0OnB9OkIxKX0pfSxbdixWLnRpdGxlLFYuZGVzY3JpcHRpb24sRixWLmlkLFYuanN4LFYuYWN0aW9uLFYuY2FuY2VsXSk7bGV0IGcxPWoudXNlQ2FsbGJhY2soKCk9PntaMSghMCksWDEodDEuY3VycmVudCksRigoSjEpPT5KMS5maWx0ZXIoKFApPT5QLnRvYXN0SWQhPT1WLmlkKSksc2V0VGltZW91dCgoKT0+e0UoVil9LGokKX0sW1YsRSxGLHQxXSk7ai51c2VFZmZlY3QoKCk9PntpZihWLnByb21pc2UmJk0xPT09ImxvYWRpbmcifHxWLmR1cmF0aW9uPT09MS8wfHxWLnR5cGU9PT0ibG9hZGluZyIpcmV0dXJuO2xldCBKMSxQPSgpPT57aWYoVjAuY3VycmVudDxJMS5jdXJyZW50KXtsZXQgdD1uZXcgRGF0ZSgpLmdldFRpbWUoKS1JMS5jdXJyZW50O24xLmN1cnJlbnQ9bjEuY3VycmVudC10fVYwLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCl9LHA9KCk9PntpZihuMS5jdXJyZW50PT09MS8wKXJldHVybjtJMS5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpLEoxPXNldFRpbWVvdXQoKCk9PntWLm9uQXV0b0Nsb3NlPT1udWxsfHxWLm9uQXV0b0Nsb3NlLmNhbGwoVixWKSxnMSgpfSxuMS5jdXJyZW50KX07aWYoU3x8THx8YTEpUCgpO2Vsc2UgcCgpO3JldHVybigpPT5jbGVhclRpbWVvdXQoSjEpfSxbUyxMLFYsTTEsYTEsZzFdKSxqLnVzZUVmZmVjdCgoKT0+e2lmKFYuZGVsZXRlKWcxKCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKX0sW2cxLFYuZGVsZXRlXSk7ZnVuY3Rpb24gaTEoKXt2YXIgSjE7aWYocz09bnVsbD92b2lkIDA6cy5sb2FkaW5nKXt2YXIgUDtyZXR1cm4gai5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6XzAoZz09bnVsbD92b2lkIDA6Zy5sb2FkZXIsVj09bnVsbD92b2lkIDA6KFA9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6UC5sb2FkZXIsInNvbm5lci1sb2FkZXIiKSwiZGF0YS12aXNpYmxlIjpNMT09PSJsb2FkaW5nIn0scy5sb2FkaW5nKX1yZXR1cm4gai5jcmVhdGVFbGVtZW50KEYkLHtjbGFzc05hbWU6XzAoZz09bnVsbD92b2lkIDA6Zy5sb2FkZXIsVj09bnVsbD92b2lkIDA6KEoxPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkoxLmxvYWRlciksdmlzaWJsZTpNMT09PSJsb2FkaW5nIn0pfWxldCBOMD1WLmljb258fChzPT1udWxsP3ZvaWQgMDpzW00xXSl8fHokKE0xKTt2YXIgUDAsZTE7cmV0dXJuIGouY3JlYXRlRWxlbWVudCgibGkiLHt0YWJJbmRleDowLHJlZjpqMSxjbGFzc05hbWU6XzAoYyxDMCxnPT1udWxsP3ZvaWQgMDpnLnRvYXN0LFY9PW51bGw/dm9pZCAwOihRPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlEudG9hc3QsZz09bnVsbD92b2lkIDA6Zy5kZWZhdWx0LGc9PW51bGw/dm9pZCAwOmdbTTFdLFY9PW51bGw/dm9pZCAwOihKPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkpbTTFdKSwiZGF0YS1zb25uZXItdG9hc3QiOiIiLCJkYXRhLXJpY2gtY29sb3JzIjooUDA9Vi5yaWNoQ29sb3JzKSE9bnVsbD9QMDp5LCJkYXRhLXN0eWxlZCI6IUJvb2xlYW4oVi5qc3h8fFYudW5zdHlsZWR8fEMpLCJkYXRhLW1vdW50ZWQiOnYsImRhdGEtcHJvbWlzZSI6Qm9vbGVhbihWLnByb21pc2UpLCJkYXRhLXN3aXBlZCI6ZCwiZGF0YS1yZW1vdmVkIjpsLCJkYXRhLXZpc2libGUiOnEwLCJkYXRhLXktcG9zaXRpb24iOkIwLCJkYXRhLXgtcG9zaXRpb24iOncwLCJkYXRhLWluZGV4IjprLCJkYXRhLWZyb250IjpZMCwiZGF0YS1zd2lwaW5nIjpQMSwiZGF0YS1kaXNtaXNzaWJsZSI6ZDEsImRhdGEtdHlwZSI6TTEsImRhdGEtaW52ZXJ0IjpSMSwiZGF0YS1zd2lwZS1vdXQiOnIsImRhdGEtc3dpcGUtZGlyZWN0aW9uIjp6MSwiZGF0YS1leHBhbmRlZCI6Qm9vbGVhbihTfHxtJiZ2KSwiZGF0YS10ZXN0aWQiOlYudGVzdElkLHN0eWxlOnsiLS1pbmRleCI6aywiLS10b2FzdHMtYmVmb3JlIjprLCItLXotaW5kZXgiOl8ubGVuZ3RoLWssIi0tb2Zmc2V0IjpgJHtsP08xOnQxLmN1cnJlbnR9cHhgLCItLWluaXRpYWwtaGVpZ2h0IjptPyJhdXRvIjpgJHttMX1weGAsLi4uWTEsLi4uVi5zdHlsZX0sb25EcmFnRW5kOigpPT57RCghMSksTjEobnVsbCksbzEuY3VycmVudD1udWxsfSxvblBvaW50ZXJEb3duOihKMSk9PntpZihKMS5idXR0b249PT0yKXJldHVybjtpZihTMXx8IWQxKXJldHVybjtpZih3MS5jdXJyZW50PW5ldyBEYXRlLFgxKHQxLmN1cnJlbnQpLEoxLnRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShKMS5wb2ludGVySWQpLEoxLnRhcmdldC50YWdOYW1lPT09IkJVVFRPTiIpcmV0dXJuO0QoITApLG8xLmN1cnJlbnQ9e3g6SjEuY2xpZW50WCx5OkoxLmNsaWVudFl9fSxvblBvaW50ZXJVcDooKT0+e3ZhciBKMSxQLHA7aWYocnx8IWQxKXJldHVybjtvMS5jdXJyZW50PW51bGw7bGV0IHQ9TnVtYmVyKCgoSjE9ajEuY3VycmVudCk9PW51bGw/dm9pZCAwOkoxLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXgiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksSDE9TnVtYmVyKCgoUD1qMS5jdXJyZW50KT09bnVsbD92b2lkIDA6UC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItLXN3aXBlLWFtb3VudC15IikucmVwbGFjZSgicHgiLCIiKSl8fDApLEIxPW5ldyBEYXRlKCkuZ2V0VGltZSgpLSgocD13MS5jdXJyZW50KT09bnVsbD92b2lkIDA6cC5nZXRUaW1lKCkpLGk9VjE9PT0ieCI/dDpIMSx5MT1NYXRoLmFicyhpKS9CMTtpZihNYXRoLmFicyhpKT49diR8fHkxPjAuMTEpe2lmKFgxKHQxLmN1cnJlbnQpLFYub25EaXNtaXNzPT1udWxsfHxWLm9uRGlzbWlzcy5jYWxsKFYsViksVjE9PT0ieCIpTDEodD4wPyJyaWdodCI6ImxlZnQiKTtlbHNlIEwxKEgxPjA/ImRvd24iOiJ1cCIpO2cxKCksZSghMCk7cmV0dXJufWVsc2V7dmFyIGgxLGwxOyhoMT1qMS5jdXJyZW50KT09bnVsbHx8aDEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLCIwcHgiKSwobDE9ajEuY3VycmVudCk9PW51bGx8fGwxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IiwiMHB4Iil9UighMSksRCghMSksTjEobnVsbCl9LG9uUG9pbnRlck1vdmU6KEoxKT0+e3ZhciBQLHAsdDtpZighbzEuY3VycmVudHx8IWQxKXJldHVybjtpZigoKFA9d2luZG93LmdldFNlbGVjdGlvbigpKT09bnVsbD92b2lkIDA6UC50b1N0cmluZygpLmxlbmd0aCk+MClyZXR1cm47bGV0IEIxPUoxLmNsaWVudFktbzEuY3VycmVudC55LGk9SjEuY2xpZW50WC1vMS5jdXJyZW50Lng7dmFyIHkxO2xldCBoMT0oeTE9JC5zd2lwZURpcmVjdGlvbnMpIT1udWxsP3kxOlIkKEsxKTtpZighVjEmJihNYXRoLmFicyhpKT4xfHxNYXRoLmFicyhCMSk+MSkpTjEoTWF0aC5hYnMoaSk+TWF0aC5hYnMoQjEpPyJ4IjoieSIpO2xldCBsMT17eDowLHk6MH0sWjA9KHowKT0+e3JldHVybiAxLygxLjUrTWF0aC5hYnMoejApLzIwKX07aWYoVjE9PT0ieSIpe2lmKGgxLmluY2x1ZGVzKCJ0b3AiKXx8aDEuaW5jbHVkZXMoImJvdHRvbSIpKWlmKGgxLmluY2x1ZGVzKCJ0b3AiKSYmQjE8MHx8aDEuaW5jbHVkZXMoImJvdHRvbSIpJiZCMT4wKWwxLnk9QjE7ZWxzZXtsZXQgejA9QjEqWjAoQjEpO2wxLnk9TWF0aC5hYnMoejApPE1hdGguYWJzKEIxKT96MDpCMX19ZWxzZSBpZihWMT09PSJ4Iil7aWYoaDEuaW5jbHVkZXMoImxlZnQiKXx8aDEuaW5jbHVkZXMoInJpZ2h0IikpaWYoaDEuaW5jbHVkZXMoImxlZnQiKSYmaTwwfHxoMS5pbmNsdWRlcygicmlnaHQiKSYmaT4wKWwxLng9aTtlbHNle2xldCB6MD1pKlowKGkpO2wxLng9TWF0aC5hYnMoejApPE1hdGguYWJzKGkpP3owOml9fWlmKE1hdGguYWJzKGwxLngpPjB8fE1hdGguYWJzKGwxLnkpPjApUighMCk7KHA9ajEuY3VycmVudCk9PW51bGx8fHAuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLGAke2wxLnh9cHhgKSwodD1qMS5jdXJyZW50KT09bnVsbHx8dC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsYCR7bDEueX1weGApfX0sRzAmJiFWLmpzeCYmTTEhPT0ibG9hZGluZyI/ai5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiYXJpYS1sYWJlbCI6cTEsImRhdGEtZGlzYWJsZWQiOlMxLCJkYXRhLWNsb3NlLWJ1dHRvbiI6ITAsb25DbGljazpTMXx8IWQxPygpPT57fTooKT0+e2cxKCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKX0sY2xhc3NOYW1lOl8wKGc9PW51bGw/dm9pZCAwOmcuY2xvc2VCdXR0b24sVj09bnVsbD92b2lkIDA6KFo9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Wi5jbG9zZUJ1dHRvbil9LChlMT1zPT1udWxsP3ZvaWQgMDpzLmNsb3NlKSE9bnVsbD9lMTpfJCk6bnVsbCwoTTF8fFYuaWNvbnx8Vi5wcm9taXNlKSYmVi5pY29uIT09bnVsbCYmKChzPT1udWxsP3ZvaWQgMDpzW00xXSkhPT1udWxsfHxWLmljb24pP2ouY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOl8wKGc9PW51bGw/dm9pZCAwOmcuaWNvbixWPT1udWxsP3ZvaWQgMDooWD1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpYLmljb24pfSxWLnByb21pc2V8fFYudHlwZT09PSJsb2FkaW5nIiYmIVYuaWNvbj9WLmljb258fGkxKCk6bnVsbCxWLnR5cGUhPT0ibG9hZGluZyI/TjA6bnVsbCk6bnVsbCxqLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWNvbnRlbnQiOiIiLGNsYXNzTmFtZTpfMChnPT1udWxsP3ZvaWQgMDpnLmNvbnRlbnQsVj09bnVsbD92b2lkIDA6KFk9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WS5jb250ZW50KX0sai5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS10aXRsZSI6IiIsY2xhc3NOYW1lOl8wKGc9PW51bGw/dm9pZCAwOmcudGl0bGUsVj09bnVsbD92b2lkIDA6KHE9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6cS50aXRsZSl9LFYuanN4P1YuanN4OnR5cGVvZiBWLnRpdGxlPT09ImZ1bmN0aW9uIj9WLnRpdGxlKCk6Vi50aXRsZSksVi5kZXNjcmlwdGlvbj9qLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWRlc2NyaXB0aW9uIjoiIixjbGFzc05hbWU6XzAoUTEseDEsZz09bnVsbD92b2lkIDA6Zy5kZXNjcmlwdGlvbixWPT1udWxsP3ZvaWQgMDooRz1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpHLmRlc2NyaXB0aW9uKX0sdHlwZW9mIFYuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP1YuZGVzY3JpcHRpb24oKTpWLmRlc2NyaXB0aW9uKTpudWxsKSxqLmlzVmFsaWRFbGVtZW50KFYuY2FuY2VsKT9WLmNhbmNlbDpWLmNhbmNlbCYmVzUoVi5jYW5jZWwpP2ouY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7ImRhdGEtYnV0dG9uIjohMCwiZGF0YS1jYW5jZWwiOiEwLHN0eWxlOlYuY2FuY2VsQnV0dG9uU3R5bGV8fGYsb25DbGljazooSjEpPT57aWYoIVc1KFYuY2FuY2VsKSlyZXR1cm47aWYoIWQxKXJldHVybjtWLmNhbmNlbC5vbkNsaWNrPT1udWxsfHxWLmNhbmNlbC5vbkNsaWNrLmNhbGwoVi5jYW5jZWwsSjEpLGcxKCl9LGNsYXNzTmFtZTpfMChnPT1udWxsP3ZvaWQgMDpnLmNhbmNlbEJ1dHRvbixWPT1udWxsP3ZvaWQgMDooTj1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpOLmNhbmNlbEJ1dHRvbil9LFYuY2FuY2VsLmxhYmVsKTpudWxsLGouaXNWYWxpZEVsZW1lbnQoVi5hY3Rpb24pP1YuYWN0aW9uOlYuYWN0aW9uJiZXNShWLmFjdGlvbik/ai5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWFjdGlvbiI6ITAsc3R5bGU6Vi5hY3Rpb25CdXR0b25TdHlsZXx8dSxvbkNsaWNrOihKMSk9PntpZighVzUoVi5hY3Rpb24pKXJldHVybjtpZihWLmFjdGlvbi5vbkNsaWNrPT1udWxsfHxWLmFjdGlvbi5vbkNsaWNrLmNhbGwoVi5hY3Rpb24sSjEpLEoxLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2cxKCl9LGNsYXNzTmFtZTpfMChnPT1udWxsP3ZvaWQgMDpnLmFjdGlvbkJ1dHRvbixWPT1udWxsP3ZvaWQgMDooQj1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpCLmFjdGlvbkJ1dHRvbil9LFYuYWN0aW9uLmxhYmVsKTpudWxsKX07ZnVuY3Rpb24gZTkoKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4ibHRyIjtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiJsdHIiO2xldCAkPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2lmKCQ9PT0iYXV0byJ8fCEkKXJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmRpcmVjdGlvbjtyZXR1cm4gJH1mdW5jdGlvbiBoJCgkLFEpe2xldCBKPXt9O3JldHVyblskLFFdLmZvckVhY2goKFosWCk9PntsZXQgWT1YPT09MSxxPVk/Ii0tbW9iaWxlLW9mZnNldCI6Ii0tb2Zmc2V0IixHPVk/YiQ6eSQ7ZnVuY3Rpb24gTihCKXtbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLmZvckVhY2goKFUpPT57SltgJHtxfS0ke1V9YF09dHlwZW9mIEI9PT0ibnVtYmVyIj9gJHtCfXB4YDpCfSl9aWYodHlwZW9mIFo9PT0ibnVtYmVyInx8dHlwZW9mIFo9PT0ic3RyaW5nIilOKFopO2Vsc2UgaWYodHlwZW9mIFo9PT0ib2JqZWN0IilbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLmZvckVhY2goKEIpPT57aWYoWltCXT09PXZvaWQgMClKW2Ake3F9LSR7Qn1gXT1HO2Vsc2UgSltgJHtxfS0ke0J9YF09dHlwZW9mIFpbQl09PT0ibnVtYmVyIj9gJHtaW0JdfXB4YDpaW0JdfSk7ZWxzZSBOKEcpfSksSn12YXIgUTY9ai5mb3J3YXJkUmVmKGZ1bmN0aW9uKFEsSil7bGV0e2lkOlosaW52ZXJ0OlgscG9zaXRpb246WT0iYm90dG9tLXJpZ2h0Iixob3RrZXk6cT1bImFsdEtleSIsIktleVQiXSxleHBhbmQ6RyxjbG9zZUJ1dHRvbjpOLGNsYXNzTmFtZTpCLG9mZnNldDpVLG1vYmlsZU9mZnNldDpWLHRoZW1lOkM9ImxpZ2h0IixyaWNoQ29sb3JzOkwsZHVyYXRpb246RixzdHlsZTp6LHZpc2libGVUb2FzdHM6SD1JJCx0b2FzdE9wdGlvbnM6ayxkaXI6Xz1lOSgpLGdhcDpTPXgkLGljb25zOkUsY29udGFpbmVyQXJpYUxhYmVsOnk9Ik5vdGlmaWNhdGlvbnMifT1RLFt4LFkxXT1qLnVzZVN0YXRlKFtdKSxmPWoudXNlTWVtbygoKT0+e2lmKFopcmV0dXJuIHguZmlsdGVyKCh2KT0+di50b2FzdGVySWQ9PT1aKTtyZXR1cm4geC5maWx0ZXIoKHYpPT4hdi50b2FzdGVySWQpfSxbeCxaXSksdT1qLnVzZU1lbW8oKCk9PntyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFtZXS5jb25jYXQoZi5maWx0ZXIoKHYpPT52LnBvc2l0aW9uKS5tYXAoKHYpPT52LnBvc2l0aW9uKSkpKX0sW2YsWV0pLFtjLFExXT1qLnVzZVN0YXRlKFtdKSxbVTEsSzFdPWoudXNlU3RhdGUoITEpLFtBMSxtXT1qLnVzZVN0YXRlKCExKSxbZyxzXT1qLnVzZVN0YXRlKEMhPT0ic3lzdGVtIj9DOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXM/ImRhcmsiOiJsaWdodCI6ImxpZ2h0IikscTE9ai51c2VSZWYobnVsbCksVjE9cS5qb2luKCIrIikucmVwbGFjZSgvS2V5L2csIiIpLnJlcGxhY2UoL0RpZ2l0L2csIiIpLE4xPWoudXNlUmVmKG51bGwpLHoxPWoudXNlUmVmKCExKSxMMT1qLnVzZUNhbGxiYWNrKCh2KT0+e1kxKChhKT0+e3ZhciBsO2lmKCEoKGw9YS5maW5kKChaMSk9PloxLmlkPT09di5pZCkpPT1udWxsP3ZvaWQgMDpsLmRlbGV0ZSkpSjAuZGlzbWlzcyh2LmlkKTtyZXR1cm4gYS5maWx0ZXIoKHtpZDpaMX0pPT5aMSE9PXYuaWQpfSl9LFtdKTtyZXR1cm4gai51c2VFZmZlY3QoKCk9PntyZXR1cm4gSjAuc3Vic2NyaWJlKCh2KT0+e2lmKHYuZGlzbWlzcyl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57WTEoKGEpPT5hLm1hcCgobCk9PmwuaWQ9PT12LmlkP3suLi5sLGRlbGV0ZTohMH06bCkpfSk7cmV0dXJufXNldFRpbWVvdXQoKCk9PntqLmZsdXNoU3luYygoKT0+e1kxKChhKT0+e2xldCBsPWEuZmluZEluZGV4KChaMSk9PloxLmlkPT09di5pZCk7aWYobCE9PS0xKXJldHVyblsuLi5hLnNsaWNlKDAsbCksey4uLmFbbF0sLi4udn0sLi4uYS5zbGljZShsKzEpXTtyZXR1cm5bdiwuLi5hXX0pfSl9KX0pfSxbeF0pLGoudXNlRWZmZWN0KCgpPT57aWYoQyE9PSJzeXN0ZW0iKXtzKEMpO3JldHVybn1pZihDPT09InN5c3RlbSIpaWYod2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcylzKCJkYXJrIik7ZWxzZSBzKCJsaWdodCIpO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgdj13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpO3RyeXt2LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKHttYXRjaGVzOmF9KT0+e2lmKGEpcygiZGFyayIpO2Vsc2UgcygibGlnaHQiKX0pfWNhdGNoKGEpe3YuYWRkTGlzdGVuZXIoKHttYXRjaGVzOmx9KT0+e3RyeXtpZihsKXMoImRhcmsiKTtlbHNlIHMoImxpZ2h0Iil9Y2F0Y2goWjEpe2NvbnNvbGUuZXJyb3IoWjEpfX0pfX0sW0NdKSxqLnVzZUVmZmVjdCgoKT0+e2lmKHgubGVuZ3RoPD0xKUsxKCExKX0sW3hdKSxqLnVzZUVmZmVjdCgoKT0+e2xldCB2PShhKT0+e3ZhciBsO2lmKHEuZXZlcnkoKEQpPT5hW0RdfHxhLmNvZGU9PT1EKSl7dmFyIFAxO0sxKCEwKSwoUDE9cTEuY3VycmVudCk9PW51bGx8fFAxLmZvY3VzKCl9aWYoYS5jb2RlPT09IkVzY2FwZSImJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09cTEuY3VycmVudHx8KChsPXExLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpsLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpSzEoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdiksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHYpfSxbcV0pLGoudXNlRWZmZWN0KCgpPT57aWYocTEuY3VycmVudClyZXR1cm4oKT0+e2lmKE4xLmN1cnJlbnQpTjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLE4xLmN1cnJlbnQ9bnVsbCx6MS5jdXJyZW50PSExfX0sW3ExLmN1cnJlbnRdKSxqLmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLHtyZWY6SiwiYXJpYS1sYWJlbCI6YCR7eX0gJHtWMX1gLHRhYkluZGV4Oi0xLCJhcmlhLWxpdmUiOiJwb2xpdGUiLCJhcmlhLXJlbGV2YW50IjoiYWRkaXRpb25zIHRleHQiLCJhcmlhLWF0b21pYyI6ImZhbHNlIixzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc6ITB9LHUubWFwKCh2LGEpPT57dmFyIGw7bGV0W1oxLFAxXT12LnNwbGl0KCItIik7aWYoIWYubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiBqLmNyZWF0ZUVsZW1lbnQoIm9sIix7a2V5OnYsZGlyOl89PT0iYXV0byI/ZTkoKTpfLHRhYkluZGV4Oi0xLHJlZjpxMSxjbGFzc05hbWU6QiwiZGF0YS1zb25uZXItdG9hc3RlciI6ITAsImRhdGEtc29ubmVyLXRoZW1lIjpnLCJkYXRhLXktcG9zaXRpb24iOloxLCJkYXRhLXgtcG9zaXRpb24iOlAxLHN0eWxlOnsiLS1mcm9udC10b2FzdC1oZWlnaHQiOmAkeygobD1jWzBdKT09bnVsbD92b2lkIDA6bC5oZWlnaHQpfHwwfXB4YCwiLS13aWR0aCI6YCR7UyR9cHhgLCItLWdhcCI6YCR7U31weGAsLi4ueiwuLi5oJChVLFYpfSxvbkJsdXI6KEQpPT57aWYoejEuY3VycmVudCYmIUQuY3VycmVudFRhcmdldC5jb250YWlucyhELnJlbGF0ZWRUYXJnZXQpKXtpZih6MS5jdXJyZW50PSExLE4xLmN1cnJlbnQpTjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLE4xLmN1cnJlbnQ9bnVsbH19LG9uRm9jdXM6KEQpPT57aWYoRC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmRC50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2lmKCF6MS5jdXJyZW50KXoxLmN1cnJlbnQ9ITAsTjEuY3VycmVudD1ELnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+SzEoITApLG9uTW91c2VNb3ZlOigpPT5LMSghMCksb25Nb3VzZUxlYXZlOigpPT57aWYoIUExKUsxKCExKX0sb25EcmFnRW5kOigpPT5LMSghMSksb25Qb2ludGVyRG93bjooRCk9PntpZihELnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZELnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47bSghMCl9LG9uUG9pbnRlclVwOigpPT5tKCExKX0sZi5maWx0ZXIoKEQpPT4hRC5wb3NpdGlvbiYmYT09PTB8fEQucG9zaXRpb249PT12KS5tYXAoKEQscik9Pnt2YXIgZSxkO3JldHVybiBqLmNyZWF0ZUVsZW1lbnQoZyQse2tleTpELmlkLGljb25zOkUsaW5kZXg6cix0b2FzdDpELGRlZmF1bHRSaWNoQ29sb3JzOkwsZHVyYXRpb246KGU9az09bnVsbD92b2lkIDA6ay5kdXJhdGlvbikhPW51bGw/ZTpGLGNsYXNzTmFtZTprPT1udWxsP3ZvaWQgMDprLmNsYXNzTmFtZSxkZXNjcmlwdGlvbkNsYXNzTmFtZTprPT1udWxsP3ZvaWQgMDprLmRlc2NyaXB0aW9uQ2xhc3NOYW1lLGludmVydDpYLHZpc2libGVUb2FzdHM6SCxjbG9zZUJ1dHRvbjooZD1rPT1udWxsP3ZvaWQgMDprLmNsb3NlQnV0dG9uKSE9bnVsbD9kOk4saW50ZXJhY3Rpbmc6QTEscG9zaXRpb246dixzdHlsZTprPT1udWxsP3ZvaWQgMDprLnN0eWxlLHVuc3R5bGVkOms9PW51bGw/dm9pZCAwOmsudW5zdHlsZWQsY2xhc3NOYW1lczprPT1udWxsP3ZvaWQgMDprLmNsYXNzTmFtZXMsY2FuY2VsQnV0dG9uU3R5bGU6az09bnVsbD92b2lkIDA6ay5jYW5jZWxCdXR0b25TdHlsZSxhY3Rpb25CdXR0b25TdHlsZTprPT1udWxsP3ZvaWQgMDprLmFjdGlvbkJ1dHRvblN0eWxlLGNsb3NlQnV0dG9uQXJpYUxhYmVsOms9PW51bGw/dm9pZCAwOmsuY2xvc2VCdXR0b25BcmlhTGFiZWwscmVtb3ZlVG9hc3Q6TDEsdG9hc3RzOmYuZmlsdGVyKChSKT0+Ui5wb3NpdGlvbj09RC5wb3NpdGlvbiksaGVpZ2h0czpjLmZpbHRlcigoUik9PlIucG9zaXRpb249PUQucG9zaXRpb24pLHNldEhlaWdodHM6UTEsZXhwYW5kQnlEZWZhdWx0OkcsZ2FwOlMsZXhwYW5kZWQ6VTEsc3dpcGVEaXJlY3Rpb25zOlEuc3dpcGVEaXJlY3Rpb25zfSl9KSl9KSl9KTtmdW5jdGlvbiBKNigpe3JldHVybiBLKFE2LHt0aGVtZToiZGFyayIscG9zaXRpb246ImJvdHRvbS1jZW50ZXIiLHZpc2libGVUb2FzdHM6NCxnYXA6OCxvZmZzZXQ6e2JvdHRvbToyNH0sdG9hc3RPcHRpb25zOnt1bnN0eWxlZDohMH0sc3R5bGU6e3pJbmRleDoyMTQ3NDgzNjQ3fSxjb250YWluZXJBcmlhTGFiZWw6InNlcnZlLXNpbSBub3RpZmljYXRpb25zIn0pfWZ1bmN0aW9uIEs2KHt0b2FzdDokfSl7bGV0IFE9JC5zdGF0dXM9PT0iZXJyb3IiLEo9JC5zdGF0dXM9PT0idXBsb2FkaW5nIixaPUomJiQucHJvZ3Jlc3MhPT1udWxsLFg9JC5wcm9ncmVzcyE9bnVsbD9NYXRoLnJvdW5kKCQucHJvZ3Jlc3MqMTAwKTowO3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJ1cGxvYWQtdG9hc3QiLGNsYXNzTmFtZTpgZmxleCB3LVttaW4oMzIwcHgsY2FsYygxMDB2dy0zMnB4KSldIGZsZXgtY29sIGdhcC0xLjUgcHgtMyBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbW9ubyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gJHtRPyJzZWxlY3QtdGV4dCBjdXJzb3ItdGV4dCI6InNlbGVjdC1ub25lIGN1cnNvci1kZWZhdWx0In1gLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6Sj8iI2E1YjRmYyI6JC5zdGF0dXM9PT0ic3VjY2VzcyI/IiM0YWRlODAiOiIjZjg3MTcxIn19KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOltKJiZaJiZgVXBsb2FkaW5nICR7JC5uYW1lfeKApiAke1h9JWAsSiYmIVomJigkLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGluZyAkeyQubmFtZX3igKZgOmBBZGRpbmcgJHskLm5hbWV94oCmYCksJC5zdGF0dXM9PT0ic3VjY2VzcyImJigkLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGVkICR7JC5uYW1lfWA6YEFkZGVkICR7JC5uYW1lfSB0byBQaG90b3NgKSxRJiZgJHskLm5hbWV9OiAkeyQubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQifWBdfSldfSksSiYmSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBoLVszcHhdIHctZnVsbCBiZy13aGl0ZS84IHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIixjaGlsZHJlbjpaP0soImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIFt0cmFuc2l0aW9uOndpZHRoXzEyMG1zX2xpbmVhcl0iLHN0eWxlOnt3aWR0aDpgJHtYfSVgfX0pOksoImRpdiIse2NsYXNzTmFtZToic2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGgtZnVsbCB3LVs0MCVdIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIn0pfSldfSl9ZnVuY3Rpb24gWjYoe3dpZHRoOiQsaGVpZ2h0OlEsdmlzaWJsZTpKfSl7cmV0dXJuIEsoImRpdiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtMyBib3R0b20tMyB6LTIwIHBvaW50ZXItZXZlbnRzLW5vbmUgc2VsZWN0LW5vbmUgcm91bmRlZC1sZyBweC0yLjUgcHktMSB0ZXh0LVsxMS41cHhdIGZvbnQtbW9ubyBsZWFkaW5nLW5vbmUgdHJhY2tpbmctd2lkZSB0ZXh0LXdoaXRlLzk1IGJnLXBhbmVsLWJnLXRyYW5zbHVjZW50IHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6Sj8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7Sj8wOjR9cHgpIHNjYWxlKCR7Sj8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoJCksIiAiLEsoInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoUSldfSl9ZnVuY3Rpb24gWDYoe3N0cmVhbWluZzokfSl7bGV0IFE9JD8iIzRhZGU4MCI6IiM4ZThlOTMiO3JldHVybiBLKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoic3RyZWFtLXN0YXR1cy1waWxsIixjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzVweF0gdGV4dC1bMTJweF0gZm9udC1tb25vIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e2NvbG9yOlF9LCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNoaWxkcmVuOltLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE4c19lYXNlXSIsc3R5bGU6e2JhY2tncm91bmQ6UX19KSwkPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9ZnVuY3Rpb24gZiQoJCxRLEope2xldCBaPUoubGF0Kk1hdGguUEkvMTgwLFg9KCQtSi5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihRLUoubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhaKSo2MzcxMDAwLHo6LVgqNjM3MTAwMH19ZnVuY3Rpb24gbSQoJCxRLEope2xldCBaPUoubGF0Kk1hdGguUEkvMTgwLFg9LVEvNjM3MTAwMCooMTgwL01hdGguUEkpLFk9JC8oNjM3MTAwMCpNYXRoLmNvcyhaKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OkoubGF0K1gsbG5nOkoubG5nK1l9fWZ1bmN0aW9uIHAkKCQsUSxKLFosWCl7bGV0IFk9WCpYLHE9WSpYLEc9KE4sQixVLFYpPT4wLjUqKDIqQisoLU4rVSkqWCsoMipOLTUqQis0KlUtVikqWSsoLU4rMypCLTMqVStWKSpxKTtyZXR1cm57eDpHKCQueCxRLngsSi54LFoueCksejpHKCQueixRLnosSi56LFoueikseTpHKCQueSxRLnksSi55LFoueSkscmF3QWx0OkcoJC5yYXdBbHQsUS5yYXdBbHQsSi5yYXdBbHQsWi5yYXdBbHQpfX1mdW5jdGlvbiB1JCgkLFEsSil7aWYoJC5sZW5ndGg8MilyZXR1cm4gJC5zbGljZSgpO2xldCBaPVtdLFg9JC5sZW5ndGgsWT1KP1g6WC0xO2ZvcihsZXQgcT0wO3E8WTtxKyspe2xldCBHPSRbSj8ocS0xK1gpJVg6TWF0aC5tYXgoMCxxLTEpXSxOPSRbcSVYXSxCPSRbKHErMSklWF0sVT0kW0o/KHErMiklWDpNYXRoLm1pbihYLTEscSsyKV0sVj1CLngtTi54LEM9Qi56LU4ueixMPU1hdGguaHlwb3QoVixDKSxGPU1hdGgubWF4KDIsTWF0aC5jZWlsKEwvUSkpO2ZvcihsZXQgej0wO3o8Rjt6Kyspe2xldCBIPXovRjtaLnB1c2gocCQoRyxOLEIsVSxIKSl9fWlmKCFKKVoucHVzaCgkW1gtMV0pO3JldHVybiBafWZ1bmN0aW9uIFk2KCQpe2lmKCQud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAkeyQuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IFE9e2xhdDokLndheXBvaW50cy5yZWR1Y2UoKHosSCk9PnorSC5sYXQsMCkvJC53YXlwb2ludHMubGVuZ3RoLGxuZzokLndheXBvaW50cy5yZWR1Y2UoKHosSCk9PnorSC5sbmcsMCkvJC53YXlwb2ludHMubGVuZ3RofSxKPSQud2F5cG9pbnRzLm1hcCgoeik9PnouYWx0Pz8wKSxaPU1hdGgubWluKC4uLkopLFg9TWF0aC5tYXgoLi4uSiksWT0kLndheXBvaW50cy5tYXAoKHopPT57bGV0e3g6SCx6Omt9PWYkKHoubGF0LHoubG5nLFEpLF89ei5hbHQ/PzA7cmV0dXJue3g6SCx6OmsseTpfLVoscmF3QWx0Ol99fSkscT11JChZLDgsISEkLmxvb3ApLEc9W10sTj0wO2ZvcihsZXQgej0wO3o8cS5sZW5ndGg7eisrKXtsZXQgSD1xW3pdO2lmKHo+MCl7bGV0IEU9cVt6LTFdO04rPU1hdGguaHlwb3QoSC54LUUueCxILnotRS56LEgueS1FLnkpfWxldHtsYXQ6ayxsbmc6X309bSQoSC54LEgueixRKSxTPU1hdGgubWF4KDAsSC55KTtHLnB1c2goe3g6SC54LHo6SC56LHk6UyxhcmM6TixsYXQ6ayxsbmc6X30pfWxldCBCPTEvMCxVPS0xLzAsVj0xLzAsQz0tMS8wLEw9MS8wLEY9LTEvMDtmb3IobGV0IHogb2YgRyl7aWYoei54PEIpQj16Lng7aWYoei54PlUpVT16Lng7aWYoei56PFYpVj16Lno7aWYoei56PkMpQz16Lno7aWYoei55PEwpTD16Lnk7aWYoei55PkYpRj16Lnl9cmV0dXJue3RyYWlsOiQsb3JpZ2luOlEscG9pbnRzOkcsdG90YWxEaXN0YW5jZTpHW0cubGVuZ3RoLTFdLmFyYyxib3VuZHM6e3g6W0IsVV0seTpbTCxGXSx6OltWLENdfSxyYXdNaW5BbHQ6WixyYXdNYXhBbHQ6WH19ZnVuY3Rpb24gZjAoJCxRKXtsZXQgSj0kLnRvdGFsRGlzdGFuY2U7aWYoSj09PTApcmV0dXJuICQucG9pbnRzWzBdO2xldCBaPVE7aWYoJC50cmFpbC5sb29wKVo9KFolSitKKSVKO2Vsc2V7aWYoWjw9MClyZXR1cm4gJC5wb2ludHNbMF07aWYoWj49SilyZXR1cm4gJC5wb2ludHNbJC5wb2ludHMubGVuZ3RoLTFdfWxldCBYPTAsWT0kLnBvaW50cy5sZW5ndGgtMTt3aGlsZShYKzE8WSl7bGV0IFU9WCtZPj4+MTtpZigkLnBvaW50c1tVXS5hcmM8PVopWD1VO2Vsc2UgWT1VfWxldCBxPSQucG9pbnRzW1hdLEc9JC5wb2ludHNbWV0sTj1HLmFyYy1xLmFyYyxCPU49PT0wPzA6KFotcS5hcmMpL047cmV0dXJue3g6cS54KyhHLngtcS54KSpCLHo6cS56KyhHLnotcS56KSpCLHk6cS55KyhHLnktcS55KSpCLGFyYzpaLGxhdDpxLmxhdCsoRy5sYXQtcS5sYXQpKkIsbG5nOnEubG5nKyhHLmxuZy1xLmxuZykqQn19ZnVuY3Rpb24gTTMoJCl7c3dpdGNoKCQpe2Nhc2Uid2FsayI6cmV0dXJuIDEuNDtjYXNlInJ1biI6cmV0dXJuIDM7Y2FzZSJjeWNsZSI6cmV0dXJuIDUuNTtjYXNlImRyaXZlIjpyZXR1cm4gMTMuNH19dmFyIGwkPVt7bGF0OjM3LjMzMjcyLGxuZzotMTIyLjAwODMzLGFsdDo0OX0se2xhdDozNy4zMzMwOSxsbmc6LTEyMi4wMDczNSxhbHQ6NDh9LHtsYXQ6MzcuMzMzNzMsbG5nOi0xMjIuMDA2NjMsYWx0OjQ5fSx7bGF0OjM3LjMzNDU0LGxuZzotMTIyLjAwNjI3LGFsdDo0OX0se2xhdDozNy4zMzU0LGxuZzotMTIyLjAwNjMzLGFsdDo0OX0se2xhdDozNy4zMzYxOCxsbmc6LTEyMi4wMDY3OSxhbHQ6NDV9LHtsYXQ6MzcuMzM2NzUsbG5nOi0xMjIuMDA3NTksYWx0OjQ1fSx7bGF0OjM3LjMzNzA0LGxuZzotMTIyLjAwODYxLGFsdDo0Nn0se2xhdDozNy4zMzY5OCxsbmc6LTEyMi4wMDk2OSxhbHQ6NDh9LHtsYXQ6MzcuMzM2NjIsbG5nOi0xMjIuMDEwNjYsYWx0OjQ4fSx7bGF0OjM3LjMzNTk4LGxuZzotMTIyLjAxMTM4LGFsdDo0OX0se2xhdDozNy4zMzUxNyxsbmc6LTEyMi4wMTE3NCxhbHQ6NTB9LHtsYXQ6MzcuMzM0MzEsbG5nOi0xMjIuMDExNjksYWx0OjUwfSx7bGF0OjM3LjMzMzU0LGxuZzotMTIyLjAxMTIyLGFsdDo1MH0se2xhdDozNy4zMzI5Nixsbmc6LTEyMi4wMTA0MixhbHQ6NTF9LHtsYXQ6MzcuMzMyNjgsbG5nOi0xMjIuMDA5NCxhbHQ6NTB9XSxkJD1be2xhdDozNy44MzIxMixsbmc6LTEyMi40ODA2NSxhbHQ6MzB9LHtsYXQ6MzcuODI5MzcsbG5nOi0xMjIuNDc5NzQsYWx0OjMwfSx7bGF0OjM3LjgyNjQ5LGxuZzotMTIyLjQ3OTQsYWx0OjMwfSx7bGF0OjM3LjgyMzYyLGxuZzotMTIyLjQ3OTA3LGFsdDo0NX0se2xhdDozNy44MjA3NCxsbmc6LTEyMi40Nzg3MyxhbHQ6NTl9LHtsYXQ6MzcuODE3ODYsbG5nOi0xMjIuNDc4MzksYWx0OjY2fSx7bGF0OjM3LjgxNDk4LGxuZzotMTIyLjQ3ODA2LGFsdDo2Nn0se2xhdDozNy44MTIxMSxsbmc6LTEyMi40Nzc3MixhbHQ6NTh9LHtsYXQ6MzcuODA5MjMsbG5nOi0xMjIuNDc3MzQsYWx0OjQ0fSx7bGF0OjM3LjgwOTQ5LGxuZzotMTIyLjQ3NzMsYWx0OjQ1fSx7bGF0OjM3LjgxMjM2LGxuZzotMTIyLjQ3NzY1LGFsdDo1OX0se2xhdDozNy44MTUyNCxsbmc6LTEyMi40Nzc5OCxhbHQ6NjZ9LHtsYXQ6MzcuODE4MTIsbG5nOi0xMjIuNDc4MzIsYWx0OjY2fSx7bGF0OjM3LjgyMSxsbmc6LTEyMi40Nzg2NixhbHQ6NTh9LHtsYXQ6MzcuODIzODcsbG5nOi0xMjIuNDc5LGFsdDo0NH0se2xhdDozNy44MjY3NSxsbmc6LTEyMi40NzkzMyxhbHQ6MzB9LHtsYXQ6MzcuODI5NjMsbG5nOi0xMjIuNDc5NjcsYWx0OjMwfSx7bGF0OjM3LjgzMjMzLGxuZzotMTIyLjQ4MDcyLGFsdDozMH1dLGMkPVt7bGF0OjM3Ljg4NjY0LGxuZzotMTIyLjYyNTk5LGFsdDoxMjF9LHtsYXQ6MzcuODg4ODcsbG5nOi0xMjIuNjIzMzIsYWx0OjEzNX0se2xhdDozNy44OTExNSxsbmc6LTEyMi42MjE2LGFsdDoxNjR9LHtsYXQ6MzcuODkzNTMsbG5nOi0xMjIuNjE5MjEsYWx0OjE4MH0se2xhdDozNy44OTQ2Nixsbmc6LTEyMi42MTU3NyxhbHQ6MjIwfSx7bGF0OjM3Ljg5NjMxLGxuZzotMTIyLjYxMjY4LGFsdDoyNzN9LHtsYXQ6MzcuODk5MTcsbG5nOi0xMjIuNjEwOTgsYWx0OjMxM30se2xhdDozNy45MDE2Nixsbmc6LTEyMi42MDg1NSxhbHQ6MzQyfSx7bGF0OjM3LjkwMTk5LGxuZzotMTIyLjYwNjAxLGFsdDo0MDh9LHtsYXQ6MzcuOTAzMzksbG5nOi0xMjIuNjA0MDEsYWx0OjQ1MH0se2xhdDozNy45MDY2Mixsbmc6LTEyMi42MDI5MSxhbHQ6NDQwfSx7bGF0OjM3LjkwOTcxLGxuZzotMTIyLjYwMTczLGFsdDo0MzJ9LHtsYXQ6MzcuOTEyMTMsbG5nOi0xMjIuNjAwMDcsYWx0OjQzNn0se2xhdDozNy45MTQzOSxsbmc6LTEyMi41OTc4LGFsdDo0MTB9LHtsYXQ6MzcuOTEyODUsbG5nOi0xMjIuNTk1MDQsYWx0OjQyMn0se2xhdDozNy45MTI3NCxsbmc6LTEyMi41OTIwMixhbHQ6NDI1fSx7bGF0OjM3LjkxNSxsbmc6LTEyMi41OTAzMixhbHQ6NDEyfSx7bGF0OjM3LjkxNjM3LGxuZzotMTIyLjU4OTAzLGFsdDo0MDZ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTg1OTUsYWx0OjM4Mn0se2xhdDozNy45MTc0LGxuZzotMTIyLjU4Mzk4LGFsdDozNzJ9LHtsYXQ6MzcuOTE2NDIsbG5nOi0xMjIuNTgyMzYsYWx0OjM1Mn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODAxMSxhbHQ6MzQyfV0sciQ9W3tsYXQ6NDAuNzgyMTYsbG5nOi03My45NjI1NCxhbHQ6Mzd9LHtsYXQ6NDAuNzgyMjEsbG5nOi03My45NjA5OCxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjgsbG5nOi03My45NjAxLGFsdDozNn0se2xhdDo0MC43ODQ0LGxuZzotNzMuOTU5MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg1NSxsbmc6LTczLjk1ODQ4LGFsdDozNn0se2xhdDo0MC43ODY2NCxsbmc6LTczLjk1Nzc0LGFsdDozNn0se2xhdDo0MC43ODc5LGxuZzotNzMuOTU3NjQsYWx0OjM2fSx7bGF0OjQwLjc4ODk4LGxuZzotNzMuOTU3OTIsYWx0OjM2fSx7bGF0OjQwLjc4ODY4LGxuZzotNzMuOTU5NTEsYWx0OjM3fSx7bGF0OjQwLjc4ODk3LGxuZzotNzMuOTYxMTIsYWx0OjM2fSx7bGF0OjQwLjc4ODMzLGxuZzotNzMuOTYyNSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4MjgsbG5nOi03My45NjQxNixhbHQ6Mzd9LHtsYXQ6NDAuNzg4MDUsbG5nOi03My45NjU3MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg2OTEsbG5nOi03My45NjYzNixhbHQ6MzZ9LHtsYXQ6NDAuNzg1NjYsbG5nOi03My45NjY2NSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NTgsbG5nOi03My45NjYwOCxhbHQ6MzZ9LHtsYXQ6NDAuNzg0MDIsbG5nOi03My45NjQ1OSxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjIsbG5nOi03My45NjMzNCxhbHQ6Mzd9XSxvJD1be2xhdDozNy41OTY1OSxsbmc6LTEyMi41MDMxNixhbHQ6NH0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg1MDUsbG5nOi0xMjIuNTA2OTgsYWx0OjkzfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH1dLG0wPVt7aWQ6ImFwcGxlLXBhcmstbG9vcCIsbmFtZToiQXBwbGUgUGFyayBMb29wIixkZXNjcmlwdGlvbjoiQ3VwZXJ0aW5vIOKAoiBmbGF0IHJpbmcgcm9hZCIsbW9kZToid2FsayIsd2F5cG9pbnRzOmwkLGxvb3A6ITB9LHtpZDoiZ29sZGVuLWdhdGUiLG5hbWU6IkdvbGRlbiBHYXRlIENyb3NzaW5nIixkZXNjcmlwdGlvbjoiU2FuIEZyYW5jaXNjbyDigKIgYnJpZGdlIHJvdW5kLXRyaXAiLG1vZGU6InJ1biIsd2F5cG9pbnRzOmQkLGxvb3A6ITB9LHtpZDoidGFtLXJpZGdlIixuYW1lOiJNdC4gVGFtIFJpZGdlIixkZXNjcmlwdGlvbjoiU3RpbnNvbiBCZWFjaCDigKIgU3RlZXAgUmF2aW5lICsgTWF0dCBEYXZpcyBsb29wIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6YyQsbG9vcDohMH0se2lkOiJjZW50cmFsLXBhcmsiLG5hbWU6IlJlc2Vydm9pciBMb29wIixkZXNjcmlwdGlvbjoiQ2VudHJhbCBQYXJrIOKAoiAyLjUga20iLG1vZGU6InJ1biIsd2F5cG9pbnRzOnIkLGxvb3A6ITB9LHtpZDoicGNoLXBhY2lmaWNhIixuYW1lOiJQYWNpZmljIENvYXN0IEh3eSIsZGVzY3JpcHRpb246IlBhY2lmaWNhIOKAoiBEZXZpbCdzIFNsaWRlIHJvdW5kLXRyaXAiLG1vZGU6ImRyaXZlIix3YXlwb2ludHM6byQsbG9vcDohMH1dO2Z1bmN0aW9uIEswKHtvcGVuOiQsb25PcGVuQ2hhbmdlOlEsc3VtbWFyeTpKLGNoaWxkcmVuOlosc3VtbWFyeUNsYXNzTmFtZTpYPSIiLGJvZHlDbGFzc05hbWU6WT0iZmxleCBmbGV4LWNvbCBnYXAtMi41IHB0LTIuNSIsY2xhc3NOYW1lOnE9IiIsLi4uR30pe3JldHVybiBLKCJkZXRhaWxzIix7b3BlbjokLG9uVG9nZ2xlOihOKT0+UShOLmN1cnJlbnRUYXJnZXQub3BlbiksY2xhc3NOYW1lOmBsZW0tc2VjdGlvbiBiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIgJHtxfWAsLi4uRyxjaGlsZHJlbjpbSygic3VtbWFyeSIse2NsYXNzTmFtZTpgbGVtLXRvZ2dsZSBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzkwIG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldICR7WH1gLGNoaWxkcmVuOltKLEsoRTIse29wZW46JH0pXX0pLEsoImRpdiIse2NsYXNzTmFtZTpZLGNoaWxkcmVuOlp9KV19KX1mdW5jdGlvbiBQNSh7bGFiZWw6JCx2YWx1ZTpRLG9wdGlvbnM6SixkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOll9KXtsZXRbcSxHXT1NKCExKSxOPUkobnVsbCksQj1JKG51bGwpLFtVLFZdPU0obnVsbCksQz0oKT0+e2xldCBIPU4uY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIUgpcmV0dXJuO1Yoe3RvcDpILmJvdHRvbSs0LGxlZnQ6SC5sZWZ0LG1pbldpZHRoOkgud2lkdGh9KX07QTAoKCk9PntpZihxKUMoKX0sW3FdKSxBMCgoKT0+e2lmKCFxfHwhVSlyZXR1cm47bGV0IEg9Qi5jdXJyZW50O2lmKCFIKXJldHVybjtsZXQgaz04LF89d2luZG93LmlubmVyV2lkdGgtSC5vZmZzZXRXaWR0aC1rO2lmKFUubGVmdD5fKVYoey4uLlUsbGVmdDpNYXRoLm1heChrLF8pfSl9LFtxLFVdKSxiKCgpPT57aWYoIXEpcmV0dXJuO2xldCBIPSgpPT5HKCExKSxrPShTKT0+e2xldCBFPVMudGFyZ2V0O2lmKCFCLmN1cnJlbnQ/LmNvbnRhaW5zKEUpJiYhTi5jdXJyZW50Py5jb250YWlucyhFKSlIKCl9LF89KFMpPT57aWYoIUIuY3VycmVudD8uY29udGFpbnMoUy50YXJnZXQpKUMoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGspLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLF8sITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEgpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsayksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsXywhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSCl9fSxbcV0pO2xldCBMPUkoITEpO2IoKCk9PntpZighcSl7TC5jdXJyZW50PSExO3JldHVybn1pZighVXx8TC5jdXJyZW50KXJldHVybjtsZXQgSD1CLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKTtpZighSD8ubGVuZ3RoKXJldHVybjtMLmN1cnJlbnQ9ITA7bGV0IGs9Si5maW5kSW5kZXgoKF8pPT5fLnZhbHVlPT09USk7SFtNYXRoLm1heChrLDApXT8uZm9jdXMoKX0sW3EsVSxKLFFdKTtsZXQgRj0oSCk9PntsZXQgaz1bLi4uQi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik/P1tdXSxfPWsuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtpZihILmtleT09PSJBcnJvd0Rvd24ifHxILmtleT09PSJBcnJvd1VwIil7SC5wcmV2ZW50RGVmYXVsdCgpO2xldCBTPUgua2V5PT09IkFycm93RG93biI/TWF0aC5taW4oXysxLGsubGVuZ3RoLTEpOk1hdGgubWF4KF8tMSwwKTtrW1NdPy5mb2N1cygpfWVsc2UgaWYoSC5rZXk9PT0iRXNjYXBlIilILnByZXZlbnREZWZhdWx0KCksRyghMSksTi5jdXJyZW50Py5mb2N1cygpfSx6PUouZmluZCgoSCk9PkgudmFsdWU9PT1RKTtyZXR1cm4gSygkMSx7Y2hpbGRyZW46W0soImJ1dHRvbiIse3JlZjpOLHR5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiQsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6cSxkaXNhYmxlZDpaLG9uQ2xpY2s6KCk9PkcoKEgpPT4hSCksY2xhc3NOYW1lOmB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgJHtZPz8iIn1gLGNoaWxkcmVuOksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIHRydW5jYXRlIixjaGlsZHJlbjp6Py5sYWJlbD8/UX0pfSkscSYmVSYmYzUoSygiZGl2Iix7cmVmOkIscm9sZToibGlzdGJveCIsImFyaWEtbGFiZWwiOiQsb25LZXlEb3duOkYsc3R5bGU6e3RvcDpVLnRvcCxsZWZ0OlUubGVmdCxtaW5XaWR0aDpVLm1pbldpZHRofSxjbGFzc05hbWU6ImZpeGVkIG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHotNTAiLGNoaWxkcmVuOkoubWFwKChIKT0+SygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpILnZhbHVlPT09USxvbkNsaWNrOigpPT57WChILnZhbHVlKSxHKCExKSxOLmN1cnJlbnQ/LmZvY3VzKCl9LGNsYXNzTmFtZTpgYmxvY2sgdy1mdWxsIHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBweC0yLjUgcHktMSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXdoaXRlLzggZm9jdXMtdmlzaWJsZTpiZy13aGl0ZS84IG91dGxpbmUtbm9uZSAke0gudmFsdWU9PT1RPyJ0ZXh0LWFjY2VudCI6IiJ9YCxjaGlsZHJlbjpILmxhYmVsfSxILnZhbHVlKSl9KSxkb2N1bWVudC5ib2R5KV19KX12YXIgaSQ9NjUwLF8zPVsxLDIsNSwyMF0scTY9MTAwMCxXMz17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gTDYoe3VkaWQ6JCxleGVjOlF9KXtsZXRbSixaXT1NKCExKSxbWCxZXT1NKG0wWzBdLmlkKSxbcSxHXT1NKG0wWzBdLm1vZGUpLFtOLEJdPU0oMSksW1UsVl09TShXMyksW0MsTF09TShudWxsKSxGPV8xKCgpPT5tMC5maW5kKChtKT0+bS5pZD09PVgpPz9tMFswXSxbWF0pLHo9XzEoKCk9Plk2KEYpLFtGXSksSD1JKDApLGs9SSgiaWRsZSIpLF89SShNMyhxKSpOKSxTPUkoMCksRT1JKHopLHk9SShudWxsKTtiKCgpPT57Xy5jdXJyZW50PU0zKHEpKk59LFtxLE5dKTtsZXQgeD1JKG51bGwpO2IoKCk9PntsZXQgbT1FLmN1cnJlbnQsZz1ILmN1cnJlbnQ7aWYoRS5jdXJyZW50PXosbSYmbSE9PXopeC5jdXJyZW50PXMkKG0sZyx6LHBlcmZvcm1hbmNlLm5vdygpKTtILmN1cnJlbnQ9MCxTLmN1cnJlbnQ9MCxrLmN1cnJlbnQ9ImlkbGUiLHkuY3VycmVudD1udWxsLFYoVzMpfSxbel0pO2xldCBZMT1JKDApLGY9SShudWxsKSx1PUkobnVsbCk7YigoKT0+e2xldCBtPTAsZz0ocyk9PntsZXQgcTE9Zi5jdXJyZW50LFYxPXExPT1udWxsPzE2Ok1hdGgubWluKDY0LHMtcTEpO2lmKGYuY3VycmVudD1zLFkxLmN1cnJlbnQ9KFkxLmN1cnJlbnQrVjEqMC4wMDAxMiklKE1hdGguUEkqMiksay5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgejE9Xy5jdXJyZW50KlYxLzEwMDA7SC5jdXJyZW50Kz16MSxTLmN1cnJlbnQrPVYxO2xldCBMMT1FLmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZighRS5jdXJyZW50LnRyYWlsLmxvb3AmJkguY3VycmVudD49TDEpSC5jdXJyZW50PUwxLGsuY3VycmVudD0icGF1c2VkIixWKHtzdGF0dXM6InBhdXNlZCIsYXJjOkwxLGVsYXBzZWRNczpTLmN1cnJlbnR9KX1sZXQgTjE9dS5jdXJyZW50O2lmKE4xKXtsZXQgejE9RS5jdXJyZW50LEwxPW51bGwsdj14LmN1cnJlbnQ7aWYodil7bGV0IGE9KHMtdi5zdGFydE1zKS9pJDtpZihhPj0xKXguY3VycmVudD1udWxsO2Vsc2V7bGV0IGw9JFEoYSk7ejE9ZSQodixsKSxMMT17eDp2LnByZXZNYXJrZXIueCsodi5uZXh0TWFya2VyLngtdi5wcmV2TWFya2VyLngpKmwseTp2LnByZXZNYXJrZXIueSsodi5uZXh0TWFya2VyLnktdi5wcmV2TWFya2VyLnkpKmwsejp2LnByZXZNYXJrZXIueisodi5uZXh0TWFya2VyLnotdi5wcmV2TWFya2VyLnopKmx9fX1RUShOMSx6MSxILmN1cnJlbnQsWTEuY3VycmVudCxzLGsuY3VycmVudD09PSJwbGF5aW5nIixMMSl9bT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZyl9O3JldHVybiBtPXJlcXVlc3RBbmltYXRpb25GcmFtZShnKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUobSl9LFtdKSxiKCgpPT57bGV0IG09c2V0SW50ZXJ2YWwoKCk9PntpZihrLmN1cnJlbnQ9PT0icGxheWluZyIpVih7c3RhdHVzOiJwbGF5aW5nIixhcmM6SC5jdXJyZW50LGVsYXBzZWRNczpTLmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChtKX0sW10pLGIoKCk9PntpZihVLnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IG09ITEsZz0wLHM9bnVsbCxxMT1hc3luYygpPT57aWYobXx8cylyZXR1cm47bGV0IE4xPURhdGUubm93KCk7aWYoTjEtZzxxNilyZXR1cm47Zz1OMTtsZXQgejE9ZjAoRS5jdXJyZW50LEguY3VycmVudCksTDE9YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke3oxLmxhdC50b0ZpeGVkKDcpfSwke3oxLmxuZy50b0ZpeGVkKDcpfWA7cz1RKEwxKS50aGVuKCh2KT0+e2lmKG0pcmV0dXJuO2lmKHYuZXhpdENvZGUhPT0wKUwoVTYodi5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIEwobnVsbCl9KS5jYXRjaCgodik9PntpZighbSlMKHYgaW5zdGFuY2VvZiBFcnJvcj92Lm1lc3NhZ2U6U3RyaW5nKHYpKX0pLmZpbmFsbHkoKCk9PntzPW51bGx9KX07cTEoKTtsZXQgVjE9c2V0SW50ZXJ2YWwocTEscTYpO3JldHVybigpPT57bT0hMCxjbGVhckludGVydmFsKFYxKX19LFtVLnN0YXR1cywkLFFdKTtsZXQgYz1UKCgpPT57aWYoay5jdXJyZW50PT09InBsYXlpbmciKXtrLmN1cnJlbnQ9InBhdXNlZCIsVigobSk9Pih7Li4ubSxzdGF0dXM6InBhdXNlZCJ9KSk7cmV0dXJufWlmKEguY3VycmVudD49RS5jdXJyZW50LnRvdGFsRGlzdGFuY2UmJiFFLmN1cnJlbnQudHJhaWwubG9vcClILmN1cnJlbnQ9MCxTLmN1cnJlbnQ9MDtpZih5LmN1cnJlbnQ9PW51bGwpe2xldCBtPWYwKEUuY3VycmVudCxILmN1cnJlbnQpO3kuY3VycmVudD17bGF0Om0ubGF0LGxuZzptLmxuZ319ay5jdXJyZW50PSJwbGF5aW5nIixWKChtKT0+KHsuLi5tLHN0YXR1czoicGxheWluZyIsYXJjOkguY3VycmVudCxlbGFwc2VkTXM6Uy5jdXJyZW50fSkpfSxbXSksUTE9VCgoKT0+e2suY3VycmVudD0iaWRsZSIsSC5jdXJyZW50PTAsUy5jdXJyZW50PTAsVihXMyk7bGV0IG09eS5jdXJyZW50O3kuY3VycmVudD1udWxsO2xldCBnPW0/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke20ubGF0LnRvRml4ZWQoNyl9LCR7bS5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7UShnKS50aGVuKChzKT0+e2lmKHMuZXhpdENvZGUhPT0wKUwoVTYocy5zdGRlcnIpfHxudWxsKTtlbHNlIEwobnVsbCl9KX0sW1EsJF0pLFUxPVQoKG0pPT57WShtKTtsZXQgZz1tMC5maW5kKChzKT0+cy5pZD09PW0pO2lmKGcpRyhnLm1vZGUpfSxbXSk7YigoKT0+KCk9PntpZihrLmN1cnJlbnQ9PT0iaWRsZSIpcmV0dXJuO2xldCBtPXkuY3VycmVudCxnPW0/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke20ubGF0LnRvRml4ZWQoNyl9LCR7bS5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7UShnKS5jYXRjaCgoKT0+e30pfSxbUSwkXSk7bGV0IEsxPVUuc3RhdHVzPT09InBsYXlpbmciLEExPUsxP2Ake0QzKFUuYXJjKX0gwrcgJHtCNihVLmVsYXBzZWRNcyl9YDpEMyh6LnRvdGFsRGlzdGFuY2UpO3JldHVybiBLKEswLHtvcGVuOkosb25PcGVuQ2hhbmdlOlosc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fbWlubWF4KDAsMWZyKV9hdXRvXSBbY29udGFpbmVyLXR5cGU6aW5saW5lLXNpemVdIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SygkMSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEo/Sygic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cyI6ITAsY2xhc3NOYW1lOiJtaW4tdy0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIG1heC13LWZ1bGwiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjJzLGJveC1zaGFkb3dfMC4yc10iLHN0eWxlOntiYWNrZ3JvdW5kOksxPyIjNGFkZTgwIjp6LnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzpLMT8iMCAwIDZweCByZ2JhKDc0LDIyMiwxMjgsMC43KSI6Im5vbmUifX0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMiLGNoaWxkcmVuOkExfSksIUsxJiZLKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsIjohMCxjbGFzc05hbWU6InNocmluay0wIixjaGlsZHJlbjoidG90YWwifSldfSk6Sygic3BhbiIse30pXX0pLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGJsb2NrIixjaGlsZHJlbjpbSyhQNSx7bGFiZWw6IlRyYWlsIix2YWx1ZTpYLG9uQ2hhbmdlOlUxLG9wdGlvbnM6bTAubWFwKChtKT0+KHt2YWx1ZTptLmlkLGxhYmVsOm0ubmFtZX0pKSxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIGhvdmVyOmJnLXdoaXRlL1swLjA3XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xNildIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZS9bMC4wOF0gZm9jdXM6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMjQpXSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC1bOXB4XSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SyhFMix7b3BlbjohMX0pfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpGLmRlc2NyaXB0aW9ufSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLVsjMGEwYTBjXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSBbYXNwZWN0LXJhdGlvOjE2LzExXSIsY2hpbGRyZW46W0soImNhbnZhcyIse3JlZjp1LGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBibG9jayJ9KSxLKGEkLHtwcmVwYXJlZDp6fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyXzFmcl8xZnJdIGdhcC0xLjUiLGNoaWxkcmVuOltLKFAzLHtsYWJlbDoiRGlzdGFuY2UiLHZhbHVlOkQzKFUuYXJjKX0pLEsoUDMse2xhYmVsOiJQYWNlIix2YWx1ZTpLUShfLmN1cnJlbnQpfSksSyhQMyx7bGFiZWw6IkVsYXBzZWQiLHZhbHVlOkI2KFUuZWxhcHNlZE1zKX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMS41IixjaGlsZHJlbjpbSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOmMsY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gJHtLMT8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJ9YCwiYXJpYS1wcmVzc2VkIjpLMSx0aXRsZTpLMT8iUGF1c2UiOiJQbGF5IixjaGlsZHJlbjpbSzE/SyhLMyx7fSk6SyhJMix7fSksSygic3BhbiIse2NoaWxkcmVuOksxPyJQYXVzZSI6IlBsYXkifSldfSksSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlExLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wNl0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvMjAgZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIixkaXNhYmxlZDpVLnN0YXR1cz09PSJpZGxlIiYmVS5hcmM9PT0wLHRpdGxlOiJTdG9wIGFuZCBjbGVhciBzaW11bGF0ZWQgbG9jYXRpb24iLGNoaWxkcmVuOltLKHkyLHt9KSxLKCJzcGFuIix7Y2hpbGRyZW46IlN0b3AifSldfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOksobiQse2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOnEsb25DaGFuZ2U6KG0pPT5HKG0pLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246SyhYMyx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOksoWTMse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246SyhxMyx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpLKEczLHt9KX1dfSl9KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgbT1fMy5pbmRleE9mKE4pLGc9XzNbKG0rMSklXzMubGVuZ3RoXTtCKGcpfSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHB4LTIuNSBib3JkZXIgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIG1pbi13LVs1NnB4XSBhY3RpdmU6c2NhbGUtWzAuOTddICR7Tj4xPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gaG92ZXI6Ymctd2hpdGUvWzAuODhdIGhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gaG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBob3ZlcjpiZy13aGl0ZS9bMC4wOV0gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgU3BlZWQgJHtOfcOXIOKAlCB0YXAgdG8gY3ljbGVgLHRpdGxlOmBTcGVlZCAke059w5cg4oCUIHRhcCB0byBjeWNsZWAsY2hpbGRyZW46W0soWjMse30pLE4+MSYmSygic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIFtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXNdIixjaGlsZHJlbjpbTiwiw5ciXX0pXX0pXX0pLEMmJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46Q30pXX0pfXZhciBQMz14MChmdW5jdGlvbih7bGFiZWw6USx2YWx1ZTpKfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJnLXdoaXRlL1swLjAzXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSByb3VuZGVkLW1kIHB5LVs1cHhdIHB4LVs3cHhdIG1pbi13LTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzlweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjA2ZW1dIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOlF9KSxLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpKfSldfSl9KTtmdW5jdGlvbiBuJCh7dmFsdWU6JCxvbkNoYW5nZTpRLG9wdGlvbnM6SixhcmlhTGFiZWw6Wn0pe3JldHVybiBLKCJkaXYiLHtyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOlosY2xhc3NOYW1lOiJmbGV4IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBwLTAuNSBnYXAtMC41IixjaGlsZHJlbjpKLm1hcCgoWCk9PntsZXQgWT1YLnZhbHVlPT09JDtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5RKFgudmFsdWUpLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gcHktWzVweF0gcHgtMiB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSBtaW4taC1bMjJweF0gJHtZPyJiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvNjAgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIGhvdmVyOnRleHQtd2hpdGUvOTAifWAsImFyaWEtcHJlc3NlZCI6WSwiYXJpYS1sYWJlbCI6WC5pY29uP1gubGFiZWw6dm9pZCAwLHRpdGxlOlguaWNvbj9YLmxhYmVsOnZvaWQgMCxjaGlsZHJlbjpYLmljb24/P1gubGFiZWx9LFgudmFsdWUpfSl9KX1mdW5jdGlvbiBhJCh7cHJlcGFyZWQ6JH0pe2lmKCQucmF3TWF4QWx0LSQucmF3TWluQWx0PDUpcmV0dXJuIG51bGw7cmV0dXJuIEsoJDEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIGxlZnQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSyhZNSx7ZGlyOiJ1cCJ9KSwiICIsTjYoJC5yYXdNYXhBbHQpXX0pLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSyhZNSx7ZGlyOiJkb3duIn0pLCIgIixONigkLnJhd01pbkFsdCldfSldfSl9dmFyIEc2PTE0MDtmdW5jdGlvbiBWNigkLFEpe2xldCBKPUFycmF5KFEpO2ZvcihsZXQgWj0wO1o8UTtaKyspe2xldCBYPVE9PT0xPzA6Wi8oUS0xKSxZPWYwKCQsWCokLnRvdGFsRGlzdGFuY2UpO0pbWl09e3g6WS54LHk6WS55LHo6WS56fX1yZXR1cm4gSn1mdW5jdGlvbiBzJCgkLFEsSixaKXtsZXQgWD0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLFk9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixxPSQuYm91bmRzLnlbMF0sRz1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pLE49KEouYm91bmRzLnhbMF0rSi5ib3VuZHMueFsxXSkvMixCPShKLmJvdW5kcy56WzBdK0ouYm91bmRzLnpbMV0pLzIsVT1KLmJvdW5kcy55WzBdLEM9TWF0aC5tYXgoMSxKLmJvdW5kcy54WzFdLUouYm91bmRzLnhbMF0sSi5ib3VuZHMuelsxXS1KLmJvdW5kcy56WzBdKS9HLEY9VjYoJCxHNikubWFwKCh4KT0+KHt4Oih4LngtWCkqQytOLHk6KHgueS1xKSpDK1UsejooeC56LVkpKkMrQn0pKSx6PVY2KEosRzYpLEg9KCQudHJhaWwubG9vcHx8Si50cmFpbC5sb29wKT8/ITEsaz10JChGLHosSCksXz1mMCgkLFEpLFM9e3g6KF8ueC1YKSpDK04seTooXy55LXEpKkMrVSx6OihfLnotWSkqQytCfSxFPWYwKEosMCkseT17eDpFLngseTpFLnksejpFLnp9O3JldHVybntmcm9tOiQsdG86Sixmcm9tUHRzOkYsdG9QdHM6ayxwcmV2TWFya2VyOlMsbmV4dE1hcmtlcjp5LHN0YXJ0TXM6Wn19ZnVuY3Rpb24gdCQoJCxRLEope2xldCBaPSQubGVuZ3RoLFg9MS8wLFk9MCxxPSExLEc9W1EsWy4uLlFdLnJldmVyc2UoKV07Zm9yKGxldCBVPTA7VTxHLmxlbmd0aDtVKyspe2xldCBWPUdbVV0sQz1KP1o6MTtmb3IobGV0IEw9MDtMPEM7TCsrKXtsZXQgRj0wO2ZvcihsZXQgej0wO3o8Wjt6Kyspe2xldCBIPSRbel0saz1WWyh6K0wpJVpdLF89SC54LWsueCxTPUgueS1rLnksRT1ILnotay56O2lmKEYrPV8qXytTKlMrRSpFLEY+PVgpYnJlYWt9aWYoRjxYKVg9RixZPUwscT1VPT09MX19bGV0IE49cT9bLi4uUV0ucmV2ZXJzZSgpOlEsQj1BcnJheShaKTtmb3IobGV0IFU9MDtVPFo7VSsrKUJbVV09TlsoVStZKSVaXTtyZXR1cm4gQn1mdW5jdGlvbiBlJCgkLFEpe2xldCBKPSQuZnJvbVB0cy5sZW5ndGgsWj1BcnJheShKKSxYPTAsWT1udWxsLHE9MS8wLEc9LTEvMCxOPTEvMCxCPS0xLzAsVT0xLzAsVj0tMS8wO2ZvcihsZXQgQz0wO0M8SjtDKyspe2xldCBMPSQuZnJvbVB0c1tDXSxGPSQudG9QdHNbQ10sej1MLngrKEYueC1MLngpKlEsSD1MLnkrKEYueS1MLnkpKlEsaz1MLnorKEYuei1MLnopKlE7aWYoWSl7bGV0IFM9ei1ZLngsRT1ILVkueSx5PWstWS56O1grPU1hdGguc3FydChTKlMrRSpFK3kqeSl9bGV0IF89e3g6eix5OkgsejprLGFyYzpYLGxhdDowLGxuZzowfTtpZihaW0NdPV8sWT1fLHo8cSlxPXo7aWYoej5HKUc9ejtpZihIPE4pTj1IO2lmKEg+QilCPUg7aWYoazxVKVU9aztpZihrPlYpVj1rfXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6Wix0b3RhbERpc3RhbmNlOlgsYm91bmRzOnt4OltxLEddLHk6W04sQl0sejpbVSxWXX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1RKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLVEpfX1mdW5jdGlvbiAkUSgkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn1mdW5jdGlvbiBRUSgkLFEsSixaLFgsWSxxKXtsZXQgRz0kLmdldENvbnRleHQoIjJkIik7aWYoIUcpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpOLGNsaWVudEhlaWdodDpCfT0kO2lmKE49PT0wfHxCPT09MClyZXR1cm47bGV0IFU9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSxWPU1hdGgucm91bmQoTipVKSxDPU1hdGgucm91bmQoQipVKTtpZigkLndpZHRoIT09Vnx8JC5oZWlnaHQhPT1DKSQud2lkdGg9ViwkLmhlaWdodD1DO0cuc2V0VHJhbnNmb3JtKFUsMCwwLFUsMCwwKSxHLmNsZWFyUmVjdCgwLDAsTixCKTtsZXQgTD1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KE4qMC41LEIqMC41NSxNYXRoLm1pbihOLEIpKjAuMixOKjAuNSxCKjAuNTUsTWF0aC5tYXgoTixCKSowLjg1KTtMLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksTC5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLEcuZmlsbFN0eWxlPUwsRy5maWxsUmVjdCgwLDAsTixCKSxKUShHLE4sQik7bGV0e3BvaW50czpGLGJvdW5kczp6fT1RO2lmKEYubGVuZ3RoPDIpcmV0dXJuO2xldCBIPTI4Kk1hdGguUEkvMTgwLGs9TWF0aC5zaW4oSCksXz1NYXRoLmNvcyhIKSxTPU1hdGguc2luKFopLEU9TWF0aC5jb3MoWikseT0oei54WzBdK3oueFsxXSkvMix4PSh6LnpbMF0rei56WzFdKS8yLFkxPXoueFsxXS16LnhbMF0sZj16LnpbMV0tei56WzBdLHU9ei55WzFdLXoueVswXSxjPU1hdGgubWF4KFkxLGYpKjEuMDUsUTE9TWF0aC5tYXgoZipfK3UqayxZMSowLjQpKjEuMTUsVTE9TiowLjA4LEsxPUIqMC4xOCxBMT1NYXRoLm1pbigoTi1VMSoyKS9jLChCLUsxKjIpL1ExKSoxLjQ1LG09dTwxPzE6TWF0aC5taW4oMjQsMTQwL01hdGgubWF4KDIwLHUpKSxnPSh2LGEsbCk9PntsZXQgWjE9di15LFAxPWwteCxEPVoxKkUrUDEqUyxyPS1aMSpTK1AxKkUsZT1hKm0sZD1lKl8tciprLFI9ZSprK3IqXztyZXR1cm57c3g6Ti8yK0QqQTEsc3k6QiowLjU1LWQqQTEsZGVwdGg6Un19LHM9MzgscTE9Ri5tYXAoKHYpPT57bGV0IGE9Zyh2Lngsdi55LHYueiksbD1nKHYueCwwLHYueiksWjE9e3N4OmEuc3gsc3k6TWF0aC5tYXgobC5zeSxhLnN5K3MpLGRlcHRoOmwuZGVwdGh9O3JldHVybntwOnYsdG9wOmEsYm90OloxfX0pO2ZvcihsZXQgdj0xO3Y8cTEubGVuZ3RoO3YrKyl7bGV0IGE9cTFbdi0xXSxsPXExW3ZdLFoxPUcuY3JlYXRlTGluZWFyR3JhZGllbnQoKGEudG9wLnN4K2wudG9wLnN4KS8yLChhLnRvcC5zeStsLnRvcC5zeSkvMiwoYS5ib3Quc3grbC5ib3Quc3gpLzIsKGEuYm90LnN5K2wuYm90LnN5KS8yKTtaMS5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIpLFoxLmFkZENvbG9yU3RvcCgwLjQ1LCJyZ2JhKDE4MCwxODAsMTg1LDAuMjgpIiksWjEuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxaMS5hZGRDb2xvclN0b3AoMSwicmdiYSgwLDAsMCwwKSIpLEcuZmlsbFN0eWxlPVoxLEcuYmVnaW5QYXRoKCksRy5tb3ZlVG8oYS50b3Auc3gsYS50b3Auc3kpLEcubGluZVRvKGwudG9wLnN4LGwudG9wLnN5KSxHLmxpbmVUbyhsLmJvdC5zeCxsLmJvdC5zeSksRy5saW5lVG8oYS5ib3Quc3gsYS5ib3Quc3kpLEcuY2xvc2VQYXRoKCksRy5maWxsKCl9Ry5zdHJva2VTdHlsZT0iI2ZmZmZmZiIsRy5saW5lV2lkdGg9MS42LEcubGluZUNhcD0icm91bmQiLEcubGluZUpvaW49InJvdW5kIixHLmJlZ2luUGF0aCgpO2ZvcihsZXQgdj0wO3Y8cTEubGVuZ3RoO3YrKyl7bGV0e3RvcDphfT1xMVt2XTtpZih2PT09MClHLm1vdmVUbyhhLnN4LGEuc3kpO2Vsc2UgRy5saW5lVG8oYS5zeCxhLnN5KX1HLnN0cm9rZSgpO2xldCBWMT1KO0cuc3Ryb2tlU3R5bGU9IiNmOWQyYTQiLEcubGluZVdpZHRoPTIuMixHLmJlZ2luUGF0aCgpO2xldCBOMT0hMTtmb3IobGV0IHY9MDt2PHExLmxlbmd0aDt2Kyspe2xldHtwOmEsdG9wOmx9PXExW3ZdO2lmKGEuYXJjPlYxKWJyZWFrO2lmKCFOMSlHLm1vdmVUbyhsLnN4LGwuc3kpLE4xPSEwO2Vsc2UgRy5saW5lVG8obC5zeCxsLnN5KX1pZihOMSlHLnN0cm9rZSgpO2xldCB6MT1xPz9mMChRLEopLEwxPWcoejEueCx6MS55LHoxLnopO2lmKFkpe2xldCBsPVglMjYwMC8yNjAwLFoxPTQrMjIqbCxQMT0wLjIyKigxLWwpLEQ9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChMMS5zeCxMMS5zeSxaMSowLjUsTDEuc3gsTDEuc3ksWjEpO0QuYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxELmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHtQMS50b0ZpeGVkKDMpfSlgKSxELmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksRy5maWxsU3R5bGU9RCxHLmJlZ2luUGF0aCgpLEcuYXJjKEwxLnN4LEwxLnN5LFoxLDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1HLmZpbGxTdHlsZT0iI2ZmZiIsRy5iZWdpblBhdGgoKSxHLmFyYyhMMS5zeCxMMS5zeSwzLjgsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfWZ1bmN0aW9uIEpRKCQsUSxKKXskLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBZPTc7WTxKO1krPTE0KWZvcihsZXQgcT03O3E8UTtxKz0xNCkkLmJlZ2luUGF0aCgpLCQuYXJjKHEsWSwwLjcsMCxNYXRoLlBJKjIpLCQuZmlsbCgpfWZ1bmN0aW9uIEQzKCQpe2lmKCQ8MTAwMClyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeygkLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiBCNigkKXtsZXQgUT1NYXRoLmZsb29yKCQvMTAwMCksSj1NYXRoLmZsb29yKFEvMzYwMCksWj1NYXRoLmZsb29yKFElMzYwMC82MCksWD1RJTYwO2lmKEo+MClyZXR1cm5gJHtKfToke1oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1p9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIEtRKCQpe2lmKCQ8PTApcmV0dXJuIuKAlCI7aWYoJD43KXJldHVybmAkeygkKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0IFE9MTAwMC8kLEo9TWF0aC5mbG9vcihRLzYwKSxaPU1hdGgucm91bmQoUSU2MCk7cmV0dXJuYCR7Sn06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gTjYoJCl7cmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBVNigkKXtsZXQgUT0kLnRyaW0oKTtpZighUSlyZXR1cm4iIjtsZXQgSj1RLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoSilyZXR1cm4gSlsxXTtyZXR1cm4gUS5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/UX1hc3luYyBmdW5jdGlvbiBUMygkLFEsSil7bGV0IFo9YXdhaXQgJChgeGNydW4gc2ltY3RsIGdldF9hcHBfY29udGFpbmVyICR7UX0gJHtGMShKKX0gYXBwYCk7aWYoWi5leGl0Q29kZSE9PTApcmV0dXJue2Vycm9yOlouc3RkZXJyLnRyaW0oKXx8IkFwcCBub3QgZm91bmQgb24gc2ltdWxhdG9yIn07bGV0IFg9Wi5zdGRvdXQudHJpbSgpO2lmKCFYKXJldHVybntlcnJvcjoiRW1wdHkgYXBwIHBhdGgifTtsZXQgWT1hd2FpdCAkKGBwbHV0aWwgLWNvbnZlcnQganNvbiAtbyAtICR7RjEoWCsiL0luZm8ucGxpc3QiKX1gKSxxPXt9O2lmKFkuZXhpdENvZGU9PT0wKXRyeXtxPUpTT04ucGFyc2UoWS5zdGRvdXQpfWNhdGNoe31sZXQgRyxCPShxPy5DRkJ1bmRsZUljb25zPy5DRkJ1bmRsZVByaW1hcnlJY29uPz9xPy5bIkNGQnVuZGxlSWNvbnN+aXBhZCJdPy5DRkJ1bmRsZVByaW1hcnlJY29uKT8uQ0ZCdW5kbGVJY29uRmlsZXM/P3E/LkNGQnVuZGxlSWNvbkZpbGVzO2lmKEImJkIubGVuZ3RoPjApRz1CW0IubGVuZ3RoLTFdO2Vsc2UgaWYodHlwZW9mIHE/LkNGQnVuZGxlSWNvbkZpbGU9PT0ic3RyaW5nIilHPXEuQ0ZCdW5kbGVJY29uRmlsZTtsZXQgVT1udWxsO2lmKEcpe2xldCBWPVtgJHtHfUAzeC5wbmdgLGAke0d9QDJ4LnBuZ2AsYCR7R30ucG5nYCxgJHtHfTYweDYwQDN4LnBuZ2AsYCR7R302MHg2MEAyeC5wbmdgXSxMPShhd2FpdCAkKGBiYXNoIC1jICR7RjEoVi5tYXAoKEYpPT5gWyAtZiAke0YxKFgrIi8iK0YpfSBdICYmIGVjaG8gJHtGMShYKyIvIitGKX0gJiYgZXhpdCAwYCkuam9pbigiOyAiKSsiOyBleGl0IDEiKX1gKSkuc3Rkb3V0LnRyaW0oKTtpZihMKXtsZXQgRj1hd2FpdCAkKGBiYXNlNjQgLWkgJHtGMShMKX1gKTtpZihGLmV4aXRDb2RlPT09MClVPWBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtGLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIil9YH19cmV0dXJue2FwcFBhdGg6WCxkaXNwbGF5TmFtZTpxLkNGQnVuZGxlRGlzcGxheU5hbWU/P3EuQ0ZCdW5kbGVOYW1lLHNob3J0VmVyc2lvbjpxLkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nLGJ1bmRsZVZlcnNpb246cS5DRkJ1bmRsZVZlcnNpb24sbWluT1M6cS5NaW5pbXVtT1NWZXJzaW9uLGV4ZWN1dGFibGU6cS5DRkJ1bmRsZUV4ZWN1dGFibGUsaWNvbkRhdGFVcmw6VX19dmFyIFoyPW5ldyBNYXA7ZnVuY3Rpb24gQzYoJCxRLEope2xldCBaPWAke1F9OiR7Sn1gLFg9WjIuZ2V0KFopO2lmKFghPT12b2lkIDApcmV0dXJuIFByb21pc2UucmVzb2x2ZShYKTtsZXQgWT1UMygkLFEsSikudGhlbigocSk9PntsZXQgRz1xLmljb25EYXRhVXJsPz9udWxsO3JldHVybiBaMi5zZXQoWixHKSxHfSkuY2F0Y2goKCk9PntyZXR1cm4gWjIuc2V0KFosbnVsbCksbnVsbH0pO3JldHVybiBaMi5zZXQoWixZKSxZfWZ1bmN0aW9uIFpRKCQpe3JldHVybiAkLnN0YXJ0c1dpdGgoImNvbS5hcHBsZS4iKX1mdW5jdGlvbiBYUSgkKXtpZigkPT09ImNvbS5hcHBsZS5zcHJpbmdib2FyZCIpcmV0dXJuIlNwcmluZ0JvYXJkIjtyZXR1cm4gJH1mdW5jdGlvbiBZUSh7YnVuZGxlSWQ6JH0pe2xldCBRPVpRKCQpO3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOlE/InN5c3RlbS1hcHAtaWNvbiI6ImFwcC1pY29uLWZhbGxiYWNrIixjbGFzc05hbWU6YHctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJvcmRlciBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciAke1E/ImJvcmRlci1bIzNiNWY5OV0gYmctW2xpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKV0gdGV4dC1bI2M4ZDdmZl0iOiJib3JkZXItd2hpdGUvMTAgYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODAifWAsImFyaWEtbGFiZWwiOlE/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsdGl0bGU6UT8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIixjaGlsZHJlbjpRP0soInN2ZyIse3JvbGU6ImltZyIsdmlld0JveDoiMCAwIDI0IDI0Iix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNsYXNzTmFtZToic2l6ZS1bMTlweF0iLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W0soInRpdGxlIix7Y2hpbGRyZW46IkFwcGxlIn0pLEsoInBhdGgiLHtkOiJNMTIuMTUyIDYuODk2Yy0uOTQ4IDAtMi40MTUtMS4wNzgtMy45Ni0xLjA0LTIuMDQuMDI3LTMuOTEgMS4xODMtNC45NjEgMy4wMTQtMi4xMTcgMy42NzUtLjU0NiA5LjEwMyAxLjUxOSAxMi4wOSAxLjAxMyAxLjQ1NCAyLjIwOCAzLjA5IDMuNzkyIDMuMDM5IDEuNTItLjA2NSAyLjA5LS45ODcgMy45MzUtLjk4NyAxLjgzMSAwIDIuMzUuOTg3IDMuOTYuOTQ4IDEuNjM3LS4wMjYgMi42NzYtMS40OCAzLjY3Ni0yLjk0OCAxLjE1Ni0xLjY4OCAxLjYzNi0zLjMyNSAxLjY2Mi0zLjQxNS0uMDM5LS4wMTMtMy4xODItMS4yMjEtMy4yMi00Ljg1Ny0uMDI2LTMuMDQgMi40OC00LjQ5NCAyLjU5Ny00LjU1OS0xLjQyOS0yLjA5LTMuNjIzLTIuMzI0LTQuMzktMi4zNzYtMi0uMTU2LTMuNjc1IDEuMDktNC42MSAxLjA5ek0xNS41MyAzLjgzYy44NDMtMS4wMTIgMS40LTIuNDI3IDEuMjQ1LTMuODMtMS4yMDcuMDUyLTIuNjYyLjgwNS0zLjUzMiAxLjgxOC0uNzguODk2LTEuNDU0IDIuMzM4LTEuMjczIDMuNzE0IDEuMzM4LjEwNCAyLjcxNS0uNjg4IDMuNTU5LTEuNzAxIn0pXX0pOksoejIse3NpemU6MTksc3Ryb2tlV2lkdGg6MS45fSl9KX1mdW5jdGlvbiBxUSh7YnVuZGxlSWQ6JCxpY29uRGF0YVVybDpRfSl7aWYoUSlyZXR1cm4gSygiaW1nIix7c3JjOlEsY2xhc3NOYW1lOiJ3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBvYmplY3QtY292ZXIgYm9yZGVyIGJvcmRlci13aGl0ZS84IixhbHQ6IiJ9KTtyZXR1cm4gSyhZUSx7YnVuZGxlSWQ6JH0pfWZ1bmN0aW9uIHo2KHt1ZGlkOiQsY3VycmVudEFwcDpRfSl7bGV0W0osWl09TShudWxsKSxbWCxZXT1NKCExKTtpZihiKCgpPT57aWYoIVEpe1oobnVsbCk7cmV0dXJufWxldCBxPSExO3JldHVybiBaKHtidW5kbGVJZDpRLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6US5pc1JlYWN0TmF0aXZlLHBpZDpRLnBpZCxsb2FkaW5nOiEwfSksVDMoVzEsJCxRLmJ1bmRsZUlkKS50aGVuKChHKT0+e2lmKHEpcmV0dXJuO1ooe2J1bmRsZUlkOlEuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpRLmlzUmVhY3ROYXRpdmUscGlkOlEucGlkLGxvYWRpbmc6ITEsLi4uR30pfSksKCk9PntxPSEwfX0sWyQsUSxRPy5idW5kbGVJZCxRPy5waWQsUT8uaXNSZWFjdE5hdGl2ZV0pLCFKKXJldHVybiBLKEdRLHt9KTtyZXR1cm4gSyhLMCx7b3BlbjpYLG9uT3BlbkNoYW5nZTpZLHN1bW1hcnlDbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCIsc3VtbWFyeTpLKCQxLHtjaGlsZHJlbjpbSyhxUSx7YnVuZGxlSWQ6Si5idW5kbGVJZCxpY29uRGF0YVVybDpKLmljb25EYXRhVXJsfSksSyhWUSx7YnVuZGxlSWQ6Si5idW5kbGVJZCxkaXNwbGF5TmFtZTpKLmRpc3BsYXlOYW1lfSldfSksY2hpbGRyZW46W0ouZXJyb3ImJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46Si5lcnJvcn0pLEsoImRsIix7Y2xhc3NOYW1lOiJtLTAgZmxleCBmbGV4LWNvbCBnYXAtMS41IixjaGlsZHJlbjpbSyhYMix7bGFiZWw6IlZlcnNpb24iLHZhbHVlOkouc2hvcnRWZXJzaW9uP2Ake0ouc2hvcnRWZXJzaW9ufSAoJHtKLmJ1bmRsZVZlcnNpb24/PyLigJQifSlgOkoubG9hZGluZz8i4oCmIjoi4oCUIn0pLEsoWDIse2xhYmVsOiJNaW4gaU9TIix2YWx1ZTpKLm1pbk9TPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKX0pLEsoWDIse2xhYmVsOiJFeGVjdXRhYmxlIix2YWx1ZTpKLmV4ZWN1dGFibGU/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksSyhYMix7bGFiZWw6IlBJRCIsdmFsdWU6Si5waWQhPW51bGw/U3RyaW5nKEoucGlkKToi4oCUIn0pLEouaXNSZWFjdE5hdGl2ZSYmSyhYMix7bGFiZWw6IlJlYWN0IE5hdGl2ZSIsdmFsdWU6IlllcyJ9KSxLKFgyLHtsYWJlbDoiQXBwIHBhdGgiLHZhbHVlOkouYXBwUGF0aD8/KEoubG9hZGluZz8i4oCmIjoi4oCUIiksbW9ubzohMCxhY3Rpb246Si5hcHBQYXRoP3t0aXRsZToiUmV2ZWFsIGluIEZpbmRlciIsb25DbGljazooKT0+e1cxKGBvcGVuIC1SICR7RjEoSi5hcHBQYXRoKX1gKX0saWNvbjpLKEgyLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuMn0pfTp2b2lkIDB9KV19KV19KX1mdW5jdGlvbiBHUSgpe3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtZGV0ZWN0aW9uLXNrZWxldG9uIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtbGFiZWwiOiJXYWl0aW5nIGZvciBmb3JlZ3JvdW5kIGFwcCIsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBiZy13aGl0ZS9bMC4wOF0ifSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImgtMy41IHctWzQ2JV0gcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjEyXSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTIuNSB3LVs2OCVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSksSygic3BhbiIse2NsYXNzTmFtZToidy0yLjUgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSJ9KV19KX0pfWZ1bmN0aW9uIFZRKHtidW5kbGVJZDokLGRpc3BsYXlOYW1lOlF9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBsZWFkaW5nLXRpZ2h0IHRleHQtbGVmdCIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIHRydW5jYXRlIixjaGlsZHJlbjpRPz9YUSgkKX0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdHJ1bmNhdGUiLHRpdGxlOiQsY2hpbGRyZW46JH0pXX0pfWZ1bmN0aW9uIFgyKHtsYWJlbDokLHZhbHVlOlEsbW9ubzpKLGFjdGlvbjpafSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZ3JvdXAgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSygiZHQiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOiR9KSxLKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtd2hpdGUvOTAgZmxleC0xIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgcmVsYXRpdmUgJHtKPyJmb250LW1vbm8gdGV4dC1bMTFweF0iOiJ0ZXh0LVsxMnB4XSJ9YCx0aXRsZTpRLGNoaWxkcmVuOltRLFomJksoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCBwbC03IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQscmdiYSgyOCwyOCwzMCwwKV8wJSwjMWMxYzFlXzU1JSldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSx0cmFuc2Zvcm1fMC4xNXNfZWFzZV0gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LTEgcG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGdyb3VwLWhvdmVyOnBvaW50ZXItZXZlbnRzLWF1dG8iLGNoaWxkcmVuOksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpaLm9uQ2xpY2ssdGl0bGU6Wi50aXRsZSwiYXJpYS1sYWJlbCI6Wi50aXRsZSxjbGFzc05hbWU6InctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46Wi5pY29ufSl9KV19KV19KX12YXIgSDY9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im5vdGlmaWNhdGlvbnMiLGxhYmVsOiJOb3RpZmljYXRpb25zIn0se2tleToibW90aW9uIixsYWJlbDoiTW90aW9uIn0se2tleToibWVkaWEtbGlicmFyeSIsbGFiZWw6Ik1lZGlhIExpYnJhcnkifSx7a2V5OiJzaXJpIixsYWJlbDoiU2lyaSJ9XTtmdW5jdGlvbiBGNih7dWRpZDokLGJ1bmRsZUlkOlF9KXtsZXRbSixaXT1NKHt9KSxbWCxZXT1NKG51bGwpLFtxLEddPU0obnVsbCksW04sQl09TSghMSksVT1fMSgoKT0+e2xldCBMPXR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5zZXJ2ZVNpbUJpbjtpZighTClyZXR1cm4ic2VydmUtc2ltIjtpZigvXC50cyQvLnRlc3QoTCkpcmV0dXJuYGJ1biAke0YxKEwpfWA7aWYoL1wuanMkLy50ZXN0KEwpKXJldHVybmBub2RlICR7RjEoTCl9YDtyZXR1cm4gRjEoTCl9LFtdKTtiKCgpPT57Wih7fSksRyhudWxsKX0sW1FdKTtsZXQgVj1UKGFzeW5jKEwsRik9PntpZighUSlyZXR1cm47bGV0IHo9YCR7TH06JHtGfWA7WSh6KSxHKG51bGwpO3RyeXtsZXQgSD1hd2FpdCBXMShgJHtVfSBwZXJtaXNzaW9ucyAke0Z9ICR7TH0gJHtGMShRKX0gLWQgJHtGMSgkKX1gKTtpZihILmV4aXRDb2RlIT09MCl7RyhILnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7SC5leGl0Q29kZX0pYCk7cmV0dXJufVooKGspPT4oey4uLmssW0xdOkY9PT0icmVzZXQiP3ZvaWQgMDpGfSkpfWZpbmFsbHl7WShudWxsKX19LFtVLCQsUV0pLEM9VChhc3luYygpPT57aWYoIVEpcmV0dXJuO1koIl9fYWxsX18iKSxHKG51bGwpO3RyeXtsZXQgTD1hd2FpdCBXMShgJHtVfSBwZXJtaXNzaW9ucyByZXNldCBhbGwgJHtGMShRKX0gLWQgJHtGMSgkKX1gKTtpZihMLmV4aXRDb2RlIT09MCl7RyhMLnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7TC5leGl0Q29kZX0pYCk7cmV0dXJufVooe30pfWZpbmFsbHl7WShudWxsKX19LFtVLCQsUV0pO2lmKCFRKXJldHVybiBLKEJRLHt9KTtyZXR1cm4gSyhLMCx7b3BlbjpOLG9uT3BlbkNoYW5nZTpCLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoJDEse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxLKCJzcGFuIix7fSldfSksY2hpbGRyZW46W3EmJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46cX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6Im1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIGZsZXggZmxleC1jb2wgZ2FwLTEgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpINi5tYXAoKHtrZXk6TCxsYWJlbDpGfSk9PntsZXQgej1KW0xdO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC0wLjUgcHktMSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOkZ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTAuNSBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgcC0wLjUiLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6RixjaGlsZHJlbjpbSyh3Myx7YWN0aXZlOno9PT0iZ3JhbnQiLHBlbmRpbmc6WD09PWAke0x9OmdyYW50YCxvbkNsaWNrOigpPT5WKEwsImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46SyhGMix7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxLKHczLHthY3RpdmU6ej09PSJyZXZva2UiLHBlbmRpbmc6WD09PWAke0x9OnJldm9rZWAsb25DbGljazooKT0+VihMLCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpLKFgwLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLEsodzMse2FjdGl2ZTohMSxwZW5kaW5nOlg9PT1gJHtMfTpyZXNldGAsb25DbGljazooKT0+VihMLCJyZXNldCIpLHZhcmlhbnQ6InJlc2V0Iix0aXRsZToiUmVzZXQiLGNoaWxkcmVuOksoajAse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi40fSl9KV19KV19LEwpfSl9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgcm91bmRlZC10LVsxMHB4XSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX2JvdHRvbSwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46SygiYnV0dG9uIix7b25DbGljazpDLGRpc2FibGVkOlg9PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbSBwZXJtaXNzaW9ucyByZXNldCBhbGwiLGNoaWxkcmVuOlg9PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIEJRKCl7cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1wZXJtaXNzaW9ucy1sb2FkaW5nIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtZGlzYWJsZWQiOiJ0cnVlIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzU1IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIGdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IGN1cnNvci1kZWZhdWx0IixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLEsoInNwYW4iLHt9KSxLKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicGVybWlzc2lvbnMtbG9hZGluZy1pbmRpY2F0b3IiLHJvbGU6InN0YXR1cyIsImFyaWEtbGFiZWwiOiJMb2FkaW5nIHBlcm1pc3Npb25zIixjbGFzc05hbWU6InNpemUtMi41IHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLVsjNWY2MjY4XSBib3JkZXItdC1bI2Y0ZjRmNV0gYW5pbWF0ZS1bZ3JpZC1zcGluXzAuN3NfbGluZWFyX2luZmluaXRlXSJ9KV19KX0pfWZ1bmN0aW9uIHczKHthY3RpdmU6JCxwZW5kaW5nOlEsb25DbGljazpKLHZhcmlhbnQ6Wix0aXRsZTpYLGNoaWxkcmVuOll9KXtsZXQgcT1aPT09ImdyYW50Ij8iIzRhZGU4MCI6Wj09PSJyZXZva2UiPyIjZjg3MTcxIjoiI2E1YjRmYyI7cmV0dXJuIEsoImJ1dHRvbiIse29uQ2xpY2s6SixkaXNhYmxlZDpRLHRpdGxlOlgsImFyaWEtbGFiZWwiOlgsY2xhc3NOYW1lOiJ3LTYgaC01LjUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZCBwLTAgY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10iLHN0eWxlOntiYWNrZ3JvdW5kOiQ/YCR7cX0yMmA6InRyYW5zcGFyZW50Iixjb2xvcjokP3E6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLG9wYWNpdHk6UT8wLjU6MX0sY2hpbGRyZW46WX0pfWZ1bmN0aW9uIEQ1KHtsYWJlbDokLGNoZWNrZWQ6USxkaXNhYmxlZDpKPSExLG9uQ2hhbmdlOlp9KXtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOlEsImFyaWEtbGFiZWwiOiQsZGlzYWJsZWQ6SixvbkNsaWNrOigpPT5aKCFRKSxjbGFzc05hbWU6YHJlbGF0aXZlIGgtWzE4cHhdIHctOCBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLW5vbmUgcC0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7Sj8iY3Vyc29yLWRlZmF1bHQgYmctd2hpdGUvMjAiOlE/ImN1cnNvci1wb2ludGVyIGJnLVsjMGE4NGZmXSI6ImN1cnNvci1wb2ludGVyIGJnLXdoaXRlLzIwIn1gLGNoaWxkcmVuOksoInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC1bMnB4XSBzaXplLVsxNHB4XSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246bGVmdF8wLjE1c10gJHtKPyJiZy13aGl0ZS81MCI6ImJnLXdoaXRlIn1gLHN0eWxlOntsZWZ0OlE/MTY6Mn19KX0pfXZhciBOUT0iYmctcGFuZWwgcm91bmRlZC1bMTBweF0iLFVRPSJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIG0tMCI7ZnVuY3Rpb24gQTYoe292ZXJsYXlFbmFibGVkOiQsb25Ub2dnbGVPdmVybGF5OlF9KXtsZXR7c25hcHNob3Q6Sn09JDIoKSx7aGlnaGxpZ2h0ZWRLZXk6WixzZXRIaWdobGlnaHRlZEtleTpYfT1CNSgpLFk9Sj8uZWxlbWVudHM/P1tdLHE9cTUoSiksRz1KPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOmAke05RfSBweC0zIHB5LTJgLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6VVEsY2hpbGRyZW46IkFYIFRyZWUifSksSyhENSx7bGFiZWw6IkVuYWJsZSBvdmVybGF5IixjaGVja2VkOiQsb25DaGFuZ2U6UX0pXX0pLCEkP251bGw6cT9LKGs2LHtjaGlsZHJlbjoiQVggdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIn0pOlkubGVuZ3RoPT09MD9LKGs2LHtzcGlubmVyOiFHLGNoaWxkcmVuOkc/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpZLm1hcCgoTixCKT0+e2xldCBVPVIwKE4pO3JldHVybiBLKExRLHtlbGVtZW50Ok4saW5kZXg6QixhY3RpdmU6VT09PVosb25IaWdobGlnaHQ6WH0sVSl9KX0pXX0pfWZ1bmN0aW9uIGs2KHtjaGlsZHJlbjokLHNwaW5uZXI6UT0hMX0pe3JldHVybiBLKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToibXQtMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBweS00IHRleHQtWzEycHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOltRP0soInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMy41IHNocmluay0wIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjAgYm9yZGVyLXQtd2hpdGUvNjAgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KTpudWxsLEsoInNwYW4iLHtjaGlsZHJlbjokfSldfSl9dmFyIExRPXgwKGZ1bmN0aW9uKHtlbGVtZW50OlEsaW5kZXg6SixhY3RpdmU6WixvbkhpZ2hsaWdodDpYfSl7bGV0IFk9UjAoUSkscT1WNShRLEopLEc9YCR7TWF0aC5yb3VuZChRLmZyYW1lLndpZHRoKX14JHtNYXRoLnJvdW5kKFEuZnJhbWUuaGVpZ2h0KX1gLE49W3EubGFiZWwscS5yb2xlfHxxLnR5cGV8fCJlbGVtZW50IixHXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybiBLKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGFiSW5kZXg6MCwiZGF0YS1heC1rZXkiOlksdGl0bGU6Tixvbk1vdXNlRW50ZXI6KCk9PlgoWSksb25Nb3VzZUxlYXZlOigpPT5YKG51bGwpLG9uRm9jdXM6KCk9PlgoWSksb25CbHVyOigpPT5YKG51bGwpLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgcHktMSBweC0wLjUgbWluLXctMCAke1o/ImJnLXdoaXRlL1swLjA2XSI6IiJ9YCxjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46US5sYWJlbHx8US5yb2xlfHwiVW5sYWJlbGVkIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvNDUgZm9udC1tb25vIHRleHQtWzEwcHhdIixjaGlsZHJlbjpRLnJvbGV8fFEudHlwZXx8ImVsZW1lbnQifSldfSksSygiY29kZSIse2NsYXNzTmFtZToic2hyaW5rLTAgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRleHQtWzEwcHhdIHB4LTEuNSBweS1bM3B4XSIsY2hpbGRyZW46R30pXX0pfSwoJCxRKT0+JC5pbmRleD09PVEuaW5kZXgmJiQuYWN0aXZlPT09US5hY3RpdmUmJiQub25IaWdobGlnaHQ9PT1RLm9uSGlnaGxpZ2h0JiZHNSgkLmVsZW1lbnQsUS5lbGVtZW50KSk7dmFyIENRPW5ldyBTZXQoWyJpbWFnZS9qcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvZ2lmIiwiaW1hZ2UvaGVpYyIsImltYWdlL2hlaWYiLCJpbWFnZS93ZWJwIiwidmlkZW8vbXA0IiwidmlkZW8vcXVpY2t0aW1lIl0pLEUzPTE5NjYwOCxPNj01MjQyODgwMDAsVDU9ImFwcGxpY2F0aW9uL3gtc2VydmUtc2ltLWhvc3QtcGF0aCI7YXN5bmMgZnVuY3Rpb24gTTYoJCxRLEope2xldCBaPWF3YWl0IFEoYHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke0p9ICR7RjEoJCl9YCk7aWYoWi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoWi5zdGRlcnJ8fGBhZGRtZWRpYSBmYWlsZWQgKGV4aXQgJHtaLmV4aXRDb2RlfSlgKX1mdW5jdGlvbiBZMigkKXtsZXQgUT0kLm5hbWUsSj1RLmxhc3RJbmRleE9mKCIuIik7aWYoSj49MClyZXR1cm4gUS5zbGljZShKKzEpLnRvTG93ZXJDYXNlKCk7aWYoJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiJtcDQiO3JldHVybiJqcGcifWZ1bmN0aW9uIF82KCQpe2lmKFkyKCQpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoQ1EuaGFzKCQudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiB6USgkKXtsZXQgUT1uZXcgVWludDhBcnJheSgkKSxKPSIiO2ZvcihsZXQgWj0wO1o8US5sZW5ndGg7Wis9MzI3NjgpSis9U3RyaW5nLmZyb21DaGFyQ29kZSguLi5RLnN1YmFycmF5KFosWiszMjc2OCkpO3JldHVybiBidG9hKEopfWFzeW5jIGZ1bmN0aW9uIFc2KCQsUSxKLFope2xldCBYPTA7Zm9yKGxldCBZPTA7WTwkLnNpemU7WSs9RTMpe2xldCBxPWF3YWl0ICQuc2xpY2UoWSxZK0UzKS5hcnJheUJ1ZmZlcigpLEc9elEocSksQj1hd2FpdCBKKGBiYXNoIC1jICdlY2hvICR7R30gfCBiYXNlNjQgLWQgJHtZPT09MD8iPiI6Ij4+In0gJHtRfSdgKTtpZihCLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihCLnN0ZGVycnx8YFdyaXRlIGZhaWxlZCAoZXhpdCAke0IuZXhpdENvZGV9KWApO2lmKCFaKWNvbnRpbnVlO2xldCBVPU1hdGgubWluKFkrRTMsJC5zaXplKSxWPU1hdGguZmxvb3IoVS8kLnNpemUqMTAwKTtpZihWIT09WClYPVYsWihVLyQuc2l6ZSl9fWFzeW5jIGZ1bmN0aW9uIFA2KCQsUSxKLFope2lmKCQuc2l6ZT5PNil0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWD1gL3RtcC8ke1F9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtKfWA7cmV0dXJuIGF3YWl0IFc2KCQsWCxaKSxYfWFzeW5jIGZ1bmN0aW9uIEQ2KCQsUSxKLFosWCl7aWYoJC5zaXplPk82KXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBZPVE9PT0iaXBhIj8iaXBhIjpZMigkKSxHPWAvdG1wLyR7UT09PSJpcGEiPyJzZXJ2ZS1zaW0taW5zdGFsbCI6InNlcnZlLXNpbS11cGxvYWQifS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7WX1gO3RyeXtYKDApLGF3YWl0IFc2KCQsRyxKLFgpLFgobnVsbCk7bGV0IE49UT09PSJpcGEiP2B4Y3J1biBzaW1jdGwgaW5zdGFsbCAke1p9ICR7R31gOmB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtafSAke0d9YCxCPWF3YWl0IEooTik7aWYoQi5leGl0Q29kZSE9PTApe2xldCBVPVE9PT0iaXBhIj8iaW5zdGFsbCI6ImFkZG1lZGlhIjt0aHJvdyBFcnJvcihCLnN0ZGVycnx8YCR7VX0gZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCl9fWZpbmFsbHl7SihgYmFzaCAtYyAncm0gLWYgJHtHfSdgKS5jYXRjaCgoKT0+e30pfX12YXIgSFE9MzAwMDthc3luYyBmdW5jdGlvbiBGUSgkLFE9ZmV0Y2gpe3RyeXtsZXQgSj1hd2FpdCBRKCQse2NhY2hlOiJuby1zdG9yZSJ9KTtpZighSi5vaylyZXR1cm4gbnVsbDtsZXQgWj1hd2FpdCBKLmpzb24oKTtyZXR1cm4gWiYmdHlwZW9mIFo9PT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoWik/WjpudWxsfWNhdGNoe3JldHVybiBudWxsfX12YXIga1E9MjA5NzE1MjAwLEFRPSJMYXJnZSB2aWRlbyAoPjIwMCBNQikg4oCUIG1heSBzdHV0dGVyIG9uIHNoYXJlZCBtZW1vcnkiLHc2PSJIRUlDIGRlY29kZSBmYWlsZWQg4oCUIGV4cG9ydCBhcyBKUEVHIG9yIFBORyBhbmQgcmV0cnkiO2Z1bmN0aW9uIE9RKCQsUSl7aWYoUSlyZXR1cm4iYWN0aXZlIjtpZigkPT09ImFjdGl2ZSIpcmV0dXJuImRpc2Nvbm5lY3RlZCI7aWYoJD09PSJkaXNjb25uZWN0ZWQiKXJldHVybiJyZWFkeSI7cmV0dXJuICR9ZnVuY3Rpb24gTVEoJCl7aWYoISQuaW5qZWN0ZWQpcmV0dXJuInBsYXkiO2lmKCQuc291cmNlPT09InBsYWNlaG9sZGVyIilyZXR1cm4icGxheSI7aWYoJC5idW5kbGVJZCYmISQuZm9yZWdyb3VuZElzSW5qZWN0ZWQpcmV0dXJuImF0dGFjaCI7cmV0dXJuInN0b3AifWZ1bmN0aW9uIF9RKCQpe3JldHVybiAkLnNwbGl0KGAKYCkubWFwKChRKT0+US50cmltKCkpLmZpbHRlcihCb29sZWFuKS5mbGF0TWFwKChRKT0+e2xldCBKPVEuaW5kZXhPZigiXHQiKTtpZihKPD0wKXJldHVybltdO2xldCBaPVEuc2xpY2UoMCxKKS50cmltKCksWD1RLnNsaWNlKEorMSkudHJpbSgpO2lmKCFafHwhWClyZXR1cm5bXTtyZXR1cm5be2lkOlosbmFtZTpYfV19KX12YXIgV1E9bmV3IFNldChbIm1wNCIsIm00diIsIm1vdiIsInF0IiwiYXZpIiwibWt2Iiwid2VibSIsIm1wZyIsIm1wZWciLCIzZ3AiLCIzZzIiLCJ0cyIsIndtdiJdKTtmdW5jdGlvbiBFNigkKXtpZigkLnR5cGUmJiQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4hMDtsZXQgUT0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKSxKPVEubGFzdEluZGV4T2YoIi4iKTtpZihKPDApcmV0dXJuITE7cmV0dXJuIFdRLmhhcyhRLnNsaWNlKEorMSkpfWZ1bmN0aW9uIFBRKCQpe3JldHVybiBFNigkKSYmJC5zaXplPmtRfWZ1bmN0aW9uIERRKCQpe2xldCBRPSgkLnR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpO2lmKFE9PT0iaW1hZ2UvaGVpYyJ8fFE9PT0iaW1hZ2UvaGVpZiIpcmV0dXJuITA7bGV0IEo9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIEouZW5kc1dpdGgoIi5oZWljIil8fEouZW5kc1dpdGgoIi5oZWlmIil9ZnVuY3Rpb24gVFEoe3Jhd01lc3NhZ2U6JCxsYXN0RmlsZUlzSGVpYzpRLHNvdXJjZTpKfSl7aWYoUSYmKEo9PT0iaW1hZ2UifHxKPT09InZpZGVvIikpcmV0dXJuIHc2O3JldHVybiAkfWZ1bmN0aW9uIHdRKHtzdGF0ZTokfSl7bGV0IFE9JD09PSJhY3RpdmUiPyJBY3RpdmUiOiQ9PT0iZGlzY29ubmVjdGVkIj8iRGlzY29ubmVjdGVkIjoiUmVhZHkiLEo9JD09PSJhY3RpdmUiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctc3VjY2Vzcy1lbWVyYWxkIFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSg3NCwyMjIsMTI4LDAuNyldIjokPT09ImRpc2Nvbm5lY3RlZCI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1kYW5nZXItc29mdCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoMjQ4LDExMywxMTMsMC41NSldIjpudWxsO3JldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSIsImRhdGEtY2FtZXJhLXBpbGwtc3RhdGUiOiQsY2hpbGRyZW46W0omJksoInNwYW4iLHtjbGFzc05hbWU6Sn0pLFFdfSl9ZnVuY3Rpb24gRVEoKXtyZXR1cm4gSygicCIse2NsYXNzTmFtZToibS0wIHRleHQtY2VudGVyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsImRhdGEtY2FtZXJhLXRlc3QtcGF0dGVybi1oaW50IjohMCxjaGlsZHJlbjoiVGVzdC1wYXR0ZXJuIGZlZWQifSl9ZnVuY3Rpb24gSVEoe21vZGU6JCxmaWxlTmFtZTpRLHdlYmNhbU5hbWU6Sixzb3VyY2VLaW5kOlp9KXtpZigkPT09InVwbG9hZGluZyIpcmV0dXJuIEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiJVcGxvYWRpbmfigKYifSk7aWYoJD09PSJmaWxlIilyZXR1cm4gSygkMSx7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjpaPT09InZpZGVvIj8iVmlkZW8iOiJJbWFnZSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46UT8/IiJ9KV19KTtpZigkPT09IndlYmNhbSIpcmV0dXJuIEsoJDEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46IldlYmNhbSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46Sj8/IiJ9KV19KTtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS84NSBmb250LW1lZGl1bSIsY2hpbGRyZW46IlNlbGVjdCBvciBkcm9wIG1lZGlhIn0pfWZ1bmN0aW9uIFQ2KHtraW5kOiQsbWVzc2FnZTpRfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTokPT09Indhcm5pbmciPyJiZy13YXJuaW5nLzEwIGJvcmRlciBib3JkZXItd2FybmluZy8yNSB0ZXh0LXdhcm5pbmctc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIjoiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyIsImRhdGEtY2FtZXJhLWJhbm5lci1raW5kIjokLHJvbGU6JD09PSJlcnJvciI/ImFsZXJ0Ijoic3RhdHVzIixjaGlsZHJlbjpRfSl9ZnVuY3Rpb24gSTYoe3VkaWQ6JCxidW5kbGVJZDpRfSl7bGV0W0osWl09TSghMSksW1gsWV09TSgicGxhY2Vob2xkZXIiKSxbcSxHXT1NKCIiKSxbTixCXT1NKG51bGwpLFtVLFZdPU0oITEpLEM9SSgwKSxbTCxGXT1NKCExKSxbeixIXT1NKCExKSxrPUkobnVsbCksW18sU109TShbXSksW0UseV09TSghMSksW3gsWTFdPU0oIiIpLFtmLHVdPU0oIm9mZiIpLFtjLFExXT1NKG51bGwpLFtVMSxLMV09TShudWxsKSxBMT1jIT09bnVsbHx8VTEhPT1udWxsLFttLGddPU0obnVsbCksW3MscTFdPU0obnVsbCksWyxWMV09TShudWxsKSxbTjEsejFdPU0oITEpLFtMMSx2XT1NKCJyZWFkeSIpLFthLGxdPU0oKCk9Pm5ldyBTZXQpLFtaMSxQMV09TShudWxsKSxbRCxyXT1NKG51bGwpLGU9SSghMSksZD1JKCExKSxSPUkoIm9mZiIpLE8xPUkoITEpLFgxPV8xKCgpPT57bGV0IFA9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIVApcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KFApKXJldHVybmBidW4gJHtGMShQKX1gO2lmKC9cLmpzJC8udGVzdChQKSlyZXR1cm5gbm9kZSAke0YxKFApfWA7cmV0dXJuIEYxKFApfSxbXSksbTE9VChhc3luYygpPT57bGV0IFA9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uY2FtZXJhU3RhdHVzRW5kcG9pbnQ7cmV0dXJuIFA/RlEoUCk6bnVsbH0sW10pLHMxPUkoYXN5bmMoKT0+e30pLG4xPUkoUSk7YigoKT0+e24xLmN1cnJlbnQ9UX0sW1FdKSxiKCgpPT57bGV0IFA9ITE7cmV0dXJuKGFzeW5jKCk9PntsZXQgcD1hd2FpdCBtMSgpO2lmKFB8fCFwfHwhcC5hbGl2ZSlyZXR1cm47ZC5jdXJyZW50PSEwO2xldCB0PXAuc291cmNlO2lmKHQ9PT0icGxhY2Vob2xkZXIifHx0PT09IndlYmNhbSJ8fHQ9PT0iaW1hZ2UifHx0PT09InZpZGVvIilZKHQpO2lmKCh0PT09ImltYWdlInx8dD09PSJ2aWRlbyIpJiZwLmFyZylHKHAuYXJnKSxCKHAuYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKHQ9PT0id2ViY2FtIiYmcC5hcmcpWTEocC5hcmcpLHMxLmN1cnJlbnQoKTtsZXQgSDE9cC5taXJyb3I9PT0ib24iPyJvbiI6Im9mZiI7dShIMSksUi5jdXJyZW50PUgxLFAxKHAuaGVscGVyUGlkPz9udWxsKSx6MSghMCk7bGV0IEIxPUFycmF5LmlzQXJyYXkocC5idW5kbGVJZHMpP3AuYnVuZGxlSWRzOltdO2lmKEIxLmxlbmd0aD4wKWwobmV3IFNldChCMSkpO2xldCBpPW4xLmN1cnJlbnQseTE9dCYmdCE9PSJwbGFjZWhvbGRlciI7dihpJiZCMS5pbmNsdWRlcyhpKSYmeTE/ImFjdGl2ZSI6InJlYWR5IiksVjEoYFJlYXR0YWNoZWQg4oaSICR7dD8/InJ1bm5pbmcgaGVscGVyIn0ke3AuYXJnP2AgKCR7cC5hcmd9KWA6IiJ9YCl9KSgpLCgpPT57UD0hMH19LFskLG0xXSksYigoKT0+e2xldCBQPSExLHA9ITEsdD1udWxsLEgxPWFzeW5jKCk9PntpZihQfHxwKXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47cD0hMDt0cnl7bGV0IGk9YXdhaXQgbTEoKTtpZihQKXJldHVybjtsZXQgeTE9ISFpPy5hbGl2ZSxoMT1BcnJheS5pc0FycmF5KGk/LmJ1bmRsZUlkcyk/aS5idW5kbGVJZHM6bnVsbCxsMT0hIVEmJihoMT9oMS5pbmNsdWRlcyhRKTphLmhhcyhRKSksWjA9aT8uc291cmNlPz9udWxsLHc9TjEmJnkxJiZsMSYmISEoWjAmJlowIT09InBsYWNlaG9sZGVyIikmJihaMT09bnVsbHx8aT8uaGVscGVyUGlkPT09WjEpO2lmKHYoKE8pPT5PUShPLHcpKSwheTEpejEoKE8pPT57aWYoIU8pcmV0dXJuIE87cmV0dXJuIGwobmV3IFNldCksUDEobnVsbCksUi5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZihOMSYmWjEhPW51bGwmJmk/LmhlbHBlclBpZCE9PVoxKXoxKCExKSxsKG5ldyBTZXQpLFAxKG51bGwpLFIuY3VycmVudD0ib2ZmIjtlbHNlIGlmKHkxJiZBcnJheS5pc0FycmF5KGk/LmJ1bmRsZUlkcykpe2xldCBPPWkuYnVuZGxlSWRzO2woKEEpPT57aWYoQS5zaXplPT09Ty5sZW5ndGgmJk8uZXZlcnkoKFcpPT5BLmhhcyhXKSkpcmV0dXJuIEE7cmV0dXJuIG5ldyBTZXQoTyl9KX19ZmluYWxseXtwPSExfX07dD1zZXRJbnRlcnZhbCgoKT0+e0gxKCl9LEhRKTtsZXQgQjE9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0idmlzaWJsZSIpSDEoKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixCMSk7cmV0dXJuKCk9PntpZihQPSEwLHQpY2xlYXJJbnRlcnZhbCh0KTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEIxKX19LFttMSxOMSxaMSxRLGFdKTtsZXQgdzE9VChhc3luYygpPT57eSghMCksZyhudWxsKTt0cnl7bGV0IFA9YXdhaXQgVzEoYCR7WDF9IGNhbWVyYSAtLWxpc3Qtd2ViY2Ftc2ApO2lmKFAuZXhpdENvZGUhPT0wKXtnKFAuc3RkZXJyLnRyaW0oKXx8YC0tbGlzdC13ZWJjYW1zIGZhaWxlZCAoJHtQLmV4aXRDb2RlfSlgKTtyZXR1cm59bGV0IHA9X1EoUC5zdGRvdXQpO2lmKFMocCkscC5sZW5ndGg+MCYmIXgpWTEocFswXS5pZCl9ZmluYWxseXt5KCExKX19LFt4LFgxXSk7YigoKT0+e3MxLmN1cnJlbnQ9dzF9LFt3MV0pLGIoKCk9PntpZih6JiZfLmxlbmd0aD09PTAmJiFFKXcxKCl9LFt6LF8ubGVuZ3RoLEUsdzFdKTtsZXQgajE9VCgoUCk9PntnKFRRKHtyYXdNZXNzYWdlOlAsbGFzdEZpbGVJc0hlaWM6ZS5jdXJyZW50LHNvdXJjZTpYfSkpfSxbWF0pLFkwPVQoYXN5bmMoUCxwLHQpPT57bGV0IEgxPVA9PT0iaW1hZ2UifHxQPT09InZpZGVvIixCMT1bImNhbWVyYSIsInN3aXRjaCIsSDE/ImZpbGUiOlBdO2lmKFA9PT0id2ViY2FtIiYmcClCMS5wdXNoKEYxKHApKTtpZihIMSl7aWYoIXQudHJpbSgpKXJldHVybiBnKCJEcm9wIGEgZmlsZSBpbnRvIHRoZSBwYW5lbCBvciBwaWNrIGFub3RoZXIgc291cmNlLiIpLCExO0IxLnB1c2goRjEodC50cmltKCkpKX1CMS5wdXNoKCItZCIsJCwiLS1xdWlldCIpO2xldCBpPWF3YWl0IFcxKGAke1gxfSAke0IxLmpvaW4oIiAiKX1gKTtpZihpLmV4aXRDb2RlIT09MClyZXR1cm4gajEoaS5zdGRlcnIudHJpbSgpfHxpLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke2kuZXhpdENvZGV9KWApLCExO2UuY3VycmVudD0hMTt0cnl7bGV0IHkxPUpTT04ucGFyc2UoaS5zdGRvdXQudHJpbSgpKTtWMShgU3dpdGNoZWQg4oaSICR7eTEuc291cmNlPz9QfSR7eTEuYXJnP2AgKCR7eTEuYXJnfSlgOiIifWApfWNhdGNoe1YxKGBTd2l0Y2hlZCDihpIgJHtQfWApfXJldHVybiEwfSxbJCxYMSxqMV0pLHEwPVQoYXN5bmMoKT0+e2lmKCFRKXJldHVybjtRMSgiaW5qZWN0IiksZyhudWxsKSxWMShudWxsKTt0cnl7bGV0IFA9WyJjYW1lcmEiLEYxKFEpLCItZCIsJCwiLS1xdWlldCJdO2lmKFg9PT0iaW1hZ2UifHxYPT09InZpZGVvIil7aWYoIXEudHJpbSgpKXtnKCJEcm9wIGEgZmlsZSBpbnRvIHRoZSBwYW5lbCBvciBwaWNrIGFub3RoZXIgc291cmNlLiIpO3JldHVybn1QLnB1c2goIi0tZmlsZSIsRjEocS50cmltKCkpKX1lbHNlIGlmKFg9PT0id2ViY2FtIilpZih4KVAucHVzaCgiLS13ZWJjYW0iLEYxKHgpKTtlbHNlIFAucHVzaCgiLS13ZWJjYW0iKTtQLnB1c2goIi0tbWlycm9yIixmKTtsZXQgcD1hd2FpdCBXMShgJHtYMX0gJHtQLmpvaW4oIiAiKX1gKTtpZihwLmV4aXRDb2RlIT09MCl7ajEocC5zdGRlcnIudHJpbSgpfHxwLnN0ZG91dC50cmltKCl8fGBpbmplY3QgZmFpbGVkICgke3AuZXhpdENvZGV9KWApO3JldHVybn1lLmN1cnJlbnQ9ITE7bGV0IHQ9bnVsbDt0cnl7bGV0IEgxPUpTT04ucGFyc2UocC5zdGRvdXQudHJpbSgpKTt0PUgxLmhlbHBlclBpZD8/bnVsbDtsZXQgQjE9SDEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixpPUgxLnBpZD9gIHBpZCAke0gxLnBpZH1gOiIiLHkxPUgxLmhlbHBlclBpZD9gLCBoZWxwZXIgcGlkICR7SDEuaGVscGVyUGlkfWA6IiI7VjEoYCR7QjF9ICR7SDEuc291cmNlPz9YfSBpbnRvICR7UX0ke2l9JHt5MX1gKX1jYXRjaHtWMShwLnN0ZG91dC50cmltKCl8fCJJbmplY3RlZC4iKX16MSghMCksdihYPT09InBsYWNlaG9sZGVyIj8icmVhZHkiOiJhY3RpdmUiKSxQMSh0KSxsKChIMSk9PkgxLmhhcyhRKT9IMTpuZXcgU2V0KEgxKS5hZGQoUSkpLFIuY3VycmVudD1mfWZpbmFsbHl7UTEobnVsbCl9fSxbUSwkLFgscSx4LGYsWDEsajFdKSxNMT1OMT9gJHtYfTo6JHtYPT09IndlYmNhbSI/eDoiIn06OiR7WD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iP3E6IiJ9YDpudWxsLGQxPSEhUSYmYS5oYXMoUSksQzA9ZDEmJlghPT0icGxhY2Vob2xkZXIiO2IoKCk9PntpZighQzApe08xLmN1cnJlbnQ9ITE7cmV0dXJufWlmKE8xLmN1cnJlbnQpcmV0dXJuO08xLmN1cnJlbnQ9ITAsWighMCl9LFtDMF0pLGIoKCk9PntpZighRClyZXR1cm47aWYoIVF8fEExfHxMKXJldHVybjtpZihYIT09IndlYmNhbSJ8fHghPT1EKXJldHVybjtpZihyKG51bGwpLE4xKXJldHVybjtxMCgpfSxbRCxRLEExLEwsWCx4LE4xLHEwXSksYigoKT0+e2lmKCFOMSlyZXR1cm47aWYoKFg9PT0iaW1hZ2UifHxYPT09InZpZGVvIikmJiFxLnRyaW0oKSlyZXR1cm47aWYoWD09PSJ3ZWJjYW0iJiYheClyZXR1cm47aWYoZC5jdXJyZW50KXtkLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBQPSExO3JldHVybihhc3luYygpPT57SzEoInN3aXRjaCIpLGcobnVsbCk7dHJ5e2lmKFApcmV0dXJuO2F3YWl0IFkwKFgseCxxKX1maW5hbGx5e2lmKCFQKUsxKG51bGwpfX0pKCksKCk9PntQPSEwfX0sW00xXSksYigoKT0+e2lmKCFOMSlyZXR1cm47aWYoUi5jdXJyZW50PT09ZilyZXR1cm47bGV0IFA9ZixwPSExO3JldHVybihhc3luYygpPT57SzEoIm1pcnJvciIpLGcobnVsbCk7dHJ5e2xldCB0PWF3YWl0IFcxKGAke1gxfSBjYW1lcmEgbWlycm9yICR7UH0gLWQgJHskfSAtLXF1aWV0YCk7aWYocClyZXR1cm47aWYodC5leGl0Q29kZSE9PTApe2codC5zdGRlcnIudHJpbSgpfHx0LnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke3QuZXhpdENvZGV9KWApO3JldHVybn1SLmN1cnJlbnQ9UCxWMShgTWlycm9yIOKGkiAke1B9YCl9ZmluYWxseXtpZighcClLMShudWxsKX19KSgpLCgpPT57cD0hMH19LFtmLE4xXSk7bGV0IHgxPVQoYXN5bmMoKT0+e1ExKCJzdG9wIiksZyhudWxsKTt0cnl7bGV0IFA9YXdhaXQgVzEoYCR7WDF9IGNhbWVyYSAtLXN0b3Atd2ViY2FtIC1kICR7JH1gKTtpZihQLmV4aXRDb2RlIT09MCl7ZyhQLnN0ZGVyci50cmltKCl8fGBzdG9wLXdlYmNhbSBmYWlsZWQgKCR7UC5leGl0Q29kZX0pYCk7cmV0dXJufVYxKCJDYW1lcmEgaGVscGVyIHN0b3BwZWQuIiksejEoITEpLHYoInJlYWR5IiksbChuZXcgU2V0KSxSLmN1cnJlbnQ9Im9mZiJ9ZmluYWxseXtRMShudWxsKX19LFskLFgxXSkscjE9VChhc3luYyhQKT0+e2xldCBwPURRKHt0eXBlOlAudHlwZSxuYW1lOlAubmFtZX0pLHQ9UC50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpfHxwLEgxPVAudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKXx8RTYoe3R5cGU6UC50eXBlLG5hbWU6UC5uYW1lfSk7aWYoIXQmJiFIMSl7ZS5jdXJyZW50PSExLGcoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtQLnR5cGV8fFAubmFtZX1gKTtyZXR1cm59aWYoRighMCksZyhudWxsKSxxMShudWxsKSxQUSh7dHlwZTpQLnR5cGUsbmFtZTpQLm5hbWUsc2l6ZTpQLnNpemV9KSlxMShBUSk7ZS5jdXJyZW50PXA7dHJ5e2xldCBCMT1ZMihQKSxpPWF3YWl0IFA2KFAsInNlcnZlLXNpbS1jYW1zcmMiLEIxLFcxKTtCKFAubmFtZSksWShIMT8idmlkZW8iOiJpbWFnZSIpLEcoaSksVjEoYExvYWRlZCAke1AubmFtZX1gKX1jYXRjaChCMSl7aWYoZS5jdXJyZW50KWcodzYpO2Vsc2UgZyhCMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e0YoITEpfX0sW10pLEcwPVQoYXN5bmMoUCk9PntQLnByZXZlbnREZWZhdWx0KCksUC5zdG9wUHJvcGFnYXRpb24oKSxDLmN1cnJlbnQ9MCxWKCExKTtsZXQgcD1QLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihwKWF3YWl0IHIxKHApfSxbcjFdKSxFMT1UKCgpPT57WSgicGxhY2Vob2xkZXIiKSxHKCIiKSxCKG51bGwpLGcobnVsbCkscTEobnVsbCksZS5jdXJyZW50PSExfSxbXSksSTE9VCgoKT0+e2suY3VycmVudD8uY2xpY2soKX0sW10pLHQxPVQoYXN5bmMoUCk9PntsZXQgcD1QLnRhcmdldCx0PXAuZmlsZXM/LlswXTtpZihwLnZhbHVlPSIiLHQpYXdhaXQgcjEodCl9LFtyMV0pO2IoKCk9PntpZigheilyZXR1cm47bGV0IFA9KHApPT57bGV0IHQ9cC50YXJnZXQ7aWYodCBpbnN0YW5jZW9mIEVsZW1lbnQmJnQuY2xvc2VzdCgiW2RhdGEtY2FtZXJhLXNvdXJjZS1tZW51XSIpKXJldHVybjtIKCExKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFApLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixQKX0sW3pdKTtsZXQgVjA9VCgoUCk9PntpZihZMShQLmlkKSxZKCJ3ZWJjYW0iKSxCKG51bGwpLGcobnVsbCksZS5jdXJyZW50PSExLEgoITEpLFEpcihQLmlkKX0sW1FdKSxvMT1UKCgpPT57dSgoUCk9PlA9PT0ib24iPyJvZmYiOiJvbiIpfSxbXSksQjA9IU4xfHxYPT09InBsYWNlaG9sZGVyIix3MD1UKChQKT0+e2lmKFAucHJldmVudERlZmF1bHQoKSxDLmN1cnJlbnQrKyxDLmN1cnJlbnQ9PT0xKVYoITApfSxbXSksVzA9VCgoUCk9PntpZihQLnByZXZlbnREZWZhdWx0KCksUC5kYXRhVHJhbnNmZXIpUC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtdKSxhMT1UKChQKT0+e2lmKFAucHJldmVudERlZmF1bHQoKSxDLmN1cnJlbnQtLSxDLmN1cnJlbnQ8PTApQy5jdXJyZW50PTAsVighMSl9LFtdKSxSMT1NUSh7YnVuZGxlSWQ6USxpbmplY3RlZDpOMSxzb3VyY2U6WCxmb3JlZ3JvdW5kSXNJbmplY3RlZDpkMX0pLFMxPVIxPT09InN0b3AiP3tsYWJlbDpjPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6eDEsa2luZDoic3RvcCJ9OlIxPT09ImF0dGFjaCI/e2xhYmVsOmM9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7UX1gLG9uQ2xpY2s6cTAsa2luZDoiYXR0YWNoIn06e2xhYmVsOmM9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOnEwLGtpbmQ6InBsYXkifSxnMT1SMT09PSJzdG9wIj9MfHxjIT09bnVsbDohUXx8THx8YyE9PW51bGwsaTE9WD09PSJwbGFjZWhvbGRlciIsTjA9WD09PSJ3ZWJjYW0iLFAwPShYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpJiYhIU4sZTE9TjA/Xy5maW5kKChQKT0+UC5pZD09PXgpPy5uYW1lPz94Pz8iV2ViY2FtIjpudWxsLEoxPUw/InVwbG9hZGluZyI6UDA/ImZpbGUiOk4wPyJ3ZWJjYW0iOiJwbGFjZWhvbGRlciI7cmV0dXJuIEsoSzAse29wZW46Sixvbk9wZW5DaGFuZ2U6Wixib2R5Q2xhc3NOYW1lOiJwdC0yLjUiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoJDEse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJDYW1lcmEifSksSyh3USx7c3RhdGU6TDF9KV19KSxjaGlsZHJlbjpLKCJkaXYiLHtvbkRyYWdFbnRlcjp3MCxvbkRyYWdPdmVyOlcwLG9uRHJhZ0xlYXZlOmExLG9uRHJvcDpHMCxjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIuNSIsY2hpbGRyZW46W0soInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOiJSZXBsYWNlcyB0aGUgc2ltdWxhdG9yJ3MgY2FtZXJhIGZlZWQgYnkgaW5qZWN0aW5nIGEgZHlsaWIgYXQgYXBwIGxhdW5jaCBhbmQgc3RyZWFtaW5nIGZyYW1lcyBpbnRvIHNoYXJlZCBtZW1vcnkuIFBpY2sgbWVkaWEgb3IgYSB3ZWJjYW0sIHRoZW4gUGxheSB0byBpbmplY3QgaW50byB0aGUgZm9yZWdyb3VuZCBhcHAuIn0pLEsoImlucHV0Iix7cmVmOmssdHlwZToiZmlsZSIsYWNjZXB0OiJpbWFnZS8qLHZpZGVvLyoiLGNsYXNzTmFtZToiaGlkZGVuIixvbkNoYW5nZTp0MX0pLEsoImRpdiIse29uQ2xpY2s6KFApPT57aWYoIWkxKXJldHVybjtpZihQLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1jbGVhci1tZWRpYV0iKSlyZXR1cm47STEoKX0sdGl0bGU6aTE/Ik5vIHNvdXJjZSBzZWxlY3RlZCDigJQgUGxheSB1c2VzIGEgdGVzdC1wYXR0ZXJuIGZlZWQuIENsaWNrIHRvIHBpY2sgYW4gaW1hZ2UvdmlkZW8sIG9yIGRyb3Agb25lIGhlcmUuIjpOMD9gU291cmNlOiAke2UxfWA6YFNvdXJjZTogJHtOPz9YfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLGkxPyJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEyIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCIsVT8iIWJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4wOCldICFib3JkZXItW3JnYmEoMTAsMTMyLDI1NSwwLjYpXSI6IiIsTD8iY3Vyc29yLXByb2dyZXNzIjppMT8iY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3ItZGVmYXVsdCJdLmpvaW4oIiAiKSxjaGlsZHJlbjpbSyhJUSx7bW9kZTpKMSxmaWxlTmFtZTpOLHdlYmNhbU5hbWU6ZTEsc291cmNlS2luZDpYfSksIWkxJiYhTCYmSygiYnV0dG9uIix7ImRhdGEtY2xlYXItbWVkaWEiOiEwLG9uQ2xpY2s6KFApPT57UC5zdG9wUHJvcGFnYXRpb24oKSxFMSgpfSxjbGFzc05hbWU6InNocmluay0wIHctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOksoWDAse3NpemU6MTQsc3Ryb2tlV2lkdGg6Mn0pfSldfSksaTEmJiFMJiZLKEVRLHt9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazooKT0+SCgoUCk9PiFQKSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIGhvdmVyOmJvcmRlci13aGl0ZS8yMCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1oYXNwb3B1cCI6Im1lbnUiLCJhcmlhLWV4cGFuZGVkIjp6LHRpdGxlOlg9PT0id2ViY2FtIj9gU291cmNlOiB3ZWJjYW0ke3g/YCAoJHtfLmZpbmQoKFApPT5QLmlkPT09eCk/Lm5hbWU/P3h9KWA6IiJ9IOKAlCBjbGljayB0byBjaGFuZ2VgOmBTb3VyY2U6ICR7WH0g4oCUIGNsaWNrIHRvIHBpY2sgbWVkaWEgb3Igd2ViY2FtYCwiYXJpYS1sYWJlbCI6IkNob29zZSBjYW1lcmEgc291cmNlIixjaGlsZHJlbjpLKFcyLHtzaXplOjIwLHN0cm9rZVdpZHRoOjJ9KX0pLHomJksoImRpdiIse3JvbGU6Im1lbnUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIHotMTAgbWluLXctWzIwMHB4XSBmbGV4IGZsZXgtY29sIGdhcC1weCBwLTEgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40KV0iLGNoaWxkcmVuOltLKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG9uQ2xpY2s6KCk9PntIKCExKSxJMSgpfSx0aXRsZToiUGljayBhbiBpbWFnZSBvciB2aWRlbyBmcm9tIGRpc2siLGNoaWxkcmVuOiJCcm93c2UgbWVkaWHigKYifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOkU/IkNhbWVyYXMgKGxvYWRpbmfigKYpIjpfLmxlbmd0aD09PTA/Ik5vIGNhbWVyYXMiOiJDYW1lcmFzIn0pLEsoImJ1dHRvbiIse29uQ2xpY2s6KFApPT57UC5zdG9wUHJvcGFnYXRpb24oKSx3MSgpfSxkaXNhYmxlZDpFLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1bMjJweF0gaC1bMjJweF0gYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpLKGowLHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLF8ubWFwKChQKT0+e2xldCBwPVg9PT0id2ViY2FtIiYmeD09PVAuaWQ7cmV0dXJuIEsoImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixwPyIhYmctd2hpdGUvWzAuMTJdICF0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS84NSJdLmpvaW4oIiAiKSxvbkNsaWNrOigpPT5WMChQKSx0aXRsZTpQLm5hbWUsY2hpbGRyZW46UC5uYW1lfSxQLmlkKX0pXX0pXX0pLEsoImJ1dHRvbiIse29uQ2xpY2s6UzEub25DbGljayxkaXNhYmxlZDpnMSxjbGFzc05hbWU6WyJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6b3BhY2l0eS01MCBtaW4taC1bMzZweF0iLFMxLmtpbmQ9PT0ic3RvcCI/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0iXS5qb2luKCIgIiksdGl0bGU6UzEua2luZD09PSJzdG9wIj8iU3RvcCB0aGUgY2FtZXJhIGhlbHBlciBhbmQgdGVybWluYXRlIGluamVjdGVkIGFwcHMiOlMxLmtpbmQ9PT0iYXR0YWNoIj9gSW5qZWN0ICR7UX0gc28gaXQgam9pbnMgdGhlIGNhbWVyYSBmZWVkYDohUT8iQnJpbmcgYW4gYXBwIHRvIHRoZSBmb3JlZ3JvdW5kIGZpcnN0IjoiU3RhcnQ6IGluamVjdCB0aGUgZHlsaWIgYW5kIGxhdW5jaCB0aGUgZm9yZWdyb3VuZCBhcHAgd2l0aCB0aGUgY2hvc2VuIHNvdXJjZSIsImFyaWEtcHJlc3NlZCI6UzEua2luZD09PSJzdG9wIiwiYXJpYS1sYWJlbCI6UzEua2luZD09PSJzdG9wIj8iU3RvcCI6IlBsYXkiLGNoaWxkcmVuOltTMS5raW5kPT09InN0b3AiP0soeTIse30pOksoSTIse30pLEsoInNwYW4iLHtjaGlsZHJlbjpTMS5raW5kPT09InN0b3AiPyJTdG9wIjpTMS5raW5kPT09ImF0dGFjaCI/IkluamVjdCI6IlBsYXkifSldfSksSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm8xLGRpc2FibGVkOkIwLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBtaW4taC1bMzZweF0gYm9yZGVyIHJvdW5kZWQtWzdweF0gZm9udC1baW5oZXJpdF0gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgYWN0aXZlOnNjYWxlLVswLjk3XSAke2Y9PT0ib24iPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA5XSBlbmFibGVkOmhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgTWlycm9yOiAke2Z9IOKAlCB0YXAgdG8gdG9nZ2xlYCx0aXRsZTpCMD8iTWlycm9yIHRvZ2dsZSBhdmFpbGFibGUgb25jZSBhIHNvdXJjZSBpcyBzdHJlYW1pbmciOmBNaXJyb3I6ICR7Zn0g4oCUIGNsaWNrIHRvIHRvZ2dsZWAsImFyaWEtcHJlc3NlZCI6Zj09PSJvbiIsY2hpbGRyZW46SyhNMix7c2l6ZToyMCxzdHJva2VXaWR0aDoyLGZpbGw6Zj09PSJvbiI/ImN1cnJlbnRDb2xvciI6Im5vbmUifSl9KV19KSxzJiZLKFQ2LHtraW5kOiJ3YXJuaW5nIixtZXNzYWdlOnN9KSxtJiZLKFQ2LHtraW5kOiJlcnJvciIsbWVzc2FnZTptfSldfSl9KX12YXIgeTY9NTAwO2Z1bmN0aW9uIGI2KHt1ZGlkOiQsZXZlbnRzRW5kcG9pbnQ6UX0pe2xldFtKLFpdPU0oITEpLFtYLFldPU0oW10pLFtxLEddPU0oITEpLE49XzEoKCk9PlE/P2Ake2YxKCJhcGkvZXZlbnQtbG9nL2V2ZW50cyIpfT9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YCxbUSwkXSk7YigoKT0+e0coITEpLFkoW10pO2xldCBVPWcwKE4pO3JldHVybiBVLm9ubWVzc2FnZT0oe2RhdGE6Vn0pPT57dHJ5e2xldCBDPUpTT04ucGFyc2UoVik7aWYoRyghMSksQXJyYXkuaXNBcnJheShDLmV2ZW50cykpWShDLmV2ZW50cy5zbGljZSgteTYpKTtlbHNlIGlmKEMuZXZlbnQpWSgoTCk9PntyZXR1cm5bLi4uTC5maWx0ZXIoKHopPT56LmlkIT09Qy5ldmVudC5pZCksQy5ldmVudF0uc2xpY2UoLXk2KX0pfWNhdGNoe319LFUub25lcnJvcj0oKT0+RyghMCksKCk9PlUuY2xvc2UoKX0sW05dKTtsZXQgQj1fMSgoKT0+WC5zbGljZSgpLnJldmVyc2UoKSxbWF0pO3JldHVybiBLKEswLHtvcGVuOkosb25PcGVuQ2hhbmdlOlosImRhdGEtZXZlbnQtbG9nIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKCQxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOiJFdmVudCBMb2cifSksSygic3BhbiIse30pLEsoInNwYW4iLHtjbGFzc05hbWU6InJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSBweC0xLjUgcHktWzNweF0gdGV4dC1bMTBweF0gZm9udC1tb25vIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOlgubGVuZ3RofSldfSksY2hpbGRyZW46Qi5sZW5ndGg9PT0wP0soImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IHRleHQtWzEycHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOnE/IkRpc2Nvbm5lY3RlZCI6Ik5vIGV2ZW50cyB5ZXQifSk6SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IG1heC1oLVszMjBweF0gZmxleC1jb2wgZ2FwLTEgb3ZlcmZsb3cteS1hdXRvIHB5LTAuNSBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpCLm1hcCgoVSk9PksoeVEse2V2ZW50OlV9LFUuaWQpKX0pfSl9ZnVuY3Rpb24geVEoe2V2ZW50OiR9KXtsZXQgUT1iUSgkLnRpbWVzdGFtcCksSj1bJC5zb3VyY2UsJC5raW5kLCQuYWN0aW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIC8gIiksWj0kLm1zZz8/JC5zdW1tYXJ5LFg9JC5zdGF0dXM9PT0iZXJyb3IiPyJib3JkZXItWyNmZjQ1M2FdLzUwIGJnLVsjZmY0NTNhXS8xMCB0ZXh0LVsjZmZiM2FkXSI6ImJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSB0ZXh0LXdoaXRlLzUwIjtyZXR1cm4gSygiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRpdGxlOkosY2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy1bNTZweF8xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbWQgcHgtMS41IHB5LTEuNSB0ZXh0LVsxMnB4XSBsZWFkaW5nLXRpZ2h0IGhvdmVyOmJnLXdoaXRlL1swLjA1XSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpRfSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOlp9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJtdC0wLjUgYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDAiLGNoaWxkcmVuOkp9KV19KSwkLnN0YXR1cz9LKCJzcGFuIix7Y2xhc3NOYW1lOmByb3VuZGVkLW1kIGJvcmRlciBweC0xLjUgcHktWzNweF0gdGV4dC1bMTBweF0gZm9udC1tb25vICR7WH1gLGNoaWxkcmVuOiQuc3RhdHVzfSk6bnVsbF19KX1mdW5jdGlvbiBiUSgkKXtsZXQgUT1uZXcgRGF0ZSgkKTtpZihOdW1iZXIuaXNOYU4oUS5nZXRUaW1lKCkpKXJldHVybiIiO3JldHVybiBRLnRvTG9jYWxlVGltZVN0cmluZyhbXSx7aG91cjoiMi1kaWdpdCIsbWludXRlOiIyLWRpZ2l0IixzZWNvbmQ6IjItZGlnaXQifSl9dmFyIGoyPVsiZXh0cmEtc21hbGwiLCJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwiZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1sYXJnZSIsImV4dHJhLWV4dHJhLWV4dHJhLWxhcmdlIl0sU1E9MjUwLHhRPXthcHBlYXJhbmNlOiJsaWdodCIsImxpcXVpZC1nbGFzcyI6ImNsZWFyIiwiY29sb3ItZmlsdGVyIjoibm9uZSIsInRleHQtc2l6ZSI6ImxhcmdlIiwicmVkdWNlLW1vdGlvbiI6Im9mZiIsImluY3JlYXNlLWNvbnRyYXN0Ijoib2ZmIiwic2hvdy1ib3JkZXJzIjoib2ZmIiwicmVkdWNlLXRyYW5zcGFyZW5jeSI6Im9mZiIsdm9pY2VvdmVyOiJvZmYifSxJMz17YXBwZWFyYW5jZTpbe3ZhbHVlOiJsaWdodCIsbGFiZWw6IkxpZ2h0In0se3ZhbHVlOiJkYXJrIixsYWJlbDoiRGFyayJ9XSwibGlxdWlkLWdsYXNzIjpbe3ZhbHVlOiJjbGVhciIsbGFiZWw6IkNsZWFyIn0se3ZhbHVlOiJ0aW50ZWQiLGxhYmVsOiJUaW50ZWQifV0sImNvbG9yLWZpbHRlciI6W3t2YWx1ZToibm9uZSIsbGFiZWw6Ik5vbmUifSx7dmFsdWU6InJlZC1ncmVlbiIsbGFiZWw6IlJlZC9HcmVlbiAoUHJvdGFub3BpYSkifSx7dmFsdWU6ImdyZWVuLXJlZCIsbGFiZWw6IkdyZWVuL1JlZCAoRGV1dGVyYW5vcGlhKSJ9LHt2YWx1ZToiYmx1ZS15ZWxsb3ciLGxhYmVsOiJCbHVlL1llbGxvdyAoVHJpdGFub3BpYSkifSx7dmFsdWU6ImdyYXlzY2FsZSIsbGFiZWw6IkdyYXlzY2FsZSJ9XX0sdlE9W3trZXk6InJlZHVjZS1tb3Rpb24iLGxhYmVsOiJSZWR1Y2UgTW90aW9uIn0se2tleToiaW5jcmVhc2UtY29udHJhc3QiLGxhYmVsOiJJbmNyZWFzZSBDb250cmFzdCJ9LHtrZXk6InNob3ctYm9yZGVycyIsbGFiZWw6IlNob3cgQm9yZGVycyJ9LHtrZXk6InJlZHVjZS10cmFuc3BhcmVuY3kiLGxhYmVsOiJSZWR1Y2UgVHJhbnNwYXJlbmN5In0se2tleToidm9pY2VvdmVyIixsYWJlbDoiVm9pY2VPdmVyIn1dO2Z1bmN0aW9uIHAwKHtpY29uOiQsbGFiZWw6USxjaGlsZHJlbjpKfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIG1pbi1oLVszMHB4XSIsImRhdGEtc2V0dGluZy1yb3ciOlEsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNpemUtWzE4cHhdIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIixjaGlsZHJlbjokfSksUV19KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IG1pbi13LTAganVzdGlmeS1lbmQiLGNoaWxkcmVuOkp9KV19KX1mdW5jdGlvbiBqUSh7dmFsdWU6JCxkaXNhYmxlZDpRLG9uQ2hhbmdlOkp9KXtsZXRbWixYXT1NKG51bGwpLFk9SShudWxsKSxxPUkobnVsbCksRz1UKChIKT0+e2lmKHEuY3VycmVudD09PUgpcmV0dXJuO3EuY3VycmVudD1ILEooSCl9LFtKXSksTj1UKChIKT0+e2lmKFgoSCksWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpO1kuY3VycmVudD1zZXRUaW1lb3V0KCgpPT5HKEgpLFNRKX0sW0ddKSxCPVQoKCk9PntpZihZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCksWS5jdXJyZW50PW51bGw7WCgoSCk9PntpZihIIT09bnVsbClHKEgpO3JldHVybiBudWxsfSkscS5jdXJyZW50PW51bGx9LFtHXSksVT1qMi5sZW5ndGgtMSxWPVo/PyQsQz1gJHtWL1UqMTAwfSVgO3JldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHctWzEyMHB4XSBtaW4tdy0wIGZsZXgtY29sIixjaGlsZHJlbjpbSygiaW5wdXQiLHt0eXBlOiJyYW5nZSIsImFyaWEtbGFiZWwiOiJUZXh0IFNpemUiLG1pbjowLG1heDpVLHN0ZXA6MSx2YWx1ZTpWLGRpc2FibGVkOlEsb25DaGFuZ2U6KEgpPT5OKE51bWJlcihILnRhcmdldC52YWx1ZSkpLG9uUG9pbnRlclVwOkIsb25LZXlVcDpCLG9uQmx1cjpCLHN0eWxlOnsiLS1zbGlkZXItZmlsbCI6QywiLS1zbGlkZXItZmlsbC1jb2xvciI6UT8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoiIzBhODRmZiJ9LGNsYXNzTmFtZTpgaC1bMTNweF0gdy1mdWxsIGFwcGVhcmFuY2Utbm9uZSByb3VuZGVkLWZ1bGwgYmctdHJhbnNwYXJlbnQgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6W291dGxpbmU6MS41cHhfc29saWRfcmdiYSgxMCwxMzIsMjU1LDAuNTUpXSBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTQgJHtRPyJjdXJzb3ItZGVmYXVsdCI6ImN1cnNvci1wb2ludGVyIn0gJHsiWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpoLVs0cHhdIFsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106W2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKV92YXIoLS1zbGlkZXItZmlsbCkscmdiYSgyNTUsMjU1LDI1NSwwLjIyKV92YXIoLS1zbGlkZXItZmlsbCkpXSBbJjo6LW1vei1yYW5nZS10cmFja106aC1bNHB4XSBbJjo6LW1vei1yYW5nZS10cmFja106cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXRyYWNrXTpiZy13aGl0ZS8yMCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106aC1bNHB4XSBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpiZy1bdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpXSJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci10aHVtYl06YXBwZWFyYW5jZS1ub25lIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06c2l6ZS1bMTNweF0gWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmJnLXdoaXRlLzUwIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06c2hhZG93LVswXzFweF8zcHhfcmdiYSgwLDAsMCwwLjQ1KV0gWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTotbXQtWzQuNXB4XSBbJjo6LW1vei1yYW5nZS10aHVtYl06c2l6ZS1bMTNweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10aHVtYl06Ym9yZGVyLW5vbmUgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJnLXdoaXRlIFsmOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZS81MCJ9YH0pLEsoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBtdC1bM3B4XSBmbGV4IGp1c3RpZnktYmV0d2VlbiBweC1bNS41cHhdIixjaGlsZHJlbjpqMi5tYXAoKEgpPT5LKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLVsycHhdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS80MCJ9LEgpKX0pXX0pfWZ1bmN0aW9uIFIyKHtsYWJlbDokLHZhbHVlOlEsb3B0aW9uczpKLGRpc2FibGVkOlosb25DaGFuZ2U6WH0pe3JldHVybiBLKFA1LHtsYWJlbDokLHZhbHVlOlEsb3B0aW9uczpKLGRpc2FibGVkOlosb25DaGFuZ2U6WCxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0wLjUgcHgtMiBtaW4tdy0wIG1heC13LVsxNTBweF0gZGlzYWJsZWQ6dGV4dC13aGl0ZS80MCJ9KX12YXIgdjI9e2FwcGVhcmFuY2U6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTIgMnYyIn0pLEsoInBhdGgiLHtkOiJNMTQuODM3IDE2LjM4NWE2IDYgMCAxIDEtNy4yMjMtNy4yMjJjLjYyNC0uMTQ3Ljk3LjY2LjcxNSAxLjI0OGE0IDQgMCAwIDAgNS4yNiA1LjI1OWMuNTg5LS4yNTUgMS4zOTYuMDkgMS4yNDguNzE1In0pLEsoInBhdGgiLHtkOiJNMTYgMTJhNCA0IDAgMCAwLTQtNCJ9KSxLKCJwYXRoIix7ZDoibTE5IDUtMS4yNTYgMS4yNTYifSksSygicGF0aCIse2Q6Ik0yMCAxMmgyIn0pXX0pLGdsYXNzOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDIyMCAyMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Ik0xNTIgMTgzVjE5NUgxMDBWMTgzSDE1MlpNMTk2IDEzOVYxMjZDMTk2IDEwMS42OTkgMTc2LjMwMSA4MiAxNTIgODJIMTAwQzc1LjY5OTUgODIgNTYgMTAxLjY5OSA1NiAxMjZWMTM5QzU2IDE2My4zMDEgNzUuNjk5NSAxODMgMTAwIDE4M1YxOTVMOTkuMjc2NCAxOTQuOTk1QzY4LjkyMjggMTk0LjYxMSA0NC4zODkzIDE3MC4wNzcgNDQuMDA0OSAxMzkuNzI0TDQ0IDEzOVYxMjZDNDQgOTUuMDcyMSA2OS4wNzIxIDcwIDEwMCA3MEgxNTJDMTgyLjkyOCA3MCAyMDggOTUuMDcyMSAyMDggMTI2VjEzOUwyMDcuOTk1IDEzOS43MjRDMjA3LjYxMSAxNzAuMDc3IDE4My4wNzcgMTk0LjYxMSAxNTIuNzI0IDE5NC45OTVMMTUyIDE5NVYxODNDMTc2LjMwMSAxODMgMTk2IDE2My4zMDEgMTk2IDEzOVoifSksSygicGF0aCIse2Q6Ik0xMzYgMjVDMTQ3LjA0NiAyNSAxNTYgMzMuOTU0MyAxNTYgNDVWNzBIMTQzVjQ1QzE0MyA0MS4xMzQgMTM5Ljg2NiAzOCAxMzYgMzhINDFDMzcuMTM0IDM4IDM0IDQxLjEzNCAzNCA0NVYxNDBDMzQgMTQzLjg2NiAzNy4xMzQgMTQ3IDQxIDE0N0g0NC44NjA0QzQ1LjY0ODcgMTUxLjUzNiA0Ni45NjM0IDE1NS44OTEgNDguNzQwMiAxNjBINDFMNDAuNDgzNCAxNTkuOTkzQzI5Ljg0ODEgMTU5LjcyNCAyMS4yNzY1IDE1MS4xNTIgMjEuMDA2OCAxNDAuNTE3TDIxIDE0MFY0NUMyMSAzMy45NTQzIDI5Ljk1NDMgMjUgNDEgMjVIMTM2WiJ9KSxLKCJwYXRoIix7ZDoiTTE1Ni4xOTkgMTQwQzE1Ni4xOTkgMTUwLjg3MyAxNDcuNTIzIDE1OS43MTkgMTM2LjcxNiAxNTkuOTkzTDEzNi4xOTkgMTYwSDgwLjkxN0M3Ny45NDYxIDE2MCA3Ni4xNjM5IDE2My4zIDc3Ljc5MyAxNjUuNzg0Qzc5LjI0NTEgMTY3Ljk5OSA3Ni4xNjQ3IDE3MC4zNTMgNzQuNDA5NCAxNjguMzdMNzMuNjA1OSAxNjcuNDYyQzY5LjM0OTcgMTYyLjY1NCA2NyAxNTYuNDU1IDY3IDE1MC4wMzRDNjcgMTQ4LjM1OCA2OC4zNTgzIDE0NyA3MC4wMzM5IDE0N0gxMzYuMTk5QzE0MC4wNjUgMTQ3IDE0My4xOTkgMTQzLjg2NiAxNDMuMTk5IDE0MFY5Ni45OTU1QzE0My4xOTkgOTMuOTgyMiAxNDEuMzU0IDkxLjI3NjMgMTM4LjU0OSA5MC4xNzYxQzEzNy4zODkgODkuNzIxNSAxMzcuNzE1IDg4IDEzOC45NiA4OEwxNDMuMTk5IDg4QzE1MC4zNzkgODggMTU2LjE5OSA5My44MjAzIDE1Ni4xOTkgMTAxVjE0MFoifSldfSksZmlsdGVyOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTExIDE3YTQgNCAwIDAgMS04IDBWNWEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMloifSksSygicGF0aCIse2Q6Ik0xNi43IDEzSDE5YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAySDcifSksSygicGF0aCIse2Q6Ik0gNyAxN2guMDEifSksSygicGF0aCIse2Q6Im0xMSA4IDIuMy0yLjNhMi40IDIuNCAwIDAgMSAzLjQwNC4wMDRMMTguNiA3LjZhMi40IDIuNCAwIDAgMSAuMDI2IDMuNDM0TDkuOSAxOS44In0pXX0pLHRleHRTaXplOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDUyIDM0IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zOS43MjY2IDMzLjAyMzRDMzguMTQ4NCAzMy4wMjM0IDM2Ljc1IDMyLjcyNjYgMzUuNTMxMiAzMi4xMzI4QzM0LjMxMjUgMzEuNTM5MSAzMy4zNTk0IDMwLjcxMDkgMzIuNjcxOSAyOS42NDg0QzMyIDI4LjU3MDMgMzEuNjY0MSAyNy4zMTI1IDMxLjY2NDEgMjUuODc1QzMxLjY2NDEgMjMuNzgxMiAzMi40Mjk3IDIyLjEwOTQgMzMuOTYwOSAyMC44NTk0QzM1LjUwNzggMTkuNjA5NCAzNy43MTA5IDE4LjkwNjIgNDAuNTcwMyAxOC43NUw0Ny42MDE2IDE4LjM1MTZWMTYuNUM0Ny42MDE2IDE1LjAxNTYgNDcuMTMyOCAxMy44MzU5IDQ2LjE5NTMgMTIuOTYwOUM0NS4yNTc4IDEyLjA4NTkgNDMuOTUzMSAxMS42NDg0IDQyLjI4MTIgMTEuNjQ4NEM0MC45MDYyIDExLjY0ODQgMzkuNzUgMTEuOTQ1MyAzOC44MTI1IDEyLjUzOTFDMzcuODc1IDEzLjEzMjggMzcuMDkzOCAxNC4wNDY5IDM2LjQ2ODggMTUuMjgxMkMzNi4yNjU2IDE1LjYwOTQgMzYuMDE1NiAxNS44NTE2IDM1LjcxODggMTYuMDA3OEMzNS40MjE5IDE2LjE2NDEgMzUuMDc4MSAxNi4yNDIyIDM0LjY4NzUgMTYuMjQyMkMzNC4xNTYyIDE2LjI0MjIgMzMuNzEwOSAxNi4wNzgxIDMzLjM1MTYgMTUuNzVDMzMuMDA3OCAxNS40MjE5IDMyLjgzNTkgMTQuOTkyMiAzMi44MzU5IDE0LjQ2MDlDMzIuODM1OSAxNC4yMjY2IDMyLjg2NzIgMTMuOTc2NiAzMi45Mjk3IDEzLjcxMDlDMzMuMDA3OCAxMy40NDUzIDMzLjEwOTQgMTMuMTc5NyAzMy4yMzQ0IDEyLjkxNDFDMzMuODc1IDExLjQ2MDkgMzUuMDE1NiAxMC4zMDQ3IDM2LjY1NjIgOS40NDUzMUMzOC4zMTI1IDguNTg1OTQgNDAuMjI2NiA4LjE1NjI1IDQyLjM5ODQgOC4xNTYyNUM0NC4zMjAzIDguMTU2MjUgNDUuOTg0NCA4LjQ5MjE5IDQ3LjM5MDYgOS4xNjQwNkM0OC44MTI1IDkuODIwMzEgNDkuODk4NCAxMC43NSA1MC42NDg0IDExLjk1MzFDNTEuNDE0MSAxMy4xNTYyIDUxLjc5NjkgMTQuNTcwMyA1MS43OTY5IDE2LjE5NTNWMzAuOTE0MUM1MS43OTY5IDMxLjU4NTkgNTEuNjA5NCAzMi4xMDk0IDUxLjIzNDQgMzIuNDg0NEM1MC44NTk0IDMyLjg1OTQgNTAuMzY3MiAzMy4wNDY5IDQ5Ljc1NzggMzMuMDQ2OUM0OS4xNjQxIDMzLjA0NjkgNDguNjc5NyAzMi44NjcyIDQ4LjMwNDcgMzIuNTA3OEM0Ny45Mjk3IDMyLjE0ODQgNDcuNzM0NCAzMS42NjQxIDQ3LjcxODggMzEuMDU0N1YyOC4zNTk0SDQ3LjY3MTlDNDYuOTg0NCAyOS43ODEyIDQ1LjkwNjIgMzAuOTE0MSA0NC40Mzc1IDMxLjc1NzhDNDIuOTg0NCAzMi42MDE2IDQxLjQxNDEgMzMuMDIzNCAzOS43MjY2IDMzLjAyMzRaTTQwLjgwNDcgMjkuNjcxOUM0Mi4wNzAzIDI5LjY3MTkgNDMuMjEwOSAyOS40MDYyIDQ0LjIyNjYgMjguODc1QzQ1LjI1NzggMjguMzQzOCA0Ni4wNzgxIDI3LjYxNzIgNDYuNjg3NSAyNi42OTUzQzQ3LjI5NjkgMjUuNzczNCA0Ny42MDE2IDI0Ljc1IDQ3LjYwMTYgMjMuNjI1VjIxLjMyODFMNDEuMTMyOCAyMS43NUMzOS40NDUzIDIxLjg1OTQgMzguMTY0MSAyMi4yNzM0IDM3LjI4OTEgMjIuOTkyMkMzNi40MTQxIDIzLjY5NTMgMzUuOTc2NiAyNC42MDk0IDM1Ljk3NjYgMjUuNzM0NEMzNS45NzY2IDI2LjkyMTkgMzYuNDIxOSAyNy44NzUgMzcuMzEyNSAyOC41OTM4QzM4LjIwMzEgMjkuMzEyNSAzOS4zNjcyIDI5LjY3MTkgNDAuODA0NyAyOS42NzE5Wk0yLjE3OTY5IDMzLjAyMzRDMS41MDc4MSAzMy4wMjM0IDAuOTc2NTYyIDMyLjgzNTkgMC41ODU5MzggMzIuNDYwOUMwLjE5NTMxMiAzMi4wODU5IDAgMzEuNTc4MSAwIDMwLjkzNzVDMCAzMC41MzEyIDAuMDg1OTM3NSAzMC4wNzAzIDAuMjU3ODEyIDI5LjU1NDdMMTAuNDA2MiAyLjQxNDA2QzEwLjk4NDQgMC44MDQ2ODggMTIuMTAxNiAwIDEzLjc1NzggMEMxNC42MTcyIDAgMTUuMzI4MSAwLjIwMzEyNSAxNS44OTA2IDAuNjA5Mzc1QzE2LjQ1MzEgMS4wMTU2MiAxNi44NzUgMS42MjUgMTcuMTU2MiAyLjQzNzVMMjcuMjU3OCAyOS40ODQ0QzI3LjQ0NTMgMzAgMjcuNTM5MSAzMC40Njg4IDI3LjUzOTEgMzAuODkwNkMyNy41MzkxIDMxLjU0NjkgMjcuMzM1OSAzMi4wNzAzIDI2LjkyOTcgMzIuNDYwOUMyNi41MjM0IDMyLjgzNTkgMjUuOTc2NiAzMy4wMjM0IDI1LjI4OTEgMzMuMDIzNEMyNC42MzI4IDMzLjAyMzQgMjQuMTA5NCAzMi44NzUgMjMuNzE4OCAzMi41NzgxQzIzLjM0MzggMzIuMjgxMiAyMy4wMzkxIDMxLjc4OTEgMjIuODA0NyAzMS4xMDE2TDEzLjgyODEgNS4zNDM3NUgxMy42NjQxTDQuNjY0MDYgMzEuMTAxNkM0LjQyOTY5IDMxLjc4OTEgNC4xMjUgMzIuMjgxMiAzLjc1IDMyLjU3ODFDMy4zNzUgMzIuODc1IDIuODUxNTYgMzMuMDIzNCAyLjE3OTY5IDMzLjAyMzRaTTYuNjc5NjkgMjMuNzQyMkM2LjE0ODQ0IDIzLjc0MjIgNS43MDMxMiAyMy41NjI1IDUuMzQzNzUgMjMuMjAzMUM0Ljk4NDM4IDIyLjg0MzggNC44MDQ2OSAyMi4zOTg0IDQuODA0NjkgMjEuODY3MkM0LjgwNDY5IDIxLjM1MTYgNC45ODQzOCAyMC45MTQxIDUuMzQzNzUgMjAuNTU0N0M1LjcwMzEyIDIwLjE5NTMgNi4xNDg0NCAyMC4wMTU2IDYuNjc5NjkgMjAuMDE1NkgyMC44NTk0QzIxLjM3NSAyMC4wMTU2IDIxLjgxMjUgMjAuMTk1MyAyMi4xNzE5IDIwLjU1NDdDMjIuNTMxMiAyMC45MTQxIDIyLjcxMDkgMjEuMzUxNiAyMi43MTA5IDIxLjg2NzJDMjIuNzEwOSAyMi4zOTg0IDIyLjUzMTIgMjIuODQzOCAyMi4xNzE5IDIzLjIwMzFDMjEuODEyNSAyMy41NjI1IDIxLjM3NSAyMy43NDIyIDIwLjg1OTQgMjMuNzQyMkg2LjY3OTY5WiJ9KX0pLG1vdGlvbjpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsY2hpbGRyZW46W0soImNpcmNsZSIse2N4OiIxNCIsY3k6IjEyIixyOiI2In0pLEsoInBhdGgiLHtkOiJNMyA4aDRNMiAxMmg0TTMgMTZoNCJ9KV19KSxjb250cmFzdDpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn0pLEsoInBhdGgiLHtkOiJNMTIgMThhNiA2IDAgMCAwIDAtMTJ2MTJ6In0pXX0pLGJvcmRlcnM6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNNSAyMWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDIifSksSygicGF0aCIse2Q6Ik05IDIxaDEifSksSygicGF0aCIse2Q6Ik0xNCAyMWgxIn0pXX0pLHRyYW5zcGFyZW5jeTpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA2MyA0NiIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMjIuNzM0NCA0LjE3MTg4QzIyLjE4NzUgNC4xNzE4OCAyMS43MTg4IDMuOTc2NTYgMjEuMzI4MSAzLjU4NTk0QzIwLjkzNzUgMy4xOTUzMSAyMC43NDIyIDIuNzE4NzUgMjAuNzQyMiAyLjE1NjI1QzIwLjc0MjIgMS42MDkzOCAyMC45Mzc1IDEuMTQwNjIgMjEuMzI4MSAwLjc1QzIxLjcxODggMC4zNTkzNzUgMjIuMTg3NSAwLjE2NDA2MiAyMi43MzQ0IDAuMTY0MDYyQzIzLjI4MTIgMC4xNjQwNjIgMjMuNzUgMC4zNTkzNzUgMjQuMTQwNiAwLjc1QzI0LjUzMTIgMS4xNDA2MiAyNC43MjY2IDEuNjA5MzggMjQuNzI2NiAyLjE1NjI1QzI0LjcyNjYgMi43MTg3NSAyNC41MzEyIDMuMTk1MzEgMjQuMTQwNiAzLjU4NTk0QzIzLjc1IDMuOTc2NTYgMjMuMjgxMiA0LjE3MTg4IDIyLjczNDQgNC4xNzE4OFpNMjkuMTA5NCA1LjIwMzEyQzI4LjU0NjkgNS4yMDMxMiAyOC4wNzAzIDUuMDA3ODEgMjcuNjc5NyA0LjYxNzE5QzI3LjI4OTEgNC4yMjY1NiAyNy4wOTM4IDMuNzU3ODEgMjcuMDkzOCAzLjIxMDk0QzI3LjA5MzggMi42NjQwNiAyNy4yODkxIDIuMTk1MzEgMjcuNjc5NyAxLjgwNDY5QzI4LjA3MDMgMS4zOTg0NCAyOC41NDY5IDEuMTk1MzEgMjkuMTA5NCAxLjE5NTMxQzI5LjY1NjIgMS4xOTUzMSAzMC4xMjUgMS4zOTg0NCAzMC41MTU2IDEuODA0NjlDMzAuOTA2MiAyLjE5NTMxIDMxLjEwMTYgMi42NjQwNiAzMS4xMDE2IDMuMjEwOTRDMzEuMTAxNiAzLjc1NzgxIDMwLjkwNjIgNC4yMjY1NiAzMC41MTU2IDQuNjE3MTlDMzAuMTI1IDUuMDA3ODEgMjkuNjU2MiA1LjIwMzEyIDI5LjEwOTQgNS4yMDMxMlpNMzQuODc1IDguMTMyODFDMzQuMzI4MSA4LjEzMjgxIDMzLjg1MTYgNy45Mzc1IDMzLjQ0NTMgNy41NDY4OEMzMy4wNTQ3IDcuMTQwNjIgMzIuODU5NCA2LjY3MTg4IDMyLjg1OTQgNi4xNDA2MkMzMi44NTk0IDUuNTc4MTIgMzMuMDU0NyA1LjEwMTU2IDMzLjQ0NTMgNC43MTA5NEMzMy44NTE2IDQuMzIwMzEgMzQuMzI4MSA0LjEyNSAzNC44NzUgNC4xMjVDMzUuNDIxOSA0LjEyNSAzNS44OTA2IDQuMzIwMzEgMzYuMjgxMiA0LjcxMDk0QzM2LjY4NzUgNS4xMDE1NiAzNi44OTA2IDUuNTc4MTIgMzYuODkwNiA2LjE0MDYyQzM2Ljg5MDYgNi42NzE4OCAzNi42ODc1IDcuMTQwNjIgMzYuMjgxMiA3LjU0Njg4QzM1Ljg5MDYgNy45Mzc1IDM1LjQyMTkgOC4xMzI4MSAzNC44NzUgOC4xMzI4MVpNMzkuNDQ1MyAxMi42Nzk3QzM4Ljg5ODQgMTIuNjc5NyAzOC40MjE5IDEyLjQ4NDQgMzguMDE1NiAxMi4wOTM4QzM3LjYyNSAxMS43MDMxIDM3LjQyOTcgMTEuMjM0NCAzNy40Mjk3IDEwLjY4NzVDMzcuNDI5NyAxMC4xNTYyIDM3LjYyNSA5LjY5NTMxIDM4LjAxNTYgOS4zMDQ2OUMzOC40MjE5IDguODk4NDQgMzguODk4NCA4LjY5NTMxIDM5LjQ0NTMgOC42OTUzMUMzOS45OTIyIDguNjk1MzEgNDAuNDYwOSA4Ljg5ODQ0IDQwLjg1MTYgOS4zMDQ2OUM0MS4yNDIyIDkuNjk1MzEgNDEuNDM3NSAxMC4xNTYyIDQxLjQzNzUgMTAuNjg3NUM0MS40Mzc1IDExLjIzNDQgNDEuMjQyMiAxMS43MDMxIDQwLjg1MTYgMTIuMDkzOEM0MC40NjA5IDEyLjQ4NDQgMzkuOTkyMiAxMi42Nzk3IDM5LjQ0NTMgMTIuNjc5N1pNNDIuMzc1IDE4LjM5ODRDNDEuODEyNSAxOC4zOTg0IDQxLjMyODEgMTguMjAzMSA0MC45MjE5IDE3LjgxMjVDNDAuNTMxMiAxNy40MjE5IDQwLjMzNTkgMTYuOTUzMSA0MC4zMzU5IDE2LjQwNjJDNDAuMzM1OSAxNS44NDM4IDQwLjUzMTIgMTUuMzY3MiA0MC45MjE5IDE0Ljk3NjZDNDEuMzI4MSAxNC41ODU5IDQxLjgxMjUgMTQuMzkwNiA0Mi4zNzUgMTQuMzkwNkM0Mi45MDYyIDE0LjM5MDYgNDMuMzY3MiAxNC41ODU5IDQzLjc1NzggMTQuOTc2NkM0NC4xNjQxIDE1LjM2NzIgNDQuMzY3MiAxNS44NDM4IDQ0LjM2NzIgMTYuNDA2MkM0NC4zNjcyIDE2Ljk1MzEgNDQuMTY0MSAxNy40MjE5IDQzLjc1NzggMTcuODEyNUM0My4zNjcyIDE4LjIwMzEgNDIuOTA2MiAxOC4zOTg0IDQyLjM3NSAxOC4zOTg0Wk00My40NTMxIDI0Ljc5NjlDNDIuOTA2MiAyNC43OTY5IDQyLjQzNzUgMjQuNjAxNiA0Mi4wNDY5IDI0LjIxMDlDNDEuNjU2MiAyMy44MjAzIDQxLjQ2MDkgMjMuMzQzOCA0MS40NjA5IDIyLjc4MTJDNDEuNDYwOSAyMi4yMzQ0IDQxLjY1NjIgMjEuNzY1NiA0Mi4wNDY5IDIxLjM3NUM0Mi40Mzc1IDIwLjk4NDQgNDIuOTA2MiAyMC43ODkxIDQzLjQ1MzEgMjAuNzg5MUM0NCAyMC43ODkxIDQ0LjQ2ODggMjAuOTg0NCA0NC44NTk0IDIxLjM3NUM0NS4yNjU2IDIxLjc2NTYgNDUuNDY4OCAyMi4yMzQ0IDQ1LjQ2ODggMjIuNzgxMkM0NS40Njg4IDIzLjM0MzggNDUuMjY1NiAyMy44MjAzIDQ0Ljg1OTQgMjQuMjEwOUM0NC40Njg4IDI0LjYwMTYgNDQgMjQuNzk2OSA0My40NTMxIDI0Ljc5NjlaTTQyLjM3NSAzMS4xNzE5QzQxLjgxMjUgMzEuMTcxOSA0MS4zMjgxIDMwLjk3NjYgNDAuOTIxOSAzMC41ODU5QzQwLjUzMTIgMzAuMTk1MyA0MC4zMzU5IDI5LjcyNjYgNDAuMzM1OSAyOS4xNzk3QzQwLjMzNTkgMjguNjE3MiA0MC41MzEyIDI4LjE0MDYgNDAuOTIxOSAyNy43NUM0MS4zMjgxIDI3LjM1OTQgNDEuODEyNSAyNy4xNjQxIDQyLjM3NSAyNy4xNjQxQzQyLjkwNjIgMjcuMTY0MSA0My4zNjcyIDI3LjM1OTQgNDMuNzU3OCAyNy43NUM0NC4xNjQxIDI4LjE0MDYgNDQuMzY3MiAyOC42MTcyIDQ0LjM2NzIgMjkuMTc5N0M0NC4zNjcyIDI5LjcyNjYgNDQuMTY0MSAzMC4xOTUzIDQzLjc1NzggMzAuNTg1OUM0My4zNjcyIDMwLjk3NjYgNDIuOTA2MiAzMS4xNzE5IDQyLjM3NSAzMS4xNzE5Wk0zOS40NDUzIDM2Ljg5MDZDMzguODk4NCAzNi44OTA2IDM4LjQyMTkgMzYuNjk1MyAzOC4wMTU2IDM2LjMwNDdDMzcuNjI1IDM1Ljg5ODQgMzcuNDI5NyAzNS40MjE5IDM3LjQyOTcgMzQuODc1QzM3LjQyOTcgMzQuMzI4MSAzNy42MjUgMzMuODU5NCAzOC4wMTU2IDMzLjQ2ODhDMzguNDIxOSAzMy4wNjI1IDM4Ljg5ODQgMzIuODU5NCAzOS40NDUzIDMyLjg1OTRDMzkuOTkyMiAzMi44NTk0IDQwLjQ2MDkgMzMuMDYyNSA0MC44NTE2IDMzLjQ2ODhDNDEuMjQyMiAzMy44NTk0IDQxLjQzNzUgMzQuMzI4MSA0MS40Mzc1IDM0Ljg3NUM0MS40Mzc1IDM1LjQyMTkgNDEuMjQyMiAzNS44OTg0IDQwLjg1MTYgMzYuMzA0N0M0MC40NjA5IDM2LjY5NTMgMzkuOTkyMiAzNi44OTA2IDM5LjQ0NTMgMzYuODkwNlpNMzQuODc1IDQxLjQzNzVDMzQuMzI4MSA0MS40Mzc1IDMzLjg1MTYgNDEuMjQyMiAzMy40NDUzIDQwLjg1MTZDMzMuMDU0NyA0MC40NjA5IDMyLjg1OTQgMzkuOTkyMiAzMi44NTk0IDM5LjQ0NTNDMzIuODU5NCAzOC44OTg0IDMzLjA1NDcgMzguNDI5NyAzMy40NDUzIDM4LjAzOTFDMzMuODUxNiAzNy42MzI4IDM0LjMyODEgMzcuNDI5NyAzNC44NzUgMzcuNDI5N0MzNS40MjE5IDM3LjQyOTcgMzUuODkwNiAzNy42MzI4IDM2LjI4MTIgMzguMDM5MUMzNi42ODc1IDM4LjQyOTcgMzYuODkwNiAzOC44OTg0IDM2Ljg5MDYgMzkuNDQ1M0MzNi44OTA2IDM5Ljk5MjIgMzYuNjg3NSA0MC40NjA5IDM2LjI4MTIgNDAuODUxNkMzNS44OTA2IDQxLjI0MjIgMzUuNDIxOSA0MS40Mzc1IDM0Ljg3NSA0MS40Mzc1Wk0yOS4xMDk0IDQ0LjM2NzJDMjguNTQ2OSA0NC4zNjcyIDI4LjA3MDMgNDQuMTY0MSAyNy42Nzk3IDQzLjc1NzhDMjcuMjg5MSA0My4zNjcyIDI3LjA5MzggNDIuODk4NCAyNy4wOTM4IDQyLjM1MTZDMjcuMDkzOCA0MS44MDQ3IDI3LjI4OTEgNDEuMzM1OSAyNy42Nzk3IDQwLjk0NTNDMjguMDcwMyA0MC41NTQ3IDI4LjU0NjkgNDAuMzU5NCAyOS4xMDk0IDQwLjM1OTRDMjkuNjU2MiA0MC4zNTk0IDMwLjEyNSA0MC41NTQ3IDMwLjUxNTYgNDAuOTQ1M0MzMC45MDYyIDQxLjMzNTkgMzEuMTAxNiA0MS44MDQ3IDMxLjEwMTYgNDIuMzUxNkMzMS4xMDE2IDQyLjg5ODQgMzAuOTA2MiA0My4zNjcyIDMwLjUxNTYgNDMuNzU3OEMzMC4xMjUgNDQuMTY0MSAyOS42NTYyIDQ0LjM2NzIgMjkuMTA5NCA0NC4zNjcyWk0yMi43MzQ0IDQ1LjM5ODRDMjIuMTg3NSA0NS4zOTg0IDIxLjcxODggNDUuMjAzMSAyMS4zMjgxIDQ0LjgxMjVDMjAuOTM3NSA0NC40MjE5IDIwLjc0MjIgNDMuOTUzMSAyMC43NDIyIDQzLjQwNjJDMjAuNzQyMiA0Mi44NDM4IDIwLjkzNzUgNDIuMzY3MiAyMS4zMjgxIDQxLjk3NjZDMjEuNzE4OCA0MS41ODU5IDIyLjE4NzUgNDEuMzkwNiAyMi43MzQ0IDQxLjM5MDZDMjMuMjgxMiA0MS4zOTA2IDIzLjc1IDQxLjU4NTkgMjQuMTQwNiA0MS45NzY2QzI0LjUzMTIgNDIuMzY3MiAyNC43MjY2IDQyLjg0MzggMjQuNzI2NiA0My40MDYyQzI0LjcyNjYgNDMuOTUzMSAyNC41MzEyIDQ0LjQyMTkgMjQuMTQwNiA0NC44MTI1QzIzLjc1IDQ1LjIwMzEgMjMuMjgxMiA0NS4zOTg0IDIyLjczNDQgNDUuMzk4NFpNMTYuMzU5NCA0NC4zNjcyQzE1LjgxMjUgNDQuMzY3MiAxNS4zNDM4IDQ0LjE2NDEgMTQuOTUzMSA0My43NTc4QzE0LjU2MjUgNDMuMzY3MiAxNC4zNjcyIDQyLjg5ODQgMTQuMzY3MiA0Mi4zNTE2QzE0LjM2NzIgNDEuODA0NyAxNC41NjI1IDQxLjMzNTkgMTQuOTUzMSA0MC45NDUzQzE1LjM0MzggNDAuNTU0NyAxNS44MTI1IDQwLjM1OTQgMTYuMzU5NCA0MC4zNTk0QzE2LjkyMTkgNDAuMzU5NCAxNy4zOTg0IDQwLjU1NDcgMTcuNzg5MSA0MC45NDUzQzE4LjE3OTcgNDEuMzM1OSAxOC4zNzUgNDEuODA0NyAxOC4zNzUgNDIuMzUxNkMxOC4zNzUgNDIuODk4NCAxOC4xNzk3IDQzLjM2NzIgMTcuNzg5MSA0My43NTc4QzE3LjM5ODQgNDQuMTY0MSAxNi45MjE5IDQ0LjM2NzIgMTYuMzU5NCA0NC4zNjcyWk0xMC41NzAzIDQxLjQzNzVDMTAuMDM5MSA0MS40Mzc1IDkuNTcwMzEgNDEuMjQyMiA5LjE2NDA2IDQwLjg1MTZDOC43NzM0NCA0MC40NjA5IDguNTc4MTIgMzkuOTkyMiA4LjU3ODEyIDM5LjQ0NTNDOC41NzgxMiAzOC44OTg0IDguNzczNDQgMzguNDI5NyA5LjE2NDA2IDM4LjAzOTFDOS41NzAzMSAzNy42MzI4IDEwLjAzOTEgMzcuNDI5NyAxMC41NzAzIDM3LjQyOTdDMTEuMTMyOCAzNy40Mjk3IDExLjYwOTQgMzcuNjMyOCAxMiAzOC4wMzkxQzEyLjM5MDYgMzguNDI5NyAxMi41ODU5IDM4Ljg5ODQgMTIuNTg1OSAzOS40NDUzQzEyLjU4NTkgMzkuOTkyMiAxMi4zOTA2IDQwLjQ2MDkgMTIgNDAuODUxNkMxMS42MDk0IDQxLjI0MjIgMTEuMTMyOCA0MS40Mzc1IDEwLjU3MDMgNDEuNDM3NVpNNi4wMjM0NCAzNi44OTA2QzUuNDc2NTYgMzYuODkwNiA1IDM2LjY5NTMgNC41OTM3NSAzNi4zMDQ3QzQuMjAzMTIgMzUuODk4NCA0LjAwNzgxIDM1LjQyMTkgNC4wMDc4MSAzNC44NzVDNC4wMDc4MSAzNC4zMjgxIDQuMjAzMTIgMzMuODU5NCA0LjU5Mzc1IDMzLjQ2ODhDNSAzMy4wNjI1IDUuNDc2NTYgMzIuODU5NCA2LjAyMzQ0IDMyLjg1OTRDNi41NzAzMSAzMi44NTk0IDcuMDM5MDYgMzMuMDYyNSA3LjQyOTY5IDMzLjQ2ODhDNy44MjAzMSAzMy44NTk0IDguMDE1NjIgMzQuMzI4MSA4LjAxNTYyIDM0Ljg3NUM4LjAxNTYyIDM1LjQyMTkgNy44MjAzMSAzNS44OTg0IDcuNDI5NjkgMzYuMzA0N0M3LjAzOTA2IDM2LjY5NTMgNi41NzAzMSAzNi44OTA2IDYuMDIzNDQgMzYuODkwNlpNMy4wOTM3NSAzMS4xNzE5QzIuNTYyNSAzMS4xNzE5IDIuMDkzNzUgMzAuOTc2NiAxLjY4NzUgMzAuNTg1OUMxLjI5Njg4IDMwLjE5NTMgMS4xMDE1NiAyOS43MjY2IDEuMTAxNTYgMjkuMTc5N0MxLjEwMTU2IDI4LjYxNzIgMS4yOTY4OCAyOC4xNDA2IDEuNjg3NSAyNy43NUMyLjA5Mzc1IDI3LjM1OTQgMi41NjI1IDI3LjE2NDEgMy4wOTM3NSAyNy4xNjQxQzMuNjU2MjUgMjcuMTY0MSA0LjEzMjgxIDI3LjM1OTQgNC41MjM0NCAyNy43NUM0LjkxNDA2IDI4LjE0MDYgNS4xMDkzOCAyOC42MTcyIDUuMTA5MzggMjkuMTc5N0M1LjEwOTM4IDI5LjcyNjYgNC45MTQwNiAzMC4xOTUzIDQuNTIzNDQgMzAuNTg1OUM0LjEzMjgxIDMwLjk3NjYgMy42NTYyNSAzMS4xNzE5IDMuMDkzNzUgMzEuMTcxOVpNMi4wMTU2MiAyNC43OTY5QzEuNDUzMTIgMjQuNzk2OSAwLjk3NjU2MiAyNC42MDE2IDAuNTg1OTM4IDI0LjIxMDlDMC4xOTUzMTIgMjMuODIwMyAwIDIzLjM0MzggMCAyMi43ODEyQzAgMjIuMjM0NCAwLjE5NTMxMiAyMS43NjU2IDAuNTg1OTM4IDIxLjM3NUMwLjk3NjU2MiAyMC45ODQ0IDEuNDUzMTIgMjAuNzg5MSAyLjAxNTYyIDIwLjc4OTFDMi41NjI1IDIwLjc4OTEgMy4wMzEyNSAyMC45ODQ0IDMuNDIxODggMjEuMzc1QzMuODEyNSAyMS43NjU2IDQuMDA3ODEgMjIuMjM0NCA0LjAwNzgxIDIyLjc4MTJDNC4wMDc4MSAyMy4zNDM4IDMuODEyNSAyMy44MjAzIDMuNDIxODggMjQuMjEwOUMzLjAzMTI1IDI0LjYwMTYgMi41NjI1IDI0Ljc5NjkgMi4wMTU2MiAyNC43OTY5Wk0zLjA5Mzc1IDE4LjM5ODRDMi41NjI1IDE4LjM5ODQgMi4wOTM3NSAxOC4yMDMxIDEuNjg3NSAxNy44MTI1QzEuMjk2ODggMTcuNDIxOSAxLjEwMTU2IDE2Ljk1MzEgMS4xMDE1NiAxNi40MDYyQzEuMTAxNTYgMTUuODQzOCAxLjI5Njg4IDE1LjM2NzIgMS42ODc1IDE0Ljk3NjZDMi4wOTM3NSAxNC41ODU5IDIuNTYyNSAxNC4zOTA2IDMuMDkzNzUgMTQuMzkwNkMzLjY1NjI1IDE0LjM5MDYgNC4xMzI4MSAxNC41ODU5IDQuNTIzNDQgMTQuOTc2NkM0LjkxNDA2IDE1LjM2NzIgNS4xMDkzOCAxNS44NDM4IDUuMTA5MzggMTYuNDA2MkM1LjEwOTM4IDE2Ljk1MzEgNC45MTQwNiAxNy40MjE5IDQuNTIzNDQgMTcuODEyNUM0LjEzMjgxIDE4LjIwMzEgMy42NTYyNSAxOC4zOTg0IDMuMDkzNzUgMTguMzk4NFpNNi4wMjM0NCAxMi42Nzk3QzUuNDc2NTYgMTIuNjc5NyA1IDEyLjQ4NDQgNC41OTM3NSAxMi4wOTM4QzQuMjAzMTIgMTEuNzAzMSA0LjAwNzgxIDExLjIzNDQgNC4wMDc4MSAxMC42ODc1QzQuMDA3ODEgMTAuMTU2MiA0LjIwMzEyIDkuNjk1MzEgNC41OTM3NSA5LjMwNDY5QzUgOC44OTg0NCA1LjQ3NjU2IDguNjk1MzEgNi4wMjM0NCA4LjY5NTMxQzYuNTcwMzEgOC42OTUzMSA3LjAzOTA2IDguODk4NDQgNy40Mjk2OSA5LjMwNDY5QzcuODIwMzEgOS42OTUzMSA4LjAxNTYyIDEwLjE1NjIgOC4wMTU2MiAxMC42ODc1QzguMDE1NjIgMTEuMjM0NCA3LjgyMDMxIDExLjcwMzEgNy40Mjk2OSAxMi4wOTM4QzcuMDM5MDYgMTIuNDg0NCA2LjU3MDMxIDEyLjY3OTcgNi4wMjM0NCAxMi42Nzk3Wk0xMC41NzAzIDguMTMyODFDMTAuMDM5MSA4LjEzMjgxIDkuNTcwMzEgNy45Mzc1IDkuMTY0MDYgNy41NDY4OEM4Ljc3MzQ0IDcuMTQwNjIgOC41NzgxMiA2LjY3MTg4IDguNTc4MTIgNi4xNDA2MkM4LjU3ODEyIDUuNTc4MTIgOC43NzM0NCA1LjEwMTU2IDkuMTY0MDYgNC43MTA5NEM5LjU3MDMxIDQuMzIwMzEgMTAuMDM5MSA0LjEyNSAxMC41NzAzIDQuMTI1QzExLjEzMjggNC4xMjUgMTEuNjA5NCA0LjMyMDMxIDEyIDQuNzEwOTRDMTIuMzkwNiA1LjEwMTU2IDEyLjU4NTkgNS41NzgxMiAxMi41ODU5IDYuMTQwNjJDMTIuNTg1OSA2LjY3MTg4IDEyLjM5MDYgNy4xNDA2MiAxMiA3LjU0Njg4QzExLjYwOTQgNy45Mzc1IDExLjEzMjggOC4xMzI4MSAxMC41NzAzIDguMTMyODFaTTE2LjM1OTQgNS4yMDMxMkMxNS44MTI1IDUuMjAzMTIgMTUuMzQzOCA1LjAwNzgxIDE0Ljk1MzEgNC42MTcxOUMxNC41NjI1IDQuMjI2NTYgMTQuMzY3MiAzLjc1NzgxIDE0LjM2NzIgMy4yMTA5NEMxNC4zNjcyIDIuNjY0MDYgMTQuNTYyNSAyLjE5NTMxIDE0Ljk1MzEgMS44MDQ2OUMxNS4zNDM4IDEuMzk4NDQgMTUuODEyNSAxLjE5NTMxIDE2LjM1OTQgMS4xOTUzMUMxNi45MjE5IDEuMTk1MzEgMTcuMzk4NCAxLjM5ODQ0IDE3Ljc4OTEgMS44MDQ2OUMxOC4xNzk3IDIuMTk1MzEgMTguMzc1IDIuNjY0MDYgMTguMzc1IDMuMjEwOTRDMTguMzc1IDMuNzU3ODEgMTguMTc5NyA0LjIyNjU2IDE3Ljc4OTEgNC42MTcxOUMxNy4zOTg0IDUuMDA3ODEgMTYuOTIxOSA1LjIwMzEyIDE2LjM1OTQgNS4yMDMxMlpNNDAuMTAxNiA0NS41NjI1QzM2Ljk0NTMgNDUuNTYyNSAzMy45OTIyIDQ0Ljk2ODggMzEuMjQyMiA0My43ODEyQzI4LjUwNzggNDIuNjA5NCAyNi4wOTM4IDQwLjk3NjYgMjQgMzguODgyOEMyMS45MDYyIDM2Ljc4OTEgMjAuMjY1NiAzNC4zNjcyIDE5LjA3ODEgMzEuNjE3MkMxNy45MDYyIDI4Ljg2NzIgMTcuMzIwMyAyNS45MjE5IDE3LjMyMDMgMjIuNzgxMkMxNy4zMjAzIDE5LjY0MDYgMTcuOTA2MiAxNi42OTUzIDE5LjA3ODEgMTMuOTQ1M0MyMC4yNjU2IDExLjE3OTcgMjEuOTA2MiA4Ljc1NzgxIDI0IDYuNjc5NjlDMjYuMDkzOCA0LjU4NTk0IDI4LjUwNzggMi45NTMxMiAzMS4yNDIyIDEuNzgxMjVDMzMuOTkyMiAwLjU5Mzc1IDM2Ljk0NTMgMCA0MC4xMDE2IDBDNDMuMjQyMiAwIDQ2LjE4NzUgMC41OTM3NSA0OC45Mzc1IDEuNzgxMjVDNTEuNjg3NSAyLjk1MzEyIDU0LjEwMTYgNC41ODU5NCA1Ni4xNzk3IDYuNjc5NjlDNTguMjczNCA4Ljc1NzgxIDU5LjkwNjIgMTEuMTc5NyA2MS4wNzgxIDEzLjk0NTNDNjIuMjY1NiAxNi42OTUzIDYyLjg1OTQgMTkuNjQwNiA2Mi44NTk0IDIyLjc4MTJDNjIuODU5NCAyNS45MjE5IDYyLjI2NTYgMjguODY3MiA2MS4wNzgxIDMxLjYxNzJDNTkuOTA2MiAzNC4zNjcyIDU4LjI3MzQgMzYuNzg5MSA1Ni4xNzk3IDM4Ljg4MjhDNTQuMTAxNiA0MC45NzY2IDUxLjY4NzUgNDIuNjA5NCA0OC45Mzc1IDQzLjc4MTJDNDYuMTg3NSA0NC45Njg4IDQzLjI0MjIgNDUuNTYyNSA0MC4xMDE2IDQ1LjU2MjVaTTQwLjEwMTYgNDEuMzkwNkM0Mi42NjQxIDQxLjM5MDYgNDUuMDcwMyA0MC45MDYyIDQ3LjMyMDMgMzkuOTM3NUM0OS41NzAzIDM4Ljk2ODggNTEuNTQ2OSAzNy42MzI4IDUzLjI1IDM1LjkyOTdDNTQuOTY4OCAzNC4yMjY2IDU2LjMwNDcgMzIuMjU3OCA1Ny4yNTc4IDMwLjAyMzRDNTguMjEwOSAyNy43NzM0IDU4LjY4NzUgMjUuMzU5NCA1OC42ODc1IDIyLjc4MTJDNTguNjg3NSAyMC4yMDMxIDU4LjIxMDkgMTcuNzk2OSA1Ny4yNTc4IDE1LjU2MjVDNTYuMzA0NyAxMy4zMTI1IDU0Ljk2ODggMTEuMzM1OSA1My4yNSA5LjYzMjgxQzUxLjU0NjkgNy45Mjk2OSA0OS41NzAzIDYuNTkzNzUgNDcuMzIwMyA1LjYyNUM0NS4wNzAzIDQuNjU2MjUgNDIuNjY0MSA0LjE3MTg4IDQwLjEwMTYgNC4xNzE4OEMzNy41MjM0IDQuMTcxODggMzUuMTA5NCA0LjY1NjI1IDMyLjg1OTQgNS42MjVDMzAuNjI1IDYuNTkzNzUgMjguNjQ4NCA3LjkyOTY5IDI2LjkyOTcgOS42MzI4MUMyNS4yMjY2IDExLjMzNTkgMjMuODkwNiAxMy4zMTI1IDIyLjkyMTkgMTUuNTYyNUMyMS45Njg4IDE3Ljc5NjkgMjEuNDkyMiAyMC4yMDMxIDIxLjQ5MjIgMjIuNzgxMkMyMS40OTIyIDI1LjM1OTQgMjEuOTY4OCAyNy43NzM0IDIyLjkyMTkgMzAuMDIzNEMyMy44OTA2IDMyLjI1NzggMjUuMjI2NiAzNC4yMjY2IDI2LjkyOTcgMzUuOTI5N0MyOC42NDg0IDM3LjYzMjggMzAuNjI1IDM4Ljk2ODggMzIuODU5NCAzOS45Mzc1QzM1LjEwOTQgNDAuOTA2MiAzNy41MjM0IDQxLjM5MDYgNDAuMTAxNiA0MS4zOTA2WiJ9KX0pLHZvaWNlb3ZlcjpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Im0xMSA3LjYwMS01Ljk5NCA4LjE5YTEgMSAwIDAgMCAuMSAxLjI5OGwuODE3LjgxOGExIDEgMCAwIDAgMS4zMTQuMDg3TDE1LjA5IDEyIn0pLEsoInBhdGgiLHtkOiJNMTYuNSAyMS4xNzRDMTUuNSAyMC41IDE0LjM3MiAyMCAxMyAyMGMtMi4wNTggMC0zLjkyOCAyLjM1Ni02IDItMi4wNzItLjM1Ni0yLjc3NS0zLjM2OS0xLjUtNC41In0pLEsoImNpcmNsZSIse2N4OiIxNiIsY3k6IjciLHI6IjUifSldfSl9O2Z1bmN0aW9uIFJRKCQpe2lmKCEkKXJldHVybiEwO3JldHVybiBVNSgkKS5vcy50b0xvd2VyQ2FzZSgpPT09ImlvcyJ9ZnVuY3Rpb24gUzYoe3VkaWQ6JCxydW50aW1lOlF9KXtsZXRbSixaXT1NKCEwKSxbWCxZXT1NKG51bGwpLFtxLEddPU0obnVsbCksW04sQl09TShudWxsKSxVPVJRKFEpLFY9VChhc3luYygpPT57QihudWxsKTt0cnl7bGV0IEU9YXdhaXQgTjMoe2RldmljZTokfSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSk7aWYoRSlZKEUpO2Vsc2UgQigiVW5leHBlY3RlZCBzaW11bGF0b3Itc2V0dGluZ3MgcmVwbHkiKX1jYXRjaChFKXtCKEUgaW5zdGFuY2VvZiBET01FeGNlcHRpb24mJkUubmFtZT09PSJUaW1lb3V0RXJyb3IiPyJUaW1lZCBvdXQgcmVhZGluZyBzaW11bGF0b3Igc2V0dGluZ3MiOkUgaW5zdGFuY2VvZiBFcnJvciYmRS5tZXNzYWdlIT09IkZhaWxlZCB0byBmZXRjaCI/RS5tZXNzYWdlOiJDb3VsZCBub3QgcmVhY2ggdGhlIHByZXZpZXcgc2VydmVyIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpfX0sWyRdKTtiKCgpPT57aWYoWShudWxsKSwhVSlyZXR1cm47VigpfSxbVixVXSk7bGV0IEM9VChhc3luYyhFLHkpPT57RyhFKSxCKG51bGwpLFkoKHgpPT54P3suLi54LFtFXTp5fTp4KTt0cnl7YXdhaXQgTjMoe2RldmljZTokLG9wdGlvbjpFLHZhbHVlOnl9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KX1jYXRjaCh4KXtCKHggaW5zdGFuY2VvZiBFcnJvcj94Lm1lc3NhZ2U6YEZhaWxlZCB0byBzZXQgJHtFfWApLFYoKX1maW5hbGx5e0cobnVsbCl9fSxbJCxWXSksTD1JKHtydW5uaW5nOiExLG5leHQ6bnVsbH0pLEY9SShDKTtGLmN1cnJlbnQ9QztsZXQgej1UKChFKT0+e2xldCB5PUwuY3VycmVudDtpZih5Lm5leHQ9RSx5LnJ1bm5pbmcpcmV0dXJuO3kucnVubmluZz0hMCwoYXN5bmMoKT0+e3doaWxlKHkubmV4dCE9PW51bGwpe2xldCB4PXkubmV4dDt5Lm5leHQ9bnVsbCxhd2FpdCBGLmN1cnJlbnQoInRleHQtc2l6ZSIsajJbeF0pfXkucnVubmluZz0hMX0pKCl9LFtdKSxIPVghPT1udWxsLGs9WD8/eFEsXz1qMi5pbmRleE9mKGtbInRleHQtc2l6ZSJdKSxTPV8+PTA/XzprWyJ0ZXh0LXNpemUiXT8uc3RhcnRzV2l0aCgiYWNjZXNzaWJpbGl0eSIpP2oyLmxlbmd0aC0xOjM7cmV0dXJuIEsoSzAse29wZW46Sixvbk9wZW5DaGFuZ2U6WiwiZGF0YS1zaW11bGF0b3Itc2V0dGluZ3MiOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoJDEse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTaW11bGF0b3IifSksSygic3BhbiIse30pXX0pLGNoaWxkcmVuOiFVP0soImRpdiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80NSB0ZXh0LVsxMXB4XSBweC0wLjUgcHktMSIsY2hpbGRyZW46IlNpbXVsYXRvciBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIG9uIGlPUyBzaW11bGF0b3JzIG9ubHkuIn0pOksoJDEse2NoaWxkcmVuOltOJiZLKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46Tn0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+dm9pZCBWKCksY2xhc3NOYW1lOiJzaHJpbmstMCBjdXJzb3ItcG9pbnRlciByb3VuZGVkIGJvcmRlciBib3JkZXItZGFuZ2VyLzMwIGJnLXRyYW5zcGFyZW50IHB4LTEuNSBweS0wLjUgdGV4dC1bMTFweF0gdGV4dC1kYW5nZXItc29mdCIsY2hpbGRyZW46IlJldHJ5In0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMS41IHBiLTEuNSIsY2hpbGRyZW46W0socDAse2ljb246djIuYXBwZWFyYW5jZSxsYWJlbDoiQXBwZWFyYW5jZSIsY2hpbGRyZW46SyhSMix7bGFiZWw6IkFwcGVhcmFuY2UiLHZhbHVlOmsuYXBwZWFyYW5jZT8/ImxpZ2h0IixvcHRpb25zOkkzLmFwcGVhcmFuY2UsZGlzYWJsZWQ6IUh8fHE9PT0iYXBwZWFyYW5jZSIsb25DaGFuZ2U6KEUpPT5DKCJhcHBlYXJhbmNlIixFKX0pfSksSyhwMCx7aWNvbjp2Mi5nbGFzcyxsYWJlbDoiTGlxdWlkIEdsYXNzIixjaGlsZHJlbjpLKFIyLHtsYWJlbDoiTGlxdWlkIEdsYXNzIix2YWx1ZTprWyJsaXF1aWQtZ2xhc3MiXT8/ImNsZWFyIixvcHRpb25zOkkzWyJsaXF1aWQtZ2xhc3MiXSxkaXNhYmxlZDohSHx8cT09PSJsaXF1aWQtZ2xhc3MiLG9uQ2hhbmdlOihFKT0+QygibGlxdWlkLWdsYXNzIixFKX0pfSksSyhwMCx7aWNvbjp2Mi5maWx0ZXIsbGFiZWw6IkNvbG9yIEZpbHRlciIsY2hpbGRyZW46SyhSMix7bGFiZWw6IkNvbG9yIEZpbHRlciIsdmFsdWU6a1siY29sb3ItZmlsdGVyIl0/PyJub25lIixvcHRpb25zOkkzWyJjb2xvci1maWx0ZXIiXSxkaXNhYmxlZDohSHx8cT09PSJjb2xvci1maWx0ZXIiLG9uQ2hhbmdlOihFKT0+QygiY29sb3ItZmlsdGVyIixFKX0pfSksSyhwMCx7aWNvbjp2Mi50ZXh0U2l6ZSxsYWJlbDoiVGV4dCBTaXplIixjaGlsZHJlbjpLKGpRLHt2YWx1ZTpTLGRpc2FibGVkOiFILG9uQ2hhbmdlOnp9KX0pLHZRLm1hcCgoe2tleTpFLGxhYmVsOnl9KT0+SyhwMCx7aWNvbjp2MltFPT09InJlZHVjZS1tb3Rpb24iPyJtb3Rpb24iOkU9PT0iaW5jcmVhc2UtY29udHJhc3QiPyJjb250cmFzdCI6RT09PSJzaG93LWJvcmRlcnMiPyJib3JkZXJzIjpFPT09InJlZHVjZS10cmFuc3BhcmVuY3kiPyJ0cmFuc3BhcmVuY3kiOiJ2b2ljZW92ZXIiXSxsYWJlbDp5LGNoaWxkcmVuOksoRDUse2xhYmVsOnksY2hlY2tlZDprW0VdPT09Im9uIixkaXNhYmxlZDohSHx8cT09PUUsb25DaGFuZ2U6KHgpPT5DKEUseD8ib24iOiJvZmYiKX0pfSxFKSldfSldfSl9KX12YXIgeTM9InNlcnZlLXNpbTpjb2RlYyIsZ1E9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkguMjY0IChIYXJkd2FyZSkifSx7dmFsdWU6Im1qcGVnIixsYWJlbDoiTUpQRUcgKENvbXBhdGliaWxpdHkpIn1dLGhRPUsoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoibTE2IDEzIDUuMjIzIDMuNDgyYS41LjUgMCAwIDAgLjc3Ny0uNDE2VjcuODdhLjUuNSAwIDAgMC0uNzUyLS40MzJMMTYgMTAuNSJ9KSxLKCJyZWN0Iix7eDoiMiIseToiNiIsd2lkdGg6IjE0IixoZWlnaHQ6IjEyIixyeDoiMiJ9KV19KTtmdW5jdGlvbiB4Nih7cHJlZmVyZW5jZTokLG9uUHJlZmVyZW5jZUNoYW5nZTpRLGFjdGl2ZUNvZGVjOkosYXZjY1N1cHBvcnRlZDpafSl7bGV0W1gsWV09TSghMSkscT1aPyQ6Im1qcGVnIjtyZXR1cm4gSyhLMCx7b3BlbjpYLG9uT3BlbkNoYW5nZTpZLCJkYXRhLXN0cmVhbS1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SygkMSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlN0cmVhbSJ9KSxLKCJzcGFuIix7fSldfSksY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbSyhwMCx7aWNvbjpoUSxsYWJlbDoiQ29kZWMiLGNoaWxkcmVuOksoUjIse2xhYmVsOiJDb2RlYyIsdmFsdWU6cSxvcHRpb25zOmdRLGRpc2FibGVkOiFaLG9uQ2hhbmdlOihOKT0+UShOKX0pfSksSygicCIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBsZWFkaW5nLXNudWcgcHgtMC41IixjaGlsZHJlbjohWj8iVGhpcyBicm93c2VyIGNhbid0IGRlY29kZSBILjI2NCwgc28gdGhlIHN0cmVhbSB1c2VzIE1KUEVHLiI6cT09PSJhdXRvIiYmSj09PSJtanBlZyI/IkguMjY0IHdhcyB1bmF2YWlsYWJsZSBmb3IgdGhpcyBzdHJlYW0sIHNvIGl0IGZlbGwgYmFjayB0byBNSlBFRy4iOiJTd2l0Y2ggdG8gTUpQRUcgaWYgdGhlIHN0cmVhbSBzdHV0dGVycyBvciBkcm9wcyB3aGlsZSBzY3JlZW4gcmVjb3JkaW5nIHRoZSBicm93c2VyIHdpbmRvdy4ifSldfSl9KX1mdW5jdGlvbiB2Nih7b3BlbjokLG9uQ2xvc2U6USx1ZGlkOkosZGV2aWNlUnVudGltZTpaLGN1cnJlbnRBcHA6WCxldmVudExvZ0V2ZW50c0VuZHBvaW50OlksYXhPdmVybGF5RW5hYmxlZDpxLG9uVG9nZ2xlQXhPdmVybGF5OkcsY29kZWNQcmVmZXJlbmNlOk4sb25Db2RlY1ByZWZlcmVuY2VDaGFuZ2U6QixhY3RpdmVDb2RlYzpVLGF2Y2NTdXBwb3J0ZWQ6Vix3aWR0aDpDfSl7cmV0dXJuIEsoUTIse29wZW46JCx3aWR0aDpDLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6SzJ9LGNoaWxkcmVuOltLKEoyLHtjaGlsZHJlbjpbSyhNOSx7Y2hpbGRyZW46IlRvb2xzIn0pLEsoSDUse29uQ2xpY2s6UX0pXX0pLCQmJksoImRpdiIse2NsYXNzTmFtZToicC0zLjUgb3ZlcmZsb3cteS1hdXRvIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0zIixjaGlsZHJlbjpbSyh6Nix7dWRpZDpKLGN1cnJlbnRBcHA6WH0pLEsoYjYse3VkaWQ6SixldmVudHNFbmRwb2ludDpZfSksSyhTNix7dWRpZDpKLHJ1bnRpbWU6Wn0pLEsoQTYse292ZXJsYXlFbmFibGVkOnEsb25Ub2dnbGVPdmVybGF5Okd9KSxLKEk2LHt1ZGlkOkosYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KSxLKEw2LHt1ZGlkOkosZXhlYzpXMX0pLEsoRjYse3VkaWQ6SixidW5kbGVJZDpYPy5idW5kbGVJZD8/bnVsbH0pLEsoeDYse3ByZWZlcmVuY2U6TixvblByZWZlcmVuY2VDaGFuZ2U6QixhY3RpdmVDb2RlYzpVLGF2Y2NTdXBwb3J0ZWQ6Vn0pXX0pXX0pfWZ1bmN0aW9uIGo2KCQsUSl7bGV0IEo7dHJ5e0o9bmV3IFVSTCgkLndlYlNvY2tldERlYnVnZ2VyVXJsKX1jYXRjaHtyZXR1cm4gJH1sZXQgWj1gJHtKLnBhdGhuYW1lfSR7Si5zZWFyY2h9YCxYPVEucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsWT1RLnByb3RvY29sPT09Imh0dHBzOiI/IndzcyI6IndzIixxPWAke1EuaG9zdH0ke1p9YCxHPSQuZGV2dG9vbHNGcm9udGVuZFVybDt0cnl7bGV0IE49bmV3IFVSTCgkLmRldnRvb2xzRnJvbnRlbmRVcmwsYCR7US5wcm90b2NvbH0vLyR7US5ob3N0fWApO04uc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3MiKSxOLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzcyIpLE4uc2VhcmNoUGFyYW1zLnNldChZLHEpLEc9YCR7Ti5wYXRobmFtZX0ke04uc2VhcmNofSR7Ti5oYXNofWB9Y2F0Y2h7fXJldHVybnsuLi4kLHdlYlNvY2tldERlYnVnZ2VyVXJsOmAke1h9Ly8ke1EuaG9zdH0ke1p9YCxkZXZ0b29sc0Zyb250ZW5kVXJsOkd9fWZ1bmN0aW9uIGcyKCQsUSl7ZmV0Y2goZjEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpRfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBiMygpe2xldCAkPWYxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IFE9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsUSkpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIFI2KCQpe2xldCBRPSQuY29udGVudERvY3VtZW50O2lmKCFRKXJldHVybjtsZXQgSj0oKT0+e2xldCBZPVtRXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxHPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IE4gb2YgRyl7bGV0IEI9Ti5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Ti50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KEIpKXJldHVybiBOfWZvcihsZXQgTiBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihOLnNoYWRvd1Jvb3QpWS5wdXNoKE4uc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFo9MCxYPSgpPT57WisrO2xldCBZPUooKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFo8MjApc2V0VGltZW91dChYLDEwMCl9O1goKX1mdW5jdGlvbiBnNigkKXtsZXQgUT1bXSxKPW5ldyBNYXA7Zm9yKGxldCBaIG9mICQpe2xldCBYPVouYXBwTmFtZXx8Wi5idW5kbGVJZHx8IlVua25vd24iLFk9Wi5idW5kbGVJZHx8WCxxPUouZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6WCxidW5kbGVJZDpaLmJ1bmRsZUlkLHRhcmdldHM6W119LEouc2V0KFkscSksUS5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFopfXJldHVybiBRLm1hcCgoWik9PkouZ2V0KFopKX1mdW5jdGlvbiBoNigkLFEpe2xldFtKLFpdPU0oe30pLFg9XzEoKCk9PlEuc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtRXSk7cmV0dXJuIGIoKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIFEpe2lmKCFxKWNvbnRpbnVlO2xldCBHPWAkeyR9OiR7cX1gLE49WjIuZ2V0KEcpO2lmKHR5cGVvZiBOPT09InN0cmluZyJ8fE49PT1udWxsKXtaKChCKT0+QltxXT09PU4/Qjp7Li4uQixbcV06Tn0pO2NvbnRpbnVlfUM2KFcxLCQscSkudGhlbigoQik9PntpZihZKXJldHVybjtaKChVKT0+KHsuLi5VLFtxXTpCfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsWF0pLEp9ZnVuY3Rpb24gZjYoe3VkaWQ6JCx0YXJnZXRzOlEsc2VsZWN0ZWQ6SixvblNlbGVjdFRhcmdldDpaLG9uUmVmcmVzaDpYfSl7bGV0IFk9ZzYoUSkscT1ZLm1hcCgoeik9PnouYnVuZGxlSWQpLmZpbHRlcigoeik9PiEheiksRz1oNigkLHEpLFtOLEJdPU0oITEpLFtVLFZdPU0obnVsbCksQz1JKG51bGwpLEw9SShudWxsKTtiKCgpPT57aWYoIU4pcmV0dXJuO2xldCB6PShIKT0+e2lmKCFMLmN1cnJlbnQpcmV0dXJuO2lmKCFMLmN1cnJlbnQuY29udGFpbnMoSC50YXJnZXQpKUIoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KX0sW05dKSxiKCgpPT57aWYoTilyZXR1cm47aWYoQy5jdXJyZW50KWcyKEMuY3VycmVudCwhMSksQy5jdXJyZW50PW51bGw7YjMoKX0sW05dKSxiKCgpPT57bGV0IHo9KCk9PmIzKCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIseiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIseiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHopLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHopfX0sW10pO2xldCBGPUo/KEoudGl0bGV8fEoudXJsfHxKLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gSygiZGl2Iix7cmVmOkwsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W0soImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e0IoKHopPT57aWYoIXopWCgpO3JldHVybiF6fSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpOLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOkZ9KSxLKGsyLHtzaXplOjEyLHN0cm9rZVdpZHRoOjJ9KV19KSxOJiZLKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKHopPT57bGV0IEg9ei5idW5kbGVJZD9HW3ouYnVuZGxlSWRdOm51bGw7cmV0dXJuIEsoImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltIP0soImltZyIse3NyYzpILGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6Sygic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ei5hcHBOYW1lfSldfSksSygidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOnoudGFyZ2V0cy5tYXAoKGspPT57bGV0IF89Sj8uaWQ9PT1rLmlkLFM9ISFrLmluVXNlQnlPdGhlckluc3BlY3RvciYmIV8sRT0oay50aXRsZXx8ay51cmx8fGsuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCkseT1VPT09ay5pZCYmIVMseD0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBLKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOl8sImFyaWEtZGlzYWJsZWQiOlMsdGFiSW5kZXg6Uz8tMTowLHRpdGxlOlM/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZihTKXJldHVybjtpZihDLmN1cnJlbnQmJkMuY3VycmVudCE9PWsuaWQpZzIoQy5jdXJyZW50LCExKTtDLmN1cnJlbnQ9ay5pZCxWKGsuaWQpLGcyKGsuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihDLmN1cnJlbnQ9PT1rLmlkKWcyKGsuaWQsITEpLEMuY3VycmVudD1udWxsO1YoKGYpPT5mPT09ay5pZD9udWxsOmYpfSxvbkNsaWNrOigpPT57aWYoUylyZXR1cm47WihrLmlkKSxCKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke1M/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1Ijp5PyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjpfPyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpFfSksay51cmwmJmsudXJsIT09ImFib3V0OmJsYW5rIiYmSygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjprLnVybH0pXX0say5pZCl9KX0pXX0sei5rZXkpfSl9KV19KX1mdW5jdGlvbiBtNih7b3BlbjokLG9uQ2xvc2U6USx1ZGlkOkosdGFyZ2V0czpaLHNlbGVjdGVkVGFyZ2V0SWQ6WCxvblNlbGVjdFRhcmdldDpZLGxvYWRpbmc6cSxlcnJvcjpHLG9uUmVmcmVzaDpOLHdpZHRoOkJ9KXtsZXQgVT1YP1ouZmluZCgoVik9PlYuaWQ9PT1YKT8/bnVsbDpudWxsO3JldHVybiBLKFEyLHtvcGVuOiQsd2lkdGg6QixjaGlsZHJlbjpbSyhKMix7Y2hpbGRyZW46W1oubGVuZ3RoPjA/SyhmNix7dWRpZDpKLHRhcmdldHM6WixzZWxlY3RlZDpVLG9uU2VsZWN0VGFyZ2V0Olksb25SZWZyZXNoOk59KTpLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46cT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxLKEg1LHtvbkNsaWNrOlEsYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpHP0soImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpHfSk6VSYmJD9LKCJpZnJhbWUiLHtzcmM6VS5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke1UudGl0bGV8fFUudXJsfHxVLmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KFYpPT5SNihWLmN1cnJlbnRUYXJnZXQpfSxVLmlkKTpLKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46VT8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBmUSh7aG9zdFBhdGg6JCxleGVjOlEsdWRpZDpKLG9uVXBsb2FkU3RhcnQ6WixvblVwbG9hZFByb2dyZXNzOlgsb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpxfSl7cT8uKCQpO2xldCBHPSQuc3BsaXQoIi8iKS5wb3AoKT8/ImltYWdlIixOPVooRywibWVkaWEiKTtyZXR1cm4gWChOLG51bGwpLE02KCQsUSxKKS50aGVuKCgpPT5ZKE4sITApKS5jYXRjaCgoQik9PlkoTiwhMSxCIGluc3RhbmNlb2YgRXJyb3I/Qi5tZXNzYWdlOiJBZGQgZmFpbGVkIikpfWZ1bmN0aW9uIHA2KHtleGVjOiQsdWRpZDpRLGVuYWJsZWQ6SixvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25VbnN1cHBvcnRlZDpxLG9uSG9zdFBhdGhEcm9wOkd9KXtsZXRbTixCXT1NKCExKSxVPUkoMCksVj1UKGFzeW5jKHopPT57aWYoei5wcmV2ZW50RGVmYXVsdCgpLHouc3RvcFByb3BhZ2F0aW9uKCksVS5jdXJyZW50PTAsQighMSksIUp8fCFRKXJldHVybjtsZXQgSD16LmRhdGFUcmFuc2Zlci5nZXREYXRhKFQ1KTtpZihIKXtmUSh7aG9zdFBhdGg6SCxleGVjOiQsdWRpZDpRLG9uVXBsb2FkU3RhcnQ6WixvblVwbG9hZFByb2dyZXNzOlgsb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpHfSk7cmV0dXJufWxldCBrPUFycmF5LmZyb20oei5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKGsubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBfIG9mIGspe2xldCBTPV82KF8pO2lmKCFTKXtxKF8pO2NvbnRpbnVlfWxldCBFPVooXy5uYW1lLFMpO0Q2KF8sUywkLFEsKHkpPT5YKEUseSkpLnRoZW4oKCk9PlkoRSwhMCkpLmNhdGNoKCh5KT0+WShFLCExLHkgaW5zdGFuY2VvZiBFcnJvcj95Lm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbSixRLCQsWixYLFkscSxHXSksQz1UKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxKKXouZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbSl0pLEw9VCgoeik9PntpZih6LnByZXZlbnREZWZhdWx0KCksIUopcmV0dXJuO2lmKFUuY3VycmVudCsrLFUuY3VycmVudD09PTEpQighMCl9LFtKXSksRj1UKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxVLmN1cnJlbnQtLSxVLmN1cnJlbnQ8PTApVS5jdXJyZW50PTAsQighMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpOLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6QyxvbkRyYWdFbnRlcjpMLG9uRHJhZ0xlYXZlOkYsb25Ecm9wOlZ9fX1mdW5jdGlvbiB1NigkKXtsZXQgUT1uZXcgVWludDhBcnJheSg2NTUzNiksSj0wLFo9MCxYPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KEMpPT57aWYoSitDLmxlbmd0aD5RLmxlbmd0aCl7aWYoWj4wKVEuY29weVdpdGhpbigwLFosSiksSi09WixaPTA7aWYoSitDLmxlbmd0aD5RLmxlbmd0aCl7bGV0IEw9US5sZW5ndGg7d2hpbGUoTDxKK0MubGVuZ3RoKUwqPTI7bGV0IEY9bmV3IFVpbnQ4QXJyYXkoTCk7Ri5zZXQoUS5zdWJhcnJheSgwLEopKSxRPUZ9fVEuc2V0KEMsSiksSis9Qy5sZW5ndGh9LEc9KEMpPT57bGV0IEw9TWF0aC5taW4oSi00LEMrWCk7Zm9yKGxldCBGPUM7Rjw9TDtGKyspaWYoUVtGXT09PTEzJiZRW0YrMV09PT0xMCYmUVtGKzJdPT09MTMmJlFbRiszXT09PTEwKXJldHVybiBGO3JldHVybi0xfSxOPShDLEwpPT57bGV0IEY9WS5kZWNvZGUoUS5zdWJhcnJheShDLEwpKSx6PS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoRik7cmV0dXJuIHo/TnVtYmVyKHpbMV0pOm51bGx9LEI9MCxVPShDKT0+e2xldCBMPS0xO2ZvcihsZXQgRj1DO0Y8Si0xO0YrKylpZihRW0ZdPT09MjU1JiZRW0YrMV09PT0yMTYpe0w9RjticmVha31pZihMPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBGPU1hdGgubWF4KEwrMixCKTtGPEotMTtGKyspaWYoUVtGXT09PTI1NSYmUVtGKzFdPT09MjE3KXJldHVybiBCPTAse3M6TCxlOkYrMn07cmV0dXJuIEI9TWF0aC5tYXgoTCsyLEotMSksbnVsbH0sVj0oKT0+e3doaWxlKFo8Sil7bGV0IEM9RyhaKTtpZihDPj0wKXtsZXQgRj1OKFosQyk7aWYoRiE9bnVsbCYmRj4wKXtsZXQgej1DKzQsSD16K0Y7aWYoSjxIKWJyZWFrOyQoUS5zdWJhcnJheSh6LEgpKSxaPUg7Y29udGludWV9fWVsc2UgaWYoSi1aPD1YKWJyZWFrO2xldCBMPVUoWik7aWYoIUwpYnJlYWs7JChRLnN1YmFycmF5KEwucyxMLmUpKSxaPUwuZX1pZihaPjApe2lmKFo8SilRLmNvcHlXaXRoaW4oMCxaLEopO0otPVosQj1CPlo/Qi1aOjAsWj0wfX07cmV0dXJue3B1c2goQyl7aWYoQy5sZW5ndGg9PT0wKXJldHVybjtxKEMpLFYoKX19fWZ1bmN0aW9uIGw2KCQpe2xldCBRPUkobmV3IFNldCksSj1UKChaKT0+e3JldHVybiBRLmN1cnJlbnQuYWRkKFopLCgpPT57US5jdXJyZW50LmRlbGV0ZShaKX19LFtdKTtyZXR1cm4gYigoKT0+e2lmKCEkKXJldHVybjtsZXQgWj1uZXcgQWJvcnRDb250cm9sbGVyLFg9ITEsWT1udWxsLHE9bmV3IFVSTCgkKTtxLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgRz1xLnRvU3RyaW5nKCksTj0oKT0+e2lmKFh8fFouc2lnbmFsLmFib3J0ZWR8fFkpcmV0dXJuO1k9c2V0VGltZW91dCgoKT0+e1k9bnVsbCxVKCl9LDEwMDApfSxCPShWKT0+e2lmKFEuY3VycmVudC5zaXplPT09MClyZXR1cm47bGV0IEM9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbVl0se3R5cGU6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgTCBvZiBRLmN1cnJlbnQpTChDKX0sVT1hc3luYygpPT57dHJ5e2xldCBDPShhd2FpdCBmZXRjaChHLHtzaWduYWw6Wi5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUMpe04oKTtyZXR1cm59bGV0IEw9dTYoQik7d2hpbGUoITApe2xldHtkb25lOkYsdmFsdWU6en09YXdhaXQgQy5yZWFkKCk7aWYoRilicmVhaztpZih6JiZ6Lmxlbmd0aClMLnB1c2goeil9fWNhdGNoe31maW5hbGx5e04oKX19O3JldHVybiBVKCksKCk9PntpZihYPSEwLFkpY2xlYXJUaW1lb3V0KFkpO1ouYWJvcnQoKX19LFskXSkse3N1YnNjcmliZUZyYW1lOkosZnJhbWU6bnVsbH19ZnVuY3Rpb24gZDYoKXtsZXRbJF09TSh2MCk7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiB3NSgkLFEsSixaLFg9ImxlZnQiKXtsZXQgWT1UKChDLEwpPT5YPT09ImxlZnQiP0MtTDpMLUMsW1hdKSxxPVQoKEMpPT5NYXRoLm1heChKLE1hdGgubWluKFosQykpLFtKLFpdKSxbRyxOXT1NKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIFE7bGV0IEM9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLEw9QyE9bnVsbD9OdW1iZXIoQyk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoTCk/cShMKTpRfSksQj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihaLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpaLFU9TWF0aC5tYXgoSixNYXRoLm1pbihCLEcpKSxWPVQoKEMpPT57Qy5wcmV2ZW50RGVmYXVsdCgpO2xldCBMPUMuY2xpZW50WCxGPVUsej1DLmN1cnJlbnRUYXJnZXQ7ei5zZXRQb2ludGVyQ2FwdHVyZShDLnBvaW50ZXJJZCk7bGV0IEg9KF8pPT57bGV0IFM9cShGK1koTCxfLmNsaWVudFgpKTtOKFMpfSxrPShfKT0+e3oucmVsZWFzZVBvaW50ZXJDYXB0dXJlKF8ucG9pbnRlcklkKSx6LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSx6LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsayksei5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoRitZKEwsXy5jbGllbnRYKSkpKX1jYXRjaHt9fTt6LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSx6LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsayksei5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrKX0sW3EsWSxVLCRdKTtyZXR1cm57d2lkdGg6VSxvblBvaW50ZXJEb3duOlZ9fXZhciBtUT04MDAwO2Z1bmN0aW9uIHBRKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIHVRKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIGM2KHt0b2FzdDokLG9uUmV2ZWFsOlEsb25EaXNtaXNzOkosb25QYXVzZTpaLG9uUmVzdW1lOlh9KXtsZXRbWSxxXT1NKCExKSxHPUkobnVsbCksTj1JKG51bGwpLEI9KCk9PntpZihOLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE4uY3VycmVudCk7Ti5jdXJyZW50PW51bGx9O2IoKCk9PigpPT5CKCksW10pO2xldCBVPShDKT0+e2lmKCEkLnBhdGgpe0MucHJldmVudERlZmF1bHQoKTtyZXR1cm59QigpLFooKSxOLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e04uY3VycmVudD1udWxsLHEoITEpLFgoKX0sbVEpLEMuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHBRKCQucGF0aCkpLEMuZGF0YVRyYW5zZmVyLnNldERhdGEoVDUsJC5wYXRoKSxDLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgTD1HLmN1cnJlbnQ7aWYoTClDLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoTCxMLm9mZnNldFdpZHRoLzIsTC5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5xKCEwKSl9LFY9KEMpPT57aWYoQigpLHEoITEpLHVRKEMuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKUooKTtlbHNlIFgoKX07cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlosb25Nb3VzZUxlYXZlOlgsY2hpbGRyZW46WyQudGh1bWImJksoImltZyIse3JlZjpHLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP0soImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6USxkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIixvbkRyYWdTdGFydDpVLG9uRHJhZ0VuZDpWLCJhcmlhLWxhYmVsIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtZPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/SygiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6Sygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJksoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOiJPcGVuIGluIEZpbmRlciJ9KV19KSwkLnN0YXR1cz09PSJzYXZlZCImJksoQTIse2NsYXNzTmFtZToibWwtYXV0byB0ZXh0LXdoaXRlLzgwIHBvaW50ZXItZXZlbnRzLW5vbmUiLHNpemU6MTYsc3Ryb2tlV2lkdGg6Mi4yNX0pXX0pXX0pfXZhciByNj0zNTAwLG82PTQwMDA7ZnVuY3Rpb24gbFEoKXtyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6Ll0vZywiLSIpLnNsaWNlKDAsMjMpfWZ1bmN0aW9uIGk2KCQpe2xldCBRPUkobnVsbCksSj1JKG51bGwpLFo9SShudWxsKSxYPUkobnVsbCksWT1JKG51bGwpLHE9VCgoKT0+e2lmKFouY3VycmVudCljbGVhclRpbWVvdXQoWi5jdXJyZW50KTtaLmN1cnJlbnQ9bnVsbCxYLmN1cnJlbnQ9bnVsbH0sW10pLEc9VCgoRik9PntsZXQgej1GPz9KLmN1cnJlbnQ/P3ZvaWQgMDtpZihxKCksWS5jdXJyZW50PW51bGwseDIuZGlzbWlzcyh6KSx6PT09dm9pZCAwfHxKLmN1cnJlbnQ9PT1TdHJpbmcoeikpUS5jdXJyZW50PW51bGwsSi5jdXJyZW50PW51bGx9LFtxXSksTj1UKCgpPT57bGV0IEY9US5jdXJyZW50O2lmKEY/LnBhdGgpVzEoYG9wZW4gLVIgJHtGMShGLnBhdGgpfWApfSxbXSksQj1UKChGKT0+e3EoKTtsZXQgej1NYXRoLm1heCgwLEYpLEg9Si5jdXJyZW50O1kuY3VycmVudD16LFguY3VycmVudD1EYXRlLm5vdygpK3osWi5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkcoSD8/dm9pZCAwKSx6KX0sW3EsR10pLFU9VCgoKT0+e2lmKCFaLmN1cnJlbnR8fFguY3VycmVudD09bnVsbClyZXR1cm47WS5jdXJyZW50PU1hdGgubWF4KDAsWC5jdXJyZW50LURhdGUubm93KCkpLHEoKX0sW3FdKSxWPVQoKCk9PntsZXQgRj1ZLmN1cnJlbnQ7aWYoRj09bnVsbClyZXR1cm47QihGKX0sW0JdKSxDPVQoKEYsej0xLzApPT57aWYoUS5jdXJyZW50PUYsSi5jdXJyZW50PUYuaWQseDIuY3VzdG9tKChIKT0+SyhjNix7dG9hc3Q6RixvblJldmVhbDpOLG9uRGlzbWlzczooKT0+RyhIKSxvblBhdXNlOlUsb25SZXN1bWU6Vn0pLHtpZDpGLmlkLGR1cmF0aW9uOjEvMH0pLE51bWJlci5pc0Zpbml0ZSh6KSlCKHopO2Vsc2UgcSgpLFkuY3VycmVudD1udWxsfSxbcSxHLFUsVixOLEJdKTtyZXR1cm57Y2FwdHVyZTpUKGFzeW5jKCk9PntpZighJClyZXR1cm47bGV0IEY9Y3J5cHRvLnJhbmRvbVVVSUQoKTtDKHtpZDpGLHN0YXR1czoic2F2aW5nIixwaGFzZToiaW4ifSk7bGV0IEg9YEY9IiR7YCRIT01FL0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJHtsUSgpfS5wbmdgfSI7IHhjcnVuIHNpbWN0bCBpbyAke0YxKCQpfSBzY3JlZW5zaG90ICIkRiIgJiYgcHJpbnRmICclcycgIiRGImAsazt0cnl7bGV0IFM9YXdhaXQgVzEoSCk7aWYoaz1TLnN0ZG91dC50cmltKCksUy5leGl0Q29kZSE9PTB8fCFrKXtDKHtpZDpGLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTpTLnN0ZGVyci50cmltKCl8fCJTY3JlZW5zaG90IGZhaWxlZCJ9LG82KTtyZXR1cm59fWNhdGNoKFMpe0Moe2lkOkYsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOlMgaW5zdGFuY2VvZiBFcnJvcj9TLm1lc3NhZ2U6IlNjcmVlbnNob3QgZmFpbGVkIn0sbzYpO3JldHVybn1DKHtpZDpGLHN0YXR1czoic2F2ZWQiLHBoYXNlOiJpbiIscGF0aDprfSxyNik7bGV0IF89YC90bXAvc2VydmUtc2ltLXNjcmVlbnNob3QtdGh1bWItJHtGfS5wbmdgO3RyeXtsZXQgRT0oYXdhaXQgVzEoYHNpcHMgLVogMzIwICR7RjEoayl9IC0tb3V0ICR7RjEoXyl9ID4vZGV2L251bGwgMj4mMSAmJiBiYXNlNjQgLWkgJHtGMShfKX07IHJtIC1mICR7RjEoXyl9YCkpLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIik7aWYoRSl7bGV0IHk9US5jdXJyZW50O2lmKHk/LmlkPT09RilDKHsuLi55LHRodW1iOmBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtFfWB9LHI2KX19Y2F0Y2h7fX0sWyQsQ10pLHJldmVhbDpOLGRpc21pc3M6R319ZnVuY3Rpb24gYTYoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6USx2aWV3cG9ydEhlaWdodDpKLGFzcGVjdFJhdGlvOlosaW5pdGlhbEZpdDpYPSExLG9uU3RhcnQ6WX0pe2xldCBxPWs1KCksW0csTl09TSghMSksW0IsVV09TSghMSksW1YsQ109TSghMSksTD1JKG51bGwpLEY9SShbXSksej1JKG51bGwpLEg9SShudWxsKSxrPUkobnVsbCksXz1JKG51bGwpLFM9SShYKSxFPUkoITEpO2IoKCk9PntFLmN1cnJlbnQ9ITB9LFtdKTtsZXQgeT1UKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7aWYoUy5jdXJyZW50JiYhRS5jdXJyZW50KXJldHVybiBNNSgkLFEsSixaKTtsZXQgRD1OYU47dHJ5e2xldCByPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrMyk7RD1yIT1udWxsP051bWJlcihyKTpOYU59Y2F0Y2h7fXJldHVybiByOSgkLFEsSixaLEQpfSxbWiwkLEosUV0pLHg9XzEoKCk9PnkoKSxbeV0pLFtZMSxmXT1NKHgpLHU9SSh4KSxjPUkoJCksUTE9TTUoJCxRLEosWiksVTE9TWF0aC5taW4oRTksUTEpLEsxPVkxPz8kLEExPWgwKEsxLCQsUSxKLFopLG09VCgoRCk9PntsZXQgcj1fNShEKTt1LmN1cnJlbnQ9cixmKHIpfSxbXSksZz1UKChEKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgcj1oMChELCQsUSxKLFopO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oazMsU3RyaW5nKHIvJCkpfWNhdGNoe319LFtaLCQsSixRXSkscz1UKChEKT0+e2lmKGsuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoay5jdXJyZW50KTtrLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2suY3VycmVudD1udWxsLGcoRCl9LGM5KX0sW2ddKTtiKCgpPT57aWYoR3x8QilyZXR1cm47bGV0IEQ9dS5jdXJyZW50O2lmKEQ9PW51bGwpcmV0dXJuO2xldCByPWgwKEQsJCxRLEosWik7aWYociE9PUQpbShyKX0sW1osJCxCLEcsSixRLG1dKSxiKCgpPT57aWYoYy5jdXJyZW50PT09JClyZXR1cm47Yy5jdXJyZW50PSQsbSh5KCkpfSxbJCx5LG1dKSxiKCgpPT57aWYoIUcmJiFCKXJldHVybjtsZXQgRD1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcixyPWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxlPWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Im53c2UtcmVzaXplIixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Im5vbmUiLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsKCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj1ELGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD1yLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD1lfX0sW0csQl0pLGIoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IEQ9KCk9PntsZXQgZT11LmN1cnJlbnQ7aWYoZT09bnVsbClyZXR1cm47aWYoay5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChrLmN1cnJlbnQpLGsuY3VycmVudD1udWxsO2coZSl9LHI9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilEKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHIpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixEKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixyKX19LFtnXSk7bGV0IHExPVQoKEQpPT57aWYoRD5RMSlyZXR1cm4gUTErQTMoRC1RMSxRMSk7aWYoRDxVMSlyZXR1cm4gVTEtQTMoVTEtRCxRMSk7cmV0dXJuIER9LFtRMSxVMV0pLFYxPVQoKCk9PntpZihILmN1cnJlbnQpSC5jdXJyZW50KCksSC5jdXJyZW50PW51bGw7VSghMSl9LFtdKSxOMT1UKChEKT0+e2xldCByPXBlcmZvcm1hbmNlLm5vdygpLGU9Ri5jdXJyZW50O2UucHVzaCh7dDpyLHg6RH0pO3doaWxlKGUubGVuZ3RoPjEmJnItZVswXS50PmQ5KWUuc2hpZnQoKX0sW10pLHoxPVQoKEQpPT57bGV0IHI9cTEoRCk7aWYoei5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKHouY3VycmVudCk7ei5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3ouY3VycmVudD1udWxsLG0ociksTjEocil9KX0sW3ExLE4xLG1dKSxMMT1UKChELHIsZSk9PntWMSgpO2xldCBkPXUuY3VycmVudD8/JDtMLmN1cnJlbnQ9e3BvaW50ZXJJZDpELHN0YXJ0WDpyLHN0YXJ0WTplLHN0YXJ0V2lkdGg6ZH0sRi5jdXJyZW50PVt7dDpwZXJmb3JtYW5jZS5ub3coKSx4OmR9XSxZKCksTighMCl9LFtWMSwkLFldKSx2PVQoKCk9PntsZXQgRD1MLmN1cnJlbnQ7aWYoTC5jdXJyZW50PW51bGwsei5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKHouY3VycmVudCksei5jdXJyZW50PW51bGw7aWYoRCYmRC5wb2ludGVySWQ+PTApe2xldCBYMT1fLmN1cnJlbnQ7aWYoWDE/Lmhhc1BvaW50ZXJDYXB0dXJlKEQucG9pbnRlcklkKSlYMS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoRC5wb2ludGVySWQpfU4oITEpO2xldCByPXUuY3VycmVudD8/JCxlPW45KEYuY3VycmVudCk7Ri5jdXJyZW50PVtdO2xldCBkPWgwKHIrZSpsOSwkLFEsSixaKSxSPV81KG85KGQsWyRdLG05KSksTzE9TWF0aC5hYnMoci1SKTwwLjUmJk1hdGguYWJzKGUpPDg7aWYocXx8TzEpe20oUikscyhSKTtyZXR1cm59VSghMCksSC5jdXJyZW50PWk5KHtmcm9tOnIsdG86Uix2ZWxvY2l0eTplLHN0aWZmbmVzczpwOSxkYW1waW5nOnU5LG9uVXBkYXRlOm0sb25Db21wbGV0ZTooKT0+e0guY3VycmVudD1udWxsLFUoITEpLHMoUil9fSl9LFtaLCQscSxzLEosUSxtXSk7YigoKT0+e3JldHVybigpPT57aWYoVjEoKSx6LmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoei5jdXJyZW50KTtpZihrLmN1cnJlbnQhPW51bGwpe2lmKGNsZWFyVGltZW91dChrLmN1cnJlbnQpLHUuY3VycmVudCE9bnVsbClnKHUuY3VycmVudCl9fX0sW1YxLGddKSxiKCgpPT57aWYoIUcpcmV0dXJuO2xldCBEPSgpPT52KCkscj0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKXYoKX0sZT0oZCk9PntsZXQgUj1MLmN1cnJlbnQ7aWYoIVJ8fFIucG9pbnRlcklkIT09ZC5wb2ludGVySWQpcmV0dXJuO2QucHJldmVudERlZmF1bHQoKSx6MShuNihSLGQuY2xpZW50WCxkLmNsaWVudFksWikpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLEQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsZSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRCwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEQsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHIpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLEQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsZSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRCwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEQsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHIpfX0sW1osdixHLHoxXSk7bGV0IGE9VCgoRCk9PntsZXQgcj1MLmN1cnJlbnQ7aWYoIXJ8fHIucG9pbnRlcklkIT09RC5wb2ludGVySWQpcmV0dXJuO0QucHJldmVudERlZmF1bHQoKSxELnN0b3BQcm9wYWdhdGlvbigpLHYoKX0sW3ZdKSxsPVQoKEQpPT57aWYoRC5idXR0b24hPT0wKXJldHVybjtELnByZXZlbnREZWZhdWx0KCksRC5zdG9wUHJvcGFnYXRpb24oKSxELmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoRC5wb2ludGVySWQpLEwxKEQucG9pbnRlcklkLEQuY2xpZW50WCxELmNsaWVudFkpfSxbTDFdKSxaMT1UKChEKT0+e2xldCByPUwuY3VycmVudDtpZighcnx8ci5wb2ludGVySWQhPT1ELnBvaW50ZXJJZClyZXR1cm47RC5wcmV2ZW50RGVmYXVsdCgpLHoxKG42KHIsRC5jbGllbnRYLEQuY2xpZW50WSxaKSl9LFtaLHoxXSksUDE9VCgoRCk9PntsZXQgcj1ELmtleT09PSJBcnJvd1JpZ2h0Inx8RC5rZXk9PT0iQXJyb3dEb3duIj8xOkQua2V5PT09IkFycm93TGVmdCJ8fEQua2V5PT09IkFycm93VXAiPy0xOjA7aWYocj09PTApcmV0dXJuO0QucHJldmVudERlZmF1bHQoKSxWMSgpO2xldCBlPUQuc2hpZnRLZXk/ODA6MjQsZD1fNShoMChBMStyKmUsJCxRLEosWikpO20oZCkscyhkKX0sW1osVjEsQTEsJCxzLEosUSxtXSk7cmV0dXJue2hhbmRsZVJlZjpfLHdpZHRoOksxLGNvbW1pdHRlZFdpZHRoOkExLG1pbldpZHRoOlUxLG1heFdpZHRoOlExLGlzUmVzaXppbmc6Ryxpc0luZXJ0aWE6QixoYW5kbGVIb3ZlcmVkOlYsaGFuZGxlQWN0aXZlOlZ8fEd8fEIsc2V0SGFuZGxlSG92ZXJlZDpDLG9uUG9pbnRlckRvd246bCxvblBvaW50ZXJNb3ZlOloxLG9uUG9pbnRlckVuZDphLG9uS2V5RG93bjpQMX19ZnVuY3Rpb24gbjYoJCxRLEosWil7bGV0IFg9US0kLnN0YXJ0WCxZPShKLSQuc3RhcnRZKSpaO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFgpPj1NYXRoLmFicyhZKT9YOlkpfWZ1bmN0aW9uIHM2KCl7bGV0ICQ9SShuZXcgTWFwKSxRPUkobmV3IE1hcCksSj1UKChHKT0+e2xldCBOPVEuY3VycmVudC5nZXQoRyk7aWYoTiljbGVhclRpbWVvdXQoTik7US5jdXJyZW50LmRlbGV0ZShHKX0sW10pLFo9VCgoRyxOPTEvMCk9Pnt4Mi5jdXN0b20oKCk9PksoSzYse3RvYXN0Okd9KSx7aWQ6Ry5pZCxkdXJhdGlvbjpOfSl9LFtdKSxYPVQoKEcsTik9PntsZXQgQj1jcnlwdG8ucmFuZG9tVVVJRCgpLFU9e2lkOkIsbmFtZTpHLGtpbmQ6TixzdGF0dXM6InVwbG9hZGluZyIscHJvZ3Jlc3M6MH07cmV0dXJuICQuY3VycmVudC5zZXQoQixVKSxaKFUpLEJ9LFtaXSksWT1UKChHLE4pPT57bGV0IEI9JC5jdXJyZW50LmdldChHKTtpZighQilyZXR1cm47SihHKTtsZXQgVT17Li4uQiwuLi5OfTtpZigkLmN1cnJlbnQuc2V0KEcsVSksWihVLE4uc3RhdHVzPT09InN1Y2Nlc3MifHxOLnN0YXR1cz09PSJlcnJvciI/MzAwMDoxLzApLE4uc3RhdHVzPT09InN1Y2Nlc3MifHxOLnN0YXR1cz09PSJlcnJvciIpe2xldCBWPXNldFRpbWVvdXQoKCk9PnskLmN1cnJlbnQuZGVsZXRlKEcpLFEuY3VycmVudC5kZWxldGUoRyl9LDMwMDApO1EuY3VycmVudC5zZXQoRyxWKX19LFtKLFpdKSxxPVQoKEcsTik9PntsZXQgQj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFCKXJldHVybjtsZXQgVT17Li4uQixwcm9ncmVzczpOfTskLmN1cnJlbnQuc2V0KEcsVSksWihVKX0sW1pdKTtyZXR1cm57YWRkOlgsdXBkYXRlOlksc2V0UHJvZ3Jlc3M6cX19ZnVuY3Rpb24gdDYoJCxRKXtsZXRbSixaXT1NKFtdKSxbWCxZXT1NKG51bGwpLFtxLEddPU0oITEpLE49VChhc3luYygpPT57aWYoISQpcmV0dXJuO0coITApLFkobnVsbCk7dHJ5e2xldCBCPWF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSxVPWF3YWl0IEIuanNvbigpO2lmKCFCLm9rfHxVLmVycm9yKXRocm93IEVycm9yKFUuZXJyb3J8fCJGYWlsZWQgdG8gbGlzdCBXZWJLaXQgdGFyZ2V0cyIpO2xldCBWPXR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LmxvY2F0aW9uLEM9VS50YXJnZXRzPz9bXTtaKFY/Qy5tYXAoKEwpPT5qNihMLFYpKTpDKX1jYXRjaChCKXtZKEIgaW5zdGFuY2VvZiBFcnJvcj9CLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e0coITEpfX0sWyRdKTtyZXR1cm4gYigoKT0+e2lmKCFRKXJldHVybjtOKCk7bGV0IEI9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgTigpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKEIpfSxbUSxOXSkse3RhcmdldHM6SixlcnJvcjpYLGxvYWRpbmc6cSxyZWZyZXNoOk59fXZhciBkUT02MCxjUT0xMDAwO2Z1bmN0aW9uIGU2KCQsUSxKLFo9ZFEpe2xldFtYLFldPU0obnVsbCksW3EsR109TSgwKSxbTixCXT1NKFopLFtVLFZdPU0oMCk7YigoKT0+e2lmKCFRfHwhJClyZXR1cm47bGV0IGs9ITEsXz0kLmluY2x1ZGVzKCI/Iik/IiYiOiI/IixTPWFzeW5jKCk9Pnt0cnl7bGV0IHg9YXdhaXQoYXdhaXQgZmV0Y2goYCR7JH0ke199bGltaXQ9JHtOfSZvZmZzZXQ9MGAse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKGspcmV0dXJuO2lmKFkoeC5kZXZpY2VzPz9bXSksdHlwZW9mIHgudG90YWw9PT0ibnVtYmVyIilHKHgudG90YWwpfWNhdGNoe2lmKCFrKVkoW10pfX07UygpO2xldCBFPXNldEludGVydmFsKFMsSj83NTA6MzAwMCk7cmV0dXJuKCk9PntrPSEwLGNsZWFySW50ZXJ2YWwoRSl9fSxbJCxRLFUsSixOXSk7bGV0IEM9VCgoKT0+Vigoayk9PmsrMSksW10pLEw9VCgoKT0+Qigoayk9PmsrWiksW1pdKSxGPVQoKCk9PkIoY1EpLFtdKSx6PVQoKCk9PkIoWiksW1pdKSxIPXE+KFg/Lmxlbmd0aD8/MCk7cmV0dXJue2RldmljZXM6WCx0b3RhbDpxLHJlZnJlc2g6Qyxsb2FkTW9yZTpMLGxvYWRBbGw6RixyZXNldFBhZ2U6eixoYXNNb3JlOkh9fXZhciBTMz17c3RyZWFtZWQ6ITEsZmVsbEJhY2s6ITF9O2Z1bmN0aW9uICQ0KCQsUSl7c3dpdGNoKFEpe2Nhc2UiZnJhbWUiOnJldHVybiAkLnN0cmVhbWVkPyQ6ey4uLiQsc3RyZWFtZWQ6ITB9O2Nhc2UidGltZW91dCI6cmV0dXJuICQuc3RyZWFtZWR8fCQuZmVsbEJhY2s/JDp7Li4uJCxmZWxsQmFjazohMH07Y2FzZSJlcnJvciI6cmV0dXJuICQuZmVsbEJhY2s/JDp7Li4uJCxmZWxsQmFjazohMH07Y2FzZSJyZXNldCI6cmV0dXJuIFMzfX12YXIgUTQ9NDAwMDt2YXIgclE9e0tleUE6NCxLZXlCOjUsS2V5Qzo2LEtleUQ6NyxLZXlFOjgsS2V5Rjo5LEtleUc6MTAsS2V5SDoxMSxLZXlJOjEyLEtleUo6MTMsS2V5SzoxNCxLZXlMOjE1LEtleU06MTYsS2V5TjoxNyxLZXlPOjE4LEtleVA6MTksS2V5UToyMCxLZXlSOjIxLEtleVM6MjIsS2V5VDoyMyxLZXlVOjI0LEtleVY6MjUsS2V5VzoyNixLZXlYOjI3LEtleVk6MjgsS2V5WjoyOSxEaWdpdDE6MzAsRGlnaXQyOjMxLERpZ2l0MzozMixEaWdpdDQ6MzMsRGlnaXQ1OjM0LERpZ2l0NjozNSxEaWdpdDc6MzYsRGlnaXQ4OjM3LERpZ2l0OTozOCxEaWdpdDA6MzksRW50ZXI6NDAsRXNjYXBlOjQxLEJhY2tzcGFjZTo0MixUYWI6NDMsU3BhY2U6NDQsTWludXM6NDUsRXF1YWw6NDYsQnJhY2tldExlZnQ6NDcsQnJhY2tldFJpZ2h0OjQ4LEJhY2tzbGFzaDo0OSxTZW1pY29sb246NTEsUXVvdGU6NTIsQmFja3F1b3RlOjUzLENvbW1hOjU0LFBlcmlvZDo1NSxTbGFzaDo1NixDYXBzTG9jazo1NyxGMTo1OCxGMjo1OSxGMzo2MCxGNDo2MSxGNTo2MixGNjo2MyxGNzo2NCxGODo2NSxGOTo2NixGMTA6NjcsRjExOjY4LEYxMjo2OSxQcmludFNjcmVlbjo3MCxTY3JvbGxMb2NrOjcxLFBhdXNlOjcyLEluc2VydDo3MyxIb21lOjc0LFBhZ2VVcDo3NSxEZWxldGU6NzYsRW5kOjc3LFBhZ2VEb3duOjc4LEFycm93UmlnaHQ6NzksQXJyb3dMZWZ0OjgwLEFycm93RG93bjo4MSxBcnJvd1VwOjgyLE51bUxvY2s6ODMsTnVtcGFkRGl2aWRlOjg0LE51bXBhZE11bHRpcGx5Ojg1LE51bXBhZFN1YnRyYWN0Ojg2LE51bXBhZEFkZDo4NyxOdW1wYWRFbnRlcjo4OCxOdW1wYWQxOjg5LE51bXBhZDI6OTAsTnVtcGFkMzo5MSxOdW1wYWQ0OjkyLE51bXBhZDU6OTMsTnVtcGFkNjo5NCxOdW1wYWQ3Ojk1LE51bXBhZDg6OTYsTnVtcGFkOTo5NyxOdW1wYWQwOjk4LE51bXBhZERlY2ltYWw6OTksQ29udHJvbExlZnQ6MjI0LFNoaWZ0TGVmdDoyMjUsQWx0TGVmdDoyMjYsTWV0YUxlZnQ6MjI3LENvbnRyb2xSaWdodDoyMjgsU2hpZnRSaWdodDoyMjksQWx0UmlnaHQ6MjMwLE1ldGFSaWdodDoyMzF9O2Z1bmN0aW9uIEo0KCQpe3JldHVybiByUVskXT8/bnVsbH12YXIgeDM9MzIwLEs0PTc2MCx2Mz0zMDA7ZnVuY3Rpb24gajMoJCxRKXtpZighJClyZXR1cm4gbnVsbDtpZighJC5kZXZpY2UpcmV0dXJuICQ7aWYoISQucHJveHlIZWxwZXJzKXJldHVybiAkO2xldCBaPWAkeyQuYmFzZVBhdGg9PT0iLyI/IiI6KCQuYmFzZVBhdGg/PyIiKS5yZXBsYWNlKC9cLyskLywiIil9L2hlbHBlci8ke2VuY29kZVVSSUNvbXBvbmVudCgkLmRldmljZSl9YCxYPWAke1EucHJvdG9jb2x9Ly8ke1EuaG9zdH1gLFk9US5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IjtyZXR1cm57Li4uJCx1cmw6YCR7WH0ke1p9YCxzdHJlYW1Vcmw6YCR7WH0ke1p9L3N0cmVhbS5tanBlZ2Asd3NVcmw6YCR7WX0vLyR7US5ob3N0fSR7Wn0vd3NgfX1mdW5jdGlvbiBSMygkKXtpZigkPy5pbmNsdWRlcygiZGV2dG9vbHMiKSlyZXR1cm4iZGV2dG9vbHMiO2lmKCQ/LmluY2x1ZGVzKCJ0b29scyIpKXJldHVybiJ0b29scyI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gWjQoJCxRKXtsZXQgSj1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoUSkpLFo9bmV3IFVpbnQ4QXJyYXkoMStKLmxlbmd0aCk7cmV0dXJuIFpbMF09JCxaLnNldChKLDEpLFp9ZnVuY3Rpb24gb1EoJCxRLEo9MzIpe2xldCBaPVsuLi4kLFFdO3JldHVybiBaLmxlbmd0aD5KP1ouc2xpY2UoWi5sZW5ndGgtSik6Wn1mdW5jdGlvbiBnMygkLFEsSj1EYXRlLm5vdygpLFo9MTUwMCl7bGV0IFg9US5maWx0ZXIoKFkpPT5KLVkuY3JlYXRlZEF0PD1aKTtpZighJHx8JC5yZWFkeVN0YXRlIT09MSlyZXR1cm4gWDtmb3IobGV0IFkgb2YgWCkkLnNlbmQoWjQoWS50YWcsWS5wYXlsb2FkKS5idWZmZXIpO3JldHVybltdfWZ1bmN0aW9uIFg0KCQsUSxKLFosWD1EYXRlLm5vdygpKXtsZXQgWT1nMygkLFEsWCk7aWYoJD8ucmVhZHlTdGF0ZT09PTEpcmV0dXJuICQuc2VuZChaNChKLFopLmJ1ZmZlciksWTtyZXR1cm4gb1EoWSx7dGFnOkoscGF5bG9hZDpaLGNyZWF0ZWRBdDpYfSl9ZnVuY3Rpb24gWTQoJCl7cmV0dXJuICQ/YCR7JC5kZXZpY2V9OiR7JC5waWR9OiR7JC5zdHJlYW1Vcmx9OiR7JC53c1VybH1gOiIifWZ1bmN0aW9uIGlRKCl7bGV0ICQ9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uaW5pdGlhbFN0YXRlLFE9UjMoJD8ucGFuZXMpLFtKLFpdPU0oKCk9PmozKGIyKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pLHdpbmRvdy5sb2NhdGlvbikpLFtYLFldPU0oITEpLFtxLEddPU0oKCk9PntsZXQgZD1iMih3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZihkKXJldHVybiBkLmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW04sQl09TSghMSksW1UsVl09TShRPT09ImRldnRvb2xzIiksW0MsTF09TSgoKT0+e2lmKCQ/LnBhbmVzKXJldHVybiAkLnBhbmVzLmluY2x1ZGVzKCJkZXZpY2VzIik7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoPj12Mys1MjB9KSx7d2lkdGg6RixvblBvaW50ZXJEb3duOnp9PXc1KCJzZXJ2ZS1zaW06ZGV2aWNlLXNpZGViYXItd2lkdGgiLHYzLDI0MCw2NDAsInJpZ2h0IiksW0gsa109TShudWxsKSxfPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18sUz1fPy5ncmlkQXBpRW5kcG9pbnQ/P2YxKCJncmlkL2FwaSIpLEU9Xz8uZ3JpZFN0YXJ0RW5kcG9pbnQ/P2YxKCJncmlkL2FwaS9zdGFydCIpLHk9Xz8uZ3JpZFNodXRkb3duRW5kcG9pbnQ/P2YxKCJncmlkL2FwaS9zaHV0ZG93biIpLFt4LFkxXT1NKHt9KSxbZix1XT1NKHt9KSxbYyxRMV09TSh7fSksW1UxLEsxXT1NKCgpPT5uZXcgU2V0KSxBMT1PYmplY3QudmFsdWVzKHgpLnNvbWUoQm9vbGVhbil8fE9iamVjdC52YWx1ZXMoZikuc29tZShCb29sZWFuKSx7ZGV2aWNlczptLHRvdGFsOmcscmVmcmVzaDpzLGxvYWRNb3JlOnExLGxvYWRBbGw6VjEscmVzZXRQYWdlOk4xLGhhc01vcmU6ejF9PWU2KFMsITAsQTEpLEwxPSEhKHEmJm0/LmZpbmQoKGQpPT5kLmRldmljZT09PXEpPy5oZWxwZXIpLHY9VCgoZCk9PntHKGQpO3RyeXtsZXQgUj1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtSLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsZCksd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsUi50b1N0cmluZygpKX1jYXRjaHt9fSxbXSksYT1UKGFzeW5jKGQsUj0yMDAwMCk9PntsZXQgTzE9RGF0ZS5ub3coKStSO3doaWxlKERhdGUubm93KCk8TzEpe3RyeXtpZigoKGF3YWl0KGF3YWl0IGZldGNoKFMse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpKS5kZXZpY2VzPz9bXSkuc29tZSgoczEpPT5zMS5kZXZpY2U9PT1kJiZzMS5oZWxwZXIpKXJldHVybiEwfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoWDEpPT5zZXRUaW1lb3V0KFgxLDQwMCkpfXJldHVybiExfSxbU10pLGw9VChhc3luYyhkKT0+e1kxKChSKT0+KHsuLi5SLFtkXTohMH0pKSxRMSgoUik9Pih7Li4uUixbZF06bnVsbH0pKTt0cnl7bGV0IFI9YXdhaXQgZmV0Y2goRSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6ZH0pfSksTzE9YXdhaXQgUi5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFSLm9rfHwhTzEub2spe1ExKChYMSk9Pih7Li4uWDEsW2RdOk8xLmVycm9yPz9gSFRUUCAke1Iuc3RhdHVzfWB9KSk7cmV0dXJufUsxKChYMSk9PlgxLmhhcyhkKT9YMTpuZXcgU2V0KFgxKS5hZGQoZCkpLGF3YWl0IGEoZCl9Y2F0Y2goUil7UTEoKE8xKT0+KHsuLi5PMSxbZF06Uj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e1kxKChSKT0+KHsuLi5SLFtkXTohMX0pKSxzKCl9fSxbRSxhLHNdKSxaMT1UKGFzeW5jKGQpPT57dSgoUik9Pih7Li4uUixbZF06ITB9KSksUTEoKFIpPT4oey4uLlIsW2RdOm51bGx9KSk7dHJ5e2xldCBSPWF3YWl0IGZldGNoKHkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOmR9KX0pLE8xPWF3YWl0IFIuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighUi5va3x8IU8xLm9rKVExKChYMSk9Pih7Li4uWDEsW2RdOk8xLmVycm9yPz9gSFRUUCAke1Iuc3RhdHVzfWB9KSl9Y2F0Y2goUil7UTEoKE8xKT0+KHsuLi5PMSxbZF06Uj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e3UoKFIpPT4oey4uLlIsW2RdOiExfSkpLHMoKX19LFt5LHNdKTtiKCgpPT57aWYocSlyZXR1cm47aWYoSj8uZGV2aWNlKXtHKEouZGV2aWNlKTtyZXR1cm59aWYoIW18fG0ubGVuZ3RoPT09MClyZXR1cm47bGV0IGQ9bS5maW5kKChSKT0+Ui5oZWxwZXIpPz9tLmZpbmQoKFIpPT5SLnN0YXRlPT09IkJvb3RlZCIpPz9tWzBdO2lmKGQpRyhkLmRldmljZSl9LFtxLEo/LmRldmljZSxtXSksYigoKT0+e2xldCBkPWAke2YxKCJhcGkvZXZlbnRzIil9JHtxP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHEpfWA6IiJ9YCxSPShYMSk9PntaKChtMSk9PntpZihYMT1qMyhiMihYMSksd2luZG93LmxvY2F0aW9uKSxZNChtMSk9PT1ZNChYMSkpcmV0dXJuIG0xO2lmKFgxKXdpbmRvdy5fX1NJTV9QUkVWSUVXX189WDE7ZWxzZSBpZih3aW5kb3cuX19TSU1fUFJFVklFV19fKXtsZXR7YmFzZVBhdGg6czEsZXhlY1Rva2VuOm4xfT13aW5kb3cuX19TSU1fUFJFVklFV19fO3dpbmRvdy5fX1NJTV9QUkVWSUVXX189e2Jhc2VQYXRoOnMxLGV4ZWNUb2tlbjpuMX19cmV0dXJuIFgxfSl9LE8xPWcwKGQpO3JldHVybiBPMS5vbm1lc3NhZ2U9KFgxKT0+e3RyeXtSKGIyKEpTT04ucGFyc2UoWDEuZGF0YSkpKX1jYXRjaHt9fSwoKT0+TzEuY2xvc2UoKX0sW3EsTDFdKTtsZXQgUDE9cT8/Sj8uZGV2aWNlPz9udWxsLEQ9bT8uZmluZCgoZCk9PmQuZGV2aWNlPT09UDEpPz9udWxsLHI9ISFKJiZKLmRldmljZT09PVAxLGU7aWYociYmSillPUsoblEse2NvbmZpZzpKLGRldmljZU5hbWU6RD8ubmFtZT8/bnVsbCxkZXZpY2VSdW50aW1lOkQ/LnJ1bnRpbWU/P251bGwsY2hyb21lOkQ/LmNocm9tZT8/bnVsbCxwcmVmZXJNanBlZzpVMS5oYXMoSi5kZXZpY2UpLGF4T3ZlcmxheUVuYWJsZWQ6TixzZXRBeE92ZXJsYXlFbmFibGVkOkIsZGV2dG9vbHNPcGVuOlUsc2V0RGV2dG9vbHNPcGVuOlYsZ3JpZE9wZW46QyxzZXRHcmlkT3BlbjpMLGdyaWRQYW5lbFdpZHRoOkYsc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkgsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOmssc3RyZWFtaW5nOlgsc2V0U3RyZWFtaW5nOll9KTtlbHNle2xldCBkPUM/RiszNjoyNDtlPUsoImRpdiIse2NsYXNzTmFtZToiaC1zY3JlZW4gZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTMgYmctcGFnZSBmb250LXN5c3RlbSBib3gtYm9yZGVyIFt0cmFuc2l0aW9uOnBhZGRpbmdfMC4yNXNfZWFzZV0iLHN0eWxlOntwYWRkaW5nTGVmdDpkLHBhZGRpbmdSaWdodDoyNH0sY2hpbGRyZW46RD9LKE85LHtuYW1lOkQubmFtZSxydW50aW1lOkQucnVudGltZSxjaHJvbWU6RC5jaHJvbWU/P251bGwscGxhY2Vob2xkZXJBc3NldDpELnBsYWNlaG9sZGVyQXNzZXQ/P251bGwsYnVzeTohIUQuaGVscGVyfHwhIXhbRC5kZXZpY2VdLGJ1c3lMYWJlbDpELmhlbHBlcj8iQ29ubmVjdGluZ+KApiI6IlN0YXJ0aW5n4oCmIixlcnJvcjpjW0QuZGV2aWNlXT8/bnVsbCxvblN0YXJ0OigpPT5sKEQuZGV2aWNlKX0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltLKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxLKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsSygiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBLKCQxLHtjaGlsZHJlbjpbZSxLKEo2LHt9KSxLKFQ5LHtvcGVuOkMsb25DbG9zZTooKT0+TCghMSksd2lkdGg6RixzaWRlOiJsZWZ0IixkZXZpY2VzOm0sdG90YWw6ZyxoYXNNb3JlOnoxLG9uTG9hZE1vcmU6cTEsb25Mb2FkQWxsOlYxLG9uUmVzZXRQYWdlOk4xLHNlbGVjdGVkVWRpZDpQMSxvblNlbGVjdDp2LHN0YXJ0aW5nOngsc2h1dHRpbmdEb3duOmYsb25TaHV0ZG93bjpaMX0pLEsoRjUse3BhbmVsV2lkdGg6Rix2aXNpYmxlOkMsb25Qb2ludGVyRG93bjp6LGFyaWFMYWJlbDoiUmVzaXplIHNpbXVsYXRvcnMgc2lkZWJhciIsc2lkZToibGVmdCJ9KSxLKEM5LHtvcGVuOkMsb25DbGljazooKT0+TCghMCl9KV19KX1mdW5jdGlvbiBuUSh7Y29uZmlnOiQsZGV2aWNlTmFtZTpRLGRldmljZVJ1bnRpbWU6SixjaHJvbWU6WixwcmVmZXJNanBlZzpYLGF4T3ZlcmxheUVuYWJsZWQ6WSxzZXRBeE92ZXJsYXlFbmFibGVkOnEsZGV2dG9vbHNPcGVuOkcsc2V0RGV2dG9vbHNPcGVuOk4sZ3JpZE9wZW46QixzZXRHcmlkT3BlbjpVLGdyaWRQYW5lbFdpZHRoOlYsc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkMsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkwsc3RyZWFtaW5nOkYsc2V0U3RyZWFtaW5nOnp9KXtsZXQgSD0kLmluaXRpYWxTdGF0ZSxrPVIzKEg/LnBhbmVzKTtiKCgpPT57ZG9jdW1lbnQudGl0bGU9UT9gU2ltdWxhdG9yIC0gJHtRfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW1FdKTtsZXQgXz1PMChRKSxTPXQ2KCQuZGV2dG9vbHNFbmRwb2ludD8/ZjEoImRldnRvb2xzIiksRyk7YigoKT0+e2lmKCFHKXJldHVybjtpZihDJiZTLnRhcmdldHMuc29tZSgoQSk9PkEuaWQ9PT1DKSlyZXR1cm47TChTLnRhcmdldHMubGVuZ3RoPT09MT9TLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtHLFMudGFyZ2V0cyxDLExdKSxiKCgpPT57TChudWxsKX0sWyQuZGV2aWNlLExdKTtsZXQgRT1kNigpLFt5LHhdPVMwKCQ0LFMzKSxbWTFdPU0oKCk9Pm5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJjb2RlYyIpPT09Im1qcGVnIiksW2YsdV09TSgoKT0+d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHkzKT09PSJtanBlZyI/Im1qcGVnIjoiYXV0byIpO2IoKCk9Pnt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oeTMsZil9LFtmXSk7bGV0IFExPSQuY29kZWMhPT0ibWpwZWciJiZFLnN1cHBvcnRlZCYmIXkuZmVsbEJhY2smJiFYJiYhWTEmJmYhPT0ibWpwZWciLFUxPWw2KFExP251bGw6JC5zdHJlYW1VcmwpO2IoKCk9Pnt6KCExKSx4KCJyZXNldCIpfSxbJC5zdHJlYW1Vcmwsel0pLGIoKCk9PntpZihRMSYmRil4KCJmcmFtZSIpfSxbUTEsRl0pLGIoKCk9PntpZighUTEpcmV0dXJuO2xldCBBPXNldFRpbWVvdXQoKCk9PngoInRpbWVvdXQiKSxRNCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChBKX0sW1ExLCQuc3RyZWFtVXJsXSk7bGV0W0sxLEExXT1NKG51bGwpLFttLGddPU0obnVsbCkscz1tLHExPUsxPz9zPz9hMChfLFEpLFYxPSQ1KF8scTEpLE4xPXMwKF8scTEpLHoxPWUyKHExKSxMMT1vMChxMSksdj1MMT9MMS53aWR0aC9MMS5oZWlnaHQ6MSxhPXkwKHExKSxsPSEhWiYmIWEsWjE9bD9aLmZyYW1lLndpZHRoL1ouc2NyZWVuLndpZHRoOjEsUDE9TjEqWjEsRD1sP1ouZnJhbWUud2lkdGgvWi5mcmFtZS5oZWlnaHQ6dixyPWw/YCR7Wi5mcmFtZS53aWR0aH0gLyAke1ouZnJhbWUuaGVpZ2h0fWA6ejEsZT1JKG51bGwpLGQ9SShbXSk7YigoKT0+e2xldCBBPSExLFc9bnVsbCxvPW51bGw7ZC5jdXJyZW50PVtdO2xldCBoPSgpPT57aWYoQXx8VylyZXR1cm47Vz1zZXRUaW1lb3V0KCgpPT57Vz1udWxsLEcxKCl9LDEwMDApfSxHMT0oKT0+e2xldCBDMT1uZXcgV2ViU29ja2V0KCQud3NVcmwpO0MxLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixvPUMxLGUuY3VycmVudD1DMSxDMS5vbm9wZW49KCk9PntkLmN1cnJlbnQ9ZzMoQzEsZC5jdXJyZW50KX0sQzEub25tZXNzYWdlPShjMSk9PntpZighKGMxLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCBGMD1uZXcgVWludDhBcnJheShjMS5kYXRhKTtpZihGMC5sZW5ndGg8MXx8RjBbMF0hPT0xMzApcmV0dXJuO3RyeXtsZXQgJDA9SlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoRjAuc3ViYXJyYXkoMSkpKTtpZigkMC53aWR0aDw9MHx8JDAuaGVpZ2h0PD0wKXJldHVybjtnKChEMCk9PkQwJiZEMC53aWR0aD09PSQwLndpZHRoJiZEMC5oZWlnaHQ9PT0kMC5oZWlnaHQmJkQwLm9yaWVudGF0aW9uPT09JDAub3JpZW50YXRpb24/RDA6JDApfWNhdGNoe319LEMxLm9uY2xvc2U9KCk9PntpZihlLmN1cnJlbnQ9PT1DMSllLmN1cnJlbnQ9bnVsbDtoKCl9LEMxLm9uZXJyb3I9KCk9PntDMS5jbG9zZSgpfX07cmV0dXJuIEcxKCksKCk9PntpZihBPSEwLFcpY2xlYXJUaW1lb3V0KFcpO2lmKGUuY3VycmVudD09PW8pZS5jdXJyZW50PW51bGw7bz8uY2xvc2UoKX19LFskLndzVXJsXSk7bGV0IFI9VCgoQSxXKT0+e2QuY3VycmVudD1YNChlLmN1cnJlbnQsZC5jdXJyZW50LEEsVyl9LFtdKSxPMT1UKChBKT0+UigzLEEpLFtSXSksWDE9VCgoQSk9PlIoNSxBKSxbUl0pLG0xPVQoKEEpPT5SKDQse2J1dHRvbjpBfSksW1JdKSxzMT1UKCh7cGhhc2U6QSxidXR0b246V30pPT57aWYoVy51c2FnZVBhZ2U9PW51bGx8fFcudXNhZ2U9PW51bGwpcmV0dXJuO1IoNCx7YnV0dG9uOlcubmFtZSxwYWdlOlcudXNhZ2VQYWdlLHVzYWdlOlcudXNhZ2UscGhhc2U6QX0pfSxbUl0pLG4xPVQoKEEpPT5SKDEwLHtkZWx0YTpBfSksW1JdKSx3MT1UKChBKT0+UigxMSxBKSxbUl0pLGoxPVQoKEEpPT57QTEoKFcpPT5XJiZXLndpZHRoPT09QS53aWR0aCYmVy5oZWlnaHQ9PT1BLmhlaWdodCYmVy5vcmllbnRhdGlvbj09PUEub3JpZW50YXRpb24/VzpBKX0sW10pLFkwPVQoKEEpPT57Uig3LHtvcmllbnRhdGlvbjpBfSl9LFtSXSkscTA9cTEub3JpZW50YXRpb24/PyJwb3J0cmFpdCIsTTE9XyE9PSJ3YXRjaCImJl8hPT0idmlzaW9uIixkMT1UKChBKT0+e2lmKCFNMSlyZXR1cm47bGV0IFc9KEE9PT0ibGVmdCI/TDI6bzUpW3EwXTtZMChXKX0sW00xLHEwLFkwXSk7YigoKT0+e0ExKG51bGwpLGcobnVsbCl9LFskLnN0cmVhbVVybF0pLGIoKCk9PntsZXQgQT1zO2lmKCFBKXJldHVybjtBMSgoVyk9PlcmJlcud2lkdGg9PT1BLndpZHRoJiZXLmhlaWdodD09PUEuaGVpZ2h0JiZXLm9yaWVudGF0aW9uPT09QS5vcmllbnRhdGlvbj9XOm51bGwpfSxbcyxzPy53aWR0aCxzPy5oZWlnaHQscz8ub3JpZW50YXRpb25dKTtsZXQgQzA9VCgoQSxXKT0+e1IoNix7dHlwZTpBLHVzYWdlOld9KX0sW1JdKSxbeDEscjFdPU0obnVsbCksW0cwLEUxXT1NKCgpPT57aWYoSD8ucGFuZXMpcmV0dXJuIGs9PT0idG9vbHMiO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2xldCBBPU51bWJlcih3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIpKSxXPU51bWJlci5pc0Zpbml0ZShBKSYmQT4wP0E6eDM7cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoPj1XKzQ4MH0pLHt3aWR0aDpJMSxvblBvaW50ZXJEb3duOnQxfT13NSgic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIix4MywyNDAsNzIwKSx7d2lkdGg6VjAsb25Qb2ludGVyRG93bjpvMX09dzUoInNlcnZlLXNpbTpkZXZ0b29scy1wYW5lbC13aWR0aCIsSzQsNDIwLDE0MDApLFtCMCx3MF09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVyV2lkdGg6MCksW1cwLGExXT1NKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJIZWlnaHQ6MCk7YigoKT0+e2xldCBBPSgpPT57dzAod2luZG93LmlubmVyV2lkdGgpLGExKHdpbmRvdy5pbm5lckhlaWdodCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixBKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsQSl9LFtdKSxiKCgpPT57bGV0IEE9ZzAoJC5hcHBTdGF0ZUVuZHBvaW50Pz9mMSgiYXBwc3RhdGUiKSksVz1udWxsO3JldHVybiBBLm9ubWVzc2FnZT0obyk9Pnt0cnl7bGV0IGg9SlNPTi5wYXJzZShvLmRhdGEpO2lmKFcpY2xlYXJUaW1lb3V0KFcpO2xldCBHMT1oPy5pc1JlYWN0TmF0aXZlPzA6NjAwO1c9c2V0VGltZW91dCgoKT0+cjEoaCksRzEpfWNhdGNoe319LCgpPT57aWYoVyljbGVhclRpbWVvdXQoVyk7QS5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBSMT1UKGFzeW5jKCk9PntDMCgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChXKT0+c2V0VGltZW91dChXLDMwKSksQzAoInVwIiwyMSl9LFtDMF0pLFMxPUkobnVsbCksW2cxLGkxXT1NKDApLFtOMCxQMF09TSgwKTtiKCgpPT57bGV0IEE9UzEuY3VycmVudDtpZighQXx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IFc9bmV3IFJlc2l6ZU9ic2VydmVyKChvKT0+e2xldCBoPW9bMF0/LmNvbnRlbnRSZWN0O2kxKGg/LndpZHRoPz8wKSxQMChoPy5oZWlnaHQ/PzApfSk7cmV0dXJuIFcub2JzZXJ2ZShBKSwoKT0+Vy5kaXNjb25uZWN0KCl9LFtdKTtsZXRbZTEsSjFdPU0oITApLFA9SSghMCk7UC5jdXJyZW50PWUxO2xldCBwPUkobmV3IFNldCk7YigoKT0+e2xldCBBPShXKT0+e2xldCBvPSEhUzEuY3VycmVudD8uY29udGFpbnMoVy50YXJnZXQpO0oxKG8pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLEEsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsQSwhMCl9LFtdKSxiKCgpPT57aWYoZTEpcmV0dXJuO2xldCBBPXAuY3VycmVudDtpZihBLnNpemU9PT0wKXJldHVybjtmb3IobGV0IFcgb2YgQSlSKDYse3R5cGU6InVwIix1c2FnZTpXfSk7QS5jbGVhcigpfSxbZTEsUl0pLGIoKCk9PntsZXQgQT0oaCxHMSk9PntpZighUC5jdXJyZW50KXJldHVybjtpZihoLmNvZGU9PT0iS2V5SCImJmgubWV0YUtleSYmaC5zaGlmdEtleSl7aWYoaC5wcmV2ZW50RGVmYXVsdCgpLEcxPT09ImRvd24iJiYhaC5yZXBlYXQpUig0LHtidXR0b246ImhvbWUifSk7cmV0dXJufWlmKChoLmNvZGU9PT0iQXJyb3dMZWZ0Inx8aC5jb2RlPT09IkFycm93UmlnaHQiKSYmaC5tZXRhS2V5JiYhaC5zaGlmdEtleSYmIWguYWx0S2V5JiYhaC5jdHJsS2V5KXtpZihoLnByZXZlbnREZWZhdWx0KCksRzE9PT0iZG93biImJiFoLnJlcGVhdClkMShoLmNvZGU9PT0iQXJyb3dMZWZ0Ij8ibGVmdCI6InJpZ2h0Iik7cmV0dXJufWlmKGguY29kZT09PSJLZXlBIiYmaC5tZXRhS2V5JiZoLnNoaWZ0S2V5KXtpZihoLnByZXZlbnREZWZhdWx0KCksRzE9PT0iZG93biImJiFoLnJlcGVhdClXMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChjMSk9PntsZXQgRjA9YzEuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gVzEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlICR7RjB9YCl9KS5jYXRjaCgoKT0+e30pO3JldHVybn1pZihoLmNvZGU9PT0iS2V5SyImJmgubWV0YUtleSYmIWguc2hpZnRLZXkmJiFoLmFsdEtleSYmIWguY3RybEtleSl7aWYoaC5wcmV2ZW50RGVmYXVsdCgpLEcxPT09ImRvd24iJiYhaC5yZXBlYXQpUigxMix7fSk7cmV0dXJufWxldCBDMT1KNChoLmNvZGUpO2lmKEMxPT1udWxsKXJldHVybjtpZihoLnByZXZlbnREZWZhdWx0KCksRzE9PT0iZG93biIpcC5jdXJyZW50LmFkZChDMSk7ZWxzZSBwLmN1cnJlbnQuZGVsZXRlKEMxKTtSKDYse3R5cGU6RzEsdXNhZ2U6QzF9KX0sVz0oaCk9PkEoaCwiZG93biIpLG89KGgpPT5BKGgsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixXKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLG8pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLFcpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsbyl9fSxbUiwkLmRldmljZSxkMV0pO2xldCB0PXM2KCksSDE9aTYoJC5kZXZpY2UpLEIxPXA2KHtleGVjOlcxLHVkaWQ6JC5kZXZpY2UsZW5hYmxlZDpGLG9uVXBsb2FkU3RhcnQ6dC5hZGQsb25VcGxvYWRQcm9ncmVzczp0LnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOihBLFcsbyk9PnQudXBkYXRlKEEse3N0YXR1czpXPyJzdWNjZXNzIjoiZXJyb3IiLG1lc3NhZ2U6b30pLG9uVW5zdXBwb3J0ZWQ6KEEpPT57bGV0IFc9dC5hZGQoQS5uYW1lLCJtZWRpYSIpO3QudXBkYXRlKFcse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke0EudHlwZXx8WTIoQSl9YH0pfSxvbkhvc3RQYXRoRHJvcDpIMS5kaXNtaXNzfSksaT1hNih7ZGVmYXVsdFdpZHRoOlAxLHZpZXdwb3J0V2lkdGg6QjAsdmlld3BvcnRIZWlnaHQ6VzAsYXNwZWN0UmF0aW86RCxpbml0aWFsRml0Okg/LmZpdD09PSEwLG9uU3RhcnQ6KCk9PkoxKCExKX0pLHkxPTEyLGgxPTI0LGwxPWcxPjA/TWF0aC5taW4oZzEsaS53aWR0aCk6aS53aWR0aCxaMD0oQSk9PntpZihBPD0wKXJldHVybiAwO2xldCBXPUIwLXkxLUEsaD1CMC8yK2wxLzItKFctaDEpO2lmKGg8PTApcmV0dXJuIDA7bGV0IEcxPTIqaDtyZXR1cm4gRzE8PUEraDE/RzE6MH0sdz1aMChHP1YwOkcwP0kxOjApLE89WjAoQj9WOjApO3JldHVybiBLKFU5LHtlbmRwb2ludDpZPyQ/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctcGFnZSBweS02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nTGVmdDoyNCtPLHBhZGRpbmdSaWdodDoyNCt3LHRyYW5zaXRpb246aS5pc1Jlc2l6aW5nfHxpLmlzSW5lcnRpYT8ibm9uZSI6STl9LGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIG1pbi13LTAiLHN0eWxlOnt3aWR0aDppLndpZHRoLHRyYW5zaXRpb246aS5pc1Jlc2l6aW5nfHxpLmlzSW5lcnRpYT9IMzpGM30sY2hpbGRyZW46W0sodTEse2V4ZWM6VzEsb25Sb3RhdGU6WTAsb3JpZW50YXRpb246cTEub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzpGLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIHN0YXR1cyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltLKHUxLlRpdGxlLHtvbkNsaWNrOigpPT5VKChBKT0+IUEpLCJhcmlhLWxhYmVsIjoiVG9nZ2xlIHNpbXVsYXRvcnMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6Qix0aXRsZToiU2ltdWxhdG9ycyIsaGlkZVN1YnRpdGxlOiEwLGhpZGVDaGV2cm9uOiEwLHN0eWxlOnttYXhXaWR0aDoibWluKDIzMHB4LCBjYWxjKDEwMHZ3IC0gMTcwcHgpKSJ9fSksSyhYNix7c3RyZWFtaW5nOkZ9KV19KSxLKCJkaXYiLHtyZWY6UzEsY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIixzdHlsZTp7d2lkdGg6aS53aWR0aCxhc3BlY3RSYXRpbzpyLHRyYW5zaXRpb246aS5pc1Jlc2l6aW5nfHxpLmlzSW5lcnRpYT9IMzpGMyx3aWxsQ2hhbmdlOmkuaXNSZXNpemluZ3x8aS5pc0luZXJ0aWE/IndpZHRoIjp2b2lkIDB9LC4uLkIxLmRyb3Bab25lUHJvcHMsY2hpbGRyZW46WygoKT0+e2xldCBBPUsodDIse3VybDokLnVybCx3c1VybDokLndzVXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUiLHBvaW50ZXJFdmVudHM6aS5pc1Jlc2l6aW5nfHxpLmlzSW5lcnRpYT8ibm9uZSI6dm9pZCAwfSxpbWFnZVN0eWxlOntib3JkZXJSYWRpdXM6bD8wOlYxLGNvcm5lclNoYXBlOmw/dm9pZCAwOiJzdXBlcmVsbGlwc2UoMS4zKSIsLi4ubD97fTp7Ym94U2hhZG93OiJpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIn19LGhpZGVDb250cm9sczohMCxvblN0cmVhbWluZ0NoYW5nZTp6LG9uU3RyZWFtVG91Y2g6TzEsb25TdHJlYW1NdWx0aVRvdWNoOlgxLG9uU3RyZWFtQnV0dG9uOm0xLG9uU3RyZWFtRGlnaXRhbENyb3duOm4xLG9uU3RyZWFtU2Nyb2xsOncxLGNvZGVjOlExPyJhdmNjIjoibWpwZWciLG9uQXZjY0Vycm9yOigpPT54KCJlcnJvciIpLHN1YnNjcmliZUZyYW1lOlExP3ZvaWQgMDpVMS5zdWJzY3JpYmVGcmFtZSxzdHJlYW1GcmFtZTpRMT92b2lkIDA6VTEuZnJhbWUsc3RyZWFtQ29uZmlnOnExLGVuYWJsZURpZ2l0YWxDcm93bjpfPT09IndhdGNoIixvblNjcmVlbkNvbmZpZ0NoYW5nZTpqMX0pLFc9SygkMSx7Y2hpbGRyZW46W0EsWSYmSyhOOSx7fSldfSk7aWYoIWwpcmV0dXJuIFc7cmV0dXJuIEsoejUse2Nocm9tZTpaLGludGVyYWN0aXZlOiEwLG9uQnV0dG9uOnMxLG9uQ3Jvd25XaGVlbDoobyxoKT0+e2xldCBHMT1DMihvLGgsTjB8fDEpO2lmKEcxIT1udWxsKW4xKEcxKX0sc2NyZWVuOld9KX0pKCksQjEuaXNEcmFnT3ZlciYmSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIGJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWFjY2VudCBiZy1bcmdiYSg5OSwxMDIsMjQxLDAuMTgpXSB0ZXh0LWFjY2VudCBwb2ludGVyLWV2ZW50cy1ub25lIHotMjAiLHN0eWxlOntib3JkZXJSYWRpdXM6bD92b2lkIDA6VjF9LGNoaWxkcmVuOltLKHcyLHtzaXplOjMyLHN0cm9rZVdpZHRoOjEuNX0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiRHJvcCBtZWRpYSBvciAuaXBhIn0pXX0pLEsoczkse3NpbXVsYXRvclJlc2l6ZTppLGRldmljZVR5cGU6XyxzdHJlYW1Db25maWc6cTEsY29udGFpbmVyV2lkdGg6ZzF8fGkud2lkdGgsY29udGFpbmVySGVpZ2h0Ok4wfHwoRD4wP2kud2lkdGgvRDowKX0pLEsoWjYse3dpZHRoOmcxfHxpLndpZHRoLGhlaWdodDpOMHx8KEQ+MD9pLndpZHRoL0Q6MCksdmlzaWJsZTppLmlzUmVzaXppbmd8fGkuaXNJbmVydGlhfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgbWF4LXctZnVsbCIsY2hpbGRyZW46W0sodTEse2V4ZWM6VzEsb25Sb3RhdGU6WTAsb3JpZW50YXRpb246cTEub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzpGLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIGFjdGlvbnMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlclJhZGl1czoxOH0sY2hpbGRyZW46Syh1MS5BY3Rpb25zLHtjaGlsZHJlbjpbeDE/LmlzUmVhY3ROYXRpdmUmJksodTEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6IlJlbG9hZCBSZWFjdCBOYXRpdmUgYnVuZGxlIix0aXRsZToiUmVsb2FkIChSKSIsb25DbGljazooKT0+dm9pZCBSMSgpLGNoaWxkcmVuOksoajAse30pfSksSyh1MS5Ib21lQnV0dG9uLHt0aXRsZToiSG9tZSJ9KSxLKHUxLlNjcmVlbnNob3RCdXR0b24se3RpdGxlOiJTY3JlZW5zaG90IixvbkNsaWNrOihBKT0+e0EucHJldmVudERlZmF1bHQoKSxIMS5jYXB0dXJlKCl9fSksSyh1MS5Sb3RhdGVCdXR0b24se3RpdGxlOiJSb3RhdGUgZGV2aWNlIn0pXX0pfSksSyh1MSx7ZXhlYzpXMSxvblJvdGF0ZTpZMCxvcmllbnRhdGlvbjpxMS5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6USxkZXZpY2VSdW50aW1lOkosc3RyZWFtaW5nOkYsImFyaWEtbGFiZWwiOiJBY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLHN0eWxlOnt3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjIyfSxjaGlsZHJlbjpLKEw5LHtvdmVybGF5RW5hYmxlZDpZLHN0cmVhbWluZzpGLG9uVG9nZ2xlT3ZlcmxheTooKT0+cSgoQSk9PiFBKX0pfSldfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIGJnLXBhbmVsLWJnIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBiYWNrZHJvcC1ibHVyLVsxMnB4XSBbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7RzB8fEc/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazooKT0+e04oITEpLEUxKChBKT0+IUEpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjpHMCx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOksoUDIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSygiYnV0dG9uIix7b25DbGljazooKT0+e0UxKCExKSxOKChBKT0+IUEpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6Ryx0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpLKF8yLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pXX0pLEsodjYse29wZW46RzAsb25DbG9zZTooKT0+RTEoITEpLHVkaWQ6JC5kZXZpY2UsZGV2aWNlUnVudGltZTpKLGN1cnJlbnRBcHA6eDEsZXZlbnRMb2dFdmVudHNFbmRwb2ludDokLmV2ZW50TG9nRXZlbnRzRW5kcG9pbnQsYXhPdmVybGF5RW5hYmxlZDpZLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5xKChBKT0+IUEpLGNvZGVjUHJlZmVyZW5jZTpmLG9uQ29kZWNQcmVmZXJlbmNlQ2hhbmdlOnUsYWN0aXZlQ29kZWM6UTE/ImgyNjQiOiJtanBlZyIsYXZjY1N1cHBvcnRlZDpFLnN1cHBvcnRlZCx3aWR0aDpJMX0pLEsoRjUse3BhbmVsV2lkdGg6STEsdmlzaWJsZTpHMCxvblBvaW50ZXJEb3duOnQxLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLEsobTYse29wZW46RyxvbkNsb3NlOigpPT5OKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6Uy50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6QyxvblNlbGVjdFRhcmdldDpMLGxvYWRpbmc6Uy5sb2FkaW5nLGVycm9yOlMuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIFMucmVmcmVzaCgpLHdpZHRoOlYwfSksSyhGNSx7cGFuZWxXaWR0aDpWMCx2aXNpYmxlOkcsb25Qb2ludGVyRG93bjpvMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSldfSl9KX1QOChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoSyhpUSx7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return dQ}function e3(){return new Promise(($)=>{h$("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 V of G){if(V.isAvailable===!1)continue;Y.push({...V,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}function QY(){try{let $=Number(C0("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(C0("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=C0("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 ZY(){try{let $=C0("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(`
|
|
104
|
-
`)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let V=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(V))continue;let W=V*1024,z=G[1].toUpperCase();Q[z]=(Q[z]??0)+W,Z+=W}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function
|
|
103
|
+
`),Q.resume(),!0}function d3($,Q,Z,J){if(!R4($,Q))return;let Y=new a9(J);Y.binaryType="arraybuffer";let X=!1,G=!1,V=[],W=Buffer.from(Z),z=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(tQ(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},K=(H)=>{if(X&&Y.readyState===a9.OPEN){Y.send(H.opcode===1?H.payload.toString("utf8"):G4(H.payload));return}V.push({opcode:H.opcode,payload:Buffer.from(H.payload)})},R=()=>{try{while(W.length>0){let H=H4(W);if(!H)break;if(W=W.subarray(H.consumed),H.opcode===8){I0(Q,8,H.payload),z();return}if(H.opcode===9){I0(Q,10,H.payload);continue}if(H.opcode===1||H.opcode===2)K({opcode:H.opcode,payload:H.payload})}}catch{z()}};Y.onopen=()=>{X=!0;for(let H of V)Y.send(H.opcode===1?H.payload.toString("utf8"):G4(H.payload));V=[]},Y.onmessage=(H)=>{let T=H.data,O=typeof T==="string"?Buffer.from(T):Buffer.from(T);I0(Q,typeof T==="string"?1:2,O)},Y.onerror=z,Y.onclose=z,Q.on("data",(H)=>{if(typeof H==="string")H=Buffer.from(H);W=Buffer.concat([W,H]),R()}),Q.on("error",z),Q.on("close",z),R()}async function n3($,Q,Z){if(!W4(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 t0(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 i3($,Q,Z,J){if(!Z)return!1;let Y=J.split("?")[0];if(Y==="/camera/status")return n3($,Q,Z),!0;let X;try{X=LQ(Z)}catch{return!1}switch(Y){case"/stream.mjpeg":return X.handleMjpeg($,Q),!0;case"/stream.avcc":return X.handleAvcc($,Q),!0;case"/config":return X.handleConfig($,Q),!0;case"/health":return X.handleHealth($,Q),!0;case"/ax":return X.handleAx($,Q),!0;case"/foreground":return X.handleForeground($,Q),!0;default:return!1}}async function L4($,Q,Z){if(await new Promise((Y)=>h$("xcrun",["simctl","boot",$],()=>Y())),!await new Promise((Y)=>{h$("xcrun",s0($),{timeout:180000},(X)=>Y(!X))})){if(!await new Promise((X)=>{h$("xcrun",["simctl","list","devices","-j"],(G,V)=>{if(G)return X(!1);try{let W=JSON.parse(V);X(Object.values(W.devices).flat().some((z)=>z.udid===$&&z.state==="Booted"))}catch{X(!1)}})}))return`Device ${$} failed to reach booted state`}return h6(i$($,Q,Z)),null}function o3($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let z of J)z()},V=()=>{G();try{$.end(tQ(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},W=()=>{for(;;){let z;try{z=H4(Y)}catch{V();return}if(!z)return;if(Y=Y.subarray(z.consumed),z.opcode===8)return V();if(z.opcode===9){I0($,10,z.payload);continue}if(z.opcode===1||z.opcode===2)for(let K of Z)K(z.payload)}};if($.on("data",(z)=>{Y=Buffer.concat([Y,z]),W()}),$.on("close",G),$.on("error",G),Q.length)W();return{send(z){I0($,2,z)},on(z,K){if(z==="message")Z.push(K);else J.push(K)},close:V}}function a3($,Q,Z,J){if(!J)return!1;let Y;try{Y=LQ(J)}catch{return!1}if(!R4($,Q))return!0;return Y.attachHidSocket(o3(Q,Z)),!0}function U8($,Q,Z,J,Y,X=!1,G){let V=(Q===""?"":Q)+"/grid/api";return{...$,basePath:Q,appStateEndpoint:A0(Q,"/appstate",$.device),eventLogEndpoint:A0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:A0(Q,"/api/event-log/events",$.device),axEndpoint:A0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:A0(Q,"/devtools",$.device),serveSimBin:Z,gridApiEndpoint:V,gridStartEndpoint:V+"/start",gridShutdownEndpoint:V+"/shutdown",gridMemoryEndpoint:V+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,...Y?{codec:Y}:{},...G?{initialState:G}:{},...X?{proxyHelpers:!0}:{}}}async function r3($){return new Promise((Q)=>{let Z=P3();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function z4($){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 W=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:W,bundleId:z}})}}}catch{return null}}async function t3(){if(b$)try{return await(await b$).listTargets(),b$}catch{b$=null}return b$=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (i9(),n9));for(let Q=R8;Q<R8+50;Q++){if(!await r3(Q)){let Z=await z4(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 z4(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${R8}-${R8+49}`)})().catch(($)=>{throw b$=null,$}),b$}function s3($){return Array.isArray($)?$[0]:$}function U4($){return s3($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function e3($){return U4($)==="https"?"wss":"ws"}function L8($){return U4($)==="https"?"https":"http"}function $Y($,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 oQ(){try{let $=process.argv;if($[1]&&K4($[1]))return $[1]}catch{}return"serve-sim"}function QY(){if(!iQ)iQ=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1sZWFkaW5nLXNudWc6MS4zNzU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzp2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpOy0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQ6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50KTstLWNvbG9yLXBhbmVsLW92ZXJsYXk6IzE4MTgxOGE2Oy0tY29sb3ItcGFuZWwtZGVlcDojMTExMTEzOy0tY29sb3ItcGFnZTojMGEwYTBhOy0tY29sb3ItYWNjZW50OiNhNWI0ZmM7LS1jb2xvci1zdWNjZXNzLWVtZXJhbGQ6IzM0ZDM5OTstLWNvbG9yLWRhbmdlcjojZjg3MTcxOy0tY29sb3ItZGFuZ2VyLXNvZnQ6I2ZjYTVhNTstLWNvbG9yLXdhcm5pbmc6I2ZiYmYyNDstLWNvbG9yLXdhcm5pbmctc29mdDojZmNkMzRkOy0tZm9udC1zeXN0ZW06LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweDtoZWlnaHQ6MH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAoIG5vdCAoLXdlYmtpdC1hcHBlYXJhbmNlOiAtYXBwbGUtcGF5LWJ1dHRvbikpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOiAxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsY3VycmVudGNvbG9yIDUwJSx0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle3RleHQtYWxpZ246aW5oZXJpdDttaW4taGVpZ2h0OjFsaH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b257YXBwZWFyYW5jZTpidXR0b259aW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBsYXllciB1dGlsaXRpZXN7LlxbY29udGFpbmVyLXR5cGVcOmlubGluZS1zaXplXF17Y29udGFpbmVyLXR5cGU6aW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZml4ZWR7cG9zaXRpb246Zml4ZWR9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we2luc2V0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnRvcC0we3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0udG9wLTN7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnRvcC1cWzJweFxde3RvcDoycHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0ucmlnaHQtMHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5yaWdodC0wXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5yaWdodC0yXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucmlnaHQtM3tyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5sZWZ0LTN7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC1hdXRve21hcmdpbi1sZWZ0OmF1dG99LmJveC1ib3JkZXJ7Ym94LXNpemluZzpib3JkZXItYm94fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5cW2FzcGVjdC1yYXRpb1w6MTZcLzExXF17YXNwZWN0LXJhdGlvOjE2LzExfS5zaXplLTFcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5zaXplLTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uc2l6ZS01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1weHt3aWR0aDoxcHh9Lm1heC13LTkwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LXctMTIwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEyMCl9Lm1heC13LVxbMTUwcHhcXXttYXgtd2lkdGg6MTUwcHh9Lm1heC13LVxbMzYwcHhcXXttYXgtd2lkdGg6MzYwcHh9Lm1heC13LWZ1bGx7bWF4LXdpZHRoOjEwMCV9Lm1pbi13LTB7bWluLXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmt7ZmxleC1zaHJpbms6MX0uc2hyaW5rLTB7ZmxleC1zaHJpbms6MH0uZ3Jvd3tmbGV4LWdyb3c6MX0uLXRyYW5zbGF0ZS14LTFcLzJ7LS10dy10cmFuc2xhdGUteDpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2xhdGUteC0xey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS4tdHJhbnNsYXRlLXktMVwvMnstLXR3LXRyYW5zbGF0ZS15OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zZm9ybXt0cmFuc2Zvcm06dmFyKC0tdHctcm90YXRlLXgsKXZhcigtLXR3LXJvdGF0ZS15LCl2YXIoLS10dy1yb3RhdGUteiwpdmFyKC0tdHctc2tldy14LCl2YXIoLS10dy1za2V3LXksKX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC43c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuOHNfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuOHMgbGluZWFyIGluZmluaXRlfS5jdXJzb3ItY29sLXJlc2l6ZXtjdXJzb3I6Y29sLXJlc2l6ZX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1ub3QtYWxsb3dlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3ItcHJvZ3Jlc3N7Y3Vyc29yOnByb2dyZXNzfS5jdXJzb3ItdGV4dHtjdXJzb3I6dGV4dH0udG91Y2gtbm9uZXt0b3VjaC1hY3Rpb246bm9uZX0ucmVzaXple3Jlc2l6ZTpib3RofS5saXN0LW5vbmV7bGlzdC1zdHlsZS10eXBlOm5vbmV9LmFwcGVhcmFuY2Utbm9uZXthcHBlYXJhbmNlOm5vbmV9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fbWlubWF4XCgwXCwxZnJcKV9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gbWlubWF4KDAsMWZyKWF1dG99LmdyaWQtY29scy1cWzU2cHhfMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTZweCAxZnIgYXV0b30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXB9LnBsYWNlLWl0ZW1zLWNlbnRlcntwbGFjZS1pdGVtczogY2VudGVyfS5pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uaXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmdhcC0wXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uZ2FwLTF7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMSl9LmdhcC0xXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LmdhcC0ye2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5nYXAtMlwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5nYXAtM3tnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uZ2FwLTV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqNSl9LmdhcC1cWzVweFxde2dhcDo1cHh9LmdhcC1weHtnYXA6MXB4fS5qdXN0aWZ5LXNlbGYtZW5ke2p1c3RpZnktc2VsZjpmbGV4LWVuZH0udHJ1bmNhdGV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLVxbMnB4XF17Ym9yZGVyLXJhZGl1czoycHh9LnJvdW5kZWQtXFszcHhcXXtib3JkZXItcmFkaXVzOjNweH0ucm91bmRlZC1cWzRweFxde2JvcmRlci1yYWRpdXM6NHB4fS5yb3VuZGVkLVxbNXB4XF17Ym9yZGVyLXJhZGl1czo1cHh9LnJvdW5kZWQtXFs3cHhcXXtib3JkZXItcmFkaXVzOjdweH0ucm91bmRlZC1cWzhweFxde2JvcmRlci1yYWRpdXM6OHB4fS5yb3VuZGVkLVxbOXB4XF17Ym9yZGVyLXJhZGl1czo5cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQtbm9uZXtib3JkZXItcmFkaXVzOjB9LnJvdW5kZWQteGx7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteGwpfS5yb3VuZGVkLXhze2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXhzKX0ucm91bmRlZC10LVxbMTBweFxde2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MTBweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoxMHB4fS5ib3JkZXJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLTB7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjB9LmJvcmRlci0ye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoycHh9LmJvcmRlci10e2JvcmRlci10b3Atc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLXJ7Ym9yZGVyLXJpZ2h0LXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweH0uYm9yZGVyLWRhc2hlZHstLXR3LWJvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXN0eWxlOmRhc2hlZH0uYm9yZGVyLW5vbmV7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXCFib3JkZXItXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjZcKVxde2JvcmRlci1jb2xvcjojMGE4NGZmOTkhaW1wb3J0YW50fS5ib3JkZXItXFtcIzNiNWY5OVxde2JvcmRlci1jb2xvcjojM2I1Zjk5fS5ib3JkZXItXFtcIzVmNjI2OFxde2JvcmRlci1jb2xvcjojNWY2MjY4fS5ib3JkZXItXFtcIzIyMlxde2JvcmRlci1jb2xvcjojMjIyfS5ib3JkZXItXFtcI2ZmNDUzYVxdXC81MHtib3JkZXItY29sb3I6I2ZmNDUzYTgwO2JvcmRlci1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjUpO2JvcmRlci1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly41KX0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOiNmODcxNzE0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8zMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8yNXtib3JkZXItY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8zMHtib3JkZXItY29sb3I6I2ZmZmZmZjRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJvcmRlci10LVxbXCNmNGY0ZjVcXXtib3JkZXItdG9wLWNvbG9yOiNmNGY0ZjV9LmJvcmRlci10LXdoaXRle2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LlwhYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjA4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYxNCFpbXBvcnRhbnR9LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZiFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhMGEwY1xde2JhY2tncm91bmQtY29sb3I6IzBhMGEwY30uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtcIzFjMWMxY1xde2JhY2tncm91bmQtY29sb3I6IzFjMWMxY30uYmctXFtcIzZlNmU3Mlxde2JhY2tncm91bmQtY29sb3I6IzZlNmU3Mn0uYmctXFtcIzlhOWE5ZVxde2JhY2tncm91bmQtY29sb3I6IzlhOWE5ZX0uYmctXFtcIzIwMmIzYVxde2JhY2tncm91bmQtY29sb3I6IzIwMmIzYX0uYmctXFtcIzIyMlxde2JhY2tncm91bmQtY29sb3I6IzIyMn0uYmctXFtcIzI2MzY0Y1xde2JhY2tncm91bmQtY29sb3I6IzI2MzY0Y30uYmctXFtcIzEwMTAxMFxde2JhY2tncm91bmQtY29sb3I6IzEwMTAxMH0uYmctXFtcI2Y4NzE3MVxde2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MX0uYmctXFtcI2ZmNDUzYVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ1M2ExYTtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yKGRpc3BsYXktcDMgLjkyMjY3MyAuMzMzMTM0IC4yNzE1MS8uMSk7YmFja2dyb3VuZC1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly4xKX0uYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjIyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYzOH0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0yXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTNcLjV7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnByLVxbMjZweFxde3BhZGRpbmctcmlnaHQ6MjZweH0ucGItMFwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucGItMXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wYi0xXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucGItMntwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wYi1cWzJweFxde3BhZGRpbmctYm90dG9tOjJweH0ucGwtMntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGwtMlwuNXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wbC0ze3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5wbC03e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5wbC1cWzI2cHhcXXtwYWRkaW5nLWxlZnQ6MjZweH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy1zbnVney0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXNudWcpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctc251Zyl9LmxlYWRpbmctdGlnaHR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctdGlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctdGlnaHQpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1zZW1pYm9sZHstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCl9LnRyYWNraW5nLVxbMFwuMWVtXF17LS10dy10cmFja2luZzouMWVtO2xldHRlci1zcGFjaW5nOi4xZW19LnRyYWNraW5nLVxbMFwuMDJlbVxdey0tdHctdHJhY2tpbmc6LjAyZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19LnRyYWNraW5nLVxbMFwuMDRlbVxdey0tdHctdHJhY2tpbmc6LjA0ZW07bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLVxbMFwuMDZlbVxdey0tdHctdHJhY2tpbmc6LjA2ZW07bGV0dGVyLXNwYWNpbmc6LjA2ZW19LnRyYWNraW5nLVxbMFwuMDhlbVxdey0tdHctdHJhY2tpbmc6LjA4ZW07bGV0dGVyLXNwYWNpbmc6LjA4ZW19LnRyYWNraW5nLXdpZGV7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlKTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy13aWRlKX0uYnJlYWstd29yZHN7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS50ZXh0LWVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0uXCF0ZXh0LXdoaXRle2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKSFpbXBvcnRhbnR9LnRleHQtXFtcIzBhMGEwY1xde2NvbG9yOiMwYTBhMGN9LnRleHQtXFtcIzhlOGU5M1xde2NvbG9yOiM4ZThlOTN9LnRleHQtXFtcIzM0ZDM5OVxde2NvbG9yOiMzNGQzOTl9LnRleHQtXFtcIzA2MjAxOFxde2NvbG9yOiMwNjIwMTh9LnRleHQtXFtcI2M4ZDdmZlxde2NvbG9yOiNjOGQ3ZmZ9LnRleHQtXFtcI2QyZTdmZlxde2NvbG9yOiNkMmU3ZmZ9LnRleHQtXFtcI2ZmYjNhZFxde2NvbG9yOiNmZmIzYWR9LnRleHQtYWNjZW50e2NvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LnRleHQtZGFuZ2Vye2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlcil9LnRleHQtZGFuZ2VyLXNvZnR7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS50ZXh0LXdhcm5pbmctc29mdHtjb2xvcjp2YXIoLS1jb2xvci13YXJuaW5nLXNvZnQpfS50ZXh0LXdoaXRle2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0udGV4dC13aGl0ZVwvMzV7Y29sb3I6I2ZmZmZmZjU5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzM1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzNSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNDB7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNDB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80NXtjb2xvcjojZmZmZmZmNzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNDV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQ1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC81MHtjb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC81NXtjb2xvcjojZmZmZmZmOGN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC82MHtjb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC82MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzY1e2NvbG9yOiNmZmZmZmZhNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC82NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzcwe2NvbG9yOiNmZmZmZmZiM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC83MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNzAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzc1e2NvbG9yOiNmZmZmZmZiZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC83NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNzUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzgwe2NvbG9yOiNmZmZjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzgwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODV7Y29sb3I6I2ZmZmZmZmQ5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzg1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvOTB7Y29sb3I6I2ZmZmZmZmU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzkwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvOTV7Y29sb3I6I2ZmZmZmZmYyfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzk1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC40Mlxde2NvbG9yOiNmZmZmZmY2Yn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQyJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQ4XF17Y29sb3I6I2ZmZmZmZjdhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDglLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNThcXXtjb2xvcjojZmZmZmZmOTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1OC4wJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjkyXF17Y29sb3I6I2ZmZmZmZmVifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTIlLHRyYW5zcGFyZW50KX19Lmxvd2VyY2FzZXt0ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2V9LnVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lml0YWxpY3tmb250LXN0eWxlOml0YWxpY30udGFidWxhci1udW1zey0tdHctbnVtZXJpYy1zcGFjaW5nOnRhYnVsYXItbnVtcztmb250LXZhcmlhbnQtbnVtZXJpYzp2YXIoLS10dy1vcmRpbmFsLCl2YXIoLS10dy1zbGFzaGVkLXplcm8sKXZhcigtLXR3LW51bWVyaWMtZmlndXJlLCl2YXIoLS10dy1udW1lcmljLXNwYWNpbmcsKXZhcigtLXR3LW51bWVyaWMtZnJhY3Rpb24sKX0uXFtmb250LXZhcmlhbnQtbnVtZXJpY1w6dGFidWxhci1udW1zXF17Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5uby11bmRlcmxpbmV7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZX0uYW50aWFsaWFzZWR7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4MCk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjQ1XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNzMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xMnB4XzQwcHhfcmdiYVwoMFwsMFwsMFwsMFwuNTVcKVxdey0tdHctc2hhZG93OjAgMTJweCA0MHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwOGMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbOHB4XzBfMzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4zNVwpXF17LS10dy1zaGFkb3c6OHB4IDAgMzJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDU5KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmcsLnJpbmctMXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmctMnstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCg3NFwsMjIyXCwxMjhcLDBcLjdcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjNGFkZTgwYjN9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCgyNDhcLDExM1wsMTEzXCwwXC41NVwpXF17Ym94LXNoYWRvdzowIDAgNnB4ICNmODcxNzE4Y30ucmluZy1cW1wjMWMxYzFlXF17LS10dy1yaW5nLWNvbG9yOiMxYzFjMWV9LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5ibHVyey0tdHctYmx1cjpibHVyKDhweCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5ncmF5c2NhbGV7LS10dy1ncmF5c2NhbGU6Z3JheXNjYWxlKDEwMCUpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1cnstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cig4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxMnB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMTJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzE4cHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLW1key0tdHctYmFja2Ryb3AtYmx1cjpibHVyKHZhcigtLWJsdXItbWQpKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1zYXR1cmF0ZS0xNTB7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTpzYXR1cmF0ZSgxNTAlKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1maWx0ZXJ7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sdHJhbnNsYXRlLHNjYWxlLHJvdGF0ZSxmaWx0ZXIsLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIsYmFja2Ryb3AtZmlsdGVyLGRpc3BsYXksY29udGVudC12aXNpYmlsaXR5LG92ZXJsYXkscG9pbnRlci1ldmVudHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW2JvcmRlci1jb2xvclwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW3dpZHRoXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTp3aWR0aCxiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG87dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xNTB7LS10dy1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwey0tdHctZHVyYXRpb246LjJzO3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5kdXJhdGlvbi0zMDB7LS10dy1kdXJhdGlvbjouM3M7dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtkaXNwbGF5Om5vbmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eTowfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMTAwOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MX19LnBsYWNlaG9sZGVyXDp0ZXh0LXdoaXRlXC80MDo6cGxhY2Vob2xkZXJ7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy13aXRoaW5cOmJnLXdoaXRlXC8xMDpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xNlwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyOX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzEyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjJlfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmNDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNy4wJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZTpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvODU6aG92ZXJ7Y29sb3I6I2ZmZmZmZmQ5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6I2ZmZmZmZmU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19fS5mb2N1c1w6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjRcKVxdOmZvY3Vze2JvcmRlci1jb2xvcjojZmZmZmZmM2R9LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3BhY2l0eS0xMDA6Zm9jdXMtdmlzaWJsZXtvcGFjaXR5OjF9LmZvY3VzLXZpc2libGVcOlxbb3V0bGluZVw6MVwuNXB4X3NvbGlkX3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNTVcKVxdOmZvY3VzLXZpc2libGV7b3V0bGluZToxLjVweCBzb2xpZCAjMGE4NGZmOGN9LmZvY3VzLXZpc2libGVcOm91dGxpbmU6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW9mZnNldC0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW9mZnNldC00OmZvY3VzLXZpc2libGV7b3V0bGluZS1vZmZzZXQ6NHB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6b3V0bGluZS13aGl0ZVwvNjA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0uYWN0aXZlXDpzY2FsZS1cWzBcLjk3XF06YWN0aXZle3NjYWxlOi45N31AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctXFtcIzJhMmEyY1xdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmEyYTJjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE3fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMzh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LVxbXCMwYTBhMGNcXTplbmFibGVkOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC13aGl0ZTplbmFibGVkOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpicmlnaHRuZXNzLVxbMVwuMDhcXTplbmFibGVkOmhvdmVyey0tdHctYnJpZ2h0bmVzczpicmlnaHRuZXNzKDEuMDgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX19LmRpc2FibGVkXDpjdXJzb3ItZGVmYXVsdDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5kaXNhYmxlZFw6b3BhY2l0eS00MDpkaXNhYmxlZHtvcGFjaXR5Oi40fS5kaXNhYmxlZFw6b3BhY2l0eS01MDpkaXNhYmxlZHtvcGFjaXR5Oi41fUBtZWRpYSAobWF4LXdpZHRoOjg5OS45OTlweCl7Lm1heC1cWzkwMHB4XF1cOmhpZGRlbntkaXNwbGF5Om5vbmV9fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXByb2dyZXNze2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpiZy1cW3ZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpXF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpib3JkZXItbm9uZTo6LW1vei1yYW5nZS10aHVtYnstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGU6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6aC1cWzRweFxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6XFtiYWNrZ3JvdW5kXDpsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCx2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwscmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjJcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwpXF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKXZhcigtLXNsaWRlci1maWxsKSwjZmZmZmZmMzggdmFyKC0tc2xpZGVyLWZpbGwpKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDotbXQtXFs0XC41cHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7bWFyZ2luLXRvcDotNC41cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDphcHBlYXJhbmNlLW5vbmU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2FwcGVhcmFuY2U6bm9uZX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaGFkb3ctXFswXzFweF8zcHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdOjotd2Via2l0LXNsaWRlci10aHVtYnstLXR3LXNoYWRvdzowIDFweCAzcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fX06cm9vdHstLWJ1bmNzcy1saWdodDogOy0tYnVuY3NzLWRhcms6aW5pdGlhbDtjb2xvci1zY2hlbWU6ZGFyazstLXNlcnZlLXNpbS1wYW5lbC1iZzojMTgxODE4Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50OiMxODE4MThjNzstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudDojMTgxODE4MDB9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOiNmZmZ9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjojZmZmZmZmZDkhaW1wb3J0YW50fS5sZW0tY2hldnJvbnt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTZzLGNvbG9yIC4xMnN9QGNvbnRhaW5lciAod2lkdGg8PTIxMHB4KXtbZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWxde2Rpc3BsYXk6bm9uZX19QGtleWZyYW1lcyBncmlkLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMjUwJSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTJweClzY2FsZSguOTYpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3Atb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpc2NhbGUoLjk2KX19LnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRle2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlfS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzVhMWQxZDtib3JkZXItY29sb3I6I2EzM30uZ3JpZC10aWxlOmhvdmVye2JvcmRlci1jb2xvcjojNTU1IWltcG9ydGFudH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yb3RhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ib3JkZXItc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWxlYWRpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1mb250LXdlaWdodHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXRyYWNraW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3JkaW5hbHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNsYXNoZWQtemVyb3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZmlndXJle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1zcGFjaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1mcmFjdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXJpbmctaW5zZXR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC13aWR0aHtzeW50YXg6IjxsZW5ndGg+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOiNmZmZ9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctb3V0bGluZS1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LXNpemV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1lYXNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QGxheWVyIHByb3BlcnRpZXN7QHN1cHBvcnRzICgoLXdlYmtpdC1oeXBoZW5zOiBub25lKSBhbmQgKCBub3QgKG1hcmdpbi10cmltOiBpbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDogaW5saW5lKSBhbmQgKCBub3QgKGNvbG9yOnJnYihmcm9tIHJlZCByIGcgYikpKSl7Kiw6YmVmb3JlLDphZnRlciw6OmJhY2tkcm9wey0tdHctdHJhbnNsYXRlLXg6MDstLXR3LXRyYW5zbGF0ZS15OjA7LS10dy10cmFuc2xhdGUtejowOy0tdHctcm90YXRlLXg6aW5pdGlhbDstLXR3LXJvdGF0ZS15OmluaXRpYWw7LS10dy1yb3RhdGUtejppbml0aWFsOy0tdHctc2tldy14OmluaXRpYWw7LS10dy1za2V3LXk6aW5pdGlhbDstLXR3LWJvcmRlci1zdHlsZTpzb2xpZDstLXR3LWxlYWRpbmc6aW5pdGlhbDstLXR3LWZvbnQtd2VpZ2h0OmluaXRpYWw7LS10dy10cmFja2luZzppbml0aWFsOy0tdHctb3JkaW5hbDppbml0aWFsOy0tdHctc2xhc2hlZC16ZXJvOmluaXRpYWw7LS10dy1udW1lcmljLWZpZ3VyZTppbml0aWFsOy0tdHctbnVtZXJpYy1zcGFjaW5nOmluaXRpYWw7LS10dy1udW1lcmljLWZyYWN0aW9uOmluaXRpYWw7LS10dy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWluc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctcmluZy1jb2xvcjppbml0aWFsOy0tdHctcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtcmluZy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctcmluZy1pbnNldDppbml0aWFsOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6MHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6I2ZmZjstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1vdXRsaW5lLXN0eWxlOnNvbGlkOy0tdHctYmx1cjppbml0aWFsOy0tdHctYnJpZ2h0bmVzczppbml0aWFsOy0tdHctY29udHJhc3Q6aW5pdGlhbDstLXR3LWdyYXlzY2FsZTppbml0aWFsOy0tdHctaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctaW52ZXJ0OmluaXRpYWw7LS10dy1vcGFjaXR5OmluaXRpYWw7LS10dy1zYXR1cmF0ZTppbml0aWFsOy0tdHctc2VwaWE6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93OmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWRyb3Atc2hhZG93LXNpemU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJsdXI6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWludmVydDppbml0aWFsOy0tdHctYmFja2Ryb3Atb3BhY2l0eTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNlcGlhOmluaXRpYWw7LS10dy1kdXJhdGlvbjppbml0aWFsOy0tdHctZWFzZTppbml0aWFsfX19Cjwvc3R5bGU+CjwvaGVhZD48Ym9keT4KPGRpdiBpZD0icm9vdCI+PC9kaXY+CjwhLS1fX1NJTV9QUkVWSUVXX0NPTkZJR19fLS0+CjxzY3JpcHQgdHlwZT0ibW9kdWxlIj52YXIgQjIsaSx1MyxWNCxFMCxmMyxsMyxkMyxFNSxtMixHMixjMyx4NSxJNSxiNSxyMyxwMj17fSx1Mj1bXSxCND0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLE4yPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gazAoJCxRKXtmb3IodmFyIEogaW4gUSkkW0pdPVFbSl07cmV0dXJuICR9ZnVuY3Rpb24gdjUoJCl7JCYmJC5wYXJlbnROb2RlJiYkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoJCl9ZnVuY3Rpb24gajEoJCxRLEope3ZhciBaLFgsWSxxPXt9O2ZvcihZIGluIFEpWT09ImtleSI/Wj1RW1ldOlk9PSJyZWYiP1g9UVtZXTpxW1ldPVFbWV07aWYoYXJndW1lbnRzLmxlbmd0aD4yJiYocS5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/QjIuY2FsbChhcmd1bWVudHMsMik6SiksdHlwZW9mICQ9PSJmdW5jdGlvbiImJiQuZGVmYXVsdFByb3BzIT1udWxsKWZvcihZIGluICQuZGVmYXVsdFByb3BzKXFbWV09PT12b2lkIDAmJihxW1ldPSQuZGVmYXVsdFByb3BzW1ldKTtyZXR1cm4gVjIoJCxxLFosWCxudWxsKX1mdW5jdGlvbiBWMigkLFEsSixaLFgpe3ZhciBZPXt0eXBlOiQscHJvcHM6USxrZXk6SixyZWY6WixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6WD09bnVsbD8rK3UzOlgsX19pOi0xLF9fdTowfTtyZXR1cm4gWD09bnVsbCYmaS52bm9kZSE9bnVsbCYmaS52bm9kZShZKSxZfWZ1bmN0aW9uIFUyKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19ZnVuY3Rpb24gZSgkKXtyZXR1cm4gJC5jaGlsZHJlbn1mdW5jdGlvbiB1MSgkLFEpe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9UX1mdW5jdGlvbiBsMCgkLFEpe2lmKFE9PW51bGwpcmV0dXJuICQuX18/bDAoJC5fXywkLl9faSsxKTpudWxsO2Zvcih2YXIgSjtRPCQuX19rLmxlbmd0aDtRKyspaWYoKEo9JC5fX2tbUV0pIT1udWxsJiZKLl9fZSE9bnVsbClyZXR1cm4gSi5fX2U7cmV0dXJuIHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiI/bDAoJCk6bnVsbH1mdW5jdGlvbiBONCgkKXtpZigkLl9fUCYmJC5fX2Qpe3ZhciBRPSQuX192LEo9US5fX2UsWj1bXSxYPVtdLFk9azAoe30sUSk7WS5fX3Y9US5fX3YrMSxpLnZub2RlJiZpLnZub2RlKFkpLGo1KCQuX19QLFksUSwkLl9fbiwkLl9fUC5uYW1lc3BhY2VVUkksMzImUS5fX3U/W0pdOm51bGwsWixKPT1udWxsP2wwKFEpOkosISEoMzImUS5fX3UpLFgpLFkuX192PVEuX192LFkuX18uX19rW1kuX19pXT1ZLGEzKFosWSxYKSxRLl9fZT1RLl9fPW51bGwsWS5fX2UhPUomJm8zKFkpfX1mdW5jdGlvbiBvMygkKXtpZigoJD0kLl9fKSE9bnVsbCYmJC5fX2MhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9bnVsbCwkLl9fay5zb21lKGZ1bmN0aW9uKFEpe2lmKFEhPW51bGwmJlEuX19lIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPVEuX19lfSksbzMoJCl9ZnVuY3Rpb24geTUoJCl7KCEkLl9fZCYmKCQuX19kPSEwKSYmRTAucHVzaCgkKSYmIWwyLl9fcisrfHxmMyE9aS5kZWJvdW5jZVJlbmRlcmluZykmJigoZjM9aS5kZWJvdW5jZVJlbmRlcmluZyl8fGwzKShsMil9ZnVuY3Rpb24gbDIoKXt0cnl7Zm9yKHZhciAkLFE9MTtFMC5sZW5ndGg7KUUwLmxlbmd0aD5RJiZFMC5zb3J0KGQzKSwkPUUwLnNoaWZ0KCksUT1FMC5sZW5ndGgsTjQoJCl9ZmluYWxseXtFMC5sZW5ndGg9bDIuX19yPTB9fWZ1bmN0aW9uIGkzKCQsUSxKLFosWCxZLHEsRyxOLEIsVSl7dmFyIFYseixMLEYsQyxILGssXz1aJiZaLl9fa3x8dTIsUz1RLmxlbmd0aDtmb3IoTj1VNChKLFEsXyxOLFMpLFY9MDtWPFM7VisrKShMPUouX19rW1ZdKSE9bnVsbCYmKHo9TC5fX2khPS0xJiZfW0wuX19pXXx8cDIsTC5fX2k9VixIPWo1KCQsTCx6LFgsWSxxLEcsTixCLFUpLEY9TC5fX2UsTC5yZWYmJnoucmVmIT1MLnJlZiYmKHoucmVmJiZSNSh6LnJlZixudWxsLEwpLFUucHVzaChMLnJlZixMLl9fY3x8RixMKSksQz09bnVsbCYmRiE9bnVsbCYmKEM9RiksKGs9ISEoNCZMLl9fdSkpfHx6Ll9faz09PUwuX19rPyhOPW4zKEwsTiwkLGspLGsmJnouX19lJiYoei5fX2U9bnVsbCkpOnR5cGVvZiBMLnR5cGU9PSJmdW5jdGlvbiImJkghPT12b2lkIDA/Tj1IOkYmJihOPUYubmV4dFNpYmxpbmcpLEwuX191Jj0tNyk7cmV0dXJuIEouX19lPUMsTn1mdW5jdGlvbiBVNCgkLFEsSixaLFgpe3ZhciBZLHEsRyxOLEIsVT1KLmxlbmd0aCxWPVUsej0wO2ZvcigkLl9faz1BcnJheShYKSxZPTA7WTxYO1krKykocT1RW1ldKSE9bnVsbCYmdHlwZW9mIHEhPSJib29sZWFuIiYmdHlwZW9mIHEhPSJmdW5jdGlvbiI/KHR5cGVvZiBxPT0ic3RyaW5nInx8dHlwZW9mIHE9PSJudW1iZXIifHx0eXBlb2YgcT09ImJpZ2ludCJ8fHEuY29uc3RydWN0b3I9PVN0cmluZz9xPSQuX19rW1ldPVYyKG51bGwscSxudWxsLG51bGwsbnVsbCk6TjIocSk/cT0kLl9fa1tZXT1WMihlLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPVYyKHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsTj1ZK3oscS5fXz0kLHEuX19iPSQuX19iKzEsRz1udWxsLChCPXEuX19pPUw0KHEsSixOLFYpKSE9LTEmJihWLS0sKEc9SltCXSkmJihHLl9fdXw9MikpLEc9PW51bGx8fEcuX192PT1udWxsPyhCPT0tMSYmKFg+VT96LS06WDxVJiZ6KyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOkIhPU4mJihCPT1OLTE/ei0tOkI9PU4rMT96Kys6KEI+Tj96LS06eisrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoVilmb3IoWT0wO1k8VTtZKyspKEc9SltZXSkhPW51bGwmJigyJkcuX191KT09MCYmKEcuX19lPT1aJiYoWj1sMChHKSksdDMoRyxHKSk7cmV0dXJuIFp9ZnVuY3Rpb24gbjMoJCxRLEosWil7dmFyIFgsWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoWD0kLl9fayxZPTA7WCYmWTxYLmxlbmd0aDtZKyspWFtZXSYmKFhbWV0uX189JCxRPW4zKFhbWV0sUSxKLFopKTtyZXR1cm4gUX0kLl9fZSE9USYmKFomJihRJiYkLnR5cGUmJiFRLnBhcmVudE5vZGUmJihRPWwwKCQpKSxKLmluc2VydEJlZm9yZSgkLl9fZSxRfHxudWxsKSksUT0kLl9fZSk7ZG8gUT1RJiZRLm5leHRTaWJsaW5nO3doaWxlKFEhPW51bGwmJlEubm9kZVR5cGU9PTgpO3JldHVybiBRfWZ1bmN0aW9uICQwKCQsUSl7cmV0dXJuIFE9UXx8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KE4yKCQpPyQuc29tZShmdW5jdGlvbihKKXskMChKLFEpfSk6US5wdXNoKCQpKSxRfWZ1bmN0aW9uIEw0KCQsUSxKLFope3ZhciBYLFkscSxHPSQua2V5LE49JC50eXBlLEI9UVtKXSxVPUIhPW51bGwmJigyJkIuX191KT09MDtpZihCPT09bnVsbCYmRz09bnVsbHx8VSYmRz09Qi5rZXkmJk49PUIudHlwZSlyZXR1cm4gSjtpZihaPihVPzE6MCkpe2ZvcihYPUotMSxZPUorMTtYPj0wfHxZPFEubGVuZ3RoOylpZigoQj1RW3E9WD49MD9YLS06WSsrXSkhPW51bGwmJigyJkIuX191KT09MCYmRz09Qi5rZXkmJk49PUIudHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBtMygkLFEsSil7UVswXT09Ii0iPyQuc2V0UHJvcGVydHkoUSxKPT1udWxsPyIiOkopOiRbUV09Sj09bnVsbD8iIjp0eXBlb2YgSiE9Im51bWJlciJ8fEI0LnRlc3QoUSk/SjpKKyJweCJ9ZnVuY3Rpb24gZjIoJCxRLEosWixYKXt2YXIgWSxxOyQ6aWYoUT09InN0eWxlIilpZih0eXBlb2YgSj09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PUo7ZWxzZXtpZih0eXBlb2YgWj09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9Wj0iIiksWilmb3IoUSBpbiBaKUomJlEgaW4gSnx8bTMoJC5zdHlsZSxRLCIiKTtpZihKKWZvcihRIGluIEopWiYmSltRXT09WltRXXx8bTMoJC5zdHlsZSxRLEpbUV0pfWVsc2UgaWYoUVswXT09Im8iJiZRWzFdPT0ibiIpWT1RIT0oUT1RLnJlcGxhY2UoYzMsIiQxIikpLHE9US50b0xvd2VyQ2FzZSgpLFE9cSBpbiAkfHxRPT0ib25Gb2N1c091dCJ8fFE9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6US5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtRK1ldPUosSj9aP0pbRzJdPVpbRzJdOihKW0cyXT14NSwkLmFkZEV2ZW50TGlzdGVuZXIoUSxZP2I1Okk1LFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoUSxZP2I1Okk1LFkpO2Vsc2V7aWYoWD09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilRPVEucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoUSE9IndpZHRoIiYmUSE9ImhlaWdodCImJlEhPSJocmVmIiYmUSE9Imxpc3QiJiZRIT0iZm9ybSImJlEhPSJ0YWJJbmRleCImJlEhPSJkb3dubG9hZCImJlEhPSJyb3dTcGFuIiYmUSE9ImNvbFNwYW4iJiZRIT0icm9sZSImJlEhPSJwb3BvdmVyIiYmUSBpbiAkKXRyeXskW1FdPUo9PW51bGw/IiI6SjticmVhayAkfWNhdGNoKEcpe310eXBlb2YgSj09ImZ1bmN0aW9uInx8KEo9PW51bGx8fEo9PT0hMSYmUVs0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKFEpOiQuc2V0QXR0cmlidXRlKFEsUT09InBvcG92ZXIiJiZKPT0xPyIiOkopKX19ZnVuY3Rpb24gcDMoJCl7cmV0dXJuIGZ1bmN0aW9uKFEpe2lmKHRoaXMubCl7dmFyIEo9dGhpcy5sW1EudHlwZSskXTtpZihRW20yXT09bnVsbClRW20yXT14NSsrO2Vsc2UgaWYoUVttMl08SltHMl0pcmV0dXJuO3JldHVybiBKKGkuZXZlbnQ/aS5ldmVudChRKTpRKX19fWZ1bmN0aW9uIGo1KCQsUSxKLFosWCxZLHEsRyxOLEIpe3ZhciBVLFYseixMLEYsQyxILGssXyxTLEUsYix2LFgxLGYsbD1RLnR5cGU7aWYoUS5jb25zdHJ1Y3RvciE9PXZvaWQgMClyZXR1cm4gbnVsbDsxMjgmSi5fX3UmJihOPSEhKDMyJkouX191KSxZPVtHPVEuX19lPUouX19lXSksKFU9aS5fX2IpJiZVKFEpOyQ6aWYodHlwZW9mIGw9PSJmdW5jdGlvbiIpdHJ5e2lmKGs9US5wcm9wcyxfPWwucHJvdG90eXBlJiZsLnByb3RvdHlwZS5yZW5kZXIsUz0oVT1sLmNvbnRleHRUeXBlKSYmWltVLl9fY10sRT1VP1M/Uy5wcm9wcy52YWx1ZTpVLl9fOlosSi5fX2M/SD0oVj1RLl9fYz1KLl9fYykuX189Vi5fX0U6KF8/US5fX2M9Vj1uZXcgbChrLEUpOihRLl9fYz1WPW5ldyB1MShrLEUpLFYuY29uc3RydWN0b3I9bCxWLnJlbmRlcj1DNCksUyYmUy5zdWIoViksVi5zdGF0ZXx8KFYuc3RhdGU9e30pLFYuX19uPVosej1WLl9fZD0hMCxWLl9faD1bXSxWLl9zYj1bXSksXyYmVi5fX3M9PW51bGwmJihWLl9fcz1WLnN0YXRlKSxfJiZsLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyE9bnVsbCYmKFYuX19zPT1WLnN0YXRlJiYoVi5fX3M9azAoe30sVi5fX3MpKSxrMChWLl9fcyxsLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhrLFYuX19zKSkpLEw9Vi5wcm9wcyxGPVYuc3RhdGUsVi5fX3Y9USx6KV8mJmwuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZWLmNvbXBvbmVudFdpbGxNb3VudCE9bnVsbCYmVi5jb21wb25lbnRXaWxsTW91bnQoKSxfJiZWLmNvbXBvbmVudERpZE1vdW50IT1udWxsJiZWLl9faC5wdXNoKFYuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYoXyYmbC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJmshPT1MJiZWLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPW51bGwmJlYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhrLEUpLFEuX192PT1KLl9fdnx8IVYuX19lJiZWLnNob3VsZENvbXBvbmVudFVwZGF0ZSE9bnVsbCYmVi5zaG91bGRDb21wb25lbnRVcGRhdGUoayxWLl9fcyxFKT09PSExKXtRLl9fdiE9Si5fX3YmJihWLnByb3BzPWssVi5zdGF0ZT1WLl9fcyxWLl9fZD0hMSksUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2ssUS5fX2suc29tZShmdW5jdGlvbihjKXtjJiYoYy5fXz1RKX0pLHUyLnB1c2guYXBwbHkoVi5fX2gsVi5fc2IpLFYuX3NiPVtdLFYuX19oLmxlbmd0aCYmcS5wdXNoKFYpO2JyZWFrICR9Vi5jb21wb25lbnRXaWxsVXBkYXRlIT1udWxsJiZWLmNvbXBvbmVudFdpbGxVcGRhdGUoayxWLl9fcyxFKSxfJiZWLmNvbXBvbmVudERpZFVwZGF0ZSE9bnVsbCYmVi5fX2gucHVzaChmdW5jdGlvbigpe1YuY29tcG9uZW50RGlkVXBkYXRlKEwsRixDKX0pfWlmKFYuY29udGV4dD1FLFYucHJvcHM9ayxWLl9fUD0kLFYuX19lPSExLGI9aS5fX3Isdj0wLF8pVi5zdGF0ZT1WLl9fcyxWLl9fZD0hMSxiJiZiKFEpLFU9Vi5yZW5kZXIoVi5wcm9wcyxWLnN0YXRlLFYuY29udGV4dCksdTIucHVzaC5hcHBseShWLl9faCxWLl9zYiksVi5fc2I9W107ZWxzZSBkbyBWLl9fZD0hMSxiJiZiKFEpLFU9Vi5yZW5kZXIoVi5wcm9wcyxWLnN0YXRlLFYuY29udGV4dCksVi5zdGF0ZT1WLl9fczt3aGlsZShWLl9fZCYmKyt2PDI1KTtWLnN0YXRlPVYuX19zLFYuZ2V0Q2hpbGRDb250ZXh0IT1udWxsJiYoWj1rMChrMCh7fSxaKSxWLmdldENoaWxkQ29udGV4dCgpKSksXyYmIXomJlYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPW51bGwmJihDPVYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoTCxGKSksWDE9VSE9bnVsbCYmVS50eXBlPT09ZSYmVS5rZXk9PW51bGw/czMoVS5wcm9wcy5jaGlsZHJlbik6VSxHPWkzKCQsTjIoWDEpP1gxOltYMV0sUSxKLFosWCxZLHEsRyxOLEIpLFYuYmFzZT1RLl9fZSxRLl9fdSY9LTE2MSxWLl9faC5sZW5ndGgmJnEucHVzaChWKSxIJiYoVi5fX0U9Vi5fXz1udWxsKX1jYXRjaChjKXtpZihRLl9fdj1udWxsLE58fFkhPW51bGwpaWYoYy50aGVuKXtmb3IoUS5fX3V8PU4/MTYwOjEyODtHJiZHLm5vZGVUeXBlPT04JiZHLm5leHRTaWJsaW5nOylHPUcubmV4dFNpYmxpbmc7WVtZLmluZGV4T2YoRyldPW51bGwsUS5fX2U9R31lbHNle2ZvcihmPVkubGVuZ3RoO2YtLTspdjUoWVtmXSk7UzUoUSl9ZWxzZSBRLl9fZT1KLl9fZSxRLl9faz1KLl9fayxjLnRoZW58fFM1KFEpO2kuX19lKGMsUSxKKX1lbHNlIFk9PW51bGwmJlEuX192PT1KLl9fdj8oUS5fX2s9Si5fX2ssUS5fX2U9Si5fX2UpOkc9US5fX2U9ejQoSi5fX2UsUSxKLFosWCxZLHEsTixCKTtyZXR1cm4oVT1pLmRpZmZlZCkmJlUoUSksMTI4JlEuX191P3ZvaWQgMDpHfWZ1bmN0aW9uIFM1KCQpeyQmJigkLl9fYyYmKCQuX19jLl9fZT0hMCksJC5fX2smJiQuX19rLnNvbWUoUzUpKX1mdW5jdGlvbiBhMygkLFEsSil7Zm9yKHZhciBaPTA7WjxKLmxlbmd0aDtaKyspUjUoSltaXSxKWysrWl0sSlsrK1pdKTtpLl9fYyYmaS5fX2MoUSwkKSwkLnNvbWUoZnVuY3Rpb24oWCl7dHJ5eyQ9WC5fX2gsWC5fX2g9W10sJC5zb21lKGZ1bmN0aW9uKFkpe1kuY2FsbChYKX0pfWNhdGNoKFkpe2kuX19lKFksWC5fX3YpfX0pfWZ1bmN0aW9uIHMzKCQpe3JldHVybiB0eXBlb2YgJCE9Im9iamVjdCJ8fCQ9PW51bGx8fCQuX19iPjA/JDpOMigkKT8kLm1hcChzMyk6azAoe30sJCl9ZnVuY3Rpb24gejQoJCxRLEosWixYLFkscSxHLE4pe3ZhciBCLFUsVix6LEwsRixDLEg9Si5wcm9wc3x8cDIsaz1RLnByb3BzLF89US50eXBlO2lmKF89PSJzdmciP1g9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpfPT0ibWF0aCI/WD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6WHx8KFg9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxZIT1udWxsKXtmb3IoQj0wO0I8WS5sZW5ndGg7QisrKWlmKChMPVlbQl0pJiYic2V0QXR0cmlidXRlImluIEw9PSEhXyYmKF8/TC5sb2NhbE5hbWU9PV86TC5ub2RlVHlwZT09MykpeyQ9TCxZW0JdPW51bGw7YnJlYWt9fWlmKCQ9PW51bGwpe2lmKF89PW51bGwpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspOyQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFgsXyxrLmlzJiZrKSxHJiYoaS5fX20mJmkuX19tKFEsWSksRz0hMSksWT1udWxsfWlmKF89PW51bGwpSD09PWt8fEcmJiQuZGF0YT09a3x8KCQuZGF0YT1rKTtlbHNle2lmKFk9WSYmQjIuY2FsbCgkLmNoaWxkTm9kZXMpLCFHJiZZIT1udWxsKWZvcihIPXt9LEI9MDtCPCQuYXR0cmlidXRlcy5sZW5ndGg7QisrKUhbKEw9JC5hdHRyaWJ1dGVzW0JdKS5uYW1lXT1MLnZhbHVlO2ZvcihCIGluIEgpTD1IW0JdLEI9PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/Vj1MOkI9PSJjaGlsZHJlbiJ8fChCIGluIGspfHxCPT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBrKXx8Qj09ImNoZWNrZWQiJiYoImRlZmF1bHRDaGVja2VkImluIGspfHxmMigkLEIsbnVsbCxMLFgpO2ZvcihCIGluIGspTD1rW0JdLEI9PSJjaGlsZHJlbiI/ej1MOkI9PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/VT1MOkI9PSJ2YWx1ZSI/Rj1MOkI9PSJjaGVja2VkIj9DPUw6RyYmdHlwZW9mIEwhPSJmdW5jdGlvbiJ8fEhbQl09PT1MfHxmMigkLEIsTCxIW0JdLFgpO2lmKFUpR3x8ViYmKFUuX19odG1sPT1WLl9faHRtbHx8VS5fX2h0bWw9PSQuaW5uZXJIVE1MKXx8KCQuaW5uZXJIVE1MPVUuX19odG1sKSxRLl9faz1bXTtlbHNlIGlmKFYmJigkLmlubmVySFRNTD0iIiksaTMoUS50eXBlPT0idGVtcGxhdGUiPyQuY29udGVudDokLE4yKHopP3o6W3pdLFEsSixaLF89PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6WCxZLHEsWT9ZWzBdOkouX19rJiZsMChKLDApLEcsTiksWSE9bnVsbClmb3IoQj1ZLmxlbmd0aDtCLS07KXY1KFlbQl0pO0d8fChCPSJ2YWx1ZSIsXz09InByb2dyZXNzIiYmRj09bnVsbD8kLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTpGIT1udWxsJiYoRiE9PSRbQl18fF89PSJwcm9ncmVzcyImJiFGfHxfPT0ib3B0aW9uIiYmRiE9SFtCXSkmJmYyKCQsQixGLEhbQl0sWCksQj0iY2hlY2tlZCIsQyE9bnVsbCYmQyE9JFtCXSYmZjIoJCxCLEMsSFtCXSxYKSl9cmV0dXJuICR9ZnVuY3Rpb24gUjUoJCxRLEope3RyeXtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIil7dmFyIFo9dHlwZW9mICQuX191PT0iZnVuY3Rpb24iO1omJiQuX191KCksWiYmUT09bnVsbHx8KCQuX191PSQoUSkpfWVsc2UgJC5jdXJyZW50PVF9Y2F0Y2goWCl7aS5fX2UoWCxKKX19ZnVuY3Rpb24gdDMoJCxRLEope3ZhciBaLFg7aWYoaS51bm1vdW50JiZpLnVubW91bnQoJCksKFo9JC5yZWYpJiYoWi5jdXJyZW50JiZaLmN1cnJlbnQhPSQuX19lfHxSNShaLG51bGwsUSkpLChaPSQuX19jKSE9bnVsbCl7aWYoWi5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7Wi5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKFkpe2kuX19lKFksUSl9Wi5iYXNlPVouX19QPW51bGx9aWYoWj0kLl9faylmb3IoWD0wO1g8Wi5sZW5ndGg7WCsrKVpbWF0mJnQzKFpbWF0sUSxKfHx0eXBlb2YgJC50eXBlIT0iZnVuY3Rpb24iKTtKfHx2NSgkLl9fZSksJC5fX2M9JC5fXz0kLl9fZT12b2lkIDB9ZnVuY3Rpb24gQzQoJCxRLEope3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKCQsSil9ZnVuY3Rpb24gVDAoJCxRLEope3ZhciBaLFgsWSxxO1E9PWRvY3VtZW50JiYoUT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLGkuX18mJmkuX18oJCxRKSxYPShaPXR5cGVvZiBKPT0iZnVuY3Rpb24iKT9udWxsOkomJkouX19rfHxRLl9fayxZPVtdLHE9W10sajUoUSwkPSghWiYmSnx8USkuX19rPWoxKGUsbnVsbCxbJF0pLFh8fHAyLHAyLFEubmFtZXNwYWNlVVJJLCFaJiZKP1tKXTpYP251bGw6US5maXJzdENoaWxkP0IyLmNhbGwoUS5jaGlsZE5vZGVzKTpudWxsLFksIVomJko/SjpYP1guX19lOlEuZmlyc3RDaGlsZCxaLHEpLGEzKFksJCxxKX1mdW5jdGlvbiBkMigkLFEpe1QwKCQsUSxkMil9ZnVuY3Rpb24gZzUoJCxRLEope3ZhciBaLFgsWSxxLEc9azAoe30sJC5wcm9wcyk7Zm9yKFkgaW4gJC50eXBlJiYkLnR5cGUuZGVmYXVsdFByb3BzJiYocT0kLnR5cGUuZGVmYXVsdFByb3BzKSxRKVk9PSJrZXkiP1o9UVtZXTpZPT0icmVmIj9YPVFbWV06R1tZXT1RW1ldPT09dm9pZCAwJiZxIT1udWxsP3FbWV06UVtZXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoRy5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/QjIuY2FsbChhcmd1bWVudHMsMik6SiksVjIoJC50eXBlLEcsWnx8JC5rZXksWHx8JC5yZWYsbnVsbCl9ZnVuY3Rpb24gVTAoJCl7ZnVuY3Rpb24gUShKKXt2YXIgWixYO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFo9bmV3IFNldCwoWD17fSlbUS5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gWH0sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1o9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWi5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLHk1KHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1ouYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1omJlouZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxKLmNoaWxkcmVufXJldHVybiBRLl9fYz0iX19jQyIrcjMrKyxRLl9fPSQsUS5Qcm92aWRlcj1RLl9fbD0oUS5Db25zdW1lcj1mdW5jdGlvbihKLFope3JldHVybiBKLmNoaWxkcmVuKFopfSkuY29udGV4dFR5cGU9USxRfUIyPXUyLnNsaWNlLGk9e19fZTpmdW5jdGlvbigkLFEsSixaKXtmb3IodmFyIFgsWSxxO1E9US5fXzspaWYoKFg9US5fX2MpJiYhWC5fXyl0cnl7aWYoKFk9WC5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoWC5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1YLl9fZCksWC5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKFguY29tcG9uZW50RGlkQ2F0Y2goJCxafHx7fSkscT1YLl9fZCkscSlyZXR1cm4gWC5fX0U9WH1jYXRjaChHKXskPUd9dGhyb3cgJH19LHUzPTAsVjQ9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LHUxLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLFEpe3ZhciBKO0o9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPWswKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKGswKHt9LEopLHRoaXMucHJvcHMpKSwkJiZrMChKLCQpLCQhPW51bGwmJnRoaXMuX192JiYoUSYmdGhpcy5fc2IucHVzaChRKSx5NSh0aGlzKSl9LHUxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCkseTUodGhpcykpfSx1MS5wcm90b3R5cGUucmVuZGVyPWUsRTA9W10sbDM9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZS5wcm90b3R5cGUudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKTpzZXRUaW1lb3V0LGQzPWZ1bmN0aW9uKCQsUSl7cmV0dXJuICQuX192Ll9fYi1RLl9fdi5fX2J9LGwyLl9fcj0wLEU1PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoOCksbTI9Il9fZCIrRTUsRzI9Il9fYSIrRTUsYzM9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2kseDU9MCxJNT1wMyghMSksYjU9cDMoITApLHIzPTA7dmFyIEkwLFQxLGg1LGUzLGQwPTAscTg9W10sUzE9aSwkOD1TMS5fX2IsUTg9UzEuX19yLEo4PVMxLmRpZmZlZCxLOD1TMS5fX2MsWjg9UzEudW5tb3VudCxYOD1TMS5fXztmdW5jdGlvbiBjMCgkLFEpe1MxLl9faCYmUzEuX19oKFQxLCQsZDB8fFEpLGQwPTA7dmFyIEo9VDEuX19IfHwoVDEuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gJD49Si5fXy5sZW5ndGgmJkouX18ucHVzaCh7fSksSi5fX1skXX1mdW5jdGlvbiBNKCQpe3JldHVybiBkMD0xLFMwKEc4LCQpfWZ1bmN0aW9uIFMwKCQsUSxKKXt2YXIgWj1jMChJMCsrLDIpO2lmKFoudD0kLCFaLl9fYyYmKFouX189W0o/SihRKTpHOCh2b2lkIDAsUSksZnVuY3Rpb24oRyl7dmFyIE49Wi5fX04/Wi5fX05bMF06Wi5fX1swXSxCPVoudChOLEcpO04hPT1CJiYoWi5fX049W0IsWi5fX1sxXV0sWi5fX2Muc2V0U3RhdGUoe30pKX1dLFouX19jPVQxLCFUMS5fX2YpKXt2YXIgWD1mdW5jdGlvbihHLE4sQil7aWYoIVouX19jLl9fSClyZXR1cm4hMDt2YXIgVT1aLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKHope3JldHVybiB6Ll9fY30pO2lmKFUuZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIXouX19OfSkpcmV0dXJuIVl8fFkuY2FsbCh0aGlzLEcsTixCKTt2YXIgVj1aLl9fYy5wcm9wcyE9PUc7cmV0dXJuIFUuc29tZShmdW5jdGlvbih6KXtpZih6Ll9fTil7dmFyIEw9ei5fX1swXTt6Ll9fPXouX19OLHouX19OPXZvaWQgMCxMIT09ei5fX1swXSYmKFY9ITApfX0pLFkmJlkuY2FsbCh0aGlzLEcsTixCKXx8Vn07VDEuX19mPSEwO3ZhcntzaG91bGRDb21wb25lbnRVcGRhdGU6WSxjb21wb25lbnRXaWxsVXBkYXRlOnF9PVQxO1QxLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24oRyxOLEIpe2lmKHRoaXMuX19lKXt2YXIgVT1ZO1k9dm9pZCAwLFgoRyxOLEIpLFk9VX1xJiZxLmNhbGwodGhpcyxHLE4sQil9LFQxLnNob3VsZENvbXBvbmVudFVwZGF0ZT1YfXJldHVybiBaLl9fTnx8Wi5fX31mdW5jdGlvbiB5KCQsUSl7dmFyIEo9YzAoSTArKywzKTshUzEuX19zJiZtNShKLl9fSCxRKSYmKEouX189JCxKLnU9USxUMS5fX0guX19oLnB1c2goSikpfWZ1bmN0aW9uIEEwKCQsUSl7dmFyIEo9YzAoSTArKyw0KTshUzEuX19zJiZtNShKLl9fSCxRKSYmKEouX189JCxKLnU9USxUMS5fX2gucHVzaChKKSl9ZnVuY3Rpb24gSSgkKXtyZXR1cm4gZDA9NSxXMShmdW5jdGlvbigpe3JldHVybntjdXJyZW50OiR9fSxbXSl9ZnVuY3Rpb24gcjIoJCxRLEope2QwPTYsQTAoZnVuY3Rpb24oKXtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIil7dmFyIFo9JChRKCkpO3JldHVybiBmdW5jdGlvbigpeyQobnVsbCksWiYmdHlwZW9mIFo9PSJmdW5jdGlvbiImJlooKX19aWYoJClyZXR1cm4gJC5jdXJyZW50PVEoKSxmdW5jdGlvbigpe3JldHVybiAkLmN1cnJlbnQ9bnVsbH19LEo9PW51bGw/SjpKLmNvbmNhdCgkKSl9ZnVuY3Rpb24gVzEoJCxRKXt2YXIgSj1jMChJMCsrLDcpO3JldHVybiBtNShKLl9fSCxRKSYmKEouX189JCgpLEouX19IPVEsSi5fX2g9JCksSi5fX31mdW5jdGlvbiBEKCQsUSl7cmV0dXJuIGQwPTgsVzEoZnVuY3Rpb24oKXtyZXR1cm4gJH0sUSl9ZnVuY3Rpb24gTDAoJCl7dmFyIFE9VDEuY29udGV4dFskLl9fY10sSj1jMChJMCsrLDkpO3JldHVybiBKLmM9JCxRPyhKLl9fPT1udWxsJiYoSi5fXz0hMCxRLnN1YihUMSkpLFEucHJvcHMudmFsdWUpOiQuX199ZnVuY3Rpb24gbzIoJCxRKXtTMS51c2VEZWJ1Z1ZhbHVlJiZTMS51c2VEZWJ1Z1ZhbHVlKFE/USgkKTokKX1mdW5jdGlvbiByMCgpe3ZhciAkPWMwKEkwKyssMTEpO2lmKCEkLl9fKXtmb3IodmFyIFE9VDEuX192O1EhPT1udWxsJiYhUS5fX20mJlEuX18hPT1udWxsOylRPVEuX187dmFyIEo9US5fX218fChRLl9fbT1bMCwwXSk7JC5fXz0iUCIrSlswXSsiLSIrSlsxXSsrfXJldHVybiAkLl9ffWZ1bmN0aW9uIEg0KCl7Zm9yKHZhciAkOyQ9cTguc2hpZnQoKTspe3ZhciBRPSQuX19IO2lmKCQuX19QJiZRKXRyeXtRLl9faC5zb21lKGMyKSxRLl9faC5zb21lKGY1KSxRLl9faD1bXX1jYXRjaChKKXtRLl9faD1bXSxTMS5fX2UoSiwkLl9fdil9fX1TMS5fX2I9ZnVuY3Rpb24oJCl7VDE9bnVsbCwkOCYmJDgoJCl9LFMxLl9fPWZ1bmN0aW9uKCQsUSl7JCYmUS5fX2smJlEuX19rLl9fbSYmKCQuX19tPVEuX19rLl9fbSksWDgmJlg4KCQsUSl9LFMxLl9fcj1mdW5jdGlvbigkKXtROCYmUTgoJCksSTA9MDt2YXIgUT0oVDE9JC5fX2MpLl9fSDtRJiYoaDU9PT1UMT8oUS5fX2g9W10sVDEuX19oPVtdLFEuX18uc29tZShmdW5jdGlvbihKKXtKLl9fTiYmKEouX189Si5fX04pLEoudT1KLl9fTj12b2lkIDB9KSk6KFEuX19oLnNvbWUoYzIpLFEuX19oLnNvbWUoZjUpLFEuX19oPVtdLEkwPTApKSxoNT1UMX0sUzEuZGlmZmVkPWZ1bmN0aW9uKCQpe0o4JiZKOCgkKTt2YXIgUT0kLl9fYztRJiZRLl9fSCYmKFEuX19ILl9faC5sZW5ndGgmJihxOC5wdXNoKFEpIT09MSYmZTM9PT1TMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoZTM9UzEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8RjQpKEg0KSksUS5fX0guX18uc29tZShmdW5jdGlvbihKKXtKLnUmJihKLl9fSD1KLnUpLEoudT12b2lkIDB9KSksaDU9VDE9bnVsbH0sUzEuX19jPWZ1bmN0aW9uKCQsUSl7US5zb21lKGZ1bmN0aW9uKEope3RyeXtKLl9faC5zb21lKGMyKSxKLl9faD1KLl9faC5maWx0ZXIoZnVuY3Rpb24oWil7cmV0dXJuIVouX198fGY1KFopfSl9Y2F0Y2goWil7US5zb21lKGZ1bmN0aW9uKFgpe1guX19oJiYoWC5fX2g9W10pfSksUT1bXSxTMS5fX2UoWixKLl9fdil9fSksSzgmJks4KCQsUSl9LFMxLnVubW91bnQ9ZnVuY3Rpb24oJCl7WjgmJlo4KCQpO3ZhciBRLEo9JC5fX2M7SiYmSi5fX0gmJihKLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFope3RyeXtjMihaKX1jYXRjaChYKXtRPVh9fSksSi5fX0g9dm9pZCAwLFEmJlMxLl9fZShRLEouX192KSl9O3ZhciBZOD10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iO2Z1bmN0aW9uIEY0KCQpe3ZhciBRLEo9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoWiksWTgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKFEpLHNldFRpbWVvdXQoJCl9LFo9c2V0VGltZW91dChKLDM1KTtZOCYmKFE9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEopKX1mdW5jdGlvbiBjMigkKXt2YXIgUT1UMSxKPSQuX19jO3R5cGVvZiBKPT0iZnVuY3Rpb24iJiYoJC5fX2M9dm9pZCAwLEooKSksVDE9UX1mdW5jdGlvbiBmNSgkKXt2YXIgUT1UMTskLl9fYz0kLl9fKCksVDE9UX1mdW5jdGlvbiBtNSgkLFEpe3JldHVybiEkfHwkLmxlbmd0aCE9PVEubGVuZ3RofHxRLnNvbWUoZnVuY3Rpb24oSixaKXtyZXR1cm4gSiE9PSRbWl19KX1mdW5jdGlvbiBHOCgkLFEpe3JldHVybiB0eXBlb2YgUT09ImZ1bmN0aW9uIj9RKCQpOlF9ZnVuY3Rpb24gazQoJCxRKXtmb3IodmFyIEogaW4gUSkkW0pdPVFbSl07cmV0dXJuICR9ZnVuY3Rpb24gVjgoJCxRKXtmb3IodmFyIEogaW4gJClpZihKIT09Il9fc291cmNlIiYmIShKIGluIFEpKXJldHVybiEwO2Zvcih2YXIgWiBpbiBRKWlmKFohPT0iX19zb3VyY2UiJiYkW1pdIT09UVtaXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBCOCgkLFEpe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9UX0oQjgucHJvdG90eXBlPW5ldyB1MSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsQjgucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLFEpe3JldHVybiBWOCh0aGlzLnByb3BzLCQpfHxWOCh0aGlzLnN0YXRlLFEpfTt2YXIgTjg9aS5fX2I7aS5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLE44JiZOOCgkKX07dmFyIEE0PWkuX19lO2kuX19lPWZ1bmN0aW9uKCQsUSxKLFope2lmKCQudGhlbil7Zm9yKHZhciBYLFk9UTtZPVkuX187KWlmKChYPVkuX19jKSYmWC5fX2MpcmV0dXJuIFEuX19lPT1udWxsJiYoUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2spLFguX19jKCQsUSl9QTQoJCxRLEosWil9O3ZhciBVOD1pLnVubW91bnQ7ZnVuY3Rpb24gazgoJCxRLEope3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1rNCh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09SiYmKCQuX19jLl9fUD1RKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gazgoWixRLEopfSkpLCR9ZnVuY3Rpb24gQTgoJCxRLEope3JldHVybiAkJiZKJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBBOChaLFEsSil9KSwkLl9fYyYmJC5fX2MuX19QPT09USYmKCQuX19lJiZKLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPUopKSwkfWZ1bmN0aW9uIHA1KCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIE84KCQpe3ZhciBRPSQuX18mJiQuX18uX19jO3JldHVybiBRJiZRLl9fYSYmUS5fX2EoJCl9ZnVuY3Rpb24gaTIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1pLnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIFE9JC5fX2M7USYmKFEuX196PSEwKSxRJiZRLl9fUiYmUS5fX1IoKSxRJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxVOCYmVTgoJCl9LChwNS5wcm90b3R5cGU9bmV3IHUxKS5fX2M9ZnVuY3Rpb24oJCxRKXt2YXIgSj1RLl9fYyxaPXRoaXM7Wi5vPT1udWxsJiYoWi5vPVtdKSxaLm8ucHVzaChKKTt2YXIgWD1POChaLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Wi5fX3p8fChZPSEwLEouX19SPW51bGwsWD9YKE4pOk4oKSl9O0ouX19SPXE7dmFyIEc9Si5fX1A7Si5fX1A9bnVsbDt2YXIgTj1mdW5jdGlvbigpe2lmKCEtLVouX191KXtpZihaLnN0YXRlLl9fYSl7dmFyIEI9Wi5zdGF0ZS5fX2E7Wi5fX3YuX19rWzBdPUE4KEIsQi5fX2MuX19QLEIuX19jLl9fTyl9dmFyIFU7Zm9yKFouc2V0U3RhdGUoe19fYTpaLl9fYj1udWxsfSk7VT1aLm8ucG9wKCk7KVUuX19QPUcsVS5mb3JjZVVwZGF0ZSgpfX07Wi5fX3UrK3x8MzImUS5fX3V8fFouc2V0U3RhdGUoe19fYTpaLl9fYj1aLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0scDUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxwNS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsUSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1rOCh0aGlzLl9fYixKLFouX19PPVouX19QKX10aGlzLl9fYj1udWxsfXZhciBYPVEuX19hJiZqMShlLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIFgmJihYLl9fdSY9LTMzKSxbajEoZSxudWxsLFEuX19hP251bGw6JC5jaGlsZHJlbiksWF19O3ZhciBMOD1mdW5jdGlvbigkLFEsSil7aWYoKytKWzFdPT09SlswXSYmJC5sLmRlbGV0ZShRKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoSj0kLmk7Sjspe2Zvcig7Si5sZW5ndGg+MzspSi5wb3AoKSgpO2lmKEpbMV08SlswXSlicmVhazskLmk9Sj1KWzJdfX07KGkyLnByb3RvdHlwZT1uZXcgdTEpLl9fYT1mdW5jdGlvbigkKXt2YXIgUT10aGlzLEo9TzgoUS5fX3YpLFo9US5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKFgpe3ZhciBZPWZ1bmN0aW9uKCl7US5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKFgpLEw4KFEsJCxaKSk6WCgpfTtKP0ooWSk6WSgpfX0saTIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgUT0kMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZRLnJldmVyc2UoKTtmb3IodmFyIEo9US5sZW5ndGg7Si0tOyl0aGlzLmwuc2V0KFFbSl0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LGkyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9aTIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihRLEope0w4KCQsSixRKX0pfTt2YXIgTzQ9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsTTQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLF80PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sVzQ9L1tBLVowLTldL2csUDQ9dHlwZW9mIGRvY3VtZW50PCJ1IixEND1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIE04KCQsUSxKKXtyZXR1cm4gUS5fX2s9PW51bGwmJihRLnRleHRDb250ZW50PSIiKSxUMCgkLFEpLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksJD8kLl9fYzpudWxsfXUxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1MS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKFEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpRfSl9fSl9KTt2YXIgejg9aS5ldmVudDtpLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiB6OCYmKCQ9ejgoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBfOCxUND17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sQzg9aS52bm9kZTtpLnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihRKXt2YXJ7cHJvcHM6Six0eXBlOlp9PVEsWD17fSxZPVouaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIHEgaW4gSil7dmFyIEc9SltxXTtpZighKHE9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBKKSYmRz09bnVsbHx8UDQmJnE9PT0iY2hpbGRyZW4iJiZaPT09Im5vc2NyaXB0Inx8cT09PSJjbGFzcyJ8fHE9PT0iY2xhc3NOYW1lIikpe3ZhciBOPXEudG9Mb3dlckNhc2UoKTtxPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlPT1udWxsP3E9InZhbHVlIjpxPT09ImRvd25sb2FkIiYmRz09PSEwP0c9IiI6Tj09PSJ0cmFuc2xhdGUiJiZHPT09Im5vIj9HPSExOk5bMF09PT0ibyImJk5bMV09PT0ibiI/Tj09PSJvbmRvdWJsZWNsaWNrIj9xPSJvbmRibGNsaWNrIjpOIT09Im9uY2hhbmdlInx8WiE9PSJpbnB1dCImJlohPT0idGV4dGFyZWEifHxENChKLnR5cGUpP049PT0ib25mb2N1cyI/cT0ib25mb2N1c2luIjpOPT09Im9uYmx1ciI/cT0ib25mb2N1c291dCI6XzQudGVzdChxKSYmKHE9Tik6Tj1xPSJvbmlucHV0IjpZJiZNNC50ZXN0KHEpP3E9cS5yZXBsYWNlKFc0LCItJCYiKS50b0xvd2VyQ2FzZSgpOkc9PT1udWxsJiYoRz12b2lkIDApLE49PT0ib25pbnB1dCImJlhbcT1OXSYmKHE9Im9uaW5wdXRDYXB0dXJlIiksWFtxXT1HfX1aPT0ic2VsZWN0IiYmKFgubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoWC52YWx1ZSkmJihYLnZhbHVlPSQwKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLnZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xfSkpLFguZGVmYXVsdFZhbHVlIT1udWxsJiYoWC52YWx1ZT0kMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC5tdWx0aXBsZT9YLmRlZmF1bHRWYWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMTpYLmRlZmF1bHRWYWx1ZT09Qi5wcm9wcy52YWx1ZX0pKSksSi5jbGFzcyYmIUouY2xhc3NOYW1lPyhYLmNsYXNzPUouY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNsYXNzTmFtZSIsVDQpKTpKLmNsYXNzTmFtZSYmKFguY2xhc3M9WC5jbGFzc05hbWU9Si5jbGFzc05hbWUpLFEucHJvcHM9WH0oJCksJC4kJHR5cGVvZj1PNCxDOCYmQzgoJCl9O3ZhciBIOD1pLl9fcjtpLl9fcj1mdW5jdGlvbigkKXtIOCYmSDgoJCksXzg9JC5fX2N9O3ZhciBGOD1pLmRpZmZlZDtpLmRpZmZlZD1mdW5jdGlvbigkKXtGOCYmRjgoJCk7dmFye3Byb3BzOlEsX19lOkp9PSQ7SiE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIFEmJlEudmFsdWUhPT1KLnZhbHVlJiYoSi52YWx1ZT1RLnZhbHVlPT1udWxsPyIiOlEudmFsdWUpLF84PW51bGx9O2Z1bmN0aW9uIFc4KCQpe3JldHVybiEhJC5fX2smJihUMChudWxsLCQpLCEwKX1mdW5jdGlvbiBQOCgkKXtyZXR1cm57cmVuZGVyOmZ1bmN0aW9uKFEpe004KFEsJCl9LHVubW91bnQ6ZnVuY3Rpb24oKXtXOCgkKX19fWZ1bmN0aW9uIHg4KCQsUSl7Zm9yKHZhciBKIGluIFEpJFtKXT1RW0pdO3JldHVybiAkfWZ1bmN0aW9uIGw1KCQsUSl7Zm9yKHZhciBKIGluICQpaWYoSiE9PSJfX3NvdXJjZSImJiEoSiBpbiBRKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gUSlpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PVFbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdjgoJCxRKXt2YXIgSj1RKCksWj1NKHt0OntfXzpKLHU6UX19KSxYPVpbMF0udCxZPVpbMV07cmV0dXJuIEEwKGZ1bmN0aW9uKCl7WC5fXz1KLFgudT1RLHU1KFgpJiZZKHt0Olh9KX0sWyQsSixRXSkseShmdW5jdGlvbigpe3JldHVybiB1NShYKSYmWSh7dDpYfSksJChmdW5jdGlvbigpe3U1KFgpJiZZKHt0Olh9KX0pfSxbJF0pLEp9ZnVuY3Rpb24gdTUoJCl7dHJ5e3JldHVybiEoKFE9JC5fXyk9PT0oSj0kLnUoKSkmJihRIT09MHx8MS9RPT0xL0opfHxRIT1RJiZKIT1KKX1jYXRjaChaKXtyZXR1cm4hMH12YXIgUSxKfWZ1bmN0aW9uIGo4KCQpeyQoKX1mdW5jdGlvbiBSOCgkKXtyZXR1cm4gJH1mdW5jdGlvbiBnOCgpe3JldHVyblshMSxqOF19dmFyIGg4PUEwO2Z1bmN0aW9uIGQ1KCQsUSl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1RfWZ1bmN0aW9uIHgwKCQsUSl7ZnVuY3Rpb24gSihYKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9WC5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxRPyFRKHRoaXMucHJvcHMsWCl8fFkhPVgucmVmOmw1KHRoaXMucHJvcHMsWCl9ZnVuY3Rpb24gWihYKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9SixqMSgkLFgpfXJldHVybiBaLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFouX19mPVoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWi50eXBlPSQsWn0oZDUucHJvdG90eXBlPW5ldyB1MSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsZDUucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLFEpe3JldHVybiBsNSh0aGlzLnByb3BzLCQpfHxsNSh0aGlzLnN0YXRlLFEpfTt2YXIgRDg9aS5fX2I7aS5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLEQ4JiZEOCgkKX07dmFyIHc0PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIEgwKCQpe2Z1bmN0aW9uIFEoSil7dmFyIFo9eDgoe30sSik7cmV0dXJuIGRlbGV0ZSBaLnJlZiwkKFosSi5yZWZ8fG51bGwpfXJldHVybiBRLiQkdHlwZW9mPXc0LFEucmVuZGVyPSQsUS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1RLl9fZj0hMCxRLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFF9dmFyIFQ4PWZ1bmN0aW9uKCQsUSl7cmV0dXJuICQ9PW51bGw/bnVsbDokMCgkMCgkKS5tYXAoUSkpfSxFND17bWFwOlQ4LGZvckVhY2g6VDgsY291bnQ6ZnVuY3Rpb24oJCl7cmV0dXJuICQ/JDAoJCkubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24oJCl7dmFyIFE9JDAoJCk7aWYoUS5sZW5ndGghPT0xKXRocm93IkNoaWxkcmVuLm9ubHkiO3JldHVybiBRWzBdfSx0b0FycmF5OiQwfSxJND1pLl9fZTtpLl9fZT1mdW5jdGlvbigkLFEsSixaKXtpZigkLnRoZW4pe2Zvcih2YXIgWCxZPVE7WT1ZLl9fOylpZigoWD1ZLl9fYykmJlguX19jKXJldHVybiBRLl9fZT09bnVsbCYmKFEuX19lPUouX19lLFEuX19rPUouX19rKSxYLl9fYygkLFEpfUk0KCQsUSxKLFopfTt2YXIgdzg9aS51bm1vdW50O2Z1bmN0aW9uIGY4KCQsUSxKKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9eDgoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PUomJigkLl9fYy5fX1A9USksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIGY4KFosUSxKKX0pKSwkfWZ1bmN0aW9uIG04KCQsUSxKKXtyZXR1cm4gJCYmSiYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gbTgoWixRLEopfSksJC5fX2MmJiQuX19jLl9fUD09PVEmJigkLl9fZSYmSi5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1KKSksJH1mdW5jdGlvbiBuMigpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBwOCgkKXt2YXIgUT0kLl9fJiYkLl9fLl9fYztyZXR1cm4gUSYmUS5fX2EmJlEuX19hKCQpfWZ1bmN0aW9uIGI0KCQpe3ZhciBRLEosWixYPW51bGw7ZnVuY3Rpb24gWShxKXtpZihRfHwoUT0kKCkpLnRoZW4oZnVuY3Rpb24oRyl7RyYmKFg9Ry5kZWZhdWx0fHxHKSxaPSEwfSxmdW5jdGlvbihHKXtKPUcsWj0hMH0pLEopdGhyb3cgSjtpZighWil0aHJvdyBRO3JldHVybiBYP2oxKFgscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiBMMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfWkudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgUT0kLl9fYztRJiYoUS5fX3o9ITApLFEmJlEuX19SJiZRLl9fUigpLFEmJjMyJiQuX191JiYoJC50eXBlPW51bGwpLHc4JiZ3OCgkKX0sKG4yLnByb3RvdHlwZT1uZXcgdTEpLl9fYz1mdW5jdGlvbigkLFEpe3ZhciBKPVEuX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKEopO3ZhciBYPXA4KFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsSi5fX1I9bnVsbCxYP1goTik6TigpKX07Si5fX1I9cTt2YXIgRz1KLl9fUDtKLl9fUD1udWxsO3ZhciBOPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgQj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09bTgoQixCLl9fYy5fX1AsQi5fX2MuX19PKX12YXIgVTtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtVPVouby5wb3AoKTspVS5fX1A9RyxVLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZRLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxuMi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LG4yLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxRKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPWY4KHRoaXMuX19iLEosWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIFg9US5fX2EmJmoxKGUsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gWCYmKFguX191Jj0tMzMpLFtqMShlLG51bGwsUS5fX2E/bnVsbDokLmNoaWxkcmVuKSxYXX07dmFyIEU4PWZ1bmN0aW9uKCQsUSxKKXtpZigrK0pbMV09PT1KWzBdJiYkLmwuZGVsZXRlKFEpLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihKPSQuaTtKOyl7Zm9yKDtKLmxlbmd0aD4zOylKLnBvcCgpKCk7aWYoSlsxXTxKWzBdKWJyZWFrOyQuaT1KPUpbMl19fTtmdW5jdGlvbiB5NCgkKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gJC5jb250ZXh0fSwkLmNoaWxkcmVufWZ1bmN0aW9uIFM0KCQpe3ZhciBRPXRoaXMsSj0kLmg7aWYoUS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1QwKG51bGwsUS52KSxRLnY9bnVsbCxRLmg9bnVsbH0sUS5oJiZRLmghPT1KJiZRLmNvbXBvbmVudFdpbGxVbm1vdW50KCksIVEudil7Zm9yKHZhciBaPVEuX192O1ohPT1udWxsJiYhWi5fX20mJlouX18hPT1udWxsOylaPVouX187US5oPUosUS52PXtub2RlVHlwZToxLHBhcmVudE5vZGU6SixjaGlsZE5vZGVzOltdLF9fazp7X19tOlouX19tfSxjb250YWluczpmdW5jdGlvbigpe3JldHVybiEwfSxuYW1lc3BhY2VVUkk6Si5uYW1lc3BhY2VVUkksaW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKFgsWSl7dGhpcy5jaGlsZE5vZGVzLnB1c2goWCksUS5oLmluc2VydEJlZm9yZShYLFkpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihYKXt0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKFgpPj4+MSwxKSxRLmgucmVtb3ZlQ2hpbGQoWCl9fX1UMChqMSh5NCx7Y29udGV4dDpRLmNvbnRleHR9LCQuX192KSxRLnYpfWZ1bmN0aW9uIGM1KCQsUSl7dmFyIEo9ajEoUzQse19fdjokLGg6UX0pO3JldHVybiBKLmNvbnRhaW5lckluZm89USxKfShMMi5wcm90b3R5cGU9bmV3IHUxKS5fX2E9ZnVuY3Rpb24oJCl7dmFyIFE9dGhpcyxKPXA4KFEuX192KSxaPVEubC5nZXQoJCk7cmV0dXJuIFpbMF0rKyxmdW5jdGlvbihYKXt2YXIgWT1mdW5jdGlvbigpe1EucHJvcHMucmV2ZWFsT3JkZXI/KFoucHVzaChYKSxFOChRLCQsWikpOlgoKX07Sj9KKFkpOlkoKX19LEwyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIFE9JDAoJC5jaGlsZHJlbik7JC5yZXZlYWxPcmRlciYmJC5yZXZlYWxPcmRlclswXT09PSJiIiYmUS5yZXZlcnNlKCk7Zm9yKHZhciBKPVEubGVuZ3RoO0otLTspdGhpcy5sLnNldChRW0pdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiAkLmNoaWxkcmVufSxMMi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPUwyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciAkPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oUSxKKXtFOCgkLEosUSl9KX07dmFyIHU4PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLHg0PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyx2ND0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLGo0PS9bQS1aMC05XS9nLFI0PXR5cGVvZiBkb2N1bWVudDwidSIsZzQ9ZnVuY3Rpb24oJCl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KCQpfTtmdW5jdGlvbiBoNCgkLFEsSil7cmV0dXJuIFEuX19rPT1udWxsJiYoUS50ZXh0Q29udGVudD0iIiksVDAoJCxRKSx0eXBlb2YgSj09ImZ1bmN0aW9uIiYmSigpLCQ/JC5fX2M6bnVsbH1mdW5jdGlvbiBmNCgkLFEsSil7cmV0dXJuIGQyKCQsUSksdHlwZW9mIEo9PSJmdW5jdGlvbiImJkooKSwkPyQuX19jOm51bGx9dTEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHUxLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oUSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlF9KX19KX0pO3ZhciBJOD1pLmV2ZW50O2kuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIEk4JiYoJD1JOCgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIHI1LG00PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxiOD1pLnZub2RlO2kudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKFEpe3Zhcntwcm9wczpKLHR5cGU6Wn09USxYPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBKKXt2YXIgRz1KW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEopJiZHPT1udWxsfHxSNCYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIE49cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEomJkoudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpOPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6TlswXT09PSJvIiYmTlsxXT09PSJuIj9OPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOk4hPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fGc0KEoudHlwZSk/Tj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOk49PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0Ijp2NC50ZXN0KHEpJiYocT1OKTpOPXE9Im9uaW5wdXQiOlkmJng0LnRlc3QocSk/cT1xLnJlcGxhY2UoajQsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksTj09PSJvbmlucHV0IiYmWFtxPU5dJiYocT0ib25pbnB1dENhcHR1cmUiKSxYW3FdPUd9fVo9PSJzZWxlY3QiJiYoWC5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShYLnZhbHVlKSYmKFgudmFsdWU9JDAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgudmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTF9KSksWC5kZWZhdWx0VmFsdWUhPW51bGwmJihYLnZhbHVlPSQwKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLm11bHRpcGxlP1guZGVmYXVsdFZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xOlguZGVmYXVsdFZhbHVlPT1CLnByb3BzLnZhbHVlfSkpKSxKLmNsYXNzJiYhSi5jbGFzc05hbWU/KFguY2xhc3M9Si5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2xhc3NOYW1lIixtNCkpOkouY2xhc3NOYW1lJiYoWC5jbGFzcz1YLmNsYXNzTmFtZT1KLmNsYXNzTmFtZSksUS5wcm9wcz1YfSgkKSwkLiQkdHlwZW9mPXU4LGI4JiZiOCgkKX07dmFyIHk4PWkuX19yO2kuX19yPWZ1bmN0aW9uKCQpe3k4JiZ5OCgkKSxyNT0kLl9fY307dmFyIFM4PWkuZGlmZmVkO2kuZGlmZmVkPWZ1bmN0aW9uKCQpe1M4JiZTOCgkKTt2YXJ7cHJvcHM6USxfX2U6Sn09JDtKIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gUSYmUS52YWx1ZSE9PUoudmFsdWUmJihKLnZhbHVlPVEudmFsdWU9PW51bGw/IiI6US52YWx1ZSkscjU9bnVsbH07dmFyIHA0PXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOntjdXJyZW50OntyZWFkQ29udGV4dDpmdW5jdGlvbigkKXtyZXR1cm4gcjUuX19uWyQuX19jXS5wcm9wcy52YWx1ZX0sdXNlQ2FsbGJhY2s6RCx1c2VDb250ZXh0OkwwLHVzZURlYnVnVmFsdWU6bzIsdXNlRGVmZXJyZWRWYWx1ZTpSOCx1c2VFZmZlY3Q6eSx1c2VJZDpyMCx1c2VJbXBlcmF0aXZlSGFuZGxlOnIyLHVzZUluc2VydGlvbkVmZmVjdDpoOCx1c2VMYXlvdXRFZmZlY3Q6QTAsdXNlTWVtbzpXMSx1c2VSZWR1Y2VyOlMwLHVzZVJlZjpJLHVzZVN0YXRlOk0sdXNlU3luY0V4dGVybmFsU3RvcmU6djgsdXNlVHJhbnNpdGlvbjpnOH19fTtmdW5jdGlvbiB1NCgkKXtyZXR1cm4gajEuYmluZChudWxsLCQpfWZ1bmN0aW9uIGEyKCQpe3JldHVybiEhJCYmJC4kJHR5cGVvZj09PXU4fWZ1bmN0aW9uIGw0KCQpe3JldHVybiBhMigkKSYmJC50eXBlPT09ZX1mdW5jdGlvbiBkNCgkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIGM0KCQpe3JldHVybiBhMigkKT9nNS5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiByNCgkKXtyZXR1cm4hISQuX19rJiYoVDAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gbzQoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgaTQ9ZnVuY3Rpb24oJCxRKXtyZXR1cm4gJChRKX0sbjQ9ZnVuY3Rpb24oJCxRKXt2YXIgSj1pLmRlYm91bmNlUmVuZGVyaW5nO2kuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oWCl7cmV0dXJuIFgoKX07dmFyIFo9JChRKTtyZXR1cm4gaS5kZWJvdW5jZVJlbmRlcmluZz1KLFp9LGE0PWEyLFI9e3VzZVN0YXRlOk0sdXNlSWQ6cjAsdXNlUmVkdWNlcjpTMCx1c2VFZmZlY3Q6eSx1c2VMYXlvdXRFZmZlY3Q6QTAsdXNlSW5zZXJ0aW9uRWZmZWN0Omg4LHVzZVRyYW5zaXRpb246ZzgsdXNlRGVmZXJyZWRWYWx1ZTpSOCx1c2VTeW5jRXh0ZXJuYWxTdG9yZTp2OCxzdGFydFRyYW5zaXRpb246ajgsdXNlUmVmOkksdXNlSW1wZXJhdGl2ZUhhbmRsZTpyMix1c2VNZW1vOlcxLHVzZUNhbGxiYWNrOkQsdXNlQ29udGV4dDpMMCx1c2VEZWJ1Z1ZhbHVlOm8yLHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46RTQscmVuZGVyOmg0LGh5ZHJhdGU6ZjQsdW5tb3VudENvbXBvbmVudEF0Tm9kZTpyNCxjcmVhdGVQb3J0YWw6YzUsY3JlYXRlRWxlbWVudDpqMSxjcmVhdGVDb250ZXh0OlUwLGNyZWF0ZUZhY3Rvcnk6dTQsY2xvbmVFbGVtZW50OmM0LGNyZWF0ZVJlZjpVMixGcmFnbWVudDplLGlzVmFsaWRFbGVtZW50OmEyLGlzRWxlbWVudDphNCxpc0ZyYWdtZW50Omw0LGlzTWVtbzpkNCxmaW5kRE9NTm9kZTpvNCxDb21wb25lbnQ6dTEsUHVyZUNvbXBvbmVudDpkNSxtZW1vOngwLGZvcndhcmRSZWY6SDAsZmx1c2hTeW5jOm40LHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmk0LFN0cmljdE1vZGU6ZSxTdXNwZW5zZTpuMixTdXNwZW5zZUxpc3Q6TDIsbGF6eTpiNCxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDpwNH07dmFyIHoyPXtwb3J0cmFpdDoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdCJ9LG81PXtwb3J0cmFpdDoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdCJ9O3ZhciBvMD0zO2Z1bmN0aW9uIGk1KCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIG41KCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIGIwKCQpe3JldHVybiEhJCYmKG41KCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBpMCgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IFE9bjUoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsSj1RP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFo9UT9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihKPT09JC53aWR0aCYmWj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOkosaGVpZ2h0Olp9fWZ1bmN0aW9uIG4wKCQpe2xldCBRPWkwKCQpLEo9bDgoJD8ub3JpZW50YXRpb24pLFo9TWF0aC5hYnMoSik9PT05MCxYPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPUo9PT0xODB8fFomJiFYO3JldHVybntkaXNwbGF5Q29uZmlnOlEscm90YXRpb25EZWdyZWVzOlk/SjowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBsOCgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBhMCgkLFEsSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OkoseToxLVF9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUoseTpRfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLVEseToxLUp9O2RlZmF1bHQ6cmV0dXJue3g6USx5Okp9fX1mdW5jdGlvbiBkOCgkLFEsSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybntkeDpKLGR5Oi1RfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue2R4Oi1KLGR5OlF9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybntkeDotUSxkeTotSn07ZGVmYXVsdDpyZXR1cm57ZHg6USxkeTpKfX19ZnVuY3Rpb24gYTUoJCxRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6c3dpdGNoKFEpe2Nhc2UgMTpyZXR1cm4gMztjYXNlIDQ6cmV0dXJuIDI7Y2FzZSAyOnJldHVybiAxO2Nhc2UgMzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiBRfWNhc2UibGFuZHNjYXBlX3JpZ2h0Ijpzd2l0Y2goUSl7Y2FzZSAxOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gMztjYXNlIDI6cmV0dXJuIDQ7Y2FzZSAzOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIFF9Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6c3dpdGNoKFEpe2Nhc2UgMTpyZXR1cm4gNDtjYXNlIDQ6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAzO2Nhc2UgMzpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiBRfWRlZmF1bHQ6cmV0dXJuIFF9fXZhciBjOD0xNjtmdW5jdGlvbiBDMigkLFEsSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gbnVsbDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjEsWD1RPT09MT8kKjE2OlE9PT0yPyQqWjokLFk9TWF0aC5tYXgoLTIwMCxNYXRoLm1pbigyMDAsWCkpO3JldHVybiBNYXRoLmFicyhZKTwwLjAxP251bGw6WX1mdW5jdGlvbiBzNSgkLFEsSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gMDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjE7aWYoUT09PTEpcmV0dXJuICQqYzg7aWYoUT09PTIpcmV0dXJuICQqWjtyZXR1cm4gJH1mdW5jdGlvbiByOCgkLFEsSil7aWYoIVF8fFEud2lkdGg8PTB8fFEuaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBaPVEub3JpZW50YXRpb249PT12b2lkIDAmJiQ/Lm9yaWVudGF0aW9uP3suLi5RLG9yaWVudGF0aW9uOiQub3JpZW50YXRpb259OlE7aWYoJCYmJC53aWR0aD09PVoud2lkdGgmJiQuaGVpZ2h0PT09Wi5oZWlnaHQmJiQub3JpZW50YXRpb249PT1aLm9yaWVudGF0aW9uKXJldHVybiBudWxsO3JldHVybntjb25maWc6Wixub3RpZnlQYXJlbnQ6Sj09PSJyZXBvcnRlZCJ9fXZhciBzND17WzFdOiJkZXNjcmlwdGlvbiIsWzJdOiJrZXlmcmFtZSIsWzNdOiJkZWx0YSIsWzRdOiJzZWVkIn07Y2xhc3MgczJ7YnVmZmVyPW5ldyBVaW50OEFycmF5KDY1NTM2KTtsZW49MDtzdGFydD0wO2FwcGVuZCgkKXtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2lmKHRoaXMuc3RhcnQ+MCl0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbiksdGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wO2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7bGV0IFE9dGhpcy5idWZmZXIubGVuZ3RoO3doaWxlKFE8dGhpcy5sZW4rJC5sZW5ndGgpUSo9MjtsZXQgSj1uZXcgVWludDhBcnJheShRKTtKLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLHRoaXMubGVuKSksdGhpcy5idWZmZXI9Sn19dGhpcy5idWZmZXIuc2V0KCQsdGhpcy5sZW4pLHRoaXMubGVuKz0kLmxlbmd0aH1wdXNoKCQpe2lmKCQubGVuZ3RoPjApdGhpcy5hcHBlbmQoJCk7bGV0IFE9W10sSj10aGlzLmJ1ZmZlcjt3aGlsZSh0aGlzLmxlbi10aGlzLnN0YXJ0Pj00KXtsZXQgWj10aGlzLnN0YXJ0LFg9KEpbWl08PDI0fEpbWisxXTw8MTZ8SltaKzJdPDw4fEpbWiszXSk+Pj4wO2lmKHRoaXMubGVuLVotNDxYKWJyZWFrO2lmKFg8MSl7dGhpcy5zdGFydCs9NDtjb250aW51ZX1sZXQgWT1KW1orNF0scT1zNFtZXTtpZihxKVEucHVzaCh7dHlwZTpxLHBheWxvYWQ6Si5zbGljZShaKzUsWis0K1gpfSk7dGhpcy5zdGFydCs9NCtYfWlmKHRoaXMuc3RhcnQ+MCl7aWYodGhpcy5zdGFydDx0aGlzLmxlbil0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbik7dGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wfXJldHVybiBRfXJlc2V0KCl7dGhpcy5sZW49MCx0aGlzLnN0YXJ0PTB9fWZ1bmN0aW9uIHQ1KCQpe2lmKCQubGVuZ3RoPDQpcmV0dXJuImF2YzEuNDJFMDFFIjtsZXQgUT0oSik9PkoudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4iYXZjMS4iK1EoJFsxXSkrUSgkWzJdKStRKCRbM10pfWZ1bmN0aW9uIHYwKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmdHlwZW9mIGdsb2JhbFRoaXMuVmlkZW9EZWNvZGVyPCJ1In12YXIgdDQ9MTAwMCxlND0xNjY2NztmdW5jdGlvbiBlNSh7dXJsOiQsZW5hYmxlZDpRLGNhbnZhc1JlZjpKLG9uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pe2xldCBHPUkoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pO0cuY3VycmVudD17b25GaXJzdEZyYW1lOlosb25GcmFtZTpYLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSx5KCgpPT57aWYoIVF8fCEkfHwhdjAoKSlyZXR1cm47bGV0IE49bmV3IEFib3J0Q29udHJvbGxlcixCPW5ldyBzMixVPSExLFY9ITEsej0wLEw9bnVsbCxGPW51bGwsQz0oKT0+IVUmJiFOLnNpZ25hbC5hYm9ydGVkLEg9KGwpPT57aWYoRy5jdXJyZW50Lm9uRGVjb2RlckVycm9yKUcuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgRy5jdXJyZW50Lm9uRXJyb3I/LihsKX0saz0obCxjLCQxKT0+e2lmKCFDKCkpcmV0dXJuO2xldCBVMT1KLmN1cnJlbnQ7aWYoIVUxKXJldHVybjtpZihVMS53aWR0aCE9PWN8fFUxLmhlaWdodCE9PSQxKVUxLndpZHRoPWMsVTEuaGVpZ2h0PSQxO2xldCBLMT1VMS5nZXRDb250ZXh0KCIyZCIpO2lmKCFLMSlyZXR1cm47aWYoSzEuZHJhd0ltYWdlKGwsMCwwLGMsJDEpLEcuY3VycmVudC5vbkZyYW1lPy4oKSwhVilWPSEwLEcuY3VycmVudC5vbkZpcnN0RnJhbWU/LigpfSxfPSgpPT5uZXcgVmlkZW9EZWNvZGVyKHtvdXRwdXQ6KGwpPT57dHJ5e2lmKEMoKSlrKGwsbC5kaXNwbGF5V2lkdGgsbC5kaXNwbGF5SGVpZ2h0KX1maW5hbGx5e2wuY2xvc2UoKX19LGVycm9yOihsKT0+SChgZGVjb2RlcjogJHtsLm1lc3NhZ2V9YCl9KSxTPWFzeW5jKGwpPT57bGV0IGM9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEJsb2IoW2xdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTt0cnl7aWYoQygpKWsoYyxjLndpZHRoLGMuaGVpZ2h0KX1maW5hbGx5e2MuY2xvc2UoKX19LEU9KGwpPT57aWYoIUZ8fEYuc3RhdGU9PT0iY2xvc2VkIilGPV8oKTt0cnl7Ri5jb25maWd1cmUoe2NvZGVjOnQ1KGwpLGRlc2NyaXB0aW9uOmwsb3B0aW1pemVGb3I6ImxhdGVuY3kiLGhhcmR3YXJlQWNjZWxlcmF0aW9uOiJwcmVmZXItaGFyZHdhcmUifSl9Y2F0Y2goYyl7SChgY29uZmlnOiAke2MubWVzc2FnZX1gKX19LGI9KGwsYyk9PntpZihGPy5zdGF0ZSE9PSJjb25maWd1cmVkIilyZXR1cm47dHJ5e0YuZGVjb2RlKG5ldyBFbmNvZGVkVmlkZW9DaHVuayh7dHlwZTpsPT09ImtleWZyYW1lIj8ia2V5IjoiZGVsdGEiLHRpbWVzdGFtcDp6LGRhdGE6Y30pKSx6Kz1lNH1jYXRjaHt9fSx2PShsLGMpPT57c3dpdGNoKGwpe2Nhc2Uic2VlZCI6UyhjKS5jYXRjaCgoKT0+e30pO3JldHVybjtjYXNlImRlc2NyaXB0aW9uIjpFKGMpO3JldHVybjtjYXNlImtleWZyYW1lIjpjYXNlImRlbHRhIjpiKGwsYyk7cmV0dXJufX0sWDE9KCk9PntpZighQygpfHxMKXJldHVybjtMPXNldFRpbWVvdXQoKCk9PntMPW51bGwsZigpfSx0NCl9LGY9YXN5bmMoKT0+e0IucmVzZXQoKTt0cnl7bGV0IGM9KGF3YWl0IGZldGNoKGAkeyR9L3N0cmVhbS5hdmNjYCx7c2lnbmFsOk4uc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFjKXJldHVybjtmb3IoOzspe2xldHtkb25lOiQxLHZhbHVlOlUxfT1hd2FpdCBjLnJlYWQoKTtpZigkMSlicmVhaztpZighVTEpY29udGludWU7Zm9yKGxldCBLMSBvZiBCLnB1c2goVTEpKXYoSzEudHlwZSxLMS5wYXlsb2FkKX19Y2F0Y2h7fWZpbmFsbHl7aWYoQygpKVgxKCl9fTtyZXR1cm4gZigpLCgpPT57aWYoVT0hMCxMKWNsZWFyVGltZW91dChMKTtpZihOLmFib3J0KCksQi5yZXNldCgpLEYmJkYuc3RhdGUhPT0iY2xvc2VkIil0cnl7Ri5jbG9zZSgpfWNhdGNoe31GPW51bGx9fSxbJCxRLEpdKX12YXIgJDc9MDtmdW5jdGlvbiBLKCQsUSxKLFosWCxZKXtRfHwoUT17fSk7dmFyIHEsRyxOPVE7aWYoInJlZiJpbiBOKWZvcihHIGluIE49e30sUSlHPT0icmVmIj9xPVFbR106TltHXT1RW0ddO3ZhciBCPXt0eXBlOiQscHJvcHM6TixrZXk6SixyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS0kNyxfX2k6LTEsX191OjAsX19zb3VyY2U6WCxfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoRyBpbiBxKU5bR109PT12b2lkIDAmJihOW0ddPXFbR10pO3JldHVybiBpLnZub2RlJiZpLnZub2RlKEIpLEJ9dmFyIG84PWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAsUTc9MS4wMDQsSjc9MyxLNz00LFo3PTUsWDc9MTAsWTc9MTE7ZnVuY3Rpb24gdDIoe3VybDokLHdzVXJsOlEsc3R5bGU6SixpbWFnZVN0eWxlOlosY2xhc3NOYW1lOlgsb25Ib21lUHJlc3M6WSxvblN0cmVhbVRvdWNoOnEsb25TdHJlYW1NdWx0aVRvdWNoOkcsb25TdHJlYW1CdXR0b246TixvblN0cmVhbURpZ2l0YWxDcm93bjpCLG9uU3RyZWFtU2Nyb2xsOlUsZW5hYmxlRGlnaXRhbENyb3duOlYsc3Vic2NyaWJlRnJhbWU6eixzdHJlYW1GcmFtZTpMLHN0cmVhbUNvbmZpZzpGLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOkMsaGlkZUNvbnRyb2xzOkgsb25TdHJlYW1pbmdDaGFuZ2U6ayxjb25uZWN0aW9uUXVhbGl0eTpfLGNvZGVjOlM9ImF2Y2MiLG9uQXZjY0Vycm9yOkV9KXtsZXQgYj0hIXEsdj1TPT09ImF2Y2MiJiZ2MCgpLFgxPUkobnVsbCksZj1JKG51bGwpLGw9SShudWxsKSxjPUkobnVsbCksJDE9SShudWxsKSxVMT1JKG51bGwpLFtLMSxNMV09TSghMSksW20sZ109TShudWxsKSxbcyxZMV09TShudWxsKSxWMT1JKG51bGwpLE4xPUkoQyk7TjEuY3VycmVudD1DO2xldCBIMT1JKG51bGwpLFtMMSxqXT1NKG51bGwpO3koKCk9PntsZXQgVD1IMS5jdXJyZW50O2lmKCFUfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgTz1uZXcgUmVzaXplT2JzZXJ2ZXIoKEEpPT57bGV0IFc9QVswXT8uY29udGVudFJlY3Q7aWYoVylqKHt3aWR0aDpXLndpZHRoLGhlaWdodDpXLmhlaWdodH0pfSk7cmV0dXJuIE8ub2JzZXJ2ZShUKSwoKT0+Ty5kaXNjb25uZWN0KCl9LFtdKTtsZXRbbixkXT1NKDApLFoxPUkoMCksW0QxLHddPU0oITEpLHA9SShudWxsKTt5KCgpPT57aWYoXz09PSJwb29yIil7aWYodyghMCkscC5jdXJyZW50KWNsZWFyVGltZW91dChwLmN1cnJlbnQpO3AuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57dyghMSkscC5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYodyghMSkscC5jdXJyZW50KWNsZWFyVGltZW91dChwLmN1cnJlbnQpLHAuY3VycmVudD1udWxsO3JldHVybigpPT57aWYocC5jdXJyZW50KWNsZWFyVGltZW91dChwLmN1cnJlbnQpfX0sW19dKTtsZXQgUTE9YCR7JH0vc3RyZWFtLm1qcGVnYDt5KCgpPT57VjEuY3VycmVudD1udWxsLFkxKG51bGwpfSxbJF0pO2xldCB6MT1EKChULE89InJlcG9ydGVkIik9PntsZXQgQT1yOChWMS5jdXJyZW50LFQsTyk7aWYoIUEpcmV0dXJuO2lmKFYxLmN1cnJlbnQ9QS5jb25maWcsWTEoQS5jb25maWcpLEEubm90aWZ5UGFyZW50KU4xLmN1cnJlbnQ/LihBLmNvbmZpZyl9LFtdKSx4PUkoayk7eC5jdXJyZW50PWsseSgoKT0+e3guY3VycmVudD8uKEsxKX0sW0sxXSkseSgoKT0+e2lmKGImJkYpejEoRiwiZXh0ZXJuYWwiKX0sW2IsRix6MV0pO2xldCBhPUkoITEpO2EuY3VycmVudD1LMTtsZXQgcTE9SShudWxsKSxBMT1JKG51bGwpO3koKCk9PntpZighYnx8IXp8fHYpcmV0dXJuO2xldCBPPXNldFRpbWVvdXQoKCk9PntpZighYS5jdXJyZW50KWcoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSxBPXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiByKCl7bGV0IGg9cTEuY3VycmVudDtpZihoKXtxMS5jdXJyZW50PW51bGw7bGV0IEcxPWwuY3VycmVudDtpZihHMSl7aWYoQTEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKEExLmN1cnJlbnQpO0ExLmN1cnJlbnQ9aCxHMS5zcmM9aCxaMS5jdXJyZW50Kyt9ZWxzZSBVUkwucmV2b2tlT2JqZWN0VVJMKGgpfUE9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpfSksVz16KChyKT0+e2lmKGMxLmN1cnJlbnQ9RGF0ZS5ub3coKSxxMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwocTEuY3VycmVudCk7aWYocTEuY3VycmVudD1yLCFhLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE8pLE0xKCEwKSxnKG51bGwpfSk7cmV0dXJuKCk9PntpZihjbGVhclRpbWVvdXQoTyksY2FuY2VsQW5pbWF0aW9uRnJhbWUoQSksVz8uKCkscTEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKHExLmN1cnJlbnQpLHExLmN1cnJlbnQ9bnVsbDtpZihBMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoQTEuY3VycmVudCksQTEuY3VycmVudD1udWxsfX0sW2Iseix2XSk7bGV0IEswPUQoKCk9PntjMS5jdXJyZW50PURhdGUubm93KCksTTEoITApLGcobnVsbCl9LFtdKSxwMT1EKCgpPT57aWYoWjEuY3VycmVudCsrLGMxLmN1cnJlbnQ9RGF0ZS5ub3coKSwhYS5jdXJyZW50KU0xKCEwKSxnKG51bGwpfSxbXSk7ZTUoe3VybDokLGVuYWJsZWQ6dixjYW52YXNSZWY6ZixvbkZpcnN0RnJhbWU6SzAsb25GcmFtZTpwMSxvbkVycm9yOmcsb25EZWNvZGVyRXJyb3I6RX0pO2xldCBFMT1EKChUKT0+e2xldCBPPW4wKFYxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sQT1hMChPLFQueCxULnkpLFc9VC5lZGdlPT09dm9pZCAwP3ZvaWQgMDphNShPLFQuZWRnZSkscj1XPT09dm9pZCAwP3t0eXBlOlQudHlwZSwuLi5BfTp7dHlwZTpULnR5cGUsLi4uQSxlZGdlOld9O2lmKGIpe3E/LihyKTtyZXR1cm59bGV0IGg9VTEuY3VycmVudDtpZighaHx8aC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBHMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocikpLEMxPW5ldyBVaW50OEFycmF5KDErRzEubGVuZ3RoKTtDMVswXT1KNyxDMS5zZXQoRzEsMSksaC5zZW5kKEMxKX0sW2IscV0pLGcxPUQoKFQpPT57aWYoYil7Tj8uKFQpO3JldHVybn1sZXQgTz1VMS5jdXJyZW50O2lmKCFPfHxPLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246VH0pKSxXPW5ldyBVaW50OEFycmF5KDErQS5sZW5ndGgpO1dbMF09SzcsVy5zZXQoQSwxKSxPLnNlbmQoVyl9LFtiLE5dKSxZMD1EKChUKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoVCl8fFQ9PT0wKXJldHVybjtpZihiKXtCPy4oVCk7cmV0dXJufWxldCBPPVUxLmN1cnJlbnQ7aWYoIU98fE8ucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgQT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2RlbHRhOlR9KSksVz1uZXcgVWludDhBcnJheSgxK0EubGVuZ3RoKTtXWzBdPVg3LFcuc2V0KEEsMSksTy5zZW5kKFcpfSxbYixCXSkscTA9RCgoVCxPLEEsVyk9PntpZighTnVtYmVyLmlzRmluaXRlKFQpfHwhTnVtYmVyLmlzRmluaXRlKE8pfHxUPT09MCYmTz09PTApcmV0dXJuO2xldCByPW4wKFYxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24saD1kOChyLFQsTyksRzE9YTAocixBLFcpLEMxPXtkeDpoLmR4LGR5OmguZHkseDpHMS54LHk6RzEueX07aWYoYil7VT8uKEMxKTtyZXR1cm59bGV0IHIxPVUxLmN1cnJlbnQ7aWYoIXIxfHxyMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBGMD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQzEpKSxlMT1uZXcgVWludDhBcnJheSgxK0YwLmxlbmd0aCk7ZTFbMF09WTcsZTEuc2V0KEYwLDEpLHIxLnNlbmQoZTEpfSxbYixVXSksXzE9RCgoVCk9PntsZXQgTz1uMChWMS5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEE9YTAoTyxULngxLFQueTEpLFc9YTAoTyxULngyLFQueTIpLHI9e3R5cGU6VC50eXBlLHgxOkEueCx5MTpBLnkseDI6Vy54LHkyOlcueX07aWYoYil7Rz8uKHIpO3JldHVybn1sZXQgaD1VMS5jdXJyZW50O2lmKCFofHxoLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEcxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShyKSksQzE9bmV3IFVpbnQ4QXJyYXkoMStHMS5sZW5ndGgpO0MxWzBdPVo3LEMxLnNldChHMSwxKSxoLnNlbmQoQzEpfSxbYixHXSk7eSgoKT0+e2lmKGIpcmV0dXJuO2xldCBUPVE/PyQucmVwbGFjZSgvXmh0dHAvLCJ3cyIpKyIvd3MiLE89bmV3IFdlYlNvY2tldChUKTtPLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixVMS5jdXJyZW50PU8sTy5vbm1lc3NhZ2U9KEcxKT0+e2lmKCEoRzEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IEMxPW5ldyBVaW50OEFycmF5KEcxLmRhdGEpO2lmKEMxLmxlbmd0aDwxfHxDMVswXSE9PTEzMClyZXR1cm47dHJ5e3oxKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKEMxLnN1YmFycmF5KDEpKSkpfWNhdGNoe319LE8ub25vcGVuPSgpPT57aWYoIXYpTTEoITApO2cobnVsbCl9LE8ub25jbG9zZT0oKT0+e00xKCExKX0sTy5vbmVycm9yPSgpPT57ZygiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksTTEoITEpfTtsZXQgQT1uZXcgQWJvcnRDb250cm9sbGVyLFc9c2V0SW50ZXJ2YWwoKCk9PntkKFoxLmN1cnJlbnQpLFoxLmN1cnJlbnQ9MH0sMTAwMCkscj0hMSxoPXY/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIXIpZygiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApO2lmKCF2KShhc3luYygpPT57dHJ5e2xldCBDMT0oYXdhaXQgZmV0Y2goUTEse3NpZ25hbDpBLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighQzEpcmV0dXJuO2xldCByMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoIi0tZnJhbWUiKTt3aGlsZSghMCl7bGV0e2RvbmU6RjAsdmFsdWU6ZTF9PWF3YWl0IEMxLnJlYWQoKTtpZihGMClicmVhaztpZihlMSlmb3IobGV0IEQwPTA7RDA8PWUxLmxlbmd0aC1yMS5sZW5ndGg7RDArKyl7bGV0IGgzPSEwO2ZvcihsZXQgaDI9MDtoMjxyMS5sZW5ndGg7aDIrKylpZihlMVtEMCtoMl0hPT1yMVtoMl0pe2gzPSExO2JyZWFrfWlmKGgzKXtpZihaMS5jdXJyZW50KyssIXIpe2lmKHI9ITAsaCljbGVhclRpbWVvdXQoaCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoQS5hYm9ydCgpLGNsZWFySW50ZXJ2YWwoVyksaCljbGVhclRpbWVvdXQoaCk7Ty5jbG9zZSgpLFUxLmN1cnJlbnQ9bnVsbH19LFskLFExLGIsejEsUSx2XSk7bGV0IGMxPUkoMCk7eSgoKT0+e2lmKCFiKXJldHVybjtsZXQgVD0yMDAwLE89KCk9PntsZXQgcj1jMS5jdXJyZW50O2lmKCFyfHwhYS5jdXJyZW50KXJldHVybjtpZihEYXRlLm5vdygpLXI+VClNMSghMSl9LEE9c2V0SW50ZXJ2YWwoKCk9PntkKFoxLmN1cnJlbnQpLFoxLmN1cnJlbnQ9MCxPKCl9LDEwMDApLFc9KCk9PntpZighZG9jdW1lbnQuaGlkZGVuKU8oKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFcpLCgpPT57Y2xlYXJJbnRlcnZhbChBKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixXKX19LFtiXSk7bGV0IHowPUQoKCk9PntpZih2KXJldHVybiBmLmN1cnJlbnQ7cmV0dXJuIGI/bC5jdXJyZW50OlgxLmN1cnJlbnR9LFtiLHZdKSx2MT1EKCgpPT57cmV0dXJuIGMuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P3owKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbejBdKSxvMT1EKChULE8pPT57bGV0IEE9djEoKTtpZighQSlyZXR1cm47bGV0IFc9KE8uY2xpZW50WC1BLmxlZnQpL0Eud2lkdGgscj0oTy5jbGllbnRZLUEudG9wKS9BLmhlaWdodDtFMSh7dHlwZTpULHg6Vyx5OnJ9KX0sW3YxLEUxXSksRzA9RCgoVCxPKT0+e2xldCBXPXYxKCk/LmhlaWdodHx8MSxyPUMyKFQsTyxXKTtpZihyPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gWTAociksITB9LFt2MSxZMF0pLEkxPUkoITEpLGIxPUkoITEpLHMxPUkoITEpLFYwPUkoe2R4OjAsZHk6MH0pLGkxPUkoITEpLFtCMCx3MF09TSghMSksVzA9SSh7eDowLjUseTowLjV9KSxbYTEsaDFdPU0obnVsbCk7eSgoKT0+e2xldCBUPShBKT0+e2lmKEEua2V5PT09IkFsdCIpdzAoITApfSxPPShBKT0+e2lmKEEua2V5PT09IkFsdCIpe2lmKHcwKCExKSwhYjEuY3VycmVudCloMShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixPKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixUKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLE8pfX0sW10pLHkoKCk9PntpZihCMCYmIWIxLmN1cnJlbnQpe2xldCBUPVcwLmN1cnJlbnQ7aDEoe3gxOlQueCx5MTpULnkseDI6MS1ULngseTI6MS1ULnl9KX1lbHNlIGlmKCFCMCYmIWIxLmN1cnJlbnQpaDEobnVsbCl9LFtCMF0pO2xldCB4MT1JKG51bGwpLGYxPUkoITEpLG4xPUkoMCksTjA9RCgoVCxPKT0+e2YxLmN1cnJlbnQ9ITA7bGV0IEE9eDEuY3VycmVudDtpZihBKWNhbmNlbEFuaW1hdGlvbkZyYW1lKG4xLmN1cnJlbnQpLG4xLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57QS5zdHlsZS5sZWZ0PWAke1QqMTAwfSVgLEEuc3R5bGUudG9wPWAke08qMTAwfSVgLEEuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxQMD1EKChULE8pPT57aWYoIWYxLmN1cnJlbnQpcmV0dXJuO2xldCBBPXgxLmN1cnJlbnQ7aWYoQSljYW5jZWxBbmltYXRpb25GcmFtZShuMS5jdXJyZW50KSxuMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0Euc3R5bGUubGVmdD1gJHtUKjEwMH0lYCxBLnN0eWxlLnRvcD1gJHtPKjEwMH0lYH0pfSxbXSksdDE9RCgoKT0+e2YxLmN1cnJlbnQ9ITE7bGV0IFQ9eDEuY3VycmVudDtpZihUKWNhbmNlbEFuaW1hdGlvbkZyYW1lKG4xLmN1cnJlbnQpLFQuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxKMT1EKChUKT0+e2lmKGYxLmN1cnJlbnR8fGIxLmN1cnJlbnQpcmV0dXJuITE7bGV0IE89djEoKTtpZighTylyZXR1cm4hMTtsZXQgQT1zNShULmRlbHRhWCxULmRlbHRhTW9kZSxPLndpZHRoKSxXPXM1KFQuZGVsdGFZLFQuZGVsdGFNb2RlLE8uaGVpZ2h0KTtpZihBPT09MCYmVz09PTApcmV0dXJuITE7bGV0IHI9TWF0aC5taW4oTWF0aC5tYXgoKFQuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsMCksMSksaD1NYXRoLm1pbihNYXRoLm1heCgoVC5jbGllbnRZLU8udG9wKS9PLmhlaWdodCwwKSwxKTtyZXR1cm4gcTAoQS9PLndpZHRoLFcvTy5oZWlnaHQscixoKSwhMH0sW3YxLHEwXSk7eSgoKT0+e2xldCBUPSQxLmN1cnJlbnQ7aWYoIVQpcmV0dXJuO2xldCBPPShBKT0+e2lmKCEoVj9HMChBLmRlbHRhWSxBLmRlbHRhTW9kZSk6SjEoQSkpKXJldHVybjtBLnByZXZlbnREZWZhdWx0KCksQS5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIFQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLE8se3Bhc3NpdmU6ITF9KSwoKT0+VC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsTyl9LFtWLEcwLEoxXSk7bGV0IFA9SSgwKSx1PUkobnVsbCksdD1EKCgpPT57bGV0IFQ9RGF0ZS5ub3coKSxPPVQtUC5jdXJyZW50O2lmKFAuY3VycmVudD1ULE88MzAwKXtpZih1LmN1cnJlbnQpY2xlYXJUaW1lb3V0KHUuY3VycmVudCksdS5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBnMSgiYXBwX3N3aXRjaGVyIil9ZWxzZSB1LmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2lmKFkpWSgpO2Vsc2UgZzEoImhvbWUiKTt1LmN1cnJlbnQ9bnVsbH0sMzAwKX0sW2cxLFldKSxGMT1uMChzKSxCMT1GMS5kaXNwbGF5Q29uZmlnLG89KCgpPT57aWYoIUIxfHwhTDEpcmV0dXJuIG51bGw7aWYoTDEud2lkdGg9PT0wfHxMMS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCBUPU1hdGgubWluKEwxLndpZHRoL0IxLndpZHRoLEwxLmhlaWdodC9CMS5oZWlnaHQpO3JldHVybnt3aWR0aDpCMS53aWR0aCpULGhlaWdodDpCMS5oZWlnaHQqVH19KSgpLHkxPUYxLnJvdGF0aW9uRGVncmVlcyxtMT1GMS5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyh5MSk9PT05MCxkMT1aLFowPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOm0xJiZvP2Ake28uaGVpZ2h0fXB4YDoiMTAwJSIsaGVpZ2h0Om0xJiZvP2Ake28ud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7eTE9PT0wPyIiOmAgcm90YXRlKCR7eTF9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpvOCxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlosLi4ueTE9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxDMD17Li4uWjAsdHJhbnNmb3JtOmAke1owLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7UTd9KWB9O3JldHVybiBLKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uSD97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uSn0sY2xhc3NOYW1lOlgsY2hpbGRyZW46W0soImRpdiIse3JlZjpIMSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpLKCJkaXYiLHtyZWY6YyxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDpvP2Ake28ud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6bz9gJHtvLmhlaWdodH1weGA6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJvcmRlclJhZGl1czpkMT8uYm9yZGVyUmFkaXVzLGNvcm5lclNoYXBlOmQxPy5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W3Y/SygiY2FudmFzIix7cmVmOmYsc3R5bGU6QzB9KTpLKCJpbWciLHtyZWY6WDEsc3JjOmI/dm9pZCAwOlExLGRyYWdnYWJsZTohMSxvbkxvYWQ6KFQpPT57bGV0IE89VC5jdXJyZW50VGFyZ2V0O2lmKE8ubmF0dXJhbFdpZHRoPjAmJk8ubmF0dXJhbEhlaWdodD4wKXoxKHt3aWR0aDpPLm5hdHVyYWxXaWR0aCxoZWlnaHQ6Ty5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOmI/e2Rpc3BsYXk6Im5vbmUifTpaMH0pLGImJiF2JiZLKCJpbWciLHtyZWY6bCxkcmFnZ2FibGU6ITEsb25Mb2FkOihUKT0+e2xldCBPPVQuY3VycmVudFRhcmdldDtpZihPLm5hdHVyYWxXaWR0aD4wJiZPLm5hdHVyYWxIZWlnaHQ+MCl6MSh7d2lkdGg6Ty5uYXR1cmFsV2lkdGgsaGVpZ2h0Ok8ubmF0dXJhbEhlaWdodH0pfSxzdHlsZTpaMH0pLEsoImRpdiIse3JlZjokMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGN1cnNvcjpvOCx0b3VjaEFjdGlvbjoibm9uZSJ9LG9uTW91c2VEb3duOihUKT0+e1QucHJldmVudERlZmF1bHQoKTtsZXQgTz12MSgpO2lmKCFPKXJldHVybjtsZXQgQT0oVC5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxXPShULmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKFQuYWx0S2V5KXtiMS5jdXJyZW50PSEwLHMxLmN1cnJlbnQ9VC5zaGlmdEtleTtsZXQgaD17eDE6QSx5MTpXLHgyOjEtQSx5MjoxLVd9O1YwLmN1cnJlbnQ9e2R4OjEtQS1BLGR5OjEtVy1XfSxoMShoKSxfMSh7dHlwZToiYmVnaW4iLC4uLmh9KTtyZXR1cm59TjAoQSxXKTtsZXQgcj1pNShXKTtpZihyIT09dm9pZCAwKUkxLmN1cnJlbnQ9ITAsRTEoe3R5cGU6ImJlZ2luIix4OkEseTpXLGVkZ2U6cn0pO2Vsc2UgSTEuY3VycmVudD0hMSxvMSgiYmVnaW4iLFQpfSxvbk1vdXNlTW92ZTooVCk9PntsZXQgTz12MSgpO2lmKCFPKXJldHVybjtsZXQgQT0oVC5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxXPShULmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKFcwLmN1cnJlbnQ9e3g6QSx5Old9LFQuYnV0dG9ucz09PTApe2lmKFQuYWx0S2V5KWgxKHt4MTpBLHkxOlcseDI6MS1BLHkyOjEtV30pO3JldHVybn1pZihiMS5jdXJyZW50KXtsZXQgcjtpZihzMS5jdXJyZW50KXtsZXQgaD1WMC5jdXJyZW50O3I9e3gxOkEseTE6Vyx4MjpBK2guZHgseTI6VytoLmR5fX1lbHNlIHI9e3gxOkEseTE6Vyx4MjoxLUEseTI6MS1XfTtoMShyKSxfMSh7dHlwZToibW92ZSIsLi4ucn0pO3JldHVybn1pZihQMChBLFcpLEkxLmN1cnJlbnQpRTEoe3R5cGU6Im1vdmUiLHg6QSx5OlcsZWRnZTpvMH0pO2Vsc2UgbzEoIm1vdmUiLFQpfSxvbk1vdXNlVXA6KFQpPT57aWYoYjEuY3VycmVudCl7bGV0IE89djEoKTtpZihPKXtsZXQgQT0oVC5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxXPShULmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKHMxLmN1cnJlbnQpe2xldCByPVYwLmN1cnJlbnQ7XzEoe3R5cGU6ImVuZCIseDE6QSx5MTpXLHgyOkErci5keCx5MjpXK3IuZHl9KX1lbHNlIF8xKHt0eXBlOiJlbmQiLHgxOkEseTE6Vyx4MjoxLUEseTI6MS1XfSl9aWYoYjEuY3VycmVudD0hMSwhVC5hbHRLZXkpaDEobnVsbCk7cmV0dXJufWlmKHQxKCksSTEuY3VycmVudCl7bGV0IE89djEoKTtpZihPKXtsZXQgQT0oVC5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxXPShULmNsaWVudFktTy50b3ApL08uaGVpZ2h0O0UxKHt0eXBlOiJlbmQiLHg6QSx5OlcsZWRnZTpvMH0pfUkxLmN1cnJlbnQ9ITE7cmV0dXJufW8xKCJlbmQiLFQpfSxvbk1vdXNlTGVhdmU6KFQpPT57aWYoYjEuY3VycmVudCl7aWYoYTEpXzEoe3R5cGU6ImVuZCIsLi4uYTF9KTtiMS5jdXJyZW50PSExLGgxKG51bGwpO3JldHVybn1pZih0MSgpLEkxLmN1cnJlbnQpe2xldCBPPXYxKCk7aWYoTyl7bGV0IEE9KFQuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsVz0oVC5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtFMSh7dHlwZToiZW5kIix4OkEseTpXLGVkZ2U6bzB9KX1JMS5jdXJyZW50PSExO3JldHVybn1pZihULmJ1dHRvbnM+MClvMSgiZW5kIixUKTtoMShudWxsKX0sb25Ub3VjaFN0YXJ0OihUKT0+e1QucHJldmVudERlZmF1bHQoKTtsZXQgTz12MSgpO2lmKCFPKXJldHVybjtpZihULnRvdWNoZXMubGVuZ3RoPj0yKXt0MSgpO2xldCBHMT1ULnRvdWNoZXNbMF0sQzE9VC50b3VjaGVzWzFdLHIxPXt4MTooRzEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTE6KEcxLmNsaWVudFktTy50b3ApL08uaGVpZ2h0LHgyOihDMS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx5MjooQzEuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHR9O2lmKCFpMS5jdXJyZW50JiYhSTEuY3VycmVudClFMSh7dHlwZToiZW5kIix4OnIxLngxLHk6cjEueTF9KTtpMS5jdXJyZW50PSEwLGIxLmN1cnJlbnQ9ITAsSTEuY3VycmVudD0hMSxoMShyMSksXzEoe3R5cGU6ImJlZ2luIiwuLi5yMX0pO3JldHVybn1sZXQgQT1ULnRvdWNoZXNbMF07aWYoIUEpcmV0dXJuO2xldCBXPShBLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHI9KEEuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7TjAoVyxyKTtsZXQgaD1pNShyKTtpZihoIT09dm9pZCAwKUkxLmN1cnJlbnQ9ITAsRTEoe3R5cGU6ImJlZ2luIix4OlcseTpyLGVkZ2U6aH0pO2Vsc2UgSTEuY3VycmVudD0hMSxFMSh7dHlwZToiYmVnaW4iLHg6Vyx5OnJ9KX0sb25Ub3VjaE1vdmU6KFQpPT57VC5wcmV2ZW50RGVmYXVsdCgpO2xldCBPPXYxKCk7aWYoIU8pcmV0dXJuO2lmKGkxLmN1cnJlbnQmJlQudG91Y2hlcy5sZW5ndGg+PTIpe2xldCBoPVQudG91Y2hlc1swXSxHMT1ULnRvdWNoZXNbMV0sQzE9e3gxOihoLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOihoLmNsaWVudFktTy50b3ApL08uaGVpZ2h0LHgyOihHMS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx5MjooRzEuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHR9O2gxKEMxKSxfMSh7dHlwZToibW92ZSIsLi4uQzF9KTtyZXR1cm59bGV0IEE9VC50b3VjaGVzWzBdO2lmKCFBKXJldHVybjtsZXQgVz0oQS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxyPShBLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKFAwKFcsciksSTEuY3VycmVudClFMSh7dHlwZToibW92ZSIseDpXLHk6cixlZGdlOm8wfSk7ZWxzZSBFMSh7dHlwZToibW92ZSIseDpXLHk6cn0pfSxvblRvdWNoRW5kOihUKT0+e1QucHJldmVudERlZmF1bHQoKTtsZXQgTz12MSgpO2lmKCFPKXJldHVybjtpZihpMS5jdXJyZW50KXtpZihULnRvdWNoZXMubGVuZ3RoPDIpe2xldCBoPVQuY2hhbmdlZFRvdWNoZXNbMF0sRzE9YTE7aWYoaCYmRzEpXzEoe3R5cGU6ImVuZCIseDE6KGguY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTE6KGguY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQseDI6RzEueDIseTI6RzEueTJ9KTtlbHNlIGlmKEcxKV8xKHt0eXBlOiJlbmQiLC4uLkcxfSk7aTEuY3VycmVudD0hMSxiMS5jdXJyZW50PSExLGgxKG51bGwpfXJldHVybn1sZXQgQT1ULmNoYW5nZWRUb3VjaGVzWzBdO2lmKCFBKXJldHVybjtsZXQgVz0oQS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxyPShBLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKHQxKCksSTEuY3VycmVudClFMSh7dHlwZToiZW5kIix4OlcseTpyLGVkZ2U6bzB9KSxJMS5jdXJyZW50PSExO2Vsc2UgRTEoe3R5cGU6ImVuZCIseDpXLHk6cn0pfX0pLEsoImRpdiIse3JlZjp4MSwiZGF0YS10ZXN0aWQiOiJ0b3VjaC1pbmRpY2F0b3IiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLHdpZHRoOjI0LGhlaWdodDoyNCxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSg1OSwxMzAsMjQ2LDAuNSkiLGJveFNoYWRvdzoiMCAwIDhweCByZ2JhKDU5LDEzMCwyNDYsMC4zKSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLGExJiZLKGUse2NoaWxkcmVuOltLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTphOChhMS54MSxhMS55MSl9KSxLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTphOChhMS54MixhMS55Mil9KV19KSwhSzEmJiFtJiZLKCJkaXYiLHtzdHlsZTp7Li4uaTgsLi4uWnx8e319LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0fSxjaGlsZHJlbjoiQ29ubmVjdGluZy4uLiJ9KX0pLG0mJksoImRpdiIse3N0eWxlOmk4LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjptfSl9KSxEMSYmSygiZGl2Iix7c3R5bGU6cTcsY2hpbGRyZW46Sygic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIUgmJksoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6dCxzdHlsZTp7YmFja2dyb3VuZDoibm9uZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIpIixjb2xvcjoiI2FhYSIsZm9udFNpemU6MTEsZm9udEZhbWlseToibW9ub3NwYWNlIixwYWRkaW5nOiIycHggMTBweCIsY3Vyc29yOiJwb2ludGVyIixib3JkZXJSYWRpdXM6NH0sY2hpbGRyZW46IkhvbWUifSksSygic3BhbiIse3N0eWxlOntjb2xvcjpuPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOltfJiZLKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6Xz09PSJnb29kIj8iIzRhZGU4MCI6Xz09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSxuLCIgZnBzIl19KV19KV19KX12YXIgcTc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxpOD17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sbjg9MjA7ZnVuY3Rpb24gYTgoJCxRKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtRKjEwMH0lYCx3aWR0aDpuOCxoZWlnaHQ6bjgsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gTzAoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IFE9JC50b0xvd2VyQ2FzZSgpO2lmKFEuaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoUS5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKFEuaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciB3MT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0sZEo9dzEuaXBob25lLndpZHRoLGNKPXcxLmlwaG9uZS5oZWlnaHQscko9dzEuaXBob25lLmJlemVsWCxvSj13MS5pcGhvbmUuYmV6ZWxZLGlKPXcxLmlwaG9uZS5pbm5lclJhZGl1cyxzOD17ImlQaG9uZSAxNyBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNyBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE3Ijp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSBBaXIiOnt3aWR0aDoxMjYwLGhlaWdodDoyNzM2fSwiaVBob25lIDE2IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE2IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTYgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTYiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE2ZSI6e3dpZHRoOjExNzAsaGVpZ2h0OjI1MzJ9LCJpUGhvbmUgMTUgUHJvIE1heCI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUgUHJvIjp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNSBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGFkIFBybyAxMy1pbmNoIChNNSkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTUpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgUHJvIDEzLWluY2ggKE00KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNCkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBBaXIgMTMtaW5jaCAoTTMpIjp7d2lkdGg6MjA0OCxoZWlnaHQ6MjczMn0sImlQYWQgQWlyIDExLWluY2ggKE0zKSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIChBMTYpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgbWluaSAoQTE3IFBybykiOnt3aWR0aDoxNDg4LGhlaWdodDoyMjY2fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMyAoNDltbSkiOnt3aWR0aDo0MjIsaGVpZ2h0OjUxNH0sIkFwcGxlIFdhdGNoIFVsdHJhIDIgKDQ5bW0pIjp7d2lkdGg6NDEwLGhlaWdodDo1MDJ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTRSAzICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFdhdGNoIFNFICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBWaXNpb24gUHJvIjp7d2lkdGg6MTkyMCxoZWlnaHQ6MTA4MH19O2Z1bmN0aW9uIGUyKCQsUSl7bGV0IEo9JCYmJC53aWR0aD4wJiYkLmhlaWdodD4wPyQ6USxaPWkwKEopO2lmKFopcmV0dXJuYCR7Wi53aWR0aH0gLyAke1ouaGVpZ2h0fWA7cmV0dXJuYCR7dzEuaXBob25lLndpZHRoLTIqdzEuaXBob25lLmJlemVsWH0gLyAke3cxLmlwaG9uZS5oZWlnaHQtMip3MS5pcGhvbmUuYmV6ZWxZfWB9ZnVuY3Rpb24gczAoJD0iaXBob25lIixRKXtsZXQgSj1RP3M4W1FdOm51bGw7aWYoSilyZXR1cm4gSjtsZXQgWj13MVskXTtyZXR1cm57d2lkdGg6Wi53aWR0aC0yKlouYmV6ZWxYLGhlaWdodDpaLmhlaWdodC0yKlouYmV6ZWxZfX1mdW5jdGlvbiB0MCgkPSJpcGhvbmUiLFEpe2lmKGIwKFEpKXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA3MjA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtkZWZhdWx0OnJldHVybiA2MjB9c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDQwMDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2RlZmF1bHQ6cmV0dXJuIDMyMH19ZnVuY3Rpb24gJDUoJD0iaXBob25lIixRKXtsZXQgSj13MVskXSxaPUoud2lkdGgtMipKLmJlemVsWCxYPUouaGVpZ2h0LTIqSi5iZXplbFk7aWYoWjxYJiZiMChRKSlyZXR1cm5gJHtKLmlubmVyUmFkaXVzL1gqMTAwfSUgLyAke0ouaW5uZXJSYWRpdXMvWioxMDB9JWA7cmV0dXJuYCR7Si5pbm5lclJhZGl1cy9aKjEwMH0lIC8gJHtKLmlubmVyUmFkaXVzL1gqMTAwfSVgfWZ1bmN0aW9uIHQ4KCQpe2xldCBRPXcxWyQudHlwZV0sSj1RLndpZHRoLTIqUS5iZXplbFgsWj1RLmhlaWdodC0yKlEuYmV6ZWxZLFgsWTtpZihKPFomJmIwKCQuY29uZmlnPz9udWxsKSlYPVEuaW5uZXJSYWRpdXMvWixZPVEuaW5uZXJSYWRpdXMvSjtlbHNlIFg9US5pbm5lclJhZGl1cy9KLFk9US5pbm5lclJhZGl1cy9aO2xldCBxPVgqJC5jb250YWluZXJXaWR0aCxHPVkqJC5jb250YWluZXJIZWlnaHQsTj1NYXRoLnNxcnQoTWF0aC5tYXgocSpHLDApKTtyZXR1cm57cng6cSxyeTpHLHJHZW9tOk59fXZhciBWNz0xMyxCNz02MjtmdW5jdGlvbiAkMygkKXtsZXR7Y29udGFpbmVyV2lkdGg6USxjb250YWluZXJIZWlnaHQ6Sn09JCxaPShIKT0+SC50b0ZpeGVkKDMpLFg9KEgsayk9PntsZXQgXz1rLFM9ayxFPUI3LzIqKE1hdGguUEkvMTgwKSxiPTIyNSpNYXRoLlBJLzE4MCx2PWIrRSxYMT1iLUUsZj1fK0gqTWF0aC5jb3ModiksbD1TK0gqTWF0aC5zaW4odiksYz1fK0gqTWF0aC5jb3MoWDEpLCQxPVMrSCpNYXRoLnNpbihYMSksVTE9YE0gJHtaKGYpfSAke1oobCl9IEEgJHtaKEgpfSAke1ooSCl9IDAgMCAxICR7WihjKX0gJHtaKCQxKX1gLEsxPWBNICR7WihjKX0gJHtaKCQxKX0gQSAke1ooSCl9ICR7WihIKX0gMCAwIDAgJHtaKGYpfSAke1oobCl9YDtyZXR1cm57ZDpVMSxkRmlsbDpLMX19O2lmKCEoUT4wKXx8IShKPjApKXtsZXQgSD1WNyxrPU1hdGguY2VpbChIKzE0KSx7ZDpfLGRGaWxsOlN9PVgoSCxrKTtyZXR1cm57ZDpfLGRGaWxsOlMsdmlld0JveFNpemU6a319bGV0e3JHZW9tOll9PXQ4KCQpLHE9TWF0aC5tYXgoMi4yLE1hdGgubWluKDUuMiwwLjAxMSpNYXRoLm1pbihRLEopKSksRz1ZKjAuMzQrcSxOPU1hdGgubWluKFEsSiksQj1NYXRoLm1pbigyMixNYXRoLm1heCgxMixOKjAuMDUyKSk7Rz1NYXRoLm1pbigyNCxNYXRoLm1heCgxMixHLEIpKTtsZXQgTD1NYXRoLm1heCgyNixNYXRoLmNlaWwoRysxMykpLHtkOkYsZEZpbGw6Q309WChHLEwpO3JldHVybntkOkYsZEZpbGw6Qyx2aWV3Qm94U2l6ZTpMfX1mdW5jdGlvbiBRNSh7dHlwZTokPSJpcGhvbmUiLHN0cmVhbWluZzpRPSExfSl7c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIEsoVTcse3N0cmVhbWluZzpRfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIEsoTDcse3N0cmVhbWluZzpRfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBLKHo3LHtzdHJlYW1pbmc6UX0pO2RlZmF1bHQ6cmV0dXJuIEsoTjcse3N0cmVhbWluZzpRfSl9fWZ1bmN0aW9uIE43KHtzdHJlYW1pbmc6JD0hMX0pe3JldHVybiBLKCJzdmciLHt2aWV3Qm94OiIwIDAgNDI3IDg4MSIsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMCIseDoiLTAuMTY2OTkyIix5OiIwLjE2NjUwNCIsd2lkdGg6IjQyNyIsaGVpZ2h0OiI4ODAuNjY3IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pLEsoImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMSIseDoiNi4zMzIzNiIseToiNi4zMzM4MiIsd2lkdGg6IjQxNCIsaGVpZ2h0OiI4NjgiLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KV19KSxLKCJyZWN0Iix7eDoiMy44MzI2OCIseToiMy44MzM2NiIsd2lkdGg6IjQxOSIsaGVpZ2h0OiI4NzMiLHJ4OiI2Ni4xNjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0LjMzMzMzIn0pLEsoInJlY3QiLHt4OiIwLjgzMzMzMyIseToiMC44MzMzMzMiLHdpZHRoOiI0MjUiLGhlaWdodDoiODc5IixyeDoiNjkuMTY2NyIsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjApIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiMS42NjYwMiIseToiMiIsd2lkdGg6IjQyMy4zMzMiLGhlaWdodDoiODc3IixyeDoiNjguNjY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KX0pLEsoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMSkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiI3LjMzMjY4Iix5OiI3LjMzMzY2Iix3aWR0aDoiNDEyIixoZWlnaHQ6Ijg2NiIscng6IjYyLjY2NjciLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2NjY3In0pfSksSygicmVjdCIse3g6IjE1MS42NjYiLHk6IjMxLjY2NyIsd2lkdGg6IjEyMy4zMzMiLGhlaWdodDoiMzYiLHJ4OiIxOCIsZmlsbDoiYmxhY2siLHN0eWxlOntvcGFjaXR5OiQ/MDoxLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiBVNyh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgUT13MS5pcGFkLndpZHRoLEo9dzEuaXBhZC5oZWlnaHQsWj0zMCxYPTI2O3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpbSygiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOlEsaGVpZ2h0OkosZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxLKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6US0xMCxoZWlnaHQ6Si0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImJsdXIifSldfSldfSksSygicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpRLTcsaGVpZ2h0OkotNyxyeDoyNixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0In0pLEsoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOlEtMS42NjYsaGVpZ2h0OkotMS42NjYscng6MzAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksSygiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzApIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOlEtMyxoZWlnaHQ6Si0zLHJ4OjI5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksSygiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzEpIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6US0xMixoZWlnaHQ6Si0xMixyeDoyNCxzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLEsoImNpcmNsZSIse2N4OlEvMixjeTp3MS5pcGFkLmJlemVsWS8yKzEscjoiMyIsZmlsbDoiIzFhMWExYSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuOCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSksSygicmVjdCIse3g6KFEtMTIwKS8yLHk6Si13MS5pcGFkLmJlemVsWS8yLTIuNSx3aWR0aDoiMTIwIixoZWlnaHQ6IjUiLHJ4OiIyLjUiLGZpbGw6IndoaXRlIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zNSxtaXhCbGVuZE1vZGU6ImRpZmZlcmVuY2UiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiBMNyh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgUT13MS53YXRjaC53aWR0aCxKPXcxLndhdGNoLmhlaWdodCxaPTg4LFg9ODIsWT04LHE9MzYsRz1KLzItMTgtMTYsTj0yMixCPUovMi0xMSsxNjtyZXR1cm4gSygic3ZnIix7dmlld0JveDpgMCAwICR7UX0gJHtKfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOksoImZpbHRlciIse2lkOiJ3YXRjaC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6USsxMixoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pfSksSygicmVjdCIse3g6US0yLHk6Ryx3aWR0aDo4LGhlaWdodDozNixyeDoiMyIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMSJ9KSxLKCJyZWN0Iix7eDpRLTEseTpCLHdpZHRoOjYsaGVpZ2h0OjIyLHJ4OiIyLjUiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjAuOCJ9KSxLKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOlEtNyxoZWlnaHQ6Si03LHJ4OjgyLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMuNSJ9KSxLKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpRLTEuNjY2LGhlaWdodDpKLTEuNjY2LHJ4Ojg4LHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEsoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN3YXRjaC1nbG93MCkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6US0zLGhlaWdodDpKLTMscng6ODcsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KV19KX1mdW5jdGlvbiB6Nyh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgUT13MS52aXNpb24ud2lkdGgsSj13MS52aXNpb24uaGVpZ2h0LFo9NDAsWD0zNDtyZXR1cm4gSygic3ZnIix7dmlld0JveDpgMCAwICR7UX0gJHtKfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOlEsaGVpZ2h0OkosZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxLKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpRLTEwLGhlaWdodDpKLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMiLHJlc3VsdDoiYmx1ciJ9KV19KSxLKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzU1NTU1OCIsc3RvcE9wYWNpdHk6IjAuMyJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMzYTNhM2QiLHN0b3BPcGFjaXR5OiIwLjEifSldfSldfSksSygicmVjdCIse3g6IjAiLHk6IjAiLHdpZHRoOlEsaGVpZ2h0Okoscng6NDAsZmlsbDoidXJsKCN2aXNpb24tZ2xhc3MpIn0pLEsoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6US03LGhlaWdodDpKLTcscng6MzQsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMyJ9KSxLKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpRLTEuNjY2LGhlaWdodDpKLTEuNjY2LHJ4OjQwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEsoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzApIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOlEtMyxoZWlnaHQ6Si0zLHJ4OjM5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksSygiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MSkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpRLTEyLGhlaWdodDpKLTEyLHJ4OjMyLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksSygiZWxsaXBzZSIse2N4OlEvMixjeTpKLzIscng6US8yLTMwLHJ5OkovMi0yNCxzdHJva2U6IiM0YTRhNGQiLHN0cm9rZVdpZHRoOiIwLjUiLG9wYWNpdHk6IjAuMyIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMyx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9dmFyIFEzPVUwKG51bGwpO2Z1bmN0aW9uIEo1KCQpe2xldCBRPUwwKFEzKTtpZighUSl0aHJvdyBFcnJvcihgPFNpbXVsYXRvclRvb2xiYXIuJHskfT4gbXVzdCBiZSByZW5kZXJlZCBpbnNpZGUgPFNpbXVsYXRvclRvb2xiYXI+YCk7cmV0dXJuIFF9dmFyIEg3PXtkaXNwbGF5OiJmbGV4IixmbGV4V3JhcDoid3JhcCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOiI0cHggMTJweCIscGFkZGluZzoiOHB4IDEycHgiLGJvcmRlclJhZGl1czoyNCxiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSkiLGJveFNoYWRvdzoiMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKSIsbWluV2lkdGg6MjQwLHdpZHRoOiIxMDAlIn07ZnVuY3Rpb24gRjcoe2V4ZWM6JCxvblJvdGF0ZTpRLG9yaWVudGF0aW9uOkosZGV2aWNlVWRpZDpaLGRldmljZU5hbWU6WCxkZXZpY2VSdW50aW1lOlksc3RyZWFtaW5nOnE9ITEsZGlzYWJsZWQ6Rz0hMSxjaGlsZHJlbjpOLHN0eWxlOkIsLi4uVX0pe2xldCBWPU8wKFgpLEw9e2V4ZWM6JCxvblJvdGF0ZTpRLG9yaWVudGF0aW9uOkosZGV2aWNlVWRpZDpaLGRldmljZU5hbWU6WCxkZXZpY2VSdW50aW1lOlksZGV2aWNlVHlwZTpWLHN0cmVhbWluZzpxLGRpc2FibGVkOkd8fCFafHwhcX07cmV0dXJuIEsoUTMuUHJvdmlkZXIse3ZhbHVlOkwsY2hpbGRyZW46SygiZGl2Iix7ImRhdGEtc2ltdWxhdG9yLXRvb2xiYXIiOiEwLHN0eWxlOnsuLi5INywuLi5CfSwuLi5VLGNoaWxkcmVuOk59KX0pfXZhciBrNz17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0Iix0ZXh0QWxpZ246ImxlZnQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjZmZmIixwYWRkaW5nOiIycHggNHB4IixtYXJnaW46Ii0ycHggLTRweCIsYm9yZGVyUmFkaXVzOjYsY3Vyc29yOiJwb2ludGVyIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixsaW5lSGVpZ2h0OjEuMixmb250RmFtaWx5OiJpbmhlcml0In0sQTc9SDAoZnVuY3Rpb24oe25hbWU6USxzdWJ0aXRsZTpKLGhpZGVDaGV2cm9uOlosaGlkZVN1YnRpdGxlOlgsc3R5bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6RywuLi5OfSxCKXtsZXQgVT1KNSgiVGl0bGUiKSxbVix6XT1NKCExKSxMPVE/P1UuZGV2aWNlTmFtZT8/Ik5vIHNpbXVsYXRvciIsRj1KPz8oVS5kZXZpY2VSdW50aW1lP1UuZGV2aWNlUnVudGltZS5yZXBsYWNlKC9cLi8sIiAiKToi4oCUIik7cmV0dXJuIEsoImJ1dHRvbiIse3JlZjpCLHR5cGU6ImJ1dHRvbiIsImRhdGEtc2ltdWxhdG9yLXRvb2xiYXItdGl0bGUiOiEwLG9uTW91c2VFbnRlcjooQyk9Pnt6KCEwKSxxPy4oQyl9LG9uTW91c2VMZWF2ZTooQyk9Pnt6KCExKSxHPy4oQyl9LHN0eWxlOnsuLi5rNyxiYWNrZ3JvdW5kOlY/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IiwuLi5ZfSwuLi5OLGNoaWxkcmVuOltLKCJzcGFuIix7c3R5bGU6e2Rpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiIjZmZmIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46W0wsIVomJksoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46SygicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksIVgmJksoInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOkZ9KV19KX0pLE83PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gTTcoe3N0eWxlOiQsLi4uUX0pe3JldHVybiBLKCJkaXYiLHtzdHlsZTp7Li4uTzcsLi4uJH0sLi4uUX0pfXZhciBfNz17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czoxMixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIixwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sSzU9SDAoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6USx0b29sdGlwOkosc3R5bGU6WixkaXNhYmxlZDpYLHRpdGxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsb25Qb2ludGVyRG93bjpOLG9uRm9jdXM6QixvbkJsdXI6VSxvbkNsaWNrOlYsY2hpbGRyZW46eiwiYXJpYS1sYWJlbCI6TCwuLi5GfSxDKXtsZXQgSD1MMChRMyksaz1YfHxRfHxIPy5kaXNhYmxlZCxbXyxTXT1NKCExKSxbRSxiXT1NKCExKSx2PUkoITEpLFgxPXIwKCksZj1KPz9ZPz8odHlwZW9mIEw9PT0ic3RyaW5nIj9MOm51bGwpLGw9ISFmJiYhayYmKF98fEUpO3JldHVybiBLKCJidXR0b24iLHtyZWY6Qyx0eXBlOiJidXR0b24iLGRpc2FibGVkOmssImFyaWEtbGFiZWwiOkwsImFyaWEtZGVzY3JpYmVkYnkiOmY/WDE6dm9pZCAwLG9uUG9pbnRlckRvd246KGMpPT57di5jdXJyZW50PSEwLE4/LihjKX0sb25Nb3VzZUVudGVyOihjKT0+e1MoITApLHE/LihjKX0sb25Nb3VzZUxlYXZlOihjKT0+e1MoITEpLEc/LihjKX0sb25Gb2N1czooYyk9PntiKCF2LmN1cnJlbnQpLEI/LihjKX0sb25CbHVyOihjKT0+e3YuY3VycmVudD0hMSxiKCExKSxVPy4oYyl9LG9uQ2xpY2s6KGMpPT57UyghMSksYighMSksYy5jdXJyZW50VGFyZ2V0LmJsdXIoKSxWPy4oYyl9LHN0eWxlOnsuLi5fNyxjb2xvcjprPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIixiYWNrZ3JvdW5kOl8mJiFrPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsY3Vyc29yOms/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uWn0sLi4uRixjaGlsZHJlbjpbeixmJiZLKCJzcGFuIix7aWQ6WDEscm9sZToidG9vbHRpcCIsImFyaWEtaGlkZGVuIjohbCxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiI1MCUiLGJvdHRvbToiY2FsYygxMDAlICsgOHB4KSIsdHJhbnNmb3JtOmB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoJHtsPzA6Mn1weClgLG9wYWNpdHk6bD8xOjAscG9pbnRlckV2ZW50czoibm9uZSIsd2hpdGVTcGFjZToibm93cmFwIixwYWRkaW5nOiI0cHggN3B4Iixib3JkZXJSYWRpdXM6NixiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSIsZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGJveFNoYWRvdzoiMCA0cHggMTRweCByZ2JhKDAsMCwwLDAuMzIpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTJzIGVhc2UsIHRyYW5zZm9ybSAwLjEycyBlYXNlIix6SW5kZXg6MTAwfSxjaGlsZHJlbjpmfSldfSl9KTtmdW5jdGlvbiBXNygkLFEpe2lmKCQ9PT0id2F0Y2giKXJldHVybiBQNygpO2lmKFEpcmV0dXJuYHhjcnVuIHNpbWN0bCBsYXVuY2ggJHtRfSBjb20uYXBwbGUuc3ByaW5nYm9hcmRgO3JldHVybiJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUifWZ1bmN0aW9uIFA3KCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChRKT0+YC1lICcke1F9J2ApLnJlZHVjZSgoUSxKKT0+YCR7UX0gJHtKfWAsIm9zYXNjcmlwdCIpfXZhciBENz1LKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksVDc9Sygic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgNDQgNDQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46SygicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZmlsbDoiY3VycmVudENvbG9yIixkOiJNNDMuNjg3NSAxMi40Njg4VjguMjczNDRDNDMuNjg3NSA1LjcyNjU2IDQyLjk1MzEgMy43MTA5NCA0MS40ODQ0IDIuMjI2NTZDNDAuMDE1NiAwLjc0MjE4OCAzOCAwIDM1LjQzNzUgMEgzMS4xNDg0QzMwLjYwMTYgMCAzMC4xMzI4IDAuMTk1MzEyIDI5Ljc0MjIgMC41ODU5MzhDMjkuMzUxNiAwLjk3NjU2MiAyOS4xNTYyIDEuNDQ1MzEgMjkuMTU2MiAxLjk5MjE5QzI5LjE1NjIgMi41MjM0NCAyOS4zNTE2IDIuOTg0MzggMjkuNzQyMiAzLjM3NUMzMC4xMzI4IDMuNzY1NjIgMzAuNjAxNiAzLjk2MDk0IDMxLjE0ODQgMy45NjA5NEgzNS40Mzc1QzM2Ljc4MTIgMy45NjA5NCAzNy44MzU5IDQuMzQzNzUgMzguNjAxNiA1LjEwOTM4QzM5LjM1MTYgNS44NzUgMzkuNzI2NiA2LjkyOTY5IDM5LjcyNjYgOC4yNzM0NFYxMi40Njg4QzM5LjcyNjYgMTMgMzkuOTIxOSAxMy40NjA5IDQwLjMxMjUgMTMuODUxNkM0MC43MDMxIDE0LjI0MjIgNDEuMTcxOSAxNC40Mzc1IDQxLjcxODggMTQuNDM3NUM0Mi4yNSAxNC40Mzc1IDQyLjcxMDkgMTQuMjQyMiA0My4xMDE2IDEzLjg1MTZDNDMuNDkyMiAxMy40NjA5IDQzLjY4NzUgMTMgNDMuNjg3NSAxMi40Njg4Wk0wIDEyLjQ2ODhDMCAxMyAwLjE5NTMxMiAxMy40NjA5IDAuNTg1OTM4IDEzLjg1MTZDMC45NzY1NjIgMTQuMjQyMiAxLjQzNzUgMTQuNDM3NSAxLjk2ODc1IDE0LjQzNzVDMi41IDE0LjQzNzUgMi45NjA5NCAxNC4yNDIyIDMuMzUxNTYgMTMuODUxNkMzLjc0MjE5IDEzLjQ2MDkgMy45Mzc1IDEzIDMuOTM3NSAxMi40Njg4VjguMjczNDRDMy45Mzc1IDYuOTI5NjkgNC4zMjAzMSA1Ljg3NSA1LjA4NTk0IDUuMTA5MzhDNS44MzU5NCA0LjM0Mzc1IDYuODkwNjIgMy45NjA5NCA4LjI1IDMuOTYwOTRIMTIuNTM5MUMxMy4wODU5IDMuOTYwOTQgMTMuNTU0NyAzLjc2NTYyIDEzLjk0NTMgMy4zNzVDMTQuMzIwMyAyLjk4NDM4IDE0LjUwNzggMi41MjM0NCAxNC41MDc4IDEuOTkyMTlDMTQuNTA3OCAxLjQ0NTMxIDE0LjMyMDMgMC45NzY1NjIgMTMuOTQ1MyAwLjU4NTkzOEMxMy41NTQ3IDAuMTk1MzEyIDEzLjA4NTkgMCAxMi41MzkxIDBIOC4yNUM1LjY4NzUgMCAzLjY3MTg4IDAuNzQyMTg4IDIuMjAzMTIgMi4yMjY1NkMwLjczNDM3NSAzLjcxMDk0IDAgNS43MjY1NiAwIDguMjczNDRWMTIuNDY4OFpNNDMuNjg3NSAzMS4yNDIyQzQzLjY4NzUgMzAuNzEwOSA0My40OTIyIDMwLjI1IDQzLjEwMTYgMjkuODU5NEM0Mi43MTA5IDI5LjQ2ODggNDIuMjUgMjkuMjczNCA0MS43MTg4IDI5LjI3MzRDNDEuMTcxOSAyOS4yNzM0IDQwLjcwMzEgMjkuNDY4OCA0MC4zMTI1IDI5Ljg1OTRDMzkuOTIxOSAzMC4yNSAzOS43MjY2IDMwLjcxMDkgMzkuNzI2NiAzMS4yNDIyVjM1LjQzNzVDMzkuNzI2NiAzNi43ODEyIDM5LjM1MTYgMzcuODM1OSAzOC42MDE2IDM4LjYwMTZDMzcuODM1OSAzOS4zNjcyIDM2Ljc4MTIgMzkuNzUgMzUuNDM3NSAzOS43NUgzMS4xNDg0QzMwLjYwMTYgMzkuNzUgMzAuMTMyOCAzOS45NDUzIDI5Ljc0MjIgNDAuMzM1OUMyOS4zNTE2IDQwLjcyNjYgMjkuMTU2MiA0MS4xODc1IDI5LjE1NjIgNDEuNzE4OEMyOS4xNTYyIDQyLjI2NTYgMjkuMzUxNiA0Mi43MjY2IDI5Ljc0MjIgNDMuMTAxNkMzMC4xMzI4IDQzLjQ5MjIgMzAuNjAxNiA0My42ODc1IDMxLjE0ODQgNDMuNjg3NUgzNS40Mzc1QzM4IDQzLjY4NzUgNDAuMDE1NiA0Mi45NDUzIDQxLjQ4NDQgNDEuNDYwOUM0Mi45NTMxIDM5Ljk5MjIgNDMuNjg3NSAzNy45ODQ0IDQzLjY4NzUgMzUuNDM3NVYzMS4yNDIyWk0wIDMxLjI0MjJWMzUuNDM3NUMwIDM3Ljk4NDQgMC43MzQzNzUgMzkuOTkyMiAyLjIwMzEyIDQxLjQ2MDlDMy42NzE4OCA0Mi45NDUzIDUuNjg3NSA0My42ODc1IDguMjUgNDMuNjg3NUgxMi41MzkxQzEzLjA4NTkgNDMuNjg3NSAxMy41NTQ3IDQzLjQ5MjIgMTMuOTQ1MyA0My4xMDE2QzE0LjMyMDMgNDIuNzI2NiAxNC41MDc4IDQyLjI2NTYgMTQuNTA3OCA0MS43MTg4QzE0LjUwNzggNDEuMTg3NSAxNC4zMjAzIDQwLjcyNjYgMTMuOTQ1MyA0MC4zMzU5QzEzLjU1NDcgMzkuOTQ1MyAxMy4wODU5IDM5Ljc1IDEyLjUzOTEgMzkuNzVIOC4yNUM2Ljg5MDYyIDM5Ljc1IDUuODM1OTQgMzkuMzY3MiA1LjA4NTk0IDM4LjYwMTZDNC4zMjAzMSAzNy44MzU5IDMuOTM3NSAzNi43ODEyIDMuOTM3NSAzNS40Mzc1VjMxLjI0MjJDMy45Mzc1IDMwLjcxMDkgMy43NDIxOSAzMC4yNSAzLjM1MTU2IDI5Ljg1OTRDMi45NjA5NCAyOS40Njg4IDIuNSAyOS4yNzM0IDEuOTY4NzUgMjkuMjczNEMxLjQzNzUgMjkuMjczNCAwLjk3NjU2MiAyOS40Njg4IDAuNTg1OTM4IDI5Ljg1OTRDMC4xOTUzMTIgMzAuMjUgMCAzMC43MTA5IDAgMzEuMjQyMlpNMzEuNTkzOCAzMS44MDQ3QzMyLjc4MTIgMzEuODA0NyAzMy42NzE5IDMxLjUxNTYgMzQuMjY1NiAzMC45Mzc1QzM0Ljg1OTQgMzAuMzQzOCAzNS4xNTYyIDI5LjQ2ODggMzUuMTU2MiAyOC4zMTI1VjE2LjcxMDlDMzUuMTU2MiAxNS41MzkxIDM0Ljg1OTQgMTQuNjY0MSAzNC4yNjU2IDE0LjA4NTlDMzMuNjcxOSAxMy40OTIyIDMyLjc4MTIgMTMuMTk1MyAzMS41OTM4IDEzLjE5NTNIMjguODk4NEMyOC40NjA5IDEzLjE5NTMgMjguMTQ4NCAxMy4xNDA2IDI3Ljk2MDkgMTMuMDMxMkMyNy43NTc4IDEyLjkyMTkgMjcuNTIzNCAxMi43MjY2IDI3LjI1NzggMTIuNDQ1M0wyNi4zNjcyIDExLjUwNzhDMjYuMDg1OSAxMS4xOTUzIDI1Ljc4MTIgMTAuOTY4OCAyNS40NTMxIDEwLjgyODFDMjUuMTA5NCAxMC42NzE5IDI0LjY1NjIgMTAuNTkzOCAyNC4wOTM4IDEwLjU5MzhIMTkuNjE3MkMxOS4wNTQ3IDEwLjU5MzggMTguNjA5NCAxMC42NzE5IDE4LjI4MTIgMTAuODI4MUMxNy45Mzc1IDEwLjk2ODggMTcuNjI1IDExLjE5NTMgMTcuMzQzOCAxMS41MDc4TDE2LjQ3NjYgMTIuNDQ1M0MxNi4yMTA5IDEyLjc0MjIgMTUuOTc2NiAxMi45NDUzIDE1Ljc3MzQgMTMuMDU0N0MxNS41NTQ3IDEzLjE0ODQgMTUuMjM0NCAxMy4xOTUzIDE0LjgxMjUgMTMuMTk1M0gxMi4wNDY5QzEwLjg5MDYgMTMuMTk1MyAxMC4wMTU2IDEzLjQ5MjIgOS40MjE4OCAxNC4wODU5QzguODEyNSAxNC42NjQxIDguNTA3ODEgMTUuNTM5MSA4LjUwNzgxIDE2LjcxMDlWMjguMzEyNUM4LjUwNzgxIDI5LjQ2ODggOC44MTI1IDMwLjM0MzggOS40MjE4OCAzMC45Mzc1QzEwLjAxNTYgMzEuNTE1NiAxMC44OTA2IDMxLjgwNDcgMTIuMDQ2OSAzMS44MDQ3SDMxLjU5MzhaTTIxLjc5NjkgMjguOTQ1M0MyMC41OTM4IDI4Ljk0NTMgMTkuNSAyOC42NjQxIDE4LjUxNTYgMjguMTAxNkMxNy41MTU2IDI3LjUyMzQgMTYuNzI2NiAyNi43NDIyIDE2LjE0ODQgMjUuNzU3OEMxNS41NTQ3IDI0Ljc1NzggMTUuMjU3OCAyMy42MzI4IDE1LjI1NzggMjIuMzgyOEMxNS4yNTc4IDIxLjE3OTcgMTUuNTU0NyAyMC4wODU5IDE2LjE0ODQgMTkuMTAxNkMxNi43MjY2IDE4LjEwMTYgMTcuNTE1NiAxNy4zMTI1IDE4LjUxNTYgMTYuNzM0NEMxOS41IDE2LjE0MDYgMjAuNTkzOCAxNS44NDM4IDIxLjc5NjkgMTUuODQzOEMyMy4wMTU2IDE1Ljg0MzggMjQuMTI1IDE2LjE0MDYgMjUuMTI1IDE2LjczNDRDMjYuMTA5NCAxNy4zMTI1IDI2Ljg5ODQgMTguMTAxNiAyNy40OTIyIDE5LjEwMTZDMjguMDcwMyAyMC4wODU5IDI4LjM1OTQgMjEuMTc5NyAyOC4zNTk0IDIyLjM4MjhDMjguMzU5NCAyMy42MTcyIDI4LjA3MDMgMjQuNzI2NiAyNy40OTIyIDI1LjcxMDlDMjYuODk4NCAyNi42OTUzIDI2LjEwOTQgMjcuNDg0NCAyNS4xMjUgMjguMDc4MUMyNC4xMjUgMjguNjU2MiAyMy4wMTU2IDI4Ljk0NTMgMjEuNzk2OSAyOC45NDUzWk0yMS44MjAzIDI2LjkwNjJDMjIuNjQ4NCAyNi45MDYyIDIzLjQwNjIgMjYuNzEwOSAyNC4wOTM4IDI2LjMyMDNDMjQuNzgxMiAyNS45MTQxIDI1LjMyODEgMjUuMzY3MiAyNS43MzQ0IDI0LjY3OTdDMjYuMTI1IDIzLjk5MjIgMjYuMzIwMyAyMy4yMjY2IDI2LjMyMDMgMjIuMzgyOEMyNi4zMjAzIDIxLjU3MDMgMjYuMTI1IDIwLjgyMDMgMjUuNzM0NCAyMC4xMzI4QzI1LjMyODEgMTkuNDQ1MyAyNC43ODEyIDE4LjkwNjIgMjQuMDkzOCAxOC41MTU2QzIzLjQwNjIgMTguMTA5NCAyMi42NDg0IDE3LjkwNjIgMjEuODIwMyAxNy45MDYyQzIwLjk5MjIgMTcuOTA2MiAyMC4yNDIyIDE4LjEwOTQgMTkuNTcwMyAxOC41MTU2QzE4Ljg4MjggMTguOTA2MiAxOC4zMzU5IDE5LjQ0NTMgMTcuOTI5NyAyMC4xMzI4QzE3LjUyMzQgMjAuODIwMyAxNy4zMjAzIDIxLjU3MDMgMTcuMzIwMyAyMi4zODI4QzE3LjMyMDMgMjMuMjI2NiAxNy41MjM0IDIzLjk5MjIgMTcuOTI5NyAyNC42Nzk3QzE4LjMzNTkgMjUuMzY3MiAxOC44ODI4IDI1LjkxNDEgMTkuNTcwMyAyNi4zMjAzQzIwLjI0MjIgMjYuNzEwOSAyMC45OTIyIDI2LjkwNjIgMjEuODIwMyAyNi45MDYyWk0xMi42MzI4IDE4Ljk4NDRDMTIuMjEwOSAxOC45ODQ0IDExLjg1OTQgMTguODM1OSAxMS41NzgxIDE4LjUzOTFDMTEuMjgxMiAxOC4yNDIyIDExLjEzMjggMTcuODkwNiAxMS4xMzI4IDE3LjQ4NDRDMTEuMTMyOCAxNy4wNjI1IDExLjI4MTIgMTYuNzEwOSAxMS41NzgxIDE2LjQyOTdDMTEuODU5NCAxNi4xMzI4IDEyLjIxMDkgMTUuOTg0NCAxMi42MzI4IDE1Ljk4NDRDMTMuMDM5MSAxNS45ODQ0IDEzLjM5MDYgMTYuMTMyOCAxMy42ODc1IDE2LjQyOTdDMTMuOTg0NCAxNi43MTA5IDE0LjEzMjggMTcuMDYyNSAxNC4xMzI4IDE3LjQ4NDRDMTQuMTMyOCAxNy44OTA2IDEzLjk4NDQgMTguMjQyMiAxMy42ODc1IDE4LjUzOTFDMTMuMzkwNiAxOC44MzU5IDEzLjAzOTEgMTguOTg0NCAxMi42MzI4IDE4Ljk4NDRaIn0pfSksdzc9Sygic3ZnIix7d2lkdGg6IjIxIixoZWlnaHQ6IjIxIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Ik0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIn0pLEsoInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifSksSygicGF0aCIse2Q6Ik00IDE0djRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtMiJ9KV19KSxFNz1IMChmdW5jdGlvbih7b25DbGljazpRLC4uLkp9LFope2xldCBYPUo1KCJIb21lQnV0dG9uIik7cmV0dXJuIEsoSzUse3JlZjpaLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWSk9PntpZihRPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtYLmV4ZWMoVzcoWC5kZXZpY2VUeXBlLFguZGV2aWNlVWRpZCkpfSwuLi5KLGNoaWxkcmVuOkQ3fSl9KSxJNz1IMChmdW5jdGlvbih7b25DbGljazpRLC4uLkp9LFope2xldCBYPUo1KCJTY3JlZW5zaG90QnV0dG9uIik7cmV0dXJuIEsoSzUse3JlZjpaLCJhcmlhLWxhYmVsIjoiU2NyZWVuc2hvdCIsb25DbGljazooWSk9PntpZihRPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihYLmRldmljZVVkaWQpWC5leGVjKGB4Y3J1biBzaW1jdGwgaW8gJHtYLmRldmljZVVkaWR9IHNjcmVlbnNob3Qgfi9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSQoZGF0ZSArJXMpLnBuZ2ApfSwuLi5KLGNoaWxkcmVuOlQ3fSl9KSxiNz1IMChmdW5jdGlvbih7b25DbGljazpRLGZvcmNlRGlzYWJsZWQ6SiwuLi5afSxYKXtsZXQgWT1KNSgiUm90YXRlQnV0dG9uIikscT1ZLmRldmljZVR5cGU9PT0id2F0Y2gifHxZLmRldmljZVR5cGU9PT0idmlzaW9uIixbRyxOXT1NKCJwb3J0cmFpdCIpO3JldHVybiB5KCgpPT57TihZLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiKX0sW1kuZGV2aWNlVWRpZCxZLm9yaWVudGF0aW9uXSksSyhLNSx7cmVmOlgsImFyaWEtbGFiZWwiOiJSb3RhdGUgZGV2aWNlIixmb3JjZURpc2FibGVkOkp8fHEsb25DbGljazooQik9PntpZihRPy4oQiksQi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZighWS5kZXZpY2VVZGlkfHxxKXJldHVybjtsZXQgVT16MltZLm9yaWVudGF0aW9uPz9HXTtpZihOKFUpLFkub25Sb3RhdGUpWS5vblJvdGF0ZShVKTtlbHNlIFkuZXhlYyhgc2VydmUtc2ltIHJvdGF0ZSAke1V9IC1kICR7WS5kZXZpY2VVZGlkfWApfSwuLi5aLGNoaWxkcmVuOnc3fSl9KSxsMT1GNztsMS5UaXRsZT1BNztsMS5BY3Rpb25zPU03O2wxLkJ1dHRvbj1LNTtsMS5Ib21lQnV0dG9uPUU3O2wxLlNjcmVlbnNob3RCdXR0b249STc7bDEuUm90YXRlQnV0dG9uPWI3O3ZhciBaNT0oLi4uJCk9PiQuZmlsdGVyKChRLEosWik9PntyZXR1cm4gQm9vbGVhbihRKSYmUS50cmltKCkhPT0iIiYmWi5pbmRleE9mKFEpPT09Sn0pLmpvaW4oIiAiKS50cmltKCk7dmFyIGU4PSgkKT0+JC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyICQ5PSgkKT0+JC5yZXBsYWNlKC9eKFtBLVpdKXxbXHMtX10rKFx3KS9nLChRLEosWik9Plo/Wi50b1VwcGVyQ2FzZSgpOkoudG9Mb3dlckNhc2UoKSk7dmFyIEozPSgkKT0+e2xldCBRPSQ5KCQpO3JldHVybiBRLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Euc2xpY2UoMSl9O3ZhciBYNT17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07dmFyIFE5PSgkKT0+e2ZvcihsZXQgUSBpbiAkKWlmKFEuc3RhcnRzV2l0aCgiYXJpYS0iKXx8UT09PSJyb2xlInx8UT09PSJ0aXRsZSIpcmV0dXJuITA7cmV0dXJuITF9O3ZhciB5Nz1VMCh7fSk7dmFyIEo5PSgpPT5MMCh5Nyk7dmFyIEs5PUgwKCh7Y29sb3I6JCxzaXplOlEsc3Ryb2tlV2lkdGg6SixhYnNvbHV0ZVN0cm9rZVdpZHRoOlosY2xhc3NOYW1lOlg9IiIsY2hpbGRyZW46WSxpY29uTm9kZTpxLC4uLkd9LE4pPT57bGV0e3NpemU6Qj0yNCxzdHJva2VXaWR0aDpVPTIsYWJzb2x1dGVTdHJva2VXaWR0aDpWPSExLGNvbG9yOno9ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOkw9IiJ9PUo5KCk/P3t9LEY9Wj8/Vj9OdW1iZXIoSj8/VSkqMjQvTnVtYmVyKFE/P0IpOko/P1U7cmV0dXJuIGoxKCJzdmciLHtyZWY6TiwuLi5YNSx3aWR0aDpRPz9CPz9YNS53aWR0aCxoZWlnaHQ6UT8/Qj8/WDUuaGVpZ2h0LHN0cm9rZTokPz96LHN0cm9rZVdpZHRoOkYsY2xhc3NOYW1lOlo1KCJsdWNpZGUiLEwsWCksLi4uIVkmJiFROShHKSYmeyJhcmlhLWhpZGRlbiI6InRydWUifSwuLi5HfSxbLi4ucS5tYXAoKFtDLEhdKT0+ajEoQyxIKSksLi4uQXJyYXkuaXNBcnJheShZKT9ZOltZXV0pfSk7dmFyIE8xPSgkLFEpPT57bGV0IEo9SDAoKHtjbGFzc05hbWU6WiwuLi5YfSxZKT0+ajEoSzkse3JlZjpZLGljb25Ob2RlOlEsY2xhc3NOYW1lOlo1KGBsdWNpZGUtJHtlOChKMygkKSl9YCxgbHVjaWRlLSR7JH1gLFopLC4uLlh9KSk7cmV0dXJuIEouZGlzcGxheU5hbWU9SjMoJCksSn07dmFyIFM3PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4IixrZXk6ImZoM2hxYSJ9XV0sTTA9TzEoInBhbmVsLWxlZnQiLFM3KTt2YXIgeDc9W1sicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIsa2V5OiJ4d256aXAifV0sWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IixrZXk6IjE0cnN2cSJ9XV0seTA9TzEoInNxdWFyZS1tb3VzZS1wb2ludGVyIix4Nyk7dmFyIHY3PVtbInJlY3QiLHt4OiIyIix5OiI0Iix3aWR0aDoiMjAiLGhlaWdodDoiMTYiLHJ4OiIyIixrZXk6Iml6eGxhbyJ9XSxbInBhdGgiLHtkOiJNMTAgNHY0IixrZXk6InBwOHU4MCJ9XSxbInBhdGgiLHtkOiJNMiA4aDIwIixrZXk6ImQxMWNzNyJ9XSxbInBhdGgiLHtkOiJNNiA0djQiLGtleToiMXN2dGp3In1dXSxIMj1PMSgiYXBwLXdpbmRvdyIsdjcpO3ZhciBqNz1bWyJwYXRoIix7ZDoiTTcgN2gxMHYxMCIsa2V5OiIxdGl2bjkifV0sWyJwYXRoIix7ZDoiTTcgMTcgMTcgNyIsa2V5OiIxdmtpemEifV1dLEYyPU8xKCJhcnJvdy11cC1yaWdodCIsajcpO3ZhciBSNz1bWyJwYXRoIix7ZDoiTTIwIDYgOSAxN2wtNS01IixrZXk6IjFnbWYyYyJ9XV0sazI9TzEoImNoZWNrIixSNyk7dmFyIGc3PVtbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXSxBMj1PMSgiY2hldnJvbi1kb3duIixnNyk7dmFyIGg3PVtbInBhdGgiLHtkOiJtOSAxOCA2LTYtNi02IixrZXk6Im10aGh3cSJ9XV0sTzI9TzEoImNoZXZyb24tcmlnaHQiLGg3KTt2YXIgZjc9W1sicGF0aCIse2Q6Ik0xMiA2YTIgMiAwIDAgMSAzLjQxNC0xLjQxNGw2IDZhMiAyIDAgMCAxIDAgMi44MjhsLTYgNkEyIDIgMCAwIDEgMTIgMTh6IixrZXk6ImIxOWg1cSJ9XSxbInBhdGgiLHtkOiJNMiA2YTIgMiAwIDAgMSAzLjQxNC0xLjQxNGw2IDZhMiAyIDAgMCAxIDAgMi44MjhsLTYgNkEyIDIgMCAwIDEgMiAxOHoiLGtleToiaDdoNWdlIn1dXSxNMj1PMSgiZmFzdC1mb3J3YXJkIixmNyk7dmFyIG03PVtbInBhdGgiLHtkOiJtMyA3IDUgNS01IDVWNyIsa2V5OiJjb3VoaTcifV0sWyJwYXRoIix7ZDoibTIxIDctNSA1IDUgNVY3IixrZXk6IjZvdWlhNyJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiIsa2V5OiIxbGgxa2cifV0sWyJwYXRoIix7ZDoiTTEyIDE0djIiLGtleToiOGpjeHVkIn1dLFsicGF0aCIse2Q6Ik0xMiA4djIiLGtleToiMXdvcWl2In1dLFsicGF0aCIse2Q6Ik0xMiAydjIiLGtleToidHVzMDNtIn1dXSxfMj1PMSgiZmxpcC1ob3Jpem9udGFsLTIiLG03KTt2YXIgcDc9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIixrZXk6IjFtZ2xheSJ9XSxbInBhdGgiLHtkOiJNMTIgMmExNC41IDE0LjUgMCAwIDAgMCAyMCAxNC41IDE0LjUgMCAwIDAgMC0yMCIsa2V5OiIxM28xemwifV0sWyJwYXRoIix7ZDoiTTIgMTJoMjAiLGtleToiOWk0cHU0In1dXSxXMj1PMSgiZ2xvYmUiLHA3KTt2YXIgdTc9W1sicGF0aCIse2Q6Im0yMiAxMS0xLjI5Ni0xLjI5NmEyLjQgMi40IDAgMCAwLTMuNDA4IDBMMTEgMTYiLGtleToiOWt6eTM1In1dLFsicGF0aCIse2Q6Ik00IDhhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTIiLGtleToiMXQwZjB0In1dLFsiY2lyY2xlIix7Y3g6IjEzIixjeToiNyIscjoiMSIsZmlsbDoiY3VycmVudENvbG9yIixrZXk6IjFvYnVzNiJ9XSxbInJlY3QiLHt4OiI4Iix5OiIyIix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIyIixrZXk6IjFndmhieSJ9XV0sUDI9TzEoImltYWdlcyIsdTcpO3ZhciBsNz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTE1IDN2MTgiLGtleToiMTRudnAwIn1dXSxEMj1PMSgicGFuZWwtcmlnaHQiLGw3KTt2YXIgZDc9W1sicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiLGtleToiMTM1N2UzIn1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1IixrZXk6IjF4aHE4YSJ9XV0sVDI9TzEoInJvdGF0ZS1jY3ciLGQ3KTt2YXIgYzc9W1sicGF0aCIse2Q6Im0yMSAyMS00LjM0LTQuMzQiLGtleToiMTRqN3JqIn1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgiLGtleToiNGVqOTd1In1dXSx3Mj1PMSgic2VhcmNoIixjNyk7dmFyIHI3PVtbInBhdGgiLHtkOiJNMTIgM3YxMiIsa2V5OiIxeDBqNXMifV0sWyJwYXRoIix7ZDoibTE3IDgtNS01LTUgNSIsa2V5OiI3cTk3cjgifV0sWyJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiLGtleToiaWg3bjNoIn1dXSxFMj1PMSgidXBsb2FkIixyNyk7dmFyIG83PVtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0sWDA9TzEoIngiLG83KTtmdW5jdGlvbiBJMih7b3BlbjokfSl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIixzdHlsZTp7dHJhbnNmb3JtOiQ/InJvdGF0ZSgxODBkZWcpIjoicm90YXRlKDBkZWcpIn0sY2hpbGRyZW46SygicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gWTUoe2RpcjokfSl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9LKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6SygicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBiMigpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpLKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIEszKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltLKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksSygicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiB5Migpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gWjMoKXtyZXR1cm4gSyhNMix7c2l6ZToxMixzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9ZnVuY3Rpb24gWDMoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQgMiA5IDEzIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik02LjAwODUyIDE0LjgwNTRDNS44OTE4MSAxNC45MzUgNS43NTgxNSAxNC45OTk4IDUuNjA3NTYgMTQuOTk5OEM1LjQ1Njk2IDE1LjAwMzMgNS4zMjMzIDE0Ljk2MTMgNS4yMDY1OSAxNC44NzM3QzUuMDkzNjQgMTQuNzg2MSA1LjAyNTg3IDE0LjY3MjMgNS4wMDMyOCAxNC41MzIyQzQuOTg0NDYgMTQuMzkyMSA1LjA0NjU4IDE0LjI0NSA1LjE4OTY1IDE0LjA5MDlMNi45NDU5OSAxMi4xNTIyTDcuMjQ1MyAxMC44NzU1TDguMTk5NzEgMTEuOTg5M0w4LjA1ODUzIDEyLjM5MzlDOC4wMjA4OCAxMi40OTU1IDcuOTg2OTkgMTIuNTcwOCA3Ljk1Njg3IDEyLjYxOThDNy45MzA1MiAxMi42Njg4IDcuODc0MDQgMTIuNzQwNiA3Ljc4NzQ1IDEyLjgzNTJMNi4wMDg1MiAxNC44MDU0Wk0xMC4zNDU3IDE0LjY0MjVMOS4xMDMyOSAxMi4zMDQ2QzkuMDc2OTQgMTIuMjYyNSA5LjA1NDM1IDEyLjIyMjMgOS4wMzU1MyAxMi4xODM3QzkuMDE2NyAxMi4xNDUyIDguOTc3MTcgMTIuMDkwOSA4LjkxNjkzIDEyLjAyMDlMNy43MTk2OCAxMC42MTgxQzcuNDkzNzkgMTAuMzU1NCA3LjMzNzU0IDEwLjEyOTUgNy4yNTA5NSA5Ljk0MDM0QzcuMTY0MzUgOS43NDc3IDcuMTM0MjQgOS40OTkwMSA3LjE2MDU5IDkuMTk0MjlMNy4yNjIyNCA3Ljk4MDY1QzcuMjY5NzcgNy45MDcxIDcuMjMyMTIgNy44NTQ1NiA3LjE0OTI5IDcuODIzMDRDNy4wNjY0NyA3Ljc5MTUxIDYuOTg1NTIgNy44MDkwMyA2LjkwNjQ2IDcuODc1NTdMNi40NzE2MSA4LjI0MzM0TDYuMzQxNzIgOS42NzIzOUM2LjMyMjg5IDkuODQ3NTIgNi4yNjQ1NCA5Ljk3ODg3IDYuMTY2NjUgMTAuMDY2NEM2LjA2ODc2IDEwLjE1NCA1LjkzODg3IDEwLjE5MjUgNS43NzY5OCAxMC4xODJDNS42MTEzMiAxMC4xNzUgNS40ODMzMSAxMC4xMTkgNS4zOTI5NSAxMC4wMTM5QzUuMzA2MzYgOS45MDg4MiA1LjI2ODcxIDkuNzczOTcgNS4yODAwMSA5LjYwOTM1TDUuMzg3MzEgOC4zMDYzOUM1LjQwMjM3IDguMTI3NzYgNS40MzgxMyA3Ljk3NTQgNS40OTQ2MSA3Ljg0OTMxQzUuNTU0ODUgNy43MjMyMSA1LjY2MDI2IDcuNTkxODcgNS44MTA4NiA3LjQ1NTI3TDYuNzE0NDUgNi42MjUxNkM3LjAwNDM1IDYuMzYyNDcgNy4yNjk3NyA2LjE2MTA3IDcuNTEwNzMgNi4wMjA5NkM3Ljc1MTY4IDUuODc3MzYgOC4wMjg0MSA1LjgwNTU2IDguMzQwOSA1LjgwNTU2QzguNzU4OCA1LjgwNTU2IDkuMDc4ODIgNS45MzM0IDkuMzAwOTUgNi4xODkwOUM5LjUyNjg1IDYuNDQ0NzggOS42MjQ3NCA2Ljc2MTc2IDkuNTk0NjIgNy4xNDAwNEw5LjQ3NjAyIDguNzMxOTVDOS40NTM0MyA5LjAxNTY2IDkuNDE5NTUgOS4yNjI1OSA5LjM3NDM3IDkuNDcyNzVDOS4zMjkxOSA5LjY4MjkgOS4yNTM4OSA5LjkyOTgzIDkuMTQ4NDcgMTAuMjEzNUw5LjA5MiAxMC4zNjA2TDkuODY1NjkgMTEuMzc5OUM5LjkyMjE3IDExLjQ1MzQgOS45ODA1MiAxMS41MzQgMTAuMDQwOCAxMS42MjE2QzEwLjEwMSAxMS43MDkxIDEwLjE1MzcgMTEuNzk2NyAxMC4xOTg5IDExLjg4NDNMMTEuNDA3NCAxNC4xNjQ0QzExLjUwNTMgMTQuMzUwMSAxMS41MjQxIDE0LjUxMTIgMTEuNDYzOSAxNC42NDc4QzExLjQwMzcgMTQuNzg0NCAxMS4zMDIgMTQuODgyNSAxMS4xNTg5IDE0Ljk0MkMxMS4wMTk2IDE1LjAwMTUgMTAuODcwOSAxNS4wMTAzIDEwLjcxMjggMTQuOTY4M0MxMC41NTg0IDE0LjkyNjIgMTAuNDM2MSAxNC44MTc3IDEwLjM0NTcgMTQuNjQyNVpNMTIuNDA3IDcuOTY0ODlDMTIuNTg0IDcuOTY0ODkgMTIuNzI3IDguMDEwNDIgMTIuODM2MiA4LjEwMTQ5QzEyLjk0NTQgOC4xODkwNSAxMyA4LjMwNjM5IDEzIDguNDUzNUMxMyA4LjYxMTExIDEyLjk0NTQgOC43MzM3IDEyLjgzNjIgOC44MjEyN0MxMi43MzA4IDguOTA4ODMgMTIuNTg3NyA4Ljk1MjYxIDEyLjQwNyA4Ljk1MjYxSDExLjEzMDdDMTAuOTUzOCA4Ljk1MjYxIDEwLjgxNDUgOC45MzY4NSAxMC43MTI4IDguOTA1MzNDMTAuNjExMiA4Ljg3MDMgMTAuNTEzMyA4LjgwNzI2IDEwLjQxOTEgOC43MTYxOUwxMC4wNTIxIDguMzc5OTRMMTAuMTQyNCA3LjA0MDIxTDExLjAzNDcgNy45NjQ4OUgxMi40MDdaTTkuMDAxNjQgNS4zMTE2OUM4Ljc3MTk4IDUuMzExNjkgOC41NjMwMyA1LjI2MDkxIDguMzc0NzggNS4xNTkzM0M4LjE4NjUzIDUuMDU0MjYgOC4wMzU5NCA0LjkxNDE1IDcuOTIyOTkgNC43MzkwM0M3LjgxMzgxIDQuNTYzOSA3Ljc1OTIxIDQuMzY5NSA3Ljc1OTIxIDQuMTU1ODVDNy43NTkyMSAzLjk0MjE5IDcuODEzODEgMy43NDc4IDcuOTIyOTkgMy41NzI2N0M4LjAzNTk0IDMuMzk3NTQgOC4xODY1MyAzLjI1OTE5IDguMzc0NzggMy4xNTc2MkM4LjU2MzAzIDMuMDUyNTQgOC43NzE5OCAzIDkuMDAxNjQgM0M5LjIzMTMgMyA5LjQ0MDI2IDMuMDUyNTQgOS42Mjg1IDMuMTU3NjJDOS44MTY3NSAzLjI1OTE5IDkuOTY1NDYgMy4zOTc1NCAxMC4wNzQ2IDMuNTcyNjdDMTAuMTg3NiAzLjc0NzggMTAuMjQ0MSAzLjk0MjE5IDEwLjI0NDEgNC4xNTU4NUMxMC4yNDQxIDQuMzY5NSAxMC4xODc2IDQuNTYzOSAxMC4wNzQ2IDQuNzM5MDNDOS45NjU0NiA0LjkxNDE1IDkuODE2NzUgNS4wNTQyNiA5LjYyODUgNS4xNTkzM0M5LjQ0MDI2IDUuMjYwOTEgOS4yMzEzIDUuMzExNjkgOS4wMDE2NCA1LjMxMTY5WiJ9KX0pfWZ1bmN0aW9uIFkzKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMjYgMSAxMiAxNCIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMzMuMjQzNyA0LjU4NDU5QzMzLjAwMDggNC41ODQ1OSAzMi43ODE3IDQuNTI3MjggMzIuNTg2NiA0LjQxMjY4QzMyLjM5MTUgNC4yOTQxMiAzMi4yMzQyIDQuMTM4MDEgMzIuMTE0NyAzLjk0NDM3QzMxLjk5OTIgMy43NDY3NyAzMS45NDE0IDMuNTI5NDEgMzEuOTQxNCAzLjI5MjI5QzMxLjk0MTQgMy4wNTEyMiAzMS45OTkyIDIuODMzODcgMzIuMTE0NyAyLjY0MDIyQzMyLjIzNDIgMi40NDY1NyAzMi4zOTE1IDIuMjkyNDUgMzIuNTg2NiAyLjE3Nzg0QzMyLjc4MTcgMi4wNTkyOCAzMy4wMDA4IDIgMzMuMjQzNyAyQzMzLjQ4MjYgMiAzMy42OTk3IDIuMDU5MjggMzMuODk0OCAyLjE3Nzg0QzM0LjA5MzkgMi4yOTI0NSAzNC4yNTEyIDIuNDQ2NTcgMzQuMzY2NyAyLjY0MDIyQzM0LjQ4NjIgMi44MzM4NyAzNC41NDU5IDMuMDUxMjIgMzQuNTQ1OSAzLjI5MjI5QzM0LjU0NTkgMy41Mjk0MSAzNC40ODYyIDMuNzQ2NzcgMzQuMzY2NyAzLjk0NDM3QzM0LjI1MTIgNC4xMzgwMSAzNC4wOTM5IDQuMjk0MTIgMzMuODk0OCA0LjQxMjY4QzMzLjY5OTcgNC41MjcyOCAzMy40ODI2IDQuNTg0NTkgMzMuMjQzNyA0LjU4NDU5Wk0zMS4yMDA3IDkuNzQxOTFDMzEuMDczMyA5LjY3MDc3IDMwLjk0MTkgOS41OTU2OCAzMC44MDY1IDkuNTE2NjRDMzAuNjc1IDkuNDM3NiAzMC41NTk2IDkuMzQyNzYgMzAuNDYgOS4yMzIxQzMwLjM2MDQgOS4xMTc0OSAzMC4yOTI3IDguOTc3MiAzMC4yNTY5IDguODExMjJDMzAuMjI1IDguNjQxMjggMzAuMjQ0OSA4LjQyOTg1IDMwLjMxNjYgOC4xNzY5M0wzMC44MDY1IDYuNDgxNTNDMzAuODM4MyA2LjM2NjkyIDMwLjgxODQgNi4yNzk5OCAzMC43NDY3IDYuMjIwN0MzMC42NzkgNi4xNTc0NyAzMC41OTc0IDYuMTI5ODEgMzAuNTAxOCA2LjEzNzcxTDI5LjY1OTUgNi4xOTY5OUwyOS40MDI3IDcuOTIyMDJDMjkuMzc4OCA4LjEwNzc3IDI5LjMxNTEgOC4yNDYwOSAyOS4yMTE1IDguMzM2OThDMjkuMTA4IDguNDI3ODggMjguOTcyNiA4LjQ2NTQyIDI4LjgwNTMgOC40NDk2MUMyOC42NDIgOC40MzM4IDI4LjUxODYgOC4zNjY2MiAyOC40MzQ5IDguMjQ4MDZDMjguMzUxMyA4LjEyOTUgMjguMzIxNCA3Ljk3NzM1IDI4LjM0NTMgNy43OTE2MUwyOC42MjYxIDUuNjgxMjZDMjguNjUgNS41MTEzMiAyOC43MTU3IDUuMzc0OTggMjguODIzMiA1LjI3MjIzQzI4LjkzMDggNS4xNjk0OCAyOS4wNjgxIDUuMTEyMTcgMjkuMjM1NCA1LjEwMDMyTDMxLjMzMjEgNC45NTIxMkMzMS44ODE3IDQuOTEyNiAzMi4zMzU3IDQuOTY5OSAzMi42OTQxIDUuMTI0MDNDMzMuMDUyNSA1LjI3ODE2IDMzLjM2NzEgNS41Mzg5OSAzMy42Mzc5IDUuOTA2NTJMMzQuNjcxNCA3LjMyMzNMMzYuMTcwOCA2LjY2NTNDMzYuMzM4IDYuNTkwMjEgMzYuNDg5MyA2LjU3NDQgMzYuNjI0OCA2LjYxNzg3QzM2Ljc2MDIgNi42NTczOSAzNi44NjU3IDYuNzUyMjQgMzYuOTQxNCA2LjkwMjQyQzM3LjAxMyA3LjA1MjU5IDM3LjAxOSA3LjE5NDg2IDM2Ljk1OTMgNy4zMjkyM0MzNi45MDM1IDcuNDYzNiAzNi43OTIgNy41NjgzMiAzNi42MjQ4IDcuNjQzNDFMMzQuNzMxMSA4LjQ3OTI1QzM0LjYwMzcgOC41Mzg1MyAzNC40NzQzIDguNTUwMzkgMzQuMzQyOCA4LjUxNDgyQzM0LjIxNTQgOC40NzUzIDM0LjExMzggOC40MDAyMSAzNC4wMzgyIDguMjg5NTZMMzMuMzgxMSA3LjMzNTE2QzMzLjMxMzQgNy4yNDAzMSAzMy4yMjk4IDcuMTk4ODEgMzMuMTMwMiA3LjIxMDY3QzMzLjAzMDYgNy4yMjI1MyAzMi45NjQ5IDcuMjgzNzggMzIuOTMzMSA3LjM5NDQ0TDMyLjQ5MSA4LjkyOTc4TDM0LjczMTEgMTAuMzg4MUMzNC44NDI2IDEwLjQ1OTIgMzQuOTIyMyAxMC41NTYgMzQuOTcwMSAxMC42Nzg1QzM1LjAxNzkgMTAuODAxIDM1LjAyOTggMTAuOTI1NSAzNS4wMDU5IDExLjA1MkMzNC45ODYgMTEuMTc0NSAzNC45MjgyIDExLjI3NTMgMzQuODMyNyAxMS4zNTQzTDMyLjc3MTggMTMuMDk3MUMzMi42MDg1IDEzLjIzNTQgMzIuNDQ1MiAxMy4yOTg3IDMyLjI4MTkgMTMuMjg2OEMzMi4xMjI2IDEzLjI3NSAzMS45OTMyIDEzLjIxMzcgMzEuODkzNyAxMy4xMDMxQzMxLjc5ODEgMTIuOTk2NCAzMS43NTQzIDEyLjg2NTkgMzEuNzYyMiAxMi43MTE4QzMxLjc3MDIgMTIuNTUzNyAzMS44NTM4IDEyLjQwNzUgMzIuMDEzMSAxMi4yNzMxTDMzLjQ4ODYgMTEuMDE2NEwzMS4yMDA3IDkuNzQxOTFaTTI3LjIwNDQgMTQuODYzN0MyNy4wODQ5IDE0Ljc1NyAyNy4wMTcyIDE0LjYxODYgMjcuMDAxMyAxNC40NDg3QzI2Ljk4OTMgMTQuMjc4OCAyNy4wNjEgMTQuMTE2NyAyNy4yMTYzIDEzLjk2MjZMMjkuMjIzNSAxMS45NzY3TDI5LjkzNDMgOS40ODEwOEMzMC4wNDE4IDkuNjE1NDQgMzAuMTc1MyA5Ljc0NTg2IDMwLjMzNDUgOS44NzIzMkMzMC40OTc4IDkuOTk0ODMgMzAuNjkzIDEwLjExNzMgMzAuOTIgMTAuMjM5OUwzMS4xMTcxIDEwLjM0NjZMMzAuMzA0NyAxMi40MzMyQzMwLjI1MjkgMTIuNTU1NyAzMC4yMDkxIDEyLjY0MDcgMzAuMTczMyAxMi42ODgxQzMwLjE0MTQgMTIuNzM1NSAzMC4wODU2IDEyLjc5ODggMzAuMDA2IDEyLjg3NzhMMjguMDcwNiAxNC43ODA3QzI3LjkxOTIgMTQuOTI2OSAyNy43NjM5IDE1IDI3LjYwNDYgMTVDMjcuNDQ5MyAxNSAyNy4zMTU5IDE0Ljk1NDYgMjcuMjA0NCAxNC44NjM3WiJ9KX0pfWZ1bmN0aW9uIHEzKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNDkgMyAxNiAxMiIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNNTcuMDAyOCAxMS45NDlDNTYuODQ4IDExLjk0OSA1Ni43MTcyIDExLjg5ODcgNTYuNjEwMyAxMS43OThDNTYuNTAzNSAxMS42OTM5IDU2LjQ1MDEgMTEuNTcwNyA1Ni40NTAxIDExLjQyODRWOS4wMjg2M0w1NC40MjE2IDcuMTA3NzZDNTQuMjIyNyA2LjkyMDM1IDU0LjA5NTUgNi42OTgyNSA1NC4wNDAzIDYuNDQxNDRDNTMuOTg1IDYuMTgxMTYgNTQuMDEwOCA1LjkyNzgyIDU0LjExNzYgNS42ODE0MkM1NC4yMjgyIDUuNDM4NDkgNTQuMzk3NyA1LjI0NDE0IDU0LjYyNjEgNS4wOTgzOUM1NC44NTgzIDQuOTQ5MTYgNTUuMTE2MiA0Ljg3NDU0IDU1LjM5OTkgNC44NzQ1NEg1OC4xMTM3QzU4LjQyMzIgNC44NzQ1NCA1OC42ODQ4IDQuOTc2OTIgNTguODk4NSA1LjE4MTY4QzU5LjExNTkgNS4zODI5NiA1OS4yMjQ2IDUuNjI5MzYgNTkuMjI0NiA1LjkyMDg3VjcuNzYzNjZINjAuODk5M0M2MS4wNTA0IDcuNzYzNjYgNjEuMTc5NCA3LjgxMzk5IDYxLjI4NjIgNy45MTQ2M0M2MS4zOTMxIDguMDE1MjcgNjEuNDQ2NSA4LjEzODQ3IDYxLjQ0NjUgOC4yODQyM0M2MS40NDY1IDguNDI2NTEgNjEuMzkzMSA4LjU0Nzk4IDYxLjI4NjIgOC42NDg2MkM2MS4xNzk0IDguNzQ5MjYgNjEuMDUwNCA4Ljc5OTU4IDYwLjg5OTMgOC43OTk1OEg1OC42NzE5QzU4LjUyMDkgOC43OTk1OCA1OC4zOTAxIDguNzQ5MjYgNTguMjc5NSA4LjY0ODYyQzU4LjE3MjcgOC41NDc5OCA1OC4xMTkyIDguNDI2NTEgNTguMTE5MiA4LjI4NDIzVjYuOTg4MDNDNTguMTE5MiA2LjkxODYyIDU4LjA5OSA2Ljg1NDQyIDU4LjA1ODQgNi43OTU0MkM1OC4wMTc5IDYuNzMyOTUgNTcuOTQ0MiA2LjcwMTcyIDU3LjgzNzMgNi43MDE3Mkg1Ni4wNjMyQzU1Ljk5MzIgNi43MDE3MiA1NS45NDUzIDYuNzI5NDggNTUuOTE5NSA2Ljc4NTAxQzU1Ljg5NzQgNi44MzcwNiA1NS45MDg0IDYuODg3MzkgNTUuOTUyNiA2LjkzNTk3TDU3LjQwMDcgOC40NTYwMUM1Ny41MDM5IDguNTYzNiA1Ny41NTU1IDguNjgxNTkgNTcuNTU1NSA4LjgwOTk5VjExLjQyODRDNTcuNTU1NSAxMS41NzA3IDU3LjUwMDIgMTEuNjkzOSA1Ny4zODk3IDExLjc5OEM1Ny4yODI4IDExLjg5ODcgNTcuMTUzOCAxMS45NDkgNTcuMDAyOCAxMS45NDlaTTUzLjAwMTIgMTRDNTIuNTg0OCAxNCA1Mi4xOTQyIDEzLjkyNzEgNTEuODI5NSAxMy43ODE0QzUxLjQ2ODQgMTMuNjM1NiA1MS4xNDk2IDEzLjQzMjYgNTAuODczMyAxMy4xNzIzQzUwLjYwMDYgMTIuOTEyIDUwLjM4NjkgMTIuNjExOCA1MC4yMzIxIDEyLjI3MTdDNTAuMDc3NCAxMS45MjgyIDUwIDExLjU2MDMgNTAgMTEuMTY4MUM1MCAxMC43NzYgNTAuMDc3NCAxMC40MDk5IDUwLjIzMjEgMTAuMDY5OEM1MC4zODY5IDkuNzI2MTggNTAuNjAwNiA5LjQyNDI2IDUwLjg3MzMgOS4xNjM5OEM1MS4xNDk2IDguOTAzNyA1MS40Njg0IDguNzAwNjggNTEuODI5NSA4LjU1NDkyQzUyLjE5NDIgOC40MDkxNiA1Mi41ODQ4IDguMzM2MjggNTMuMDAxMiA4LjMzNjI4QzUzLjQyMTIgOC4zMzYyOCA1My44MTE4IDguNDA5MTYgNTQuMTcyOSA4LjU1NDkyQzU0LjUzNzcgOC43MDA2OCA1NC44NTY0IDguOTAzNyA1NS4xMjkxIDkuMTYzOThDNTUuNDA1NCA5LjQyNDI2IDU1LjYyMSA5LjcyNjE4IDU1Ljc3NTggMTAuMDY5OEM1NS45MzA1IDEwLjQwOTkgNTYuMDA3OSAxMC43NzYgNTYuMDA3OSAxMS4xNjgxQzU2LjAwNzkgMTEuNTYwMyA1NS45MzA1IDExLjkyODIgNTUuNzc1OCAxMi4yNzE3QzU1LjYyMSAxMi42MTE4IDU1LjQwNTQgMTIuOTEyIDU1LjEyOTEgMTMuMTcyM0M1NC44NTY0IDEzLjQzMjYgNTQuNTM3NyAxMy42MzU2IDU0LjE3MjkgMTMuNzgxNEM1My44MTE4IDEzLjkyNzEgNTMuNDIxMiAxNCA1My4wMDEyIDE0Wk01My4wMDEyIDEzLjI2NkM1My40MTAyIDEzLjI2NiA1My43ODIzIDEzLjE3MDYgNTQuMTE3NiAxMi45Nzk3QzU0LjQ1NjYgMTIuNzkyMyA1NC43MjU2IDEyLjU0MDcgNTQuOTI0NiAxMi4yMjQ5QzU1LjEyNzMgMTEuOTA1NiA1NS4yMjg2IDExLjU1MzQgNTUuMjI4NiAxMS4xNjgxQzU1LjIyODYgMTAuNzgyOSA1NS4xMjczIDEwLjQzMjQgNTQuOTI0NiAxMC4xMTY2QzU0LjcyNTYgOS43OTczMyA1NC40NTY2IDkuNTQzOTkgNTQuMTE3NiA5LjM1NjU5QzUzLjc4MjMgOS4xNjU3MSA1My40MTAyIDkuMDcwMjggNTMuMDAxMiA5LjA3MDI4QzUyLjU5NTkgOS4wNzAyOCA1Mi4yMjM3IDkuMTY1NzEgNTEuODg0NyA5LjM1NjU5QzUxLjU0OTQgOS41NDM5OSA1MS4yODA0IDkuNzk3MzMgNTEuMDc3OCAxMC4xMTY2QzUwLjg3ODggMTAuNDMyNCA1MC43NzkzIDEwLjc4MjkgNTAuNzc5MyAxMS4xNjgxQzUwLjc3OTMgMTEuNTUzNCA1MC44Nzg4IDExLjkwNTYgNTEuMDc3OCAxMi4yMjQ5QzUxLjI4MDQgMTIuNTQwNyA1MS41NDk0IDEyLjc5MjMgNTEuODg0NyAxMi45Nzk3QzUyLjIyMzcgMTMuMTcwNiA1Mi41OTU5IDEzLjI2NiA1My4wMDEyIDEzLjI2NlpNNjIuNDgwMSA5LjYxMTY2QzYyLjM2MjIgOS41MTQ0OSA2Mi4zMDE0IDkuNDE1NTggNjIuMjk3NyA5LjMxNDk0QzYyLjI5NzcgOS4yMTA4MyA2Mi4zMzA4IDkuMTI0MDcgNjIuMzk3MiA5LjA1NDY2QzYyLjQ2NzIgOC45ODUyNSA2Mi41NTM4IDguOTQ1MzQgNjIuNjU2OSA4LjkzNDkzQzYyLjc2MzggOC45MjEwNSA2Mi44Njg4IDguOTU1NzUgNjIuOTcyIDkuMDM5MDRDNjMuMjg4OSA5LjMwMjc5IDYzLjUzOTQgOS42MTY4NyA2My43MjM2IDkuOTgxMjZDNjMuOTA3OSAxMC4zNDU3IDY0IDEwLjc0MTMgNjQgMTEuMTY4MUM2NCAxMS41NjAzIDYzLjkyMjYgMTEuOTI4MiA2My43Njc5IDEyLjI3MTdDNjMuNjEzMSAxMi42MTE4IDYzLjM5NzYgMTIuOTEyIDYzLjEyMTIgMTMuMTcyM0M2Mi44NDg1IDEzLjQzMjYgNjIuNTI5OCAxMy42MzU2IDYyLjE2NSAxMy43ODE0QzYxLjgwMzkgMTMuOTI3MSA2MS40MTUyIDE0IDYwLjk5ODggMTRDNjAuNTgyNCAxNCA2MC4xOTE5IDEzLjkyNzEgNTkuODI3MSAxMy43ODE0QzU5LjQ2MjMgMTMuNjM1NiA1OS4xNDE3IDEzLjQzMjYgNTguODY1NCAxMy4xNzIzQzU4LjU5MjcgMTIuOTEyIDU4LjM3OSAxMi42MTE4IDU4LjIyNDIgMTIuMjcxN0M1OC4wNjk1IDExLjkyODIgNTcuOTkyMSAxMS41NjAzIDU3Ljk5MjEgMTEuMTY4MUM1Ny45OTIxIDEwLjk2MzQgNTguMDE0MiAxMC43NjU2IDU4LjA1ODQgMTAuNTc0N0M1OC4xMDYzIDEwLjM4MDQgNTguMTcyNyAxMC4xOTMgNTguMjU3NCAxMC4wMTI1QzU4LjMwOSA5LjkwMTQ0IDU4LjM4MDggOS44MzAzIDU4LjQ3MyA5Ljc5OTA2QzU4LjU2ODggOS43NjQzNiA1OC42NjI3IDkuNzY0MzYgNTguNzU0OCA5Ljc5OTA2QzU4Ljg1MDYgOS44MzAzIDU4LjkyMjUgOS44OTI3NiA1OC45NzA0IDkuOTg2NDdDNTkuMDE4MyAxMC4wODAyIDU5LjAxMDkgMTAuMTk4MiA1OC45NDgzIDEwLjM0MDRDNTguODMwNCAxMC42MDA3IDU4Ljc3MTQgMTAuODc2NiA1OC43NzE0IDExLjE2ODFDNTguNzcxNCAxMS41NTM0IDU4Ljg3MDkgMTEuOTA1NiA1OS4wNjk5IDEyLjIyNDlDNTkuMjcyNSAxMi41NDA3IDU5LjU0MTUgMTIuNzkyMyA1OS44NzY4IDEyLjk3OTdDNjAuMjE1OCAxMy4xNzA2IDYwLjU4OTggMTMuMjY2IDYwLjk5ODggMTMuMjY2QzYxLjQwNzggMTMuMjY2IDYxLjc4IDEzLjE3MDYgNjIuMTE1MyAxMi45Nzk3QzYyLjQ1MDYgMTIuNzkyMyA2Mi43MTc3IDEyLjU0MDcgNjIuOTE2NyAxMi4yMjQ5QzYzLjExOTQgMTEuOTA1NiA2My4yMjA3IDExLjU1MzQgNjMuMjIwNyAxMS4xNjgxQzYzLjIyMDcgMTAuODU5MyA2My4xNTI1IDEwLjU3MTIgNjMuMDE2MiAxMC4zMDRDNjIuODgzNSAxMC4wMzMzIDYyLjcwNDggOS44MDI1MyA2Mi40ODAxIDkuNjExNjZaTTYwLjk5ODggNi4yNzQ4NkM2MC43NzQgNi4yNzQ4NiA2MC41Njk1IDYuMjI0NTQgNjAuMzg1MyA2LjEyMzg5QzYwLjIwMTEgNi4wMTk3OCA2MC4wNTM3IDUuODgyNyA1OS45NDMyIDUuNzEyNjVDNTkuODM2MyA1LjUzOTEzIDU5Ljc4MjkgNS4zNDY1MiA1OS43ODI5IDUuMTM0ODNDNTkuNzgyOSA0LjkyNjYgNTkuODM2MyA0LjczNzQ2IDU5Ljk0MzIgNC41Njc0MUM2MC4wNTM3IDQuMzkzODkgNjAuMjAxMSA0LjI1NjgxIDYwLjM4NTMgNC4xNTYxN0M2MC41Njk1IDQuMDUyMDYgNjAuNzc0IDQgNjAuOTk4OCA0QzYxLjIxOTkgNCA2MS40MjA3IDQuMDUyMDYgNjEuNjAxMyA0LjE1NjE3QzYxLjc4MTggNC4yNTY4MSA2MS45MjU1IDQuMzkzODkgNjIuMDMyNCA0LjU2NzQxQzYyLjE0MjkgNC43Mzc0NiA2Mi4xOTgyIDQuOTI2NiA2Mi4xOTgyIDUuMTM0ODNDNjIuMTk4MiA1LjM0NjUyIDYyLjE0MjkgNS41MzkxMyA2Mi4wMzI0IDUuNzEyNjVDNjEuOTI1NSA1Ljg4MjcgNjEuNzgxOCA2LjAxOTc4IDYxLjYwMTMgNi4xMjM4OUM2MS40MjA3IDYuMjI0NTQgNjEuMjE5OSA2LjI3NDg2IDYwLjk5ODggNi4yNzQ4NloifSl9KX1mdW5jdGlvbiBHMygpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTYiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjcwIDUgMTggOSIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNODUuNTcyIDEyLjEwMzhDODYuMDYgMTIuMTAzOCA4Ni40MjA3IDExLjk4OTIgODYuNjU0MiAxMS43NjAxQzg2Ljg4NDcgMTEuNTI4MSA4NyAxMS4xNjQxIDg3IDEwLjY2ODFWMTAuMTExMkM4NyA5Ljc2OTAxIDg2LjkyMDcgOS40NjMwMiA4Ni43NjIgOS4xOTMyOUM4Ni42MDMzIDguOTIwNjUgODYuMzc1OCA4LjY5NzMzIDg2LjA3OTQgOC41MjMzMUM4NS43ODAxIDguMzQ5MjkgODUuNDIyMyA4LjIzNzYyIDg1LjAwNjIgOC4xODgzMkw4My4wMTY4IDcuOTUzMzlMODEuMTk4MSA2Ljg0ODM1QzgwLjkyMjcgNi42ODAxMyA4MC42NjA4IDYuNTQyMzcgODAuNDEyMyA2LjQzNTA1QzgwLjE2MDggNi4zMjQ4NCA3OS44OTc0IDYuMjM3ODMgNzkuNjIxOSA2LjE3NDAyQzc5LjM0NjUgNi4xMTAyMSA3OS4wMzgyIDYuMDY1MjYgNzguNjk2OSA2LjAzOTE1Qzc4LjM1MjYgNi4wMTMwNSA3Ny45NTE0IDYgNzcuNDkzNCA2SDc2LjgxMDhDNzYuMzg4NyA2IDc1Ljk5NSA2LjA0OTMxIDc1LjYyOTggNi4xNDc5MkM3NS4yNjE2IDYuMjQzNjMgNzQuOTE4OCA2LjM3MTI1IDc0LjYwMTUgNi41MzA3NkM3NC4yODExIDYuNjkwMjggNzMuOTg2MiA2Ljg2NTc2IDczLjcxNjggNy4wNTcxOEM3My40NDQ0IDcuMjQ4NiA3My4xOTU5IDcuNDM3MTIgNzIuOTcxNCA3LjYyMjc1TDcyLjI1NzQgNy44NTMzM0M3MS44MzIzIDcuOTg2NzQgNzEuNTE2NCA4LjE4Mzk3IDcxLjMwOTkgOC40NDVDNzEuMTAzMyA4LjcwMzEzIDcxIDkuMDMzNzcgNzEgOS40MzY5MlYxMC42NDJDNzEgMTEuMTQ2NyA3MS4xMTUzIDExLjUxNjUgNzEuMzQ1OCAxMS43NTE0QzcxLjU3NjMgMTEuOTg2MyA3MS45MzcgMTIuMTAzOCA3Mi40MjggMTIuMTAzOEg3Mi43MTU0QzcyLjcwMDQgMTIuMDM3MSA3Mi42ODg1IDExLjk3MDQgNzIuNjc5NSAxMS45MDM3QzcyLjY3MDUgMTEuODM0MSA3Mi42NjYgMTEuNzY0NSA3Mi42NjYgMTEuNjk0OEM3Mi42NjYgMTEuMzU1NSA3Mi43NDk4IDExLjA0OTUgNzIuOTE3NSAxMC43NzY5QzczLjA4NTEgMTAuNTA0MiA3My4zMTEyIDEwLjI4ODIgNzMuNTk1NiAxMC4xMjg3QzczLjg3NyA5Ljk2NjIzIDc0LjE5MjggOS44ODUwMiA3NC41NDMxIDkuODg1MDJDNzQuODkwNCA5Ljg4NTAyIDc1LjIwNjIgOS45NjYyMyA3NS40OTA2IDEwLjEyODdDNzUuNzcyIDEwLjI4ODIgNzUuOTk2NSAxMC41MDQyIDc2LjE2NDIgMTAuNzc2OUM3Ni4zMzE4IDExLjA0OTUgNzYuNDE1NyAxMS4zNTU1IDc2LjQxNTcgMTEuNjk0OEM3Ni40MTU3IDExLjc2NDUgNzYuNDExMiAxMS44MzQxIDc2LjQwMjIgMTEuOTAzN0M3Ni4zOTMyIDExLjk3MDQgNzYuMzgyNyAxMi4wMzcxIDc2LjM3MDggMTIuMTAzOEg4MS42MzgyQzgxLjYyMDMgMTIuMDM3MSA4MS42MDgzIDExLjk3MDQgODEuNjAyMyAxMS45MDM3QzgxLjU5MzMgMTEuODM0MSA4MS41ODg4IDExLjc2NDUgODEuNTg4OCAxMS42OTQ4QzgxLjU4ODggMTEuMzU1NSA4MS42NzI3IDExLjA0OTUgODEuODQwMyAxMC43NzY5QzgyLjAwNSAxMC41MDQyIDgyLjIyOTUgMTAuMjg4MiA4Mi41MTM5IDEwLjEyODdDODIuNzk1MyA5Ljk2NjIzIDgzLjExMTEgOS44ODUwMiA4My40NjE0IDkuODg1MDJDODMuODExNyA5Ljg4NTAyIDg0LjEyOSA5Ljk2NjIzIDg0LjQxMzQgMTAuMTI4N0M4NC42OTQ4IDEwLjI4ODIgODQuOTE5NCAxMC41MDQyIDg1LjA4NyAxMC43NzY5Qzg1LjI1MTcgMTEuMDQ5NSA4NS4zMzQgMTEuMzU1NSA4NS4zMzQgMTEuNjk0OEM4NS4zMzQgMTEuNzY0NSA4NS4zMzEgMTEuODM0MSA4NS4zMjUgMTEuOTAzN0M4NS4zMTYgMTEuOTcwNCA4NS4zMDQxIDEyLjAzNzEgODUuMjg5MSAxMi4xMDM4SDg1LjU3MlpNODMuNDYxNCAxM0M4My43MTI5IDEzIDgzLjk0MDQgMTIuOTQyIDg0LjE0NCAxMi44MjZDODQuMzQ3NiAxMi43MSA4NC41MDkyIDEyLjU1MzMgODQuNjI5IDEyLjM1NjFDODQuNzQ4NyAxMi4xNTg5IDg0LjgwODYgMTEuOTM4NSA4NC44MDg2IDExLjY5NDhDODQuODA4NiAxMS40NTEyIDg0Ljc0ODcgMTEuMjMwOCA4NC42MjkgMTEuMDMzNkM4NC41MDkyIDEwLjgzNjMgODQuMzQ3NiAxMC42Nzk3IDg0LjE0NCAxMC41NjM3QzgzLjk0MDQgMTAuNDQ3NyA4My43MTI5IDEwLjM4OTcgODMuNDYxNCAxMC4zODk3QzgzLjIwNjkgMTAuMzg5NyA4Mi45Nzc5IDEwLjQ0NzcgODIuNzc0MyAxMC41NjM3QzgyLjU3MDggMTAuNjc5NyA4Mi40MDkxIDEwLjgzNjMgODIuMjg5NCAxMS4wMzM2QzgyLjE2OTYgMTEuMjMwOCA4Mi4xMDk3IDExLjQ1MTIgODIuMTA5NyAxMS42OTQ4QzgyLjEwOTcgMTEuOTM4NSA4Mi4xNjk2IDEyLjE1ODkgODIuMjg5NCAxMi4zNTYxQzgyLjQwOTEgMTIuNTUzMyA4Mi41NzA4IDEyLjcxIDgyLjc3NDMgMTIuODI2QzgyLjk3NzkgMTIuOTQyIDgzLjIwNjkgMTMgODMuNDYxNCAxM1pNNzQuNTQzMSAxM0M3NC43OTQ2IDEzIDc1LjAyMjEgMTIuOTQyIDc1LjIyNTcgMTIuODI2Qzc1LjQyOTIgMTIuNzEgNzUuNTkwOSAxMi41NTMzIDc1LjcxMDYgMTIuMzU2MUM3NS44MzA0IDEyLjE1ODkgNzUuODkwMyAxMS45Mzg1IDc1Ljg5MDMgMTEuNjk0OEM3NS44OTAzIDExLjQ1MTIgNzUuODMwNCAxMS4yMzA4IDc1LjcxMDYgMTEuMDMzNkM3NS41OTA5IDEwLjgzNjMgNzUuNDI5MiAxMC42Nzk3IDc1LjIyNTcgMTAuNTYzN0M3NS4wMjIxIDEwLjQ0NzcgNzQuNzk0NiAxMC4zODk3IDc0LjU0MzEgMTAuMzg5N0M3NC4yODg2IDEwLjM4OTcgNzQuMDU5NiAxMC40NDc3IDczLjg1NiAxMC41NjM3QzczLjY1MjQgMTAuNjc5NyA3My40OTA4IDEwLjgzNjMgNzMuMzcxIDExLjAzMzZDNzMuMjUxMyAxMS4yMzA4IDczLjE5MTQgMTEuNDUxMiA3My4xOTE0IDExLjY5NDhDNzMuMTkxNCAxMS45Mzg1IDczLjI1MTMgMTIuMTU4OSA3My4zNzEgMTIuMzU2MUM3My40OTA4IDEyLjU1MzMgNzMuNjUyNCAxMi43MSA3My44NTYgMTIuODI2Qzc0LjA1OTYgMTIuOTQyIDc0LjI4ODYgMTMgNzQuNTQzMSAxM1oifSl9KX1mdW5jdGlvbiBqMCh7c2l6ZTokPTE4LHN0cm9rZVdpZHRoOlE9Mn0pe3JldHVybiBLKFQyLHtzaXplOiQsc3Ryb2tlV2lkdGg6UX0pfXZhciBaOT0iQWNjZXNzaWJpbGl0eSB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4iO2Z1bmN0aW9uIHE1KCQpe3JldHVybiAkPy5lcnJvcnM/LmluY2x1ZGVzKFo5KT8/ITF9ZnVuY3Rpb24gRzUoJCxRKXtpZigkPT09USlyZXR1cm4hMDtpZigkLmlkIT09US5pZHx8JC5wYXRoIT09US5wYXRofHwkLmxhYmVsIT09US5sYWJlbHx8JC52YWx1ZSE9PVEudmFsdWV8fCQucm9sZSE9PVEucm9sZXx8JC50eXBlIT09US50eXBlfHwkLmVuYWJsZWQhPT1RLmVuYWJsZWQpcmV0dXJuITE7bGV0IEo9JC5mcmFtZSxaPVEuZnJhbWU7cmV0dXJuIEo9PT1afHxKLng9PT1aLngmJkoueT09PVoueSYmSi53aWR0aD09PVoud2lkdGgmJkouaGVpZ2h0PT09Wi5oZWlnaHR9ZnVuY3Rpb24gVjUoJCxRKXtsZXQgSj0kLmxhYmVsfHwkLnJvbGV8fGBlbGVtZW50ICR7USsxfWAsWj0kLnJvbGV8fCQudHlwZTtyZXR1cm57aWQ6JC5pZCxwYXRoOiQucGF0aCxsYWJlbDpKLHZhbHVlOiQudmFsdWUscm9sZTpaLHR5cGU6JC50eXBlLGVuYWJsZWQ6JC5lbmFibGVkLGZyYW1lOiQuZnJhbWV9fWZ1bmN0aW9uIFg5KCQsUSl7bGV0IEo9TWF0aC5tYXgoMCwkLngpLFo9TWF0aC5tYXgoMCwkLnkpLFg9TWF0aC5taW4oUS53aWR0aCwkLngrJC53aWR0aCksWT1NYXRoLm1pbihRLmhlaWdodCwkLnkrJC5oZWlnaHQpLHE9TWF0aC5tYXgoMCxYLUopLEc9TWF0aC5tYXgoMCxZLVopO3JldHVybiBxPjAmJkc+MD97eDpKLHk6Wix3aWR0aDpxLGhlaWdodDpHfTpudWxsfWZ1bmN0aW9uIFIwKCQpe3JldHVybiAkLmlkfWZ1bmN0aW9uIFYzKCQpe3JldHVybmAkeyQueH0sJHskLnl9ICR7JC53aWR0aH14JHskLmhlaWdodH1gfWZ1bmN0aW9uIFk5KCQpe3JldHVybltgQVggbGFiZWw6ICR7JC5sYWJlbHx8IlVubGFiZWxlZCJ9YCwkLnJvbGU/YHJvbGU6ICR7JC5yb2xlfWA6IiIsJC50eXBlP2B0eXBlOiAkeyQudHlwZX1gOiIiLCQudmFsdWU/YHZhbHVlOiAkeyQudmFsdWV9YDoiIiwkLmlkP2BpZDogJHskLmlkfWA6IiIsYHBhdGg6ICR7JC5wYXRofWAsYGZyYW1lOiAke1YzKCQuZnJhbWUpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCI7ICIpfWZ1bmN0aW9uIGcwKCQpe3JldHVybiAkJiZ0eXBlb2YgJC5kZXZpY2U9PT0ic3RyaW5nIiYmdHlwZW9mICQudXJsPT09InN0cmluZyI/JDpudWxsfWZ1bmN0aW9uIFIxKCQpe2xldCBKPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmJhc2VQYXRoPz8od2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvKyQvLCIiKXx8Ii8iKTtyZXR1cm4gSj09PSIvIj9gLyR7JH1gOmAke0p9LyR7JH1gfXZhciBpNz01MDAwLG43PTIwMDAsUzI9bnVsbCxCMz1udWxsLGE3PTEsczc9MSwkMj1uZXcgTWFwLGUwPW5ldyBNYXA7ZnVuY3Rpb24gdDcoKXtsZXQgJD1uZXcgVVJMKFIxKCJleGVjLXdzIiksd2luZG93LmxvY2F0aW9uLmhyZWYpO3JldHVybiAkLnByb3RvY29sPSQucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsJC50b1N0cmluZygpfWZ1bmN0aW9uIGU3KCQpe2ZvcihsZXQgUSBvZiAkMi52YWx1ZXMoKSlRLnJlamVjdCgkKTskMi5jbGVhcigpfWZ1bmN0aW9uIHE5KCl7cmV0dXJuIFMyPz89bmV3IFByb21pc2UoKCQsUSk9PntsZXQgSj0hMSxaO3RyeXtaPW5ldyBXZWJTb2NrZXQodDcoKSl9Y2F0Y2gocSl7UzI9bnVsbCxRKHEpO3JldHVybn1sZXQgWD1zZXRUaW1lb3V0KCgpPT57aWYoIUopSj0hMCxTMj1udWxsLFEoRXJyb3IoImNvbnRyb2wgc29ja2V0IGNvbm5lY3QgdGltZW91dCIpKSxaLmNsb3NlKCl9LGk3KTtaLm9ub3Blbj0oKT0+e1ouc2VuZChKU09OLnN0cmluZ2lmeSh7dG9rZW46d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uZXhlY1Rva2VuPz8iIn0pKX0sWi5vbm1lc3NhZ2U9KHEpPT57bGV0IEc7dHJ5e0c9SlNPTi5wYXJzZShTdHJpbmcocS5kYXRhKSl9Y2F0Y2h7cmV0dXJufWlmKEcucmVhZHkpe2lmKCFKKUo9ITAsY2xlYXJUaW1lb3V0KFgpLEIzPVosJChaKTtyZXR1cm59aWYodHlwZW9mIEcuc3ViPT09Im51bWJlciIpe2xldCBCPWUwLmdldChHLnN1Yik7aWYoIUIpcmV0dXJuO2lmKEcuZW5kKWUwLmRlbGV0ZShHLnN1YiksQi5vbkVuZCgpO2Vsc2UgaWYodHlwZW9mIEcuZGF0YT09PSJzdHJpbmciKUIub25EYXRhKEcuZGF0YSk7cmV0dXJufWlmKHR5cGVvZiBHLmlkIT09Im51bWJlciIpcmV0dXJuO2xldCBOPSQyLmdldChHLmlkKTtpZighTilyZXR1cm47JDIuZGVsZXRlKEcuaWQpLE4ucmVzb2x2ZShHKX07bGV0IFk9KCk9PntTMj1udWxsLEIzPW51bGw7bGV0IHE9RXJyb3IoImNvbnRyb2wgc29ja2V0IGNsb3NlZCDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKTtlNyhxKTtsZXQgRz1bLi4uZTAudmFsdWVzKCldO2UwLmNsZWFyKCk7Zm9yKGxldCBOIG9mIEcpTi5vbkVuZCgpO2lmKCFKKUo9ITAsY2xlYXJUaW1lb3V0KFgpLFEocSl9O1oub25lcnJvcj1ZLFoub25jbG9zZT1ZfSksUzJ9YXN5bmMgZnVuY3Rpb24gRzkoJCxRKXtsZXQgSj1hd2FpdCBxOSgpO2lmKEoucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXRocm93IEVycm9yKCJjb250cm9sIHNvY2tldCBub3Qgb3BlbiIpO3JldHVybiBuZXcgUHJvbWlzZSgoWixYKT0+e2xldCBZPWE3KysscT0oKT0+eyQyLmRlbGV0ZShZKSxYKFE/LnJlYXNvbj8/bmV3IERPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9O2lmKFEpe2lmKFEuYWJvcnRlZCl7cSgpO3JldHVybn1RLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixxLHtvbmNlOiEwfSl9JDIuc2V0KFkse3Jlc29sdmU6KEcpPT57UT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLFooRyl9LHJlamVjdDooRyk9PntRPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWChHKX19KSxKLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2lkOlksLi4uJH0pKX0pfWFzeW5jIGZ1bmN0aW9uIFAxKCQsUSl7bGV0IEo9YXdhaXQgRzkoe2NvbW1hbmQ6JH0sUT8uc2lnbmFsKTtyZXR1cm57c3Rkb3V0Okouc3Rkb3V0Pz8iIixzdGRlcnI6Si5zdGRlcnI/PyIiLGV4aXRDb2RlOkouZXhpdENvZGU/PzF9fWFzeW5jIGZ1bmN0aW9uIE4zKCQsUSl7bGV0IEo9YXdhaXQgRzkoe3VpOiR9LFE/LnNpZ25hbCk7aWYoSi5lcnJvcil0aHJvdyBFcnJvcihKLmVycm9yKTtyZXR1cm4gSi5zdGF0dXM/P251bGx9ZnVuY3Rpb24gaDAoJCl7bGV0IFE9e29ubWVzc2FnZTpudWxsLG9uZXJyb3I6bnVsbCxjbG9zZTooKT0+e319LEo9ITEsWj1udWxsLFg9bnVsbCxZPSIiLHE9KEIpPT57WSs9Qi5yZXBsYWNlKC9cclxuL2csYApgKTtsZXQgVTt3aGlsZSgoVT1ZLmluZGV4T2YoYAoKYCkpIT09LTEpe2xldCBWPVkuc2xpY2UoMCxVKTtZPVkuc2xpY2UoVSsyKTtsZXQgej1WLnNwbGl0KGAKYCkuZmlsdGVyKChMKT0+TC5zdGFydHNXaXRoKCJkYXRhOiIpKS5tYXAoKEwpPT5MLnNsaWNlKDUpLnJlcGxhY2UoL14gLywiIikpLmpvaW4oYApgKTtpZih6KVEub25tZXNzYWdlPy4oe2RhdGE6en0pfX0sRz0oKT0+e2lmKEp8fFgpcmV0dXJuO1Eub25lcnJvcj8uKCksWD1zZXRUaW1lb3V0KCgpPT57WD1udWxsLE4oKX0sbjcpfSxOPWFzeW5jKCk9PntpZihKKXJldHVybjt0cnl7bGV0IEI9YXdhaXQgcTkoKTtpZihKKXJldHVybjtZPSIiLFo9czcrKyxlMC5zZXQoWix7b25EYXRhOnEsb25FbmQ6R30pLEIuc2VuZChKU09OLnN0cmluZ2lmeSh7c3ViOloscGF0aDokfSkpfWNhdGNoe0coKX19O3JldHVybiBOKCksUS5jbG9zZT0oKT0+e2lmKEo9ITAsWCljbGVhclRpbWVvdXQoWCk7aWYoWiE9PW51bGwpe2UwLmRlbGV0ZShaKTt0cnl7QjM/LnNlbmQoSlNPTi5zdHJpbmdpZnkoe3Vuc3ViOlp9KSl9Y2F0Y2h7fVo9bnVsbH19LFF9ZnVuY3Rpb24gazEoJCl7cmV0dXJuYCckeyQucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWZ1bmN0aW9uIFY5KCQpe2xldFtRLEpdPU0obnVsbCksW1osWF09TSgiQVggb2ZmIik7cmV0dXJuIHkoKCk9PntpZighJCl7SihudWxsKSxYKCJBWCBvZmYiKTtyZXR1cm59SihudWxsKSxYKCJBWCB3YWl0aW5nIik7bGV0IFk9aDAoJCk7cmV0dXJuIFkub25tZXNzYWdlPShxKT0+e3RyeXtsZXQgRz1KU09OLnBhcnNlKHEuZGF0YSk7SihHKSxYKHE1KEcpPyJBWCB1bmF2YWlsYWJsZSI6YCR7Ry5lbGVtZW50cy5sZW5ndGh9IEFYIGVsZW1lbnRzYCl9Y2F0Y2h7WCgiQVggcGFyc2UgZXJyb3IiKX19LFkub25lcnJvcj0oKT0+e1goIkFYIHJlY29ubmVjdGluZyIpfSwoKT0+WS5jbG9zZSgpfSxbJF0pLHtzbmFwc2hvdDpRLHN0YXR1czpafX12YXIgVTM9VTAoe3NuYXBzaG90Om51bGwsc3RhdHVzOiJBWCBvZmYifSksTDM9VTAobnVsbCk7ZnVuY3Rpb24gUTIoKXtyZXR1cm4gTDAoVTMpfWZ1bmN0aW9uIEI1KCl7bGV0ICQ9TDAoTDMpO2lmKCEkKXRocm93IEVycm9yKCJBWCBzZWxlY3Rpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpO3JldHVybiAkfXZhciBCOT14MChmdW5jdGlvbih7ZWxlbWVudDpRLGluZGV4Okosc2NyZWVuOlosaGlnaGxpZ2h0ZWQ6WCxzZWxlY3RlZDpZLG9uSGlnaGxpZ2h0OnEsb25TZWxlY3Q6R30pe2xldCBOPVIwKFEpLEI9VjUoUSxKKSxVPVg5KFEuZnJhbWUsWik7aWYoIVUpcmV0dXJuIG51bGw7bGV0IFY9WTkoQik7cmV0dXJuIEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImRhdGEtYXgta2V5IjpOLCJkYXRhLWF4LWlkIjpCLmlkLCJkYXRhLWF4LXBhdGgiOkIucGF0aCwiZGF0YS1heC1sYWJlbCI6Qi5sYWJlbCwiZGF0YS1heC12YWx1ZSI6Qi52YWx1ZSwiZGF0YS1heC1yb2xlIjpCLnJvbGUsImRhdGEtYXgtdHlwZSI6Qi50eXBlLCJkYXRhLWF4LWVuYWJsZWQiOlN0cmluZyhCLmVuYWJsZWQpLCJkYXRhLWF4LWZyYW1lIjpWMyhCLmZyYW1lKSwiZGF0YS1heC1zZWxlY3RlZCI6U3RyaW5nKFkpLCJhcmlhLWxhYmVsIjpRLmxhYmVsfHxWLHRpdGxlOlYsb25DbGljazooKT0+RyhOKSxvbk1vdXNlRW50ZXI6KCk9PnEoTiksb25Nb3VzZUxlYXZlOigpPT5xKG51bGwpLGNsYXNzTmFtZToiYWJzb2x1dGUgYm94LWJvcmRlciBtaW4tdy1weCBtaW4taC1weCBwLTAgcm91bmRlZC1bM3B4XSBib3JkZXIgY3Vyc29yLXBvaW50ZXIgcG9pbnRlci1ldmVudHMtYXV0byIsc3R5bGU6e2xlZnQ6YCR7VS54L1oud2lkdGgqMTAwfSVgLHRvcDpgJHtVLnkvWi5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke1Uud2lkdGgvWi53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke1UuaGVpZ2h0L1ouaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpZPyIjNjBhNWZhIjpYPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpZPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOlg/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LCgkLFEpPT4kLmluZGV4PT09US5pbmRleCYmJC5oaWdobGlnaHRlZD09PVEuaGlnaGxpZ2h0ZWQmJiQuc2VsZWN0ZWQ9PT1RLnNlbGVjdGVkJiYkLm9uSGlnaGxpZ2h0PT09US5vbkhpZ2hsaWdodCYmJC5vblNlbGVjdD09PVEub25TZWxlY3QmJiQuc2NyZWVuLndpZHRoPT09US5zY3JlZW4ud2lkdGgmJiQuc2NyZWVuLmhlaWdodD09PVEuc2NyZWVuLmhlaWdodCYmRzUoJC5lbGVtZW50LFEuZWxlbWVudCkpO2Z1bmN0aW9uIE45KCl7bGV0e3NuYXBzaG90OiR9PVEyKCkse2hpZ2hsaWdodGVkS2V5OlEsc2VsZWN0ZWRLZXk6SixzZXRIaWdobGlnaHRlZEtleTpaLHNldFNlbGVjdGVkS2V5Olh9PUI1KCk7aWYoISQ/LnNjcmVlbi53aWR0aHx8ISQ/LnNjcmVlbi5oZWlnaHQpcmV0dXJuIG51bGw7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIG92ZXJmbG93LWhpZGRlbiBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjokLmVsZW1lbnRzLm1hcCgoWSxxKT0+e2xldCBHPVIwKFkpO3JldHVybiBLKEI5LHtlbGVtZW50OlksaW5kZXg6cSxzY3JlZW46JC5zY3JlZW4saGlnaGxpZ2h0ZWQ6Rz09PVEsc2VsZWN0ZWQ6Rz09PUosb25IaWdobGlnaHQ6WixvblNlbGVjdDpYfSxHKX0pfSl9ZnVuY3Rpb24gVTkoe2VuZHBvaW50OiQsY2hpbGRyZW46UX0pe2xldHtzbmFwc2hvdDpKLHN0YXR1czpafT1WOSgkKSxbWCxZXT1NKG51bGwpLFtxLEddPU0obnVsbCk7eSgoKT0+e2lmKCEkKVkobnVsbCksRyhudWxsKX0sWyRdKTtsZXQgTj1XMSgoKT0+KHtzbmFwc2hvdDpKLHN0YXR1czpafSksW0osWl0pLEI9VzEoKCk9Pih7aGlnaGxpZ2h0ZWRLZXk6WCxzZWxlY3RlZEtleTpxLHNldEhpZ2hsaWdodGVkS2V5Olksc2V0U2VsZWN0ZWRLZXk6R30pLFtYLHFdKTtyZXR1cm4gSyhVMyx7dmFsdWU6TixjaGlsZHJlbjpLKEwzLHt2YWx1ZTpCLGNoaWxkcmVuOlF9KX0pfWZ1bmN0aW9uIEw5KHtvdmVybGF5RW5hYmxlZDokLHN0cmVhbWluZzpRLG9uVG9nZ2xlT3ZlcmxheTpKfSl7bGV0e3N0YXR1czpafT1RMigpLFtYLFldPU0oITEpLHE9JCYmUTtyZXR1cm4gSyhsMS5CdXR0b24seyJhcmlhLWxhYmVsIjokPyJIaWRlIGFjY2Vzc2liaWxpdHkgb3ZlcmxheSI6IlNob3cgYWNjZXNzaWJpbGl0eSBvdmVybGF5IiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOlosb25DbGljazpKLG9uTW91c2VFbnRlcjooKT0+WSghMCksb25Nb3VzZUxlYXZlOigpPT5ZKCExKSxzdHlsZTpxP3tiYWNrZ3JvdW5kOlg/InJnYmEoMjU1LDI1NSwyNTUsMC4xMikiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSJ9OnZvaWQgMCxjaGlsZHJlbjpLKHkwLHtzaXplOjE5LHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIE41KHtjbGFzc05hbWU6JD0iIn0pe3JldHVybiBLKCJhIix7aHJlZjoiaHR0cHM6Ly9naXRodWIuY29tL0V2YW5CYWNvbi9zZXJ2ZS1zaW0iLHRhcmdldDoiX2JsYW5rIixyZWw6Im5vcmVmZXJyZXIiLGNsYXNzTmFtZTpgaW5saW5lLWZsZXggaC1bMzBweF0gbWluLXctMCBpdGVtcy1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCBweC0xLjUgZm9udC1tb25vIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS82NSBuby11bmRlcmxpbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZS84NSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS13aGl0ZS82MCAkeyR9YC50cmltKCksImFyaWEtbGFiZWwiOiJPcGVuIHNlcnZlLXNpbSIsdGl0bGU6Ik9wZW4gc2VydmUtc2ltIixjaGlsZHJlbjoic2VydmUtc2ltIn0pfWZ1bmN0aW9uIHo5KHtvcGVuOiQsb25DbGljazpRfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgbGVmdC0zIHotMzAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcC0xIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gJHskPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6USxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46SyhNMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxLKE41LHt9KV19KX1mdW5jdGlvbiBDOSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpfHwkPD0wKXJldHVybiIwIEIiO2xldCBRPSQvMTA3Mzc0MTgyNDtpZihRPj0xKXJldHVybmAke1EudG9GaXhlZChRPj0xMD8wOjEpfSBHQmA7cmV0dXJuYCR7KCQvMTA0ODU3NikudG9GaXhlZCgwKX0gTUJgfWZ1bmN0aW9uIFU1KCQpe2xldCBRPSQubWF0Y2goL14oW2EtekEtWl0rKS0oLispJC8pO2lmKCFRKXJldHVybntvczokLHZlcnNpb246IiJ9O3JldHVybntvczpRWzFdLHZlcnNpb246UVsyXS5yZXBsYWNlKC8tL2csIi4iKX19ZnVuY3Rpb24gSDkoJCl7cmV0dXJuIFU1KCQpLnZlcnNpb258fCR9ZnVuY3Rpb24gTDUoJCl7bGV0e29zOlEsdmVyc2lvbjpKfT1VNSgkKTtyZXR1cm4gSj9gJHtRfSAke0p9YDpRfWZ1bmN0aW9uIEM1KHtjaHJvbWU6JCxzY3JlZW46USxpbnRlcmFjdGl2ZTpKPSExLG9uQnV0dG9uOlosb25Dcm93bldoZWVsOlh9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIixjaGlsZHJlbjpbJC5idXR0b25zLm1hcCgoWSk9PksoUSQse2Nocm9tZTokLGJ1dHRvbjpZLGludGVyYWN0aXZlOkosb25CdXR0b246WixvbldoZWVsOkomJlkubmFtZT09PSJkaWdpdGFsLWNyb3duIj9YOnZvaWQgMH0sYGJ1dHRvbi0ke1kubmFtZX1gKSksJC5jb21wb3NpdGVJbWFnZT9LKGs5LHtjaHJvbWU6JCxpbWFnZTokLmNvbXBvc2l0ZUltYWdlLHJlY3Q6JC5ib2R5LHpJbmRleDoxfSk6JC5zbGljZSYmJC5jb3JuZXI/SyhKJCx7Y2hyb21lOiR9KTpudWxsLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgb3ZlcmZsb3ctaGlkZGVuIGJnLWJsYWNrIixzdHlsZTp7Li4uejMoJCwkLnNjcmVlbiwyKSxib3JkZXJSYWRpdXM6JCQoJCl9LGNoaWxkcmVuOlF9KV19KX1mdW5jdGlvbiAkJCgkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBRJCh7Y2hyb21lOiQsYnV0dG9uOlEsaW50ZXJhY3RpdmU6SixvbkJ1dHRvbjpaLG9uV2hlZWw6WH0pe2xldFtZLHFdPU0oITEpLFtHLE5dPU0oITEpLEI9SShudWxsKSxVPUkobnVsbCksVj1JKFgpO1YuY3VycmVudD1YLHkoKCk9PntsZXQgYj1VLmN1cnJlbnQ7aWYoIWJ8fCFYKXJldHVybjtsZXQgdj0oWDEpPT57WDEucHJldmVudERlZmF1bHQoKSxYMS5zdG9wUHJvcGFnYXRpb24oKSxWLmN1cnJlbnQ/LihYMS5kZWx0YVksWDEuZGVsdGFNb2RlKX07cmV0dXJuIGIuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHYse3Bhc3NpdmU6ITF9KSwoKT0+Yi5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdil9LFshIVhdKTtsZXQgej1KJiZRLnVzYWdlUGFnZSE9bnVsbCYmUS51c2FnZSE9bnVsbCxMPUQoKCk9PntpZihCLmN1cnJlbnQ9PT1udWxsKXJldHVybjtCLmN1cnJlbnQ9bnVsbCxOKCExKSxaPy4oe3BoYXNlOiJ1cCIsYnV0dG9uOlF9KX0sW1EsWl0pLEY9RCgoYik9PntpZihiLmJ1dHRvbiE9PTAmJmIucG9pbnRlclR5cGU9PT0ibW91c2UiKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSxCLmN1cnJlbnQ9Yi5wb2ludGVySWQ7dHJ5e2IuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShiLnBvaW50ZXJJZCl9Y2F0Y2h7fU4oITApLFo/Lih7cGhhc2U6ImRvd24iLGJ1dHRvbjpRfSl9LFtRLFpdKSxDPVEub25Ub3A/NTowLEg9eiYmKFl8fEcpLGs9KEg/US5ob3Zlci54OjApKjEwMCxfPShIP1EuaG92ZXIueTowKSoxMDAsUz1HJiZRLmltYWdlRG93bj9RLmltYWdlRG93bjpRLmltYWdlLEU9ej97b25Qb2ludGVyRG93bjpGLG9uUG9pbnRlclVwOkwsb25Qb2ludGVyQ2FuY2VsOkwsb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT57cSghMSksTCgpfX06e307cmV0dXJuIEsoImRpdiIse3JlZjpVLHJvbGU6ej8iYnV0dG9uIjp2b2lkIDAsImFyaWEtbGFiZWwiOno/RjkoUS5uYW1lKTp2b2lkIDAsImFyaWEtaGlkZGVuIjp6P3ZvaWQgMDohMCx0aXRsZTp6P0Y5KFEubmFtZSk6dm9pZCAwLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi56MygkLFEuZnJhbWUsQyksdHJhbnNmb3JtOmt8fF8/YHRyYW5zbGF0ZSgke2t9JSwgJHtffSUpYDp2b2lkIDAsdHJhbnNpdGlvbjoidHJhbnNmb3JtIDAuMTJzIGVhc2UiLGN1cnNvcjp6PyJwb2ludGVyIjp2b2lkIDAscG9pbnRlckV2ZW50czp6PyJhdXRvIjoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUifSwuLi5FLGNoaWxkcmVuOlMmJksoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6QTkoJC5pZGVudGlmaWVyLFMpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUiLHN0eWxlOntvYmplY3RGaXQ6ImZpbGwiLGZpbHRlcjpHJiYhUS5pbWFnZURvd24/ImJyaWdodG5lc3MoMS40KSI6dm9pZCAwLHRyYW5zaXRpb246ImZpbHRlciAwLjEycyBlYXNlIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9KX1mdW5jdGlvbiBGOSgkKXtyZXR1cm4gJC5zcGxpdCgiLSIpLm1hcCgoUSk9PlEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrUS5zbGljZSgxKSkuam9pbigiICIpfWZ1bmN0aW9uIEokKHtjaHJvbWU6JH0pe2lmKCEkLnNsaWNlfHwhJC5jb3JuZXIpcmV0dXJuIG51bGw7bGV0e2JvZHk6USxjb3JuZXI6SixzbGljZTpafT0kLFg9TWF0aC5tYXgoUS53aWR0aC1KLndpZHRoKjIsMCksWT1NYXRoLm1heChRLmhlaWdodC1KLmhlaWdodCoyLDApLHE9W3trZXk6InRvcC1sZWZ0IixpbWFnZTpaLnRvcExlZnQscmVjdDp7eDpRLngseTpRLnksd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJ0b3AtcmlnaHQiLGltYWdlOloudG9wUmlnaHQscmVjdDp7eDpRLngrUS53aWR0aC1KLndpZHRoLHk6US55LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToiYm90dG9tLWxlZnQiLGltYWdlOlouYm90dG9tTGVmdCxyZWN0Ont4OlEueCx5OlEueStRLmhlaWdodC1KLmhlaWdodCx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImJvdHRvbS1yaWdodCIsaW1hZ2U6Wi5ib3R0b21SaWdodCxyZWN0Ont4OlEueCtRLndpZHRoLUoud2lkdGgseTpRLnkrUS5oZWlnaHQtSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJ0b3AiLGltYWdlOloudG9wLHJlY3Q6e3g6US54K0oud2lkdGgseTpRLnksd2lkdGg6WCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJib3R0b20iLGltYWdlOlouYm90dG9tLHJlY3Q6e3g6US54K0oud2lkdGgseTpRLnkrUS5oZWlnaHQtSi5oZWlnaHQsd2lkdGg6WCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJsZWZ0IixpbWFnZTpaLmxlZnQscmVjdDp7eDpRLngseTpRLnkrSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6WX19LHtrZXk6InJpZ2h0IixpbWFnZTpaLnJpZ2h0LHJlY3Q6e3g6US54K1Eud2lkdGgtSi53aWR0aCx5OlEueStKLmhlaWdodCx3aWR0aDpKLndpZHRoLGhlaWdodDpZfX1dO3JldHVybiBLKGUse2NoaWxkcmVuOnEuZmlsdGVyKChHKT0+Ry5yZWN0LndpZHRoPjAmJkcucmVjdC5oZWlnaHQ+MCkubWFwKChHKT0+SyhrOSx7Y2hyb21lOiQsaW1hZ2U6Ry5pbWFnZSxyZWN0OkcucmVjdCx6SW5kZXg6MX0sRy5rZXkpKX0pfWZ1bmN0aW9uIGs5KHtjaHJvbWU6JCxpbWFnZTpRLHJlY3Q6Six6SW5kZXg6Wn0pe3JldHVybiBLKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkE5KCQuaWRlbnRpZmllcixRKSxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4uejMoJCxKLFopLG9iamVjdEZpdDoiZmlsbCIscG9pbnRlckV2ZW50czoibm9uZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIEE5KCQsUSl7bGV0IEo9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChRKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7Sn1gOlIxKEopfWZ1bmN0aW9uIHozKCQsUSxKKXtyZXR1cm57bGVmdDp6NShRLngsJC5mcmFtZS53aWR0aCksdG9wOno1KFEueSwkLmZyYW1lLmhlaWdodCksd2lkdGg6ejUoUS53aWR0aCwkLmZyYW1lLndpZHRoKSxoZWlnaHQ6ejUoUS5oZWlnaHQsJC5mcmFtZS5oZWlnaHQpLHpJbmRleDpKfX1mdW5jdGlvbiB6NSgkLFEpe3JldHVybmAkeyQvUSoxMDB9JWB9ZnVuY3Rpb24gTzkoe25hbWU6JCxydW50aW1lOlEsY2hyb21lOkoscGxhY2Vob2xkZXJBc3NldDpaLGJ1c3k6WCxidXN5TGFiZWw6WT0iU3RhcnRpbmfigKYiLGVycm9yOnEsb25TdGFydDpHfSl7bGV0IE49TzAoJCksQj13MVtOXSxVPVo/P251bGwsVj1VP251bGw6Sj8/bnVsbCx6PVY/e3dpZHRoOlYuc2NyZWVuLndpZHRoLGhlaWdodDpWLnNjcmVlbi5oZWlnaHR9OnMwKE4sJCksTD10MChOLHopLEY9VT9LJChOLFUubmFtZSk6Vj9MKlYuZnJhbWUud2lkdGgvVi5zY3JlZW4ud2lkdGg6TCpCLndpZHRoLyhCLndpZHRoLTIqQi5iZXplbFgpLEM9VT97d2lkdGg6VS53aWR0aCxoZWlnaHQ6VS5oZWlnaHR9OlY/e3dpZHRoOlYuZnJhbWUud2lkdGgsaGVpZ2h0OlYuZnJhbWUuaGVpZ2h0fTp7d2lkdGg6Qi53aWR0aCxoZWlnaHQ6Qi5oZWlnaHR9LEg9YCR7Qy53aWR0aH0gLyAke0MuaGVpZ2h0fWAsaz0oQy53aWR0aC9DLmhlaWdodCpaJChOKSkudG9GaXhlZCgyKSxfPU49PT0idmlzaW9uIj9LKHEkLHt9KTpLKFgkLHt0eXBlOk59KTtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtNSBtaW4tdy0wIHctZnVsbCIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIixzdHlsZTp7d2lkdGg6YG1pbigxMDAlLCAke0Z9cHgsICR7a31kdmgpYCxtYXhXaWR0aDpGLGFzcGVjdFJhdGlvOkh9LGNoaWxkcmVuOlU/SyhZJCx7bmFtZTpVLm5hbWUsZmFsbGJhY2s6X30pOlY/SygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOksoQzUse2Nocm9tZTpWfSl9KTpffSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTdweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjokfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbTDUoUSksIiBTaW11bGF0b3IiXX0pXX0pLHEmJksoImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTJweF0gZm9udC1tb25vIG1heC13LTkwIHRleHQtY2VudGVyIixjaGlsZHJlbjpxfSksSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcsZGlzYWJsZWQ6WCxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTUgcHktMiByb3VuZGVkLWZ1bGwgdGV4dC1bMTRweF0gZm9udC1tZWRpdW0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtYPyJiZy13aGl0ZS84IHRleHQtd2hpdGUvNTUgY3Vyc29yLWRlZmF1bHQiOiJiZy13aGl0ZS8xMiB0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzE4IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltYJiZLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InNpemUtMy41IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOSkifX0pLFg/WToiU3RhcnQiXX0pXX0pfWZ1bmN0aW9uIEskKCQsUSl7aWYoJD09PSJ3YXRjaCIpe2lmKFEuaW5jbHVkZXMoInVsdHJhIikpcmV0dXJuIDI1NTtpZihRLmluY2x1ZGVzKCJ3YXRjaC1zZS0iKXx8US5pbmNsdWRlcygiYXBwbGUtd2F0Y2gtc2UtIikpcmV0dXJuIDIzODtyZXR1cm4gMjUwfWlmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzkwO2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDM0MDtyZXR1cm4gMjgwfWZ1bmN0aW9uIFokKCQpe2lmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzQ7aWYoJD09PSJpcGFkIilyZXR1cm4gNTA7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIDU2O3JldHVybiA1Mn1mdW5jdGlvbiBYJCh7dHlwZTokfSl7bGV0IFE9dzFbJF07cmV0dXJuIEsoZSx7Y2hpbGRyZW46W0soInN2ZyIse3ZpZXdCb3g6YDAgMCAke1Eud2lkdGh9ICR7US5oZWlnaHR9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOksoImxpbmVhckdyYWRpZW50Iix7aWQ6InBsYWNlaG9sZGVyLXNjcmVlbiIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNmZhOGU2In0pLEsoInN0b3AiLHtvZmZzZXQ6IjU1JSIsc3RvcENvbG9yOiIjNWI5M2Q2In0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzUxODhjZiJ9KV19KX0pLEsoInJlY3QiLHt4OlEuYmV6ZWxYLHk6US5iZXplbFksd2lkdGg6US53aWR0aC0yKlEuYmV6ZWxYLGhlaWdodDpRLmhlaWdodC0yKlEuYmV6ZWxZLHJ4OlEuaW5uZXJSYWRpdXMsZmlsbDoidXJsKCNwbGFjZWhvbGRlci1zY3JlZW4pIn0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpLKFE1LHt0eXBlOiR9KX0pXX0pfWZ1bmN0aW9uIFkkKHtuYW1lOiQsZmFsbGJhY2s6UX0pe2xldFtKLFpdPU0oImxvYWRpbmciKTtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbSiE9PSJsb2FkZWQiJiZRLEohPT0iZXJyb3IiJiZLKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkckKCQpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUgb2JqZWN0LWNvbnRhaW4iLHN0eWxlOntXZWJraXRVc2VyRHJhZzoibm9uZSJ9LG9uTG9hZDooKT0+WigibG9hZGVkIiksb25FcnJvcjooKT0+WigiZXJyb3IiKX0pXX0pfWZ1bmN0aW9uIHEkKCl7bGV0e3dpZHRoOiQsaGVpZ2h0OlF9PXcxLnZpc2lvbjtyZXR1cm4gSygic3ZnIix7dmlld0JveDpgMCAwICR7JH0gJHtRfWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjohMCxjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzI4MjgyYiJ9KSxLKCJzdG9wIix7b2Zmc2V0OiI1NCUiLHN0b3BDb2xvcjoiIzEyMTIxNCJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwNzA3MDgifSldfSksSygibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMzMTM1M2EifSksSygic3RvcCIse29mZnNldDoiNDglIixzdG9wQ29sb3I6IiMwYTBiMGQifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pLEsoInJhZGlhbEdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1sZW5zIixjeDoiNTAlIixjeToiNDYlIixyOiI2MCUiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjAyODMyIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjcyJSIsc3RvcENvbG9yOiIjMDkwYTBkIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KV19KSxLKCJwYXRoIix7ZDoiTTk1IDE3N0M5NSAxMTkgMTQ3IDg2IDIxOCA5MUMyNTcgOTQgMjg2IDExMSAzMjAgMTExQzM1NCAxMTEgMzgzIDk0IDQyMiA5MUM0OTMgODYgNTQ1IDExOSA1NDUgMTc3VjIyMkM1NDUgMjc4IDUwMSAzMTEgNDQzIDMxMEMzOTggMzA5IDM3MSAyODYgMzQ1IDI2OEMzMjkgMjU3IDMxMSAyNTcgMjk1IDI2OEMyNjkgMjg2IDI0MiAzMDkgMTk3IDMxMEMxMzkgMzExIDk1IDI3OCA5NSAyMjJWMTc3WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwpIixzdHJva2U6IiMzZDNkNDIiLHN0cm9rZVdpZHRoOiI3In0pLEsoInBhdGgiLHtkOiJNMTE3IDE4MUMxMTcgMTM0IDE1NyAxMTIgMjIwIDExNkMyNjAgMTE5IDI4NyAxMzYgMzIwIDEzNkMzNTMgMTM2IDM4MCAxMTkgNDIwIDExNkM0ODMgMTEyIDUyMyAxMzQgNTIzIDE4MVYyMTdDNTIzIDI2MyA0ODggMjg3IDQzOSAyODdDMzk5IDI4NyAzNjkgMjY0IDM0NSAyNTBDMzI5IDI0MCAzMTEgMjQwIDI5NSAyNTBDMjcxIDI2NCAyNDEgMjg3IDIwMSAyODdDMTUyIDI4NyAxMTcgMjYzIDExNyAyMTdWMTgxWiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MpIixzdHJva2U6IiMxNzE4MWIiLHN0cm9rZVdpZHRoOiI1In0pLEsoInBhdGgiLHtkOiJNMTQzIDE4NkMxNDUgMTQ4IDE3NiAxMzUgMjI2IDEzOEMyNjQgMTQxIDI4OSAxNTYgMzIwIDE1NkMzNTEgMTU2IDM3NiAxNDEgNDE0IDEzOEM0NjQgMTM1IDQ5NSAxNDggNDk3IDE4NlYyMTNDNDk3IDI1MCA0NjkgMjY2IDQzMiAyNjZDMzk0IDI2NiAzNjkgMjQ2IDM0MyAyMzVDMzI4IDIyOSAzMTIgMjI5IDI5NyAyMzVDMjcxIDI0NiAyNDYgMjY2IDIwOCAyNjZDMTcxIDI2NiAxNDMgMjUwIDE0MyAyMTNWMTg2WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItbGVucykiLHN0cm9rZToiIzI2MmEyZiIsc3Ryb2tlV2lkdGg6IjIifSksSygicGF0aCIse2Q6Ik0xNTEgMTcxQzE3OSAxNTAgMjE3IDE0NyAyNTEgMTU0TTM4OSAxNTRDNDIzIDE0NyA0NjEgMTUwIDQ4OSAxNzEiLHN0cm9rZToiIzRlNTM1YSIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pLEsoInBhdGgiLHtkOiJNMjc3IDIzM0MyODkgMjI0IDMwNCAyMTkgMzIwIDIxOUMzMzYgMjE5IDM1MSAyMjQgMzYzIDIzMyIsc3Ryb2tlOiIjM2I0MDQ2IixzdHJva2VXaWR0aDoiNCIsc3Ryb2tlTGluZWNhcDoicm91bmQifSldfSl9ZnVuY3Rpb24gRyQoJCl7bGV0IFE9YGdyaWQvYXBpL2RldmljZS1wbGFjZWhvbGRlci1hc3NldD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtRfWA6UjEoUSl9ZnVuY3Rpb24gSjIoe29wZW46JCx3aWR0aDpRLGNoaWxkcmVuOkosc3R5bGU6WixzaWRlOlg9InJpZ2h0In0pe3JldHVybiBLKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LXdoaXRlLzkwIGJhY2tkcm9wLWJsdXItWzE4cHhdIFtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmXSBbdHJhbnNpdGlvbjp0cmFuc2Zvcm1fMC4yNXNfZWFzZSxvcGFjaXR5XzAuMnNfZWFzZV0gZmxleCBmbGV4LWNvbCAke1g9PT0ibGVmdCI/InRvcC0wIGJvdHRvbS0wIGxlZnQtMCByb3VuZGVkLW5vbmUgYm9yZGVyLTAgYm9yZGVyLXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bOHB4XzBfMzJweF9yZ2JhKDAsMCwwLDAuMzUpXSI6InRvcC0zIGJvdHRvbS0zIHJpZ2h0LTMgcm91bmRlZC1bMTRweF0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzBfMTJweF80MHB4X3JnYmEoMCwwLDAsMC41NSldIn1gLHN0eWxlOnt3aWR0aDpRLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjpYPT09ImxlZnQiPyJ0cmFuc2xhdGVYKC0xMDAlKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OiQ/MTowLHBvaW50ZXJFdmVudHM6JD8iYXV0byI6Im5vbmUiLC4uLlp9LCJhcmlhLWhpZGRlbiI6ISQsY2hpbGRyZW46Sn0pfWZ1bmN0aW9uIEsyKHtjaGlsZHJlbjokLHN0eWxlOlF9KXtyZXR1cm4gSygiaGVhZGVyIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIuNSBweC0yLjUgcHktMS41IHBsLTMiLHN0eWxlOlEsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIE05KHtjaGlsZHJlbjokfSl7cmV0dXJuIEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBINSh7b25DbGljazokLGFyaWFMYWJlbDpRPSJDbG9zZSBwYW5lbCIsdGl0bGU6SixpY29uU2l6ZTpaPTE2fSl7cmV0dXJuIEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOlEsdGl0bGU6SixjaGlsZHJlbjpLKFgwLHtzaXplOlosc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gXzkoJCxRKXtsZXRbSixaXT1NKG51bGwpO3JldHVybiB5KCgpPT57aWYoIVF8fCEkKXJldHVybjtsZXQgWD0hMSxZPWFzeW5jKCk9Pnt0cnl7bGV0IE49YXdhaXQoYXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIVgpWihOKX1jYXRjaHt9fTtZKCk7bGV0IHE9c2V0SW50ZXJ2YWwoWSw1MDAwKTtyZXR1cm4oKT0+e1g9ITAsY2xlYXJJbnRlcnZhbChxKX19LFskLFFdKSxKfWZ1bmN0aW9uIFc5KHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOlEsYXZhaWxhYmxlQnl0ZXM6Six0b3RhbEJ5dGVzOloscnVubmluZ1NpbXVsYXRvcnM6WH09JCxZPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLUovWikpLHE9WCtRLEc9UT09PTA/IiNlNjYiOlE8PTE/IiNlOWExM2IiOiIjM2IzIixOPVk+MC45PyIjZTY2IjpZPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBtYXgtdy1mdWxsIG1pbi13LTAgZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIGdhcC0xLjUgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHB4LTIgcHktWzNweF0gcm91bmRlZC1mdWxsIGJnLVsjMTAxMDEwXSBib3JkZXIgYm9yZGVyLVsjMjIyXSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC13aGl0ZS83MCBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLVszcHhdIHNocmluay0wIixzdHlsZTp7YmFja2dyb3VuZDpHfX0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgdHJ1bmNhdGUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2hpbGRyZW46W1gsIi8iLHEsIiBzaW1zIl19KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiIMK3ICJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjpbQzkoSiksIiBmcmVlIl19KV19KSxLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1bIzFjMWMxY10gcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6Tn19KX0pXX0pfWZ1bmN0aW9uIFA5KHt0eXBlOiQsc2l6ZTpRPTIwLHNjcmVlbk9uOko9ITF9KXtsZXQgWj17d2lkdGg6USxoZWlnaHQ6USx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoxLjYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBLKCJzdmciLHsuLi5aLGNoaWxkcmVuOltKJiZLKCJyZWN0Iix7eDoiNSIseToiMyIsd2lkdGg6IjE1IixoZWlnaHQ6IjE5IixyeDoiMS42NSIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLEsoInJlY3QiLHt4OiI0Iix5OiIyLjUiLHdpZHRoOiIxNiIsaGVpZ2h0OiIxOSIscng6IjIuNSJ9KSxLKCJsaW5lIix7eDE6IjEyIix5MToiMTguNSIseDI6IjEyIix5MjoiMTguNSJ9KV19KTtjYXNlIndhdGNoIjpyZXR1cm4gSygic3ZnIix7Li4uWixjaGlsZHJlbjpbSygicmVjdCIse3g6IjYuNSIseToiNyIsd2lkdGg6IjExIixoZWlnaHQ6IjEwIixyeDoiMyJ9KSxLKCJwYXRoIix7ZDoiTTguNSA3bC42LTMuMkExLjUgMS41IDAgMCAxIDEwLjYgMi41aDIuOGExLjUgMS41IDAgMCAxIDEuNSAxLjNMMTUuNSA3In0pLEsoInBhdGgiLHtkOiJNOC41IDE3bC42IDMuMmExLjUgMS41IDAgMCAwIDEuNSAxLjNoMi44YTEuNSAxLjUgMCAwIDAgMS41LTEuM2wuNi0zLjIifSldfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBLKCJzdmciLHsuLi5aLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMyAxMWE0IDQgMCAwIDEgNC00aDEwYTQgNCAwIDAgMSA0IDR2Mi41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWMtMS44IDAtMi41LTEuMi0zLjUtMS44LS45LS41LTEuNi0uNy0yLjUtLjdzLTEuNi4yLTIuNS43Yy0xIC42LTEuNyAxLjgtMy41IDEuOEEyLjUgMi41IDAgMCAxIDMgMTMuNXoifSl9KTtkZWZhdWx0OnJldHVybiBLKCJzdmciLHsuLi5aLGNoaWxkcmVuOltKJiZLKCJyZWN0Iix7eDoiNiIseToiMyIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMiIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLEsoInJlY3QiLHt4OiI2LjUiLHk6IjIuNSIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMi44In0pLEsoImxpbmUiLHt4MToiMTAuNSIseTE6IjUiLHgyOiIxMy41Iix5MjoiNSJ9KV19KX19ZnVuY3Rpb24gRDkoe2RldmljZTokLGFjdGl2ZTpRLHN0YXJ0aW5nOkosc2h1dHRpbmdEb3duOlosb25TZWxlY3Q6WCxvblNodXRkb3duOll9KXtsZXQgcT0kLmhlbHBlcixHPSQuc3RhdGU9PT0iQm9vdGVkIixOPU8wKCQubmFtZSksQj1IOSgkLnJ1bnRpbWUpLFU9cT8iU3RyZWFtaW5nIjpKP0c/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6Wj8iU2h1dHRpbmcgZG93buKApiI6Rz8iQm9vdGVkIjpudWxsLFY9cT8iIzM0ZDM5OSI6Rz8iI2U5YTEzYiI6bnVsbCx6PXF8fEcsTD1xP1E/ImJnLVsjMjYzNjRjXSI6ImJnLVsjMjAyYjNhXSI6UT8iYmctd2hpdGUvMTUiOiJiZy13aGl0ZS82IixGPXE/InRleHQtWyNkMmU3ZmZdIjpRPyJ0ZXh0LXdoaXRlLzkwIjoidGV4dC13aGl0ZS81NSI7cmV0dXJuIEsoImRpdiIse3JvbGU6ImJ1dHRvbiIsdGFiSW5kZXg6MCwiYXJpYS1wcmVzc2VkIjpRLG9uQ2xpY2s6WCxvbktleURvd246KEMpPT57aWYoQy5rZXk9PT0iRW50ZXIifHxDLmtleT09PSIgIilDLnByZXZlbnREZWZhdWx0KCksWCgpfSxjbGFzc05hbWU6YGdyb3VwIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSAke1E/ImJnLXdoaXRlLzEwIHRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzgifWAsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZTpgcmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuICR7TH1gLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOkYsY2hpbGRyZW46SyhQOSx7dHlwZTpOLHNjcmVlbk9uOkJvb2xlYW4ocSl9KX0pLFYmJiFxJiZLKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMC41IHJpZ2h0LTAuNSBzaXplLTEuNSByb3VuZGVkLWZ1bGwgcmluZy0yIHJpbmctWyMxYzFjMWVdIixzdHlsZTp7YmFja2dyb3VuZDpWfX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRydW5jYXRlIHRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgbGVhZGluZy10aWdodCIsY2hpbGRyZW46JC5uYW1lfSksVSYmSygiZGl2Iix7Y2xhc3NOYW1lOmB0cnVuY2F0ZSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXRpZ2h0ICR7cT8idGV4dC1bIzM0ZDM5OV0iOlE/InRleHQtd2hpdGUvNzUiOiJ0ZXh0LXdoaXRlLzQ1In1gLGNoaWxkcmVuOlV9KV19KSxLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXRyYWlsaW5nLXNsb3QiLGNsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgdy04IGgtNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdGV4dC1bMTFweF0gZm9udC1tb25vIHRhYnVsYXItbnVtcyBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzXSAke1E/InRleHQtd2hpdGUvODUiOiJ0ZXh0LXdoaXRlLzQwIn0gJHt6PyJncm91cC1ob3ZlcjpvcGFjaXR5LTAgZ3JvdXAtZm9jdXMtd2l0aGluOm9wYWNpdHktMCI6IiJ9YCxjaGlsZHJlbjpCfSkseiYmSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpaPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsImFyaWEtbGFiZWwiOiJTaHV0IGRvd24gc2ltdWxhdG9yIixvbkNsaWNrOihDKT0+e0MucHJldmVudERlZmF1bHQoKSxDLnN0b3BQcm9wYWdhdGlvbigpLFkoKX0sZGlzYWJsZWQ6WixjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNSByb3VuZGVkLW1kIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBmb2N1cy12aXNpYmxlOm9wYWNpdHktMTAwIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnMsYmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gJHtRPyJ0ZXh0LXdoaXRlLzgwIGhvdmVyOmJnLXdoaXRlLzIwIjoidGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8xMiBob3Zlcjp0ZXh0LXdoaXRlIn1gLGNoaWxkcmVuOksoWDAse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mi4yfSl9KV19KV19KX12YXIgWjI9InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZykiLEMzPSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQpIjt2YXIgViQ9MTI7ZnVuY3Rpb24gVDkoe29wZW46JCxvbkNsb3NlOlEsd2lkdGg6SixzaWRlOlo9InJpZ2h0IixkZXZpY2VzOlgsdG90YWw6WT0wLGhhc01vcmU6cT0hMSxvbkxvYWRNb3JlOkcsb25Mb2FkQWxsOk4sb25SZXNldFBhZ2U6QixzZWxlY3RlZFVkaWQ6VSxvblNlbGVjdDpWLHN0YXJ0aW5nOnosc2h1dHRpbmdEb3duOkwsb25TaHV0ZG93bjpGfSl7bGV0IEg9KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDp3aW5kb3cuX19TSU1fUFJFVklFV19fKT8uZ3JpZE1lbW9yeUVuZHBvaW50Pz8odHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOlIxKCJncmlkL2FwaS9tZW1vcnkiKSksaz1fOShILCQpLFtfLFNdPU0oIiIpLEU9VzEoKCk9PntsZXQgZj1fLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2lmKCFmfHwhWClyZXR1cm4gWDtyZXR1cm4gWC5maWx0ZXIoKGwpPT5sLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmKXx8TDUobC5ydW50aW1lKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGYpKX0sW1gsX10pLGI9SSghMSk7eSgoKT0+e2xldCBmPSEhXy50cmltKCk7aWYoZiYmcSlOPy4oKTtlbHNlIGlmKCFmJiZiLmN1cnJlbnQpQj8uKCk7Yi5jdXJyZW50PWZ9LFtfLHEsTixCXSk7bGV0IHY9SShudWxsKTtyZXR1cm4gSyhKMix7b3BlbjokLHdpZHRoOkosc2lkZTpaLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6WjJ9LGNoaWxkcmVuOltLKEsyLHtzdHlsZTp7anVzdGlmeUNvbnRlbnQ6ImZsZXgtc3RhcnQiLHBhZGRpbmdMZWZ0OjE2LHBhZGRpbmdUb3A6MTYsZ2FwOjR9LGNoaWxkcmVuOltLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6USxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJDbG9zZSBkZXZpY2VzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOiEwLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpLKE0wLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLEsoTjUse30pXX0pLEsoImRpdiIse2NsYXNzTmFtZToicHgtNCBwYi0yIHB0LTAuNSBzaHJpbmstMCIsY2hpbGRyZW46SygibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBoLTggcm91bmRlZC1sZyBiZy13aGl0ZS82IGZvY3VzLXdpdGhpbjpiZy13aGl0ZS8xMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSIsY2hpbGRyZW46W0sodzIse3NpemU6MTQsc3Ryb2tlV2lkdGg6MixjbGFzc05hbWU6InRleHQtd2hpdGUvNDAgc2hyaW5rLTAifSksSygiaW5wdXQiLHt2YWx1ZTpfLG9uQ2hhbmdlOihmKT0+UyhmLnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlNlYXJjaCIsY2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBvdXRsaW5lLW5vbmUgdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCBwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlLzQwIn0pLF8mJksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiJDbGVhciBzZWFyY2giLG9uQ2xpY2s6KCk9PlMoIiIpLGNsYXNzTmFtZToic2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS00IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS8xNSB0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzI1IixjaGlsZHJlbjpLKFgwLHtzaXplOjksc3Ryb2tlV2lkdGg6M30pfSldfSl9KSxLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGZsZXgtMSBtaW4taC0wIixjaGlsZHJlbjpbSygiZGl2Iix7cmVmOnYsb25TY3JvbGw6KCk9PntpZihfLnRyaW0oKXx8IXF8fCFHKXJldHVybjtsZXQgZj12LmN1cnJlbnQ7aWYoIWYpcmV0dXJuO2lmKGYuc2Nyb2xsVG9wK2YuY2xpZW50SGVpZ2h0Pj1mLnNjcm9sbEhlaWdodC0yNDApRygpfSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC0wIG92ZXJmbG93LXktYXV0byBweC00IHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46RT09PW51bGw/SyhCJCx7fSk6RS5sZW5ndGg9PT0wP0soImRpdiIse2NsYXNzTmFtZToicHgtMiBweS02IHRleHQtd2hpdGUvNDAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOl8/Ik5vIG1hdGNoaW5nIHNpbXVsYXRvcnMuIjoiTm8gaU9TIHNpbXVsYXRvcnMgYXZhaWxhYmxlLiJ9KTpLKGUse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsY2hpbGRyZW46RS5tYXAoKGYpPT5LKEQ5LHtkZXZpY2U6ZixhY3RpdmU6Zi5kZXZpY2U9PT1VLHN0YXJ0aW5nOiEheltmLmRldmljZV0sc2h1dHRpbmdEb3duOiEhTFtmLmRldmljZV0sb25TZWxlY3Q6KCk9PlYoZi5kZXZpY2UpLG9uU2h1dGRvd246KCk9PkYoZi5kZXZpY2UpfSxmLmRldmljZSkpfSksIV8mJnEmJksoImRpdiIse2NsYXNzTmFtZToicHgtMiBweS0yIHRleHQtWzExcHhdIHRleHQtd2hpdGUvMzUgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOlg/YCR7WC5sZW5ndGh9IG9mICR7WX1gOm51bGx9KV19KX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXRvcC1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAke1oyfSAwJSwgJHtDM30gMTAwJSlgfX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LWJvdHRvbS1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCAke1oyfSAwJSwgJHtDM30gMTAwJSlgfX0pXX0pLEsoVSQse3JlcG9ydDprfSldfSl9ZnVuY3Rpb24gQiQoKXtyZXR1cm4gSyhlLHtjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOlYkfSwoJCxRKT0+SyhOJCx7aW5kZXg6UX0sUSkpfSldfSl9ZnVuY3Rpb24gTiQoe2luZGV4OiR9KXtsZXQgUT1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLEo9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxaPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxLKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7UX1gfSksSygic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke0p9YH0pXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtafWB9KV19KX1mdW5jdGlvbiBVJCh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpLKFc5LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gRjUoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOlEsb25Qb2ludGVyRG93bjpKLGFyaWFMYWJlbDpaLHNpZGU6WD0icmlnaHQifSl7bGV0W1kscV09TSghMSksW0csTl09TSghMSksQj1ZfHxHLFU9KFg9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBLKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpaLCJhcmlhLWhpZGRlbiI6IVEsb25Qb2ludGVyRG93bjooeik9PntOKCEwKSxKKHopfSxvblBvaW50ZXJVcDooKT0+TighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5OKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtYPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7UT8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOlg9PT0ibGVmdCI/e2xlZnQ6VX06e3JpZ2h0OlV9LGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Qj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEsoImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Qj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIHc5KCl7bGV0WyQsUV09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgSj13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWj0oKT0+UShKLm1hdGNoZXMpO3JldHVybiBaKCksSi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5KLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfWZ1bmN0aW9uIGs1KCl7bGV0WyQsUV09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4geSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBKPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFo9KCk9PlEoSi5tYXRjaGVzKTtyZXR1cm4gWigpLEouYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+Si5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH12YXIgRTk9MjgwO3ZhciBIMz0id2lkdGggNzBtcyBsaW5lYXIiLEYzPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLEk5PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsYjk9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixPNT0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIseTk9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsUzk9IjAuMTZzIix4OT0iMC4ycyIsdjk9NSxqOT17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxSOT17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSxnOT17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxoOT17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxBNT1udWxsO2Z1bmN0aW9uIGY5KCl7aWYoQTUhPW51bGwpcmV0dXJuIEE1O2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gQTU9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksQTV9dmFyIEwkPTQwLG05PTE0LHA5PTI0MCx1OT0zMCxsOT0wLjE1LHokPTgwLGQ5PTE1MCxjOT0yNTAsazM9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uIE01KCQsUSxKLFope2xldCBYPSQqMyxZPVE+MD9NYXRoLm1heCgxODAsUS00OCk6WCxxPUo+MCYmTnVtYmVyLmlzRmluaXRlKFopJiZaPjA/TWF0aC5tYXgoMTgwLChKLTEzNikqWik6WDtyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKFgsWSxxKSl9ZnVuY3Rpb24gZjAoJCxRLEosWixYKXtsZXQgWT1NNShRLEosWixYKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiByOSgkLFEsSixaLFgpe2xldCBZPU51bWJlci5pc0Zpbml0ZShYKT8kKlg6JDtyZXR1cm4gZjAoWSwkLFEsSixaKX1mdW5jdGlvbiBfNSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBRPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpRKS9RfWZ1bmN0aW9uIEEzKCQsUSl7aWYoJDw9MHx8UTw9MClyZXR1cm4gMDtsZXQgSj0wLjU1LFo9JCpRKkovKFErSiokKTtyZXR1cm4gTWF0aC5taW4oTCQsWil9ZnVuY3Rpb24gbzkoJCxRLEope2xldCBaPSQsWD1KO2ZvcihsZXQgWSBvZiBRKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8WClaPVksWD1xfXJldHVybiBafWZ1bmN0aW9uIGk5KCQpe2xldHtmcm9tOlEsdG86Six2ZWxvY2l0eTpaLHN0aWZmbmVzczpYLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxOPTAuNCxCPTAuMDMzMzMzMzMzMzMzMzMzMzMsVT1RLFY9Wix6PXBlcmZvcm1hbmNlLm5vdygpLEw9MCxGPSExLEM9KEgpPT57aWYoRilyZXR1cm47bGV0IGs9TWF0aC5taW4oKEgteikvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTt6PUg7bGV0IF89LVgqKFUtSiktWSpWO2lmKFYrPV8qayxVKz1WKmssTWF0aC5hYnMoVik8MC40JiZNYXRoLmFicyhVLUopPDAuNCl7cShKKSxHPy4oKTtyZXR1cm59cShVKSxMPXJlcXVlc3RBbmltYXRpb25GcmFtZShDKX07cmV0dXJuIEw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEMpLCgpPT57aWYoRj0hMCxMKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwpfX1mdW5jdGlvbiBuOSgkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBRPSRbJC5sZW5ndGgtMV0sSj0kWzBdO2ZvcihsZXQgWD0kLmxlbmd0aC0xO1g+PTA7WC0tKWlmKFEudC0kW1hdLnQ+PXokKXtKPSRbWF07YnJlYWt9bGV0IFo9KFEudC1KLnQpLzEwMDA7cmV0dXJuIFo+MD8oUS54LUoueCkvWjowfXZhciBhOT0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIEMkKHthcmM6JCxwaGFzZTpRLHJlZHVjZWRNb3Rpb246SixoaWdoQ29udHJhc3Q6Wixmb2N1c1Zpc2libGU6WH0pe2xldCBZPVEhPT0iaWRsZSIscT1aPzEuMTI6MSxHPUo/MTpqOVtRXSxOPWc5W1FdKnEsQj1aPzE6aDlbUV0sVT1ZP1M5Ong5LFY9WT9iOTpPNSx6PVkmJmY5KCk/eTk6VixMPUo/Im5vbmUiOmB0cmFuc2Zvcm0gJHtVfSAke3p9YCxGPUo/Im5vbmUiOmBzdHJva2UgJHtVfSAke1Z9LCBzdHJva2Utd2lkdGggJHtVfSAke1Z9YCxDPSQudmlld0JveFNpemUsSD0kLmQsaz17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOkwsd2lsbENoYW5nZTpKP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gSygic3ZnIix7d2lkdGg6QyxoZWlnaHQ6Qyx2aWV3Qm94OmAwIDAgJHtDfSAke0N9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbSygiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soInBhdGgiLHtkOkgsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOih2OSoyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpYPzAuOTU6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7TzV9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLEsoInBhdGgiLHtkOkgsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olg/MC43OjAsdHJhbnNpdGlvbjpKPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke081fWB9fSldfSksSygiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOmssY2hpbGRyZW46SygiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soInBhdGgiLHtkOkgsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpOKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxCKzAuMDgpLHRyYW5zaXRpb246YCR7Rn0sIG9wYWNpdHkgJHtVfSAke1Z9YCxmaWx0ZXI6YTl9fSksSygicGF0aCIse2Q6SCxzdHJva2U6UjlbUV0sc3Ryb2tlV2lkdGg6TixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OkIsdHJhbnNpdGlvbjpgJHtGfSwgb3BhY2l0eSAke1V9ICR7Vn1gLGZpbHRlcjphOX19KV19KX0pXX0pfWZ1bmN0aW9uIHM5KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOlEsc3RyZWFtQ29uZmlnOkosY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pe2xldCBZPWs1KCkscT13OSgpLFtHLE5dPU0oITEpLEI9VzEoKCk9PiQzKHt0eXBlOlEsY29uZmlnOko/P251bGwsY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pLFtRLEosWixYXSksVT0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIEsoImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooVik9PntOKFYuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5OKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46SyhDJCx7YXJjOkIscGhhc2U6VSxyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfWZ1bmN0aW9uIEgkKCQpe2lmKCEkfHx0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybjtsZXQgUT1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtKLnR5cGU9InRleHQvY3NzIixRLmFwcGVuZENoaWxkKEopLEouc3R5bGVTaGVldD9KLnN0eWxlU2hlZXQuY3NzVGV4dD0kOkouYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJCkpfXZhciBGJD0oJCk9Pntzd2l0Y2goJCl7Y2FzZSJzdWNjZXNzIjpyZXR1cm4gTyQ7Y2FzZSJpbmZvIjpyZXR1cm4gXyQ7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gTSQ7Y2FzZSJlcnJvciI6cmV0dXJuIFckO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxrJD1BcnJheSgxMikuZmlsbCgwKSxBJD0oe3Zpc2libGU6JCxjbGFzc05hbWU6UX0pPT57cmV0dXJuIFIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlsic29ubmVyLWxvYWRpbmctd3JhcHBlciIsUV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwiZGF0YS12aXNpYmxlIjokfSxSLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLXNwaW5uZXIifSxrJC5tYXAoKEosWik9PlIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItbG9hZGluZy1iYXIiLGtleTpgc3Bpbm5lci1iYXItJHtafWB9KSkpKX0sTyQ9Ui5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxSLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuODU3LTkuODA5YS43NS43NSAwIDAwLTEuMjE0LS44ODJsLTMuNDgzIDQuNzktMS44OC0xLjg4YS43NS43NSAwIDEwLTEuMDYgMS4wNjFsMi41IDIuNWEuNzUuNzUgMCAwMDEuMTM3LS4wODlsNC01LjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksTSQ9Ui5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxSLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxfJD1SLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LFIuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03LTRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek05IDlhLjc1Ljc1IDAgMDAwIDEuNWguMjUzYS4yNS4yNSAwIDAxLjI0NC4zMDRsLS40NTkgMi4wNjZBMS43NSAxLjc1IDAgMDAxMC43NDcgMTVIMTFhLjc1Ljc1IDAgMDAwLTEuNWgtLjI1M2EuMjUuMjUgMCAwMS0uMjQ0LS4zMDRsLjQ1OS0yLjA2NkExLjc1IDEuNzUgMCAwMDkuMjUzIDlIOXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxXJD1SLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LFIuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS04LTVhLjc1Ljc1IDAgMDEuNzUuNzV2NC41YS43NS43NSAwIDAxLTEuNSAwdi00LjVBLjc1Ljc1IDAgMDExMCA1em0wIDEwYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyeiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLFAkPVIuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxSLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLFIuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpLEQkPSgpPT57bGV0WyQsUV09Ui51c2VTdGF0ZShkb2N1bWVudC5oaWRkZW4pO3JldHVybiBSLnVzZUVmZmVjdCgoKT0+e2xldCBKPSgpPT57UShkb2N1bWVudC5oaWRkZW4pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsSiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixKKX0sW10pLCR9LE8zPTE7Y2xhc3MgJDZ7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmliZT0oJCk9PntyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKCQpLCgpPT57bGV0IFE9dGhpcy5zdWJzY3JpYmVycy5pbmRleE9mKCQpO3RoaXMuc3Vic2NyaWJlcnMuc3BsaWNlKFEsMSl9fSx0aGlzLnB1Ymxpc2g9KCQpPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChRKT0+USgkKSl9LHRoaXMuYWRkVG9hc3Q9KCQpPT57dGhpcy5wdWJsaXNoKCQpLHRoaXMudG9hc3RzPVsuLi50aGlzLnRvYXN0cywkXX0sdGhpcy5jcmVhdGU9KCQpPT57dmFyIFE7bGV0e21lc3NhZ2U6SiwuLi5afT0kLFg9dHlwZW9mKCQ9PW51bGw/dm9pZCAwOiQuaWQpPT09Im51bWJlciJ8fCgoUT0kLmlkKT09bnVsbD92b2lkIDA6US5sZW5ndGgpPjA/JC5pZDpPMysrLFk9dGhpcy50b2FzdHMuZmluZCgoRyk9PntyZXR1cm4gRy5pZD09PVh9KSxxPSQuZGlzbWlzc2libGU9PT12b2lkIDA/ITA6JC5kaXNtaXNzaWJsZTtpZih0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoWCkpdGhpcy5kaXNtaXNzZWRUb2FzdHMuZGVsZXRlKFgpO2lmKFkpdGhpcy50b2FzdHM9dGhpcy50b2FzdHMubWFwKChHKT0+e2lmKEcuaWQ9PT1YKXJldHVybiB0aGlzLnB1Ymxpc2goey4uLkcsLi4uJCxpZDpYLHRpdGxlOkp9KSx7Li4uRywuLi4kLGlkOlgsZGlzbWlzc2libGU6cSx0aXRsZTpKfTtyZXR1cm4gR30pO2Vsc2UgdGhpcy5hZGRUb2FzdCh7dGl0bGU6SiwuLi5aLGRpc21pc3NpYmxlOnEsaWQ6WH0pO3JldHVybiBYfSx0aGlzLmRpc21pc3M9KCQpPT57aWYoJCl0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoJCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKFEpPT5RKHtpZDokLGRpc21pc3M6ITB9KSkpO2Vsc2UgdGhpcy50b2FzdHMuZm9yRWFjaCgoUSk9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEopPT5KKHtpZDpRLmlkLGRpc21pc3M6ITB9KSl9KTtyZXR1cm4gJH0sdGhpcy5tZXNzYWdlPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLG1lc3NhZ2U6JH0pfSx0aGlzLmVycm9yPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLG1lc3NhZ2U6JCx0eXBlOiJlcnJvciJ9KX0sdGhpcy5zdWNjZXNzPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLHR5cGU6InN1Y2Nlc3MiLG1lc3NhZ2U6JH0pfSx0aGlzLmluZm89KCQsUSk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLlEsdHlwZToiaW5mbyIsbWVzc2FnZTokfSl9LHRoaXMud2FybmluZz0oJCxRKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uUSx0eXBlOiJ3YXJuaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5sb2FkaW5nPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6JH0pfSx0aGlzLnByb21pc2U9KCQsUSk9PntpZighUSlyZXR1cm47bGV0IEo9dm9pZCAwO2lmKFEubG9hZGluZyE9PXZvaWQgMClKPXRoaXMuY3JlYXRlKHsuLi5RLHByb21pc2U6JCx0eXBlOiJsb2FkaW5nIixtZXNzYWdlOlEubG9hZGluZyxkZXNjcmlwdGlvbjp0eXBlb2YgUS5kZXNjcmlwdGlvbiE9PSJmdW5jdGlvbiI/US5kZXNjcmlwdGlvbjp2b2lkIDB9KTtsZXQgWj1Qcm9taXNlLnJlc29sdmUoJCBpbnN0YW5jZW9mIEZ1bmN0aW9uPyQoKTokKSxYPUohPT12b2lkIDAsWSxxPVoudGhlbihhc3luYyhOKT0+e2lmKFk9WyJyZXNvbHZlIixOXSxSLmlzVmFsaWRFbGVtZW50KE4pKVg9ITEsdGhpcy5jcmVhdGUoe2lkOkosdHlwZToiZGVmYXVsdCIsbWVzc2FnZTpOfSk7ZWxzZSBpZih3JChOKSYmIU4ub2spe1g9ITE7bGV0IFU9dHlwZW9mIFEuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IFEuZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtOLnN0YXR1c31gKTpRLmVycm9yLFY9dHlwZW9mIFEuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IFEuZGVzY3JpcHRpb24oYEhUVFAgZXJyb3IhIHN0YXR1czogJHtOLnN0YXR1c31gKTpRLmRlc2NyaXB0aW9uLEw9dHlwZW9mIFU9PT0ib2JqZWN0IiYmIVIuaXNWYWxpZEVsZW1lbnQoVSk/VTp7bWVzc2FnZTpVfTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246ViwuLi5MfSl9ZWxzZSBpZihOIGluc3RhbmNlb2YgRXJyb3Ipe1g9ITE7bGV0IFU9dHlwZW9mIFEuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IFEuZXJyb3IoTik6US5lcnJvcixWPXR5cGVvZiBRLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBRLmRlc2NyaXB0aW9uKE4pOlEuZGVzY3JpcHRpb24sTD10eXBlb2YgVT09PSJvYmplY3QiJiYhUi5pc1ZhbGlkRWxlbWVudChVKT9VOnttZXNzYWdlOlV9O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpWLC4uLkx9KX1lbHNlIGlmKFEuc3VjY2VzcyE9PXZvaWQgMCl7WD0hMTtsZXQgVT10eXBlb2YgUS5zdWNjZXNzPT09ImZ1bmN0aW9uIj9hd2FpdCBRLnN1Y2Nlc3MoTik6US5zdWNjZXNzLFY9dHlwZW9mIFEuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IFEuZGVzY3JpcHRpb24oTik6US5kZXNjcmlwdGlvbixMPXR5cGVvZiBVPT09Im9iamVjdCImJiFSLmlzVmFsaWRFbGVtZW50KFUpP1U6e21lc3NhZ2U6VX07dGhpcy5jcmVhdGUoe2lkOkosdHlwZToic3VjY2VzcyIsZGVzY3JpcHRpb246ViwuLi5MfSl9fSkuY2F0Y2goYXN5bmMoTik9PntpZihZPVsicmVqZWN0IixOXSxRLmVycm9yIT09dm9pZCAwKXtYPSExO2xldCBCPXR5cGVvZiBRLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBRLmVycm9yKE4pOlEuZXJyb3IsVT10eXBlb2YgUS5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgUS5kZXNjcmlwdGlvbihOKTpRLmRlc2NyaXB0aW9uLHo9dHlwZW9mIEI9PT0ib2JqZWN0IiYmIVIuaXNWYWxpZEVsZW1lbnQoQik/Qjp7bWVzc2FnZTpCfTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246VSwuLi56fSl9fSkuZmluYWxseSgoKT0+e2lmKFgpdGhpcy5kaXNtaXNzKEopLEo9dm9pZCAwO1EuZmluYWxseT09bnVsbHx8US5maW5hbGx5LmNhbGwoUSl9KSxHPSgpPT5uZXcgUHJvbWlzZSgoTixCKT0+cS50aGVuKCgpPT5ZWzBdPT09InJlamVjdCI/QihZWzFdKTpOKFlbMV0pKS5jYXRjaChCKSk7aWYodHlwZW9mIEohPT0ic3RyaW5nIiYmdHlwZW9mIEohPT0ibnVtYmVyIilyZXR1cm57dW53cmFwOkd9O2Vsc2UgcmV0dXJuIE9iamVjdC5hc3NpZ24oSix7dW53cmFwOkd9KX0sdGhpcy5jdXN0b209KCQsUSk9PntsZXQgSj0oUT09bnVsbD92b2lkIDA6US5pZCl8fE8zKys7cmV0dXJuIHRoaXMuY3JlYXRlKHtqc3g6JChKKSxpZDpKLC4uLlF9KSxKfSx0aGlzLmdldEFjdGl2ZVRvYXN0cz0oKT0+e3JldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKCQpPT4hdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKCQuaWQpKX0sdGhpcy5zdWJzY3JpYmVycz1bXSx0aGlzLnRvYXN0cz1bXSx0aGlzLmRpc21pc3NlZFRvYXN0cz1uZXcgU2V0fX12YXIgUTA9bmV3ICQ2LFQkPSgkLFEpPT57bGV0IEo9KFE9PW51bGw/dm9pZCAwOlEuaWQpfHxPMysrO3JldHVybiBRMC5hZGRUb2FzdCh7dGl0bGU6JCwuLi5RLGlkOkp9KSxKfSx3JD0oJCk9PntyZXR1cm4gJCYmdHlwZW9mICQ9PT0ib2JqZWN0IiYmIm9rImluICQmJnR5cGVvZiAkLm9rPT09ImJvb2xlYW4iJiYic3RhdHVzImluICQmJnR5cGVvZiAkLnN0YXR1cz09PSJudW1iZXIifSxFJD1UJCxJJD0oKT0+UTAudG9hc3RzLGIkPSgpPT5RMC5nZXRBY3RpdmVUb2FzdHMoKSx4Mj1PYmplY3QuYXNzaWduKEUkLHtzdWNjZXNzOlEwLnN1Y2Nlc3MsaW5mbzpRMC5pbmZvLHdhcm5pbmc6UTAud2FybmluZyxlcnJvcjpRMC5lcnJvcixjdXN0b206UTAuY3VzdG9tLG1lc3NhZ2U6UTAubWVzc2FnZSxwcm9taXNlOlEwLnByb21pc2UsZGlzbWlzczpRMC5kaXNtaXNzLGxvYWRpbmc6UTAubG9hZGluZ30se2dldEhpc3Rvcnk6SSQsZ2V0VG9hc3RzOmIkfSk7SCQoIltkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9bHRyXSxodG1sW2Rpcj1sdHJdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6LTNweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDo0cHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0Oi0xcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDowcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OmF1dG87LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OjA7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoLTM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxdLGh0bWxbZGlyPXJ0bF17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDo0cHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6LTNweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6MHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6LTFweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6MDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOmF1dG87LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgzNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1mYW1pbHk6dWktc2Fucy1zZXJpZixzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLEhlbHZldGljYSBOZXVlLEFyaWFsLE5vdG8gU2FucyxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppOy0tZ3JheTE6aHNsKDAsIDAlLCA5OSUpOy0tZ3JheTI6aHNsKDAsIDAlLCA5Ny4zJSk7LS1ncmF5Mzpoc2woMCwgMCUsIDk1LjElKTstLWdyYXk0OmhzbCgwLCAwJSwgOTMlKTstLWdyYXk1OmhzbCgwLCAwJSwgOTAuOSUpOy0tZ3JheTY6aHNsKDAsIDAlLCA4OC43JSk7LS1ncmF5Nzpoc2woMCwgMCUsIDg1LjglKTstLWdyYXk4OmhzbCgwLCAwJSwgNzglKTstLWdyYXk5OmhzbCgwLCAwJSwgNTYuMSUpOy0tZ3JheTEwOmhzbCgwLCAwJSwgNTIuMyUpOy0tZ3JheTExOmhzbCgwLCAwJSwgNDMuNSUpOy0tZ3JheTEyOmhzbCgwLCAwJSwgOSUpOy0tYm9yZGVyLXJhZGl1czo4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7b3V0bGluZTowO3otaW5kZXg6OTk5OTk5OTk5O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlfUBtZWRpYSAoaG92ZXI6bm9uZSkgYW5kIChwb2ludGVyOmNvYXJzZSl7W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtbGlmdGVkPXRydWVde3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDp2YXIoLS1vZmZzZXQtcmlnaHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rdey0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpO3otaW5kZXg6dmFyKC0tei1pbmRleCk7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RyYW5zZm9ybTp2YXIoLS15KTt0b3VjaC1hY3Rpb246bm9uZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMsb3BhY2l0eSAuNHMsaGVpZ2h0IC40cyxib3gtc2hhZG93IC4ycztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO292ZXJmbG93LXdyYXA6YW55d2hlcmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtwYWRkaW5nOjE2cHg7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JvcmRlci1yYWRpdXM6dmFyKC0tYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9W2RhdGEtc29ubmVyLXRvYXN0XTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6MDstLXk6dHJhbnNsYXRlWSgtMTAwJSk7LS1saWZ0OjE7LS1saWZ0LWFtb3VudDpjYWxjKDEgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTowOy0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdDotMTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiMzZjNmM2Z9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6I2U4ZThlOH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLXRpdGxlXXtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXByb21pc2U9dHJ1ZV0gW2RhdGEtaWNvbl0+c3Zne29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1pbiAuM3MgZWFzZSBmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dPip7ZmxleC1zaHJpbms6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dIHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXXtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLW5vcm1hbC1iZyk7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtdGV4dCk7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKTtib3JkZXI6bm9uZTtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzLGJveC1zaGFkb3cgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMCwwLDAsLjQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA4KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25de3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0KTtyaWdodDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tZW5kKTt0b3A6MDtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tZ3JheTEyKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ncmF5NCk7dHJhbnNmb3JtOnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm0pO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzLGJhY2tncm91bmQgLjJzLGJvcmRlci1jb2xvciAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRpc2FibGVkPXRydWVde2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdOmhvdmVyIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ncmF5Mik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyYXk1KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAwJTtyaWdodDotMTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4Oi0xfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Ym90dG9tOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle3RvcDo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPWZhbHNlXVtkYXRhLXJlbW92ZWQ9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7dHJhbnNmb3JtOnNjYWxlWSgyKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2hlaWdodDpjYWxjKHZhcigtLWdhcCkgKyAxcHgpO2JvdHRvbToxMDAlO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoMCk7b3BhY2l0eToxfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV17LS1zY2FsZTp2YXIoLS10b2FzdHMtYmVmb3JlKSAqIDAuMDUgKyAxOy0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdC1hbW91bnQpICogdmFyKC0tdG9hc3RzLWJlZm9yZSkpKSBzY2FsZShjYWxjKC0xICogdmFyKC0tc2NhbGUpKSk7aGVpZ2h0OnZhcigtLWZyb250LXRvYXN0LWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246b3BhY2l0eSAuNHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zdHlsZWQ9dHJ1ZV0+KntvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkpKTtoZWlnaHQ6dmFyKC0taW5pdGlhbC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9dHJ1ZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSArIHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKDQwJSk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC41cyxvcGFjaXR5IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXTo6YmVmb3Jle2hlaWdodDpjYWxjKHZhcigtLWluaXRpYWwtaGVpZ2h0KSArIDIwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV17dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXksMCkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgsMCkpO3RyYW5zaXRpb246bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGVkPXRydWVde3VzZXItc2VsZWN0Om5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXSxbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj10b3Bde2FuaW1hdGlvbi1kdXJhdGlvbjouMnM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249bGVmdF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWxlZnR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1yaWdodF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXJpZ2h0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249dXBde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC11cH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWRvd25de2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1kb3dufUBrZXlmcmFtZXMgc3dpcGUtb3V0LWxlZnR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXJpZ2h0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgKyAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC11cHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtZG93bntmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpICsgMTAwJSkpO29wYWNpdHk6MH19QG1lZGlhIChtYXgtd2lkdGg6NjAwcHgpe1tkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF17bGVmdDpjYWxjKHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAtMSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdIFtkYXRhLXNvbm5lci10b2FzdF17bGVmdDowO3JpZ2h0OjA7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIDIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tbW9iaWxlLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tbW9iaWxlLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTQpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKTstLXN1Y2Nlc3MtYmc6aHNsKDE0MywgODUlLCA5NiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NSwgOTIlLCA4NyUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNDAsIDEwMCUsIDI3JSk7LS1pbmZvLWJnOmhzbCgyMDgsIDEwMCUsIDk3JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIxLCA5MSUsIDkzJSk7LS1pbmZvLXRleHQ6aHNsKDIxMCwgOTIlLCA0NSUpOy0td2FybmluZy1iZzpoc2woNDksIDEwMCUsIDk3JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNDksIDkxJSwgODQlKTstLXdhcm5pbmctdGV4dDpoc2woMzEsIDkyJSwgNDUlKTstLWVycm9yLWJnOmhzbCgzNTksIDEwMCUsIDk3JSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1OSwgMTAwJSwgOTQlKTstLWVycm9yLXRleHQ6aHNsKDM2MCwgMTAwJSwgNDUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXkzKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYmctaG92ZXI6aHNsKDAsIDAlLCAxMiUpOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtYm9yZGVyLWhvdmVyOmhzbCgwLCAwJSwgMjUlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKTstLXN1Y2Nlc3MtYmc6aHNsKDE1MCwgMTAwJSwgNiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NywgMTAwJSwgMTIlKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTUwLCA4NiUsIDY1JSk7LS1pbmZvLWJnOmhzbCgyMTUsIDEwMCUsIDYlKTstLWluZm8tYm9yZGVyOmhzbCgyMjMsIDQzJSwgMTclKTstLWluZm8tdGV4dDpoc2woMjE2LCA4NyUsIDY1JSk7LS13YXJuaW5nLWJnOmhzbCg2NCwgMTAwJSwgNiUpOy0td2FybmluZy1ib3JkZXI6aHNsKDYwLCAxMDAlLCA5JSk7LS13YXJuaW5nLXRleHQ6aHNsKDQ2LCA4NyUsIDY1JSk7LS1lcnJvci1iZzpoc2woMzU4LCA3NiUsIDEwJSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1NywgODklLCAxNiUpOy0tZXJyb3ItdGV4dDpoc2woMzU4LCAxMDAlLCA4MSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZy1ob3Zlcik7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXItaG92ZXIpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc117YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb117YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ117YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3Jde2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3JdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJ7LS1zaXplOjE2cHg7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDoxMH0uc29ubmVyLWxvYWRpbmctd3JhcHBlcltkYXRhLXZpc2libGU9ZmFsc2Vde3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9LnNvbm5lci1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpfS5zb25uZXItbG9hZGluZy1iYXJ7YW5pbWF0aW9uOnNvbm5lci1zcGluIDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQ6dmFyKC0tZ3JheTExKTtib3JkZXItcmFkaXVzOjZweDtoZWlnaHQ6OCU7bGVmdDotMTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMy45JTt3aWR0aDoyNCV9LnNvbm5lci1sb2FkaW5nLWJhcjpmaXJzdC1jaGlsZHthbmltYXRpb24tZGVsYXk6LTEuMnM7dHJhbnNmb3JtOnJvdGF0ZSguMDAwMWRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDIpe2FuaW1hdGlvbi1kZWxheTotMS4xczt0cmFuc2Zvcm06cm90YXRlKDMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi0xczt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNCl7YW5pbWF0aW9uLWRlbGF5Oi0uOXM7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDUpe2FuaW1hdGlvbi1kZWxheTotLjhzO3RyYW5zZm9ybTpyb3RhdGUoMTIwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi0uN3M7dHJhbnNmb3JtOnJvdGF0ZSgxNTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg3KXthbmltYXRpb24tZGVsYXk6LS42czt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDgpe2FuaW1hdGlvbi1kZWxheTotLjVzO3RyYW5zZm9ybTpyb3RhdGUoMjEwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOSl7YW5pbWF0aW9uLWRlbGF5Oi0uNHM7dHJhbnNmb3JtOnJvdGF0ZSgyNDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMCl7YW5pbWF0aW9uLWRlbGF5Oi0uM3M7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMSl7YW5pbWF0aW9uLWRlbGF5Oi0uMnM7dHJhbnNmb3JtOnJvdGF0ZSgzMDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMil7YW5pbWF0aW9uLWRlbGF5Oi0uMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBzb25uZXItZmFkZS1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfX1Aa2V5ZnJhbWVzIHNvbm5lci1zcGluezAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6LjE1fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5zb25uZXItbG9hZGluZy1iYXIsW2RhdGEtc29ubmVyLXRvYXN0XSxbZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDthbmltYXRpb246bm9uZSFpbXBvcnRhbnR9fS5zb25uZXItbG9hZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30uc29ubmVyLWxvYWRlcltkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZSgtNTAlLC01MCUpfSIpO2Z1bmN0aW9uIFc1KCQpe3JldHVybiAkLmxhYmVsIT09dm9pZCAwfXZhciB5JD0zLFMkPSIyNHB4Iix4JD0iMTZweCIsdDk9NDAwMCx2JD0zNTYsaiQ9MTQsUiQ9NDUsZyQ9MjAwO2Z1bmN0aW9uIF8wKC4uLiQpe3JldHVybiAkLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9ZnVuY3Rpb24gaCQoJCl7bGV0W1EsSl09JC5zcGxpdCgiLSIpLFo9W107aWYoUSlaLnB1c2goUSk7aWYoSilaLnB1c2goSik7cmV0dXJuIFp9dmFyIGYkPSgkKT0+e3ZhciBRLEosWixYLFkscSxHLE4sQjtsZXR7aW52ZXJ0OlUsdG9hc3Q6Vix1bnN0eWxlZDp6LGludGVyYWN0aW5nOkwsc2V0SGVpZ2h0czpGLHZpc2libGVUb2FzdHM6QyxoZWlnaHRzOkgsaW5kZXg6ayx0b2FzdHM6XyxleHBhbmRlZDpTLHJlbW92ZVRvYXN0OkUsZGVmYXVsdFJpY2hDb2xvcnM6YixjbG9zZUJ1dHRvbjp2LHN0eWxlOlgxLGNhbmNlbEJ1dHRvblN0eWxlOmYsYWN0aW9uQnV0dG9uU3R5bGU6bCxjbGFzc05hbWU6Yz0iIixkZXNjcmlwdGlvbkNsYXNzTmFtZTokMT0iIixkdXJhdGlvbjpVMSxwb3NpdGlvbjpLMSxnYXA6TTEsZXhwYW5kQnlEZWZhdWx0Om0sY2xhc3NOYW1lczpnLGljb25zOnMsY2xvc2VCdXR0b25BcmlhTGFiZWw6WTE9IkNsb3NlIHRvYXN0In09JCxbVjEsTjFdPVIudXNlU3RhdGUobnVsbCksW0gxLEwxXT1SLnVzZVN0YXRlKG51bGwpLFtqLG5dPVIudXNlU3RhdGUoITEpLFtkLFoxXT1SLnVzZVN0YXRlKCExKSxbRDEsd109Ui51c2VTdGF0ZSghMSksW3AsUTFdPVIudXNlU3RhdGUoITEpLFt6MSx4XT1SLnVzZVN0YXRlKCExKSxbYSxxMV09Ui51c2VTdGF0ZSgwKSxbQTEsSzBdPVIudXNlU3RhdGUoMCkscDE9Ui51c2VSZWYoVi5kdXJhdGlvbnx8VTF8fHQ5KSxFMT1SLnVzZVJlZihudWxsKSxnMT1SLnVzZVJlZihudWxsKSxZMD1rPT09MCxxMD1rKzE8PUMsXzE9Vi50eXBlLGMxPVYuZGlzbWlzc2libGUhPT0hMSx6MD1WLmNsYXNzTmFtZXx8IiIsdjE9Vi5kZXNjcmlwdGlvbkNsYXNzTmFtZXx8IiIsbzE9Ui51c2VNZW1vKCgpPT5ILmZpbmRJbmRleCgoSjEpPT5KMS50b2FzdElkPT09Vi5pZCl8fDAsW0gsVi5pZF0pLEcwPVIudXNlTWVtbygoKT0+e3ZhciBKMTtyZXR1cm4oSjE9Vi5jbG9zZUJ1dHRvbikhPW51bGw/SjE6dn0sW1YuY2xvc2VCdXR0b24sdl0pLEkxPVIudXNlTWVtbygoKT0+Vi5kdXJhdGlvbnx8VTF8fHQ5LFtWLmR1cmF0aW9uLFUxXSksYjE9Ui51c2VSZWYoMCksczE9Ui51c2VSZWYoMCksVjA9Ui51c2VSZWYoMCksaTE9Ui51c2VSZWYobnVsbCksW0IwLHcwXT1LMS5zcGxpdCgiLSIpLFcwPVIudXNlTWVtbygoKT0+e3JldHVybiBILnJlZHVjZSgoSjEsUCx1KT0+e2lmKHU+PW8xKXJldHVybiBKMTtyZXR1cm4gSjErUC5oZWlnaHR9LDApfSxbSCxvMV0pLGExPUQkKCksaDE9Vi5pbnZlcnR8fFUseDE9XzE9PT0ibG9hZGluZyI7czEuY3VycmVudD1SLnVzZU1lbW8oKCk9Pm8xKk0xK1cwLFtvMSxXMF0pLFIudXNlRWZmZWN0KCgpPT57cDEuY3VycmVudD1JMX0sW0kxXSksUi51c2VFZmZlY3QoKCk9PntuKCEwKX0sW10pLFIudXNlRWZmZWN0KCgpPT57bGV0IEoxPWcxLmN1cnJlbnQ7aWYoSjEpe2xldCBQPUoxLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gSzAoUCksRigodSk9Plt7dG9hc3RJZDpWLmlkLGhlaWdodDpQLHBvc2l0aW9uOlYucG9zaXRpb259LC4uLnVdKSwoKT0+RigodSk9PnUuZmlsdGVyKCh0KT0+dC50b2FzdElkIT09Vi5pZCkpfX0sW0YsVi5pZF0pLFIudXNlTGF5b3V0RWZmZWN0KCgpPT57aWYoIWopcmV0dXJuO2xldCBKMT1nMS5jdXJyZW50LFA9SjEuc3R5bGUuaGVpZ2h0O0oxLnN0eWxlLmhlaWdodD0iYXV0byI7bGV0IHU9SjEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O0oxLnN0eWxlLmhlaWdodD1QLEswKHUpLEYoKHQpPT57aWYoIXQuZmluZCgoQjEpPT5CMS50b2FzdElkPT09Vi5pZCkpcmV0dXJuW3t0b2FzdElkOlYuaWQsaGVpZ2h0OnUscG9zaXRpb246Vi5wb3NpdGlvbn0sLi4udF07ZWxzZSByZXR1cm4gdC5tYXAoKEIxKT0+QjEudG9hc3RJZD09PVYuaWQ/ey4uLkIxLGhlaWdodDp1fTpCMSl9KX0sW2osVi50aXRsZSxWLmRlc2NyaXB0aW9uLEYsVi5pZCxWLmpzeCxWLmFjdGlvbixWLmNhbmNlbF0pO2xldCBmMT1SLnVzZUNhbGxiYWNrKCgpPT57WjEoITApLHExKHMxLmN1cnJlbnQpLEYoKEoxKT0+SjEuZmlsdGVyKChQKT0+UC50b2FzdElkIT09Vi5pZCkpLHNldFRpbWVvdXQoKCk9PntFKFYpfSxnJCl9LFtWLEUsRixzMV0pO1IudXNlRWZmZWN0KCgpPT57aWYoVi5wcm9taXNlJiZfMT09PSJsb2FkaW5nInx8Vi5kdXJhdGlvbj09PTEvMHx8Vi50eXBlPT09ImxvYWRpbmciKXJldHVybjtsZXQgSjEsUD0oKT0+e2lmKFYwLmN1cnJlbnQ8YjEuY3VycmVudCl7bGV0IHQ9bmV3IERhdGUoKS5nZXRUaW1lKCktYjEuY3VycmVudDtwMS5jdXJyZW50PXAxLmN1cnJlbnQtdH1WMC5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpfSx1PSgpPT57aWYocDEuY3VycmVudD09PTEvMClyZXR1cm47YjEuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKSxKMT1zZXRUaW1lb3V0KCgpPT57Vi5vbkF1dG9DbG9zZT09bnVsbHx8Vi5vbkF1dG9DbG9zZS5jYWxsKFYsViksZjEoKX0scDEuY3VycmVudCl9O2lmKFN8fEx8fGExKVAoKTtlbHNlIHUoKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KEoxKX0sW1MsTCxWLF8xLGExLGYxXSksUi51c2VFZmZlY3QoKCk9PntpZihWLmRlbGV0ZSlmMSgpLFYub25EaXNtaXNzPT1udWxsfHxWLm9uRGlzbWlzcy5jYWxsKFYsVil9LFtmMSxWLmRlbGV0ZV0pO2Z1bmN0aW9uIG4xKCl7dmFyIEoxO2lmKHM9PW51bGw/dm9pZCAwOnMubG9hZGluZyl7dmFyIFA7cmV0dXJuIFIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOl8wKGc9PW51bGw/dm9pZCAwOmcubG9hZGVyLFY9PW51bGw/dm9pZCAwOihQPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlAubG9hZGVyLCJzb25uZXItbG9hZGVyIiksImRhdGEtdmlzaWJsZSI6XzE9PT0ibG9hZGluZyJ9LHMubG9hZGluZyl9cmV0dXJuIFIuY3JlYXRlRWxlbWVudChBJCx7Y2xhc3NOYW1lOl8wKGc9PW51bGw/dm9pZCAwOmcubG9hZGVyLFY9PW51bGw/dm9pZCAwOihKMT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpKMS5sb2FkZXIpLHZpc2libGU6XzE9PT0ibG9hZGluZyJ9KX1sZXQgTjA9Vi5pY29ufHwocz09bnVsbD92b2lkIDA6c1tfMV0pfHxGJChfMSk7dmFyIFAwLHQxO3JldHVybiBSLmNyZWF0ZUVsZW1lbnQoImxpIix7dGFiSW5kZXg6MCxyZWY6ZzEsY2xhc3NOYW1lOl8wKGMsejAsZz09bnVsbD92b2lkIDA6Zy50b2FzdCxWPT1udWxsP3ZvaWQgMDooUT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpRLnRvYXN0LGc9PW51bGw/dm9pZCAwOmcuZGVmYXVsdCxnPT1udWxsP3ZvaWQgMDpnW18xXSxWPT1udWxsP3ZvaWQgMDooSj1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpKW18xXSksImRhdGEtc29ubmVyLXRvYXN0IjoiIiwiZGF0YS1yaWNoLWNvbG9ycyI6KFAwPVYucmljaENvbG9ycykhPW51bGw/UDA6YiwiZGF0YS1zdHlsZWQiOiFCb29sZWFuKFYuanN4fHxWLnVuc3R5bGVkfHx6KSwiZGF0YS1tb3VudGVkIjpqLCJkYXRhLXByb21pc2UiOkJvb2xlYW4oVi5wcm9taXNlKSwiZGF0YS1zd2lwZWQiOnoxLCJkYXRhLXJlbW92ZWQiOmQsImRhdGEtdmlzaWJsZSI6cTAsImRhdGEteS1wb3NpdGlvbiI6QjAsImRhdGEteC1wb3NpdGlvbiI6dzAsImRhdGEtaW5kZXgiOmssImRhdGEtZnJvbnQiOlkwLCJkYXRhLXN3aXBpbmciOkQxLCJkYXRhLWRpc21pc3NpYmxlIjpjMSwiZGF0YS10eXBlIjpfMSwiZGF0YS1pbnZlcnQiOmgxLCJkYXRhLXN3aXBlLW91dCI6cCwiZGF0YS1zd2lwZS1kaXJlY3Rpb24iOkgxLCJkYXRhLWV4cGFuZGVkIjpCb29sZWFuKFN8fG0mJmopLCJkYXRhLXRlc3RpZCI6Vi50ZXN0SWQsc3R5bGU6eyItLWluZGV4IjprLCItLXRvYXN0cy1iZWZvcmUiOmssIi0tei1pbmRleCI6Xy5sZW5ndGgtaywiLS1vZmZzZXQiOmAke2Q/YTpzMS5jdXJyZW50fXB4YCwiLS1pbml0aWFsLWhlaWdodCI6bT8iYXV0byI6YCR7QTF9cHhgLC4uLlgxLC4uLlYuc3R5bGV9LG9uRHJhZ0VuZDooKT0+e3coITEpLE4xKG51bGwpLGkxLmN1cnJlbnQ9bnVsbH0sb25Qb2ludGVyRG93bjooSjEpPT57aWYoSjEuYnV0dG9uPT09MilyZXR1cm47aWYoeDF8fCFjMSlyZXR1cm47aWYoRTEuY3VycmVudD1uZXcgRGF0ZSxxMShzMS5jdXJyZW50KSxKMS50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoSjEucG9pbnRlcklkKSxKMS50YXJnZXQudGFnTmFtZT09PSJCVVRUT04iKXJldHVybjt3KCEwKSxpMS5jdXJyZW50PXt4OkoxLmNsaWVudFgseTpKMS5jbGllbnRZfX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgSjEsUCx1O2lmKHB8fCFjMSlyZXR1cm47aTEuY3VycmVudD1udWxsO2xldCB0PU51bWJlcigoKEoxPWcxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpKMS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItLXN3aXBlLWFtb3VudC14IikucmVwbGFjZSgicHgiLCIiKSl8fDApLEYxPU51bWJlcigoKFA9ZzEuY3VycmVudCk9PW51bGw/dm9pZCAwOlAuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteSIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxCMT1uZXcgRGF0ZSgpLmdldFRpbWUoKS0oKHU9RTEuY3VycmVudCk9PW51bGw/dm9pZCAwOnUuZ2V0VGltZSgpKSxvPVYxPT09IngiP3Q6RjEseTE9TWF0aC5hYnMobykvQjE7aWYoTWF0aC5hYnMobyk+PVIkfHx5MT4wLjExKXtpZihxMShzMS5jdXJyZW50KSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpLFYxPT09IngiKUwxKHQ+MD8icmlnaHQiOiJsZWZ0Iik7ZWxzZSBMMShGMT4wPyJkb3duIjoidXAiKTtmMSgpLFExKCEwKTtyZXR1cm59ZWxzZXt2YXIgbTEsZDE7KG0xPWcxLmN1cnJlbnQpPT1udWxsfHxtMS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsIjBweCIpLChkMT1nMS5jdXJyZW50KT09bnVsbHx8ZDEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXkiLCIwcHgiKX14KCExKSx3KCExKSxOMShudWxsKX0sb25Qb2ludGVyTW92ZTooSjEpPT57dmFyIFAsdSx0O2lmKCFpMS5jdXJyZW50fHwhYzEpcmV0dXJuO2lmKCgoUD13aW5kb3cuZ2V0U2VsZWN0aW9uKCkpPT1udWxsP3ZvaWQgMDpQLnRvU3RyaW5nKCkubGVuZ3RoKT4wKXJldHVybjtsZXQgQjE9SjEuY2xpZW50WS1pMS5jdXJyZW50Lnksbz1KMS5jbGllbnRYLWkxLmN1cnJlbnQueDt2YXIgeTE7bGV0IG0xPSh5MT0kLnN3aXBlRGlyZWN0aW9ucykhPW51bGw/eTE6aCQoSzEpO2lmKCFWMSYmKE1hdGguYWJzKG8pPjF8fE1hdGguYWJzKEIxKT4xKSlOMShNYXRoLmFicyhvKT5NYXRoLmFicyhCMSk/IngiOiJ5Iik7bGV0IGQxPXt4OjAseTowfSxaMD0oQzApPT57cmV0dXJuIDEvKDEuNStNYXRoLmFicyhDMCkvMjApfTtpZihWMT09PSJ5Iil7aWYobTEuaW5jbHVkZXMoInRvcCIpfHxtMS5pbmNsdWRlcygiYm90dG9tIikpaWYobTEuaW5jbHVkZXMoInRvcCIpJiZCMTwwfHxtMS5pbmNsdWRlcygiYm90dG9tIikmJkIxPjApZDEueT1CMTtlbHNle2xldCBDMD1CMSpaMChCMSk7ZDEueT1NYXRoLmFicyhDMCk8TWF0aC5hYnMoQjEpP0MwOkIxfX1lbHNlIGlmKFYxPT09IngiKXtpZihtMS5pbmNsdWRlcygibGVmdCIpfHxtMS5pbmNsdWRlcygicmlnaHQiKSlpZihtMS5pbmNsdWRlcygibGVmdCIpJiZvPDB8fG0xLmluY2x1ZGVzKCJyaWdodCIpJiZvPjApZDEueD1vO2Vsc2V7bGV0IEMwPW8qWjAobyk7ZDEueD1NYXRoLmFicyhDMCk8TWF0aC5hYnMobyk/QzA6b319aWYoTWF0aC5hYnMoZDEueCk+MHx8TWF0aC5hYnMoZDEueSk+MCl4KCEwKTsodT1nMS5jdXJyZW50KT09bnVsbHx8dS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsYCR7ZDEueH1weGApLCh0PWcxLmN1cnJlbnQpPT1udWxsfHx0LnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IixgJHtkMS55fXB4YCl9fSxHMCYmIVYuanN4JiZfMSE9PSJsb2FkaW5nIj9SLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJhcmlhLWxhYmVsIjpZMSwiZGF0YS1kaXNhYmxlZCI6eDEsImRhdGEtY2xvc2UtYnV0dG9uIjohMCxvbkNsaWNrOngxfHwhYzE/KCk9Pnt9OigpPT57ZjEoKSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpfSxjbGFzc05hbWU6XzAoZz09bnVsbD92b2lkIDA6Zy5jbG9zZUJ1dHRvbixWPT1udWxsP3ZvaWQgMDooWj1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpaLmNsb3NlQnV0dG9uKX0sKHQxPXM9PW51bGw/dm9pZCAwOnMuY2xvc2UpIT1udWxsP3QxOlAkKTpudWxsLChfMXx8Vi5pY29ufHxWLnByb21pc2UpJiZWLmljb24hPT1udWxsJiYoKHM9PW51bGw/dm9pZCAwOnNbXzFdKSE9PW51bGx8fFYuaWNvbik/Ui5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS1pY29uIjoiIixjbGFzc05hbWU6XzAoZz09bnVsbD92b2lkIDA6Zy5pY29uLFY9PW51bGw/dm9pZCAwOihYPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlguaWNvbil9LFYucHJvbWlzZXx8Vi50eXBlPT09ImxvYWRpbmciJiYhVi5pY29uP1YuaWNvbnx8bjEoKTpudWxsLFYudHlwZSE9PSJsb2FkaW5nIj9OMDpudWxsKTpudWxsLFIuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtY29udGVudCI6IiIsY2xhc3NOYW1lOl8wKGc9PW51bGw/dm9pZCAwOmcuY29udGVudCxWPT1udWxsP3ZvaWQgMDooWT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpZLmNvbnRlbnQpfSxSLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLXRpdGxlIjoiIixjbGFzc05hbWU6XzAoZz09bnVsbD92b2lkIDA6Zy50aXRsZSxWPT1udWxsP3ZvaWQgMDoocT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpxLnRpdGxlKX0sVi5qc3g/Vi5qc3g6dHlwZW9mIFYudGl0bGU9PT0iZnVuY3Rpb24iP1YudGl0bGUoKTpWLnRpdGxlKSxWLmRlc2NyaXB0aW9uP1IuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtZGVzY3JpcHRpb24iOiIiLGNsYXNzTmFtZTpfMCgkMSx2MSxnPT1udWxsP3ZvaWQgMDpnLmRlc2NyaXB0aW9uLFY9PW51bGw/dm9pZCAwOihHPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuZGVzY3JpcHRpb24pfSx0eXBlb2YgVi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/Vi5kZXNjcmlwdGlvbigpOlYuZGVzY3JpcHRpb24pOm51bGwpLFIuaXNWYWxpZEVsZW1lbnQoVi5jYW5jZWwpP1YuY2FuY2VsOlYuY2FuY2VsJiZXNShWLmNhbmNlbCk/Ui5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6Vi5jYW5jZWxCdXR0b25TdHlsZXx8ZixvbkNsaWNrOihKMSk9PntpZighVzUoVi5jYW5jZWwpKXJldHVybjtpZighYzEpcmV0dXJuO1YuY2FuY2VsLm9uQ2xpY2s9PW51bGx8fFYuY2FuY2VsLm9uQ2xpY2suY2FsbChWLmNhbmNlbCxKMSksZjEoKX0sY2xhc3NOYW1lOl8wKGc9PW51bGw/dm9pZCAwOmcuY2FuY2VsQnV0dG9uLFY9PW51bGw/dm9pZCAwOihOPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOk4uY2FuY2VsQnV0dG9uKX0sVi5jYW5jZWwubGFiZWwpOm51bGwsUi5pc1ZhbGlkRWxlbWVudChWLmFjdGlvbik/Vi5hY3Rpb246Vi5hY3Rpb24mJlc1KFYuYWN0aW9uKT9SLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTpWLmFjdGlvbkJ1dHRvblN0eWxlfHxsLG9uQ2xpY2s6KEoxKT0+e2lmKCFXNShWLmFjdGlvbikpcmV0dXJuO2lmKFYuYWN0aW9uLm9uQ2xpY2s9PW51bGx8fFYuYWN0aW9uLm9uQ2xpY2suY2FsbChWLmFjdGlvbixKMSksSjEuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47ZjEoKX0sY2xhc3NOYW1lOl8wKGc9PW51bGw/dm9pZCAwOmcuYWN0aW9uQnV0dG9uLFY9PW51bGw/dm9pZCAwOihCPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuYWN0aW9uQnV0dG9uKX0sVi5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBlOSgpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIG0kKCQsUSl7bGV0IEo9e307cmV0dXJuWyQsUV0uZm9yRWFjaCgoWixYKT0+e2xldCBZPVg9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLEc9WT94JDpTJDtmdW5jdGlvbiBOKEIpe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoVSk9PntKW2Ake3F9LSR7VX1gXT10eXBlb2YgQj09PSJudW1iZXIiP2Ake0J9cHhgOkJ9KX1pZih0eXBlb2YgWj09PSJudW1iZXIifHx0eXBlb2YgWj09PSJzdHJpbmciKU4oWik7ZWxzZSBpZih0eXBlb2YgWj09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoQik9PntpZihaW0JdPT09dm9pZCAwKUpbYCR7cX0tJHtCfWBdPUc7ZWxzZSBKW2Ake3F9LSR7Qn1gXT10eXBlb2YgWltCXT09PSJudW1iZXIiP2Ake1pbQl19cHhgOlpbQl19KTtlbHNlIE4oRyl9KSxKfXZhciBRNj1SLmZvcndhcmRSZWYoZnVuY3Rpb24oUSxKKXtsZXR7aWQ6WixpbnZlcnQ6WCxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpHLGNsb3NlQnV0dG9uOk4sY2xhc3NOYW1lOkIsb2Zmc2V0OlUsbW9iaWxlT2Zmc2V0OlYsdGhlbWU6ej0ibGlnaHQiLHJpY2hDb2xvcnM6TCxkdXJhdGlvbjpGLHN0eWxlOkMsdmlzaWJsZVRvYXN0czpIPXkkLHRvYXN0T3B0aW9uczprLGRpcjpfPWU5KCksZ2FwOlM9aiQsaWNvbnM6RSxjb250YWluZXJBcmlhTGFiZWw6Yj0iTm90aWZpY2F0aW9ucyJ9PVEsW3YsWDFdPVIudXNlU3RhdGUoW10pLGY9Ui51c2VNZW1vKCgpPT57aWYoWilyZXR1cm4gdi5maWx0ZXIoKGopPT5qLnRvYXN0ZXJJZD09PVopO3JldHVybiB2LmZpbHRlcigoaik9PiFqLnRvYXN0ZXJJZCl9LFt2LFpdKSxsPVIudXNlTWVtbygoKT0+e3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoW1ldLmNvbmNhdChmLmZpbHRlcigoaik9PmoucG9zaXRpb24pLm1hcCgoaik9PmoucG9zaXRpb24pKSkpfSxbZixZXSksW2MsJDFdPVIudXNlU3RhdGUoW10pLFtVMSxLMV09Ui51c2VTdGF0ZSghMSksW00xLG1dPVIudXNlU3RhdGUoITEpLFtnLHNdPVIudXNlU3RhdGUoeiE9PSJzeXN0ZW0iP3o6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz8iZGFyayI6ImxpZ2h0IjoibGlnaHQiKSxZMT1SLnVzZVJlZihudWxsKSxWMT1xLmpvaW4oIisiKS5yZXBsYWNlKC9LZXkvZywiIikucmVwbGFjZSgvRGlnaXQvZywiIiksTjE9Ui51c2VSZWYobnVsbCksSDE9Ui51c2VSZWYoITEpLEwxPVIudXNlQ2FsbGJhY2soKGopPT57WDEoKG4pPT57dmFyIGQ7aWYoISgoZD1uLmZpbmQoKFoxKT0+WjEuaWQ9PT1qLmlkKSk9PW51bGw/dm9pZCAwOmQuZGVsZXRlKSlRMC5kaXNtaXNzKGouaWQpO3JldHVybiBuLmZpbHRlcigoe2lkOloxfSk9PloxIT09ai5pZCl9KX0sW10pO3JldHVybiBSLnVzZUVmZmVjdCgoKT0+e3JldHVybiBRMC5zdWJzY3JpYmUoKGopPT57aWYoai5kaXNtaXNzKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntYMSgobik9Pm4ubWFwKChkKT0+ZC5pZD09PWouaWQ/ey4uLmQsZGVsZXRlOiEwfTpkKSl9KTtyZXR1cm59c2V0VGltZW91dCgoKT0+e1IuZmx1c2hTeW5jKCgpPT57WDEoKG4pPT57bGV0IGQ9bi5maW5kSW5kZXgoKFoxKT0+WjEuaWQ9PT1qLmlkKTtpZihkIT09LTEpcmV0dXJuWy4uLm4uc2xpY2UoMCxkKSx7Li4ubltkXSwuLi5qfSwuLi5uLnNsaWNlKGQrMSldO3JldHVybltqLC4uLm5dfSl9KX0pfSl9LFt2XSksUi51c2VFZmZlY3QoKCk9PntpZih6IT09InN5c3RlbSIpe3Moeik7cmV0dXJufWlmKHo9PT0ic3lzdGVtIilpZih3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzKXMoImRhcmsiKTtlbHNlIHMoImxpZ2h0Iik7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCBqPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIik7dHJ5e2ouYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwoe21hdGNoZXM6bn0pPT57aWYobilzKCJkYXJrIik7ZWxzZSBzKCJsaWdodCIpfSl9Y2F0Y2gobil7ai5hZGRMaXN0ZW5lcigoe21hdGNoZXM6ZH0pPT57dHJ5e2lmKGQpcygiZGFyayIpO2Vsc2UgcygibGlnaHQiKX1jYXRjaChaMSl7Y29uc29sZS5lcnJvcihaMSl9fSl9fSxbel0pLFIudXNlRWZmZWN0KCgpPT57aWYodi5sZW5ndGg8PTEpSzEoITEpfSxbdl0pLFIudXNlRWZmZWN0KCgpPT57bGV0IGo9KG4pPT57dmFyIGQ7aWYocS5ldmVyeSgodyk9Pm5bd118fG4uY29kZT09PXcpKXt2YXIgRDE7SzEoITApLChEMT1ZMS5jdXJyZW50KT09bnVsbHx8RDEuZm9jdXMoKX1pZihuLmNvZGU9PT0iRXNjYXBlIiYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1ZMS5jdXJyZW50fHwoKGQ9WTEuY3VycmVudCk9PW51bGw/dm9pZCAwOmQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpKSlLMSghMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixqKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsail9LFtxXSksUi51c2VFZmZlY3QoKCk9PntpZihZMS5jdXJyZW50KXJldHVybigpPT57aWYoTjEuY3VycmVudClOMS5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksTjEuY3VycmVudD1udWxsLEgxLmN1cnJlbnQ9ITF9fSxbWTEuY3VycmVudF0pLFIuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIse3JlZjpKLCJhcmlhLWxhYmVsIjpgJHtifSAke1YxfWAsdGFiSW5kZXg6LTEsImFyaWEtbGl2ZSI6InBvbGl0ZSIsImFyaWEtcmVsZXZhbnQiOiJhZGRpdGlvbnMgdGV4dCIsImFyaWEtYXRvbWljIjoiZmFsc2UiLHN1cHByZXNzSHlkcmF0aW9uV2FybmluZzohMH0sbC5tYXAoKGosbik9Pnt2YXIgZDtsZXRbWjEsRDFdPWouc3BsaXQoIi0iKTtpZighZi5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIFIuY3JlYXRlRWxlbWVudCgib2wiLHtrZXk6aixkaXI6Xz09PSJhdXRvIj9lOSgpOl8sdGFiSW5kZXg6LTEscmVmOlkxLGNsYXNzTmFtZTpCLCJkYXRhLXNvbm5lci10b2FzdGVyIjohMCwiZGF0YS1zb25uZXItdGhlbWUiOmcsImRhdGEteS1wb3NpdGlvbiI6WjEsImRhdGEteC1wb3NpdGlvbiI6RDEsc3R5bGU6eyItLWZyb250LXRvYXN0LWhlaWdodCI6YCR7KChkPWNbMF0pPT1udWxsP3ZvaWQgMDpkLmhlaWdodCl8fDB9cHhgLCItLXdpZHRoIjpgJHt2JH1weGAsIi0tZ2FwIjpgJHtTfXB4YCwuLi5DLC4uLm0kKFUsVil9LG9uQmx1cjoodyk9PntpZihIMS5jdXJyZW50JiYhdy5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKHcucmVsYXRlZFRhcmdldCkpe2lmKEgxLmN1cnJlbnQ9ITEsTjEuY3VycmVudClOMS5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksTjEuY3VycmVudD1udWxsfX0sb25Gb2N1czoodyk9PntpZih3LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ3LnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47aWYoIUgxLmN1cnJlbnQpSDEuY3VycmVudD0hMCxOMS5jdXJyZW50PXcucmVsYXRlZFRhcmdldH0sb25Nb3VzZUVudGVyOigpPT5LMSghMCksb25Nb3VzZU1vdmU6KCk9PksxKCEwKSxvbk1vdXNlTGVhdmU6KCk9PntpZighTTEpSzEoITEpfSxvbkRyYWdFbmQ6KCk9PksxKCExKSxvblBvaW50ZXJEb3duOih3KT0+e2lmKHcudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJncudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UiKXJldHVybjttKCEwKX0sb25Qb2ludGVyVXA6KCk9Pm0oITEpfSxmLmZpbHRlcigodyk9PiF3LnBvc2l0aW9uJiZuPT09MHx8dy5wb3NpdGlvbj09PWopLm1hcCgodyxwKT0+e3ZhciBRMSx6MTtyZXR1cm4gUi5jcmVhdGVFbGVtZW50KGYkLHtrZXk6dy5pZCxpY29uczpFLGluZGV4OnAsdG9hc3Q6dyxkZWZhdWx0UmljaENvbG9yczpMLGR1cmF0aW9uOihRMT1rPT1udWxsP3ZvaWQgMDprLmR1cmF0aW9uKSE9bnVsbD9RMTpGLGNsYXNzTmFtZTprPT1udWxsP3ZvaWQgMDprLmNsYXNzTmFtZSxkZXNjcmlwdGlvbkNsYXNzTmFtZTprPT1udWxsP3ZvaWQgMDprLmRlc2NyaXB0aW9uQ2xhc3NOYW1lLGludmVydDpYLHZpc2libGVUb2FzdHM6SCxjbG9zZUJ1dHRvbjooejE9az09bnVsbD92b2lkIDA6ay5jbG9zZUJ1dHRvbikhPW51bGw/ejE6TixpbnRlcmFjdGluZzpNMSxwb3NpdGlvbjpqLHN0eWxlOms9PW51bGw/dm9pZCAwOmsuc3R5bGUsdW5zdHlsZWQ6az09bnVsbD92b2lkIDA6ay51bnN0eWxlZCxjbGFzc05hbWVzOms9PW51bGw/dm9pZCAwOmsuY2xhc3NOYW1lcyxjYW5jZWxCdXR0b25TdHlsZTprPT1udWxsP3ZvaWQgMDprLmNhbmNlbEJ1dHRvblN0eWxlLGFjdGlvbkJ1dHRvblN0eWxlOms9PW51bGw/dm9pZCAwOmsuYWN0aW9uQnV0dG9uU3R5bGUsY2xvc2VCdXR0b25BcmlhTGFiZWw6az09bnVsbD92b2lkIDA6ay5jbG9zZUJ1dHRvbkFyaWFMYWJlbCxyZW1vdmVUb2FzdDpMMSx0b2FzdHM6Zi5maWx0ZXIoKHgpPT54LnBvc2l0aW9uPT13LnBvc2l0aW9uKSxoZWlnaHRzOmMuZmlsdGVyKCh4KT0+eC5wb3NpdGlvbj09dy5wb3NpdGlvbiksc2V0SGVpZ2h0czokMSxleHBhbmRCeURlZmF1bHQ6RyxnYXA6UyxleHBhbmRlZDpVMSxzd2lwZURpcmVjdGlvbnM6US5zd2lwZURpcmVjdGlvbnN9KX0pKX0pKX0pO2Z1bmN0aW9uIEo2KCl7cmV0dXJuIEsoUTYse3RoZW1lOiJkYXJrIixwb3NpdGlvbjoiYm90dG9tLWNlbnRlciIsdmlzaWJsZVRvYXN0czo0LGdhcDo4LG9mZnNldDp7Ym90dG9tOjI0fSx0b2FzdE9wdGlvbnM6e3Vuc3R5bGVkOiEwfSxzdHlsZTp7ekluZGV4OjIxNDc0ODM2NDd9LGNvbnRhaW5lckFyaWFMYWJlbDoic2VydmUtc2ltIG5vdGlmaWNhdGlvbnMifSl9ZnVuY3Rpb24gSzYoe3RvYXN0OiR9KXtsZXQgUT0kLnN0YXR1cz09PSJlcnJvciIsSj0kLnN0YXR1cz09PSJ1cGxvYWRpbmciLFo9SiYmJC5wcm9ncmVzcyE9PW51bGwsWD0kLnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoJC5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6InVwbG9hZC10b2FzdCIsY2xhc3NOYW1lOmBmbGV4IHctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0gZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tb25vIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSAke1E/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuM3NdIixzdHlsZTp7YmFja2dyb3VuZDpKPyIjYTViNGZjIjokLnN0YXR1cz09PSJzdWNjZXNzIj8iIzRhZGU4MCI6IiNmODcxNzEifX0pLEsoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W0omJlomJmBVcGxvYWRpbmcgJHskLm5hbWV94oCmICR7WH0lYCxKJiYhWiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7JC5uYW1lfeKApmA6YEFkZGluZyAkeyQubmFtZX3igKZgKSwkLnN0YXR1cz09PSJzdWNjZXNzIiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHskLm5hbWV9YDpgQWRkZWQgJHskLm5hbWV9IHRvIFBob3Rvc2ApLFEmJmAkeyQubmFtZX06ICR7JC5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCJ9YF19KV19KSxKJiZLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzNweF0gdy1mdWxsIGJnLXdoaXRlLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOlo/SygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke1h9JWB9fSk6SygiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19KX1mdW5jdGlvbiBaNih7d2lkdGg6JCxoZWlnaHQ6USx2aXNpYmxlOkp9KXtyZXR1cm4gSygiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctcGFuZWwtYmctdHJhbnNsdWNlbnQgc2hhZG93LVswXzFweF8ycHhfcmdiYSgwLDAsMCwwLjE4KSwwXzZweF8xOHB4X3JnYmEoMCwwLDAsMC4yOCksaW5zZXRfMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNildIGJhY2tkcm9wLWJsdXItbWQgYmFja2Ryb3Atc2F0dXJhdGUtMTUwIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7b3BhY2l0eTpKPzE6MCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVkoJHtKPzA6NH1weCkgc2NhbGUoJHtKPzE6MC45Nn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCB0cmFuc2Zvcm0gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkifSxjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiICIsSygic3BhbiIse2NsYXNzTmFtZToib3BhY2l0eS02MCBteC0wLjUiLGNoaWxkcmVuOiLDlyJ9KSwiICIsTWF0aC5yb3VuZChRKV19KX1mdW5jdGlvbiBYNih7c3RyZWFtaW5nOiR9KXtsZXQgUT0kPyIjNGFkZTgwIjoiIzhlOGU5MyI7cmV0dXJuIEsoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJzdHJlYW0tc3RhdHVzLXBpbGwiLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC1bNXB4XSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6UX0sImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46W0soInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMThzX2Vhc2VdIixzdHlsZTp7YmFja2dyb3VuZDpRfX0pLCQ/ImxpdmUiOiJjb25uZWN0aW5nIl19KX1mdW5jdGlvbiBwJCgkLFEsSil7bGV0IFo9Si5sYXQqTWF0aC5QSS8xODAsWD0oJC1KLmxhdCkqTWF0aC5QSS8xODA7cmV0dXJue3g6KFEtSi5sbmcpKk1hdGguUEkvMTgwKk1hdGguY29zKFopKjYzNzEwMDAsejotWCo2MzcxMDAwfX1mdW5jdGlvbiB1JCgkLFEsSil7bGV0IFo9Si5sYXQqTWF0aC5QSS8xODAsWD0tUS82MzcxMDAwKigxODAvTWF0aC5QSSksWT0kLyg2MzcxMDAwKk1hdGguY29zKFopKSooMTgwL01hdGguUEkpO3JldHVybntsYXQ6Si5sYXQrWCxsbmc6Si5sbmcrWX19ZnVuY3Rpb24gbCQoJCxRLEosWixYKXtsZXQgWT1YKlgscT1ZKlgsRz0oTixCLFUsVik9PjAuNSooMipCKygtTitVKSpYKygyKk4tNSpCKzQqVS1WKSpZKygtTiszKkItMypVK1YpKnEpO3JldHVybnt4OkcoJC54LFEueCxKLngsWi54KSx6OkcoJC56LFEueixKLnosWi56KSx5OkcoJC55LFEueSxKLnksWi55KSxyYXdBbHQ6RygkLnJhd0FsdCxRLnJhd0FsdCxKLnJhd0FsdCxaLnJhd0FsdCl9fWZ1bmN0aW9uIGQkKCQsUSxKKXtpZigkLmxlbmd0aDwyKXJldHVybiAkLnNsaWNlKCk7bGV0IFo9W10sWD0kLmxlbmd0aCxZPUo/WDpYLTE7Zm9yKGxldCBxPTA7cTxZO3ErKyl7bGV0IEc9JFtKPyhxLTErWCklWDpNYXRoLm1heCgwLHEtMSldLE49JFtxJVhdLEI9JFsocSsxKSVYXSxVPSRbSj8ocSsyKSVYOk1hdGgubWluKFgtMSxxKzIpXSxWPUIueC1OLngsej1CLnotTi56LEw9TWF0aC5oeXBvdChWLHopLEY9TWF0aC5tYXgoMixNYXRoLmNlaWwoTC9RKSk7Zm9yKGxldCBDPTA7QzxGO0MrKyl7bGV0IEg9Qy9GO1oucHVzaChsJChHLE4sQixVLEgpKX19aWYoIUopWi5wdXNoKCRbWC0xXSk7cmV0dXJuIFp9ZnVuY3Rpb24gWTYoJCl7aWYoJC53YXlwb2ludHMubGVuZ3RoPDIpdGhyb3cgRXJyb3IoYFRyYWlsICR7JC5pZH0gbmVlZHMgYXQgbGVhc3QgMiB3YXlwb2ludHNgKTtsZXQgUT17bGF0OiQud2F5cG9pbnRzLnJlZHVjZSgoQyxIKT0+QytILmxhdCwwKS8kLndheXBvaW50cy5sZW5ndGgsbG5nOiQud2F5cG9pbnRzLnJlZHVjZSgoQyxIKT0+QytILmxuZywwKS8kLndheXBvaW50cy5sZW5ndGh9LEo9JC53YXlwb2ludHMubWFwKChDKT0+Qy5hbHQ/PzApLFo9TWF0aC5taW4oLi4uSiksWD1NYXRoLm1heCguLi5KKSxZPSQud2F5cG9pbnRzLm1hcCgoQyk9PntsZXR7eDpILHo6a309cCQoQy5sYXQsQy5sbmcsUSksXz1DLmFsdD8/MDtyZXR1cm57eDpILHo6ayx5Ol8tWixyYXdBbHQ6X319KSxxPWQkKFksOCwhISQubG9vcCksRz1bXSxOPTA7Zm9yKGxldCBDPTA7QzxxLmxlbmd0aDtDKyspe2xldCBIPXFbQ107aWYoQz4wKXtsZXQgRT1xW0MtMV07Tis9TWF0aC5oeXBvdChILngtRS54LEguei1FLnosSC55LUUueSl9bGV0e2xhdDprLGxuZzpffT11JChILngsSC56LFEpLFM9TWF0aC5tYXgoMCxILnkpO0cucHVzaCh7eDpILngsejpILnoseTpTLGFyYzpOLGxhdDprLGxuZzpffSl9bGV0IEI9MS8wLFU9LTEvMCxWPTEvMCx6PS0xLzAsTD0xLzAsRj0tMS8wO2ZvcihsZXQgQyBvZiBHKXtpZihDLng8QilCPUMueDtpZihDLng+VSlVPUMueDtpZihDLno8VilWPUMuejtpZihDLno+eil6PUMuejtpZihDLnk8TClMPUMueTtpZihDLnk+RilGPUMueX1yZXR1cm57dHJhaWw6JCxvcmlnaW46USxwb2ludHM6Ryx0b3RhbERpc3RhbmNlOkdbRy5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbQixVXSx5OltMLEZdLHo6W1Ysel19LHJhd01pbkFsdDpaLHJhd01heEFsdDpYfX1mdW5jdGlvbiBtMCgkLFEpe2xldCBKPSQudG90YWxEaXN0YW5jZTtpZihKPT09MClyZXR1cm4gJC5wb2ludHNbMF07bGV0IFo9UTtpZigkLnRyYWlsLmxvb3ApWj0oWiVKK0opJUo7ZWxzZXtpZihaPD0wKXJldHVybiAkLnBvaW50c1swXTtpZihaPj1KKXJldHVybiAkLnBvaW50c1skLnBvaW50cy5sZW5ndGgtMV19bGV0IFg9MCxZPSQucG9pbnRzLmxlbmd0aC0xO3doaWxlKFgrMTxZKXtsZXQgVT1YK1k+Pj4xO2lmKCQucG9pbnRzW1VdLmFyYzw9WilYPVU7ZWxzZSBZPVV9bGV0IHE9JC5wb2ludHNbWF0sRz0kLnBvaW50c1tZXSxOPUcuYXJjLXEuYXJjLEI9Tj09PTA/MDooWi1xLmFyYykvTjtyZXR1cm57eDpxLngrKEcueC1xLngpKkIsejpxLnorKEcuei1xLnopKkIseTpxLnkrKEcueS1xLnkpKkIsYXJjOlosbGF0OnEubGF0KyhHLmxhdC1xLmxhdCkqQixsbmc6cS5sbmcrKEcubG5nLXEubG5nKSpCfX1mdW5jdGlvbiBNMygkKXtzd2l0Y2goJCl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgYyQ9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLHIkPVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0sbyQ9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSxpJD1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLG4kPVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0scDA9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6YyQsbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6ciQsbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czpvJCxsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6aSQsbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czpuJCxsb29wOiEwfV07ZnVuY3Rpb24gSjAoe29wZW46JCxvbk9wZW5DaGFuZ2U6USxzdW1tYXJ5OkosY2hpbGRyZW46WixzdW1tYXJ5Q2xhc3NOYW1lOlg9IiIsYm9keUNsYXNzTmFtZTpZPSJmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHQtMi41IixjbGFzc05hbWU6cT0iIiwuLi5HfSl7cmV0dXJuIEsoImRldGFpbHMiLHtvcGVuOiQsb25Ub2dnbGU6KE4pPT5RKE4uY3VycmVudFRhcmdldC5vcGVuKSxjbGFzc05hbWU6YGxlbS1zZWN0aW9uIGJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiAke3F9YCwuLi5HLGNoaWxkcmVuOltLKCJzdW1tYXJ5Iix7Y2xhc3NOYW1lOmBsZW0tdG9nZ2xlIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIHRleHQtd2hpdGUvOTAgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gJHtYfWAsY2hpbGRyZW46W0osSyhJMix7b3BlbjokfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOlksY2hpbGRyZW46Wn0pXX0pfWZ1bmN0aW9uIFA1KHtsYWJlbDokLHZhbHVlOlEsb3B0aW9uczpKLGRpc2FibGVkOlosb25DaGFuZ2U6WCxjbGFzc05hbWU6WX0pe2xldFtxLEddPU0oITEpLE49SShudWxsKSxCPUkobnVsbCksW1UsVl09TShudWxsKSx6PSgpPT57bGV0IEg9Ti5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighSClyZXR1cm47Vih7dG9wOkguYm90dG9tKzQsbGVmdDpILmxlZnQsbWluV2lkdGg6SC53aWR0aH0pfTtBMCgoKT0+e2lmKHEpeigpfSxbcV0pLEEwKCgpPT57aWYoIXF8fCFVKXJldHVybjtsZXQgSD1CLmN1cnJlbnQ7aWYoIUgpcmV0dXJuO2xldCBrPTgsXz13aW5kb3cuaW5uZXJXaWR0aC1ILm9mZnNldFdpZHRoLWs7aWYoVS5sZWZ0Pl8pVih7Li4uVSxsZWZ0Ok1hdGgubWF4KGssXyl9KX0sW3EsVV0pLHkoKCk9PntpZighcSlyZXR1cm47bGV0IEg9KCk9PkcoITEpLGs9KFMpPT57bGV0IEU9Uy50YXJnZXQ7aWYoIUIuY3VycmVudD8uY29udGFpbnMoRSkmJiFOLmN1cnJlbnQ/LmNvbnRhaW5zKEUpKUgoKX0sXz0oUyk9PntpZighQi5jdXJyZW50Py5jb250YWlucyhTLnRhcmdldCkpeigpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsayksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsXywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixrKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixfLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixIKX19LFtxXSk7bGV0IEw9SSghMSk7eSgoKT0+e2lmKCFxKXtMLmN1cnJlbnQ9ITE7cmV0dXJufWlmKCFVfHxMLmN1cnJlbnQpcmV0dXJuO2xldCBIPUIuY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpO2lmKCFIPy5sZW5ndGgpcmV0dXJuO0wuY3VycmVudD0hMDtsZXQgaz1KLmZpbmRJbmRleCgoXyk9Pl8udmFsdWU9PT1RKTtIW01hdGgubWF4KGssMCldPy5mb2N1cygpfSxbcSxVLEosUV0pO2xldCBGPShIKT0+e2xldCBrPVsuLi5CLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKT8/W11dLF89ay5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO2lmKEgua2V5PT09IkFycm93RG93biJ8fEgua2V5PT09IkFycm93VXAiKXtILnByZXZlbnREZWZhdWx0KCk7bGV0IFM9SC5rZXk9PT0iQXJyb3dEb3duIj9NYXRoLm1pbihfKzEsay5sZW5ndGgtMSk6TWF0aC5tYXgoXy0xLDApO2tbU10/LmZvY3VzKCl9ZWxzZSBpZihILmtleT09PSJFc2NhcGUiKUgucHJldmVudERlZmF1bHQoKSxHKCExKSxOLmN1cnJlbnQ/LmZvY3VzKCl9LEM9Si5maW5kKChIKT0+SC52YWx1ZT09PVEpO3JldHVybiBLKGUse2NoaWxkcmVuOltLKCJidXR0b24iLHtyZWY6Tix0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjokLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOnEsZGlzYWJsZWQ6WixvbkNsaWNrOigpPT5HKChIKT0+IUgpLGNsYXNzTmFtZTpgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0ICR7WT8/IiJ9YCxjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayB0cnVuY2F0ZSIsY2hpbGRyZW46Qz8ubGFiZWw/P1F9KX0pLHEmJlUmJmM1KEsoImRpdiIse3JlZjpCLHJvbGU6Imxpc3Rib3giLCJhcmlhLWxhYmVsIjokLG9uS2V5RG93bjpGLHN0eWxlOnt0b3A6VS50b3AsbGVmdDpVLmxlZnQsbWluV2lkdGg6VS5taW5XaWR0aH0sY2xhc3NOYW1lOiJmaXhlZCBtYXgtaC05MCBvdmVyZmxvdy15LWF1dG8gYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVsxMHB4XSBwLTEgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCB6LTUwIixjaGlsZHJlbjpKLm1hcCgoSCk9PksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6SC52YWx1ZT09PVEsb25DbGljazooKT0+e1goSC52YWx1ZSksRyghMSksTi5jdXJyZW50Py5mb2N1cygpfSxjbGFzc05hbWU6YGJsb2NrIHctZnVsbCB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gcHgtMi41IHB5LTEgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy13aGl0ZS84IGZvY3VzLXZpc2libGU6Ymctd2hpdGUvOCBvdXRsaW5lLW5vbmUgJHtILnZhbHVlPT09UT8idGV4dC1hY2NlbnQiOiIifWAsY2hpbGRyZW46SC5sYWJlbH0sSC52YWx1ZSkpfSksZG9jdW1lbnQuYm9keSldfSl9dmFyIGEkPTY1MCxfMz1bMSwyLDUsMjBdLHE2PTEwMDAsVzM9e3N0YXR1czoiaWRsZSIsYXJjOjAsZWxhcHNlZE1zOjB9O2Z1bmN0aW9uIEw2KHt1ZGlkOiQsZXhlYzpRfSl7bGV0W0osWl09TSghMSksW1gsWV09TShwMFswXS5pZCksW3EsR109TShwMFswXS5tb2RlKSxbTixCXT1NKDEpLFtVLFZdPU0oVzMpLFt6LExdPU0obnVsbCksRj1XMSgoKT0+cDAuZmluZCgobSk9Pm0uaWQ9PT1YKT8/cDBbMF0sW1hdKSxDPVcxKCgpPT5ZNihGKSxbRl0pLEg9SSgwKSxrPUkoImlkbGUiKSxfPUkoTTMocSkqTiksUz1JKDApLEU9SShDKSxiPUkobnVsbCk7eSgoKT0+e18uY3VycmVudD1NMyhxKSpOfSxbcSxOXSk7bGV0IHY9SShudWxsKTt5KCgpPT57bGV0IG09RS5jdXJyZW50LGc9SC5jdXJyZW50O2lmKEUuY3VycmVudD1DLG0mJm0hPT1DKXYuY3VycmVudD1lJChtLGcsQyxwZXJmb3JtYW5jZS5ub3coKSk7SC5jdXJyZW50PTAsUy5jdXJyZW50PTAsay5jdXJyZW50PSJpZGxlIixiLmN1cnJlbnQ9bnVsbCxWKFczKX0sW0NdKTtsZXQgWDE9SSgwKSxmPUkobnVsbCksbD1JKG51bGwpO3koKCk9PntsZXQgbT0wLGc9KHMpPT57bGV0IFkxPWYuY3VycmVudCxWMT1ZMT09bnVsbD8xNjpNYXRoLm1pbig2NCxzLVkxKTtpZihmLmN1cnJlbnQ9cyxYMS5jdXJyZW50PShYMS5jdXJyZW50K1YxKjAuMDAwMTIpJShNYXRoLlBJKjIpLGsuY3VycmVudD09PSJwbGF5aW5nIil7bGV0IEgxPV8uY3VycmVudCpWMS8xMDAwO0guY3VycmVudCs9SDEsUy5jdXJyZW50Kz1WMTtsZXQgTDE9RS5jdXJyZW50LnRvdGFsRGlzdGFuY2U7aWYoIUUuY3VycmVudC50cmFpbC5sb29wJiZILmN1cnJlbnQ+PUwxKUguY3VycmVudD1MMSxrLmN1cnJlbnQ9InBhdXNlZCIsVih7c3RhdHVzOiJwYXVzZWQiLGFyYzpMMSxlbGFwc2VkTXM6Uy5jdXJyZW50fSl9bGV0IE4xPWwuY3VycmVudDtpZihOMSl7bGV0IEgxPUUuY3VycmVudCxMMT1udWxsLGo9di5jdXJyZW50O2lmKGope2xldCBuPShzLWouc3RhcnRNcykvYSQ7aWYobj49MSl2LmN1cnJlbnQ9bnVsbDtlbHNle2xldCBkPUpRKG4pO0gxPVFRKGosZCksTDE9e3g6ai5wcmV2TWFya2VyLngrKGoubmV4dE1hcmtlci54LWoucHJldk1hcmtlci54KSpkLHk6ai5wcmV2TWFya2VyLnkrKGoubmV4dE1hcmtlci55LWoucHJldk1hcmtlci55KSpkLHo6ai5wcmV2TWFya2VyLnorKGoubmV4dE1hcmtlci56LWoucHJldk1hcmtlci56KSpkfX19S1EoTjEsSDEsSC5jdXJyZW50LFgxLmN1cnJlbnQscyxrLmN1cnJlbnQ9PT0icGxheWluZyIsTDEpfW09cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGcpfTtyZXR1cm4gbT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZyksKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKG0pfSxbXSkseSgoKT0+e2xldCBtPXNldEludGVydmFsKCgpPT57aWYoay5jdXJyZW50PT09InBsYXlpbmciKVYoe3N0YXR1czoicGxheWluZyIsYXJjOkguY3VycmVudCxlbGFwc2VkTXM6Uy5jdXJyZW50fSl9LDI1MCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwobSl9LFtdKSx5KCgpPT57aWYoVS5zdGF0dXMhPT0icGxheWluZyIpcmV0dXJuO2xldCBtPSExLGc9MCxzPW51bGwsWTE9YXN5bmMoKT0+e2lmKG18fHMpcmV0dXJuO2xldCBOMT1EYXRlLm5vdygpO2lmKE4xLWc8cTYpcmV0dXJuO2c9TjE7bGV0IEgxPW0wKEUuY3VycmVudCxILmN1cnJlbnQpLEwxPWB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtIMS5sYXQudG9GaXhlZCg3KX0sJHtIMS5sbmcudG9GaXhlZCg3KX1gO3M9UShMMSkudGhlbigoaik9PntpZihtKXJldHVybjtpZihqLmV4aXRDb2RlIT09MClMKFU2KGouc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBMKG51bGwpfSkuY2F0Y2goKGopPT57aWYoIW0pTChqIGluc3RhbmNlb2YgRXJyb3I/ai5tZXNzYWdlOlN0cmluZyhqKSl9KS5maW5hbGx5KCgpPT57cz1udWxsfSl9O1kxKCk7bGV0IFYxPXNldEludGVydmFsKFkxLHE2KTtyZXR1cm4oKT0+e209ITAsY2xlYXJJbnRlcnZhbChWMSl9fSxbVS5zdGF0dXMsJCxRXSk7bGV0IGM9RCgoKT0+e2lmKGsuY3VycmVudD09PSJwbGF5aW5nIil7ay5jdXJyZW50PSJwYXVzZWQiLFYoKG0pPT4oey4uLm0sc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihILmN1cnJlbnQ+PUUuY3VycmVudC50b3RhbERpc3RhbmNlJiYhRS5jdXJyZW50LnRyYWlsLmxvb3ApSC5jdXJyZW50PTAsUy5jdXJyZW50PTA7aWYoYi5jdXJyZW50PT1udWxsKXtsZXQgbT1tMChFLmN1cnJlbnQsSC5jdXJyZW50KTtiLmN1cnJlbnQ9e2xhdDptLmxhdCxsbmc6bS5sbmd9fWsuY3VycmVudD0icGxheWluZyIsVigobSk9Pih7Li4ubSxzdGF0dXM6InBsYXlpbmciLGFyYzpILmN1cnJlbnQsZWxhcHNlZE1zOlMuY3VycmVudH0pKX0sW10pLCQxPUQoKCk9PntrLmN1cnJlbnQ9ImlkbGUiLEguY3VycmVudD0wLFMuY3VycmVudD0wLFYoVzMpO2xldCBtPWIuY3VycmVudDtiLmN1cnJlbnQ9bnVsbDtsZXQgZz1tP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHttLmxhdC50b0ZpeGVkKDcpfSwke20ubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO1EoZykudGhlbigocyk9PntpZihzLmV4aXRDb2RlIT09MClMKFU2KHMuc3RkZXJyKXx8bnVsbCk7ZWxzZSBMKG51bGwpfSl9LFtRLCRdKSxVMT1EKChtKT0+e1kobSk7bGV0IGc9cDAuZmluZCgocyk9PnMuaWQ9PT1tKTtpZihnKUcoZy5tb2RlKX0sW10pO3koKCk9PigpPT57aWYoay5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgbT1iLmN1cnJlbnQsZz1tP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHttLmxhdC50b0ZpeGVkKDcpfSwke20ubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO1EoZykuY2F0Y2goKCk9Pnt9KX0sW1EsJF0pO2xldCBLMT1VLnN0YXR1cz09PSJwbGF5aW5nIixNMT1LMT9gJHtEMyhVLmFyYyl9IMK3ICR7QjYoVS5lbGFwc2VkTXMpfWA6RDMoQy50b3RhbERpc3RhbmNlKTtyZXR1cm4gSyhKMCx7b3BlbjpKLG9uT3BlbkNoYW5nZTpaLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvX21pbm1heCgwLDFmcilfYXV0b10gW2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoZSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEo/Sygic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cyI6ITAsY2xhc3NOYW1lOiJtaW4tdy0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIG1heC13LWZ1bGwiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjJzLGJveC1zaGFkb3dfMC4yc10iLHN0eWxlOntiYWNrZ3JvdW5kOksxPyIjNGFkZTgwIjpDLnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzpLMT8iMCAwIDZweCByZ2JhKDc0LDIyMiwxMjgsMC43KSI6Im5vbmUifX0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMiLGNoaWxkcmVuOk0xfSksIUsxJiZLKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsIjohMCxjbGFzc05hbWU6InNocmluay0wIixjaGlsZHJlbjoidG90YWwifSldfSk6Sygic3BhbiIse30pXX0pLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGJsb2NrIixjaGlsZHJlbjpbSyhQNSx7bGFiZWw6IlRyYWlsIix2YWx1ZTpYLG9uQ2hhbmdlOlUxLG9wdGlvbnM6cDAubWFwKChtKT0+KHt2YWx1ZTptLmlkLGxhYmVsOm0ubmFtZX0pKSxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIGhvdmVyOmJnLXdoaXRlL1swLjA3XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xNildIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZS9bMC4wOF0gZm9jdXM6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMjQpXSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC1bOXB4XSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SyhJMix7b3BlbjohMX0pfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpGLmRlc2NyaXB0aW9ufSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLVsjMGEwYTBjXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSBbYXNwZWN0LXJhdGlvOjE2LzExXSIsY2hpbGRyZW46W0soImNhbnZhcyIse3JlZjpsLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBibG9jayJ9KSxLKHQkLHtwcmVwYXJlZDpDfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyXzFmcl8xZnJdIGdhcC0xLjUiLGNoaWxkcmVuOltLKFAzLHtsYWJlbDoiRGlzdGFuY2UiLHZhbHVlOkQzKFUuYXJjKX0pLEsoUDMse2xhYmVsOiJQYWNlIix2YWx1ZTpYUShfLmN1cnJlbnQpfSksSyhQMyx7bGFiZWw6IkVsYXBzZWQiLHZhbHVlOkI2KFUuZWxhcHNlZE1zKX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMS41IixjaGlsZHJlbjpbSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOmMsY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gJHtLMT8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJ9YCwiYXJpYS1wcmVzc2VkIjpLMSx0aXRsZTpLMT8iUGF1c2UiOiJQbGF5IixjaGlsZHJlbjpbSzE/SyhLMyx7fSk6SyhiMix7fSksSygic3BhbiIse2NoaWxkcmVuOksxPyJQYXVzZSI6IlBsYXkifSldfSksSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOiQxLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wNl0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvMjAgZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIixkaXNhYmxlZDpVLnN0YXR1cz09PSJpZGxlIiYmVS5hcmM9PT0wLHRpdGxlOiJTdG9wIGFuZCBjbGVhciBzaW11bGF0ZWQgbG9jYXRpb24iLGNoaWxkcmVuOltLKHkyLHt9KSxLKCJzcGFuIix7Y2hpbGRyZW46IlN0b3AifSldfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOksocyQse2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOnEsb25DaGFuZ2U6KG0pPT5HKG0pLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246SyhYMyx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOksoWTMse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246SyhxMyx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpLKEczLHt9KX1dfSl9KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgbT1fMy5pbmRleE9mKE4pLGc9XzNbKG0rMSklXzMubGVuZ3RoXTtCKGcpfSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHB4LTIuNSBib3JkZXIgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIG1pbi13LVs1NnB4XSBhY3RpdmU6c2NhbGUtWzAuOTddICR7Tj4xPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gaG92ZXI6Ymctd2hpdGUvWzAuODhdIGhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gaG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBob3ZlcjpiZy13aGl0ZS9bMC4wOV0gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgU3BlZWQgJHtOfcOXIOKAlCB0YXAgdG8gY3ljbGVgLHRpdGxlOmBTcGVlZCAke059w5cg4oCUIHRhcCB0byBjeWNsZWAsY2hpbGRyZW46W0soWjMse30pLE4+MSYmSygic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIFtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXNdIixjaGlsZHJlbjpbTiwiw5ciXX0pXX0pXX0pLHomJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46en0pXX0pfXZhciBQMz14MChmdW5jdGlvbih7bGFiZWw6USx2YWx1ZTpKfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJnLXdoaXRlL1swLjAzXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSByb3VuZGVkLW1kIHB5LVs1cHhdIHB4LVs3cHhdIG1pbi13LTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzlweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjA2ZW1dIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOlF9KSxLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpKfSldfSl9KTtmdW5jdGlvbiBzJCh7dmFsdWU6JCxvbkNoYW5nZTpRLG9wdGlvbnM6SixhcmlhTGFiZWw6Wn0pe3JldHVybiBLKCJkaXYiLHtyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOlosY2xhc3NOYW1lOiJmbGV4IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBwLTAuNSBnYXAtMC41IixjaGlsZHJlbjpKLm1hcCgoWCk9PntsZXQgWT1YLnZhbHVlPT09JDtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5RKFgudmFsdWUpLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gcHktWzVweF0gcHgtMiB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSBtaW4taC1bMjJweF0gJHtZPyJiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvNjAgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIGhvdmVyOnRleHQtd2hpdGUvOTAifWAsImFyaWEtcHJlc3NlZCI6WSwiYXJpYS1sYWJlbCI6WC5pY29uP1gubGFiZWw6dm9pZCAwLHRpdGxlOlguaWNvbj9YLmxhYmVsOnZvaWQgMCxjaGlsZHJlbjpYLmljb24/P1gubGFiZWx9LFgudmFsdWUpfSl9KX1mdW5jdGlvbiB0JCh7cHJlcGFyZWQ6JH0pe2lmKCQucmF3TWF4QWx0LSQucmF3TWluQWx0PDUpcmV0dXJuIG51bGw7cmV0dXJuIEsoZSx7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltLKFk1LHtkaXI6InVwIn0pLCIgIixONigkLnJhd01heEFsdCldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltLKFk1LHtkaXI6ImRvd24ifSksIiAiLE42KCQucmF3TWluQWx0KV19KV19KX12YXIgRzY9MTQwO2Z1bmN0aW9uIFY2KCQsUSl7bGV0IEo9QXJyYXkoUSk7Zm9yKGxldCBaPTA7WjxRO1orKyl7bGV0IFg9UT09PTE/MDpaLyhRLTEpLFk9bTAoJCxYKiQudG90YWxEaXN0YW5jZSk7SltaXT17eDpZLngseTpZLnksejpZLnp9fXJldHVybiBKfWZ1bmN0aW9uIGUkKCQsUSxKLFope2xldCBYPSgkLmJvdW5kcy54WzBdKyQuYm91bmRzLnhbMV0pLzIsWT0oJC5ib3VuZHMuelswXSskLmJvdW5kcy56WzFdKS8yLHE9JC5ib3VuZHMueVswXSxHPU1hdGgubWF4KDEsJC5ib3VuZHMueFsxXS0kLmJvdW5kcy54WzBdLCQuYm91bmRzLnpbMV0tJC5ib3VuZHMuelswXSksTj0oSi5ib3VuZHMueFswXStKLmJvdW5kcy54WzFdKS8yLEI9KEouYm91bmRzLnpbMF0rSi5ib3VuZHMuelsxXSkvMixVPUouYm91bmRzLnlbMF0sej1NYXRoLm1heCgxLEouYm91bmRzLnhbMV0tSi5ib3VuZHMueFswXSxKLmJvdW5kcy56WzFdLUouYm91bmRzLnpbMF0pL0csRj1WNigkLEc2KS5tYXAoKHYpPT4oe3g6KHYueC1YKSp6K04seToodi55LXEpKnorVSx6Oih2LnotWSkqeitCfSkpLEM9VjYoSixHNiksSD0oJC50cmFpbC5sb29wfHxKLnRyYWlsLmxvb3ApPz8hMSxrPSRRKEYsQyxIKSxfPW0wKCQsUSksUz17eDooXy54LVgpKnorTix5OihfLnktcSkqeitVLHo6KF8uei1ZKSp6K0J9LEU9bTAoSiwwKSxiPXt4OkUueCx5OkUueSx6OkUuen07cmV0dXJue2Zyb206JCx0bzpKLGZyb21QdHM6Rix0b1B0czprLHByZXZNYXJrZXI6UyxuZXh0TWFya2VyOmIsc3RhcnRNczpafX1mdW5jdGlvbiAkUSgkLFEsSil7bGV0IFo9JC5sZW5ndGgsWD0xLzAsWT0wLHE9ITEsRz1bUSxbLi4uUV0ucmV2ZXJzZSgpXTtmb3IobGV0IFU9MDtVPEcubGVuZ3RoO1UrKyl7bGV0IFY9R1tVXSx6PUo/WjoxO2ZvcihsZXQgTD0wO0w8ejtMKyspe2xldCBGPTA7Zm9yKGxldCBDPTA7QzxaO0MrKyl7bGV0IEg9JFtDXSxrPVZbKEMrTCklWl0sXz1ILngtay54LFM9SC55LWsueSxFPUguei1rLno7aWYoRis9XypfK1MqUytFKkUsRj49WClicmVha31pZihGPFgpWD1GLFk9TCxxPVU9PT0xfX1sZXQgTj1xP1suLi5RXS5yZXZlcnNlKCk6USxCPUFycmF5KFopO2ZvcihsZXQgVT0wO1U8WjtVKyspQltVXT1OWyhVK1kpJVpdO3JldHVybiBCfWZ1bmN0aW9uIFFRKCQsUSl7bGV0IEo9JC5mcm9tUHRzLmxlbmd0aCxaPUFycmF5KEopLFg9MCxZPW51bGwscT0xLzAsRz0tMS8wLE49MS8wLEI9LTEvMCxVPTEvMCxWPS0xLzA7Zm9yKGxldCB6PTA7ejxKO3orKyl7bGV0IEw9JC5mcm9tUHRzW3pdLEY9JC50b1B0c1t6XSxDPUwueCsoRi54LUwueCkqUSxIPUwueSsoRi55LUwueSkqUSxrPUwueisoRi56LUwueikqUTtpZihZKXtsZXQgUz1DLVkueCxFPUgtWS55LGI9ay1ZLno7WCs9TWF0aC5zcXJ0KFMqUytFKkUrYipiKX1sZXQgXz17eDpDLHk6SCx6OmssYXJjOlgsbGF0OjAsbG5nOjB9O2lmKFpbel09XyxZPV8sQzxxKXE9QztpZihDPkcpRz1DO2lmKEg8TilOPUg7aWYoSD5CKUI9SDtpZihrPFUpVT1rO2lmKGs+VilWPWt9cmV0dXJue3RyYWlsOiQudG8udHJhaWwsb3JpZ2luOiQudG8ub3JpZ2luLHBvaW50czpaLHRvdGFsRGlzdGFuY2U6WCxib3VuZHM6e3g6W3EsR10seTpbTixCXSx6OltVLFZdfSxyYXdNaW5BbHQ6JC50by5yYXdNaW5BbHQrKCQuZnJvbS5yYXdNaW5BbHQtJC50by5yYXdNaW5BbHQpKigxLVEpLHJhd01heEFsdDokLnRvLnJhd01heEFsdCsoJC5mcm9tLnJhd01heEFsdC0kLnRvLnJhd01heEFsdCkqKDEtUSl9fWZ1bmN0aW9uIEpRKCQpe3JldHVybiAkPDAuNT8yKiQqJDoxLU1hdGgucG93KC0yKiQrMiwyKS8yfWZ1bmN0aW9uIEtRKCQsUSxKLFosWCxZLHEpe2xldCBHPSQuZ2V0Q29udGV4dCgiMmQiKTtpZighRylyZXR1cm47bGV0e2NsaWVudFdpZHRoOk4sY2xpZW50SGVpZ2h0OkJ9PSQ7aWYoTj09PTB8fEI9PT0wKXJldHVybjtsZXQgVT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MToxLFY9TWF0aC5yb3VuZChOKlUpLHo9TWF0aC5yb3VuZChCKlUpO2lmKCQud2lkdGghPT1WfHwkLmhlaWdodCE9PXopJC53aWR0aD1WLCQuaGVpZ2h0PXo7Ry5zZXRUcmFuc2Zvcm0oVSwwLDAsVSwwLDApLEcuY2xlYXJSZWN0KDAsMCxOLEIpO2xldCBMPUcuY3JlYXRlUmFkaWFsR3JhZGllbnQoTiowLjUsQiowLjU1LE1hdGgubWluKE4sQikqMC4yLE4qMC41LEIqMC41NSxNYXRoLm1heChOLEIpKjAuODUpO0wuYWRkQ29sb3JTdG9wKDAsIiMxYTFhMWQiKSxMLmFkZENvbG9yU3RvcCgxLCIjMGEwYTBjIiksRy5maWxsU3R5bGU9TCxHLmZpbGxSZWN0KDAsMCxOLEIpLFpRKEcsTixCKTtsZXR7cG9pbnRzOkYsYm91bmRzOkN9PVE7aWYoRi5sZW5ndGg8MilyZXR1cm47bGV0IEg9MjgqTWF0aC5QSS8xODAsaz1NYXRoLnNpbihIKSxfPU1hdGguY29zKEgpLFM9TWF0aC5zaW4oWiksRT1NYXRoLmNvcyhaKSxiPShDLnhbMF0rQy54WzFdKS8yLHY9KEMuelswXStDLnpbMV0pLzIsWDE9Qy54WzFdLUMueFswXSxmPUMuelsxXS1DLnpbMF0sbD1DLnlbMV0tQy55WzBdLGM9TWF0aC5tYXgoWDEsZikqMS4wNSwkMT1NYXRoLm1heChmKl8rbCprLFgxKjAuNCkqMS4xNSxVMT1OKjAuMDgsSzE9QiowLjE4LE0xPU1hdGgubWluKChOLVUxKjIpL2MsKEItSzEqMikvJDEpKjEuNDUsbT1sPDE/MTpNYXRoLm1pbigyNCwxNDAvTWF0aC5tYXgoMjAsbCkpLGc9KGosbixkKT0+e2xldCBaMT1qLWIsRDE9ZC12LHc9WjEqRStEMSpTLHA9LVoxKlMrRDEqRSxRMT1uKm0sejE9UTEqXy1wKmsseD1RMSprK3AqXztyZXR1cm57c3g6Ti8yK3cqTTEsc3k6QiowLjU1LXoxKk0xLGRlcHRoOnh9fSxzPTM4LFkxPUYubWFwKChqKT0+e2xldCBuPWcoai54LGoueSxqLnopLGQ9ZyhqLngsMCxqLnopLFoxPXtzeDpuLnN4LHN5Ok1hdGgubWF4KGQuc3ksbi5zeStzKSxkZXB0aDpkLmRlcHRofTtyZXR1cm57cDpqLHRvcDpuLGJvdDpaMX19KTtmb3IobGV0IGo9MTtqPFkxLmxlbmd0aDtqKyspe2xldCBuPVkxW2otMV0sZD1ZMVtqXSxaMT1HLmNyZWF0ZUxpbmVhckdyYWRpZW50KChuLnRvcC5zeCtkLnRvcC5zeCkvMiwobi50b3Auc3krZC50b3Auc3kpLzIsKG4uYm90LnN4K2QuYm90LnN4KS8yLChuLmJvdC5zeStkLmJvdC5zeSkvMik7WjEuYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMC41NSkiKSxaMS5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLFoxLmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIiksWjEuYWRkQ29sb3JTdG9wKDEsInJnYmEoMCwwLDAsMCkiKSxHLmZpbGxTdHlsZT1aMSxHLmJlZ2luUGF0aCgpLEcubW92ZVRvKG4udG9wLnN4LG4udG9wLnN5KSxHLmxpbmVUbyhkLnRvcC5zeCxkLnRvcC5zeSksRy5saW5lVG8oZC5ib3Quc3gsZC5ib3Quc3kpLEcubGluZVRvKG4uYm90LnN4LG4uYm90LnN5KSxHLmNsb3NlUGF0aCgpLEcuZmlsbCgpfUcuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLEcubGluZVdpZHRoPTEuNixHLmxpbmVDYXA9InJvdW5kIixHLmxpbmVKb2luPSJyb3VuZCIsRy5iZWdpblBhdGgoKTtmb3IobGV0IGo9MDtqPFkxLmxlbmd0aDtqKyspe2xldHt0b3A6bn09WTFbal07aWYoaj09PTApRy5tb3ZlVG8obi5zeCxuLnN5KTtlbHNlIEcubGluZVRvKG4uc3gsbi5zeSl9Ry5zdHJva2UoKTtsZXQgVjE9SjtHLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixHLmxpbmVXaWR0aD0yLjIsRy5iZWdpblBhdGgoKTtsZXQgTjE9ITE7Zm9yKGxldCBqPTA7ajxZMS5sZW5ndGg7aisrKXtsZXR7cDpuLHRvcDpkfT1ZMVtqXTtpZihuLmFyYz5WMSlicmVhaztpZighTjEpRy5tb3ZlVG8oZC5zeCxkLnN5KSxOMT0hMDtlbHNlIEcubGluZVRvKGQuc3gsZC5zeSl9aWYoTjEpRy5zdHJva2UoKTtsZXQgSDE9cT8/bTAoUSxKKSxMMT1nKEgxLngsSDEueSxIMS56KTtpZihZKXtsZXQgZD1YJTI2MDAvMjYwMCxaMT00KzIyKmQsRDE9MC4yMiooMS1kKSx3PUcuY3JlYXRlUmFkaWFsR3JhZGllbnQoTDEuc3gsTDEuc3ksWjEqMC41LEwxLnN4LEwxLnN5LFoxKTt3LmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksdy5hZGRDb2xvclN0b3AoMC43LGByZ2JhKDI1NSwyNTUsMjU1LCR7RDEudG9GaXhlZCgzKX0pYCksdy5hZGRDb2xvclN0b3AoMSwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLEcuZmlsbFN0eWxlPXcsRy5iZWdpblBhdGgoKSxHLmFyYyhMMS5zeCxMMS5zeSxaMSwwLE1hdGguUEkqMiksRy5maWxsKCl9Ry5maWxsU3R5bGU9IiNmZmYiLEcuYmVnaW5QYXRoKCksRy5hcmMoTDEuc3gsTDEuc3ksMy44LDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1mdW5jdGlvbiBaUSgkLFEsSil7JC5maWxsU3R5bGU9InJnYmEoMjU1LDI1NSwyNTUsMC4wNikiO2ZvcihsZXQgWT03O1k8SjtZKz0xNClmb3IobGV0IHE9NztxPFE7cSs9MTQpJC5iZWdpblBhdGgoKSwkLmFyYyhxLFksMC43LDAsTWF0aC5QSSoyKSwkLmZpbGwoKX1mdW5jdGlvbiBEMygkKXtpZigkPDEwMDApcmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYDtyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDIpfSBrbWB9ZnVuY3Rpb24gQjYoJCl7bGV0IFE9TWF0aC5mbG9vcigkLzEwMDApLEo9TWF0aC5mbG9vcihRLzM2MDApLFo9TWF0aC5mbG9vcihRJTM2MDAvNjApLFg9USU2MDtpZihKPjApcmV0dXJuYCR7Sn06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YDtyZXR1cm5gJHtafToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiBYUSgkKXtpZigkPD0wKXJldHVybiLigJQiO2lmKCQ+NylyZXR1cm5gJHsoJCozLjYpLnRvRml4ZWQoMCl9IGttL2hgO2xldCBRPTEwMDAvJCxKPU1hdGguZmxvb3IoUS82MCksWj1NYXRoLnJvdW5kKFElNjApO3JldHVybmAke0p9OiR7Wi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0va21gfWZ1bmN0aW9uIE42KCQpe3JldHVybmAkeyQudG9GaXhlZCgwKX0gbWB9ZnVuY3Rpb24gVTYoJCl7bGV0IFE9JC50cmltKCk7aWYoIVEpcmV0dXJuIiI7bGV0IEo9US5tYXRjaCgvUmVhc29uOlxzKiguKykkL20pO2lmKEopcmV0dXJuIEpbMV07cmV0dXJuIFEuc3BsaXQoYApgKS5zbGljZSgtMSlbMF0/P1F9YXN5bmMgZnVuY3Rpb24gVDMoJCxRLEope2xldCBaPWF3YWl0ICQoYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciAke1F9ICR7azEoSil9IGFwcGApO2lmKFouZXhpdENvZGUhPT0wKXJldHVybntlcnJvcjpaLnN0ZGVyci50cmltKCl8fCJBcHAgbm90IGZvdW5kIG9uIHNpbXVsYXRvciJ9O2xldCBYPVouc3Rkb3V0LnRyaW0oKTtpZighWClyZXR1cm57ZXJyb3I6IkVtcHR5IGFwcCBwYXRoIn07bGV0IFk9YXdhaXQgJChgcGx1dGlsIC1jb252ZXJ0IGpzb24gLW8gLSAke2sxKFgrIi9JbmZvLnBsaXN0Iil9YCkscT17fTtpZihZLmV4aXRDb2RlPT09MCl0cnl7cT1KU09OLnBhcnNlKFkuc3Rkb3V0KX1jYXRjaHt9bGV0IEcsQj0ocT8uQ0ZCdW5kbGVJY29ucz8uQ0ZCdW5kbGVQcmltYXJ5SWNvbj8/cT8uWyJDRkJ1bmRsZUljb25zfmlwYWQiXT8uQ0ZCdW5kbGVQcmltYXJ5SWNvbik/LkNGQnVuZGxlSWNvbkZpbGVzPz9xPy5DRkJ1bmRsZUljb25GaWxlcztpZihCJiZCLmxlbmd0aD4wKUc9QltCLmxlbmd0aC0xXTtlbHNlIGlmKHR5cGVvZiBxPy5DRkJ1bmRsZUljb25GaWxlPT09InN0cmluZyIpRz1xLkNGQnVuZGxlSWNvbkZpbGU7bGV0IFU9bnVsbDtpZihHKXtsZXQgVj1bYCR7R31AM3gucG5nYCxgJHtHfUAyeC5wbmdgLGAke0d9LnBuZ2AsYCR7R302MHg2MEAzeC5wbmdgLGAke0d9NjB4NjBAMngucG5nYF0sTD0oYXdhaXQgJChgYmFzaCAtYyAke2sxKFYubWFwKChGKT0+YFsgLWYgJHtrMShYKyIvIitGKX0gXSAmJiBlY2hvICR7azEoWCsiLyIrRil9ICYmIGV4aXQgMGApLmpvaW4oIjsgIikrIjsgZXhpdCAxIil9YCkpLnN0ZG91dC50cmltKCk7aWYoTCl7bGV0IEY9YXdhaXQgJChgYmFzZTY0IC1pICR7azEoTCl9YCk7aWYoRi5leGl0Q29kZT09PTApVT1gZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7Ri5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpfWB9fXJldHVybnthcHBQYXRoOlgsZGlzcGxheU5hbWU6cS5DRkJ1bmRsZURpc3BsYXlOYW1lPz9xLkNGQnVuZGxlTmFtZSxzaG9ydFZlcnNpb246cS5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyxidW5kbGVWZXJzaW9uOnEuQ0ZCdW5kbGVWZXJzaW9uLG1pbk9TOnEuTWluaW11bU9TVmVyc2lvbixleGVjdXRhYmxlOnEuQ0ZCdW5kbGVFeGVjdXRhYmxlLGljb25EYXRhVXJsOlV9fXZhciBYMj1uZXcgTWFwO2Z1bmN0aW9uIHo2KCQsUSxKKXtsZXQgWj1gJHtRfToke0p9YCxYPVgyLmdldChaKTtpZihYIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoWCk7bGV0IFk9VDMoJCxRLEopLnRoZW4oKHEpPT57bGV0IEc9cS5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gWDIuc2V0KFosRyksR30pLmNhdGNoKCgpPT57cmV0dXJuIFgyLnNldChaLG51bGwpLG51bGx9KTtyZXR1cm4gWDIuc2V0KFosWSksWX1mdW5jdGlvbiBZUSgkKXtyZXR1cm4gJC5zdGFydHNXaXRoKCJjb20uYXBwbGUuIil9ZnVuY3Rpb24gcVEoJCl7aWYoJD09PSJjb20uYXBwbGUuc3ByaW5nYm9hcmQiKXJldHVybiJTcHJpbmdCb2FyZCI7cmV0dXJuICR9ZnVuY3Rpb24gR1Eoe2J1bmRsZUlkOiR9KXtsZXQgUT1ZUSgkKTtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjpRPyJzeXN0ZW0tYXBwLWljb24iOiJhcHAtaWNvbi1mYWxsYmFjayIsY2xhc3NOYW1lOmB3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBib3JkZXIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgJHtRPyJib3JkZXItWyMzYjVmOTldIGJnLVtsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMildIHRleHQtWyNjOGQ3ZmZdIjoiYm9yZGVyLXdoaXRlLzEwIGJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzgwIn1gLCJhcmlhLWxhYmVsIjpRPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLHRpdGxlOlE/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsY2hpbGRyZW46UT9LKCJzdmciLHtyb2xlOiJpbWciLHZpZXdCb3g6IjAgMCAyNCAyNCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6InNpemUtWzE5cHhdIixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltLKCJ0aXRsZSIse2NoaWxkcmVuOiJBcHBsZSJ9KSxLKCJwYXRoIix7ZDoiTTEyLjE1MiA2Ljg5NmMtLjk0OCAwLTIuNDE1LTEuMDc4LTMuOTYtMS4wNC0yLjA0LjAyNy0zLjkxIDEuMTgzLTQuOTYxIDMuMDE0LTIuMTE3IDMuNjc1LS41NDYgOS4xMDMgMS41MTkgMTIuMDkgMS4wMTMgMS40NTQgMi4yMDggMy4wOSAzLjc5MiAzLjAzOSAxLjUyLS4wNjUgMi4wOS0uOTg3IDMuOTM1LS45ODcgMS44MzEgMCAyLjM1Ljk4NyAzLjk2Ljk0OCAxLjYzNy0uMDI2IDIuNjc2LTEuNDggMy42NzYtMi45NDggMS4xNTYtMS42ODggMS42MzYtMy4zMjUgMS42NjItMy40MTUtLjAzOS0uMDEzLTMuMTgyLTEuMjIxLTMuMjItNC44NTctLjAyNi0zLjA0IDIuNDgtNC40OTQgMi41OTctNC41NTktMS40MjktMi4wOS0zLjYyMy0yLjMyNC00LjM5LTIuMzc2LTItLjE1Ni0zLjY3NSAxLjA5LTQuNjEgMS4wOXpNMTUuNTMgMy44M2MuODQzLTEuMDEyIDEuNC0yLjQyNyAxLjI0NS0zLjgzLTEuMjA3LjA1Mi0yLjY2Mi44MDUtMy41MzIgMS44MTgtLjc4Ljg5Ni0xLjQ1NCAyLjMzOC0xLjI3MyAzLjcxNCAxLjMzOC4xMDQgMi43MTUtLjY4OCAzLjU1OS0xLjcwMSJ9KV19KTpLKEgyLHtzaXplOjE5LHN0cm9rZVdpZHRoOjEuOX0pfSl9ZnVuY3Rpb24gVlEoe2J1bmRsZUlkOiQsaWNvbkRhdGFVcmw6UX0pe2lmKFEpcmV0dXJuIEsoImltZyIse3NyYzpRLGNsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIGJvcmRlciBib3JkZXItd2hpdGUvOCIsYWx0OiIifSk7cmV0dXJuIEsoR1Ese2J1bmRsZUlkOiR9KX1mdW5jdGlvbiBDNih7dWRpZDokLGN1cnJlbnRBcHA6UX0pe2xldFtKLFpdPU0obnVsbCksW1gsWV09TSghMSk7aWYoeSgoKT0+e2lmKCFRKXtaKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gWih7YnVuZGxlSWQ6US5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOlEuaXNSZWFjdE5hdGl2ZSxwaWQ6US5waWQsbG9hZGluZzohMH0pLFQzKFAxLCQsUS5idW5kbGVJZCkudGhlbigoRyk9PntpZihxKXJldHVybjtaKHtidW5kbGVJZDpRLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6US5pc1JlYWN0TmF0aXZlLHBpZDpRLnBpZCxsb2FkaW5nOiExLC4uLkd9KX0pLCgpPT57cT0hMH19LFskLFEsUT8uYnVuZGxlSWQsUT8ucGlkLFE/LmlzUmVhY3ROYXRpdmVdKSwhSilyZXR1cm4gSyhCUSx7fSk7cmV0dXJuIEsoSjAse29wZW46WCxvbk9wZW5DaGFuZ2U6WSxzdW1tYXJ5Q2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhlLHtjaGlsZHJlbjpbSyhWUSx7YnVuZGxlSWQ6Si5idW5kbGVJZCxpY29uRGF0YVVybDpKLmljb25EYXRhVXJsfSksSyhOUSx7YnVuZGxlSWQ6Si5idW5kbGVJZCxkaXNwbGF5TmFtZTpKLmRpc3BsYXlOYW1lfSldfSksY2hpbGRyZW46W0ouZXJyb3ImJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46Si5lcnJvcn0pLEsoImRsIix7Y2xhc3NOYW1lOiJtLTAgZmxleCBmbGV4LWNvbCBnYXAtMS41IixjaGlsZHJlbjpbSyhZMix7bGFiZWw6IlZlcnNpb24iLHZhbHVlOkouc2hvcnRWZXJzaW9uP2Ake0ouc2hvcnRWZXJzaW9ufSAoJHtKLmJ1bmRsZVZlcnNpb24/PyLigJQifSlgOkoubG9hZGluZz8i4oCmIjoi4oCUIn0pLEsoWTIse2xhYmVsOiJNaW4gaU9TIix2YWx1ZTpKLm1pbk9TPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKX0pLEsoWTIse2xhYmVsOiJFeGVjdXRhYmxlIix2YWx1ZTpKLmV4ZWN1dGFibGU/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksSyhZMix7bGFiZWw6IlBJRCIsdmFsdWU6Si5waWQhPW51bGw/U3RyaW5nKEoucGlkKToi4oCUIn0pLEouaXNSZWFjdE5hdGl2ZSYmSyhZMix7bGFiZWw6IlJlYWN0IE5hdGl2ZSIsdmFsdWU6IlllcyJ9KSxLKFkyLHtsYWJlbDoiQXBwIHBhdGgiLHZhbHVlOkouYXBwUGF0aD8/KEoubG9hZGluZz8i4oCmIjoi4oCUIiksbW9ubzohMCxhY3Rpb246Si5hcHBQYXRoP3t0aXRsZToiUmV2ZWFsIGluIEZpbmRlciIsb25DbGljazooKT0+e1AxKGBvcGVuIC1SICR7azEoSi5hcHBQYXRoKX1gKX0saWNvbjpLKEYyLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuMn0pfTp2b2lkIDB9KV19KV19KX1mdW5jdGlvbiBCUSgpe3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtZGV0ZWN0aW9uLXNrZWxldG9uIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtbGFiZWwiOiJXYWl0aW5nIGZvciBmb3JlZ3JvdW5kIGFwcCIsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBiZy13aGl0ZS9bMC4wOF0ifSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImgtMy41IHctWzQ2JV0gcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjEyXSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTIuNSB3LVs2OCVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSksSygic3BhbiIse2NsYXNzTmFtZToidy0yLjUgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSJ9KV19KX0pfWZ1bmN0aW9uIE5RKHtidW5kbGVJZDokLGRpc3BsYXlOYW1lOlF9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBsZWFkaW5nLXRpZ2h0IHRleHQtbGVmdCIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIHRydW5jYXRlIixjaGlsZHJlbjpRPz9xUSgkKX0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdHJ1bmNhdGUiLHRpdGxlOiQsY2hpbGRyZW46JH0pXX0pfWZ1bmN0aW9uIFkyKHtsYWJlbDokLHZhbHVlOlEsbW9ubzpKLGFjdGlvbjpafSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZ3JvdXAgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSygiZHQiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOiR9KSxLKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtd2hpdGUvOTAgZmxleC0xIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgcmVsYXRpdmUgJHtKPyJmb250LW1vbm8gdGV4dC1bMTFweF0iOiJ0ZXh0LVsxMnB4XSJ9YCx0aXRsZTpRLGNoaWxkcmVuOltRLFomJksoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCBwbC03IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQscmdiYSgyOCwyOCwzMCwwKV8wJSwjMWMxYzFlXzU1JSldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSx0cmFuc2Zvcm1fMC4xNXNfZWFzZV0gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LTEgcG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGdyb3VwLWhvdmVyOnBvaW50ZXItZXZlbnRzLWF1dG8iLGNoaWxkcmVuOksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpaLm9uQ2xpY2ssdGl0bGU6Wi50aXRsZSwiYXJpYS1sYWJlbCI6Wi50aXRsZSxjbGFzc05hbWU6InctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46Wi5pY29ufSl9KV19KV19KX12YXIgSDY9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im5vdGlmaWNhdGlvbnMiLGxhYmVsOiJOb3RpZmljYXRpb25zIn0se2tleToibW90aW9uIixsYWJlbDoiTW90aW9uIn0se2tleToibWVkaWEtbGlicmFyeSIsbGFiZWw6Ik1lZGlhIExpYnJhcnkifSx7a2V5OiJzaXJpIixsYWJlbDoiU2lyaSJ9XTtmdW5jdGlvbiBGNih7dWRpZDokLGJ1bmRsZUlkOlF9KXtsZXRbSixaXT1NKHt9KSxbWCxZXT1NKG51bGwpLFtxLEddPU0obnVsbCksW04sQl09TSghMSksVT1XMSgoKT0+e2xldCBMPXR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5zZXJ2ZVNpbUJpbjtpZighTClyZXR1cm4ic2VydmUtc2ltIjtpZigvXC50cyQvLnRlc3QoTCkpcmV0dXJuYGJ1biAke2sxKEwpfWA7aWYoL1wuanMkLy50ZXN0KEwpKXJldHVybmBub2RlICR7azEoTCl9YDtyZXR1cm4gazEoTCl9LFtdKTt5KCgpPT57Wih7fSksRyhudWxsKX0sW1FdKTtsZXQgVj1EKGFzeW5jKEwsRik9PntpZighUSlyZXR1cm47bGV0IEM9YCR7TH06JHtGfWA7WShDKSxHKG51bGwpO3RyeXtsZXQgSD1hd2FpdCBQMShgJHtVfSBwZXJtaXNzaW9ucyAke0Z9ICR7TH0gJHtrMShRKX0gLWQgJHtrMSgkKX1gKTtpZihILmV4aXRDb2RlIT09MCl7RyhILnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7SC5leGl0Q29kZX0pYCk7cmV0dXJufVooKGspPT4oey4uLmssW0xdOkY9PT0icmVzZXQiP3ZvaWQgMDpGfSkpfWZpbmFsbHl7WShudWxsKX19LFtVLCQsUV0pLHo9RChhc3luYygpPT57aWYoIVEpcmV0dXJuO1koIl9fYWxsX18iKSxHKG51bGwpO3RyeXtsZXQgTD1hd2FpdCBQMShgJHtVfSBwZXJtaXNzaW9ucyByZXNldCBhbGwgJHtrMShRKX0gLWQgJHtrMSgkKX1gKTtpZihMLmV4aXRDb2RlIT09MCl7RyhMLnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7TC5leGl0Q29kZX0pYCk7cmV0dXJufVooe30pfWZpbmFsbHl7WShudWxsKX19LFtVLCQsUV0pO2lmKCFRKXJldHVybiBLKFVRLHt9KTtyZXR1cm4gSyhKMCx7b3BlbjpOLG9uT3BlbkNoYW5nZTpCLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoZSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLEsoInNwYW4iLHt9KV19KSxjaGlsZHJlbjpbcSYmSygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpxfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToibWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtMSBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOkg2Lm1hcCgoe2tleTpMLGxhYmVsOkZ9KT0+e2xldCBDPUpbTF07cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTAuNSBweS0xIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46Rn0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCBwLTAuNSIscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpGLGNoaWxkcmVuOltLKHczLHthY3RpdmU6Qz09PSJncmFudCIscGVuZGluZzpYPT09YCR7TH06Z3JhbnRgLG9uQ2xpY2s6KCk9PlYoTCwiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpLKGsyLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLEsodzMse2FjdGl2ZTpDPT09InJldm9rZSIscGVuZGluZzpYPT09YCR7TH06cmV2b2tlYCxvbkNsaWNrOigpPT5WKEwsInJldm9rZSIpLHZhcmlhbnQ6InJldm9rZSIsdGl0bGU6IkRlbnkiLGNoaWxkcmVuOksoWDAse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksSyh3Myx7YWN0aXZlOiExLHBlbmRpbmc6WD09PWAke0x9OnJlc2V0YCxvbkNsaWNrOigpPT5WKEwsInJlc2V0IiksdmFyaWFudDoicmVzZXQiLHRpdGxlOiJSZXNldCIsY2hpbGRyZW46SyhqMCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjR9KX0pXX0pXX0sTCl9KX0pLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSByb3VuZGVkLXQtWzEwcHhdIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fdG9wLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktZW5kIixjaGlsZHJlbjpLKCJidXR0b24iLHtvbkNsaWNrOnosZGlzYWJsZWQ6WD09PSJfX2FsbF9fIixjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS83MCB0ZXh0LVsxMHB4XSBweC0yIHB5LVszcHhdIHJvdW5kZWQtWzVweF0gY3Vyc29yLXBvaW50ZXIgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA0ZW1dIix0aXRsZToic2VydmUtc2ltIHBlcm1pc3Npb25zIHJlc2V0IGFsbCIsY2hpbGRyZW46WD09PSJfX2FsbF9fIj8i4oCmIjoiUmVzZXQgYWxsIn0pfSldfSl9ZnVuY3Rpb24gVVEoKXtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLXBlcm1pc3Npb25zLWxvYWRpbmciLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1kaXNhYmxlZCI6InRydWUiLCJhcmlhLWJ1c3kiOiJ0cnVlIixjaGlsZHJlbjpLKCJkaXYiLHtjbGFzc05hbWU6InNlbGVjdC1ub25lIHRleHQtd2hpdGUvNTUgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQgY3Vyc29yLWRlZmF1bHQiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksSygic3BhbiIse30pLEsoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJwZXJtaXNzaW9ucy1sb2FkaW5nLWluZGljYXRvciIscm9sZToic3RhdHVzIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgcGVybWlzc2lvbnMiLGNsYXNzTmFtZToic2l6ZS0yLjUgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItWyM1ZjYyNjhdIGJvcmRlci10LVsjZjRmNGY1XSBhbmltYXRlLVtncmlkLXNwaW5fMC43c19saW5lYXJfaW5maW5pdGVdIn0pXX0pfSl9ZnVuY3Rpb24gdzMoe2FjdGl2ZTokLHBlbmRpbmc6USxvbkNsaWNrOkosdmFyaWFudDpaLHRpdGxlOlgsY2hpbGRyZW46WX0pe2xldCBxPVo9PT0iZ3JhbnQiPyIjNGFkZTgwIjpaPT09InJldm9rZSI/IiNmODcxNzEiOiIjYTViNGZjIjtyZXR1cm4gSygiYnV0dG9uIix7b25DbGljazpKLGRpc2FibGVkOlEsdGl0bGU6WCwiYXJpYS1sYWJlbCI6WCxjbGFzc05hbWU6InctNiBoLTUuNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkIHAtMCBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSIsc3R5bGU6e2JhY2tncm91bmQ6JD9gJHtxfTIyYDoidHJhbnNwYXJlbnQiLGNvbG9yOiQ/cToicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIsb3BhY2l0eTpRPzAuNToxfSxjaGlsZHJlbjpZfSl9ZnVuY3Rpb24gRDUoe2xhYmVsOiQsY2hlY2tlZDpRLGRpc2FibGVkOko9ITEsb25DaGFuZ2U6Wn0pe3JldHVybiBLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6InN3aXRjaCIsImFyaWEtY2hlY2tlZCI6USwiYXJpYS1sYWJlbCI6JCxkaXNhYmxlZDpKLG9uQ2xpY2s6KCk9PlooIVEpLGNsYXNzTmFtZTpgcmVsYXRpdmUgaC1bMThweF0gdy04IHNocmluay0wIHJvdW5kZWQtZnVsbCBib3JkZXItbm9uZSBwLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtKPyJjdXJzb3ItZGVmYXVsdCBiZy13aGl0ZS8yMCI6UT8iY3Vyc29yLXBvaW50ZXIgYmctWyMwYTg0ZmZdIjoiY3Vyc29yLXBvaW50ZXIgYmctd2hpdGUvMjAifWAsY2hpbGRyZW46Sygic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLVsycHhdIHNpemUtWzE0cHhdIHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpsZWZ0XzAuMTVzXSAke0o/ImJnLXdoaXRlLzUwIjoiYmctd2hpdGUifWAsc3R5bGU6e2xlZnQ6UT8xNjoyfX0pfSl9dmFyIExRPSJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSIselE9InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbS0wIjtmdW5jdGlvbiBBNih7b3ZlcmxheUVuYWJsZWQ6JCxvblRvZ2dsZU92ZXJsYXk6UX0pe2xldHtzbmFwc2hvdDpKfT1RMigpLHtoaWdobGlnaHRlZEtleTpaLHNldEhpZ2hsaWdodGVkS2V5Olh9PUI1KCksWT1KPy5lbGVtZW50cz8/W10scT1xNShKKSxHPUo/LmVycm9ycz8uWzBdPz9udWxsO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6YCR7TFF9IHB4LTMgcHktMmAsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZTp6USxjaGlsZHJlbjoiQVggVHJlZSJ9KSxLKEQ1LHtsYWJlbDoiRW5hYmxlIG92ZXJsYXkiLGNoZWNrZWQ6JCxvbkNoYW5nZTpRfSldfSksISQ/bnVsbDpxP0soazYse2NoaWxkcmVuOiJBWCB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4ifSk6WS5sZW5ndGg9PT0wP0soazYse3NwaW5uZXI6IUcsY2hpbGRyZW46Rz8/IldhaXRpbmcgZm9yIGFjY2Vzc2liaWxpdHkgZGF0YeKApiJ9KTpLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEgbXQtMiBweS0yIG1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLHJvbGU6Imxpc3QiLGNoaWxkcmVuOlkubWFwKChOLEIpPT57bGV0IFU9UjAoTik7cmV0dXJuIEsoQ1Ese2VsZW1lbnQ6TixpbmRleDpCLGFjdGl2ZTpVPT09WixvbkhpZ2hsaWdodDpYfSxVKX0pfSldfSl9ZnVuY3Rpb24gazYoe2NoaWxkcmVuOiQsc3Bpbm5lcjpRPSExfSl7cmV0dXJuIEsoImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJtdC0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHB5LTQgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W1E/Sygic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0zLjUgc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8yMCBib3JkZXItdC13aGl0ZS82MCBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pOm51bGwsSygic3BhbiIse2NoaWxkcmVuOiR9KV19KX12YXIgQ1E9eDAoZnVuY3Rpb24oe2VsZW1lbnQ6USxpbmRleDpKLGFjdGl2ZTpaLG9uSGlnaGxpZ2h0Olh9KXtsZXQgWT1SMChRKSxxPVY1KFEsSiksRz1gJHtNYXRoLnJvdW5kKFEuZnJhbWUud2lkdGgpfXgke01hdGgucm91bmQoUS5mcmFtZS5oZWlnaHQpfWAsTj1bcS5sYWJlbCxxLnJvbGV8fHEudHlwZXx8ImVsZW1lbnQiLEddLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIik7cmV0dXJuIEsoImRpdiIse3JvbGU6Imxpc3RpdGVtIix0YWJJbmRleDowLCJkYXRhLWF4LWtleSI6WSx0aXRsZTpOLG9uTW91c2VFbnRlcjooKT0+WChZKSxvbk1vdXNlTGVhdmU6KCk9PlgobnVsbCksb25Gb2N1czooKT0+WChZKSxvbkJsdXI6KCk9PlgobnVsbCksY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBweS0xIHB4LTAuNSBtaW4tdy0wICR7Wj8iYmctd2hpdGUvWzAuMDZdIjoiIn1gLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpRLmxhYmVsfHxRLnJvbGV8fCJVbmxhYmVsZWQifSksSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS80NSBmb250LW1vbm8gdGV4dC1bMTBweF0iLGNoaWxkcmVuOlEucm9sZXx8US50eXBlfHwiZWxlbWVudCJ9KV19KSxLKCJjb2RlIix7Y2xhc3NOYW1lOiJzaHJpbmstMCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdGV4dC1bMTBweF0gcHgtMS41IHB5LVszcHhdIixjaGlsZHJlbjpHfSldfSl9LCgkLFEpPT4kLmluZGV4PT09US5pbmRleCYmJC5hY3RpdmU9PT1RLmFjdGl2ZSYmJC5vbkhpZ2hsaWdodD09PVEub25IaWdobGlnaHQmJkc1KCQuZWxlbWVudCxRLmVsZW1lbnQpKTt2YXIgSFE9bmV3IFNldChbImltYWdlL2pwZWciLCJpbWFnZS9wbmciLCJpbWFnZS9naWYiLCJpbWFnZS9oZWljIiwiaW1hZ2UvaGVpZiIsImltYWdlL3dlYnAiLCJ2aWRlby9tcDQiLCJ2aWRlby9xdWlja3RpbWUiXSksRTM9MTk2NjA4LE82PTUyNDI4ODAwMCxUNT0iYXBwbGljYXRpb24veC1zZXJ2ZS1zaW0taG9zdC1wYXRoIjthc3luYyBmdW5jdGlvbiBNNigkLFEsSil7bGV0IFo9YXdhaXQgUShgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7Sn0gJHtrMSgkKX1gKTtpZihaLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihaLnN0ZGVycnx8YGFkZG1lZGlhIGZhaWxlZCAoZXhpdCAke1ouZXhpdENvZGV9KWApfWZ1bmN0aW9uIHEyKCQpe2xldCBRPSQubmFtZSxKPVEubGFzdEluZGV4T2YoIi4iKTtpZihKPj0wKXJldHVybiBRLnNsaWNlKEorMSkudG9Mb3dlckNhc2UoKTtpZigkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuIm1wNCI7cmV0dXJuImpwZyJ9ZnVuY3Rpb24gXzYoJCl7aWYocTIoJCk9PT0iaXBhIilyZXR1cm4iaXBhIjtpZihIUS5oYXMoJC50eXBlKSlyZXR1cm4ibWVkaWEiO3JldHVybiBudWxsfWZ1bmN0aW9uIEZRKCQpe2xldCBRPW5ldyBVaW50OEFycmF5KCQpLEo9IiI7Zm9yKGxldCBaPTA7WjxRLmxlbmd0aDtaKz0zMjc2OClKKz1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLlEuc3ViYXJyYXkoWixaKzMyNzY4KSk7cmV0dXJuIGJ0b2EoSil9YXN5bmMgZnVuY3Rpb24gVzYoJCxRLEosWil7bGV0IFg9MDtmb3IobGV0IFk9MDtZPCQuc2l6ZTtZKz1FMyl7bGV0IHE9YXdhaXQgJC5zbGljZShZLFkrRTMpLmFycmF5QnVmZmVyKCksRz1GUShxKSxCPWF3YWl0IEooYGJhc2ggLWMgJ2VjaG8gJHtHfSB8IGJhc2U2NCAtZCAke1k9PT0wPyI+IjoiPj4ifSAke1F9J2ApO2lmKEIuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEIuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCk7aWYoIVopY29udGludWU7bGV0IFU9TWF0aC5taW4oWStFMywkLnNpemUpLFY9TWF0aC5mbG9vcihVLyQuc2l6ZSoxMDApO2lmKFYhPT1YKVg9VixaKFUvJC5zaXplKX19YXN5bmMgZnVuY3Rpb24gUDYoJCxRLEosWil7aWYoJC5zaXplPk82KXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBYPWAvdG1wLyR7UX0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke0p9YDtyZXR1cm4gYXdhaXQgVzYoJCxYLFopLFh9YXN5bmMgZnVuY3Rpb24gRDYoJCxRLEosWixYKXtpZigkLnNpemU+TzYpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFk9UT09PSJpcGEiPyJpcGEiOnEyKCQpLEc9YC90bXAvJHtRPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtZfWA7dHJ5e1goMCksYXdhaXQgVzYoJCxHLEosWCksWChudWxsKTtsZXQgTj1RPT09ImlwYSI/YHhjcnVuIHNpbWN0bCBpbnN0YWxsICR7Wn0gJHtHfWA6YHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke1p9ICR7R31gLEI9YXdhaXQgSihOKTtpZihCLmV4aXRDb2RlIT09MCl7bGV0IFU9UT09PSJpcGEiPyJpbnN0YWxsIjoiYWRkbWVkaWEiO3Rocm93IEVycm9yKEIuc3RkZXJyfHxgJHtVfSBmYWlsZWQgKGV4aXQgJHtCLmV4aXRDb2RlfSlgKX19ZmluYWxseXtKKGBiYXNoIC1jICdybSAtZiAke0d9J2ApLmNhdGNoKCgpPT57fSl9fXZhciBrUT0zMDAwO2FzeW5jIGZ1bmN0aW9uIEFRKCQsUT1mZXRjaCl7dHJ5e2xldCBKPWF3YWl0IFEoJCx7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKCFKLm9rKXJldHVybiBudWxsO2xldCBaPWF3YWl0IEouanNvbigpO3JldHVybiBaJiZ0eXBlb2YgWj09PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShaKT9aOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fXZhciBPUT0yMDk3MTUyMDAsTVE9IkxhcmdlIHZpZGVvICg+MjAwIE1CKSDigJQgbWF5IHN0dXR0ZXIgb24gc2hhcmVkIG1lbW9yeSIsdzY9IkhFSUMgZGVjb2RlIGZhaWxlZCDigJQgZXhwb3J0IGFzIEpQRUcgb3IgUE5HIGFuZCByZXRyeSI7ZnVuY3Rpb24gX1EoJCxRKXtpZihRKXJldHVybiJhY3RpdmUiO2lmKCQ9PT0iYWN0aXZlIilyZXR1cm4iZGlzY29ubmVjdGVkIjtpZigkPT09ImRpc2Nvbm5lY3RlZCIpcmV0dXJuInJlYWR5IjtyZXR1cm4gJH1mdW5jdGlvbiBXUSgkKXtpZighJC5pbmplY3RlZClyZXR1cm4icGxheSI7aWYoJC5zb3VyY2U9PT0icGxhY2Vob2xkZXIiKXJldHVybiJwbGF5IjtpZigkLmJ1bmRsZUlkJiYhJC5mb3JlZ3JvdW5kSXNJbmplY3RlZClyZXR1cm4iYXR0YWNoIjtyZXR1cm4ic3RvcCJ9ZnVuY3Rpb24gUFEoJCl7cmV0dXJuICQuc3BsaXQoYApgKS5tYXAoKFEpPT5RLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmZsYXRNYXAoKFEpPT57bGV0IEo9US5pbmRleE9mKCJcdCIpO2lmKEo8PTApcmV0dXJuW107bGV0IFo9US5zbGljZSgwLEopLnRyaW0oKSxYPVEuc2xpY2UoSisxKS50cmltKCk7aWYoIVp8fCFYKXJldHVybltdO3JldHVyblt7aWQ6WixuYW1lOlh9XX0pfXZhciBEUT1uZXcgU2V0KFsibXA0IiwibTR2IiwibW92IiwicXQiLCJhdmkiLCJta3YiLCJ3ZWJtIiwibXBnIiwibXBlZyIsIjNncCIsIjNnMiIsInRzIiwid212Il0pO2Z1bmN0aW9uIEU2KCQpe2lmKCQudHlwZSYmJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiEwO2xldCBRPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpLEo9US5sYXN0SW5kZXhPZigiLiIpO2lmKEo8MClyZXR1cm4hMTtyZXR1cm4gRFEuaGFzKFEuc2xpY2UoSisxKSl9ZnVuY3Rpb24gVFEoJCl7cmV0dXJuIEU2KCQpJiYkLnNpemU+T1F9ZnVuY3Rpb24gd1EoJCl7bGV0IFE9KCQudHlwZT8/IiIpLnRvTG93ZXJDYXNlKCk7aWYoUT09PSJpbWFnZS9oZWljInx8UT09PSJpbWFnZS9oZWlmIilyZXR1cm4hMDtsZXQgSj0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gSi5lbmRzV2l0aCgiLmhlaWMiKXx8Si5lbmRzV2l0aCgiLmhlaWYiKX1mdW5jdGlvbiBFUSh7cmF3TWVzc2FnZTokLGxhc3RGaWxlSXNIZWljOlEsc291cmNlOkp9KXtpZihRJiYoSj09PSJpbWFnZSJ8fEo9PT0idmlkZW8iKSlyZXR1cm4gdzY7cmV0dXJuICR9ZnVuY3Rpb24gSVEoe3N0YXRlOiR9KXtsZXQgUT0kPT09ImFjdGl2ZSI/IkFjdGl2ZSI6JD09PSJkaXNjb25uZWN0ZWQiPyJEaXNjb25uZWN0ZWQiOiJSZWFkeSIsSj0kPT09ImFjdGl2ZSI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1zdWNjZXNzLWVtZXJhbGQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDc0LDIyMiwxMjgsMC43KV0iOiQ9PT0iZGlzY29ubmVjdGVkIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLWRhbmdlci1zb2Z0IFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSgyNDgsMTEzLDExMywwLjU1KV0iOm51bGw7cmV0dXJuIEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIiwiZGF0YS1jYW1lcmEtcGlsbC1zdGF0ZSI6JCxjaGlsZHJlbjpbSiYmSygic3BhbiIse2NsYXNzTmFtZTpKfSksUV19KX1mdW5jdGlvbiBiUSgpe3JldHVybiBLKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1jZW50ZXIgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IiwiZGF0YS1jYW1lcmEtdGVzdC1wYXR0ZXJuLWhpbnQiOiEwLGNoaWxkcmVuOiJUZXN0LXBhdHRlcm4gZmVlZCJ9KX1mdW5jdGlvbiB5USh7bW9kZTokLGZpbGVOYW1lOlEsd2ViY2FtTmFtZTpKLHNvdXJjZUtpbmQ6Wn0pe2lmKCQ9PT0idXBsb2FkaW5nIilyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46IlVwbG9hZGluZ+KApiJ9KTtpZigkPT09ImZpbGUiKXJldHVybiBLKGUse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46Wj09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOlE/PyIifSldfSk7aWYoJD09PSJ3ZWJjYW0iKXJldHVybiBLKGUse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46IldlYmNhbSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46Sj8/IiJ9KV19KTtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS84NSBmb250LW1lZGl1bSIsY2hpbGRyZW46IlNlbGVjdCBvciBkcm9wIG1lZGlhIn0pfWZ1bmN0aW9uIFQ2KHtraW5kOiQsbWVzc2FnZTpRfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTokPT09Indhcm5pbmciPyJiZy13YXJuaW5nLzEwIGJvcmRlciBib3JkZXItd2FybmluZy8yNSB0ZXh0LXdhcm5pbmctc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIjoiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyIsImRhdGEtY2FtZXJhLWJhbm5lci1raW5kIjokLHJvbGU6JD09PSJlcnJvciI/ImFsZXJ0Ijoic3RhdHVzIixjaGlsZHJlbjpRfSl9ZnVuY3Rpb24gSTYoe3VkaWQ6JCxidW5kbGVJZDpRfSl7bGV0W0osWl09TSghMSksW1gsWV09TSgicGxhY2Vob2xkZXIiKSxbcSxHXT1NKCIiKSxbTixCXT1NKG51bGwpLFtVLFZdPU0oITEpLHo9SSgwKSxbTCxGXT1NKCExKSxbQyxIXT1NKCExKSxrPUkobnVsbCksW18sU109TShbXSksW0UsYl09TSghMSksW3YsWDFdPU0oIiIpLFtmLGxdPU0oIm9mZiIpLFtjLCQxXT1NKG51bGwpLFtVMSxLMV09TShudWxsKSxNMT1jIT09bnVsbHx8VTEhPT1udWxsLFttLGddPU0obnVsbCksW3MsWTFdPU0obnVsbCksWyxWMV09TShudWxsKSxbTjEsSDFdPU0oITEpLFtMMSxqXT1NKCJyZWFkeSIpLFtuLGRdPU0oKCk9Pm5ldyBTZXQpLFtaMSxEMV09TShudWxsKSxbdyxwXT1NKG51bGwpLFExPUkoITEpLHoxPUkoITEpLHg9SSgib2ZmIiksYT1JKCExKSxxMT1XMSgoKT0+e2xldCBQPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFQKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChQKSlyZXR1cm5gYnVuICR7azEoUCl9YDtpZigvXC5qcyQvLnRlc3QoUCkpcmV0dXJuYG5vZGUgJHtrMShQKX1gO3JldHVybiBrMShQKX0sW10pLEExPUQoYXN5bmMoKT0+e2xldCBQPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmNhbWVyYVN0YXR1c0VuZHBvaW50O3JldHVybiBQP0FRKFApOm51bGx9LFtdKSxLMD1JKGFzeW5jKCk9Pnt9KSxwMT1JKFEpO3koKCk9PntwMS5jdXJyZW50PVF9LFtRXSkseSgoKT0+e2xldCBQPSExO3JldHVybihhc3luYygpPT57bGV0IHU9YXdhaXQgQTEoKTtpZihQfHwhdXx8IXUuYWxpdmUpcmV0dXJuO3oxLmN1cnJlbnQ9ITA7bGV0IHQ9dS5zb3VyY2U7aWYodD09PSJwbGFjZWhvbGRlciJ8fHQ9PT0id2ViY2FtInx8dD09PSJpbWFnZSJ8fHQ9PT0idmlkZW8iKVkodCk7aWYoKHQ9PT0iaW1hZ2UifHx0PT09InZpZGVvIikmJnUuYXJnKUcodS5hcmcpLEIodS5hcmcuc3BsaXQoIi8iKS5wb3AoKT8/bnVsbCk7aWYodD09PSJ3ZWJjYW0iJiZ1LmFyZylYMSh1LmFyZyksSzAuY3VycmVudCgpO2xldCBGMT11Lm1pcnJvcj09PSJvbiI/Im9uIjoib2ZmIjtsKEYxKSx4LmN1cnJlbnQ9RjEsRDEodS5oZWxwZXJQaWQ/P251bGwpLEgxKCEwKTtsZXQgQjE9QXJyYXkuaXNBcnJheSh1LmJ1bmRsZUlkcyk/dS5idW5kbGVJZHM6W107aWYoQjEubGVuZ3RoPjApZChuZXcgU2V0KEIxKSk7bGV0IG89cDEuY3VycmVudCx5MT10JiZ0IT09InBsYWNlaG9sZGVyIjtqKG8mJkIxLmluY2x1ZGVzKG8pJiZ5MT8iYWN0aXZlIjoicmVhZHkiKSxWMShgUmVhdHRhY2hlZCDihpIgJHt0Pz8icnVubmluZyBoZWxwZXIifSR7dS5hcmc/YCAoJHt1LmFyZ30pYDoiIn1gKX0pKCksKCk9PntQPSEwfX0sWyQsQTFdKSx5KCgpPT57bGV0IFA9ITEsdT0hMSx0PW51bGwsRjE9YXN5bmMoKT0+e2lmKFB8fHUpcmV0dXJuO2lmKHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKXJldHVybjt1PSEwO3RyeXtsZXQgbz1hd2FpdCBBMSgpO2lmKFApcmV0dXJuO2xldCB5MT0hIW8/LmFsaXZlLG0xPUFycmF5LmlzQXJyYXkobz8uYnVuZGxlSWRzKT9vLmJ1bmRsZUlkczpudWxsLGQxPSEhUSYmKG0xP20xLmluY2x1ZGVzKFEpOm4uaGFzKFEpKSxaMD1vPy5zb3VyY2U/P251bGwsVD1OMSYmeTEmJmQxJiYhIShaMCYmWjAhPT0icGxhY2Vob2xkZXIiKSYmKFoxPT1udWxsfHxvPy5oZWxwZXJQaWQ9PT1aMSk7aWYoaigoTyk9Pl9RKE8sVCkpLCF5MSlIMSgoTyk9PntpZighTylyZXR1cm4gTztyZXR1cm4gZChuZXcgU2V0KSxEMShudWxsKSx4LmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKE4xJiZaMSE9bnVsbCYmbz8uaGVscGVyUGlkIT09WjEpSDEoITEpLGQobmV3IFNldCksRDEobnVsbCkseC5jdXJyZW50PSJvZmYiO2Vsc2UgaWYoeTEmJkFycmF5LmlzQXJyYXkobz8uYnVuZGxlSWRzKSl7bGV0IE89by5idW5kbGVJZHM7ZCgoQSk9PntpZihBLnNpemU9PT1PLmxlbmd0aCYmTy5ldmVyeSgoVyk9PkEuaGFzKFcpKSlyZXR1cm4gQTtyZXR1cm4gbmV3IFNldChPKX0pfX1maW5hbGx5e3U9ITF9fTt0PXNldEludGVydmFsKCgpPT57RjEoKX0sa1EpO2xldCBCMT0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJ2aXNpYmxlIilGMSgpfTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEIxKTtyZXR1cm4oKT0+e2lmKFA9ITAsdCljbGVhckludGVydmFsKHQpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsQjEpfX0sW0ExLE4xLFoxLFEsbl0pO2xldCBFMT1EKGFzeW5jKCk9PntiKCEwKSxnKG51bGwpO3RyeXtsZXQgUD1hd2FpdCBQMShgJHtxMX0gY2FtZXJhIC0tbGlzdC13ZWJjYW1zYCk7aWYoUC5leGl0Q29kZSE9PTApe2coUC5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke1AuZXhpdENvZGV9KWApO3JldHVybn1sZXQgdT1QUShQLnN0ZG91dCk7aWYoUyh1KSx1Lmxlbmd0aD4wJiYhdilYMSh1WzBdLmlkKX1maW5hbGx5e2IoITEpfX0sW3YscTFdKTt5KCgpPT57SzAuY3VycmVudD1FMX0sW0UxXSkseSgoKT0+e2lmKEMmJl8ubGVuZ3RoPT09MCYmIUUpRTEoKX0sW0MsXy5sZW5ndGgsRSxFMV0pO2xldCBnMT1EKChQKT0+e2coRVEoe3Jhd01lc3NhZ2U6UCxsYXN0RmlsZUlzSGVpYzpRMS5jdXJyZW50LHNvdXJjZTpYfSkpfSxbWF0pLFkwPUQoYXN5bmMoUCx1LHQpPT57bGV0IEYxPVA9PT0iaW1hZ2UifHxQPT09InZpZGVvIixCMT1bImNhbWVyYSIsInN3aXRjaCIsRjE/ImZpbGUiOlBdO2lmKFA9PT0id2ViY2FtIiYmdSlCMS5wdXNoKGsxKHUpKTtpZihGMSl7aWYoIXQudHJpbSgpKXJldHVybiBnKCJEcm9wIGEgZmlsZSBpbnRvIHRoZSBwYW5lbCBvciBwaWNrIGFub3RoZXIgc291cmNlLiIpLCExO0IxLnB1c2goazEodC50cmltKCkpKX1CMS5wdXNoKCItZCIsJCwiLS1xdWlldCIpO2xldCBvPWF3YWl0IFAxKGAke3ExfSAke0IxLmpvaW4oIiAiKX1gKTtpZihvLmV4aXRDb2RlIT09MClyZXR1cm4gZzEoby5zdGRlcnIudHJpbSgpfHxvLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke28uZXhpdENvZGV9KWApLCExO1ExLmN1cnJlbnQ9ITE7dHJ5e2xldCB5MT1KU09OLnBhcnNlKG8uc3Rkb3V0LnRyaW0oKSk7VjEoYFN3aXRjaGVkIOKGkiAke3kxLnNvdXJjZT8/UH0ke3kxLmFyZz9gICgke3kxLmFyZ30pYDoiIn1gKX1jYXRjaHtWMShgU3dpdGNoZWQg4oaSICR7UH1gKX1yZXR1cm4hMH0sWyQscTEsZzFdKSxxMD1EKGFzeW5jKCk9PntpZighUSlyZXR1cm47JDEoImluamVjdCIpLGcobnVsbCksVjEobnVsbCk7dHJ5e2xldCBQPVsiY2FtZXJhIixrMShRKSwiLWQiLCQsIi0tcXVpZXQiXTtpZihYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpe2lmKCFxLnRyaW0oKSl7ZygiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKTtyZXR1cm59UC5wdXNoKCItLWZpbGUiLGsxKHEudHJpbSgpKSl9ZWxzZSBpZihYPT09IndlYmNhbSIpaWYodilQLnB1c2goIi0td2ViY2FtIixrMSh2KSk7ZWxzZSBQLnB1c2goIi0td2ViY2FtIik7UC5wdXNoKCItLW1pcnJvciIsZik7bGV0IHU9YXdhaXQgUDEoYCR7cTF9ICR7UC5qb2luKCIgIil9YCk7aWYodS5leGl0Q29kZSE9PTApe2cxKHUuc3RkZXJyLnRyaW0oKXx8dS5zdGRvdXQudHJpbSgpfHxgaW5qZWN0IGZhaWxlZCAoJHt1LmV4aXRDb2RlfSlgKTtyZXR1cm59UTEuY3VycmVudD0hMTtsZXQgdD1udWxsO3RyeXtsZXQgRjE9SlNPTi5wYXJzZSh1LnN0ZG91dC50cmltKCkpO3Q9RjEuaGVscGVyUGlkPz9udWxsO2xldCBCMT1GMS5oZWxwZXJSZWxhdW5jaGVkPT09ITE/IkF0dGFjaGVkIjoiSW5qZWN0ZWQiLG89RjEucGlkP2AgcGlkICR7RjEucGlkfWA6IiIseTE9RjEuaGVscGVyUGlkP2AsIGhlbHBlciBwaWQgJHtGMS5oZWxwZXJQaWR9YDoiIjtWMShgJHtCMX0gJHtGMS5zb3VyY2U/P1h9IGludG8gJHtRfSR7b30ke3kxfWApfWNhdGNoe1YxKHUuc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfUgxKCEwKSxqKFg9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLEQxKHQpLGQoKEYxKT0+RjEuaGFzKFEpP0YxOm5ldyBTZXQoRjEpLmFkZChRKSkseC5jdXJyZW50PWZ9ZmluYWxseXskMShudWxsKX19LFtRLCQsWCxxLHYsZixxMSxnMV0pLF8xPU4xP2Ake1h9Ojoke1g9PT0id2ViY2FtIj92OiIifTo6JHtYPT09ImltYWdlInx8WD09PSJ2aWRlbyI/cToiIn1gOm51bGwsYzE9ISFRJiZuLmhhcyhRKSx6MD1jMSYmWCE9PSJwbGFjZWhvbGRlciI7eSgoKT0+e2lmKCF6MCl7YS5jdXJyZW50PSExO3JldHVybn1pZihhLmN1cnJlbnQpcmV0dXJuO2EuY3VycmVudD0hMCxaKCEwKX0sW3owXSkseSgoKT0+e2lmKCF3KXJldHVybjtpZighUXx8TTF8fEwpcmV0dXJuO2lmKFghPT0id2ViY2FtInx8diE9PXcpcmV0dXJuO2lmKHAobnVsbCksTjEpcmV0dXJuO3EwKCl9LFt3LFEsTTEsTCxYLHYsTjEscTBdKSx5KCgpPT57aWYoIU4xKXJldHVybjtpZigoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmIXEudHJpbSgpKXJldHVybjtpZihYPT09IndlYmNhbSImJiF2KXJldHVybjtpZih6MS5jdXJyZW50KXt6MS5jdXJyZW50PSExO3JldHVybn1sZXQgUD0hMTtyZXR1cm4oYXN5bmMoKT0+e0sxKCJzd2l0Y2giKSxnKG51bGwpO3RyeXtpZihQKXJldHVybjthd2FpdCBZMChYLHYscSl9ZmluYWxseXtpZighUClLMShudWxsKX19KSgpLCgpPT57UD0hMH19LFtfMV0pLHkoKCk9PntpZighTjEpcmV0dXJuO2lmKHguY3VycmVudD09PWYpcmV0dXJuO2xldCBQPWYsdT0hMTtyZXR1cm4oYXN5bmMoKT0+e0sxKCJtaXJyb3IiKSxnKG51bGwpO3RyeXtsZXQgdD1hd2FpdCBQMShgJHtxMX0gY2FtZXJhIG1pcnJvciAke1B9IC1kICR7JH0gLS1xdWlldGApO2lmKHUpcmV0dXJuO2lmKHQuZXhpdENvZGUhPT0wKXtnKHQuc3RkZXJyLnRyaW0oKXx8dC5zdGRvdXQudHJpbSgpfHxgbWlycm9yIGZhaWxlZCAoJHt0LmV4aXRDb2RlfSlgKTtyZXR1cm59eC5jdXJyZW50PVAsVjEoYE1pcnJvciDihpIgJHtQfWApfWZpbmFsbHl7aWYoIXUpSzEobnVsbCl9fSkoKSwoKT0+e3U9ITB9fSxbZixOMV0pO2xldCB2MT1EKGFzeW5jKCk9PnskMSgic3RvcCIpLGcobnVsbCk7dHJ5e2xldCBQPWF3YWl0IFAxKGAke3ExfSBjYW1lcmEgLS1zdG9wLXdlYmNhbSAtZCAkeyR9YCk7aWYoUC5leGl0Q29kZSE9PTApe2coUC5zdGRlcnIudHJpbSgpfHxgc3RvcC13ZWJjYW0gZmFpbGVkICgke1AuZXhpdENvZGV9KWApO3JldHVybn1WMSgiQ2FtZXJhIGhlbHBlciBzdG9wcGVkLiIpLEgxKCExKSxqKCJyZWFkeSIpLGQobmV3IFNldCkseC5jdXJyZW50PSJvZmYifWZpbmFsbHl7JDEobnVsbCl9fSxbJCxxMV0pLG8xPUQoYXN5bmMoUCk9PntsZXQgdT13USh7dHlwZTpQLnR5cGUsbmFtZTpQLm5hbWV9KSx0PVAudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8dSxGMT1QLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIil8fEU2KHt0eXBlOlAudHlwZSxuYW1lOlAubmFtZX0pO2lmKCF0JiYhRjEpe1ExLmN1cnJlbnQ9ITEsZyhgVW5zdXBwb3J0ZWQgZmlsZSB0eXBlOiAke1AudHlwZXx8UC5uYW1lfWApO3JldHVybn1pZihGKCEwKSxnKG51bGwpLFkxKG51bGwpLFRRKHt0eXBlOlAudHlwZSxuYW1lOlAubmFtZSxzaXplOlAuc2l6ZX0pKVkxKE1RKTtRMS5jdXJyZW50PXU7dHJ5e2xldCBCMT1xMihQKSxvPWF3YWl0IFA2KFAsInNlcnZlLXNpbS1jYW1zcmMiLEIxLFAxKTtCKFAubmFtZSksWShGMT8idmlkZW8iOiJpbWFnZSIpLEcobyksVjEoYExvYWRlZCAke1AubmFtZX1gKX1jYXRjaChCMSl7aWYoUTEuY3VycmVudClnKHc2KTtlbHNlIGcoQjE/Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIil9ZmluYWxseXtGKCExKX19LFtdKSxHMD1EKGFzeW5jKFApPT57UC5wcmV2ZW50RGVmYXVsdCgpLFAuc3RvcFByb3BhZ2F0aW9uKCksei5jdXJyZW50PTAsVighMSk7bGV0IHU9UC5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07aWYodSlhd2FpdCBvMSh1KX0sW28xXSksSTE9RCgoKT0+e1koInBsYWNlaG9sZGVyIiksRygiIiksQihudWxsKSxnKG51bGwpLFkxKG51bGwpLFExLmN1cnJlbnQ9ITF9LFtdKSxiMT1EKCgpPT57ay5jdXJyZW50Py5jbGljaygpfSxbXSksczE9RChhc3luYyhQKT0+e2xldCB1PVAudGFyZ2V0LHQ9dS5maWxlcz8uWzBdO2lmKHUudmFsdWU9IiIsdClhd2FpdCBvMSh0KX0sW28xXSk7eSgoKT0+e2lmKCFDKXJldHVybjtsZXQgUD0odSk9PntsZXQgdD11LnRhcmdldDtpZih0IGluc3RhbmNlb2YgRWxlbWVudCYmdC5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO0goITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsUCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFApfSxbQ10pO2xldCBWMD1EKChQKT0+e2lmKFgxKFAuaWQpLFkoIndlYmNhbSIpLEIobnVsbCksZyhudWxsKSxRMS5jdXJyZW50PSExLEgoITEpLFEpcChQLmlkKX0sW1FdKSxpMT1EKCgpPT57bCgoUCk9PlA9PT0ib24iPyJvZmYiOiJvbiIpfSxbXSksQjA9IU4xfHxYPT09InBsYWNlaG9sZGVyIix3MD1EKChQKT0+e2lmKFAucHJldmVudERlZmF1bHQoKSx6LmN1cnJlbnQrKyx6LmN1cnJlbnQ9PT0xKVYoITApfSxbXSksVzA9RCgoUCk9PntpZihQLnByZXZlbnREZWZhdWx0KCksUC5kYXRhVHJhbnNmZXIpUC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtdKSxhMT1EKChQKT0+e2lmKFAucHJldmVudERlZmF1bHQoKSx6LmN1cnJlbnQtLSx6LmN1cnJlbnQ8PTApei5jdXJyZW50PTAsVighMSl9LFtdKSxoMT1XUSh7YnVuZGxlSWQ6USxpbmplY3RlZDpOMSxzb3VyY2U6WCxmb3JlZ3JvdW5kSXNJbmplY3RlZDpjMX0pLHgxPWgxPT09InN0b3AiP3tsYWJlbDpjPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6djEsa2luZDoic3RvcCJ9OmgxPT09ImF0dGFjaCI/e2xhYmVsOmM9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7UX1gLG9uQ2xpY2s6cTAsa2luZDoiYXR0YWNoIn06e2xhYmVsOmM9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOnEwLGtpbmQ6InBsYXkifSxmMT1oMT09PSJzdG9wIj9MfHxjIT09bnVsbDohUXx8THx8YyE9PW51bGwsbjE9WD09PSJwbGFjZWhvbGRlciIsTjA9WD09PSJ3ZWJjYW0iLFAwPShYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpJiYhIU4sdDE9TjA/Xy5maW5kKChQKT0+UC5pZD09PXYpPy5uYW1lPz92Pz8iV2ViY2FtIjpudWxsLEoxPUw/InVwbG9hZGluZyI6UDA/ImZpbGUiOk4wPyJ3ZWJjYW0iOiJwbGFjZWhvbGRlciI7cmV0dXJuIEsoSjAse29wZW46Sixvbk9wZW5DaGFuZ2U6Wixib2R5Q2xhc3NOYW1lOiJwdC0yLjUiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoZSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkNhbWVyYSJ9KSxLKElRLHtzdGF0ZTpMMX0pXX0pLGNoaWxkcmVuOksoImRpdiIse29uRHJhZ0VudGVyOncwLG9uRHJhZ092ZXI6VzAsb25EcmFnTGVhdmU6YTEsb25Ecm9wOkcwLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMi41IixjaGlsZHJlbjpbSygicCIse2NsYXNzTmFtZToibS0wIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksSygiaW5wdXQiLHtyZWY6ayx0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOnMxfSksSygiZGl2Iix7b25DbGljazooUCk9PntpZighbjEpcmV0dXJuO2lmKFAudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNsZWFyLW1lZGlhXSIpKXJldHVybjtiMSgpfSx0aXRsZTpuMT8iTm8gc291cmNlIHNlbGVjdGVkIOKAlCBQbGF5IHVzZXMgYSB0ZXN0LXBhdHRlcm4gZmVlZC4gQ2xpY2sgdG8gcGljayBhbiBpbWFnZS92aWRlbywgb3IgZHJvcCBvbmUgaGVyZS4iOk4wP2BTb3VyY2U6ICR7dDF9YDpgU291cmNlOiAke04/P1h9YCxjbGFzc05hbWU6WyJyZWxhdGl2ZSBtaW4taC1bNDRweF0gZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIuNSBweC0zLjUgcHktMi41IHJvdW5kZWQtWzdweF0gdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1bYm9yZGVyLWNvbG9yLGJhY2tncm91bmRdIGR1cmF0aW9uLTE1MCIsbjE/ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTIiOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IixVPyIhYmctW3JnYmEoMTAsMTMyLDI1NSwwLjA4KV0gIWJvcmRlci1bcmdiYSgxMCwxMzIsMjU1LDAuNildIjoiIixMPyJjdXJzb3ItcHJvZ3Jlc3MiOm4xPyJjdXJzb3ItcG9pbnRlciI6ImN1cnNvci1kZWZhdWx0Il0uam9pbigiICIpLGNoaWxkcmVuOltLKHlRLHttb2RlOkoxLGZpbGVOYW1lOk4sd2ViY2FtTmFtZTp0MSxzb3VyY2VLaW5kOlh9KSwhbjEmJiFMJiZLKCJidXR0b24iLHsiZGF0YS1jbGVhci1tZWRpYSI6ITAsb25DbGljazooUCk9PntQLnN0b3BQcm9wYWdhdGlvbigpLEkxKCl9LGNsYXNzTmFtZToic2hyaW5rLTAgdy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNvdXJjZSIsdGl0bGU6IkNsZWFyIOKGkiBwbGFjZWhvbGRlciIsY2hpbGRyZW46SyhYMCx7c2l6ZToxNCxzdHJva2VXaWR0aDoyfSl9KV19KSxuMSYmIUwmJksoYlEse30pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIiwiZGF0YS1jYW1lcmEtc291cmNlLW1lbnUiOiEwLGNoaWxkcmVuOltLKCJidXR0b24iLHtvbkNsaWNrOigpPT5IKChQKT0+IVApLGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLVszNnB4XSB3LTEwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS84NSByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIHAtMCBob3ZlcjpiZy13aGl0ZS9bMC4wNl0gaG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOkMsdGl0bGU6WD09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7dj9gICgke18uZmluZCgoUCk9PlAuaWQ9PT12KT8ubmFtZT8/dn0pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtYfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOksoUDIse3NpemU6MjAsc3Ryb2tlV2lkdGg6Mn0pfSksQyYmSygiZGl2Iix7cm9sZToibWVudSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs2cHgpXSBsZWZ0LTAgei0xMCBtaW4tdy1bMjAwcHhdIGZsZXggZmxleC1jb2wgZ2FwLXB4IHAtMSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQpXSIsY2hpbGRyZW46W0soImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6InRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsb25DbGljazooKT0+e0goITEpLGIxKCl9LHRpdGxlOiJQaWNrIGFuIGltYWdlIG9yIHZpZGVvIGZyb20gZGlzayIsY2hpbGRyZW46IkJyb3dzZSBtZWRpYeKApiJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImgtcHggYmctd2hpdGUvOCBteS0xIn0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHBsLTIuNSBwci0yIHB0LTEgcGItWzJweF0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSIsY2hpbGRyZW46RT8iQ2FtZXJhcyAobG9hZGluZ+KApikiOl8ubGVuZ3RoPT09MD8iTm8gY2FtZXJhcyI6IkNhbWVyYXMifSksSygiYnV0dG9uIix7b25DbGljazooUCk9PntQLnN0b3BQcm9wYWdhdGlvbigpLEUxKCl9LGRpc2FibGVkOkUsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LVsyMnB4XSBoLVsyMnB4XSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAgZGlzYWJsZWQ6b3BhY2l0eS01MCIsImFyaWEtbGFiZWwiOiJSZWZyZXNoIGNhbWVyYXMiLHRpdGxlOiJSZWZyZXNoIGNhbWVyYXMiLGNoaWxkcmVuOksoajAse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mn0pfSldfSksXy5tYXAoKFApPT57bGV0IHU9WD09PSJ3ZWJjYW0iJiZ2PT09UC5pZDtyZXR1cm4gSygiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZTpbInRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLHU/IiFiZy13aGl0ZS9bMC4xMl0gIXRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzg1Il0uam9pbigiICIpLG9uQ2xpY2s6KCk9PlYwKFApLHRpdGxlOlAubmFtZSxjaGlsZHJlbjpQLm5hbWV9LFAuaWQpfSldfSldfSksSygiYnV0dG9uIix7b25DbGljazp4MS5vbkNsaWNrLGRpc2FibGVkOmYxLGNsYXNzTmFtZTpbImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMi41IGJvcmRlci1ub25lIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpvcGFjaXR5LTUwIG1pbi1oLVszNnB4XSIseDEua2luZD09PSJzdG9wIj8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJdLmpvaW4oIiAiKSx0aXRsZTp4MS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6eDEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHtRfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiFRPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjp4MS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjp4MS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W3gxLmtpbmQ9PT0ic3RvcCI/Syh5Mix7fSk6SyhiMix7fSksSygic3BhbiIse2NoaWxkcmVuOngxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOngxLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6aTEsZGlzYWJsZWQ6QjAsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBhY3RpdmU6c2NhbGUtWzAuOTddICR7Zj09PSJvbiI/ImJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjp0ZXh0LVsjMGEwYTBjXSI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXItd2hpdGUvOCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDldIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBlbmFibGVkOmhvdmVyOnRleHQtd2hpdGUifWAsImFyaWEtbGFiZWwiOmBNaXJyb3I6ICR7Zn0g4oCUIHRhcCB0byB0b2dnbGVgLHRpdGxlOkIwPyJNaXJyb3IgdG9nZ2xlIGF2YWlsYWJsZSBvbmNlIGEgc291cmNlIGlzIHN0cmVhbWluZyI6YE1pcnJvcjogJHtmfSDigJQgY2xpY2sgdG8gdG9nZ2xlYCwiYXJpYS1wcmVzc2VkIjpmPT09Im9uIixjaGlsZHJlbjpLKF8yLHtzaXplOjIwLHN0cm9rZVdpZHRoOjIsZmlsbDpmPT09Im9uIj8iY3VycmVudENvbG9yIjoibm9uZSJ9KX0pXX0pLHMmJksoVDYse2tpbmQ6Indhcm5pbmciLG1lc3NhZ2U6c30pLG0mJksoVDYse2tpbmQ6ImVycm9yIixtZXNzYWdlOm19KV19KX0pfXZhciBiNj01MDA7ZnVuY3Rpb24geTYoe3VkaWQ6JCxldmVudHNFbmRwb2ludDpRfSl7bGV0W0osWl09TSghMSksW1gsWV09TShbXSksW3EsR109TSghMSksTj1XMSgoKT0+UT8/YCR7UjEoImFwaS9ldmVudC1sb2cvZXZlbnRzIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gLFtRLCRdKTt5KCgpPT57RyghMSksWShbXSk7bGV0IFU9aDAoTik7cmV0dXJuIFUub25tZXNzYWdlPSh7ZGF0YTpWfSk9Pnt0cnl7bGV0IHo9SlNPTi5wYXJzZShWKTtpZihHKCExKSxBcnJheS5pc0FycmF5KHouZXZlbnRzKSlZKHouZXZlbnRzLnNsaWNlKC1iNikpO2Vsc2UgaWYoei5ldmVudClZKChMKT0+e3JldHVyblsuLi5MLmZpbHRlcigoQyk9PkMuaWQhPT16LmV2ZW50LmlkKSx6LmV2ZW50XS5zbGljZSgtYjYpfSl9Y2F0Y2h7fX0sVS5vbmVycm9yPSgpPT5HKCEwKSwoKT0+VS5jbG9zZSgpfSxbTl0pO2xldCBCPVcxKCgpPT5YLnNsaWNlKCkucmV2ZXJzZSgpLFtYXSk7cmV0dXJuIEsoSjAse29wZW46Sixvbk9wZW5DaGFuZ2U6WiwiZGF0YS1ldmVudC1sb2ciOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoZSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIixjaGlsZHJlbjoiRXZlbnQgTG9nIn0pLEsoInNwYW4iLHt9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzYwIixjaGlsZHJlbjpYLmxlbmd0aH0pXX0pLGNoaWxkcmVuOkIubGVuZ3RoPT09MD9LKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpxPyJEaXNjb25uZWN0ZWQiOiJObyBldmVudHMgeWV0In0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBtYXgtaC1bMzIwcHhdIGZsZXgtY29sIGdhcC0xIG92ZXJmbG93LXktYXV0byBweS0wLjUgW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46Qi5tYXAoKFUpPT5LKFNRLHtldmVudDpVfSxVLmlkKSl9KX0pfWZ1bmN0aW9uIFNRKHtldmVudDokfSl7bGV0IFE9eFEoJC50aW1lc3RhbXApLEo9WyQuc291cmNlLCQua2luZCwkLmFjdGlvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAvICIpLFo9JC5tc2c/PyQuc3VtbWFyeSxYPSQuc3RhdHVzPT09ImVycm9yIj8iYm9yZGVyLVsjZmY0NTNhXS81MCBiZy1bI2ZmNDUzYV0vMTAgdGV4dC1bI2ZmYjNhZF0iOiJib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gdGV4dC13aGl0ZS81MCI7cmV0dXJuIEsoImRpdiIse3JvbGU6Imxpc3RpdGVtIix0aXRsZTpKLGNsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtWzU2cHhfMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTEuNSBweS0xLjUgdGV4dC1bMTJweF0gbGVhZGluZy10aWdodCBob3ZlcjpiZy13aGl0ZS9bMC4wNV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46UX0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjpafSksSygic3BhbiIse2NsYXNzTmFtZToibXQtMC41IGJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpKfSldfSksJC5zdGF0dXM/Sygic3BhbiIse2NsYXNzTmFtZTpgcm91bmRlZC1tZCBib3JkZXIgcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyAke1h9YCxjaGlsZHJlbjokLnN0YXR1c30pOm51bGxdfSl9ZnVuY3Rpb24geFEoJCl7bGV0IFE9bmV3IERhdGUoJCk7aWYoTnVtYmVyLmlzTmFOKFEuZ2V0VGltZSgpKSlyZXR1cm4iIjtyZXR1cm4gUS50b0xvY2FsZVRpbWVTdHJpbmcoW10se2hvdXI6IjItZGlnaXQiLG1pbnV0ZToiMi1kaWdpdCIsc2Vjb25kOiIyLWRpZ2l0In0pfXZhciBqMj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLHZRPTI1MCxqUT17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sSTM9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LFJRPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiB1MCh7aWNvbjokLGxhYmVsOlEsY2hpbGRyZW46Sn0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpRLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLFFdfSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpKfSldfSl9ZnVuY3Rpb24gZ1Eoe3ZhbHVlOiQsZGlzYWJsZWQ6USxvbkNoYW5nZTpKfSl7bGV0W1osWF09TShudWxsKSxZPUkobnVsbCkscT1JKG51bGwpLEc9RCgoSCk9PntpZihxLmN1cnJlbnQ9PT1IKXJldHVybjtxLmN1cnJlbnQ9SCxKKEgpfSxbSl0pLE49RCgoSCk9PntpZihYKEgpLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+RyhIKSx2USl9LFtHXSksQj1EKCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO1goKEgpPT57aWYoSCE9PW51bGwpRyhIKTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbR10pLFU9ajIubGVuZ3RoLTEsVj1aPz8kLHo9YCR7Vi9VKjEwMH0lYDtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W0soImlucHV0Iix7dHlwZToicmFuZ2UiLCJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6VSxzdGVwOjEsdmFsdWU6VixkaXNhYmxlZDpRLG9uQ2hhbmdlOihIKT0+TihOdW1iZXIoSC50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpCLG9uS2V5VXA6QixvbkJsdXI6QixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOnosIi0tc2xpZGVyLWZpbGwtY29sb3IiOlE/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYifSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7UT8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0ifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAifWB9KSxLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46ajIubWFwKChIKT0+Sygic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSxIKSl9KV19KX1mdW5jdGlvbiBSMih7bGFiZWw6JCx2YWx1ZTpRLG9wdGlvbnM6SixkaXNhYmxlZDpaLG9uQ2hhbmdlOlh9KXtyZXR1cm4gSyhQNSx7bGFiZWw6JCx2YWx1ZTpRLG9wdGlvbnM6SixkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIHYyPXthcHBlYXJhbmNlOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxLKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxLKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksSygicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLEsoInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLEsoInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksSygicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLEsoInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLEsoInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLEsoInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltLKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxLKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxLKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLEsoInBhdGgiLHtkOiJNOSAyMWgxIn0pLEsoInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxLKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxLKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiBoUSgkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gVTUoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIFM2KHt1ZGlkOiQscnVudGltZTpRfSl7bGV0W0osWl09TSghMCksW1gsWV09TShudWxsKSxbcSxHXT1NKG51bGwpLFtOLEJdPU0obnVsbCksVT1oUShRKSxWPUQoYXN5bmMoKT0+e0IobnVsbCk7dHJ5e2xldCBFPWF3YWl0IE4zKHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKEUpWShFKTtlbHNlIEIoIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goRSl7QihFIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZFLm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpFIGluc3RhbmNlb2YgRXJyb3ImJkUubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP0UubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7eSgoKT0+e2lmKFkobnVsbCksIVUpcmV0dXJuO1YoKX0sW1YsVV0pO2xldCB6PUQoYXN5bmMoRSxiKT0+e0coRSksQihudWxsKSxZKCh2KT0+dj97Li4udixbRV06Yn06dik7dHJ5e2F3YWl0IE4zKHtkZXZpY2U6JCxvcHRpb246RSx2YWx1ZTpifSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2godil7Qih2IGluc3RhbmNlb2YgRXJyb3I/di5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7RX1gKSxWKCl9ZmluYWxseXtHKG51bGwpfX0sWyQsVl0pLEw9SSh7cnVubmluZzohMSxuZXh0Om51bGx9KSxGPUkoeik7Ri5jdXJyZW50PXo7bGV0IEM9RCgoRSk9PntsZXQgYj1MLmN1cnJlbnQ7aWYoYi5uZXh0PUUsYi5ydW5uaW5nKXJldHVybjtiLnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZShiLm5leHQhPT1udWxsKXtsZXQgdj1iLm5leHQ7Yi5uZXh0PW51bGwsYXdhaXQgRi5jdXJyZW50KCJ0ZXh0LXNpemUiLGoyW3ZdKX1iLnJ1bm5pbmc9ITF9KSgpfSxbXSksSD1YIT09bnVsbCxrPVg/P2pRLF89ajIuaW5kZXhPZihrWyJ0ZXh0LXNpemUiXSksUz1fPj0wP186a1sidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT9qMi5sZW5ndGgtMTozO3JldHVybiBLKEowLHtvcGVuOkosb25PcGVuQ2hhbmdlOlosImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKGUse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTaW11bGF0b3IifSksSygic3BhbiIse30pXX0pLGNoaWxkcmVuOiFVP0soImRpdiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80NSB0ZXh0LVsxMXB4XSBweC0wLjUgcHktMSIsY2hpbGRyZW46IlNpbXVsYXRvciBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIG9uIGlPUyBzaW11bGF0b3JzIG9ubHkuIn0pOksoZSx7Y2hpbGRyZW46W04mJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpOfSksSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT52b2lkIFYoKSxjbGFzc05hbWU6InNocmluay0wIGN1cnNvci1wb2ludGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1kYW5nZXIvMzAgYmctdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMXB4XSB0ZXh0LWRhbmdlci1zb2Z0IixjaGlsZHJlbjoiUmV0cnkifSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbSyh1MCx7aWNvbjp2Mi5hcHBlYXJhbmNlLGxhYmVsOiJBcHBlYXJhbmNlIixjaGlsZHJlbjpLKFIyLHtsYWJlbDoiQXBwZWFyYW5jZSIsdmFsdWU6ay5hcHBlYXJhbmNlPz8ibGlnaHQiLG9wdGlvbnM6STMuYXBwZWFyYW5jZSxkaXNhYmxlZDohSHx8cT09PSJhcHBlYXJhbmNlIixvbkNoYW5nZTooRSk9PnooImFwcGVhcmFuY2UiLEUpfSl9KSxLKHUwLHtpY29uOnYyLmdsYXNzLGxhYmVsOiJMaXF1aWQgR2xhc3MiLGNoaWxkcmVuOksoUjIse2xhYmVsOiJMaXF1aWQgR2xhc3MiLHZhbHVlOmtbImxpcXVpZC1nbGFzcyJdPz8iY2xlYXIiLG9wdGlvbnM6STNbImxpcXVpZC1nbGFzcyJdLGRpc2FibGVkOiFIfHxxPT09ImxpcXVpZC1nbGFzcyIsb25DaGFuZ2U6KEUpPT56KCJsaXF1aWQtZ2xhc3MiLEUpfSl9KSxLKHUwLHtpY29uOnYyLmZpbHRlcixsYWJlbDoiQ29sb3IgRmlsdGVyIixjaGlsZHJlbjpLKFIyLHtsYWJlbDoiQ29sb3IgRmlsdGVyIix2YWx1ZTprWyJjb2xvci1maWx0ZXIiXT8/Im5vbmUiLG9wdGlvbnM6STNbImNvbG9yLWZpbHRlciJdLGRpc2FibGVkOiFIfHxxPT09ImNvbG9yLWZpbHRlciIsb25DaGFuZ2U6KEUpPT56KCJjb2xvci1maWx0ZXIiLEUpfSl9KSxLKHUwLHtpY29uOnYyLnRleHRTaXplLGxhYmVsOiJUZXh0IFNpemUiLGNoaWxkcmVuOksoZ1Ese3ZhbHVlOlMsZGlzYWJsZWQ6IUgsb25DaGFuZ2U6Q30pfSksUlEubWFwKCh7a2V5OkUsbGFiZWw6Yn0pPT5LKHUwLHtpY29uOnYyW0U9PT0icmVkdWNlLW1vdGlvbiI/Im1vdGlvbiI6RT09PSJpbmNyZWFzZS1jb250cmFzdCI/ImNvbnRyYXN0IjpFPT09InNob3ctYm9yZGVycyI/ImJvcmRlcnMiOkU9PT0icmVkdWNlLXRyYW5zcGFyZW5jeSI/InRyYW5zcGFyZW5jeSI6InZvaWNlb3ZlciJdLGxhYmVsOmIsY2hpbGRyZW46SyhENSx7bGFiZWw6YixjaGVja2VkOmtbRV09PT0ib24iLGRpc2FibGVkOiFIfHxxPT09RSxvbkNoYW5nZToodik9PnooRSx2PyJvbiI6Im9mZiIpfSl9LEUpKV19KV19KX0pfXZhciBiMz0ic2VydmUtc2ltOmNvZGVjIixmUT1be3ZhbHVlOiJhdXRvIixsYWJlbDoiSC4yNjQgKEhhcmR3YXJlKSJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyAoQ29tcGF0aWJpbGl0eSkifV0sbVE9Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41In0pLEsoInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTQiLGhlaWdodDoiMTIiLHJ4OiIyIn0pXX0pO2Z1bmN0aW9uIHg2KHtwcmVmZXJlbmNlOiQsb25QcmVmZXJlbmNlQ2hhbmdlOlEsYWN0aXZlQ29kZWM6SixhdmNjU3VwcG9ydGVkOlp9KXtsZXRbWCxZXT1NKCExKSxxPVo/JDoibWpwZWciO3JldHVybiBLKEowLHtvcGVuOlgsb25PcGVuQ2hhbmdlOlksImRhdGEtc3RyZWFtLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKGUse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTdHJlYW0ifSksSygic3BhbiIse30pXX0pLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMS41IHBiLTEuNSIsY2hpbGRyZW46W0sodTAse2ljb246bVEsbGFiZWw6IkNvZGVjIixjaGlsZHJlbjpLKFIyLHtsYWJlbDoiQ29kZWMiLHZhbHVlOnEsb3B0aW9uczpmUSxkaXNhYmxlZDohWixvbkNoYW5nZTooTik9PlEoTil9KX0pLEsoInAiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgbGVhZGluZy1zbnVnIHB4LTAuNSIsY2hpbGRyZW46IVo/IlRoaXMgYnJvd3NlciBjYW4ndCBkZWNvZGUgSC4yNjQsIHNvIHRoZSBzdHJlYW0gdXNlcyBNSlBFRy4iOnE9PT0iYXV0byImJko9PT0ibWpwZWciPyJILjI2NCB3YXMgdW5hdmFpbGFibGUgZm9yIHRoaXMgc3RyZWFtLCBzbyBpdCBmZWxsIGJhY2sgdG8gTUpQRUcuIjoiU3dpdGNoIHRvIE1KUEVHIGlmIHRoZSBzdHJlYW0gc3R1dHRlcnMgb3IgZHJvcHMgd2hpbGUgc2NyZWVuIHJlY29yZGluZyB0aGUgYnJvd3NlciB3aW5kb3cuIn0pXX0pfSl9ZnVuY3Rpb24gdjYoe29wZW46JCxvbkNsb3NlOlEsdWRpZDpKLGRldmljZVJ1bnRpbWU6WixjdXJyZW50QXBwOlgsZXZlbnRMb2dFdmVudHNFbmRwb2ludDpZLGF4T3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZUF4T3ZlcmxheTpHLGNvZGVjUHJlZmVyZW5jZTpOLG9uQ29kZWNQcmVmZXJlbmNlQ2hhbmdlOkIsYWN0aXZlQ29kZWM6VSxhdmNjU3VwcG9ydGVkOlYsd2lkdGg6en0pe3JldHVybiBLKEoyLHtvcGVuOiQsd2lkdGg6eixzdHlsZTp7YmFja2dyb3VuZENvbG9yOloyfSxjaGlsZHJlbjpbSyhLMix7Y2hpbGRyZW46W0soTTkse2NoaWxkcmVuOiJUb29scyJ9KSxLKEg1LHtvbkNsaWNrOlF9KV19KSwkJiZLKCJkaXYiLHtjbGFzc05hbWU6InAtMy41IG92ZXJmbG93LXktYXV0byBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W0soQzYse3VkaWQ6SixjdXJyZW50QXBwOlh9KSxLKHk2LHt1ZGlkOkosZXZlbnRzRW5kcG9pbnQ6WX0pLEsoUzYse3VkaWQ6SixydW50aW1lOlp9KSxLKEE2LHtvdmVybGF5RW5hYmxlZDpxLG9uVG9nZ2xlT3ZlcmxheTpHfSksSyhJNix7dWRpZDpKLGJ1bmRsZUlkOlg/LmJ1bmRsZUlkPz9udWxsfSksSyhMNix7dWRpZDpKLGV4ZWM6UDF9KSxLKEY2LHt1ZGlkOkosYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KSxLKHg2LHtwcmVmZXJlbmNlOk4sb25QcmVmZXJlbmNlQ2hhbmdlOkIsYWN0aXZlQ29kZWM6VSxhdmNjU3VwcG9ydGVkOlZ9KV19KV19KX1mdW5jdGlvbiBqNigkLFEpe2xldCBKO3RyeXtKPW5ldyBVUkwoJC53ZWJTb2NrZXREZWJ1Z2dlclVybCl9Y2F0Y2h7cmV0dXJuICR9bGV0IFo9YCR7Si5wYXRobmFtZX0ke0ouc2VhcmNofWAsWD1RLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiLFk9US5wcm90b2NvbD09PSJodHRwczoiPyJ3c3MiOiJ3cyIscT1gJHtRLmhvc3R9JHtafWAsRz0kLmRldnRvb2xzRnJvbnRlbmRVcmw7dHJ5e2xldCBOPW5ldyBVUkwoJC5kZXZ0b29sc0Zyb250ZW5kVXJsLGAke1EucHJvdG9jb2x9Ly8ke1EuaG9zdH1gKTtOLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzIiksTi5zZWFyY2hQYXJhbXMuZGVsZXRlKCJ3c3MiKSxOLnNlYXJjaFBhcmFtcy5zZXQoWSxxKSxHPWAke04ucGF0aG5hbWV9JHtOLnNlYXJjaH0ke04uaGFzaH1gfWNhdGNoe31yZXR1cm57Li4uJCx3ZWJTb2NrZXREZWJ1Z2dlclVybDpgJHtYfS8vJHtRLmhvc3R9JHtafWAsZGV2dG9vbHNGcm9udGVuZFVybDpHfX1mdW5jdGlvbiBnMigkLFEpe2ZldGNoKFIxKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOiQsb246UX0pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24geTMoKXtsZXQgJD1SMSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCBRPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbigkLFEpKXJldHVybn19Y2F0Y2h7fWZldGNoKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBSNigkKXtsZXQgUT0kLmNvbnRlbnREb2N1bWVudDtpZighUSlyZXR1cm47bGV0IEo9KCk9PntsZXQgWT1bUV07d2hpbGUoWS5sZW5ndGgpe2xldCBxPVkucG9wKCksRz1xLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBOIG9mIEcpe2xldCBCPU4uZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fE4udGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChCKSlyZXR1cm4gTn1mb3IobGV0IE4gb2YgcS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoTi5zaGFkb3dSb290KVkucHVzaChOLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxaPTAsWD0oKT0+e1orKztsZXQgWT1KKCk7aWYoWSYmWS5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7WS5jbGljaygpO3JldHVybn1pZihaPDIwKXNldFRpbWVvdXQoWCwxMDApfTtYKCl9ZnVuY3Rpb24gZzYoJCl7bGV0IFE9W10sSj1uZXcgTWFwO2ZvcihsZXQgWiBvZiAkKXtsZXQgWD1aLmFwcE5hbWV8fFouYnVuZGxlSWR8fCJVbmtub3duIixZPVouYnVuZGxlSWR8fFgscT1KLmdldChZKTtpZighcSlxPXtrZXk6WSxhcHBOYW1lOlgsYnVuZGxlSWQ6Wi5idW5kbGVJZCx0YXJnZXRzOltdfSxKLnNldChZLHEpLFEucHVzaChZKTtxLnRhcmdldHMucHVzaChaKX1yZXR1cm4gUS5tYXAoKFopPT5KLmdldChaKSl9ZnVuY3Rpb24gaDYoJCxRKXtsZXRbSixaXT1NKHt9KSxYPVcxKCgpPT5RLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbUV0pO3JldHVybiB5KCgpPT57aWYoISQpcmV0dXJuO2xldCBZPSExO2ZvcihsZXQgcSBvZiBRKXtpZighcSljb250aW51ZTtsZXQgRz1gJHskfToke3F9YCxOPVgyLmdldChHKTtpZih0eXBlb2YgTj09PSJzdHJpbmcifHxOPT09bnVsbCl7WigoQik9PkJbcV09PT1OP0I6ey4uLkIsW3FdOk59KTtjb250aW51ZX16NihQMSwkLHEpLnRoZW4oKEIpPT57aWYoWSlyZXR1cm47WigoVSk9Pih7Li4uVSxbcV06Qn0pKX0pfXJldHVybigpPT57WT0hMH19LFskLFhdKSxKfWZ1bmN0aW9uIGY2KHt1ZGlkOiQsdGFyZ2V0czpRLHNlbGVjdGVkOkosb25TZWxlY3RUYXJnZXQ6WixvblJlZnJlc2g6WH0pe2xldCBZPWc2KFEpLHE9WS5tYXAoKEMpPT5DLmJ1bmRsZUlkKS5maWx0ZXIoKEMpPT4hIUMpLEc9aDYoJCxxKSxbTixCXT1NKCExKSxbVSxWXT1NKG51bGwpLHo9SShudWxsKSxMPUkobnVsbCk7eSgoKT0+e2lmKCFOKXJldHVybjtsZXQgQz0oSCk9PntpZighTC5jdXJyZW50KXJldHVybjtpZighTC5jdXJyZW50LmNvbnRhaW5zKEgudGFyZ2V0KSlCKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQyksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQyl9LFtOXSkseSgoKT0+e2lmKE4pcmV0dXJuO2lmKHouY3VycmVudClnMih6LmN1cnJlbnQsITEpLHouY3VycmVudD1udWxsO3kzKCl9LFtOXSkseSgoKT0+e2xldCBDPSgpPT55MygpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEMpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEMpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixDKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixDKX19LFtdKTtsZXQgRj1KPyhKLnRpdGxlfHxKLnVybHx8Si5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIEsoImRpdiIse3JlZjpMLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntCKChDKT0+e2lmKCFDKVgoKTtyZXR1cm4hQ30pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6TiwiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjpGfSksSyhBMix7c2l6ZToxMixzdHJva2VXaWR0aDoyfSldfSksTiYmSygidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOlkubWFwKChDKT0+e2xldCBIPUMuYnVuZGxlSWQ/R1tDLmJ1bmRsZUlkXTpudWxsO3JldHVybiBLKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbSD9LKCJpbWciLHtzcmM6SCxhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOksoInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkMuYXBwTmFtZX0pXX0pLEsoInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjpDLnRhcmdldHMubWFwKChrKT0+e2xldCBfPUo/LmlkPT09ay5pZCxTPSEhay5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFfLEU9KGsudGl0bGV8fGsudXJsfHxrLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLGI9VT09PWsuaWQmJiFTLHY9ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gSygibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpfLCJhcmlhLWRpc2FibGVkIjpTLHRhYkluZGV4OlM/LTE6MCx0aXRsZTpTPyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYoUylyZXR1cm47aWYoei5jdXJyZW50JiZ6LmN1cnJlbnQhPT1rLmlkKWcyKHouY3VycmVudCwhMSk7ei5jdXJyZW50PWsuaWQsVihrLmlkKSxnMihrLmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoei5jdXJyZW50PT09ay5pZClnMihrLmlkLCExKSx6LmN1cnJlbnQ9bnVsbDtWKChmKT0+Zj09PWsuaWQ/bnVsbDpmKX0sb25DbGljazooKT0+e2lmKFMpcmV0dXJuO1ooay5pZCksQighMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHtTPyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6Yj8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6Xz8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46RX0pLGsudXJsJiZrLnVybCE9PSJhYm91dDpibGFuayImJksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ay51cmx9KV19LGsuaWQpfSl9KV19LEMua2V5KX0pfSldfSl9ZnVuY3Rpb24gbTYoe29wZW46JCxvbkNsb3NlOlEsdWRpZDpKLHRhcmdldHM6WixzZWxlY3RlZFRhcmdldElkOlgsb25TZWxlY3RUYXJnZXQ6WSxsb2FkaW5nOnEsZXJyb3I6RyxvblJlZnJlc2g6Tix3aWR0aDpCfSl7bGV0IFU9WD9aLmZpbmQoKFYpPT5WLmlkPT09WCk/P251bGw6bnVsbDtyZXR1cm4gSyhKMix7b3BlbjokLHdpZHRoOkIsY2hpbGRyZW46W0soSzIse2NoaWxkcmVuOltaLmxlbmd0aD4wP0soZjYse3VkaWQ6Six0YXJnZXRzOlosc2VsZWN0ZWQ6VSxvblNlbGVjdFRhcmdldDpZLG9uUmVmcmVzaDpOfSk6Sygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnE/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksSyhINSx7b25DbGljazpRLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46Rz9LKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46R30pOlUmJiQ/SygiaWZyYW1lIix7c3JjOlUuZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtVLnRpdGxlfHxVLnVybHx8VS5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOihWKT0+UjYoVi5jdXJyZW50VGFyZ2V0KX0sVS5pZCk6SygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOlU/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24gcFEoe2hvc3RQYXRoOiQsZXhlYzpRLHVkaWQ6SixvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6cX0pe3E/LigkKTtsZXQgRz0kLnNwbGl0KCIvIikucG9wKCk/PyJpbWFnZSIsTj1aKEcsIm1lZGlhIik7cmV0dXJuIFgoTixudWxsKSxNNigkLFEsSikudGhlbigoKT0+WShOLCEwKSkuY2F0Y2goKEIpPT5ZKE4sITEsQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiQWRkIGZhaWxlZCIpKX1mdW5jdGlvbiBwNih7ZXhlYzokLHVkaWQ6USxlbmFibGVkOkosb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uVW5zdXBwb3J0ZWQ6cSxvbkhvc3RQYXRoRHJvcDpHfSl7bGV0W04sQl09TSghMSksVT1JKDApLFY9RChhc3luYyhDKT0+e2lmKEMucHJldmVudERlZmF1bHQoKSxDLnN0b3BQcm9wYWdhdGlvbigpLFUuY3VycmVudD0wLEIoITEpLCFKfHwhUSlyZXR1cm47bGV0IEg9Qy5kYXRhVHJhbnNmZXIuZ2V0RGF0YShUNSk7aWYoSCl7cFEoe2hvc3RQYXRoOkgsZXhlYzokLHVkaWQ6USxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6R30pO3JldHVybn1sZXQgaz1BcnJheS5mcm9tKEMuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihrLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgXyBvZiBrKXtsZXQgUz1fNihfKTtpZighUyl7cShfKTtjb250aW51ZX1sZXQgRT1aKF8ubmFtZSxTKTtENihfLFMsJCxRLChiKT0+WChFLGIpKS50aGVuKCgpPT5ZKEUsITApKS5jYXRjaCgoYik9PlkoRSwhMSxiIGluc3RhbmNlb2YgRXJyb3I/Yi5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW0osUSwkLFosWCxZLHEsR10pLHo9RCgoQyk9PntpZihDLnByZXZlbnREZWZhdWx0KCksSilDLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW0pdKSxMPUQoKEMpPT57aWYoQy5wcmV2ZW50RGVmYXVsdCgpLCFKKXJldHVybjtpZihVLmN1cnJlbnQrKyxVLmN1cnJlbnQ9PT0xKUIoITApfSxbSl0pLEY9RCgoQyk9PntpZihDLnByZXZlbnREZWZhdWx0KCksVS5jdXJyZW50LS0sVS5jdXJyZW50PD0wKVUuY3VycmVudD0wLEIoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6Tixkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOnosb25EcmFnRW50ZXI6TCxvbkRyYWdMZWF2ZTpGLG9uRHJvcDpWfX19ZnVuY3Rpb24gdTYoJCl7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLEo9MCxaPTAsWD0xMDI0LFk9bmV3IFRleHREZWNvZGVyKCJsYXRpbjEiKSxxPSh6KT0+e2lmKEorei5sZW5ndGg+US5sZW5ndGgpe2lmKFo+MClRLmNvcHlXaXRoaW4oMCxaLEopLEotPVosWj0wO2lmKEorei5sZW5ndGg+US5sZW5ndGgpe2xldCBMPVEubGVuZ3RoO3doaWxlKEw8Sit6Lmxlbmd0aClMKj0yO2xldCBGPW5ldyBVaW50OEFycmF5KEwpO0Yuc2V0KFEuc3ViYXJyYXkoMCxKKSksUT1GfX1RLnNldCh6LEopLEorPXoubGVuZ3RofSxHPSh6KT0+e2xldCBMPU1hdGgubWluKEotNCx6K1gpO2ZvcihsZXQgRj16O0Y8PUw7RisrKWlmKFFbRl09PT0xMyYmUVtGKzFdPT09MTAmJlFbRisyXT09PTEzJiZRW0YrM109PT0xMClyZXR1cm4gRjtyZXR1cm4tMX0sTj0oeixMKT0+e2xldCBGPVkuZGVjb2RlKFEuc3ViYXJyYXkoeixMKSksQz0vY29udGVudC1sZW5ndGg6XHMqKFxkKykvaS5leGVjKEYpO3JldHVybiBDP051bWJlcihDWzFdKTpudWxsfSxCPTAsVT0oeik9PntsZXQgTD0tMTtmb3IobGV0IEY9ejtGPEotMTtGKyspaWYoUVtGXT09PTI1NSYmUVtGKzFdPT09MjE2KXtMPUY7YnJlYWt9aWYoTD09PS0xKXJldHVybiBudWxsO2ZvcihsZXQgRj1NYXRoLm1heChMKzIsQik7RjxKLTE7RisrKWlmKFFbRl09PT0yNTUmJlFbRisxXT09PTIxNylyZXR1cm4gQj0wLHtzOkwsZTpGKzJ9O3JldHVybiBCPU1hdGgubWF4KEwrMixKLTEpLG51bGx9LFY9KCk9Pnt3aGlsZShaPEope2xldCB6PUcoWik7aWYoej49MCl7bGV0IEY9TihaLHopO2lmKEYhPW51bGwmJkY+MCl7bGV0IEM9eis0LEg9QytGO2lmKEo8SClicmVhazskKFEuc3ViYXJyYXkoQyxIKSksWj1IO2NvbnRpbnVlfX1lbHNlIGlmKEotWjw9WClicmVhaztsZXQgTD1VKFopO2lmKCFMKWJyZWFrOyQoUS5zdWJhcnJheShMLnMsTC5lKSksWj1MLmV9aWYoWj4wKXtpZihaPEopUS5jb3B5V2l0aGluKDAsWixKKTtKLT1aLEI9Qj5aP0ItWjowLFo9MH19O3JldHVybntwdXNoKHope2lmKHoubGVuZ3RoPT09MClyZXR1cm47cSh6KSxWKCl9fX1mdW5jdGlvbiBsNigkKXtsZXQgUT1JKG5ldyBTZXQpLEo9RCgoWik9PntyZXR1cm4gUS5jdXJyZW50LmFkZChaKSwoKT0+e1EuY3VycmVudC5kZWxldGUoWil9fSxbXSk7cmV0dXJuIHkoKCk9PntpZighJClyZXR1cm47bGV0IFo9bmV3IEFib3J0Q29udHJvbGxlcixYPSExLFk9bnVsbCxxPW5ldyBVUkwoJCk7cS5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IEc9cS50b1N0cmluZygpLE49KCk9PntpZihYfHxaLnNpZ25hbC5hYm9ydGVkfHxZKXJldHVybjtZPXNldFRpbWVvdXQoKCk9PntZPW51bGwsVSgpfSwxMDAwKX0sQj0oVik9PntpZihRLmN1cnJlbnQuc2l6ZT09PTApcmV0dXJuO2xldCB6PVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW1ZdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTtmb3IobGV0IEwgb2YgUS5jdXJyZW50KUwoeil9LFU9YXN5bmMoKT0+e3RyeXtsZXQgej0oYXdhaXQgZmV0Y2goRyx7c2lnbmFsOlouc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCF6KXtOKCk7cmV0dXJufWxldCBMPXU2KEIpO3doaWxlKCEwKXtsZXR7ZG9uZTpGLHZhbHVlOkN9PWF3YWl0IHoucmVhZCgpO2lmKEYpYnJlYWs7aWYoQyYmQy5sZW5ndGgpTC5wdXNoKEMpfX1jYXRjaHt9ZmluYWxseXtOKCl9fTtyZXR1cm4gVSgpLCgpPT57aWYoWD0hMCxZKWNsZWFyVGltZW91dChZKTtaLmFib3J0KCl9fSxbJF0pLHtzdWJzY3JpYmVGcmFtZTpKLGZyYW1lOm51bGx9fWZ1bmN0aW9uIGQ2KCl7bGV0WyRdPU0odjApO3JldHVybntzdXBwb3J0ZWQ6JH19ZnVuY3Rpb24gdzUoJCxRLEosWixYPSJsZWZ0Iil7bGV0IFk9RCgoeixMKT0+WD09PSJsZWZ0Ij96LUw6TC16LFtYXSkscT1EKCh6KT0+TWF0aC5tYXgoSixNYXRoLm1pbihaLHopKSxbSixaXSksW0csTl09TSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBRO2xldCB6PXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgkKSxMPXohPW51bGw/TnVtYmVyKHopOk5hTjtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKEwpP3EoTCk6UX0pLEI9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5taW4oWix3aW5kb3cuaW5uZXJXaWR0aC0zMik6WixVPU1hdGgubWF4KEosTWF0aC5taW4oQixHKSksVj1EKCh6KT0+e3oucHJldmVudERlZmF1bHQoKTtsZXQgTD16LmNsaWVudFgsRj1VLEM9ei5jdXJyZW50VGFyZ2V0O0Muc2V0UG9pbnRlckNhcHR1cmUoei5wb2ludGVySWQpO2xldCBIPShfKT0+e2xldCBTPXEoRitZKEwsXy5jbGllbnRYKSk7TihTKX0saz0oXyk9PntDLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShfLnBvaW50ZXJJZCksQy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsSCksQy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGspLEMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsayk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgkLFN0cmluZyhxKEYrWShMLF8uY2xpZW50WCkpKSl9Y2F0Y2h7fX07Qy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsSCksQy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGspLEMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsayl9LFtxLFksVSwkXSk7cmV0dXJue3dpZHRoOlUsb25Qb2ludGVyRG93bjpWfX12YXIgdVE9ODAwMDtmdW5jdGlvbiBsUSgkKXtyZXR1cm4iZmlsZTovLyIrJC5zcGxpdCgiLyIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oIi8iKX1mdW5jdGlvbiBkUSgkKXtyZXR1cm4gJCE9PSJub25lIn1mdW5jdGlvbiBjNih7dG9hc3Q6JCxvblJldmVhbDpRLG9uRGlzbWlzczpKLG9uUGF1c2U6WixvblJlc3VtZTpYfSl7bGV0W1kscV09TSghMSksRz1JKG51bGwpLE49SShudWxsKSxCPSgpPT57aWYoTi5jdXJyZW50KWNsZWFyVGltZW91dChOLmN1cnJlbnQpO04uY3VycmVudD1udWxsfTt5KCgpPT4oKT0+QigpLFtdKTtsZXQgVT0oeik9PntpZighJC5wYXRoKXt6LnByZXZlbnREZWZhdWx0KCk7cmV0dXJufUIoKSxaKCksTi5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntOLmN1cnJlbnQ9bnVsbCxxKCExKSxYKCl9LHVRKSx6LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0L3BsYWluIixsUSgkLnBhdGgpKSx6LmRhdGFUcmFuc2Zlci5zZXREYXRhKFQ1LCQucGF0aCksei5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZD0iY29weSI7bGV0IEw9Ry5jdXJyZW50O2lmKEwpei5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKEwsTC5vZmZzZXRXaWR0aC8yLEwub2Zmc2V0SGVpZ2h0LzIpO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+cSghMCkpfSxWPSh6KT0+e2lmKEIoKSxxKCExKSxkUSh6LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0KSlKKCk7ZWxzZSBYKCl9O3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJzY3JlZW5zaG90LXRvYXN0IixjbGFzc05hbWU6InctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0iLG9uTW91c2VFbnRlcjpaLG9uTW91c2VMZWF2ZTpYLGNoaWxkcmVuOlskLnRodW1iJiZLKCJpbWciLHtyZWY6RywiZGF0YS10ZXN0aWQiOiJkcmFnLWltYWdlIixzcmM6JC50aHVtYixhbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOi05OTk5LGxlZnQ6MCx3aWR0aDo4MCxoZWlnaHQ6ODAsYm9yZGVyUmFkaXVzOjEyLG9iamVjdEZpdDoiY292ZXIiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLCQuc3RhdHVzPT09ImVycm9yIj9LKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTMuNSBweS0yLjUgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLXhsIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIGJnLVsjZjg3MTcxXSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJzZWxlY3QtdGV4dCIsY2hpbGRyZW46JC5tZXNzYWdlPz8iU2NyZWVuc2hvdCBmYWlsZWQifSldfSk6SygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlEsZGlzYWJsZWQ6JC5zdGF0dXMhPT0ic2F2ZWQiLGRyYWdnYWJsZTokLnN0YXR1cz09PSJzYXZlZCIsb25EcmFnU3RhcnQ6VSxvbkRyYWdFbmQ6ViwiYXJpYS1sYWJlbCI6Ik9wZW4gc2NyZWVuc2hvdCBpbiBGaW5kZXIiLHRpdGxlOiJDbGljayB0byByZXZlYWwgaW4gRmluZGVyIMK3IGRyYWcgdG8gY29weSB0aGUgZmlsZSIsY2xhc3NOYW1lOmBncm91cCBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTMgcGwtMiBwci0zLjUgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldIHRleHQtbGVmdCBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLVsjMmEyYTJjXSBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7WT8iaW52aXNpYmxlIjoiIn1gLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InNpemUtOSByb3VuZGVkLW1kIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS8xMCBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByaW5nLTEgcmluZy13aGl0ZS8xMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjokLnRodW1iP0soImltZyIse3NyYzokLnRodW1iLGFsdDoiIixjbGFzc05hbWU6InNpemUtZnVsbCBvYmplY3QtY292ZXIiLGRyYWdnYWJsZTohMX0pOksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIHNpemUtNCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzMwIGJvcmRlci10LXdoaXRlIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSl9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgbGVhZGluZy10aWdodCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlIixjaGlsZHJlbjokLnN0YXR1cz09PSJzYXZpbmciPyJTYXZpbmcgU2NyZWVuc2hvdOKApiI6IlNjcmVlbnNob3QgU2F2ZWQifSksJC5zdGF0dXM9PT0ic2F2ZWQiJiZLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzYwIixjaGlsZHJlbjoiT3BlbiBpbiBGaW5kZXIifSldfSksJC5zdGF0dXM9PT0ic2F2ZWQiJiZLKE8yLHtjbGFzc05hbWU6Im1sLWF1dG8gdGV4dC13aGl0ZS84MCBwb2ludGVyLWV2ZW50cy1ub25lIixzaXplOjE2LHN0cm9rZVdpZHRoOjIuMjV9KV19KV19KX12YXIgcjY9MzUwMCxvNj00MDAwO2Z1bmN0aW9uIGNRKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIi0iKS5zbGljZSgwLDIzKX1mdW5jdGlvbiBpNigkKXtsZXQgUT1JKG51bGwpLEo9SShudWxsKSxaPUkobnVsbCksWD1JKG51bGwpLFk9SShudWxsKSxxPUQoKCk9PntpZihaLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFouY3VycmVudCk7Wi5jdXJyZW50PW51bGwsWC5jdXJyZW50PW51bGx9LFtdKSxHPUQoKEYpPT57bGV0IEM9Rj8/Si5jdXJyZW50Pz92b2lkIDA7aWYocSgpLFkuY3VycmVudD1udWxsLHgyLmRpc21pc3MoQyksQz09PXZvaWQgMHx8Si5jdXJyZW50PT09U3RyaW5nKEMpKVEuY3VycmVudD1udWxsLEouY3VycmVudD1udWxsfSxbcV0pLE49RCgoKT0+e2xldCBGPVEuY3VycmVudDtpZihGPy5wYXRoKVAxKGBvcGVuIC1SICR7azEoRi5wYXRoKX1gKX0sW10pLEI9RCgoRik9PntxKCk7bGV0IEM9TWF0aC5tYXgoMCxGKSxIPUouY3VycmVudDtZLmN1cnJlbnQ9QyxYLmN1cnJlbnQ9RGF0ZS5ub3coKStDLFouY3VycmVudD1zZXRUaW1lb3V0KCgpPT5HKEg/P3ZvaWQgMCksQyl9LFtxLEddKSxVPUQoKCk9PntpZighWi5jdXJyZW50fHxYLmN1cnJlbnQ9PW51bGwpcmV0dXJuO1kuY3VycmVudD1NYXRoLm1heCgwLFguY3VycmVudC1EYXRlLm5vdygpKSxxKCl9LFtxXSksVj1EKCgpPT57bGV0IEY9WS5jdXJyZW50O2lmKEY9PW51bGwpcmV0dXJuO0IoRil9LFtCXSksej1EKChGLEM9MS8wKT0+e2lmKFEuY3VycmVudD1GLEouY3VycmVudD1GLmlkLHgyLmN1c3RvbSgoSCk9PksoYzYse3RvYXN0OkYsb25SZXZlYWw6TixvbkRpc21pc3M6KCk9PkcoSCksb25QYXVzZTpVLG9uUmVzdW1lOlZ9KSx7aWQ6Ri5pZCxkdXJhdGlvbjoxLzB9KSxOdW1iZXIuaXNGaW5pdGUoQykpQihDKTtlbHNlIHEoKSxZLmN1cnJlbnQ9bnVsbH0sW3EsRyxVLFYsTixCXSk7cmV0dXJue2NhcHR1cmU6RChhc3luYygpPT57aWYoISQpcmV0dXJuO2xldCBGPWNyeXB0by5yYW5kb21VVUlEKCk7eih7aWQ6RixzdGF0dXM6InNhdmluZyIscGhhc2U6ImluIn0pO2xldCBIPWBGPSIke2AkSE9NRS9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSR7Y1EoKX0ucG5nYH0iOyB4Y3J1biBzaW1jdGwgaW8gJHtrMSgkKX0gc2NyZWVuc2hvdCAiJEYiICYmIHByaW50ZiAnJXMnICIkRiJgLGs7dHJ5e2xldCBTPWF3YWl0IFAxKEgpO2lmKGs9Uy5zdGRvdXQudHJpbSgpLFMuZXhpdENvZGUhPT0wfHwhayl7eih7aWQ6RixzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6Uy5zdGRlcnIudHJpbSgpfHwiU2NyZWVuc2hvdCBmYWlsZWQifSxvNik7cmV0dXJufX1jYXRjaChTKXt6KHtpZDpGLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTpTIGluc3RhbmNlb2YgRXJyb3I/Uy5tZXNzYWdlOiJTY3JlZW5zaG90IGZhaWxlZCJ9LG82KTtyZXR1cm59eih7aWQ6RixzdGF0dXM6InNhdmVkIixwaGFzZToiaW4iLHBhdGg6a30scjYpO2xldCBfPWAvdG1wL3NlcnZlLXNpbS1zY3JlZW5zaG90LXRodW1iLSR7Rn0ucG5nYDt0cnl7bGV0IEU9KGF3YWl0IFAxKGBzaXBzIC1aIDMyMCAke2sxKGspfSAtLW91dCAke2sxKF8pfSA+L2Rldi9udWxsIDI+JjEgJiYgYmFzZTY0IC1pICR7azEoXyl9OyBybSAtZiAke2sxKF8pfWApKS5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpO2lmKEUpe2xldCBiPVEuY3VycmVudDtpZihiPy5pZD09PUYpeih7Li4uYix0aHVtYjpgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7RX1gfSxyNil9fWNhdGNoe319LFskLHpdKSxyZXZlYWw6TixkaXNtaXNzOkd9fWZ1bmN0aW9uIGE2KHtkZWZhdWx0V2lkdGg6JCx2aWV3cG9ydFdpZHRoOlEsdmlld3BvcnRIZWlnaHQ6Sixhc3BlY3RSYXRpbzpaLGluaXRpYWxGaXQ6WD0hMSxvblN0YXJ0Oll9KXtsZXQgcT1rNSgpLFtHLE5dPU0oITEpLFtCLFVdPU0oITEpLFtWLHpdPU0oITEpLEw9SShudWxsKSxGPUkoW10pLEM9SShudWxsKSxIPUkobnVsbCksaz1JKG51bGwpLF89SShudWxsKSxTPUkoWCksRT1JKCExKTt5KCgpPT57RS5jdXJyZW50PSEwfSxbXSk7bGV0IGI9RCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO2lmKFMuY3VycmVudCYmIUUuY3VycmVudClyZXR1cm4gTTUoJCxRLEosWik7bGV0IHc9TmFOO3RyeXtsZXQgcD13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oazMpO3c9cCE9bnVsbD9OdW1iZXIocCk6TmFOfWNhdGNoe31yZXR1cm4gcjkoJCxRLEosWix3KX0sW1osJCxKLFFdKSx2PVcxKCgpPT5iKCksW2JdKSxbWDEsZl09TSh2KSxsPUkodiksYz1JKCQpLCQxPU01KCQsUSxKLFopLFUxPU1hdGgubWluKEU5LCQxKSxLMT1YMT8/JCxNMT1mMChLMSwkLFEsSixaKSxtPUQoKHcpPT57bGV0IHA9XzUodyk7bC5jdXJyZW50PXAsZihwKX0sW10pLGc9RCgodyk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8JDw9MClyZXR1cm47bGV0IHA9ZjAodywkLFEsSixaKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGszLFN0cmluZyhwLyQpKX1jYXRjaHt9fSxbWiwkLEosUV0pLHM9RCgodyk9PntpZihrLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KGsuY3VycmVudCk7ay5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntrLmN1cnJlbnQ9bnVsbCxnKHcpfSxjOSl9LFtnXSk7eSgoKT0+e2lmKEd8fEIpcmV0dXJuO2xldCB3PWwuY3VycmVudDtpZih3PT1udWxsKXJldHVybjtsZXQgcD1mMCh3LCQsUSxKLFopO2lmKHAhPT13KW0ocCl9LFtaLCQsQixHLEosUSxtXSkseSgoKT0+e2lmKGMuY3VycmVudD09PSQpcmV0dXJuO2MuY3VycmVudD0kLG0oYigpKX0sWyQsYixtXSkseSgoKT0+e2lmKCFHJiYhQilyZXR1cm47bGV0IHc9ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IscD1kb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QsUTE9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPXcsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PXAsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PVExfX0sW0csQl0pLHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IHc9KCk9PntsZXQgUTE9bC5jdXJyZW50O2lmKFExPT1udWxsKXJldHVybjtpZihrLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KGsuY3VycmVudCksay5jdXJyZW50PW51bGw7ZyhRMSl9LHA9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIil3KCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHcpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHApLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIix3KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixwKX19LFtnXSk7bGV0IFkxPUQoKHcpPT57aWYodz4kMSlyZXR1cm4gJDErQTMody0kMSwkMSk7aWYodzxVMSlyZXR1cm4gVTEtQTMoVTEtdywkMSk7cmV0dXJuIHd9LFskMSxVMV0pLFYxPUQoKCk9PntpZihILmN1cnJlbnQpSC5jdXJyZW50KCksSC5jdXJyZW50PW51bGw7VSghMSl9LFtdKSxOMT1EKCh3KT0+e2xldCBwPXBlcmZvcm1hbmNlLm5vdygpLFExPUYuY3VycmVudDtRMS5wdXNoKHt0OnAseDp3fSk7d2hpbGUoUTEubGVuZ3RoPjEmJnAtUTFbMF0udD5kOSlRMS5zaGlmdCgpfSxbXSksSDE9RCgodyk9PntsZXQgcD1ZMSh3KTtpZihDLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQy5jdXJyZW50KTtDLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Qy5jdXJyZW50PW51bGwsbShwKSxOMShwKX0pfSxbWTEsTjEsbV0pLEwxPUQoKHcscCxRMSk9PntWMSgpO2xldCB6MT1sLmN1cnJlbnQ/PyQ7TC5jdXJyZW50PXtwb2ludGVySWQ6dyxzdGFydFg6cCxzdGFydFk6UTEsc3RhcnRXaWR0aDp6MX0sRi5jdXJyZW50PVt7dDpwZXJmb3JtYW5jZS5ub3coKSx4OnoxfV0sWSgpLE4oITApfSxbVjEsJCxZXSksaj1EKCgpPT57bGV0IHc9TC5jdXJyZW50O2lmKEwuY3VycmVudD1udWxsLEMuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShDLmN1cnJlbnQpLEMuY3VycmVudD1udWxsO2lmKHcmJncucG9pbnRlcklkPj0wKXtsZXQgcTE9Xy5jdXJyZW50O2lmKHExPy5oYXNQb2ludGVyQ2FwdHVyZSh3LnBvaW50ZXJJZCkpcTEucmVsZWFzZVBvaW50ZXJDYXB0dXJlKHcucG9pbnRlcklkKX1OKCExKTtsZXQgcD1sLmN1cnJlbnQ/PyQsUTE9bjkoRi5jdXJyZW50KTtGLmN1cnJlbnQ9W107bGV0IHoxPWYwKHArUTEqbDksJCxRLEosWikseD1fNShvOSh6MSxbJF0sbTkpKSxhPU1hdGguYWJzKHAteCk8MC41JiZNYXRoLmFicyhRMSk8ODtpZihxfHxhKXttKHgpLHMoeCk7cmV0dXJufVUoITApLEguY3VycmVudD1pOSh7ZnJvbTpwLHRvOngsdmVsb2NpdHk6UTEsc3RpZmZuZXNzOnA5LGRhbXBpbmc6dTksb25VcGRhdGU6bSxvbkNvbXBsZXRlOigpPT57SC5jdXJyZW50PW51bGwsVSghMSkscyh4KX19KX0sW1osJCxxLHMsSixRLG1dKTt5KCgpPT57cmV0dXJuKCk9PntpZihWMSgpLEMuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShDLmN1cnJlbnQpO2lmKGsuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KGsuY3VycmVudCksbC5jdXJyZW50IT1udWxsKWcobC5jdXJyZW50KX19fSxbVjEsZ10pLHkoKCk9PntpZighRylyZXR1cm47bGV0IHc9KCk9PmooKSxwPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpaigpfSxRMT0oejEpPT57bGV0IHg9TC5jdXJyZW50O2lmKCF4fHx4LnBvaW50ZXJJZCE9PXoxLnBvaW50ZXJJZClyZXR1cm47ejEucHJldmVudERlZmF1bHQoKSxIMShuNih4LHoxLmNsaWVudFgsejEuY2xpZW50WSxaKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixRMSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsdywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLHcsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHApLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHcpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsUTEsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHcsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIix3LCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixwKX19LFtaLGosRyxIMV0pO2xldCBuPUQoKHcpPT57bGV0IHA9TC5jdXJyZW50O2lmKCFwfHxwLnBvaW50ZXJJZCE9PXcucG9pbnRlcklkKXJldHVybjt3LnByZXZlbnREZWZhdWx0KCksdy5zdG9wUHJvcGFnYXRpb24oKSxqKCl9LFtqXSksZD1EKCh3KT0+e2lmKHcuYnV0dG9uIT09MClyZXR1cm47dy5wcmV2ZW50RGVmYXVsdCgpLHcuc3RvcFByb3BhZ2F0aW9uKCksdy5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKHcucG9pbnRlcklkKSxMMSh3LnBvaW50ZXJJZCx3LmNsaWVudFgsdy5jbGllbnRZKX0sW0wxXSksWjE9RCgodyk9PntsZXQgcD1MLmN1cnJlbnQ7aWYoIXB8fHAucG9pbnRlcklkIT09dy5wb2ludGVySWQpcmV0dXJuO3cucHJldmVudERlZmF1bHQoKSxIMShuNihwLHcuY2xpZW50WCx3LmNsaWVudFksWikpfSxbWixIMV0pLEQxPUQoKHcpPT57bGV0IHA9dy5rZXk9PT0iQXJyb3dSaWdodCJ8fHcua2V5PT09IkFycm93RG93biI/MTp3LmtleT09PSJBcnJvd0xlZnQifHx3LmtleT09PSJBcnJvd1VwIj8tMTowO2lmKHA9PT0wKXJldHVybjt3LnByZXZlbnREZWZhdWx0KCksVjEoKTtsZXQgUTE9dy5zaGlmdEtleT84MDoyNCx6MT1fNShmMChNMStwKlExLCQsUSxKLFopKTttKHoxKSxzKHoxKX0sW1osVjEsTTEsJCxzLEosUSxtXSk7cmV0dXJue2hhbmRsZVJlZjpfLHdpZHRoOksxLGNvbW1pdHRlZFdpZHRoOk0xLG1pbldpZHRoOlUxLG1heFdpZHRoOiQxLGlzUmVzaXppbmc6Ryxpc0luZXJ0aWE6QixoYW5kbGVIb3ZlcmVkOlYsaGFuZGxlQWN0aXZlOlZ8fEd8fEIsc2V0SGFuZGxlSG92ZXJlZDp6LG9uUG9pbnRlckRvd246ZCxvblBvaW50ZXJNb3ZlOloxLG9uUG9pbnRlckVuZDpuLG9uS2V5RG93bjpEMX19ZnVuY3Rpb24gbjYoJCxRLEosWil7bGV0IFg9US0kLnN0YXJ0WCxZPShKLSQuc3RhcnRZKSpaO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFgpPj1NYXRoLmFicyhZKT9YOlkpfWZ1bmN0aW9uIHM2KCl7bGV0ICQ9SShuZXcgTWFwKSxRPUkobmV3IE1hcCksSj1EKChHKT0+e2xldCBOPVEuY3VycmVudC5nZXQoRyk7aWYoTiljbGVhclRpbWVvdXQoTik7US5jdXJyZW50LmRlbGV0ZShHKX0sW10pLFo9RCgoRyxOPTEvMCk9Pnt4Mi5jdXN0b20oKCk9PksoSzYse3RvYXN0Okd9KSx7aWQ6Ry5pZCxkdXJhdGlvbjpOfSl9LFtdKSxYPUQoKEcsTik9PntsZXQgQj1jcnlwdG8ucmFuZG9tVVVJRCgpLFU9e2lkOkIsbmFtZTpHLGtpbmQ6TixzdGF0dXM6InVwbG9hZGluZyIscHJvZ3Jlc3M6MH07cmV0dXJuICQuY3VycmVudC5zZXQoQixVKSxaKFUpLEJ9LFtaXSksWT1EKChHLE4pPT57bGV0IEI9JC5jdXJyZW50LmdldChHKTtpZighQilyZXR1cm47SihHKTtsZXQgVT17Li4uQiwuLi5OfTtpZigkLmN1cnJlbnQuc2V0KEcsVSksWihVLE4uc3RhdHVzPT09InN1Y2Nlc3MifHxOLnN0YXR1cz09PSJlcnJvciI/MzAwMDoxLzApLE4uc3RhdHVzPT09InN1Y2Nlc3MifHxOLnN0YXR1cz09PSJlcnJvciIpe2xldCBWPXNldFRpbWVvdXQoKCk9PnskLmN1cnJlbnQuZGVsZXRlKEcpLFEuY3VycmVudC5kZWxldGUoRyl9LDMwMDApO1EuY3VycmVudC5zZXQoRyxWKX19LFtKLFpdKSxxPUQoKEcsTik9PntsZXQgQj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFCKXJldHVybjtsZXQgVT17Li4uQixwcm9ncmVzczpOfTskLmN1cnJlbnQuc2V0KEcsVSksWihVKX0sW1pdKTtyZXR1cm57YWRkOlgsdXBkYXRlOlksc2V0UHJvZ3Jlc3M6cX19ZnVuY3Rpb24gdDYoJCxRKXtsZXRbSixaXT1NKFtdKSxbWCxZXT1NKG51bGwpLFtxLEddPU0oITEpLE49RChhc3luYygpPT57aWYoISQpcmV0dXJuO0coITApLFkobnVsbCk7dHJ5e2xldCBCPWF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSxVPWF3YWl0IEIuanNvbigpO2lmKCFCLm9rfHxVLmVycm9yKXRocm93IEVycm9yKFUuZXJyb3J8fCJGYWlsZWQgdG8gbGlzdCBXZWJLaXQgdGFyZ2V0cyIpO2xldCBWPXR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LmxvY2F0aW9uLHo9VS50YXJnZXRzPz9bXTtaKFY/ei5tYXAoKEwpPT5qNihMLFYpKTp6KX1jYXRjaChCKXtZKEIgaW5zdGFuY2VvZiBFcnJvcj9CLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e0coITEpfX0sWyRdKTtyZXR1cm4geSgoKT0+e2lmKCFRKXJldHVybjtOKCk7bGV0IEI9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgTigpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKEIpfSxbUSxOXSkse3RhcmdldHM6SixlcnJvcjpYLGxvYWRpbmc6cSxyZWZyZXNoOk59fXZhciByUT02MCxvUT0xMDAwO2Z1bmN0aW9uIGU2KCQsUSxKLFo9clEpe2xldFtYLFldPU0obnVsbCksW3EsR109TSgwKSxbTixCXT1NKFopLFtVLFZdPU0oMCk7eSgoKT0+e2lmKCFRfHwhJClyZXR1cm47bGV0IGs9ITEsXz0kLmluY2x1ZGVzKCI/Iik/IiYiOiI/IixTPWFzeW5jKCk9Pnt0cnl7bGV0IHY9YXdhaXQoYXdhaXQgZmV0Y2goYCR7JH0ke199bGltaXQ9JHtOfSZvZmZzZXQ9MGAse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKGspcmV0dXJuO2lmKFkodi5kZXZpY2VzPz9bXSksdHlwZW9mIHYudG90YWw9PT0ibnVtYmVyIilHKHYudG90YWwpfWNhdGNoe2lmKCFrKVkoW10pfX07UygpO2xldCBFPXNldEludGVydmFsKFMsSj83NTA6MzAwMCk7cmV0dXJuKCk9PntrPSEwLGNsZWFySW50ZXJ2YWwoRSl9fSxbJCxRLFUsSixOXSk7bGV0IHo9RCgoKT0+Vigoayk9PmsrMSksW10pLEw9RCgoKT0+Qigoayk9PmsrWiksW1pdKSxGPUQoKCk9PkIob1EpLFtdKSxDPUQoKCk9PkIoWiksW1pdKSxIPXE+KFg/Lmxlbmd0aD8/MCk7cmV0dXJue2RldmljZXM6WCx0b3RhbDpxLHJlZnJlc2g6eixsb2FkTW9yZTpMLGxvYWRBbGw6RixyZXNldFBhZ2U6QyxoYXNNb3JlOkh9fXZhciBTMz17c3RyZWFtZWQ6ITEsZmVsbEJhY2s6ITF9O2Z1bmN0aW9uICQ0KCQsUSl7c3dpdGNoKFEpe2Nhc2UiZnJhbWUiOnJldHVybiAkLnN0cmVhbWVkPyQ6ey4uLiQsc3RyZWFtZWQ6ITB9O2Nhc2UidGltZW91dCI6cmV0dXJuICQuc3RyZWFtZWR8fCQuZmVsbEJhY2s/JDp7Li4uJCxmZWxsQmFjazohMH07Y2FzZSJlcnJvciI6cmV0dXJuICQuZmVsbEJhY2s/JDp7Li4uJCxmZWxsQmFjazohMH07Y2FzZSJyZXNldCI6cmV0dXJuIFMzfX12YXIgUTQ9NDAwMDt2YXIgaVE9e0tleUE6NCxLZXlCOjUsS2V5Qzo2LEtleUQ6NyxLZXlFOjgsS2V5Rjo5LEtleUc6MTAsS2V5SDoxMSxLZXlJOjEyLEtleUo6MTMsS2V5SzoxNCxLZXlMOjE1LEtleU06MTYsS2V5TjoxNyxLZXlPOjE4LEtleVA6MTksS2V5UToyMCxLZXlSOjIxLEtleVM6MjIsS2V5VDoyMyxLZXlVOjI0LEtleVY6MjUsS2V5VzoyNixLZXlYOjI3LEtleVk6MjgsS2V5WjoyOSxEaWdpdDE6MzAsRGlnaXQyOjMxLERpZ2l0MzozMixEaWdpdDQ6MzMsRGlnaXQ1OjM0LERpZ2l0NjozNSxEaWdpdDc6MzYsRGlnaXQ4OjM3LERpZ2l0OTozOCxEaWdpdDA6MzksRW50ZXI6NDAsRXNjYXBlOjQxLEJhY2tzcGFjZTo0MixUYWI6NDMsU3BhY2U6NDQsTWludXM6NDUsRXF1YWw6NDYsQnJhY2tldExlZnQ6NDcsQnJhY2tldFJpZ2h0OjQ4LEJhY2tzbGFzaDo0OSxTZW1pY29sb246NTEsUXVvdGU6NTIsQmFja3F1b3RlOjUzLENvbW1hOjU0LFBlcmlvZDo1NSxTbGFzaDo1NixDYXBzTG9jazo1NyxGMTo1OCxGMjo1OSxGMzo2MCxGNDo2MSxGNTo2MixGNjo2MyxGNzo2NCxGODo2NSxGOTo2NixGMTA6NjcsRjExOjY4LEYxMjo2OSxQcmludFNjcmVlbjo3MCxTY3JvbGxMb2NrOjcxLFBhdXNlOjcyLEluc2VydDo3MyxIb21lOjc0LFBhZ2VVcDo3NSxEZWxldGU6NzYsRW5kOjc3LFBhZ2VEb3duOjc4LEFycm93UmlnaHQ6NzksQXJyb3dMZWZ0OjgwLEFycm93RG93bjo4MSxBcnJvd1VwOjgyLE51bUxvY2s6ODMsTnVtcGFkRGl2aWRlOjg0LE51bXBhZE11bHRpcGx5Ojg1LE51bXBhZFN1YnRyYWN0Ojg2LE51bXBhZEFkZDo4NyxOdW1wYWRFbnRlcjo4OCxOdW1wYWQxOjg5LE51bXBhZDI6OTAsTnVtcGFkMzo5MSxOdW1wYWQ0OjkyLE51bXBhZDU6OTMsTnVtcGFkNjo5NCxOdW1wYWQ3Ojk1LE51bXBhZDg6OTYsTnVtcGFkOTo5NyxOdW1wYWQwOjk4LE51bXBhZERlY2ltYWw6OTksQ29udHJvbExlZnQ6MjI0LFNoaWZ0TGVmdDoyMjUsQWx0TGVmdDoyMjYsTWV0YUxlZnQ6MjI3LENvbnRyb2xSaWdodDoyMjgsU2hpZnRSaWdodDoyMjksQWx0UmlnaHQ6MjMwLE1ldGFSaWdodDoyMzF9O2Z1bmN0aW9uIEo0KCQpe3JldHVybiBpUVskXT8/bnVsbH12YXIgeDM9MzIwLEs0PTc2MCx2Mz0zMDA7ZnVuY3Rpb24gajMoJCxRKXtpZighJClyZXR1cm4gbnVsbDtpZighJC5kZXZpY2UpcmV0dXJuICQ7aWYoISQucHJveHlIZWxwZXJzKXJldHVybiAkO2xldCBaPWAkeyQuYmFzZVBhdGg9PT0iLyI/IiI6KCQuYmFzZVBhdGg/PyIiKS5yZXBsYWNlKC9cLyskLywiIil9L2hlbHBlci8ke2VuY29kZVVSSUNvbXBvbmVudCgkLmRldmljZSl9YCxYPWAke1EucHJvdG9jb2x9Ly8ke1EuaG9zdH1gLFk9US5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IjtyZXR1cm57Li4uJCx1cmw6YCR7WH0ke1p9YCxzdHJlYW1Vcmw6YCR7WH0ke1p9L3N0cmVhbS5tanBlZ2Asd3NVcmw6YCR7WX0vLyR7US5ob3N0fSR7Wn0vd3NgfX1mdW5jdGlvbiBSMygkKXtpZigkPy5pbmNsdWRlcygiZGV2dG9vbHMiKSlyZXR1cm4iZGV2dG9vbHMiO2lmKCQ/LmluY2x1ZGVzKCJ0b29scyIpKXJldHVybiJ0b29scyI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gblEoJCxRKXtsZXQgSj0kLmluY2x1ZGVzKCI/Iik/IiYiOiI/IjtyZXR1cm5gJHskfSR7Sn1kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoUSl9YH1hc3luYyBmdW5jdGlvbiBaNCgkLFEsSj17fSl7bGV0IFg9YXdhaXQoSi5mZXRjaEltcGw/P2ZldGNoKShuUSgkLFEpLHtjYWNoZToibm8tc3RvcmUiLHNpZ25hbDpKLnNpZ25hbH0pO2lmKCFYLm9rKXJldHVybiBudWxsO2xldCBZPWcwKGF3YWl0IFguanNvbigpKTtyZXR1cm4gWT8uZGV2aWNlPT09UT9ZOm51bGx9ZnVuY3Rpb24gWDQoJCxRLEope2xldCBaPSEwO3JldHVybiAkLm9ubWVzc2FnZT0oWCk9PntpZighWilyZXR1cm47dHJ5e2xldCBZPWcwKEpTT04ucGFyc2UoWC5kYXRhKSk7aWYoWSYmUSYmWS5kZXZpY2UhPT1RKXJldHVybjtKKFkpfWNhdGNoe319LCgpPT57Wj0hMSwkLmNsb3NlKCl9fWZ1bmN0aW9uIFk0KCQsUSl7bGV0IEo9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEpKSxaPW5ldyBVaW50OEFycmF5KDErSi5sZW5ndGgpO3JldHVybiBaWzBdPSQsWi5zZXQoSiwxKSxafWZ1bmN0aW9uIGFRKCQsUSxKPTMyKXtsZXQgWj1bLi4uJCxRXTtyZXR1cm4gWi5sZW5ndGg+Sj9aLnNsaWNlKFoubGVuZ3RoLUopOlp9ZnVuY3Rpb24gZzMoJCxRLEo9RGF0ZS5ub3coKSxaPTE1MDApe2xldCBYPVEuZmlsdGVyKChZKT0+Si1ZLmNyZWF0ZWRBdDw9Wik7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIFg7Zm9yKGxldCBZIG9mIFgpJC5zZW5kKFk0KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiBxNCgkLFEsSixaLFg9RGF0ZS5ub3coKSl7bGV0IFk9ZzMoJCxRLFgpO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQoWTQoSixaKS5idWZmZXIpLFk7cmV0dXJuIGFRKFkse3RhZzpKLHBheWxvYWQ6WixjcmVhdGVkQXQ6WH0pfWZ1bmN0aW9uIEc0KCQpe3JldHVybiAkP2AkeyQuZGV2aWNlfTokeyQucGlkfTokeyQuc3RyZWFtVXJsfTokeyQud3NVcmx9YDoiIn1mdW5jdGlvbiBzUSgpe2xldCAkPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmluaXRpYWxTdGF0ZSxRPVIzKCQ/LnBhbmVzKSxbSixaXT1NKCgpPT5qMyhnMCh3aW5kb3cuX19TSU1fUFJFVklFV19fKSx3aW5kb3cubG9jYXRpb24pKSxbWCxZXT1NKCExKSxbcSxHXT1NKCgpPT57bGV0IHg9ZzAod2luZG93Ll9fU0lNX1BSRVZJRVdfXyk7aWYoeClyZXR1cm4geC5kZXZpY2U7cmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKX0pLFtOLEJdPU0oITEpLFtVLFZdPU0oUT09PSJkZXZ0b29scyIpLFt6LExdPU0oKCk9PntpZigkPy5wYW5lcylyZXR1cm4gJC5wYW5lcy5pbmNsdWRlcygiZGV2aWNlcyIpO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49djMrNTIwfSkse3dpZHRoOkYsb25Qb2ludGVyRG93bjpDfT13NSgic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIix2MywyNDAsNjQwLCJyaWdodCIpLFtILGtdPU0obnVsbCksXz13aW5kb3cuX19TSU1fUFJFVklFV19fLFM9Xz8uZ3JpZEFwaUVuZHBvaW50Pz9SMSgiZ3JpZC9hcGkiKSxFPV8/LmdyaWRTdGFydEVuZHBvaW50Pz9SMSgiZ3JpZC9hcGkvc3RhcnQiKSxiPV8/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9SMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbdixYMV09TSh7fSksW2YsbF09TSh7fSksW2MsJDFdPU0oe30pLFtVMSxLMV09TSgoKT0+bmV3IFNldCksTTE9T2JqZWN0LnZhbHVlcyh2KS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKGYpLnNvbWUoQm9vbGVhbikse2RldmljZXM6bSx0b3RhbDpnLHJlZnJlc2g6cyxsb2FkTW9yZTpZMSxsb2FkQWxsOlYxLHJlc2V0UGFnZTpOMSxoYXNNb3JlOkgxfT1lNihTLCEwLE0xKSxMMT0hIShxJiZtPy5maW5kKCh4KT0+eC5kZXZpY2U9PT1xKT8uaGVscGVyKSxqPUQoKHgpPT57Ryh4KTt0cnl7bGV0IGE9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7YS5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLHgpLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLGEudG9TdHJpbmcoKSl9Y2F0Y2h7fX0sW10pLG49RChhc3luYyh4LGE9MjAwMDApPT57bGV0IHExPURhdGUubm93KCkrYTt3aGlsZShEYXRlLm5vdygpPHExKXt0cnl7aWYoKChhd2FpdChhd2FpdCBmZXRjaChTLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKSkuZGV2aWNlcz8/W10pLnNvbWUoKHAxKT0+cDEuZGV2aWNlPT09eCYmcDEuaGVscGVyKSlyZXR1cm4hMH1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKEExKT0+c2V0VGltZW91dChBMSw0MDApKX1yZXR1cm4hMX0sW1NdKSxkPUQoYXN5bmMoeCk9PntYMSgoYSk9Pih7Li4uYSxbeF06ITB9KSksJDEoKGEpPT4oey4uLmEsW3hdOm51bGx9KSk7dHJ5e2xldCBhPWF3YWl0IGZldGNoKEUse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOnh9KX0pLHExPWF3YWl0IGEuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighYS5va3x8IXExLm9rKXskMSgoQTEpPT4oey4uLkExLFt4XTpxMS5lcnJvcj8/YEhUVFAgJHthLnN0YXR1c31gfSkpO3JldHVybn1LMSgoQTEpPT5BMS5oYXMoeCk/QTE6bmV3IFNldChBMSkuYWRkKHgpKSxhd2FpdCBuKHgpfWNhdGNoKGEpeyQxKChxMSk9Pih7Li4ucTEsW3hdOmE/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtYMSgoYSk9Pih7Li4uYSxbeF06ITF9KSkscygpfX0sW0UsbixzXSksWjE9RChhc3luYyh4KT0+e2woKGEpPT4oey4uLmEsW3hdOiEwfSkpLCQxKChhKT0+KHsuLi5hLFt4XTpudWxsfSkpO3RyeXtsZXQgYT1hd2FpdCBmZXRjaChiLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDp4fSl9KSxxMT1hd2FpdCBhLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIWEub2t8fCFxMS5vaykkMSgoQTEpPT4oey4uLkExLFt4XTpxMS5lcnJvcj8/YEhUVFAgJHthLnN0YXR1c31gfSkpfWNhdGNoKGEpeyQxKChxMSk9Pih7Li4ucTEsW3hdOmE/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtsKChhKT0+KHsuLi5hLFt4XTohMX0pKSxzKCl9fSxbYixzXSk7eSgoKT0+e2lmKHEpcmV0dXJuO2lmKEo/LmRldmljZSl7RyhKLmRldmljZSk7cmV0dXJufWlmKCFtfHxtLmxlbmd0aD09PTApcmV0dXJuO2xldCB4PW0uZmluZCgoYSk9PmEuaGVscGVyKT8/bS5maW5kKChhKT0+YS5zdGF0ZT09PSJCb290ZWQiKT8/bVswXTtpZih4KUcoeC5kZXZpY2UpfSxbcSxKPy5kZXZpY2UsbV0pO2xldCBEMT1EKCh4KT0+e1ooKGEpPT57aWYoeD1qMyhnMCh4KSx3aW5kb3cubG9jYXRpb24pLEc0KGEpPT09RzQoeCkpcmV0dXJuIGE7aWYoeCl3aW5kb3cuX19TSU1fUFJFVklFV19fPXg7ZWxzZSBpZih3aW5kb3cuX19TSU1fUFJFVklFV19fKXtsZXR7YmFzZVBhdGg6cTEsZXhlY1Rva2VuOkExfT13aW5kb3cuX19TSU1fUFJFVklFV19fO3dpbmRvdy5fX1NJTV9QUkVWSUVXX189e2Jhc2VQYXRoOnExLGV4ZWNUb2tlbjpBMX19cmV0dXJuIHh9KX0sW10pO3koKCk9PntsZXQgeD1gJHtSMSgiYXBpL2V2ZW50cyIpfSR7cT9gP2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChxKX1gOiIifWAsYT1oMCh4KTtyZXR1cm4gWDQoYSxxLEQxKX0sW3EsTDEsRDFdKSx5KCgpPT57aWYoIXF8fCFMMXx8Sj8uZGV2aWNlPT09cSlyZXR1cm47bGV0IHg9bmV3IEFib3J0Q29udHJvbGxlcixhPSExLHExPW51bGwsQTE9NzUwLEswPWFzeW5jKCk9Pnt0cnl7bGV0IHAxPWF3YWl0IFo0KFIxKCJhcGkiKSxxLHtzaWduYWw6eC5zaWduYWx9KTtpZighYSYmcDEpe0QxKHAxKTtyZXR1cm59fWNhdGNoe31pZighYSlxMT1zZXRUaW1lb3V0KEswLEExKSxBMT1NYXRoLm1pbihBMSoyLDUwMDApfTtyZXR1cm4gSzAoKSwoKT0+e2lmKGE9ITAseC5hYm9ydCgpLHExKWNsZWFyVGltZW91dChxMSl9fSxbcSxMMSxKPy5kZXZpY2UsRDFdKTtsZXQgdz1xPz9KPy5kZXZpY2U/P251bGwscD1tPy5maW5kKCh4KT0+eC5kZXZpY2U9PT13KT8/bnVsbCxRMT0hIUomJkouZGV2aWNlPT09dyx6MTtpZihRMSYmSil6MT1LKHRRLHtjb25maWc6SixkZXZpY2VOYW1lOnA/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpwPy5ydW50aW1lPz9udWxsLGNocm9tZTpwPy5jaHJvbWU/P251bGwscHJlZmVyTWpwZWc6VTEuaGFzKEouZGV2aWNlKSxheE92ZXJsYXlFbmFibGVkOk4sc2V0QXhPdmVybGF5RW5hYmxlZDpCLGRldnRvb2xzT3BlbjpVLHNldERldnRvb2xzT3BlbjpWLGdyaWRPcGVuOnosc2V0R3JpZE9wZW46TCxncmlkUGFuZWxXaWR0aDpGLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpILHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDprLHN0cmVhbWluZzpYLHNldFN0cmVhbWluZzpZfSk7ZWxzZXtsZXQgeD16P0YrMzY6MjQ7ejE9SygiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OngscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpwP0soTzkse25hbWU6cC5uYW1lLHJ1bnRpbWU6cC5ydW50aW1lLGNocm9tZTpwLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OnAucGxhY2Vob2xkZXJBc3NldD8/bnVsbCxidXN5OiEhcC5oZWxwZXJ8fCEhdltwLmRldmljZV0sYnVzeUxhYmVsOnAuaGVscGVyPyJDb25uZWN0aW5n4oCmIjoiU3RhcnRpbmfigKYiLGVycm9yOmNbcC5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PmQocC5kZXZpY2UpfSk6SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W0soImgxIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxOHB4XSBtLTAgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46Ik5vIHNpbXVsYXRvcnMgYXZhaWxhYmxlIn0pLEsoInAiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTUgdGV4dC1bMTRweF0gbWF4LXctMTIwIixjaGlsZHJlbjpbIkNyZWF0ZSBhIHNpbXVsYXRvciBpbiBYY29kZSwgb3Igc3RhcnQgb25lIHdpdGgiLCIgIixLKCJjb2RlIix7Y2xhc3NOYW1lOiJiZy1bIzIyMl0gcHgtMS41IHB5LTAuNSByb3VuZGVkIHRleHQtWzEzcHhdIixjaGlsZHJlbjoiYnVueCBzZXJ2ZS1zaW0gLS1kZXRhY2gifSksIi4iXX0pXX0pfSl9cmV0dXJuIEsoZSx7Y2hpbGRyZW46W3oxLEsoSjYse30pLEsoVDkse29wZW46eixvbkNsb3NlOigpPT5MKCExKSx3aWR0aDpGLHNpZGU6ImxlZnQiLGRldmljZXM6bSx0b3RhbDpnLGhhc01vcmU6SDEsb25Mb2FkTW9yZTpZMSxvbkxvYWRBbGw6VjEsb25SZXNldFBhZ2U6TjEsc2VsZWN0ZWRVZGlkOncsb25TZWxlY3Q6aixzdGFydGluZzp2LHNodXR0aW5nRG93bjpmLG9uU2h1dGRvd246WjF9KSxLKEY1LHtwYW5lbFdpZHRoOkYsdmlzaWJsZTp6LG9uUG9pbnRlckRvd246QyxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksSyh6OSx7b3Blbjp6LG9uQ2xpY2s6KCk9PkwoITApfSldfSl9ZnVuY3Rpb24gdFEoe2NvbmZpZzokLGRldmljZU5hbWU6USxkZXZpY2VSdW50aW1lOkosY2hyb21lOloscHJlZmVyTWpwZWc6WCxheE92ZXJsYXlFbmFibGVkOlksc2V0QXhPdmVybGF5RW5hYmxlZDpxLGRldnRvb2xzT3BlbjpHLHNldERldnRvb2xzT3BlbjpOLGdyaWRPcGVuOkIsc2V0R3JpZE9wZW46VSxncmlkUGFuZWxXaWR0aDpWLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDp6LHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpMLHN0cmVhbWluZzpGLHNldFN0cmVhbWluZzpDfSl7bGV0IEg9JC5pbml0aWFsU3RhdGUsaz1SMyhIPy5wYW5lcyk7eSgoKT0+e2RvY3VtZW50LnRpdGxlPVE/YFNpbXVsYXRvciAtICR7UX1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtRXSk7bGV0IF89TzAoUSksUz10NigkLmRldnRvb2xzRW5kcG9pbnQ/P1IxKCJkZXZ0b29scyIpLEcpO3koKCk9PntpZighRylyZXR1cm47aWYoeiYmUy50YXJnZXRzLnNvbWUoKEEpPT5BLmlkPT09eikpcmV0dXJuO0woUy50YXJnZXRzLmxlbmd0aD09PTE/Uy50YXJnZXRzWzBdLmlkOm51bGwpfSxbRyxTLnRhcmdldHMseixMXSkseSgoKT0+e0wobnVsbCl9LFskLmRldmljZSxMXSk7bGV0IEU9ZDYoKSxbYix2XT1TMCgkNCxTMyksW1gxXT1NKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLFtmLGxdPU0oKCk9PndpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShiMyk9PT0ibWpwZWciPyJtanBlZyI6ImF1dG8iKTt5KCgpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGIzLGYpfSxbZl0pO2xldCAkMT0kLmNvZGVjIT09Im1qcGVnIiYmRS5zdXBwb3J0ZWQmJiFiLmZlbGxCYWNrJiYhWCYmIVgxJiZmIT09Im1qcGVnIixVMT1sNigkMT9udWxsOiQuc3RyZWFtVXJsKTt5KCgpPT57QyghMSksdigicmVzZXQiKX0sWyQuc3RyZWFtVXJsLENdKSx5KCgpPT57aWYoJDEmJkYpdigiZnJhbWUiKX0sWyQxLEZdKSx5KCgpPT57aWYoISQxKXJldHVybjtsZXQgQT1zZXRUaW1lb3V0KCgpPT52KCJ0aW1lb3V0IiksUTQpO3JldHVybigpPT5jbGVhclRpbWVvdXQoQSl9LFskMSwkLnN0cmVhbVVybF0pO2xldFtLMSxNMV09TShudWxsKSxbbSxnXT1NKG51bGwpLHM9bSxZMT1LMT8/cz8/czAoXyxRKSxWMT0kNShfLFkxKSxOMT10MChfLFkxKSxIMT1lMihZMSksTDE9aTAoWTEpLGo9TDE/TDEud2lkdGgvTDEuaGVpZ2h0OjEsbj1iMChZMSksZD0hIVomJiFuLFoxPWQ/Wi5mcmFtZS53aWR0aC9aLnNjcmVlbi53aWR0aDoxLEQxPU4xKloxLHc9ZD9aLmZyYW1lLndpZHRoL1ouZnJhbWUuaGVpZ2h0OmoscD1kP2Ake1ouZnJhbWUud2lkdGh9IC8gJHtaLmZyYW1lLmhlaWdodH1gOkgxLFExPUkobnVsbCksejE9SShbXSk7eSgoKT0+e2xldCBBPSExLFc9bnVsbCxyPW51bGw7ejEuY3VycmVudD1bXTtsZXQgaD0oKT0+e2lmKEF8fFcpcmV0dXJuO1c9c2V0VGltZW91dCgoKT0+e1c9bnVsbCxHMSgpfSwxMDAwKX0sRzE9KCk9PntsZXQgQzE9bmV3IFdlYlNvY2tldCgkLndzVXJsKTtDMS5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIscj1DMSxRMS5jdXJyZW50PUMxLEMxLm9ub3Blbj0oKT0+e3oxLmN1cnJlbnQ9ZzMoQzEsejEuY3VycmVudCl9LEMxLm9ubWVzc2FnZT0ocjEpPT57aWYoIShyMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgRjA9bmV3IFVpbnQ4QXJyYXkocjEuZGF0YSk7aWYoRjAubGVuZ3RoPDF8fEYwWzBdIT09MTMwKXJldHVybjt0cnl7bGV0IGUxPUpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKEYwLnN1YmFycmF5KDEpKSk7aWYoZTEud2lkdGg8PTB8fGUxLmhlaWdodDw9MClyZXR1cm47ZygoRDApPT5EMCYmRDAud2lkdGg9PT1lMS53aWR0aCYmRDAuaGVpZ2h0PT09ZTEuaGVpZ2h0JiZEMC5vcmllbnRhdGlvbj09PWUxLm9yaWVudGF0aW9uP0QwOmUxKX1jYXRjaHt9fSxDMS5vbmNsb3NlPSgpPT57aWYoUTEuY3VycmVudD09PUMxKVExLmN1cnJlbnQ9bnVsbDtoKCl9LEMxLm9uZXJyb3I9KCk9PntDMS5jbG9zZSgpfX07cmV0dXJuIEcxKCksKCk9PntpZihBPSEwLFcpY2xlYXJUaW1lb3V0KFcpO2lmKFExLmN1cnJlbnQ9PT1yKVExLmN1cnJlbnQ9bnVsbDtyPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgeD1EKChBLFcpPT57ejEuY3VycmVudD1xNChRMS5jdXJyZW50LHoxLmN1cnJlbnQsQSxXKX0sW10pLGE9RCgoQSk9PngoMyxBKSxbeF0pLHExPUQoKEEpPT54KDUsQSksW3hdKSxBMT1EKChBKT0+eCg0LHtidXR0b246QX0pLFt4XSksSzA9RCgoe3BoYXNlOkEsYnV0dG9uOld9KT0+e2lmKFcudXNhZ2VQYWdlPT1udWxsfHxXLnVzYWdlPT1udWxsKXJldHVybjt4KDQse2J1dHRvbjpXLm5hbWUscGFnZTpXLnVzYWdlUGFnZSx1c2FnZTpXLnVzYWdlLHBoYXNlOkF9KX0sW3hdKSxwMT1EKChBKT0+eCgxMCx7ZGVsdGE6QX0pLFt4XSksRTE9RCgoQSk9PngoMTEsQSksW3hdKSxnMT1EKChBKT0+e00xKChXKT0+VyYmVy53aWR0aD09PUEud2lkdGgmJlcuaGVpZ2h0PT09QS5oZWlnaHQmJlcub3JpZW50YXRpb249PT1BLm9yaWVudGF0aW9uP1c6QSl9LFtdKSxZMD1EKChBKT0+e3goNyx7b3JpZW50YXRpb246QX0pfSxbeF0pLHEwPVkxLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiLF8xPV8hPT0id2F0Y2giJiZfIT09InZpc2lvbiIsYzE9RCgoQSk9PntpZighXzEpcmV0dXJuO2xldCBXPShBPT09ImxlZnQiP3oyOm81KVtxMF07WTAoVyl9LFtfMSxxMCxZMF0pO3koKCk9PntNMShudWxsKSxnKG51bGwpfSxbJC5zdHJlYW1VcmxdKSx5KCgpPT57bGV0IEE9cztpZighQSlyZXR1cm47TTEoKFcpPT5XJiZXLndpZHRoPT09QS53aWR0aCYmVy5oZWlnaHQ9PT1BLmhlaWdodCYmVy5vcmllbnRhdGlvbj09PUEub3JpZW50YXRpb24/VzpudWxsKX0sW3Mscz8ud2lkdGgscz8uaGVpZ2h0LHM/Lm9yaWVudGF0aW9uXSk7bGV0IHowPUQoKEEsVyk9Pnt4KDYse3R5cGU6QSx1c2FnZTpXfSl9LFt4XSksW3YxLG8xXT1NKG51bGwpLFtHMCxJMV09TSgoKT0+e2lmKEg/LnBhbmVzKXJldHVybiBrPT09InRvb2xzIjtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtsZXQgQT1OdW1iZXIod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiKSksVz1OdW1iZXIuaXNGaW5pdGUoQSkmJkE+MD9BOngzO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49Vys0ODB9KSx7d2lkdGg6YjEsb25Qb2ludGVyRG93bjpzMX09dzUoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIseDMsMjQwLDcyMCkse3dpZHRoOlYwLG9uUG9pbnRlckRvd246aTF9PXc1KCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLEs0LDQyMCwxNDAwKSxbQjAsdzBdPU0oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFtXMCxhMV09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO3koKCk9PntsZXQgQT0oKT0+e3cwKHdpbmRvdy5pbm5lcldpZHRoKSxhMSh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsQSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEEpfSxbXSkseSgoKT0+e2xldCBBPWgwKCQuYXBwU3RhdGVFbmRwb2ludD8/UjEoImFwcHN0YXRlIikpLFc9bnVsbDtyZXR1cm4gQS5vbm1lc3NhZ2U9KHIpPT57dHJ5e2xldCBoPUpTT04ucGFyc2Uoci5kYXRhKTtpZihXKWNsZWFyVGltZW91dChXKTtsZXQgRzE9aD8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtXPXNldFRpbWVvdXQoKCk9Pm8xKGgpLEcxKX1jYXRjaHt9fSwoKT0+e2lmKFcpY2xlYXJUaW1lb3V0KFcpO0EuY2xvc2UoKX19LFskLmFwcFN0YXRlRW5kcG9pbnRdKTtsZXQgaDE9RChhc3luYygpPT57ejAoImRvd24iLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoVyk9PnNldFRpbWVvdXQoVywzMCkpLHowKCJ1cCIsMjEpfSxbejBdKSx4MT1JKG51bGwpLFtmMSxuMV09TSgwKSxbTjAsUDBdPU0oMCk7eSgoKT0+e2xldCBBPXgxLmN1cnJlbnQ7aWYoIUF8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBXPW5ldyBSZXNpemVPYnNlcnZlcigocik9PntsZXQgaD1yWzBdPy5jb250ZW50UmVjdDtuMShoPy53aWR0aD8/MCksUDAoaD8uaGVpZ2h0Pz8wKX0pO3JldHVybiBXLm9ic2VydmUoQSksKCk9PlcuZGlzY29ubmVjdCgpfSxbXSk7bGV0W3QxLEoxXT1NKCEwKSxQPUkoITApO1AuY3VycmVudD10MTtsZXQgdT1JKG5ldyBTZXQpO3koKCk9PntsZXQgQT0oVyk9PntsZXQgcj0hIXgxLmN1cnJlbnQ/LmNvbnRhaW5zKFcudGFyZ2V0KTtKMShyKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixBLCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLEEsITApfSxbXSkseSgoKT0+e2lmKHQxKXJldHVybjtsZXQgQT11LmN1cnJlbnQ7aWYoQS5zaXplPT09MClyZXR1cm47Zm9yKGxldCBXIG9mIEEpeCg2LHt0eXBlOiJ1cCIsdXNhZ2U6V30pO0EuY2xlYXIoKX0sW3QxLHhdKSx5KCgpPT57bGV0IEE9KGgsRzEpPT57aWYoIVAuY3VycmVudClyZXR1cm47aWYoaC5jb2RlPT09IktleUgiJiZoLm1ldGFLZXkmJmguc2hpZnRLZXkpe2lmKGgucHJldmVudERlZmF1bHQoKSxHMT09PSJkb3duIiYmIWgucmVwZWF0KXgoNCx7YnV0dG9uOiJob21lIn0pO3JldHVybn1pZigoaC5jb2RlPT09IkFycm93TGVmdCJ8fGguY29kZT09PSJBcnJvd1JpZ2h0IikmJmgubWV0YUtleSYmIWguc2hpZnRLZXkmJiFoLmFsdEtleSYmIWguY3RybEtleSl7aWYoaC5wcmV2ZW50RGVmYXVsdCgpLEcxPT09ImRvd24iJiYhaC5yZXBlYXQpYzEoaC5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihoLmNvZGU9PT0iS2V5QSImJmgubWV0YUtleSYmaC5zaGlmdEtleSl7aWYoaC5wcmV2ZW50RGVmYXVsdCgpLEcxPT09ImRvd24iJiYhaC5yZXBlYXQpUDEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlYCkudGhlbigocjEpPT57bGV0IEYwPXIxLnN0ZG91dC50cmltKCk9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayI7cmV0dXJuIFAxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZSAke0YwfWApfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59aWYoaC5jb2RlPT09IktleUsiJiZoLm1ldGFLZXkmJiFoLnNoaWZ0S2V5JiYhaC5hbHRLZXkmJiFoLmN0cmxLZXkpe2lmKGgucHJldmVudERlZmF1bHQoKSxHMT09PSJkb3duIiYmIWgucmVwZWF0KXgoMTIse30pO3JldHVybn1sZXQgQzE9SjQoaC5jb2RlKTtpZihDMT09bnVsbClyZXR1cm47aWYoaC5wcmV2ZW50RGVmYXVsdCgpLEcxPT09ImRvd24iKXUuY3VycmVudC5hZGQoQzEpO2Vsc2UgdS5jdXJyZW50LmRlbGV0ZShDMSk7eCg2LHt0eXBlOkcxLHVzYWdlOkMxfSl9LFc9KGgpPT5BKGgsImRvd24iKSxyPShoKT0+QShoLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixyKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixXKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHIpfX0sW3gsJC5kZXZpY2UsYzFdKTtsZXQgdD1zNigpLEYxPWk2KCQuZGV2aWNlKSxCMT1wNih7ZXhlYzpQMSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6RixvblVwbG9hZFN0YXJ0OnQuYWRkLG9uVXBsb2FkUHJvZ3Jlc3M6dC5zZXRQcm9ncmVzcyxvblVwbG9hZEVuZDooQSxXLHIpPT50LnVwZGF0ZShBLHtzdGF0dXM6Vz8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOnJ9KSxvblVuc3VwcG9ydGVkOihBKT0+e2xldCBXPXQuYWRkKEEubmFtZSwibWVkaWEiKTt0LnVwZGF0ZShXLHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHtBLnR5cGV8fHEyKEEpfWB9KX0sb25Ib3N0UGF0aERyb3A6RjEuZGlzbWlzc30pLG89YTYoe2RlZmF1bHRXaWR0aDpEMSx2aWV3cG9ydFdpZHRoOkIwLHZpZXdwb3J0SGVpZ2h0OlcwLGFzcGVjdFJhdGlvOncsaW5pdGlhbEZpdDpIPy5maXQ9PT0hMCxvblN0YXJ0OigpPT5KMSghMSl9KSx5MT0xMixtMT0yNCxkMT1mMT4wP01hdGgubWluKGYxLG8ud2lkdGgpOm8ud2lkdGgsWjA9KEEpPT57aWYoQTw9MClyZXR1cm4gMDtsZXQgVz1CMC15MS1BLGg9QjAvMitkMS8yLShXLW0xKTtpZihoPD0wKXJldHVybiAwO2xldCBHMT0yKmg7cmV0dXJuIEcxPD1BK20xP0cxOjB9LFQ9WjAoRz9WMDpHMD9iMTowKSxPPVowKEI/VjowKTtyZXR1cm4gSyhVOSx7ZW5kcG9pbnQ6WT8kPy5heEVuZHBvaW50OnZvaWQgMCxjaGlsZHJlbjpLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcHktNiBnYXAtMyBmb250LXN5c3RlbSBib3gtYm9yZGVyIixzdHlsZTp7cGFkZGluZ0xlZnQ6MjQrTyxwYWRkaW5nUmlnaHQ6MjQrVCx0cmFuc2l0aW9uOm8uaXNSZXNpemluZ3x8by5pc0luZXJ0aWE/Im5vbmUiOkk5fSxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6by53aWR0aCx0cmFuc2l0aW9uOm8uaXNSZXNpemluZ3x8by5pc0luZXJ0aWE/SDM6RjN9LGNoaWxkcmVuOltLKGwxLHtleGVjOlAxLG9uUm90YXRlOlkwLG9yaWVudGF0aW9uOlkxLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpRLGRldmljZVJ1bnRpbWU6SixzdHJlYW1pbmc6RiwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBzdGF0dXMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGZsZXhXcmFwOiJub3dyYXAiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpbSyhsMS5UaXRsZSx7b25DbGljazooKT0+VSgoQSk9PiFBKSwiYXJpYS1sYWJlbCI6IlRvZ2dsZSBzaW11bGF0b3JzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOkIsdGl0bGU6IlNpbXVsYXRvcnMiLGhpZGVTdWJ0aXRsZTohMCxoaWRlQ2hldnJvbjohMCxzdHlsZTp7bWF4V2lkdGg6Im1pbigyMzBweCwgY2FsYygxMDB2dyAtIDE3MHB4KSkifX0pLEsoWDYse3N0cmVhbWluZzpGfSldfSksSygiZGl2Iix7cmVmOngxLGNsYXNzTmFtZToicmVsYXRpdmUgbWF4LWgtZnVsbCIsc3R5bGU6e3dpZHRoOm8ud2lkdGgsYXNwZWN0UmF0aW86cCx0cmFuc2l0aW9uOm8uaXNSZXNpemluZ3x8by5pc0luZXJ0aWE/SDM6RjMsd2lsbENoYW5nZTpvLmlzUmVzaXppbmd8fG8uaXNJbmVydGlhPyJ3aWR0aCI6dm9pZCAwfSwuLi5CMS5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOlsoKCk9PntsZXQgQT1LKHQyLHt1cmw6JC51cmwsd3NVcmw6JC53c1VybCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixwb2ludGVyRXZlbnRzOm8uaXNSZXNpemluZ3x8by5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOmQ/MDpWMSxjb3JuZXJTaGFwZTpkP3ZvaWQgMDoic3VwZXJlbGxpcHNlKDEuMykiLC4uLmQ/e306e2JveFNoYWRvdzoiaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSJ9fSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6QyxvblN0cmVhbVRvdWNoOmEsb25TdHJlYW1NdWx0aVRvdWNoOnExLG9uU3RyZWFtQnV0dG9uOkExLG9uU3RyZWFtRGlnaXRhbENyb3duOnAxLG9uU3RyZWFtU2Nyb2xsOkUxLGNvZGVjOiQxPyJhdmNjIjoibWpwZWciLG9uQXZjY0Vycm9yOigpPT52KCJlcnJvciIpLHN1YnNjcmliZUZyYW1lOiQxP3ZvaWQgMDpVMS5zdWJzY3JpYmVGcmFtZSxzdHJlYW1GcmFtZTokMT92b2lkIDA6VTEuZnJhbWUsc3RyZWFtQ29uZmlnOlkxLGVuYWJsZURpZ2l0YWxDcm93bjpfPT09IndhdGNoIixvblNjcmVlbkNvbmZpZ0NoYW5nZTpnMX0pLFc9SyhlLHtjaGlsZHJlbjpbQSxZJiZLKE45LHt9KV19KTtpZighZClyZXR1cm4gVztyZXR1cm4gSyhDNSx7Y2hyb21lOlosaW50ZXJhY3RpdmU6ITAsb25CdXR0b246SzAsb25Dcm93bldoZWVsOihyLGgpPT57bGV0IEcxPUMyKHIsaCxOMHx8MSk7aWYoRzEhPW51bGwpcDEoRzEpfSxzY3JlZW46V30pfSkoKSxCMS5pc0RyYWdPdmVyJiZLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpkP3ZvaWQgMDpWMX0sY2hpbGRyZW46W0soRTIse3NpemU6MzIsc3Ryb2tlV2lkdGg6MS41fSksSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSksSyhzOSx7c2ltdWxhdG9yUmVzaXplOm8sZGV2aWNlVHlwZTpfLHN0cmVhbUNvbmZpZzpZMSxjb250YWluZXJXaWR0aDpmMXx8by53aWR0aCxjb250YWluZXJIZWlnaHQ6TjB8fCh3PjA/by53aWR0aC93OjApfSksSyhaNix7d2lkdGg6ZjF8fG8ud2lkdGgsaGVpZ2h0Ok4wfHwodz4wP28ud2lkdGgvdzowKSx2aXNpYmxlOm8uaXNSZXNpemluZ3x8by5pc0luZXJ0aWF9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBtYXgtdy1mdWxsIixjaGlsZHJlbjpbSyhsMSx7ZXhlYzpQMSxvblJvdGF0ZTpZMCxvcmllbnRhdGlvbjpZMS5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6USxkZXZpY2VSdW50aW1lOkosc3RyZWFtaW5nOkYsImFyaWEtbGFiZWwiOiJTaW11bGF0b3IgYWN0aW9ucyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzoiNnB4IDhweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpLKGwxLkFjdGlvbnMse2NoaWxkcmVuOlt2MT8uaXNSZWFjdE5hdGl2ZSYmSyhsMS5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKFIpIixvbkNsaWNrOigpPT52b2lkIGgxKCksY2hpbGRyZW46SyhqMCx7fSl9KSxLKGwxLkhvbWVCdXR0b24se3RpdGxlOiJIb21lIn0pLEsobDEuU2NyZWVuc2hvdEJ1dHRvbix7dGl0bGU6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KEEpPT57QS5wcmV2ZW50RGVmYXVsdCgpLEYxLmNhcHR1cmUoKX19KSxLKGwxLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSl9KSxLKGwxLHtleGVjOlAxLG9uUm90YXRlOlkwLG9yaWVudGF0aW9uOlkxLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpRLGRldmljZVJ1bnRpbWU6SixzdHJlYW1pbmc6RiwiYXJpYS1sYWJlbCI6IkFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsc3R5bGU6e3dpZHRoOiJhdXRvIixtaW5XaWR0aDowLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MjJ9LGNoaWxkcmVuOksoTDkse292ZXJsYXlFbmFibGVkOlksc3RyZWFtaW5nOkYsb25Ub2dnbGVPdmVybGF5OigpPT5xKChBKT0+IUEpfSl9KV19KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6YGZpeGVkIHRvcC0zIHJpZ2h0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgYmctcGFuZWwtYmcgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGJhY2tkcm9wLWJsdXItWzEycHhdIFstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdIHotNDAgJHtHMHx8Rz8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltLKCJidXR0b24iLHtvbkNsaWNrOigpPT57TighMSksSTEoKEEpPT4hQSl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOkcwLHRpdGxlOiJUb29scyIsY2hpbGRyZW46SyhEMix7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxLKCJidXR0b24iLHtvbkNsaWNrOigpPT57STEoITEpLE4oKEEpPT4hQSl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gV2ViS2l0IERldlRvb2xzIiwiYXJpYS1wcmVzc2VkIjpHLHRpdGxlOiJXZWJLaXQgRGV2VG9vbHMiLGNoaWxkcmVuOksoVzIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSldfSksSyh2Nix7b3BlbjpHMCxvbkNsb3NlOigpPT5JMSghMSksdWRpZDokLmRldmljZSxkZXZpY2VSdW50aW1lOkosY3VycmVudEFwcDp2MSxldmVudExvZ0V2ZW50c0VuZHBvaW50OiQuZXZlbnRMb2dFdmVudHNFbmRwb2ludCxheE92ZXJsYXlFbmFibGVkOlksb25Ub2dnbGVBeE92ZXJsYXk6KCk9PnEoKEEpPT4hQSksY29kZWNQcmVmZXJlbmNlOmYsb25Db2RlY1ByZWZlcmVuY2VDaGFuZ2U6bCxhY3RpdmVDb2RlYzokMT8iaDI2NCI6Im1qcGVnIixhdmNjU3VwcG9ydGVkOkUuc3VwcG9ydGVkLHdpZHRoOmIxfSksSyhGNSx7cGFuZWxXaWR0aDpiMSx2aXNpYmxlOkcwLG9uUG9pbnRlckRvd246czEsYXJpYUxhYmVsOiJSZXNpemUgdG9vbHMgcGFuZWwifSksSyhtNix7b3BlbjpHLG9uQ2xvc2U6KCk9Pk4oITEpLHVkaWQ6JC5kZXZpY2UsdGFyZ2V0czpTLnRhcmdldHMsc2VsZWN0ZWRUYXJnZXRJZDp6LG9uU2VsZWN0VGFyZ2V0OkwsbG9hZGluZzpTLmxvYWRpbmcsZXJyb3I6Uy5lcnJvcixvblJlZnJlc2g6KCk9PnZvaWQgUy5yZWZyZXNoKCksd2lkdGg6VjB9KSxLKEY1LHtwYW5lbFdpZHRoOlYwLHZpc2libGU6RyxvblBvaW50ZXJEb3duOmkxLGFyaWFMYWJlbDoiUmVzaXplIFdlYktpdCBEZXZUb29scyBwYW5lbCJ9KV19KX0pfVA4KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihLKHNRLHt9KSk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==","base64").toString("utf-8");return iQ}function ZY(){return new Promise(($)=>{h$("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 V of G){if(V.isAvailable===!1)continue;Y.push({...V,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}function YY(){try{let $=Number(P0("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(P0("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=P0("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 XY(){try{let $=P0("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(`
|
|
104
|
+
`)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let V=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(V))continue;let W=V*1024,z=G[1].toUpperCase();Q[z]=(Q[z]??0)+W,Z+=W}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function GY(){let{totalBytes:$,availableBytes:Q}=YY(),Z=XY(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,X=Y>=268435456?"measured":"estimated",G=X==="measured"?Y:JY,V=G>0?Math.max(0,Math.floor(Q/G)):0;return{totalBytes:$,availableBytes:Q,runningSimulators:J,perSimAvgBytes:G,perSimSource:X,estimatedAdditional:V}}function zY($,Q){let Z=Buffer.from($),J=Buffer.from(Q);if(Z.length!==J.length)return!1;return w3(Z,J)}function KY($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function WY($){let Q=($?.basePath??"/.sim").replace(/\/+$/,""),Z=c3(Q),J=m3(Q),Y=$?.proxyHelpers??!1,X=$?.inspectWebKitBridge??t3,G=$?.execToken??x3(32).toString("base64url"),V=async(R)=>{let H=R??{};if(typeof H.device!=="string"||!/^[0-9A-Za-z-]+$/.test(H.device))throw Error("missing or invalid device udid");if(H.option===void 0)return{status:await m8(H.device)};if(!U$[H.option])throw Error(`unknown option: ${H.option}`);let T=typeof H.value==="string"?u8(H.option,H.value):null;if(T===null)throw Error(`invalid value for ${H.option}: ${H.value}`);await R0(H.device,H.option,T);try{j$({device:H.device,source:"ui",kind:"ui-setting",action:H.option,status:"ok",summary:`UI ${H.option} ${T}`,details:{option:H.option,value:T}})}catch{}return{ok:!0}},W=async(R,H,T)=>{let O=R.url??"",q=O.indexOf("?"),C=q===-1?O:O.slice(0,q),D=Y4(O),j=D??$?.device??null,F=Q==="/"?"/devtools-frontend":`${Q}/devtools-frontend`,E=X4(O,Z);if(E){let B=E.device??j;if(i3(R,H,B,E.upstreamPath))return;H.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),H.end("No serve-sim device");return}if(C===F||C.startsWith(`${F}/`)){let B=C===F?"inspector.html":C.slice(F.length+1);if(B.split("/").some((L)=>L==="..")){H.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),H.end("Invalid asset path");return}try{let L=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${k3}/${B}${q===-1?"":O.slice(q)}`),M={"Cache-Control":"public, max-age=604800"},U=L.headers.get("content-type");if(U)M["Content-Type"]=U;H.writeHead(L.status,M),H.end(Buffer.from(await L.arrayBuffer()))}catch(L){H.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),H.end(L instanceof Error?L.message:"Failed to load DevTools frontend")}return}if(C===Q||C===Q+"/"){let B=await D$(),L=v$(B,j),M=QY();if(!L){let U=JSON.stringify({basePath:Q,execToken:G,...$?.initialState?{initialState:$.initialState}:{}});M=M.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${U}</script>`)}if(L){let U=C0(L,q0(R),Q,L8(R),Y),A=`<script>window.__SIM_PREVIEW__=${JSON.stringify(U8(U,Q,oQ(),G,$?.codec,Y,$?.initialState))}</script>`;M=M.replace("<!--__SIM_PREVIEW_CONFIG__-->",A)}H.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),H.end(M);return}if(C===Q+"/grid/api/memory"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify(GY()));return}if(C===Q+"/grid/api/devicekit-chrome"){Y9(new URL(O||"/","http://serve-sim.local"),H);return}if(C===Q+"/grid/api/device-placeholder-asset"){X9(new URL(O||"/","http://serve-sim.local"),H);return}if(C===Q+"/grid/api"){let B=await D$(),L=new Map(B.map((b)=>[b.device,b])),M=await ZY(),U=g3(),_=(b)=>{if(/iphone/i.test(b))return 0;if(/ipad/i.test(b))return 1;if(/watch/i.test(b))return 2;if(/(apple\s*tv|^tv\b)/i.test(b))return 3;if(/vision|reality/i.test(b))return 4;return 5},A=(b)=>{if(L.has(b.udid))return 0;if(j&&b.udid===j)return 1;if(b.state==="Booted")return 2;if(b.udid===U)return 3;return 4},P=(b)=>{let k=b.match(/-(\d+)-(\d+)/),i=k?Number(k[1]):0,H$=k?Number(k[2]):0;return-(i*1000+H$)};M.sort((b,k)=>A(b)-A(k)||_(b.name)-_(k.name)||b.name.localeCompare(k.name)||P(b.runtime)-P(k.runtime));let I=M.length,{limit:w,offset:S}=M4(O),u=(w==null?M:M.slice(S,S+w)).map((b)=>{let k=L.get(b.udid),i=k?C0(k,q0(R),Q,L8(R),Y):null;return{device:b.udid,name:b.name,runtime:b.runtime,state:b.state,chrome:Z9(b),placeholderAsset:J9(b),helper:i?{port:i.port,url:i.url,streamUrl:i.streamUrl,wsUrl:i.wsUrl}:null}});H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({devices:u,total:I,offset:w==null?0:S,limit:w??I}));return}if(C===Q+"/grid/api/shutdown"&&R.method==="POST"){let B="";R.on("data",(L)=>{B+=typeof L==="string"?L:L.toString()}),R.on("end",()=>{let L="";try{L=JSON.parse(B).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(L)){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}UQ(L),D0={at:0,booted:null},h$("xcrun",["simctl","shutdown",L],{timeout:30000},(M,U,_)=>{if(M){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:_?.toString().trim()||M.message}));return}H.writeHead(200,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!0}))})});return}if(C===Q+"/grid/api/start"&&R.method==="POST"){let B="";R.on("data",(L)=>{B+=typeof L==="string"?L:L.toString()}),R.on("end",()=>{let L="";try{L=JSON.parse(B).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(L)){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let M=R.socket.localPort??0;L4(L,M,Q).then((U)=>{if(H.writableEnded)return;if(U)H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!1,error:U}));else H.writeHead(200,{"Content-Type":"application/json"}),H.end(JSON.stringify({ok:!0}))})});return}if(C===Q+"/devtools"){let B=await D$();if(!v$(B,j)){H.writeHead(404,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:"No serve-sim device"}));return}try{let M=await X(),U=await M.listTargets(),_=Y?e3(R):"ws",A=Y?`${q0(R)??`127.0.0.1:${M.port}`}${J}`:`127.0.0.1:${M.port}/devtools`,P=U.map((I)=>({...I,webSocketDebuggerUrl:`${_}://${A}/page/${encodeURIComponent(I.id)}`,devtoolsFrontendUrl:$Y(F,_,A,I.id)}));H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({port:M.port,targets:P}))}catch(M){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:M instanceof Error?M.message:"Failed to start inspect-webkit"}))}return}if(C===Q+"/devtools/release"&&R.method==="POST"){let B="";R.on("data",(L)=>B+=L),R.on("end",async()=>{try{let L=B?JSON.parse(B):{};(await X()).releaseHighlight?.(L.targetId),H.writeHead(200,{"Content-Type":"application/json"}),H.end("{}")}catch(L){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:L instanceof Error?L.message:"Failed to release"}))}});return}if(C===Q+"/devtools/highlight"&&R.method==="POST"){let B="";R.on("data",(L)=>B+=L),R.on("end",async()=>{try{let{targetId:L,on:M}=JSON.parse(B||"{}");if(!L){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:"Missing targetId"}));return}let U=await X();if(!U.highlightTarget){H.writeHead(501,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await U.highlightTarget(L,!!M),H.writeHead(200,{"Content-Type":"application/json"}),H.end("{}")}catch(L){H.writeHead(500,{"Content-Type":"application/json"}),H.end(JSON.stringify({error:L instanceof Error?L.message:"Failed to highlight target"}))}});return}if(C===Q+"/api"){let B=await D$(),L=v$(B,j),M=`${j??"(any)"}|${B.length}|${L?`${L.device}@${L.port}`:"none"}`;if(M!==r9)r9=M,_0("GET /api selectedDevice=%s states=%d chose=%s",j??"(any)",B.length,L?`${L.device}@${L.port}`:"none");H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let U=L?C0(L,q0(R),Q,L8(R),Y):null;H.end(JSON.stringify(U?U8(U,Q,oQ(),G,$?.codec,Y,$?.initialState):null));return}if(C===Q+"/api/event-log"){H.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({events:MQ({device:D,sinceId:e9(O),limit:s9(O)})}));return}if(C===Q+"/api/event-log/events"){H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
|
|
105
105
|
|
|
106
|
-
`),H.write("data: "+JSON.stringify({events:
|
|
106
|
+
`),H.write("data: "+JSON.stringify({events:MQ({device:D,sinceId:e9(O),limit:s9(O)})})+`
|
|
107
107
|
|
|
108
|
-
`);let B=
|
|
108
|
+
`);let B=k7((M)=>{if(D&&M.device!==D)return;if(H.writableEnded)return;H.write("data: "+JSON.stringify({event:M})+`
|
|
109
109
|
|
|
110
110
|
`)}),L=setInterval(()=>{if(!H.writableEnded)H.write(`:
|
|
111
111
|
|
|
112
|
-
`)},15000);R.on("close",()=>{clearInterval(L),B()});return}if(C===Q+"/api/events"){let B=async()=>{let y=await D$(),u=v$(y,j),b=u?
|
|
112
|
+
`)},15000);R.on("close",()=>{clearInterval(L),B()});return}if(C===Q+"/api/events"){let B=async()=>{let y=await D$(),u=v$(y,j),b=u?C0(u,q0(R),Q,L8(R),Y):null;return JSON.stringify(b?U8(b,Q,oQ(),G,$?.codec,Y,$?.initialState):null)};H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
|
|
113
113
|
|
|
114
114
|
`);let L=await B();H.write("data: "+L+`
|
|
115
115
|
|
|
116
116
|
`);let M=!1,U=async()=>{if(M||H.writableEnded)return;let y=await B();if(y===L)return;L=y,H.write("data: "+y+`
|
|
117
117
|
|
|
118
|
-
`)},_=null,A=()=>{if(_)return;_=setTimeout(()=>{_=null,U()},150)},P=null,I=null,w=()=>{if(M||H.writableEnded||P||I)return;I=setTimeout(()=>{if(I=null,M||H.writableEnded||P)return;try{P=
|
|
118
|
+
`)},_=null,A=()=>{if(_)return;_=setTimeout(()=>{_=null,U()},150)},P=null,I=null,w=()=>{if(M||H.writableEnded||P||I)return;I=setTimeout(()=>{if(I=null,M||H.writableEnded||P)return;try{P=q3(aQ,A),P.on("error",()=>{P?.close(),P=null,w()}),U()}catch{w()}},250)};w();let S=setInterval(()=>{if(M||H.writableEnded)return;H.write(`:
|
|
119
119
|
|
|
120
|
-
`),w()},15000);R.on("close",()=>{if(M=!0,_)clearTimeout(_);if(I)clearTimeout(I);clearInterval(
|
|
120
|
+
`),w()},15000);R.on("close",()=>{if(M=!0,_)clearTimeout(_);if(I)clearTimeout(I);clearInterval(S),P?.close()});return}if(C===Q+"/ax"){let B=await D$(),L=v$(B,j);if(!L){H.writeHead(404),H.end("No serve-sim device");return}H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
|
|
121
121
|
|
|
122
|
-
`),
|
|
122
|
+
`),t9.prune(B.map((_)=>_.device));let U=t9.get(L.device).addClient(H);R.on("close",U);return}if((C===Q+"/exec"||C===Q+"/exec/")&&R.method==="POST"){if(!KY(R.headers["content-type"])){H.writeHead(415,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let B=R.headers.origin;if(B)try{if(new URL(B).host!==R.headers.host){H.writeHead(403,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{H.writeHead(403,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let L=R.headers.authorization??"",M=/^Bearer\s+(.+)$/i.exec(L);if(!M||!zY(M[1].trim(),G)){H.writeHead(401,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let U="",_=!1;R.on("data",(A)=>{if(U+=typeof A==="string"?A:A.toString(),U.length>4194304)_=!0,H.writeHead(413,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),R.destroy()}),R.on("end",()=>{if(_)return;let A="";try{A=JSON.parse(U).command??""}catch{}if(!A){H.writeHead(400,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}D3(A,{maxBuffer:16777216},(P,I,w)=>{let S=P?P.code??1:0;$4(A,{exitCode:S}),H.writeHead(200,{"Content-Type":"application/json"}),H.end(JSON.stringify({stdout:I.toString(),stderr:w.toString(),exitCode:S}))})});return}if(C===Q+"/appstate"){let B=await D$(),L=v$(B,j);if(!L){H.writeHead(404),H.end("No serve-sim device");return}let M=L.device;H.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),H.write(`:
|
|
123
123
|
|
|
124
|
-
`);let U="";try{let w=JSON.parse(await
|
|
124
|
+
`);let U="";try{let w=JSON.parse(await Q8(M));if(!w.bundleId||!Q4(w.bundleId))return;if(H.writableEnded)return;U=w.bundleId;let S=await Z4(M,w.bundleId);if(H.writableEnded)return;H.write("data: "+JSON.stringify({bundleId:w.bundleId,pid:w.pid,isReactNative:S})+`
|
|
125
125
|
|
|
126
|
-
`)}catch{}let _=
|
|
126
|
+
`)}catch{}let _=A3("xcrun",["simctl","spawn",M,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),A=!1,P=async(w,S)=>{if(!Q4(w))return;if(w===U)return;U=w;let y=await Z4(M,w);if(!A)H.write("data: "+JSON.stringify({bundleId:w,pid:S,isReactNative:y})+`
|
|
127
127
|
|
|
128
|
-
`)},I="";_.stdout.on("data",(w)=>{I+=w.toString();let
|
|
129
|
-
`))!==-1){let y=I.slice(0,
|
|
128
|
+
`)},I="";_.stdout.on("data",(w)=>{I+=w.toString();let S;while((S=I.indexOf(`
|
|
129
|
+
`))!==-1){let y=I.slice(0,S).trim();if(I=I.slice(S+1),!y)continue;let u;try{u=JSON.parse(y).eventMessage??""}catch{continue}let b=V4(u);if(!b)continue;P(b.bundleId,b.pid)}if(I.length>S3)I=""}),_.on("error",()=>{A=!0;try{H.end()}catch{}}),_.on("close",()=>H.end()),R.on("close",()=>{A=!0,_.stdout?.destroy(),_.kill()});return}if(T)return T()};W.handleUpgrade=(R,H,T)=>{let O=R.url??"",q=Y4(O)??$?.device??null,C=X4(O,Z),D=l3(O,J);if(D){(async()=>{try{let F=await X();d3(R,H,T,`ws://127.0.0.1:${F.port}${D.upstreamPath}`)}catch(F){let E=F instanceof Error?F.message:"Failed to start inspect-webkit";H.end(`HTTP/1.1 502 Bad Gateway\r
|
|
130
130
|
Content-Type: text/plain; charset=utf-8\r
|
|
131
131
|
\r
|
|
132
|
-
${
|
|
132
|
+
${E}`)}})();return}if(!C){H.destroy();return}let j=C.device??q;if(C.upstreamPath==="/ws"){if(a3(R,H,T,j))return;H.end(`HTTP/1.1 404 Not Found\r
|
|
133
133
|
\r
|
|
134
134
|
`);return}H.end(`HTTP/1.1 400 Bad Request\r
|
|
135
135
|
\r
|
|
136
|
-
`)};let z=
|
|
137
|
-
`]={usage:40,shift:!1},$["\t"]={usage:43,shift:!1},$}var
|
|
138
|
-
`).map((J)=>parseInt(J,10)).filter((J)=>Number.isFinite(J)&&J!==Z)}catch{return[]}}function
|
|
139
|
-
Supported: ${
|
|
140
|
-
${X}`);if(S8(X,`DELETE FROM access WHERE service='${Q}' AND client='${J}' AND client_type=0;`),Y!=="delete")S8(X,`INSERT INTO access (service, client, client_type, auth_value, auth_reason, auth_version, flags) VALUES ('${Q}', '${J}', 0, ${Y}, 2, ${Z}, 0);`)}var
|
|
141
|
-
`)){let[V,W]=G.split("|");if(V)X[
|
|
142
|
-
${J}`)}try{o$("chflags",["nouchg",J])}catch{}let Y=
|
|
136
|
+
`)};let z=U9({path:`${Q}/exec-ws`,execToken:G,ssePrefixes:[`${Q}/api/events`,`${Q}/api/event-log/events`,`${Q}/appstate`,`${Q}/ax`],onUiRequest:V,onCommandResult:(R,H)=>$4(R,H)}),K=W.handleUpgrade;return W.handleUpgrade=(R,H,T)=>{if(z(R,H,T))return;K(R,H,T)},W}var aQ,r9,k3="854a02be78c7ffea104cb523636efa991bef5c5b",R8=9222,t9,S3=1048576,b$=null,y3,f3,b3,D0,nQ,p3="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",iQ=null,JY=1610612736;var N4=s(()=>{I7();s8();m7();HQ();Z8();v0();o8();R9();_9();l8();aQ=rQ(C3(),"serve-sim"),t9=P7();y3=new Set(["host.exp.Exponent","dev.expo.Exponent"]),f3=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],b3=/(WidgetRenderer|ExtensionHost|\.extension(\.|$)|Service|PlaceholderApp|InCallService|CallUI|InCallUI|com\.apple\.Preferences\.Cellular|com\.apple\.purplebuddy|com\.apple\.chrono|com\.apple\.shuttle|com\.apple\.usernotificationsui)/i;D0={at:0,booted:null};nQ={at:0,udid:null}});var b6=B6(f6(),1),{program:XX,createCommand:GX,createArgument:zX,createOption:KX,CommanderError:WX,InvalidArgumentError:y0,InvalidOptionArgumentError:VX,Command:v6,Argument:MX,Option:HX,Help:RX}=b6.default;v0();import{execFileSync as VY,execSync as J$,spawn as F4}from"child_process";import{existsSync as K$,mkdirSync as $6,openSync as Q6,closeSync as Z6,readSync as MY,readFileSync as m$,unlinkSync as g$,writeFileSync as J6}from"fs";import{createHash as HY}from"crypto";import{networkInterfaces as RY}from"os";import{join as M$,resolve as u$}from"path";function p5(){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},$[`
|
|
137
|
+
`]={usage:40,shift:!1},$["\t"]={usage:43,shift:!1},$}var d5=p5();class h0 extends Error{char;constructor($){super(`Unsupported character: ${JSON.stringify($)}`);this.char=$}}async function u6($,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 V=new TextEncoder().encode(JSON.stringify(G)),W=new Uint8Array(1+V.length);if(W[0]=6,W.set(V,1),X.send(W),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 g6($){let Q=[];for(let Z of $){if(Z==="\r")continue;let J=d5[Z];if(!J)throw new h0(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}g0();g0();import{execSync as $Z}from"child_process";function QZ($){try{let Q=$Z(`lsof -ti tcp:${$} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!Q)return[];let Z=process.pid;return Q.split(`
|
|
138
|
+
`).map((J)=>parseInt(J,10)).filter((J)=>Number.isFinite(J)&&J!==Z)}catch{return[]}}function p6($){let Q=QZ($);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{}I$(100)}c0();c0();import{execFileSync as o$}from"child_process";import{chmodSync as ZZ,existsSync as x$,mkdtempSync as JZ,rmSync as i6,writeFileSync as o6}from"fs";import{homedir as YZ,tmpdir as XZ}from"os";import{join as F$}from"path";var f8={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"},GZ={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 a6($){if($==="notifications")return{kind:"notifications",values:["critical"]};if($==="location")return{kind:"location",values:["always","inuse","never"]};let Q=f8[$];if(Q)return{kind:"tcc",tccService:Q,tccAuthVersion:$==="photos"?2:1,values:$==="photos"?["limited"]:void 0};return null}function k8(){return["notifications","location",...Object.keys(f8)]}var w8=/^[A-Za-z0-9][A-Za-z0-9.-]*$/;function zZ($){let Q,Z,J=[];for(let K=0;K<$.length;K++){let R=$[K];if(R===void 0)continue;if(R==="-d"||R==="--device"){if(Q=$[++K],!Q)return{error:"Missing value for -d/--device"}}else if(R==="--value"){if(Z=$[++K],Z===void 0)return{error:"Missing value for --value"}}else if(R.startsWith("--value="))Z=R.slice(8);else if(R.startsWith("-"))return{error:`Unknown flag: ${R}`};else J.push(R)}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 K=J[1];if(K&&!w8.test(K))return{error:`Invalid bundle id: ${K}`};return{verb:X,bundleId:K,device:Q}}let G=J[1];if(!G)return{error:`Missing permission name for "${X}"`};if(X==="reset"&&G==="all"){let K=J[2];if(!K)return{error:"Missing bundle id for `reset all`"};if(!w8.test(K))return{error:`Invalid bundle id: ${K}`};return{verb:X,permission:"all",bundleId:K,device:Q}}let V=GZ[G];if(V){if(G=V.permission,V.value&&!Z)Z=V.value}let W=a6(G);if(!W)return{error:`Unknown permission: ${J[1]}
|
|
139
|
+
Supported: ${k8().join(", ")}`};let z=J[2];if(!z)return{error:`Missing bundle id for "${X} ${G}"`};if(!w8.test(z))return{error:`Invalid bundle id: ${z}`};if(!Z&&J[3])Z=J[3];if(Z!==void 0){if(!W.values||!W.values.includes(Z)){let K=W.values?W.values.join(", "):"(none)";return{error:`Invalid --value "${Z}" for ${G}. Allowed: ${K}`}}}return{verb:X,permission:G,value:Z,bundleId:z,device:Q}}function b8($){return F$(YZ(),"Library/Developer/CoreSimulator/Devices",$,"data/Library")}function r6($){return F$(b8($),"TCC/TCC.db")}function KZ($){return F$(b8($),"BulletinBoard")}function WZ($){return F$(b8($),"Caches/locationd/clients.plist")}function VZ($){let Q=Date.now()+5000;for(;;)try{return $()}catch(Z){let J=String(Z?.stderr??Z?.message??Z);if(Date.now()<Q&&/database is locked|database is busy/i.test(J)){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,200);continue}throw Z}}function S8($,Q){return VZ(()=>o$("sqlite3",[$,Q],{encoding:"utf-8"}))}function MZ($,Q,Z,J,Y){let X=r6($);if(!x$(X))throw Error(`TCC.db not found for ${$}. Is the simulator booted?
|
|
140
|
+
${X}`);if(S8(X,`DELETE FROM access WHERE service='${Q}' AND client='${J}' AND client_type=0;`),Y!=="delete")S8(X,`INSERT INTO access (service, client, client_type, auth_value, auth_reason, auth_version, flags) VALUES ('${Q}', '${J}', 0, ${Y}, 2, ${Z}, 0);`)}var HZ=Object.fromEntries(Object.entries(f8).map(([$,Q])=>[Q,$]));function RZ($,Q){let Z=r6($);if(!x$(Z))return{};let J=Q?` WHERE client='${Q}'`:"",Y=S8(Z,`SELECT service, auth_value FROM access${J};`),X={};for(let G of Y.split(`
|
|
141
|
+
`)){let[V,W]=G.split("|");if(V)X[HZ[V]??V]=Number(W)}return X}function M0($){return o$("plutil",$,{encoding:"utf-8"})}function y8($,Q,Z={}){let J=[];for(let Y of Q)J.push("-c",Y);J.push($);try{return o$("/usr/libexec/PlistBuddy",J,{encoding:"utf-8",stdio:["ignore","pipe","pipe"]})}catch(Y){if(Z.ignoreErrors)return String(Y?.stdout??"");throw Error(String(Y?.stderr??Y?.stdout??Y?.message??Y).trim())}}function t6(){return JZ(F$(XZ(),"serve-sim-perm-"))}function LZ($,Q,Z,J){let Y="grant",X="location";if(Z==="reset")Y="reset";else if(Z==="revoke"||J==="never")Y="revoke";else if(J==="always")X="location-always";try{o$("xcrun",["simctl","privacy",$,Y,X,Q],{stdio:["ignore","ignore","pipe"]})}catch(G){throw Error(`simctl privacy ${Y} ${X} failed: `+String(G?.stderr??G?.message??G).trim())}}function UZ($,Q){if(!Q)return null;let Z=WZ($);if(!x$(Z))return null;let J;try{J=M0(["-convert","xml1","-o","-",Z])}catch{return null}let Y=J.match(new RegExp(`<key>i${Q.replace(/[.-]/g,"\\$&")}:</key>\\s*<dict>[\\s\\S]*?<key>Authorization</key>\\s*<integer>(\\d+)</integer>`));return Y?{Authorization:Number(Y[1])}:null}var _Z="YnBsaXN0MDDUAQIDBAUGTU5YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCDAxQUgfSVUkbnVsbN8QFQkKCwwNDg8QERITFBUWFxgZGhscHR4fHiEiIx4jJicfHygjIh8jIyMjI18QFHN1cHByZXNzRnJvbVNldHRpbmdzXxASc3VwcHJlc3NlZFNldHRpbmdzWmhpZGVXZWVBcHBZc2VjdGlvbklEW2Rpc3BsYXlOYW1lVGljb25fEBlkaXNwbGF5c0NyaXRpY2FsQnVsbGV0aW5zW3N1YnNlY3Rpb25zXxATc2VjdGlvbkluZm9TZXR0aW5nc1YkY2xhc3NfEA9zZWN0aW9uQ2F0ZWdvcnlfEBJzdWJzZWN0aW9uUHJpb3JpdHlXdmVyc2lvbl8QGm1hbmFnZWRTZWN0aW9uSW5mb1NldHRpbmdzV2FwcE5hbWVbc2VjdGlvblR5cGVfEBBmYWN0b3J5U2VjdGlvbklEXxAPZGF0YVByb3ZpZGVySURzXHN1YnNlY3Rpb25JRFdmaWx0ZXJzXxAYcGF0aFRvV2VlQXBwUGx1Z2luQnVuZGxlCBAACIACgAWAAAiAAIADgAeABoAAgAWAAIAAgACAAIAAXxAmY29tLkxlb05hdGFuLkxOUG9wdXBDb250cm9sbGVyRXhhbXBsZS3ZMjM0NTY3Ejg5Ojs7Ox8fPjtAXHB1c2hTZXR0aW5nc18QGXNob3dzSW5Ob3RpZmljYXRpb25DZW50ZXJfEBNhbGxvd3NOb3RpZmljYXRpb25zXxAWc2hvd3NPbkV4dGVybmFsRGV2aWNlc18QFWNvbnRlbnRQcmV2aWV3U2V0dGluZ15jYXJQbGF5U2V0dGluZ18QEXNob3dzSW5Mb2NrU2NyZWVuWWFsZXJ0VHlwZRA/CQkJgAQJEAHSQkNERVokY2xhc3NuYW1lWCRjbGFzc2VzXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzokZHXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzWE5TT2JqZWN0V0xOUG9wdXDSQkNKS11CQlNlY3Rpb25JbmZvokxHXUJCU2VjdGlvbkluZm9fEA9OU0tleWVkQXJjaGl2ZXLRT1BUcm9vdIABAAgAEQAaACMALQAyADcAQABGAHMAigCfAKoAtADAAMUA4QDtAQMBCgEcATEBOQFWAV4BagF9AY8BnAGkAb8BwAHCAcMBxQHHAckBygHMAc4B0AHSAdQB1gHYAdoB3AHeAeACCQIcAikCRQJbAnQCjAKbAq8CuQK7ArwCvQK+AsACwQLDAsgC0wLcAvQC9wMPAxgDIAMlAzMDNgNEA1YDWQNeAAAAAAAAAgEAAAAAAAAAUQAAAAAAAAAAAAAAAAAAA2A=";function s6($){return F$(KZ($),"VersionedSectionInfo.plist")}function NZ($,Q,Z,J){let Y=F$($,"section-info.plist");return o6(Y,Buffer.from(_Z,"base64")),y8(Y,[`Set :$objects:2 ${Q}`,`Set :$objects:3:allowsNotifications ${Z?"true":"false"}`,`Add :$objects:3:criticalAlertSetting integer ${J?2:0}`,`Set :$objects:5 ${Q}`,"Save"]),M0(["-convert","binary1",Y]),Y}function BZ($,Q,Z){let J=s6($);if(!x$(J)){if(Z==="reset")return;let X=Date.now()+5000;while(!x$(J)&&Date.now()<X)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);if(!x$(J))throw Error(`BulletinBoard plist not found for ${$}. The simulator may still `+`be booting — wait for it to finish and retry.
|
|
142
|
+
${J}`)}try{o$("chflags",["nouchg",J])}catch{}let Y=t6();try{if(y8(J,[`Delete :sectionInfo:${Q}`,"Save"],{ignoreErrors:!0}),Z!=="reset"){let X=NZ(Y,Q,Z!=="revoke",Z==="critical");y8(J,[`Import :sectionInfo:${Q} ${X}`,"Save"])}M0(["-convert","binary1",J])}finally{i6(Y,{recursive:!0,force:!0});try{ZZ(J,420),o$("chflags",["uchg",J])}catch{}}}function FZ($,Q){if(!Q)return null;let Z=s6($);if(!x$(Z))return null;let J;try{J=M0(["-extract","sectionInfo","xml1","-o","-",Z])}catch{return null}let Y=J.match(new RegExp(`<key>${Q.replace(/[.-]/g,"\\$&")}</key>\\s*<data>([\\s\\S]*?)</data>`));if(!Y?.[1])return null;let X=t6();try{let G=F$(X,"section-info.plist");o6(G,Buffer.from(Y[1].replace(/\s/g,""),"base64"));let V=M0(["-convert","xml1","-o","-",G]);return{allowsNotifications:/<key>allowsNotifications<\/key>\s*<true\/>/.test(V),critical:/<key>criticalAlertSetting<\/key>\s*<integer>2<\/integer>/.test(V)}}catch{return null}finally{i6(X,{recursive:!0,force:!0})}}function n6($,Q,Z,J,Y){let X=a6(Z);if(X.kind==="tcc"){let G=Q==="reset"?"delete":Q==="revoke"?0:J==="limited"?3:2;MZ($,X.tccService,X.tccAuthVersion,Y,G)}else if(X.kind==="notifications")BZ($,Y,Q==="reset"?"reset":Q==="revoke"?"revoke":J==="critical"?"critical":"grant");else LZ($,Y,Q,J)}async function e6($){let Q=$.includes("-q")||$.includes("--quiet"),Z=$.filter((G)=>G!=="-q"&&G!=="--quiet"),J=zZ(Z);if("error"in J)console.error(J.error),console.error(`
|
|
143
143
|
Usage:
|
|
144
144
|
serve-sim permissions grant <permission> <bundle-id> [--value <v>] [-d <udid|name>]
|
|
145
145
|
serve-sim permissions revoke <permission> <bundle-id> [-d <udid|name>]
|
|
146
146
|
serve-sim permissions reset <permission|all> <bundle-id> [-d <udid|name>]
|
|
147
147
|
serve-sim permissions list [bundle-id] [-d <udid|name>]
|
|
148
148
|
|
|
149
|
-
Permissions: ${
|
|
150
|
-
${K}`:"Preview server failed to start"),process.exit(1)}return Z.detach?{pid:z.pid}:{pid:z.pid,child:W}}async function
|
|
151
|
-
==> ${T} (${z}) <==`);console.log(` Already running on port ${K.port}`),console.log(` Stream: ${K.streamUrl}`),console.log(` WebSocket: ${K.wsUrl}`)}X.push(K);continue}G=await
|
|
149
|
+
Permissions: ${k8().join(", ")}`),process.exit(1);let Y=J.device?o(J.device):Q$();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:RZ(Y,J.bundleId),location:UZ(Y,J.bundleId),notifications:FZ(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 k8())n6(Y,"reset",G,void 0,X);else n6(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)}l8();o8();function F7($,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,`${V1($)}${X?` (${X.trim()})`:""}`].filter(Boolean).join(" ")}function V1($){if($.kind==="tap"){let Q=i0($.details,"current")??i0($.details,"start");return Q?`Tap at ${a8(Q)}`:"Tap"}if($.kind==="drag"){let Q=i0($.details,"start"),Z=i0($.details,"current");if(Q&&Z)return`Drag from ${a8(Q)} to ${a8(Z)}`;return"Drag"}if($.kind==="key"){let Q=M1($.details,"key")??$.action??"key",Z=$.action==="down"?"down":$.action==="up"?"up":$.action;return Z?`Key ${Z} ${B7(Q)}`:`Key ${B7(Q)}`}if($.kind==="rotate"){let Q=$.action?T7($.action):"";return Q?`Rotate ${Q}`:"Rotate"}return R1($.msg??$.summary)}function i0($,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 M1($,Q){let Z=$?.[Q];return typeof Z==="string"&&Z.length>0?Z:null}function a8($){return`${N7($.x)}, ${N7($.y)}`}function N7($){if(!Number.isFinite($))return"?";return(Math.round((H1($,0,1)+Number.EPSILON)*100)/100).toFixed(2)}function H1($,Q,Z){return Math.min(Z,Math.max(Q,$))}function R1($){return $.replace(/\b[a-z]+(?:_[a-z]+)+\b/g,T7)}function T7($){return $.replace(/[-_]+/g," ")}function B7($){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"}[$]??$}var j7=["devices","tools","devtools"];function O7($){let Q=$.split(",").map((J)=>J.trim().toLowerCase()).filter(Boolean);if(Q.length===1&&Q[0]==="none")return[];if(Q.length===0||Q.includes("none"))throw Error("Expected 'none' or a comma-separated list of: devices, tools, devtools.");let Z=Q.filter((J)=>!j7.includes(J));if(Z.length>0)throw Error(`Unknown pane${Z.length===1?"":"s"}: ${Z.join(", ")}. Expected: ${j7.join(", ")}.`);return[...new Set(Q)]}function E7($){let Q=$.trim().toLowerCase();if(Q==="light"||Q==="dark")return Q;throw Error("Expected simulator theme: light or dark.")}s8();var C$=u0(import.meta.url);function LY(){return"0.1.46"}function T4(){if(!K$(W$))$6(W$,{recursive:!0})}function r($){if($)return sQ(V0($));for(let Q of b0()){let Z=sQ(Q);if(Z)return Z}return null}var _8={at:0,booted:null};function UY(){let $=Date.now();if(_8.booted&&$-_8.at<1000)return _8.booted;try{let Q=J$("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 _8={at:$,booted:J},J}catch{return null}}function sQ($){try{if(!K$($))return V$("state file missing %s",$),null;let Q=JSON.parse(m$($,"utf-8"));try{process.kill(Q.pid,0)}catch{return V$("helper pid %d dead, removing stale state %s",Q.pid,$),g$($),null}let Z=UY();if(Z&&!Z.has(Q.device)){if(Q.pid===process.pid){V$("dropping own stale state for non-booted device %s",Q.device);try{g$($)}catch{}return null}V$("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{g$($)}catch{}return null}return V$("state ok pid=%d device=%s port=%d",Q.pid,Q.device,Q.port),Q}catch(Q){return V$("readStateFile threw for %s: %o",$,Q),null}}function x0(){let $=[];for(let Q of b0()){let Z=sQ(Q);if(Z)$.push(Z)}return $}function _Y($){T4(),J6(V0($.device),JSON.stringify($,null,2)),V$("wrote state pid=%d device=%s port=%d",$.pid,$.device,$.port)}function c$($){if($){V$("clearState device=%s",$);try{g$(V0($))}catch{}}else{V$("clearState (all)");for(let Q of b0())try{g$(Q)}catch{}}}function Y6(){try{let $=J$("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 B4($){return j4().get($)??null}function j4(){let $=new Map;try{let Q=J$("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 O4($){try{let Q=J$("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 eQ($){try{return process.kill($,0),!0}catch{return!1}}function E4($){try{process.kill($,"SIGTERM")}catch{return}let Q=Date.now()+500;while(Date.now()<Q)try{process.kill($,0),I$(25)}catch{return}try{process.kill($,"SIGKILL")}catch{}let Z=Date.now()+500;while(Date.now()<Z)try{process.kill($,0),I$(25)}catch{return}}function NY($){if(!O4($))try{J$(`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{J$("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function BY(){let $=RY();for(let Q of Object.values($))for(let Z of Q??[])if(Z.family==="IPv4"&&!Z.internal)return Z.address;return null}async function q4($){let Q=new Set(x0().map((Z)=>Z.port));for(let Z=$;Z<$+100;Z++){if(Q.has(Z))continue;if(await m6(Z))return Z}throw Error(`No available port found in range ${$}-${$+99}`)}async function FY($){NY($);try{VY("xcrun",s0($),{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(Q){if(!O4($))console.error(`Device ${$} failed to reach booted state: ${Q.stderr||Q.message}`),process.exit(1)}}function TY($){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 jY($,Q=150000){let Z=Date.now();while(Date.now()-Z<Q){let J=r($);if(J)return J;await new Promise((Y)=>setTimeout(Y,200))}return null}async function A4($,Q,Z){i8("startHelper udid=%s port=%d detach=%s",$,Q,Z.detach);let J="127.0.0.1";T4(),c$($),p6(Q);let Y=M$(W$,`server-${$}.log`),X=Q6(Y,"w"),{command:G,args:V}=TY([$,"--port",String(Q),"--host",J]),W=F4(G,V,{detached:Z.detach,stdio:["ignore",X,X]});if(Z6(X),Z.detach)W.unref();let z=await jY($);if(!z){if(W.pid)E4(W.pid);let K="";try{K=m$(Y,"utf-8").trim()}catch{}console.error(K?`Preview server failed:
|
|
150
|
+
${K}`:"Preview server failed to start"),process.exit(1)}return Z.detach?{pid:z.pid}:{pid:z.pid,child:W}}async function OY($,Q,Z){n8("follow devices=%o startPort=%d",$,Q);let J=$.length>0?$.map(o):(()=>{let z=Q$();if(z)return[z];let K=Y6();if(!K)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!Z)console.log(`No booted simulator — booting ${K.name}...`);return[K.udid]})(),Y=new Map,X=[],G=Q;for(let z of J){let K=r(z);if(K){if(!Z){let T=B4(z)??z;if(J.length>1)console.log(`
|
|
151
|
+
==> ${T} (${z}) <==`);console.log(` Already running on port ${K.port}`),console.log(` Stream: ${K.streamUrl}`),console.log(` WebSocket: ${K.wsUrl}`)}X.push(K);continue}G=await q4(G);let{child:R}=await A4(z,G,{detach:!1});if(R)Y.set(z,R);let H=r(z)??i$(z,G,"/","127.0.0.1");if(X.push(H),!Z){let T=B4(z)??z;if(J.length>1)console.log(`
|
|
152
152
|
==> ${T} (${z}) <==`);console.log(` Stream: ${H.streamUrl}`),console.log(` WebSocket: ${H.wsUrl}`),console.log(` Port: ${G}`)}G++}if(X.length===1){let z=X[0];console.log(JSON.stringify({url:z.url,streamUrl:z.streamUrl,wsUrl:z.wsUrl,port:z.port,device:z.device}))}else console.log(JSON.stringify({devices:X.map((z)=>({url:z.url,streamUrl:z.streamUrl,wsUrl:z.wsUrl,port:z.port,device:z.device}))}));if(Y.size===0)return;let V=!1,W=(z)=>{if(V)return;if(V=!0,!Z)console.log(`
|
|
153
|
-
Shutting down...`);for(let[K,R]of Y){let H=R.pid;if(H)
|
|
154
|
-
option shortcuts: ${Object.keys(X).join(", ")}`),process.exit(1);let V=r(Z);if(!V)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((W,z)=>{let K=new WebSocket(V.wsUrl);K.binaryType="arraybuffer",K.onopen=()=>{let R=new TextEncoder().encode(JSON.stringify({option:G,enabled:Y})),H=new Uint8Array(1+R.length);H[0]=8,H.set(R,1),K.send(H),setTimeout(()=>{K.close(),W()},50)},K.onerror=()=>{console.error("Failed to connect to serve-sim server at",V.wsUrl),z(Error("WebSocket connection failed"))}})}async function
|
|
153
|
+
Shutting down...`);for(let[K,R]of Y){let H=R.pid;if(H)E4(H);c$(K)}Y.clear(),process.exit(z)};for(let[z,K]of Y)K.on("exit",(R)=>{if(i8("child exit udid=%s pid=%d code=%s",z,K.pid,R),V)return;if(!Z)console.error(`[${z}] Helper exited (code ${R})`);if(c$(z),Y.delete(z),Y.size===0)W(R??1)});process.on("SIGINT",()=>W(0)),process.on("SIGTERM",()=>W(0)),process.on("SIGHUP",()=>W(0)),process.on("exit",()=>{for(let[z,K]of Y){try{if(K.pid)process.kill(K.pid,"SIGTERM")}catch{}try{c$(z)}catch{}}}),await new Promise(()=>{})}async function EY($,Q){n8("detach devices=%o startPort=%d",$,Q);let Z=$.length>0?$.map(o):(()=>{let X=Q$();if(X)return[X];let G=Y6();if(!G)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[G.udid]})(),J=[],Y=Q;for(let X of Z){let G=r(X);if(G){J.push(G);continue}Y=await q4(Y),await A4(X,Y,{detach:!0}),J.push(r(X)??i$(X,Y,"/","127.0.0.1")),Y++}return J}function qY($){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 AY($){if($){let Z=o($),J=r(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=x0();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 DY($){if($){let Q=o($),Z=r(Q);if(!Z){console.log(JSON.stringify({disconnected:!0,device:Q}));return}try{process.kill(Z.pid,"SIGTERM")}catch{}c$(Q),console.log(JSON.stringify({disconnected:!0,device:Z.device}))}else{let Q=x0();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)}c$(),console.log(JSON.stringify({disconnected:!0,devices:Z}))}}async function CY($,Q={}){let Z=$?o($):void 0,J=r(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=PY(Q.limit);if(X!=null)Y.searchParams.set("limit",String(X));let G;try{let W=await fetch(Y);if(!W.ok)throw Error(`HTTP ${W.status}`);G=await W.json()}catch(W){console.error(`Failed to read event log: ${W instanceof Error?W.message:String(W)}`),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 V=IY(G.events);for(let W of G.events)console.log(F7(W,{deviceLabel:W.device?V.get(W.device):null}))}function PY($){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 IY($){let Q=[...new Set($.map((G)=>G.device).filter((G)=>!!G))],Z=new Map,J=j4();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,V]of Z)X.set(G,Y.get(V)>1?`${V} (${G.slice(0,8)})`:V);return X}async function xY($,Q){let Z=r(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 V=new TextEncoder().encode(JSON.stringify(J)),W=new Uint8Array(1+V.length);W[0]=3,W.set(V,1),G.send(W),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 wY($,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=r(Z);if(!X)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((G,V)=>{let W=new WebSocket(X.wsUrl);W.binaryType="arraybuffer";let z=(K)=>{let R=new TextEncoder().encode(JSON.stringify({type:K,x:J,y:Y})),H=new Uint8Array(1+R.length);H[0]=3,H.set(R,1),W.send(H)};W.onopen=()=>{z("begin"),setTimeout(()=>{z("end"),setTimeout(()=>{W.close(),G()},50)},40)},W.onerror=()=>{console.error("Failed to connect to serve-sim server at",X.wsUrl),V(Error("WebSocket connection failed"))}})}async function kY($,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=m$(0,"utf8");else if(Y)try{G=m$(Y,"utf8")}catch(z){console.error(`Failed to read file '${Y}': ${z.message}`),process.exit(1)}else G=$.join(" ");let V;try{V=g6(G)}catch(z){if(z instanceof h0)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 W=r(Z);if(!W)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);await u6(W.wsUrl,V)}async function SY($,Q){let Z=r(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 V=new TextEncoder().encode(JSON.stringify({orientation:$})),W=new Uint8Array(1+V.length);W[0]=7,W.set(V,1),G.send(W),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 yY={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 fY($="home",Q){let Z=r(Q);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J=yY[$],Y=J?{button:$,...J}:{button:$};return new Promise((X,G)=>{let V=new WebSocket(Z.wsUrl);V.binaryType="arraybuffer",V.onopen=()=>{let W=new TextEncoder().encode(JSON.stringify(Y)),z=new Uint8Array(1+W.length);z[0]=4,z.set(W,1),V.send(z),setTimeout(()=>{V.close(),X()},50)},V.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),G(Error("WebSocket connection failed"))}})}async function bY($,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]
|
|
154
|
+
option shortcuts: ${Object.keys(X).join(", ")}`),process.exit(1);let V=r(Z);if(!V)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((W,z)=>{let K=new WebSocket(V.wsUrl);K.binaryType="arraybuffer",K.onopen=()=>{let R=new TextEncoder().encode(JSON.stringify({option:G,enabled:Y})),H=new Uint8Array(1+R.length);H[0]=8,H.set(R,1),K.send(H),setTimeout(()=>{K.close(),W()},50)},K.onerror=()=>{console.error("Failed to connect to serve-sim server at",V.wsUrl),z(Error("WebSocket connection failed"))}})}async function vY($){let Q=r($);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 D4(){let $=[M$(C$,"..","dist","simcam","libSimCameraInjector.dylib"),M$(C$,"simcam","libSimCameraInjector.dylib"),M$(C$,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let Q of $)if(K$(Q))return u$(Q);return null}function hY(){let $=M$(C$,"..","Sources","SimCameraInjector","build.sh");if(!K$($))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)…"),J$(`bash "${$}"`,{stdio:"inherit"});let Q=D4();if(!Q)throw Error("Build succeeded but dylib not found.");return Q}function X6(){let $=[M$(C$,"..","dist","simcam","serve-sim-camera-helper"),M$(C$,"simcam","serve-sim-camera-helper")];for(let Q of $)if(K$(Q))return u$(Q);return null}function C4(){let $=M$(C$,"..","Sources","SimCameraHelper","build.sh");if(!K$($))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)…"),J$(`bash "${$}"`,{stdio:"inherit"});let Q=X6();if(!Q)throw Error("Build succeeded but helper binary not found.");return Q}function uY($){return`/serve-sim-cam-${HY("sha1").update($).digest("hex").slice(0,8)}`}function gY($,Q,Z){let J=r0($),Y=J.includes(Q)?J:[...J,Q],X={helperPid:Z,bundleIds:Y};if(!K$(T$))$6(T$,{recursive:!0});J6(o0($),JSON.stringify(X))}function P4($){try{g$(o0($))}catch{}}function I4($){let Q=N0($);if(!K$(Q))return;let Z=Number(m$(Q,"utf-8").trim());if(Number.isFinite(Z)&&eQ(Z)){try{process.kill(Z,"SIGTERM")}catch{}let J=Date.now();while(eQ(Z)&&Date.now()-J<1500)I$(50)}try{g$(Q)}catch{}P4($)}function cY($){if(!K$(T$))$6(T$,{recursive:!0});let Q=M$(T$,`${$.udid}.log`),Z=Q6(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=F4($.helperBin,J,{detached:!0,stdio:["ignore",Z,Z]});if(Y.unref(),Z6(Z),!Y.pid)throw Error("failed to spawn camera helper");J6(N0($.udid),String(Y.pid)),P4($.udid);let X=Date.now();while(Date.now()-X<3000){if(!eQ(Y.pid))throw Error(`camera helper exited early — see log at ${Q}`);if(K$($.socketPath))break;I$(50)}return Y.pid}var mY=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),lY=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function x4($){let Q=$.toLowerCase().split(".").pop()??"";if(mY.has(Q))return"video";if(lY.has(Q))return"image";let Z;try{let J=Q6($,"r");Z=Buffer.alloc(16),MY(J,Z,0,Z.length,0),Z6(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 pY($){if($.file){let Q=u$($.file),Z=x4(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 dY($){let Q=uY($.udid),Z=a0($.udid);if(B0($.udid)){let X=await s$($.udid,{action:"switch",source:$.source.kind,arg:$.source.arg});if(!X.ok)throw Error(X.error||"helper rejected switch");return{helperPid:Number(m$(N0($.udid),"utf-8").trim()),shmName:Q,relaunched:!1}}I4($.udid);let J=!$.forceBuild&&X6()||C4();return{helperPid:cY({udid:$.udid,helperBin:J,shmName:Q,socketPath:Z,source:$.source.kind,arg:$.source.arg}),shmName:Q,relaunched:!0}}async function nY($){let Q,Z,J,Y=!1,X=!1,G=!1,V=!1,W="auto",z=[];for(let L=0;L<$.length;L++){let M=$[L];if(M==="--device"||M==="-d"){Q=$[++L];continue}if(M==="--file"||M==="-f"||M==="--image"||M==="-i"||M==="--video"){Z=$[++L];continue}if(M==="--webcam"){let U=$[L+1];if(U&&!U.startsWith("-"))J=U,L++;else J=!0;continue}if(M==="--list-webcams"){X=!0;continue}if(M==="--stop-webcam"){Y=!0;continue}if(M==="--build"){G=!0;continue}if(M==="--quiet"||M==="-q"){V=!0;continue}if(M==="--mirror"){let U=$[L+1];if(U==="on"||U==="off"||U==="auto")W=U,L++;else W="on";continue}if(M==="--no-mirror"){W="off";continue}if(M==="--help"||M==="-h"){console.log(`Usage: serve-sim camera <bundle-id> [-d udid] [source-options] [--build]
|
|
155
155
|
serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]
|
|
156
156
|
serve-sim camera mirror <auto|on|off> [-d udid]
|
|
157
157
|
serve-sim camera --list-webcams
|
|
@@ -189,7 +189,7 @@ Examples:
|
|
|
189
189
|
serve-sim camera switch placeholder # back to placeholder
|
|
190
190
|
serve-sim camera switch ~/Movies/loop.mp4 # hot-swap to file
|
|
191
191
|
serve-sim camera --list-webcams
|
|
192
|
-
serve-sim camera --stop-webcam`);return}z.push(M)}if(X){let L=
|
|
192
|
+
serve-sim camera --stop-webcam`);return}z.push(M)}if(X){let L=X6()??C4();J$(`"${L}" --list`,{stdio:"inherit"});return}if(Y){let L=Q?o(Q):Q$();if(!L)console.error("No booted simulator."),process.exit(1);let M=r0(L),U=[];for(let _ of M)try{J$(`xcrun simctl terminate "${L}" "${_}"`,{stdio:"ignore"}),U.push(_)}catch{}if(I4(L),V)console.log(JSON.stringify({udid:L,stopped:!0,terminated:U}));else if(console.log(`Stopped camera helper for ${L}`),U.length>0)console.log(`Terminated injected apps: ${U.join(", ")}`);return}if(z[0]==="mirror"){let L=Q?o(Q):Q$();if(!L)console.error("No booted simulator."),process.exit(1);let M=z[1];if(M!=="auto"&&M!=="on"&&M!=="off")console.error("Usage: serve-sim camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!B0(L))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let U=await s$(L,{action:"setMirror",mode:M});if(!U.ok)console.error(`mirror failed: ${U.error??"?"}`),process.exit(1);if(V)console.log(JSON.stringify({udid:L,mirror:M,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${M} on ${L}`)}catch(U){console.error(`mirror failed: ${U?.message??U}`),process.exit(1)}return}if(z[0]==="switch"){let L=Q?o(Q):Q$();if(!L)console.error("No booted simulator."),process.exit(1);let M=z[1],U=z[2];if(M&&M!=="placeholder"&&M!=="webcam"&&M!=="image"&&M!=="video"&&M!=="file"){let _=u$(M);if(K$(_))U=_,M="file"}if(M==="file"){if(!U)console.error("camera switch file <path>"),process.exit(1);U=u$(U);let _=x4(U);if(!_)console.error(`Could not detect image/video type for: ${U}`),process.exit(1);M=_}if(!M||M!=="placeholder"&&M!=="webcam"&&M!=="image"&&M!=="video")console.error("Usage: serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if((M==="image"||M==="video")&&U)U=u$(U);if(!B0(L))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let _=await s$(L,{action:"switch",source:M,arg:U});if(!_.ok)console.error(`switch failed: ${_.error??"?"}`),process.exit(1);if(V)console.log(JSON.stringify({udid:L,..._}));else console.log(`\uD83D\uDCF7 Switched ${L} → ${_.source}${_.arg?` (${_.arg})`:""}`)}catch(_){console.error(`switch failed: ${_?.message??_}`),process.exit(1)}return}if(z[0]==="status"){let L=Q?o(Q):Q$();if(!L){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}console.log(JSON.stringify(await t0(L)));return}let K=z[0];if(!K)console.error("Usage: serve-sim camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let R=Q?o(Q):Q$();if(!R)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let H=G?null:D4();if(!H)try{H=hY()}catch(L){console.error(`Failed to obtain camera dylib: ${L?.message??L}`),process.exit(1)}if(Z&&J)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(Z){if(Z=u$(Z),!K$(Z))console.error(`File not found: ${Z}`),process.exit(1)}let T;try{T=pY({file:Z,webcam:J})}catch(L){console.error(L?.message??String(L)),process.exit(1)}let O=await dY({udid:R,source:T,forceBuild:G}),q=O.shmName,C=O.helperPid;if(W!=="auto"||!O.relaunched)try{await s$(R,{action:"setMirror",mode:W})}catch{}try{J$(`xcrun simctl privacy "${R}" grant camera "${K}"`,{stdio:"ignore"})}catch{}try{J$(`xcrun simctl terminate "${R}" "${K}"`,{stdio:"ignore"})}catch{}let D={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:H,SIMCTL_CHILD_SIMCAM_SHM_NAME:q,...W!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:W}:{}},j="";try{j=J$(`xcrun simctl launch "${R}" "${K}"`,{env:D,encoding:"utf-8"})}catch(L){console.error(`simctl launch failed: ${L?.stderr??L?.message??L}`),process.exit(1)}let F=j.trim().match(/:\s*(\d+)\s*$/),E=F?Number(F[1]):null;if(C)gY(R,K,C);let B={udid:R,bundleId:K,pid:E,dylib:H,source:T.kind,arg:T.arg??null,shm:q,helperPid:C,mirror:W,hotSwapped:!1,helperRelaunched:O.relaunched};if(V)console.log(JSON.stringify(B));else{let L=O.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${L} camera into ${K} (pid ${E??"?"}) on ${R}`),console.log(` source: ${T.kind}${T.arg?` (${T.arg})`:""}`),C)console.log(` helper pid: ${C} (shm ${q})`);console.log(` dylib: ${H}`)}}function iY($){if($.length>0)return $.map(o);let Q=x0();if(Q.length>0)return[Q[0].device];let Z=Q$();if(Z)return[Z];let J=Y6();if(!J)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[J.udid]}async function oY($,Q,Z,J,Y,X,G){let V=iY(Q);if(Q.length===0&&x0().length===0)console.log("Starting simulator stream...");for(let j of V)await FY(j);if(G)for(let j of V)await R0(j,"appearance",G);let W=V[0],{simMiddleware:z}=await Promise.resolve().then(() => (N4(),_4)),K=z({basePath:"/",device:W,codec:Y,initialState:X,proxyHelpers:!0}),R=Z?1:50,H=$,T,O=!1;for(let j=0;j<R;j++){let F=$+j;try{await aY(F,K,J),H=F,O=!0;break}catch(E){if(T=E,E?.code!=="EADDRINUSE")break}}if(!O){if(T?.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 ${$}-${$+R-1}.`);else console.error(`Failed to start preview server: ${T?.message??T}`);process.exit(1)}for(let j of V)_Y(i$(j,H,"/",J));let q=()=>{for(let j of V)try{c$(j)}catch{}};process.on("exit",q);let C=J!=="127.0.0.1"&&J!=="localhost"&&J!=="::1",D=BY();if(console.log(""),console.log(` - Local: http://localhost:${H}`),C&&D)console.log(` - Network: http://${D}:${H}`);else if(D)console.log(` - Network: \x1B[2muse --host 0.0.0.0 to expose on http://${D}:${H}\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 aY($,Q,Z){return l6({port:$,middleware:Q,host:Z})}var Y$=new v6;Y$.name("serve-sim").description("Stream iOS Simulator to the browser").version(LY(),"-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("--panes <panes>","Initially open preview panes: devices, tools, devtools, or none",($)=>{try{return O7($)}catch(Q){throw new y0(Q instanceof Error?Q.message:String(Q))}}).option("--fit","Initially size the simulator to fit the preview viewport").option("--theme <theme>","Set simulator appearance before opening the preview: light or dark",($)=>{try{return E7($)}catch(Q){throw new y0(Q instanceof Error?Q.message:String(Q))}}).option("--codec <codec>","Stream codec for the preview UI: 'auto' (H.264 when the browser can decode "+"it) or 'mjpeg' (force software JPEG — e.g. on VMs without H.264 encode).",($)=>{let Q=$.toLowerCase(),Z=["auto","h264","mjpeg"];if(!Z.includes(Q))throw new y0(`Unsupported codec '${$}'. Supported: ${Z.join(", ")}.`);return Q}).option("-l, --list [device]","List running streams").option("-k, --kill [device]","Kill running stream(s)").addHelpText("after",`
|
|
193
193
|
Examples:
|
|
194
194
|
serve-sim Open simulator preview at localhost:3200
|
|
195
195
|
serve-sim -p 8080 Preview on a custom port
|
|
@@ -200,7 +200,7 @@ Examples:
|
|
|
200
200
|
serve-sim --no-preview "iPhone 16 Pro" Stream a specific device (no preview)
|
|
201
201
|
serve-sim --detach Start streaming in background (daemon)
|
|
202
202
|
serve-sim --list Show all running streams
|
|
203
|
-
serve-sim --kill Stop all streams`).action(async($,Q)=>{if(Q.list!==void 0){
|
|
203
|
+
serve-sim --kill Stop all streams`).action(async($,Q)=>{if(Q.list!==void 0){AY(typeof Q.list==="string"?Q.list:void 0);return}if(Q.kill!==void 0){DY(typeof Q.kill==="string"?Q.kill:void 0);return}let Z=Q.port;if(Q.detach){let J=await EY($,Z??3100);qY(J)}else if(Q.preview===!1)await OY($,Z??3100,!!Q.quiet);else{let J=Q.panes!==void 0||Q.fit?{...Q.panes!==void 0?{panes:Q.panes}:{},...Q.fit?{fit:!0}:{}}:void 0;await oY(Z??3200,$,Z!==void 0,Q.host,Q.codec,J,Q.theme)}});var P$=["-d, --device <udid>","Target a specific simulator (udid or name)"];Y$.command("gesture").description("Send a touch gesture").argument("<json>",`Gesture JSON, e.g. '{"type":"begin","x":0.5,"y":0.5}'`).option(...P$).action(($,Q)=>xY($,Q.device));Y$.command("tap").description("Tap at normalized 0..1 coords").argument("<x>","X coord, normalized 0..1").argument("<y>","Y coord, normalized 0..1").option(...P$).action(($,Q,Z)=>wY($,Q,Z.device));Y$.command("button").description("Send a hardware button press").argument("[name]","Button name","home").option(...P$).action(($,Q)=>fY($,Q.device));Y$.command("type").description("Type text (US keyboard only)").argument("[text...]","Text to type").option(...P$).option("--stdin","Read text from stdin").option("--file <path>","Read text from a file").action(($,Q)=>kY($,{device:Q.device,stdin:Q.stdin,file:Q.file}));Y$.command("rotate").description("Set device orientation (portrait|portrait_upside_down|landscape_left|landscape_right)").argument("<orientation>").option(...P$).action(($,Q)=>SY($,Q.device));Y$.command("ca-debug").description("Toggle a CoreAnimation debug render flag (blended|copies|misaligned|offscreen|slow-animations)").argument("<option>").argument("<state>","on|off").option(...P$).action(($,Q,Z)=>bY($,Q,Z.device));Y$.command("memory-warning").description("Simulate a memory warning on the device").option(...P$).action(($)=>vY($.device));Y$.command("event-log").description("Show recent simulator events").option(...P$).option("-j, --json","Print JSON").option("-n, --limit <count>","Maximum number of events").action(($)=>CY($.device,{json:$.json,limit:$.limit}));Y$.command("camera").description("Inject a synthetic camera feed and launch an app (see `camera --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action(($)=>nY($));Y$.command("permissions").description("Manage app permissions (see `permissions` with no args for usage)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action(($)=>e6($));Y$.command("ui").description("Get or set simulator-wide UI options (see `ui --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action(($)=>G7($));await Y$.parseAsync(process.argv);
|
|
204
204
|
|
|
205
|
-
//# debugId=
|
|
205
|
+
//# debugId=7B79CB4FDEDE753464756E2164756E21
|
|
206
206
|
//# sourceMappingURL=serve-sim.js.map
|