From 3c3519f2e8b7d5094d8f58feeeb63919049a17c8 Mon Sep 17 00:00:00 2001 From: dylan <> Date: Mon, 1 Apr 2024 00:22:52 -0700 Subject: [PATCH] improve ui --- src/client/GamePage.tsx | 63 ++++++++++--------- src/client/pico8-client/Pico8Console.tsx | 47 ++++---------- .../pico8-client/build/veryRawRenderCart.js | 2 +- src/client/pico8-client/rawRenderCart.ts | 2 +- src/client/pico8-client/renderCart.ts | 2 +- src/client/pico8-client/veryRawRenderCart.js | 2 +- src/server/public/reference.html | 17 ++++- 7 files changed, 66 insertions(+), 69 deletions(-) diff --git a/src/client/GamePage.tsx b/src/client/GamePage.tsx index 561b3a5..869b30a 100644 --- a/src/client/GamePage.tsx +++ b/src/client/GamePage.tsx @@ -50,46 +50,51 @@ export const GamePage = () => { return (
-

{info.release.manifest.title ?? slug!.split("-").map(word => word[0].toUpperCase()+word.slice(1)).join(" ")}

-

By {info.release.author}

+
+

{info.release.manifest.title ?? slug!.split("-").map(word => word[0].toUpperCase()+word.slice(1)).join(" ")}

+

by {info.release.author}

+
- -
-
- Version: navigate(`/u/${author}/${slug}/v${ev.target.value}`)}> + { + [...info.versions].reverse().map(v => ( + + )) + } + +
+ {/*
+

This is a paragraph about this game. It is a cool game. And a cool website to play it on. It automagically connects from GitHub.

+
*/}
) diff --git a/src/client/pico8-client/Pico8Console.tsx b/src/client/pico8-client/Pico8Console.tsx index 5519f76..0c89043 100644 --- a/src/client/pico8-client/Pico8Console.tsx +++ b/src/client/pico8-client/Pico8Console.tsx @@ -9,45 +9,26 @@ type Pico8ConsoleImperatives = { export const Pico8Console = forwardRef((props: { carts: PicoCart[] }, forwardedRef: ForwardedRef) => { const {carts} = props; const [playing, setPlaying] = useState(false); - const playingRef = useRef(false); const ref = useRef(null); - const listeners = useRef void) - }>>({}); const [handle, setHandle] = useState(null); const attachConsole = useCallback(async () => { const picoConsole = await makePicoConsole({ carts, }); - const codoTextarea: HTMLTextAreaElement = (picoConsole.rawModule as any).codo_textarea; - picoConsole.canvas.addEventListener('click', () => { - codoTextarea.focus(); - codoTextarea.select(); - }) + picoConsole.canvas.tabIndex=0; if (ref.current) { ref.current.appendChild(picoConsole.canvas); - ref.current.appendChild(codoTextarea); + picoConsole.canvas.focus(); } setHandle(picoConsole); - listeners.current.keydown = function (event) { - console.log("keydown", event.key); - if (!playingRef.current) { - return; + picoConsole.canvas.addEventListener('keydown',(event) => { + if (["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(event.key)) { + event.preventDefault(); } - console.log(picoConsole.state); - if (picoConsole.state.hasFocus) { - console.log("hasFocus"); - // block only cursors, M R P, tab - if (["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "M", "R", "P", "m", "r", "p", "Tab"].includes(event.key)) { - console.log("preventDefault"); - event.preventDefault(); - } - } - }; - document.addEventListener('keydown', - listeners.current.keydown, - {passive: false} - ); + }, {passive: false}); + picoConsole.canvas.addEventListener('click', () => { + picoConsole.canvas.focus(); + }) }, [carts]); useImperativeHandle(forwardedRef, () => ({ getPicoConsoleHandle() { @@ -55,17 +36,12 @@ export const Pico8Console = forwardRef((props: { carts: PicoCart[] }, forwardedR } }), [handle]); useEffect(() => { - if (playing && playingRef.current) { + if (playing) { attachConsole(); return () => { - playingRef.current = false; if (ref.current) { ref.current.innerHTML = ""; } - if (listeners.current.keydown) { - document.removeEventListener("keydown", listeners.current.keydown); - listeners.current.keydown = null; - } } } }, [playing, attachConsole]); @@ -84,7 +60,8 @@ export const Pico8Console = forwardRef((props: { carts: PicoCart[] }, forwardedR color: white; cursor: pointer; `} - onClick={() => {playingRef.current = true; setPlaying(true)}} + tabIndex={0} + onClick={() => {setPlaying(true)}} > Play! diff --git a/src/client/pico8-client/build/veryRawRenderCart.js b/src/client/pico8-client/build/veryRawRenderCart.js index 9b10209..1529ac9 100644 --- a/src/client/pico8-client/build/veryRawRenderCart.js +++ b/src/client/pico8-client/build/veryRawRenderCart.js @@ -19391,7 +19391,7 @@ var require_veryRawRenderCart = __commonJS((exports, module) => { }, function() { if (typeof codo_key_buffer === "undefined") codo_key_buffer = []; - document.addEventListener("keydown", function(e) { + Module["canvas"].addEventListener("keydown", function(e) { var val = -1; if (e.key.length == 1) { val = e.key.charCodeAt(0); diff --git a/src/client/pico8-client/rawRenderCart.ts b/src/client/pico8-client/rawRenderCart.ts index bab6a5c..d958346 100644 --- a/src/client/pico8-client/rawRenderCart.ts +++ b/src/client/pico8-client/rawRenderCart.ts @@ -3,7 +3,7 @@ import "./build/veryRawRenderCart.js"; export type PicoBool = 0 | 1; -export type RenderCart = (Module: {canvas: HTMLCanvasElement, codo_textarea: HTMLTextAreaElement}, cartNames: string[], cartDatas: number[][], audioContext: AudioContext) => { +export type RenderCart = (Module: {canvas: HTMLCanvasElement, codo_textarea?: HTMLTextAreaElement}, cartNames: string[], cartDatas: number[][], audioContext: AudioContext) => { p8_touch_detected?: PicoBool; p8_dropped_cart?: string; p8_dropped_cart_name?: string; diff --git a/src/client/pico8-client/renderCart.ts b/src/client/pico8-client/renderCart.ts index 98f6683..36cfe78 100644 --- a/src/client/pico8-client/renderCart.ts +++ b/src/client/pico8-client/renderCart.ts @@ -91,7 +91,7 @@ export const makePicoConsole = async (props: { codoTextarea.style.left="-9999px"; codoTextarea.style.height="0px"; codoTextarea.style.overflow="hidden"; - const Module = {canvas, codo_textarea: codoTextarea}; + const Module = {canvas, keyboardListeningElement: canvas}; const cartsDatas = await Promise.all(carts.map(cart => getRom(cart))); const handle = rawRenderCart(Module, carts.map(cart => cart.name), cartsDatas, audioContext); handle.pico8_state = {}; diff --git a/src/client/pico8-client/veryRawRenderCart.js b/src/client/pico8-client/veryRawRenderCart.js index 35b3997..f1d0e97 100644 --- a/src/client/pico8-client/veryRawRenderCart.js +++ b/src/client/pico8-client/veryRawRenderCart.js @@ -36,7 +36,7 @@ window.P8 = function (Module, cartNames, cartDatas) { var _cdpos=0; var iii=0; var ciii=0; - var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){function runWithFS(){var fileData0=[];fileData0.push.apply(fileData0,[67,80,79,68,68,0,0,0,1,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,0,0,3,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,99,70,73,76,0,0,0,0,123,144,0,0,112,111,100,47,112,105,99,111,56,95,98,111,111,116,46,112,56,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,1,0,0,242,16,112,105,99,111,45,56,32,99,97,114,116,114,105,100,103,101,32,47,47,32,104,116,116,112,58,47,47,119,119,119,46,31,0,255,13,46,99,111,109,10,118,101,114,115,105,111,110,32,56,10,95,95,108,117,97,95,95,10,10,45,45,62,56,6,0,25,159,95,95,103,102,120,95,95,10,48,1,0,108,15,129,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,45,1,137,64,31,102,137,64,112,15,139,1,109,15,1,1,239,95,95,95,109,97,112,10,2,240,15,1,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,50,95,95,115,187,98,48,49,48,99,17,0,161,51,48,53,53,53,50,98,53,54,53,10,0,64,51,53,53,52,5,0,128,49,53,51,53,55,48,53,48,3,0,15,5,0,106,0,169,0,16,56,12,0,115,50,52,48,51,53,50,52,26,0,15,91,2,130,30,49,154,0,15,169,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,238,113,95,95,109,117,115,105,99,114,74,50,32,52,49,2,0,15,12,0,255,255,224,80,49,52,49,10,10,99,70,73,76,0,0,0,0,18,190,12,0,112,111,100,47,103,102,120,49,46,112,111,100,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,74,0,0,243,22,67,80,79,68,68,0,0,0,1,0,0,0,103,102,120,49,46,112,111,100,0,47,112,97,98,97,47,112,105,99,111,56,47,112,111,100,47,25,0,63,12,1,0,1,0,10,177,67,66,77,80,20,0,1,0,128,0,0,4,0,47,32,0,1,0,255,255,255,255,255,255,255,255,207,79,77,0,255,255,4,0,73,47,0,0,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,91,63,163,255,255,4,0,73,47,232,241,4,0,75,47,170,204,4,0,75,15,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,155,79,39,236,255,255,4,0,73,47,232,241,4,0,255,12,47,168,119,4,0,75,15,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,59,15,1,0,77,79,54,228,0,255,4,0,73,15,160,1,77,63,156,118,131,4,0,74,15,160,1,77,15,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,155,15,1,0,77,79,255,173,41,255,4,0,73,15,99,1,77,15,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,92,15,1,0,255,255,255,255,255,255,255,36,97,67,80,65,76,0,3,11,0,255,39,29,43,83,126,37,83,0,135,81,171,82,54,95,87,79,194,195,199,255,241,232,255,0,77,255,163,0,255,236,39,0,228,54,41,173,255,131,118,156,255,119,168,255,204,170,0,0,0,2,4,6,2,4,8,3,0,101,111,3,5,10,3,5,10,126,0,100,31,9,54,0,37,27,9,192,0,5,3,0,254,33,41,24,20,17,29,53,66,33,54,18,83,89,116,47,41,73,51,59,162,136,121,243,239,125,190,18,80,255,108,36,168,231,46,0,181,67,6,90,181,117,70,101,255,110,89,255,157,129,122,1,15,3,0,255,44,255,2,67,66,77,80,164,1,0,0,40,0,0,0,10,0,0,0,8,68,3,24,15,44,0,20,63,9,7,15,39,0,17,95,10,7,7,7,14,41,0,17,51,11,7,13,10,0,66,7,7,7,7,5,0,20,0,5,0,22,7,25,0,37,0,12,39,0,0,3,0,5,4,0,4,16,0,0,10,0,1,3,0,23,0,79,0,14,40,0,3,99,0,9,40,0,5,7,0,10,80,0,1,18,0,12,40,0,6,165,0,9,159,0,31,7,180,4,54,57,79,72,67,180,4,91,231,39,0,231,86,180,4,15,1,0,29,240,3,28,0,73,109,24,69,0,122,44,160,72,50,52,54,53,173,177,183,100,14,240,8,0,77,255,132,0,255,255,39,0,226,50,41,173,255,174,75,176,255,136,188,255,214,197,48,0,32,48,102,144,0,177,131,72,171,82,54,63,65,65,180,182,188,48,0,49,42,255,163,79,0,96,231,86,41,162,255,132,48,0,245,7,175,255,217,177,0,0,0,32,51,123,140,28,60,0,131,49,171,100,54,80,80,80,120,0,35,255,155,9,0,97,63,155,255,132,112,169,192,0,0,75,0,255,0,28,24,87,135,37,77,0,147,60,0,0,0,69,69,69,180,0,2,98,146,133,174,255,105,154,48,0,48,55,67,91,19,0,143,135,81,0,0,0,86,70,59,48,0,2,53,131,118,156,12,0,53,37,55,77,12,0,63,101,91,82,32,1,14,53,43,55,66,12,0,63,79,72,67,48,0,15,37,62,83,12,0,63,95,87,79,48,0,14,79,29,43,83,0,1,0,255,4,48,255,0,255,180,4,158,20,48,0,0,128,0,0,0,96,180,4,15,1,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,26,0,28,48,83,36,0,0,0,4,4,0,9,28,48,241,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,72,48,33,0,1,72,48,0,76,48,47,32,0,1,0,255,255,255,255,255,255,255,255,207,79,77,0,255,255,4,0,73,47,0,0,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,91,63,163,255,255,4,0,72,15,32,170,78,47,170,204,4,0,75,15,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,155,79,39,236,255,255,4,0,73,47,232,241,4,0,255,12,47,168,119,4,0,75,15,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,59,15,1,0,77,79,54,228,0,255,4,0,73,15,160,1,77,63,156,118,131,4,0,74,15,160,1,77,15,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,155,15,1,0,77,79,255,173,41,255,4,0,73,15,99,1,77,15,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,92,15,1,0,255,255,255,255,255,255,255,36,151,67,66,77,80,84,0,0,0,8,4,0,4,1,0,20,8,1,0,36,2,2,8,0,36,2,2,8,0,42,2,2,8,0,8,40,0,3,1,0,15,92,0,18,36,15,15,8,0,36,15,15,8,0,42,15,15,8,0,8,40,0,15,92,0,25,6,147,0,3,186,0,4,176,0,19,8,15,0,36,8,8,208,0,15,92,0,33,40,15,15,186,0,4,176,0,19,8,15,0,36,8,8,208,0,15,92,0,32,47,2,2,191,0,1,6,16,0,4,185,0,3,8,0,15,92,0,26,47,15,15,191,0,1,6,16,0,4,185,0,3,8,0,6,92,0,95,100,0,0,0,10,20,1,12,6,194,0,3,2,0,15,10,0,23,15,108,0,39,19,15,2,0,15,10,0,22,15,216,0,50,15,20,0,8,15,216,0,62,15,20,0,30,0,108,0,95,68,1,0,0,38,108,0,1,15,1,0,33,2,236,3,45,2,2,164,0,37,15,15,4,0,85,8,2,2,15,15,39,0,18,2,103,3,1,5,1,5,162,0,0,165,0,16,2,115,2,5,139,3,21,8,7,2,6,72,0,13,38,0,1,76,0,3,43,0,4,202,1,2,76,0,8,114,0,7,83,2,10,38,0,8,190,0,6,118,0,31,2,251,0,8,15,76,1,98,2,231,0,39,2,8,93,5,0,222,0,2,156,3,35,15,15,67,1,5,90,2,5,210,4,1,42,1,4,243,0,3,29,1,6,72,0,12,38,0,1,76,0,3,43,0,5,123,1,43,2,8,114,0,7,51,3,10,38,0,8,190,0,39,15,15,114,0,15,76,1,22,95,36,0,0,0,2,76,1,0,244,1,0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15,44,0,23,8,48,0,5,44,0,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,88,0,10,255,0,10,4,9,2,8,3,11,1,12,13,14,5,15,6,7,40,5,9,34,6,7,1,0,33,13,6,1,0,0,8,0,33,5,5,8,0,129,5,5,5,5,6,7,13,5,1,0,8,32,0,2,8,0,2,1,0,31,6,92,0,10,3,37,0,18,7,52,0,8,8,0,33,5,5,8,0,1,100,0,34,13,7,100,0,6,32,0,2,1,0,31,6,184,0,26,5,168,0,3,184,0,5,200,0,15,184,0,56,5,168,0,3,184,0,5,200,0,15,184,0,23,31,5,1,0,44,0,92,0,19,44,84,0,31,3,20,1,4,19,1,236,0,18,1,1,0,1,144,0,32,20,32,68,2,60,0,0,32,44,2,255,1,0,5,1,2,1,13,6,2,4,9,3,13,5,13,6,0,1,0,221,11,88,3,15,255,0,221,16,5,0,2,30,13,0,2,15,1,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,4,72,34,19,4,4,0,9,28,32,255,0,5,6,7,2,4,9,10,1,13,14,15,3,11,12,8,44,0,18,67,3,11,8,2,160,34,19,35,164,32,28,5,168,32,81,0,0,6,6,0,164,32,34,0,6,131,0,19,45,39,0,12,43,0,11,174,0,17,2,2,0,31,0,200,41,12,7,106,0,0,99,0,1,113,0,2,118,0,11,8,0,4,32,0,14,20,1,15,92,0,33,47,8,8,92,0,20,83,164,0,0,0,12,4,0,8,92,0,31,11,1,0,124,0,172,0,19,76,164,0,27,7,172,0,3,35,35,31,5,8,0,29,15,84,0,9,2,183,34,47,6,5,8,0,29,15,168,0,12,31,5,4,0,1,4,1,0,15,32,0,1,15,168,0,16,31,5,4,0,1,4,1,0,15,32,0,1,15,168,0,14,18,5,2,0,5,152,0,15,16,0,20,15,168,0,10,18,5,2,0,5,152,0,15,16,0,20,15,80,1,11,1,53,1,3,138,0,31,13,168,36,6,4,32,0,4,48,0,15,80,1,11,1,53,1,3,138,0,31,6,84,0,6,4,32,0,4,48,0,15,144,4,10,65,13,13,0,13,6,0,32,0,13,6,0,15,44,0,10,0,136,4,96,11,7,6,6,11,11,151,4,30,0,172,0,15,74,5,17,95,10,10,10,10,0,104,5,5,15,84,0,70,98,20,64,0,0,128,0,4,0,8,84,0,79,1,0,0,1,4,0,102,15,127,0,111,31,1,127,0,236,15,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,15,196,68,19,51,0,0,14,7,0,19,14,7,0,10,16,0,5,32,0,15,32,69,32,5,24,0,36,8,8,58,106,9,16,0,5,32,0,15,92,0,33,42,14,0,168,0,4,185,0,5,16,0,31,0,92,0,39,42,8,0,168,0,4,185,0,5,16,0,15,92,0,40,4,1,0,34,7,7,7,0,2,13,66,18,7,12,0,2,20,0,47,0,7,92,0,44,4,66,0,17,7,82,0,47,7,7,92,0,59,3,187,0,8,93,0,47,7,7,92,0,49,1,187,104,1,172,0,8,4,0,3,20,0,15,184,0,46,6,165,0,6,8,0,2,114,0,15,92,0,45,40,7,0,89,0,4,110,1,3,182,0,15,92,0,48,22,7,2,0,3,1,0,7,19,0,9,120,1,15,132,2,36,6,99,1,5,14,1,14,112,1,15,56,112,32,8,10,0,5,199,113,15,16,113,68,8,10,0,5,215,113,15,16,113,67,36,2,8,157,111,15,20,0,18,15,216,0,42,36,15,8,189,110,15,20,0,18,15,48,116,34,25,2,175,1,5,128,115,11,0,117,15,48,116,35,25,15,159,1,5,128,115,11,0,117,15,48,116,29,4,144,111,7,2,0,22,2,69,2,7,16,0,11,117,112,15,48,116,17,2,135,117,39,15,8,2,0,22,15,53,2,7,16,0,3,255,116,15,20,1,26,3,17,2,6,46,114,15,8,0,3,12,57,2,15,88,118,21,2,63,118,6,12,0,15,8,0,1,12,41,2,15,16,119,22,9,0,119,1,162,0,6,16,0,6,41,2,47,8,8,184,0,32,25,8,0,119,1,162,0,6,16,0,6,41,2,47,8,8,184,0,31,4,113,1,6,8,0,8,248,2,42,2,2,8,0,15,184,0,27,4,113,1,6,8,0,8,248,2,42,15,15,8,0,15,60,3,28,21,8,98,120,5,49,2,6,8,0,4,24,0,7,50,119,15,92,0,26,5,98,120,5,49,2,6,8,0,4,24,0,7,50,119,15,128,120,32,11,88,4,15,80,4,53,14,88,4,15,80,4,17,14,112,79,15,14,7,2,19,6,68,113,7,82,7,19,7,208,79,4,212,79,15,1,0,28,8,60,0,8,84,0,8,108,0,12,28,80,82,1,0,0,20,0,4,0,15,232,9,15,41,7,6,111,0,9,188,0,14,196,0,14,153,0,15,1,0,216,14,4,1,15,44,1,3,14,84,1,15,56,83,7,48,5,0,0,84,78,31,36,208,77,1,15,188,1,17,23,6,4,0,41,7,7,15,0,15,204,1,3,15,220,1,1,15,249,0,20,15,39,0,46,31,6,144,0,255,255,255,154,15,108,0,53,15,164,4,15,15,100,88,22,98,56,19,0,0,70,0,4,0,47,8,0,1,0,62,1,120,121,1,88,88,15,8,0,3,2,229,14,47,6,6,38,0,7,14,112,5,15,137,0,35,15,70,0,123,31,6,57,7,48,15,70,0,34,15,114,8,140,15,24,1,119,15,48,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,53,15,164,1,255,6,15,70,0,49,15,82,18,53,31,0,180,148,88,6,97,144,9,156,29,9,160,145,8,9,0,15,236,28,26,40,15,15,40,147,11,253,30,5,33,31,5,9,0,14,164,29,15,184,0,22,14,8,0,14,208,0,15,184,0,37,14,8,0,14,208,0,15,184,0,31,10,8,0,14,44,150,15,184,0,41,10,8,0,14,44,150,12,184,0,16,141,72,108,3,4,0,15,104,21,42,22,1,10,0,38,7,1,11,0,38,7,1,11,0,38,7,1,11,0,37,7,1,33,0,5,34,0,35,1,7,137,40,23,69,211,37,31,8,103,0,1,2,99,0,2,4,0,17,1,42,0,19,1,14,0,6,127,0,0,6,0,15,226,0,24,38,1,0,170,0,20,1,149,0,1,11,0,42,7,1,11,0,51,1,1,7,193,0,37,1,7,11,0,2,213,0,2,11,0,2,34,0,29,1,248,0,63,0,1,1,149,0,13,15,160,0,41,14,138,0,15,149,0,28,83,245,0,0,0,15,4,0,15,116,23,60,6,30,2,11,34,2,3,15,0,6,222,0,9,213,0,9,110,1,42,0,0,114,1,27,0,225,0,12,229,0,12,233,0,6,237,0,12,158,0,14,253,0,15,81,144,89,31,0,253,0,111,14,106,108,12,126,146,1,141,111,3,167,109,30,13,8,0,4,32,0,7,118,146,15,84,0,15,34,6,6,154,109,82,8,8,8,7,6,8,0,23,8,8,0,4,32,0,15,84,0,34,82,9,9,9,7,6,8,0,23,9,8,0,15,84,0,42,82,10,10,10,7,6,8,0,23,10,8,0,15,84,0,42,82,11,11,11,7,6,8,0,23,11,8,0,15,84,0,42,82,12,12,12,7,6,8,0,23,12,8,0,15,84,0,42,82,14,14,14,7,6,8,0,23,14,8,0,14,84,0,15,248,1,66,19,55,235,115,15,84,0,3,1,29,0,51,1,1,13,226,2,0,5,0,1,20,0,15,63,0,25,10,7,10,10,63,0,15,210,0,5,23,0,217,4,34,1,1,97,3,23,1,206,48,1,8,0,15,114,3,0,15,84,0,97,6,91,0,39,1,0,115,49,2,92,0,1,16,0,14,168,5,15,84,0,103,3,67,0,15,8,0,6,47,0,0,84,0,81,15,232,46,27,9,1,0,14,17,45,15,92,0,37,42,7,7,145,46,8,11,0,14,102,0,15,48,46,31,42,7,0,200,45,4,84,47,31,7,180,48,53,5,107,0,3,3,48,3,8,0,31,0,180,48,50,7,149,46,7,156,46,15,160,47,49,13,121,1,15,92,0,49,5,11,1,9,2,0,14,127,14,15,132,2,40,42,7,7,4,0,14,92,0,15,128,50,47,6,32,2,14,232,2,15,40,2,40,11,8,0,15,112,1,48,27,7,43,3,7,212,1,15,92,0,56,31,0,132,2,64,11,126,50,6,200,0,31,0,184,0,53,8,80,4,15,60,3,63,25,7,40,2,15,112,1,66,14,8,0,11,92,0,83,101,0,0,0,9,4,0,15,60,3,13,20,6,159,123,0,205,157,2,146,17,45,13,6,9,0,4,27,0,3,46,0,3,213,122,15,109,0,21,5,178,52,0,86,158,2,160,3,45,13,7,9,0,4,27,0,3,46,0,5,9,0,4,118,0,15,218,0,41,19,6,191,0,13,9,0,15,218,0,56,4,182,0,13,9,0,15,218,0,74,5,191,0,5,180,1,15,218,0,61,0,2,11,3,182,0,3,9,0,20,14,200,0,7,27,0,10,218,0,18,14,1,0,15,218,0,50,14,227,0,15,218,0,63,14,227,0,15,218,0,17,98,20,1,0,0,16,0,4,0,14,59,15,15,44,129,235,15,28,1,5,28,7,1,0,11,31,5,15,16,0,205,15,56,2,13,15,43,1,233,15,46,4,29,21,1,203,12,53,13,7,13,13,20,11,18,0,15,231,12,3,15,41,7,1,15,18,3,76,15,109,0,19,46,7,0,126,11,25,7,246,59,11,99,8,14,47,10,15,109,0,21,7,36,10,15,9,0,4,6,255,4,8,238,25,9,138,2,15,109,0,19,14,242,11,14,11,61,14,18,0,13,54,0,15,218,0,22,8,109,60,26,7,9,0,4,209,0,9,89,1,14,74,1,15,180,1,96,162,148,0,2,0,160,0,0,0,205,0,127,166,4,28,0,53,105,102,102,4,0,79,8,4,2,255,4,0,255,255,83,8,116,2,8,124,2,63,103,102,102,4,0,255,255,84,12,132,2,14,124,2,15,132,2,255,255,85,15,124,2,255,255,103,8,132,2,15,128,2,255,255,255,255,255,174,63,77,0,255,128,2,255,255,104,34,0,155,155,250,63,188,204,255,128,2,255,255,96,42,39,231,31,253,63,168,119,255,0,5,255,255,96,34,50,226,247,255,62,169,112,132,124,2,15,128,2,255,217,42,232,241,140,4,15,20,0,5,12,24,0,14,20,0,10,44,0,14,100,0,14,36,0,0,27,210,15,124,1,165,63,167,171,178,8,0,26,8,56,0,4,4,0,15,16,0,1,8,20,0,15,16,0,4,15,80,0,10,14,28,0,14,72,0,14,56,0,15,128,2,99,14,116,2,14,88,2,14,16,0,15,64,0,19,12,40,0,8,72,0,14,36,0,15,128,2,219,12,24,0,14,12,0,15,48,0,2,15,136,0,18,15,72,0,12,15,128,2,130,14,216,4,15,128,2,43,15,76,5,8,15,128,2,242,15,152,4,0,15,56,2,38,14,72,2,14,128,2,15,160,0,8,15,0,5,118,14,28,0,15,0,5,51,14,72,0,15,0,5,183,14,8,2,15,24,2,26,15,0,5,57,15,128,2,186,15,20,10,16,15,252,9,37,15,128,2,230,15,16,5,29,12,72,0,15,136,0,25,15,72,0,12,15,128,2,65,15,4,0,255,255,43,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,15,80,57,255,246,15,128,2,105,63,139,138,136,4,0,255,235,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,15,4,0,255,242,15,128,2,48,15,4,0,255,255,43,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,63,54,54,54,4,0,255,243,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,51,31,103,124,82,255,255,46,78,105,102,102,0,128,2,15,124,2,255,255,89,14,128,2,15,124,2,255,255,89,14,128,2,15,124,2,255,255,89,14,128,2,15,124,2,255,255,101,14,128,2,15,124,2,255,255,77,15,128,2,4,15,124,2,255,255,104,14,132,2,15,124,2,255,255,97,14,132,2,15,124,2,255,255,97,8,132,2,15,4,0,255,255,55,15,116,2,21,255,3,67,66,77,80,148,0,2,0,160,0,0,0,205,0,0,0,32,0,1,0,3,14,156,2,15,4,0,255,255,69,15,124,2,0,15,36,20,255,255,96,15,124,2,255,255,103,12,132,2,14,124,2,15,156,122,255,255,255,255,255,255,255,255,31,63,77,0,255,128,2,255,255,104,191,0,155,255,255,232,241,255,255,188,204,255,128,2,255,255,96,34,39,231,124,2,4,4,0,63,168,119,255,0,5,255,255,96,49,50,226,0,124,2,62,169,112,132,124,2,15,128,2,255,217,42,232,241,140,4,15,20,0,5,12,24,0,14,20,0,10,44,0,14,100,0,14,36,0,63,255,173,41,172,1,214,53,167,171,178,4,0,15,16,0,1,8,20,0,14,16,0,15,80,0,15,14,36,0,15,80,0,6,14,64,0,15,128,2,100,14,116,2,14,88,2,14,16,0,15,64,0,19,12,40,0,8,72,0,15,44,4,225,8,248,1,8,16,2,14,12,0,15,48,0,6,15,32,0,34,14,48,0,15,128,2,127,14,216,4,15,128,2,43,15,76,5,8,15,128,2,234,15,144,4,0,15,48,2,38,14,64,2,15,128,2,31,14,192,2,15,0,5,103,14,28,0,15,0,5,51,14,72,0,15,0,5,235,14,20,0,15,0,5,42,15,128,2,194,15,20,10,16,15,252,9,17,15,0,5,254,12,16,0,15,160,9,16,15,80,5,38,15,80,0,8,15,128,2,65,15,156,162,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,54,31,8,28,190,255,255,110,0,60,0,0,132,44,15,4,0,255,234,15,128,2,255,255,255,255,255,255,255,255,201,8,108,35,15,16,0,25,15,64,0,15,15,128,2,255,255,25,57,83,37,126,64,2,8,16,0,0,12,0,12,16,0,46,232,241,64,0,0,4,0,14,16,0,15,128,2,255,255,21,15,8,0,13,14,244,4,15,0,5,255,255,61,15,8,0,13,12,208,4,8,128,2,14,32,5,10,48,5,15,0,10,255,255,71,47,232,241,0,5,255,255,53,4,176,4,4,224,4,15,16,0,56,15,128,2,255,255,20,15,4,0,72,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,218,63,188,182,180,4,0,2,15,0,5,255,255,91,49,53,54,52,8,0,49,54,82,171,4,0,14,0,5,15,128,2,255,255,77,0,20,81,4,124,2,15,128,2,255,34,15,68,6,4,15,116,2,255,15,12,12,0,34,177,217,252,22,15,0,5,255,34,15,68,6,0,15,128,2,255,19,0,56,1,0,12,0,0,8,0,4,116,25,0,12,0,4,80,1,8,96,1,12,20,0,15,128,2,249,14,68,6,15,120,12,255,16,0,80,2,15,60,6,5,4,112,2,12,4,0,15,128,2,249,15,68,6,8,15,0,5,255,19,14,100,2,14,4,0,15,128,2,255,18,15,68,6,28,15,128,7,254,15,108,2,24,15,128,2,250,15,68,6,36,15,148,7,255,11,31,77,128,22,255,25,15,68,6,12,15,128,2,255,27,14,28,1,15,128,2,195,0,252,101,15,4,0,53,0,128,2,47,168,119,68,6,11,14,112,0,15,4,0,255,4,15,48,1,83,15,128,22,207,14,248,19,15,0,30,255,255,89,14,224,9,15,128,2,255,255,1,15,68,6,84,15,4,0,255,135,15,0,30,255,166,12,84,98,15,0,5,255,130,15,4,0,193,47,232,241,4,0,9,15,0,5,157,15,128,2,255,156,14,124,2,15,132,2,1,15,128,2,255,255,69,14,124,2,15,132,2,9,15,128,2,255,255,49,12,72,2,15,128,2,33,14,148,2,15,128,2,255,255,17,47,232,241,4,0,77,15,128,2,255,244,15,12,2,1,47,232,241,128,2,255,255,81,15,48,7,11,15,132,2,85,15,128,2,255,255,1,15,4,0,53,47,177,217,128,2,255,255,9,15,92,2,49,47,177,217,36,0,19,47,177,217,128,2,255,255,1,14,24,2,15,56,2,19,47,177,217,4,0,43,14,192,2,15,128,2,255,228,8,132,2,15,4,0,105,15,204,5,63,15,128,2,255,176,15,32,0,45,8,40,0,15,128,2,11,15,0,28,73,15,128,17,255,152,12,12,2,12,172,35,12,32,0,15,200,2,11,15,36,0,21,15,0,28,81,15,128,22,255,160,0,120,2,4,20,148,14,48,38,15,0,28,161,15,128,2,255,160,0,16,153,46,39,231,128,2,15,0,28,183,15,128,27,255,140,14,44,43,15,0,28,197,15,128,2,255,76,14,116,45,15,0,28,153,15,128,2,255,172,15,200,9,169,31,168,0,28,90,15,128,2,118,15,200,9,255,79,31,168,0,28,94,15,128,2,195,15,72,26,141,30,168,128,7,15,0,28,255,19,15,0,5,153,4,204,74,23,168,108,62,15,4,0,44,15,0,28,255,111,15,128,2,141,38,77,0,124,2,0,88,4,0,192,0,4,228,69,15,128,2,48,15,0,28,255,111,15,128,2,121,15,164,5,5,4,172,55,8,192,0,8,128,2,15,12,5,40,15,0,28,255,111,15,128,2,113,8,116,2,8,236,113,47,232,241,44,114,3,0,12,0,0,128,2,0,8,0,31,168,140,7,255,45,14,32,0,15,0,28,69,15,128,22,131,47,232,241,128,2,3,12,4,0,15,200,10,5,4,140,2,15,12,12,9,0,160,2,4,4,0,4,140,77,15,188,12,4,15,72,0,36,15,0,65,255,168,15,128,2,0,15,4,0,30,14,0,5,15,4,0,255,132,15,148,81,1,15,128,2,125,14,228,4,15,148,2,6,14,128,7,15,4,0,255,145,4,156,18,4,204,16,15,128,2,145,8,4,0,4,244,6,15,8,20,123,15,204,7,255,24,12,24,94,15,128,2,157,4,192,1,14,128,2,15,244,4,255,136,8,160,6,4,12,0,4,24,94,15,128,2,181,14,40,21,15,4,0,255,120,0,116,2,46,177,217,24,94,15,128,2,112,15,84,56,41,15,4,5,255,151,14,24,94,15,128,12,119,15,84,28,27,15,128,2,255,164,15,24,94,9,15,128,2,117,15,84,28,43,15,128,7,255,152,15,128,2,181,14,92,23,15,4,0,255,156,4,52,24,15,128,2,112,15,4,0,255,143,15,208,103,5,15,80,0,37,4,252,4,0,76,34,15,128,2,255,162,15,68,20,11,15,88,0,39,0,56,43,38,0,155,16,0,4,76,43,4,116,0,0,48,2,4,184,19,15,192,0,49,47,177,217,0,5,255,252,4,148,208,8,84,11,4,144,2,12,56,22,15,116,0,51,15,128,92,255,160,31,168,40,45,88,15,56,22,9,15,108,0,48,15,0,10,255,255,8,8,128,2,47,177,217,80,116,11,15,88,7,0,15,0,5,21,15,128,7,255,255,24,15,80,116,20,15,128,2,255,255,48,15,128,12,3,15,208,113,6,15,128,2,255,151,14,152,1,15,48,2,75,31,177,52,17,7,15,56,22,54,15,212,0,8,15,128,2,255,123,12,148,62,15,176,14,85,31,177,52,17,60,4,4,0,14,248,19,15,128,2,255,144,8,200,6,31,177,48,12,72,14,192,4,14,52,17,15,200,5,80,15,128,7,255,215,15,128,2,1,4,52,7,12,12,0,0,180,14,15,200,0,85,14,236,7,15,128,12,255,196,15,128,7,4,15,52,17,78,15,124,2,8,14,112,10,15,128,2,255,201,4,128,12,4,8,0,42,0,155,20,0,15,52,17,69,15,120,2,8,15,248,12,5,15,128,17,255,203,42,0,155,128,7,4,8,5,15,52,17,24,15,120,2,70,14,136,2,15,0,20,255,200,8,8,10,15,52,17,41,14,184,4,15,120,2,47,14,136,2,15,128,2,255,28,14,116,36,15,128,2,139,12,188,0,15,108,37,44,15,116,2,1,15,132,2,45,15,128,2,255,15,15,248,38,4,15,136,12,158,15,244,4,20,15,4,0,97,15,128,2,254,15,200,8,20,15,56,27,146,14,128,2,15,124,2,6,15,128,2,230,15,100,57,12,15,4,0,255,207,15,0,5,125,15,176,26,44,15,104,6,65,15,20,5,45,15,228,5,145,15,128,7,246,14,176,26,15,104,1,78,15,148,2,218,15,188,0,25,4,180,59,4,192,27,15,128,7,255,255,35,15,76,1,41,12,64,30,15,128,7,196,15,4,0,255,71,15,204,8,27,15,64,30,79,15,4,0,0,15,0,70,109,15,220,11,255,75,12,204,8,15,244,4,21,47,232,241,64,30,11,15,172,6,55,15,128,2,255,204,15,32,2,31,15,196,163,30,15,128,2,255,243,15,48,11,57,15,196,163,36,15,0,10,255,231,15,176,18,16,15,116,47,61,15,0,10,255,251,14,228,9,15,100,0,63,0,120,7,15,192,0,12,15,128,7,209,15,172,17,9,15,128,7,255,55,15,96,1,4,15,128,2,255,3,12,124,6,14,176,27,15,92,10,255,124,15,128,2,193,14,124,6,15,0,30,255,255,29,15,160,3,56,15,128,2,255,255,100,14,4,0,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,169,63,255,155,63,4,0,255,235,15,128,2,255,94,4,176,20,15,128,2,255,255,99,12,48,28,15,128,2,255,255,99,8,48,28,15,128,2,255,255,31,14,60,7,15,128,7,255,204,8,40,13,15,248,0,61,14,92,0,15,60,7,255,0,14,128,1,15,0,5,255,12,12,44,1,14,56,1,15,56,0,22,15,60,7,13,15,8,2,101,15,0,5,255,91,15,160,1,25,14,72,2,15,56,0,30,15,60,7,21,15,32,3,61,15,0,10,255,199,14,52,4,15,56,0,30,15,32,3,77,15,128,2,255,187,12,220,1,14,72,2,15,56,0,30,15,32,3,81,15,0,5,255,191,15,8,10,56,15,32,3,61,15,128,2,255,227,15,144,4,89,14,44,12,15,232,2,79,8,32,62,15,32,0,8,15,80,0,34,15,4,0,20,15,128,2,186,14,212,0,15,80,19,14,15,0,20,154,14,8,10,15,0,30,255,255,89,14,4,0,15,128,2,255,255,255,250,15,32,38,0,15,0,5,255,255,255,133,15,168,3,0,15,128,2,255,135,15,84,5,20,15,8,3,255,54,15,128,12,255,255,111,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,15,4,0,255,242,15,128,2,48,15,4,0,255,255,43,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,63,54,54,54,4,0,255,243,15,128,2,255,255,255,255,255,255,255,248,8,68,58,15,16,0,17,8,20,0,8,32,0,15,228,0,0,15,80,0,34,15,84,0,25,4,12,0,15,8,0,9,14,60,0,14,32,0,15,80,0,4,15,156,0,9,15,128,2,255,59,15,8,0,57,15,240,1,0,15,20,0,10,12,32,0,14,48,0,15,80,0,6,15,128,2,21,15,240,0,69,15,0,5,255,59,15,176,4,13,15,240,1,41,14,100,2,15,128,2,11,15,100,4,0,15,160,0,13,15,64,0,29,15,128,2,49,15,0,5,255,187,15,8,5,37,15,64,0,0,15,0,5,255,163,14,120,1,15,16,9,14,15,128,2,34,15,112,10,0,15,80,10,34,15,80,2,0,14,0,5,15,128,2,20,14,164,0,15,16,10,10,14,4,10,15,0,20,255,255,255,255,255,255,255,255,196,8,8,0,12,180,0,15,48,20,24,15,128,2,255,255,24,15,8,0,0,15,128,14,30,15,24,0,0,15,0,5,255,255,28,15,224,4,0,15,4,22,9,15,64,0,1,15,0,5,255,255,52,14,100,2,14,124,2,15,16,0,20,15,0,30,255,255,52,31,54,0,10,23,15,128,2,255,255,36,15,4,0,64,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,43,53,143,147,154,4,0,15,16,0,1,8,20,0,15,16,0,5,15,80,0,8,15,36,0,10,14,128,0,15,16,0,55,15,112,0,21,15,156,0,1,12,8,0,15,48,0,4,15,32,0,29,15,128,2,255,7,8,8,0,15,12,0,0,15,48,0,13,15,32,0,34,15,240,1,0,15,144,0,13,15,32,0,34,14,112,0,14,8,2,15,144,0,4,15,240,0,50,14,120,0,15,0,5,255,12,15,128,2,29,15,64,5,4,15,128,2,26,15,192,4,17,15,124,5,0,15,128,2,38,14,156,5,15,128,2,46,15,0,5,255,47,14,208,1,15,0,5,187,15,168,4,25,12,16,3,15,240,0,52,15,128,2,255,19,15,0,10,8,14,64,4,15,0,10,52,15,128,2,32,15,48,10,54,15,52,2,4,15,32,6,1,15,32,0,25,15,0,5,255,14,15,0,20,255,255,255,255,255,255,255,113,31,103,124,82,255,255,46,78,0,0,0,0,128,2,15,124,2,255,255,89,14,128,2,15,124,2,255,255,89,14,128,2,15,124,2,255,255,89,14,128,2,15,124,2,255,255,101,14,128,2,15,124,2,255,255,77,15,128,2,4,15,124,2,255,255,104,14,132,2,15,124,2,255,255,97,14,132,2,15,124,2,255,255,97,8,132,2,15,4,0,255,255,55,15,116,2,21,255,2,67,66,77,80,148,0,2,0,160,0,0,0,205,0,0,0,32,156,2,8,15,4,0,255,255,83,15,124,2,5,63,207,195,197,4,0,255,255,76,143,224,210,212,255,242,227,229,255,160,22,1,127,140,134,135,255,173,164,166,128,2,255,255,76,0,124,2,4,4,0,8,28,30,113,75,75,74,255,107,104,104,132,2,14,160,12,15,4,0,255,255,61,49,196,184,186,128,2,53,189,177,181,144,7,0,128,2,0,4,0,14,124,2,15,4,0,255,255,69,127,174,156,166,255,138,129,134,128,2,255,255,255,49,63,77,0,255,128,2,255,255,104,34,0,155,200,82,63,188,204,255,128,2,255,255,96,42,39,231,208,173,63,168,119,255,0,5,255,255,96,68,50,226,0,255,140,251,14,124,2,15,128,2,255,216,12,92,178,15,20,0,5,12,24,0,14,20,0,10,44,0,14,100,0,14,36,0,63,255,173,41,132,1,166,63,167,171,178,8,0,26,8,56,0,4,4,0,15,16,0,1,8,20,0,15,16,0,4,15,80,0,10,14,28,0,14,72,0,14,56,0,15,128,2,99,14,116,2,14,88,2,14,16,0,15,64,0,19,12,40,0,8,72,0,14,36,0,15,128,2,219,12,24,0,14,12,0,15,48,0,2,15,136,0,18,15,72,0,12,15,128,2,130,14,216,4,15,128,2,43,15,76,5,8,15,128,2,242,15,152,4,0,15,56,2,38,14,72,2,14,128,2,15,160,0,8,15,0,5,118,14,28,0,15,0,5,51,14,72,0,15,0,5,183,14,8,2,15,24,2,26,15,0,5,57,15,128,2,186,15,20,10,16,15,252,9,37,15,128,2,230,15,16,5,29,12,72,0,15,136,0,25,15,72,0,12,15,128,2,73,15,4,0,255,255,35,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,31,8,28,190,255,255,38,15,128,2,57,0,132,44,15,4,0,255,234,15,128,2,255,255,255,255,255,255,255,255,201,8,108,35,15,16,0,25,15,64,0,15,15,128,2,255,255,25,57,83,37,126,64,2,8,16,0,0,12,0,12,16,0,46,232,241,64,0,0,4,0,14,16,0,15,128,2,255,255,21,15,8,0,13,14,244,4,15,0,5,255,255,61,15,8,0,13,12,208,4,8,128,2,14,32,5,10,48,5,15,0,10,255,255,71,47,232,241,0,5,255,255,53,4,176,4,4,224,4,15,16,0,56,15,128,2,255,255,20,15,4,0,72,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,218,63,188,182,180,4,0,2,15,0,5,255,255,91,49,53,54,52,8,0,49,54,82,171,4,0,14,0,5,15,128,2,255,255,77,0,20,81,4,124,2,15,128,2,255,34,15,68,6,4,15,116,2,255,15,12,12,0,34,177,217,252,22,15,0,5,255,34,15,68,6,0,15,128,2,255,19,0,56,1,0,12,0,0,8,0,4,116,25,0,12,0,4,80,1,8,96,1,12,20,0,15,128,2,249,14,68,6,15,120,12,255,16,0,80,2,15,60,6,5,4,112,2,12,4,0,15,128,2,249,15,68,6,8,15,0,5,255,19,14,100,2,14,4,0,15,128,2,255,18,15,68,6,28,15,128,7,254,15,108,2,24,15,128,2,250,15,68,6,36,15,148,7,255,11,31,77,128,22,255,25,15,68,6,12,15,128,2,255,27,14,28,1,15,128,2,195,0,252,101,15,4,0,53,0,128,2,47,168,119,68,6,11,14,112,0,15,4,0,255,4,15,48,1,83,15,128,22,207,14,248,19,15,0,30,255,255,89,14,224,9,15,128,2,255,255,1,15,68,6,84,15,4,0,255,135,15,0,30,255,166,12,84,98,15,0,5,255,130,15,4,0,193,47,232,241,4,0,9,15,0,5,157,15,128,2,255,156,14,124,2,15,132,2,1,15,128,2,255,255,69,14,124,2,15,132,2,9,15,128,2,255,255,49,12,72,2,15,128,2,33,14,148,2,15,128,2,255,255,17,47,232,241,4,0,77,15,128,2,255,244,15,12,2,1,47,232,241,128,2,255,255,81,15,48,7,11,15,132,2,85,15,128,2,255,255,1,15,4,0,53,47,177,217,128,2,255,255,9,15,92,2,49,47,177,217,36,0,19,47,177,217,128,2,255,255,1,14,24,2,15,56,2,19,47,177,217,4,0,43,14,192,2,15,128,2,255,228,8,132,2,15,4,0,105,15,204,5,63,15,128,2,255,176,15,32,0,45,8,40,0,15,128,2,11,15,0,28,73,15,128,17,255,152,12,12,2,12,172,35,12,32,0,15,200,2,11,15,36,0,21,15,0,28,81,15,128,22,255,160,0,120,2,4,20,148,14,48,38,15,0,28,161,15,128,2,255,160,0,16,153,46,39,231,128,2,15,0,28,183,15,128,27,255,140,14,44,43,15,0,28,197,15,128,2,255,76,14,116,45,15,0,28,153,15,128,2,255,172,15,200,9,169,31,168,0,28,90,15,128,2,118,15,200,9,255,79,31,168,0,28,94,15,128,2,195,15,72,26,141,30,168,128,7,15,0,28,255,19,15,0,5,153,4,204,74,23,168,108,62,15,4,0,44,15,0,28,255,111,15,128,2,141,38,77,0,124,2,0,88,4,0,192,0,4,228,69,15,128,2,48,15,0,28,255,111,15,128,2,121,15,164,5,5,4,172,55,8,192,0,8,128,2,15,12,5,40,15,0,28,255,111,15,128,2,113,8,116,2,8,236,113,47,232,241,44,114,3,0,12,0,0,128,2,0,8,0,31,168,140,7,255,45,14,32,0,15,0,28,69,15,128,22,131,47,232,241,128,2,3,12,4,0,15,200,10,5,4,140,2,15,12,12,9,0,160,2,4,4,0,4,140,77,15,188,12,4,15,72,0,36,15,0,65,255,168,15,128,2,0,15,4,0,30,14,0,5,15,4,0,255,132,15,148,81,1,15,128,2,125,14,228,4,15,148,2,6,14,128,7,15,4,0,255,145,4,156,18,4,204,16,15,128,2,145,8,4,0,4,244,6,15,8,20,123,15,204,7,255,24,12,24,94,15,128,2,157,4,192,1,14,128,2,15,244,4,255,136,8,160,6,4,12,0,4,24,94,15,128,2,181,14,40,21,15,4,0,255,120,0,116,2,46,177,217,24,94,15,128,2,112,15,84,56,41,15,4,5,255,151,14,24,94,15,128,12,119,15,84,28,27,15,128,2,255,164,15,24,94,9,15,128,2,117,15,84,28,43,15,128,7,255,152,15,128,2,181,14,92,23,15,4,0,255,156,4,52,24,15,128,2,112,15,4,0,255,143,15,208,103,5,15,80,0,37,4,252,4,0,76,34,15,128,2,255,162,15,68,20,11,15,88,0,39,0,56,43,38,0,155,16,0,4]);fileData0.push.apply(fileData0,[76,43,4,116,0,0,48,2,4,184,19,15,192,0,49,47,177,217,0,5,255,252,4,148,208,8,84,11,4,144,2,12,56,22,15,116,0,51,15,128,92,255,160,31,168,40,45,88,15,56,22,9,15,108,0,48,15,0,10,255,255,8,8,128,2,47,177,217,80,116,11,15,88,7,0,15,0,5,21,15,128,7,255,255,24,15,80,116,20,15,128,2,255,255,48,15,128,12,3,15,208,113,6,15,128,2,255,151,14,152,1,15,48,2,75,31,177,52,17,7,15,56,22,54,15,212,0,8,15,128,2,255,123,12,148,62,15,176,14,85,31,177,52,17,60,4,4,0,14,248,19,15,128,2,255,144,8,200,6,31,177,48,12,72,14,192,4,14,52,17,15,200,5,80,15,128,7,255,215,15,128,2,1,4,52,7,12,12,0,0,180,14,15,200,0,85,14,236,7,15,128,12,255,196,15,128,7,4,15,52,17,78,15,124,2,8,14,112,10,15,128,2,255,201,4,128,12,4,8,0,42,0,155,20,0,15,52,17,69,15,120,2,8,15,248,12,5,15,128,17,255,203,42,0,155,128,7,4,8,5,15,52,17,24,15,120,2,70,14,136,2,15,0,20,255,200,8,8,10,15,52,17,41,14,184,4,15,120,2,47,14,136,2,15,128,2,255,28,14,116,36,15,128,2,139,12,188,0,15,108,37,44,15,116,2,1,15,132,2,45,15,128,2,255,15,15,248,38,4,15,136,12,158,15,244,4,20,15,4,0,97,15,128,2,254,15,200,8,20,15,56,27,146,14,128,2,15,124,2,6,15,128,2,230,15,100,57,12,15,4,0,255,207,15,0,5,125,15,176,26,44,15,104,6,65,15,20,5,45,15,228,5,145,15,128,7,246,14,176,26,15,104,1,78,15,148,2,218,15,188,0,25,4,180,59,4,192,27,15,128,7,255,255,35,15,76,1,41,12,64,30,15,128,7,196,15,4,0,255,71,15,204,8,27,15,64,30,79,15,4,0,0,15,0,70,109,15,220,11,255,75,12,204,8,15,244,4,21,47,232,241,64,30,11,15,172,6,55,15,128,2,255,204,15,32,2,31,15,196,163,30,15,128,2,255,243,15,48,11,57,15,196,163,36,15,0,10,255,231,15,176,18,16,15,116,47,61,15,0,10,255,251,14,228,9,15,100,0,63,0,120,7,15,192,0,12,15,128,7,209,15,172,17,9,15,128,7,255,55,15,96,1,4,15,128,2,255,3,12,124,6,14,176,27,15,92,10,255,124,15,128,2,193,14,124,6,15,0,30,255,255,29,15,160,3,56,15,128,2,255,255,100,14,4,0,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,169,63,255,155,63,4,0,255,235,15,128,2,255,94,4,176,20,15,128,2,255,255,99,12,48,28,15,128,2,255,255,99,8,48,28,15,128,2,255,255,31,14,60,7,15,128,7,255,204,8,40,13,15,248,0,61,14,92,0,15,60,7,255,0,14,128,1,15,0,5,255,12,12,44,1,14,56,1,15,56,0,22,15,60,7,13,15,8,2,101,15,0,5,255,91,15,160,1,25,14,72,2,15,56,0,30,15,60,7,21,15,32,3,61,15,0,10,255,199,14,52,4,15,56,0,30,15,32,3,77,15,128,2,255,187,12,220,1,14,72,2,15,56,0,30,15,32,3,81,15,0,5,255,191,15,8,10,56,15,32,3,61,15,128,2,255,227,15,144,4,89,14,44,12,15,232,2,79,8,32,62,15,32,0,8,15,80,0,34,15,4,0,20,15,128,2,186,14,212,0,15,80,19,14,15,0,20,154,14,8,10,15,0,30,255,255,89,14,4,0,15,128,2,255,255,255,250,15,32,38,0,15,0,5,255,255,255,133,15,168,3,0,15,128,2,255,135,15,84,5,20,15,8,3,255,54,15,128,12,255,255,111,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,48,15,4,0,255,242,15,128,2,56,15,4,0,255,255,35,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,63,54,54,54,4,0,255,243,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,230,49,93,85,88,4,0,0,132,2,15,128,82,255,255,95,4,124,2,0,4,0,0,120,2,78,0,0,0,0,128,2,15,124,2,255,255,89,14,128,2,15,124,2,255,255,93,14,128,2,15,124,2,255,255,93,14,128,2,15,124,2,255,255,93,14,128,2,15,124,2,255,255,93,12,128,2,63,75,65,68,124,2,255,255,92,9,132,2,111,65,68,255,75,56,63,4,0,255,255,52,15,124,2,25,9,132,2,47,56,63,4,0,255,255,56,14,124,2,15,132,2,19,15,4,0,255,255,55,15,116,2,21,208,67,66,77,80,244,0,0,0,32,0,0,0,7,132,2,7,28,0,31,5,1,0,49,31,13,1,0,4,3,31,0,31,6,55,0,5,3,8,0,34,7,6,1,0,27,13,8,0,15,155,0,49,0,252,0,19,84,244,0,27,8,252,0,115,0,0,6,6,6,7,6,9,0,3,18,0,4,26,0,15,88,1,113,15,1,0,44,4,88,1,13,8,0,15,183,1,12,31,13,88,1,46,15,96,1,1,15,88,1,27,19,69,84,1,12,88,1,0,73,0,0,196,0,15,173,1,0,1,23,0,5,105,0,15,77,0,17,9,88,0,4,75,0,0,2,0,3,3,0,3,14,0,6,84,0,15,77,0,22,21,6,86,0,2,63,0,4,83,0,15,77,0,33,2,223,0,25,6,77,0,3,91,0,47,0,0,154,0,35,27,6,154,0,31,6,154,0,32,4,74,0,1,34,0,36,6,0,150,0,28,13,65,3,14,129,1,15,1,0,40,0,77,0,83,101,0,0,0,9,4,0,15,77,0,7,20,7,8,0,36,7,7,8,0,40,7,7,8,0,4,26,0,20,7,44,0,4,42,0,15,109,0,30,5,57,0,15,9,0,6,1,117,0,22,7,106,0,7,18,0,15,109,0,27,19,7,2,0,12,232,0,15,18,0,13,11,54,0,15,218,0,22,40,0,7,66,0,9,9,0,4,209,0,9,89,1,14,74,1,15,180,1,33,12,10,0,4,45,1,22,7,118,0,3,100,0,4,85,2,15,180,1,38,10,69,0,9,162,1,15,32,0,1,31,7,109,0,32,14,253,1,15,9,0,5,15,33,2,48,14,77,1,15,10,0,23,11,218,0,147,148,0,2,0,160,0,0,0,205,227,6,7,31,0,31,255,4,0,255,255,119,14,203,20,15,4,0,255,255,69,15,124,2,255,255,107,14,132,2,14,124,2,15,132,2,255,255,86,15,128,2,255,255,255,255,255,179,63,77,0,255,128,2,255,255,104,34,0,155,127,179,63,188,204,255,128,2,255,255,96,42,39,231,3,182,63,168,119,255,0,5,255,255,96,49,50,226,0,124,2,62,169,112,132,124,2,15,128,2,255,217,12,143,186,15,20,0,5,12,24,0,14,20,0,10,44,0,14,100,0,14,36,0,63,255,173,41,124,1,166,63,167,171,178,8,0,26,8,56,0,4,4,0,15,16,0,1,8,20,0,15,16,0,4,15,80,0,10,14,28,0,14,72,0,14,56,0,15,128,2,99,14,116,2,14,88,2,14,16,0,15,64,0,19,12,40,0,8,72,0,14,36,0,15,128,2,219,12,24,0,14,12,0,15,48,0,2,15,136,0,18,15,72,0,12,15,128,2,130,14,216,4,15,128,2,43,15,76,5,8,15,128,2,242,15,152,4,0,15,56,2,38,14,72,2,14,128,2,15,160,0,8,15,0,5,118,14,28,0,15,0,5,51,14,72,0,15,0,5,183,14,8,2,15,24,2,26,15,0,5,57,15,128,2,186,15,20,10,16,15,252,9,37,15,128,2,230,15,16,5,29,12,72,0,15,136,0,25,15,72,0,12,15,128,2,65,15,4,0,255,255,43,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,15,56,57,255,255,47,15,64,0,49,63,139,138,136,4,0,255,235,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,44,15,4,0,255,242,15,128,2,48,15,4,0,255,255,43,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,63,54,54,54,4,0,255,243,15,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,157,14,60,2,15,128,2,255,255,89,15,124,2,44,15,128,2,45,15,124,2,255,255,52,15,128,2,40,15,124,2,255,255,52,15,128,2,40,15,124,2,255,255,52,15,128,2,40,15,124,2,255,255,52,15,128,2,40,15,124,2,255,255,52,15,128,2,40,15,124,2,255,255,52,15,128,2,40,15,124,2,255,255,52,15,128,2,40,15,124,2,255,255,52,15,128,2,40,15,124,2,255,255,47,15,128,82,255,255,68,15,192,107,32,15,124,2,255,255,108,14,128,2,15,124,2,255,255,40,15,128,2,37,15,124,2,255,255,108,14,128,2,15,124,2,255,255,32,15,128,2,45,15,124,2,255,255,108,14,128,2,15,124,2,255,255,28,15,132,2,53,15,124,2,255,255,108,14,132,2,15,124,2,255,255,12,15,4,0,255,255,188,255,3,67,66,77,80,20,6,0,0,48,0,0,0,32,0,0,0,8,0,1,0,89,31,6,1,0,24,15,47,0,28,47,6,6,47,0,17,79,7,7,7,7,24,0,5,31,7,48,0,23,46,7,7,49,0,15,119,0,12,31,5,48,0,27,63,5,5,5,48,0,25,16,5,1,0,15,144,0,4,15,192,0,48,17,13,47,0,63,13,6,6,60,1,14,2,13,0,18,13,1,0,14,87,1,12,124,0,18,7,26,1,20,6,47,0,30,5,49,0,9,12,1,0,47,0,6,25,1,2,13,0,14,48,0,1,83,0,14,73,1,13,75,0,47,7,7,96,0,23,5,183,0,15,192,0,2,6,123,0,4,192,0,5,135,0,9,60,1,10,73,1,8,87,1,5,35,2,4,60,1,2,34,0,9,73,1,8,27,0,6,231,0,7,47,0,39,6,6,47,0,5,87,1,14,243,1,15,64,2,4,15,243,1,24,13,160,2,9,183,0,15,0,3,17,14,47,0,15,160,2,68,14,48,0,14,173,0,15,49,0,0,15,173,0,22,30,6,129,4,15,225,4,65,15,158,5,79,15,28,6,255,255,79,16,14,1,0,15,28,6,23,0,46,0,63,5,14,14,28,6,22,0,47,0,0,48,0,31,6,28,6,20,0,47,0,10,48,0,14,28,6,15,96,0,0,15,28,6,22,4,192,0,15,28,6,22,1,32,1,15,28,6,255,255,255,255,232,10,197,4,2,42,6,31,6,56,12,21,1,104,5,47,14,14,56,12,22,2,201,5,31,14,56,12,22,9,42,6,14,56,12,15,96,0,5,15,56,12,22,8,192,0,15,56,12,18,7,42,6,15,28,6,255,255,255,138,14,197,4,15,48,0,10,46,14,14,49,0,15,155,0,9,2,94,10,15,48,0,25,8,239,10,15,48,0,16,1,220,3,15,144,0,4,15,192,0,48,10,239,10,15,84,18,255,255,255,255,255,255,43,15,28,6,255,69,10,171,19,15,28,6,14,4,252,7,14,28,6,15,92,8,22,14,243,1,14,188,8,15,111,5,0,15,28,9,23,14,111,5,15,188,8,68,31,6,28,6,255,255,255,107,9,199,3,15,28,6,15,9,248,3,15,28,6,16,12,9,18,15,28,6,13,0,135,4,7,48,0,15,28,6,11,15,96,0,23,5,51,1,14,192,0,15,28,6,12,8,184,4,15,56,12,255,255,255,255,255,153,4,226,5,15,96,0,20,5,19,6,15,56,12,20,5,163,6,15,56,12,20,5,91,11,15,28,6,20,6,3,7,15,28,6,19,14,139,11,14,28,6,14,71,20,15,28,6,255,255,219,14,31,3,14,28,6,14,48,0,15,196,42,255,255,255,255,220,83,69,0,0,0,7,4,0,15,28,6,1,86,6,9,9,9,6,7,0,2,153,0,0,176,1,3,14,0,15,77,0,27,3,63,0,72,5,5,5,6,14,0,31,6,77,0,33,4,22,0,241,2,9,7,15,0,0,0,10,7,7,7,14,0,0,0,11,7,13,22,0,31,12,231,0,28,0,239,1,6,7,0,15,231,0,44,70,12,12,12,6,7,0,15,77,0,43,35,13,13,7,0,63,13,13,13,7,0,2,15,52,1,27,18,7,6,0,18,7,6,0,8,14,0,4,28,0,15,77,0,30,4,64,0,3,79,0,47,7,7,77,0,33,1,145,4,15,7,0,8,31,0,231,0,35,18,7,6,0,46,7,7,175,0,15,206,1,22,70,10,10,10,6,7,0,15,2,3,46,3,7,0,6,64,4,11,7,0,15,77,0,16,34,8,8,3,0,83,8,8,8,7,8,1,0,2,15,0,1,29,0,23,8,30,3,15,129,1,21,33,11,11,5,0,66,11,11,11,0,4,0,2,18,0,17,0,5,0,5,7,0,15,77,0,16,18,10,6,0,33,10,10,5,0,65,10,7,10,10,8,0,37,10,0,7,0,5,37,0,15,77,0,14,49,9,9,9,7,0,33,1,9,13,0,49,1,9,9,20,0,65,9,9,0,9,14,0,4,1,0,15,77,0,18,32,4,4,40,0,85,2,2,2,7,2,7,0,85,8,8,8,15,8,7,0,16,2,1,0,15,154,0,19,17,8,16,0,85,12,12,8,12,12,7,0,3,129,1,10,21,0,15,52,1,18,5,159,2,22,7,7,0,17,6,21,0,2,15,2,2,6,0,15,29,5,29,1,140,0,40,12,8,154,0,1,14,0,3,7,0,15,52,1,23,0,252,7,0,135,3,50,8,8,14,7,0,22,8,7,0,30,0,156,3,15,129,1,25,85,14,14,14,15,14,7,0,15,129,1,24,98,15,15,15,0,0,15,7,0,3,7,15,1,9,0,32,0,15,252,5,1,223,0,3,7,0,15,52,1,24,7,93,3,15,79,3,44,102,0,6,8,8,8,6,7,0,15,54,4,43,33,1,1,3,0,32,8,8,3,0,17,1,154,0,1,15,0,32,8,1,29,0,34,8,1,37,0,4,238,13,82,1,0,0,16,0,4,0,9,77,0,25,32,1,0,71,0,32,32,7,1,0,72,32,32,32,7,31,0,31,7,16,0,159,11,208,0,12,240,0,0,28,1,38,120,0,128,4,8,28,1,10,9,1,2,81,0,15,10,0,52,5,1,0,0,128,0,19,84,120,0,27,8,128,0,1,161,0,0,8,0,38,7,7,8,0,5,169,1,1,236,0,7,15,0,26,7,44,0,63,32,32,32,92,0,9,12,93,0,20,32,8,0,11,64,1,3,34,0,27,32,91,0,31,0,92,0,10,3,93,0,19,32,85,0,35,32,7,8,0,21,32,117,0,3,10,0,0,24,0,19,7,8,0,36,32,32,56,0,15,184,0,14,26,32,85,0,8,152,0,9,216,0,9,99,0,31,32,184,0,4,15,93,0,23,15,91,0,5,47,0,32,184,0,16,35,0,0,62,0,2,99,1,4,115,1,5,26,2,8,12,0,2,45,0,39,7,32,55,0,15,92,0,12,8,93,0,6,227,2,42,7,7,4,0,7,60,2,8,53,0,15,92,0,13,5,93,1,3,84,0,42,0,32,80,0,35,32,7,140,2,37,7,7,39,0,8,201,4,15,96,3,5,49,0,0,16,1,0,0,9,0,2,231,8,16,16,10,0,1,110,17,15,10,0,16,6,50,0,1,38,14,5,20,0,21,16,90,0,15,128,0,14,19,0,38,0,69,0,0,16,7,58,0,63,6,15,15,10,0,19,6,50,0,38,7,7,20,0,21,16,90,0,15,0,1,15,0,39,0,4,9,0,6,58,0,15,10,0,50,3,90,0,15,0,1,22,7,206,0,15,10,0,13,20,7,10,0,5,246,0,20,7,119,0,13,1,1,15,0,2,32,10,10,0,20,7,10,0,20,7,10,0,20,7,10,0,5,246,1,35,7,7,129,0,17,16,155,17,8,1,2,15,128,0,139,10,128,1,6,88,1,21,7,88,2,3,10,0,24,7,10,0,20,6,10,0,4,148,1,5,117,0,1,51,0,14,128,1,15,128,2,19,5,57,0,31,7,10,0,1,15,108,2,1,14,30,0,15,128,2,39,7,206,0,36,14,14,88,2,15,10,0,3,15,128,3,21,15,128,4,110,15,128,0,244,16,36,231,11,3,4,0,15,106,24,6,15,44,0,32,16,245,242,11,3,4,0,15,194,24,14,5,190,7,2,14,0,1,170,0,5,53,7,17,6,30,0,0,18,0,1,42,0,53,6,32,32,30,7,67,32,7,7,13,4,8,2,14,0,0,15,0,47,7,32,15,0,3,3,82,20,7,30,0,1,61,10,15,15,0,32,3,16,0,31,32,192,0,2,0,253,0,94,19,1,0,0,17,253,0,15,1,0,51,26,17,1,0,58,0,17,7,1,0,116,17,17,7,7,13,13,7,2,0,2,17,0,7,34,0,16,13,17,0,7,33,0,17,13,17,0,15,68,0,0,17,7,48,1,2,69,0,14,34,0,13,136,0,31,0,190,20,50,15,1,0,14,15,189,8,29,1,146,18,47,5,16,10,0,24,2,40,2,10,20,0,14,189,3,15,128,0,51,6,108,0,14,118,0,14,61,4,15,128,0,53,15,118,0,7,15,189,4,63,15,88,1,11,7,118,0,15,61,5,68,15,118,0,7,15,189,5,83,15,118,0,7,15,128,0,89,15,61,7,255,46,4,69,1,15,128,0,91,11,60,3,31,0,128,0,83,15,40,4,6,15,0,1,74,15,40,4,7,15,128,0,73,14,10,5,15,0,1,81,15,148,5,21,11,148,0,15,128,2,44,15,10,6,27,15,128,1,0,15,128,6,64,15,138,7,26,13,128,0,15,77,8,7,5,186,12,23,16,44,13,19,16,30,14,4,14,0,21,16,42,0,0,77,0,98,184,31,0,0,90,0,4,0,47,8,0,1,0,255,25,0,196,23,1,2,0,0,8,0,2,213,23,0,3,0,12,38,0,4,34,0,47,0,14,90,0,23,3,2,0,1,51,0,23,14,16,0,15,38,0,0,31,0,90,0,27,47,14,0,90,0,17,20,14,4,0,15,180,0,69,31,0,180,0,26,4,143,0,3,90,0,47,14,0,90,0,5,4,138,1,15,28,2,113,15,1,0,9,15,38,0,15,31,0,1,0,255,255,255,37,15,63,3,71,7,124,4,15,90,0,62,1,55,6,15,180,0,69,15,90,0,68,47,14,14,90,0,72,14,31,6,15,28,2,58,15,1,0,255,255,255,194,31,13,1,0,62,47,0,0,126,9,255,255,255,131,31,0,126,9,69,47,14,0,180,0,156,14,233,14,15,126,9,255,255,255,255,255,216,0,28,1,1,4,0,17,0,85,51,1,12,0,9,24,0,34,13,0,28,0,7,48,0,54,0,0,5,28,0,5,40,0,28,13,90,0,9,2,0,0,16,0,7,114,0,7,32,0,38,0,13,48,0,53,0,5,0,28,0,4,27,0,8,126,0,14,180,0,4,136,0,5,114,0,3,176,0,13,180,0,0,90,0,23,13,90,0,3,4,0,12,180,0,8,62,0,6,122,0,47,13,0,180,0,5,31,0,180,0,21,39,0,0,100,1,4,72,1,4,180,0,6,128,1,8,48,0,0,94,48,6,28,0,7,12,0,31,0,182,13,255,88,15,1,0,255,255,255,255,224,15,13,32,10,2,148,58,31,5,1,0,1,18,13,6,0,4,54,5,2,6,0,15,167,40,17,2,195,13,15,184,28,2,3,179,69,7,77,0,147,20,50,1,0,144,0,0,0,136,210,67,4,69,0,113,59,51,73,255,64,49,62,4,0,63,0,0,2,4,0,28,31,0,16,0,255,141,15,4,0,65,81,0,255,80,49,58,4,0,8,60,2,14,64,2,15,36,2,22,15,84,2,255,221,6,64,2,0,4,0,15,64,2,8,15,86,117,255,249,15,64,2,25,30,1,56,2,15,4,0,255,247,31,1,64,2,12,29,0,64,2,63,255,173,41,4,0,86,63,83,43,29,4,0,34,15,108,0,89,14,124,0,15,108,0,43,15,152,0,0,15,4,0,122,15,64,2,27,14,180,6,15,32,2,65,15,220,1,77,14,68,0,15,56,0,35,15,184,0,9,15,68,2,213,15,64,2,31,31,1,64,2,78,15,156,1,8,14,24,0,15,92,1,84,15,124,0,0,15,44,2,1,15,16,3,9,15,72,2,57,15,64,2,255,3,15,156,1,25,14,72,1,15,104,1,2,15,132,6,94,15,116,5,53,15,144,0,16,15,64,2,160,15,0,9,87,15,132,4,0,15,44,0,9,15,192,8,106,15,72,2,0,15,116,5,50,15,68,2,145,14,72,11,15,0,9,103,15,88,4,12,15,248,10,126,15,16,2,4,15,68,2,38,14,192,0,15,68,2,18,15,64,11,246,14,12,2,15,124,6,67,15,48,2,40,15,204,6,117,15,0,9,255,7,15,176,6,8,15,224,5,33,15,32,2,65,15,244,0,117,15,0,9,255,3,14,20,4,15,216,3,14,15,100,4,21,15,60,2,142,14,164,0,15,68,2,14,15,0,9,156,14,44,0,15,136,3,85,14,8,2,15,144,1,18,14,132,4,15,124,4,160,31,255,64,20,255,21,15,100,1,44,15,180,6,1,15,4,0,177,15,64,20,205,15,4,0,255,103,15,0,9,160,15,64,2,255,55,15,228,9,12,15,72,2,25,15,0,9,157,15,64,2,255,59,14,44,14,15,236,11,34,15,64,2,255,223,14,108,4,15,108,16,46,15,64,11,145,15,64,2,255,59,15,56,2,4,15,64,2,37,15,0,9,255,219,15,248,1,4,15,64,2,41,15,192,6,255,215,31,83,40,32,3,15,0,9,255,255,8,15,40,11,0,15,68,2,17,15,64,2,29,15,0,9,255,159,14,232,1,15,24,39,35,14,56,2,14,200,31,15,0,9,255,194,15,24,2,8,15,152,25,33,15,80,36,49,15,192,6,206,53,170,204,255,4,0,15,156,6,217,31,255,48,41,43,15,36,27,25,15,64,2,194,8,56,2,0,4,0,34,232,241,4,0,15,72,2,92,15,48,41,206,15,128,4,193,15,56,2,1,47,232,241,68,2,186,15,188,51,226,15,0,9,0,15,64,2,58,14,116,4,15,64,2,199,15,224,1,44,15,196,33,25,15,128,4,210,15,60,2,21,47,232,241,16,9,10,15,88,2,214,14,252,6,15,72,2,14,15,64,2,198,15,60,2,7,15,132,4,207,31,255,48,41,55,15,128,31,226,15,60,2,7,15,132,4,18,15,148,24,226,31,83,48,41,55,15,64,2,230,14,132,4,15,124,4,223,15,48,7,52,15,64,2,255,179,15,244,4,104,15,64,2,255,255,40,14,76,2,15,64,11,162,15,64,2,255,251,53,67,49,61,4,0,15,192,15,39,15,64,2,255,255,33,14,68,2,14,80,2,15,64,2,255,255,15,14,68,2,15,76,20,22,15,64,2,255,255,40,14,140,13,15,192,6,255,255,1,15,80,11,255,58,14,60,18,15,64,11,182,15,64,2,255,91,12,68,2,15,64,2,149,15,248,1,1,14,64,2,15,68,2,5,15,12,9,255,52,15,64,2,189,8,252,1,15,4,0,23,15,4,9,255,48,8,72,2,15,64,2,173,15,72,2,21,12,36,0,14,136,13,15,196,24,255,140,15,64,2,101,15,40,0,11,15,124,4,255,148,15,64,2,81,15,192,33,19,15,60,2,255,52,15,64,2,235,15,180,6,6,15,64,11,255,227,15,64,2,53,47,170,204,156,13,10,15,12,9,255,111,15,64,2,117,15,4,9,3,15,36,18,18,15,64,2,255,255,48,14,68,2,15,192,24,255,120,53,71,49,60,4,0,15,64,11,71,15,104,20,50,15,64,2,255,235,15,128,4,7,15,68,2,26,15,4,18,255,95,15,64,2,121,15,68,2,31,15,72,18,18,15,64,2,255,219,15,184,22,17,15,80,2,32,15,64,2,255,223,14,24,9,15,68,2,46,15,64,2,255,99,53,72,50,59,4,0,15,44,0,1,15,220,1,0,15,212,6,137,15,64,2,255,147,47,170,204,204,6,85,15,64,2,255,200,47,170,204,64,2,83,15,224,31,11,15,64,2,231,63,0,163,255,64,2,174,15,68,2,53,31,255,200,76,208,8,4,0,0,252,1,15,64,2,49,14,68,2,15,64,2,159,15,68,2,47,15,60,13,219,34,0,163,52,1,14,68,2,15,68,0,31,4,72,0,15,64,2,173,47,170,204,60,2,255,20,8,88,5,46,0,163,68,2,15,64,2,233,47,170,204,56,2,255,12,4,248,1,15,4,0,59,15,64,2,111,38,75,53,4,0,15,64,2,15,15,248,44,33,15,60,2,75,14,140,22,15,64,2,223,14,68,2,15,64,2,179,4,28,13,15,128,4,53,14,240,4,15,56,36,6,15,60,2,129,15,64,2,255,31,15,212,6,16,15,60,2,58,12,72,2,15,60,2,213,14,68,2,15,192,6,203,15,68,2,0,15,168,56,69,15,60,2,113,15,64,2,255,47,15,248,1,11,15,160,2,45,15,136,4,14,15,64,2,255,63,53,78,48,57,4,0,15,64,2,61,14,16,2,15,4,0,235,15,232,1,1,49,2,0,0,4,0,15,28,2,3,15,52,0,42,15,64,2,129,15,4,0,255,39,47,0,163,64,2,218,15,0,117,255,63,14,188,6,15,196,6,159,15,64,2,45,63,199,195,194,4,0,255,35,14,60,2,15,68,2,86,15,128,4,255,179,15,64,2,245,63,156,118,131,128,4,255,159,14,68,2,15,64,2,59,53,76,48,57,4,0,15,64,2,17,0,12,10,15,168,1,133,0,160,0,14,228,2,15,60,2,147,63,54,82,171,4,0,18,15,72,2,40,15,64,2,114,4,68,2,14,72,2,15,56,2,111,8,160,0,15,124,4,245,14,68,2,15,64,2,102,15,164,1,130,12,60,2,14,68,2,15,60,2,106,15,64,2,255,3,8,216,16,15,244,1,44,15,56,2,62,14,36,5,15,60,2,247,14,68,2,15,128,4,103,4,164,1,14,4,2,15,108,6,79,15,60,2,16,14,228,2,15,60,2,128,15,156,20,51,15,64,2,119,53,77,55,58,4,0,15,64,2,17,12,4,0,15,240,1,40,15,56,2,50,15,68,2,1,4,16,0,14,188,54,15,4,0,71,15,56,2,27,15,72,2,53,15,64,2,99,53,73,47,57,4,0,15,64,2,16,15,4,0,70,15,204,4,8,15,96,0,49,15,124,4,118,14,40,25,15,68,2,151,15,64,2,73,8,236,3,15,4,0,133,15,124,4,107,15,108,27,85,15,64,2,167,15,68,2,144,15,64,2,255,135,15,4,0,157,4,240,1,15,32,9,63,15,64,2,109,15,0,9,18,15,64,2,255,47,15,156,4,79,15,64,2,127,14,128,22,15,64,2,255,60,15,72,2,9,0,64,1,8,8,0,15,64,2,255,255,11,4,68,2,12,44,2,14,60,2,15,132,4,13,15,64,2,255,160,0,40,1,15,68,2,65,15,60,2,13,63,81,135,0,64,2,12,15,60,2,171,15,64,2,5,53,70,46,57,4,0,15,64,2,173,38,0,163,180,1,15,68,2,41,0,44,1,8,12,0,4,64,2,8,68,2,12,140,4,12,64,2,5,116,1,15,64,2,60,63,79,87,95,64,2,255,47,63,168,119,255,128,4,26,8,16,2,15,64,2,33,12,4,0,8,80,2,4,16,0,8,68,2,8,28,0,12,200,1,42,81,135,72,46,12,16,0,15,60,2,68,15,64,2,246,34,168,119,172,1,15,68,2,9,0,148,1,15,68,2,0,15,20,0,26,4,68,0,0,16,0,0,12,0,15,92,1,13,4,64,2,12,40,0,12,232,46,15,64,2,25,0,48,2,8,4,0,15,60,2,21,0,84,0,15,64,2,17,0,40,0,4,4,0,15,28,0,8,15,128,4,218,8,252,1,4,0,1,8,72,4,15,48,2,5,8,60,1,8,60,0,8,64,2,15,72,2,13,8,40,0,0,124,1,14,40,49,14,224,1,4,44,0,15,76,2,1,0,16,25,8,164,18,14,120,2,15,116,4,3,8,252,1,15,4,0,1,12,32,2,15,4,0,16,15,64,2,6,53,68,46,57,4,0,53,80,58,58,4,0,15,64,2,137,0,208,0,63,54,228,0,32,0,10,8,60,2,15,96,4,4,15,172,6,14,14,116,1,6,64,2,15,84,2,5,4,48,0,4,12,9,14,68,2,6,64,2,15,232,1,13,12,64,2,14,120,2,14,72,0,15,12,2,21,15,68,2,33,15,64,2,181,12,60,2,12,16,0,14,192,6,10,220,8,12,36,4,12,132,4,12,72,4,14,180,3,15,208,3,3,49,77,0,255,4,0,15,156,13,0,15,4,0,34,15,64,2,0,15,4,0,57,15,64,2,222,4,40,2,15,124,4,17,15,24,0,5,4,48,2,0,152,8,8,20,0,15,228,5,0,15,184,3,22,4,56,2,47,77,0,224,15,7,47,77,0,4,0,23,15,64,2,255,74,4,4,0,15,92,2,0,15,64,2,10,4,28,0,42,2,0,28,2,47,54,228,228,5,23,15,132,4,0,14,120,4,15,112,4,0,15,68,2,9,4,144,6,15,28,0,1,12,64,2,63,83,37,126,64,2,255,11,14,88,4,14,60,2,15,136,4,5,8,8,2,15,20,2,5,8,96,2,4,80,0,15,76,1,37,14,240,1,15,64,2,31,4,188,8,46,39,236,68,2,15,64,2,5,0,4,0,14,172,4,15,64,2,103,53,62,45,57,4,0,15,64,2,153,14,4,0,15,64,2,3,12,180,4,14,64,2,15,60,2,51,8,68,2,15,64,2,1,12,252,1,12,52,13,15,68,2,1,12,192,15,8,64,0,4,136,0,15,64,2,121,53,77,58,62,4,0,15,64,2,0,15,12,11,98,12,36,2,14,64,2,15,76,2,10,15,44,0,18,47,54,228,60,2,51,15,4,0,25,15,236,19,3,15,40,9,30,15,64,2,186,0,68,3,15,212,8,37,15,104,4,4,15,4,0,38,14,60,2,15,64,2,43,8,244,3,15,68,2,69,14,160,6,15,60,2,10,15,64,2,186,34,39,236,188,5,14,68,2,15,88,13,27,15,64,2,9,0,56,20,14,84,2,15,4,0,59,15,112,4,0,15,4,0,74,15,60,2,25,8,144,0,15,64,2,65,47,54,228,128,4,151,15,104,4,29,8,184,24,15,68,2,77,46,54,228,60,2,15,4,0,109,14,60,2,15,64,2,171,14,236,10,14,184,19,15,96,15,9,47,81,135,168,6,31,34,168,119,60,1,15,64,2,81,8,188,1,14,20,0,15,64,2,103,14,236,1,15,12,2,23,47,54,228,64,2,135,15,156,17,13,8,64,2,14,16,11,15,216,8,25,15,60,2,91,8,68,2,15,64,2,8,15,96,2,42,15,60,0,9,46,54,228,104,13,15,100,14,3,15,64,2,51,12,104,1,15,64,2,73,15,184,8,0,15,52,22,5,14,20,11,15,4,0,164,12,240,1,4,156,4,14,160,4,15,60,2,23,14,60,0,6,56,2,14,212,1,15,64,2,39,14,56,0,15,64,2,7,47,54,228,128,4,19,53,58,44,57,4,0,53,76,59,66,4,0,15,64,2,25,8,192,19,15,228,19,12,15,64,2,214,14,52,0,15,40,0,2,15,240,4,18,31,54,252,11,32,15,24,0,3,15,40,19,9,15,64,2,79,15,116,4,4,15,64,2,6,8,132,0,14,124,4,15,4,0,231,14,184,4,15,48,7,6,15,220,7,34,47,81,135,28,19,25,15,64,2,95,15,192,0,15,15,184,8,5,15,4,0,255,16,14,52,2,15,88,14,63,14,184,1,14,0,7,15,64,2,91,15,48,2,5,15,4,0,255,128,15,120,4,5,47,81,135,64,2,47,53,74,60,70,4,0,15,64,2,3,15,4,0,255,148,15,16,11,9,47,54,228,64,2,255,255,17,47,54,228,12,2,1,15,128,4,31,31,54,192,15,16,53,56,44,57,4,0,15,64,2,255,186,47,54,228,64,2,43,14,64,20,15,64,2,255,224,14,144,4,15,116,22,5,15,64,2,255,255,17,15,68,2,13,47,54,228,64,2,255,252,14,76,17,15,232,8,5,15,64,2,255,255,13,14,12,0,15,128,4,255,255,29,47,54,228,124,31,17,15,64,2,255,255,5,14,4,0,15,64,2,255,255,25,47,54,228,64,2,31,47,54,228,64,2,43,53,73,61,74,4,0,15,64,2,45,0,148,41,15,64,2,255,138,47,54,228,64,2,135,8,136,71,15,64,2,255,122,46,54,228,64,2,15,128,4,255,255,11,31,54,252,35,18,14,128,22,15,64,2,85,0,48,47,15,128,31,7,15,84,2,255,120,14,240,35,15,64,2,111,8,176,51,15,212,6,255,154,14,88,2,15,24,18,13,15,128,4,75,47,81,135,212,6,255,160,14,64,2,15,12,0,7,8,44,0,15,64,2,49,15,16,14,29,14,180,0,14,64,2,15,28,9,255,134,13,0,4,15,64,2,52,47,54,228,12,0,9,15,64,2,255,152,15,160,1,11,15,64,2,71,15,76,34,17,47,54,228,4,0,255,192,15,128,4,57,15,60,7,7,15,64,2,255,184,47,81,135,192,6,95,47,81,135,128,4,255,255,17,15,64,11,7,15,64,2,255,255,17,15,4,0,19,15,64,2,255,243,15,4,0,255,253,15,64,2,255,255,255,255,147,63,59,51,73,64,2,255,255,40,0,60,2,147,67,66,77,80,45,0,0,0,5,4,0,41,8,0,1,0,17,13,4,0,6,2,0,32,0,13,18,0,0,53,0,83,100,1,0,0,42,49,0,8,53,0,31,8,1,0,41,19,2,1,0,13,25,0,33,15,15,4,0,35,15,15,12,0,69,2,2,15,15,43,0,32,2,2,57,0,16,8,2,0,17,8,33,0,5,2,0,0,29,0,35,15,15,43,0,16,8,32,0,3,4,0,0,42,0,47,15,15,42,0,8,1,84,0,3,47,0,8,82,0,44,15,8,126,0,40,8,2,84,0,3,4,0,33,8,15,96,0,9,210,0,6,130,0,31,2,19,1,24,15,108,1,95,2,0,1,22,8,180,0,1,1,0,0,242,0,2,125,1,4,57,1,5,205,0,3,123,1,3,83,0,1,70,1,4,137,1,2,141,1,5,159,1,15,42,0,3,5,217,1,41,8,8,82,0,44,2,8,126,0,40,8,15,84,0,4,83,1,2,255,1,9,210,0,39,15,15,126,0,15,108,1,26,23,84,104,1,15,108,1,6,3,249,1,3,161,0,40,8,8,8,0,4,24,0,6,40,0,15,92,0,27,35,15,15,6,0,3,76,2,8,8,0,4,24,0,6,40,0,15,92,0,27,0,1,0,73,14,14,14,14,8,0,1,10,0,23,14,24,0,0,20,0,2,8,0,47,8,14,92,0,27,0,210,1,9,8,0,1,10,0,23,15,24,0,3,151,1,2,208,0,97,67,80,65,76,0,3,75,0,255,81,29,43,83,126,37,83,0,135,81,171,82,54,95,87,79,194,195,199,255,241,232,255,0,77,255,163,0,255,236,39,0,228,54,41,173,255,131,118,156,255,119,168,255,204,170,12,18,35,53,41,83,94,61,82,42,121,74,152,83,60,119,114,109,209,206,207,255,180,193,255,40,57,255,181,9,191,214,42,10,214,104,63,159,230,162,118,159,255,140,168,200,161,130,2,4,8,3,0,88,17,9,3,0,15,48,0,29,9,54,0,63,3,5,10,48,0,10,12,60,0,14,48,0,15,150,0,11,56,3,5,10,3,0,254,81,41,24,20,17,29,53,66,33,54,18,83,89,116,47,41,73,51,59,162,136,121,243,239,125,190,18,80,255,108,36,168,231,46,0,181,67,6,90,181,117,70,101,255,110,89,255,157,129,52,35,31,41,31,53,54,45,62,42,74,77,105,48,45,95,72,74,182,161,122,229,183,113,206,40,69,233,138,38,126,218,51,1,158,95,33,85,161,151,80,98,255,121,99,208,135,109,128,1,15,3,0,251,0,100,3,83,101,0,0,0,9,4,0,47,8,0,1,0,3,52,7,7,7,8,0,36,7,7,8,0,47,7,7,9,0,1,5,36,0,6,54,0,3,69,0,15,109,0,19,14,91,0,15,9,0,26,15,109,0,28,3,2,0,15,18,0,44,15,109,0,14,81,16,16,16,16,0,4,0,32,7,7,5,0,4,9,0,2,22,0,25,16,41,0,1,4,0,3,36,0,23,16,18,0,15,218,0,27,15,73,0,16,6,127,0,10,145,0,0,9,0,4,181,0,15,109,0,54,15,2,1,17,0,109,0,98,184,31,0,0,90,0,4,0,47,8,0,1,0,255,25,65,14,14,14,0,2,0,18,14,4,0,17,0,8,0,13,38,0,4,34,0,47,0,14,90,0,23,3,2,0,1,51,0,23,14,16,0,15,38,0,0,31,0,90,0,27,47,14,0,90,0,17,20,14,4,0,15,180,0,69,31,0,180,0,26,4,143,0,3,90,0,47,14,0,90,0,5,4,138,1,15,28,2,113,15,1,0,9,15,38,0,15,31,0,1,0,255,239,19,13,137,15,19,13,139,15,23,13,12,0,15,89,0,43,9,233,15,10,12,0,15,90,0,52,1,167,0,25,13,12,0,15,180,0,55,12,190,0,7,1,0,15,63,3,33,4,92,1,5,172,0,6,196,0,9,95,4,5,124,4,15,1,0,60,2,185,4,15,90,0,67,31,0,90,0,70,47,14,14,90,0,72,14,31,6,15,147,5,48,15,91,5,122,4,18,3,2,196,2,57,5,0,0,16,0,15,44,3,47,3,74,0,22,5,32,3,14,90,0,15,89,0,36,2,8,0,15,90,0,58,9,74,0,8,180,0,47,13,13,104,1,56,20,5,238,3,8,115,0,15,44,7,255,182,15,1,0,61,47,0,0,126,9,255,239,2,7,0,12,8,0,31,0,69,5,56,47,0,0,70,5,58,11,164,0,6,235,4,15,84,6,55,14,180,0,15,126,9,43,12,143,5,12,112,1,25,0,126,9,31,0,126,9,69,31,14,90,0,52,15,180,0,86,14,233,14,15,126,9,191,1,66,12,3,4,0,8,37,2,15,202,8,51,8,244,12,4,118,9,15,90,0,52,45,13,13,124,3,15,180,0,64,5,230,3,15,90,0,54,11,57,4,14,90,0,15,1,0,55,15,126,9,255,255,255,40,5,20,5,3,161,33,4,28,5,6,44,5,10,108,4,2,20,8,22,5,28,0,12,84,5,6,42,0,47,0,13,88,17,2,42,13,13,116,17,46,0,13,172,13,4,24,0,5,12,0,15,180,0,6,12,28,5,5,110,17,12,180,0,3,19,15,5,90,0,14,249,18,15,22,18,2,8,204,0,15,180,0,1,31,0,180,0,21,5,34,0,10,194,18,42,13,0,128,1,26,0,19,15,7,28,0,7,12,0,31,0,182,13,255,88,15,1,0,255,255,255,255,224,15,178,37,9,128,0,0,1,1,0,0,1,7,4,0,19,1,8,0,35,7,1,8,0,27,7,8,0,25,1,40,0,1,56,0,15,92,0,9,34,7,1,38,0,1,49,0,1,8,0,34,1,7,8,0,27,7,8,0,4,24,0,4,40,0,2,56,0,0,92,0,17,55,216,33,15,139,42,3,2,202,5,8,182,7,4,19,0,80,13,13,0,0,0,99,70,73,76,0,0,0,0,76,53,0,0,112,111,100,47,102,95,112,105,99,111,56,46,112,111,100,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,147,8,0,0,241,24,67,80,79,68,68,0,0,0,1,0,0,0,47,104,111,109,101,47,122,101,112,47,112,97,98,97,47,112,105,99,111,56,47,112,111,100,47,102,95,12,0,1,37,0,15,1,0,8,247,2,67,66,77,80,35,0,0,0,3,0,0,0,5,0,0,0,8,28,0,66,255,255,255,255,5,0,1,12,0,15,43,0,11,79,0,0,255,0,43,0,24,31,0,43,0,19,2,128,0,15,129,0,17,3,169,0,15,43,0,16,0,123,0,18,255,128,0,15,86,0,15,47,0,255,129,0,21,4,216,0,15,129,0,18,4,85,0,15,129,0,2,15,174,1,7,15,43,0,52,47,255,255,215,0,25,2,5,1,15,172,0,58,2,125,0,15,129,0,22,0,176,1,31,0,43,0,20,6,1,0,15,172,0,12,5,40,0,15,88,1,4,14,9,3,15,43,0,18,5,2,0,15,43,0,18,31,0,43,0,22,2,3,0,15,43,0,14,21,255,92,1,47,0,0,219,2,15,6,94,1,15,4,2,16,2,220,2,15,133,2,16,4,225,3,15,178,3,18,2,7,2,31,255,219,2,17,31,255,6,3,25,2,92,1,15,43,0,19,1,47,1,15,172,0,13,47,0,255,219,2,18,7,0,2,14,172,0,15,49,3,38,24,0,129,1,15,172,0,54,6,45,2,1,6,0,15,135,3,15,5,48,2,15,129,0,12,4,6,1,31,0,86,0,14,2,169,2,47,255,255,47,2,14,7,84,1,15,131,1,18,47,0,255,4,2,18,23,255,92,1,15,215,0,15,4,173,2,15,215,0,3,14,137,3,47,0,255,4,2,23,14,135,3,15,43,0,2,3,56,6,15,90,2,24,31,255,51,4,15,5,1,1,15,16,8,17,4,56,4,15,229,7,17,3,8,1,15,57,7,15,5,95,2,15,100,7,16,31,255,94,4,20,7,185,4,15,227,6,20,31,255,16,8,16,7,15,6,15,16,8,17,15,129,0,21,31,255,86,0,21,15,215,0,21,4,222,2,3,6,0,15,43,0,21,47,255,0,47,2,16,3,54,3,31,0,100,7,16,5,6,0,15,88,1,12,5,13,7,14,133,2,15,4,2,5,15,221,3,16,4,176,2,47,0,0,188,8,15,15,10,5,20,5,183,4,14,180,4,15,86,0,5,31,0,129,0,18,21,255,175,0,31,255,145,8,17,31,255,86,0,21,3,43,0,14,94,4,15,172,0,2,15,215,0,19,47,255,0,45,1,24,30,255,8,4,15,43,0,14,15,18,9,17,4,48,1,15,43,0,14,6,152,11,15,20,10,19,14,86,0,15,174,1,9,31,0,90,2,16,14,217,1,15,133,2,14,15,178,3,16,3,67,11,15,90,2,21,47,255,0,172,0,20,3,7,0,15,174,1,21,47,0,255,192,10,23,15,90,2,23,15,86,0,22,31,255,176,2,19,5,150,8,15,90,2,17,31,255,2,1,22,31,0,184,6,18,7,10,6,31,255,10,5,17,31,255,96,5,17,10,101,7,15,149,10,12,15,192,10,22,10,224,0,31,67,61,9,14,15,75,16,27,14,49,3,15,14,7,5,15,137,4,17,47,255,255,221,3,21,8,175,3,15,243,14,20,3,235,7,15,43,0,22,47,0,0,172,0,20,15,188,8,15]);fileData0.push.apply(fileData0,[15,45,1,25,15,104,9,25,6,43,0,15,239,12,13,15,96,5,21,9,229,8,15,159,15,18,14,53,5,15,174,1,4,15,43,0,19,6,93,5,14,96,5,15,133,2,7,14,174,1,15,59,8,1,15,96,5,18,47,255,255,45,1,22,5,101,10,14,94,4,15,174,1,8,15,241,13,16,15,96,5,21,8,3,3,15,86,0,22,31,255,176,2,19,5,51,1,15,151,11,21,15,237,11,20,47,0,255,210,19,24,15,14,7,15,47,255,0,88,1,22,5,177,5,15,145,8,17,5,196,12,15,10,5,4,15,35,16,4,0,43,0,95,55,0,0,0,7,208,18,15,15,1,0,1,15,63,0,10,15,2,0,15,15,63,0,11,9,132,0,8,197,8,4,70,3,15,63,0,9,7,136,18,7,68,22,3,246,19,15,63,0,15,5,91,6,2,57,0,15,14,0,1,15,126,0,10,4,152,6,24,255,131,12,5,161,1,15,63,0,16,5,55,0,27,255,253,16,3,28,0,15,252,0,12,47,0,255,56,0,4,3,155,0,15,126,0,19,5,113,1,4,124,1,14,126,0,15,189,0,7,7,245,0,7,126,0,31,255,252,0,24,6,255,3,7,65,9,15,248,1,21,27,255,248,1,31,0,248,1,19,43,255,255,39,2,5,181,1,15,244,2,17,8,232,0,6,7,2,9,16,1,15,181,2,26,7,0,25,15,244,2,17,7,54,3,31,0,248,1,33,15,37,4,4,6,1,0,15,189,0,20,7,122,0,3,219,16,15,189,0,29,7,135,1,25,255,74,19,15,248,1,12,10,238,0,10,10,1,15,55,2,20,10,189,0,15,122,1,22,5,221,2,4,229,5,25,255,53,22,15,63,0,19,9,135,16,2,227,16,15,122,1,26,11,82,21,15,244,2,26,15,14,0,2,15,232,5,23,15,7,0,2,15,232,5,16,14,177,1,22,255,69,22,2,12,0,15,169,5,16,6,92,4,7,109,13,47,0,255,122,1,16,5,156,3,3,155,5,8,186,3,14,236,4,15,181,2,4,27,255,197,0,6,232,10,31,0,252,0,15,25,255,237,6,6,152,25,31,255,244,2,15,8,69,23,6,114,22,11,217,25,15,110,4,10,12,123,1,24,255,230,6,15,181,2,14,3,253,0,7,241,4,3,80,1,14,228,6,15,251,22,7,8,120,0,9,128,14,15,189,0,19,8,4,14,4,163,25,15,110,4,26,29,255,77,14,15,169,5,16,15,7,0,2,15,55,2,33,7,61,1,4,59,1,15,126,0,17,7,27,30,28,255,189,0,15,161,7,17,7,245,0,6,71,0,5,64,0,15,252,0,16,7,67,0,40,255,255,3,1,15,110,4,16,8,52,1,43,255,255,18,1,31,0,232,5,19,13,127,1,5,140,2,15,63,0,20,9,160,5,15,181,2,21,11,184,0,31,255,118,2,28,5,135,8,5,59,1,8,133,2,15,189,0,15,6,44,3,4,237,4,7,246,4,31,0,169,5,14,43,0,255,46,6,7,187,13,5,187,12,15,126,0,10,11,244,16,6,63,27,14,248,1,15,118,2,4,7,216,5,40,0,255,41,5,47,0,255,244,2,16,5,116,20,11,14,0,15,106,5,13,24,255,96,4,12,110,4,15,51,3,19,15,191,3,0,6,252,6,47,0,255,90,9,18,43,255,255,77,29,5,59,2,15,98,7,12,12,203,11,27,0,192,30,15,27,9,21,28,255,179,6,6,138,15,15,78,12,9,29,0,118,4,6,244,3,15,11,13,17,11,56,2,7,144,1,15,51,3,16,15,25,8,0,7,146,13,31,255,39,6,19,29,255,14,0,31,255,236,4,17,4,142,7,8,120,1,6,183,1,47,255,0,177,3,17,41,0,0,193,12,10,51,7,15,70,14,21,13,196,0,14,161,7,15,102,6,6,10,6,2,15,244,2,22,11,147,7,9,229,5,15,106,5,25,11,245,2,47,255,255,185,1,18,40,0,255,203,14,9,16,10,7,104,17,15,126,0,30,14,55,2,15,236,4,26,15,157,8,23,24,0,29,7,41,255,255,171,5,14,70,14,15,252,0,3,9,53,4,6,68,2,15,122,1,2,15,201,13,7,11,47,7,15,7,14,21,15,250,2,5,15,70,14,21,9,102,4,6,191,15,15,63,0,26,7,253,0,15,66,15,26,7,192,2,28,255,80,1,15,126,0,13,44,255,255,185,15,15,240,3,23,10,216,9,47,255,0,51,3,38,13,119,0,15,196,14,17,11,209,9,5,202,0,6,238,6,15,114,3,19,8,242,1,7,145,11,31,255,252,0,25,14,14,0,15,149,10,20,12,209,10,47,255,0,43,5,29,5,187,22,14,244,2,15,55,2,21,9,7,0,15,122,1,5,15,146,11,14,31,0,35,7,21,7,93,8,9,79,11,5,211,10,15,189,0,28,8,100,7,14,70,14,15,248,1,18,15,15,12,27,8,34,4,15,189,0,35,5,38,4,28,255,190,0,15,172,20,18,14,81,13,15,173,4,19,8,153,29,15,189,0,32,7,93,5,15,126,0,33,47,0,255,231,7,4,5,129,1,15,70,14,32,15,126,0,23,15,196,0,1,9,203,0,15,118,2,26,9,242,18,14,86,10,15,189,0,13,5,57,20,47,0,255,165,6,21,31,255,6,14,1,15,39,6,19,7,28,9,12,12,12,3,25,0,15,255,15,18,8,6,14,6,68,14,15,196,14,24,15,118,2,37,31,0,71,12,4,3,8,0,15,169,5,32,8,9,3,15,98,7,32,15,66,15,23,7,192,15,9,77,0,3,14,0,15,58,17,19,8,159,5,5,4,1,15,160,23,18,15,183,0,2,6,223,24,15,78,12,37,4,15,0,15,106,5,39,47,255,0,110,4,23,14,7,0,14,227,22,15,11,13,6,6,49,0,12,14,0,15,121,17,22,15,254,3,0,14,220,8,15,35,7,2,11,7,0,31,0,70,14,24,31,255,7,0,3,15,125,16,18,15,49,1,0,7,16,16,15,165,6,27,13,25,13,15,43,5,21,47,255,0,35,7,42,15,186,1,3,47,0,255,94,8,27,31,0,43,5,32,6,32,4,14,188,0,15,63,0,19,14,51,3,15,78,12,28,11,204,0,31,255,47,4,22,10,58,3,12,64,0,15,110,4,25,9,84,11,15,15,12,25,6,215,9,3,143,9,160,0,0,0,0,0,0,255,0,0,0]);Module["FS_createDataFile"]("/","data.pod",fileData0,true,true,false)}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[]})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end>_emscripten_get_heap_size()){abort()}HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var GLOBAL_BASE=8;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}return null}var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STACK_BASE=3145136,DYNAMIC_BASE=8388016,DYNAMICTOP_PTR=3145104;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||134217728;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var ASM_CONSTS=[function(){if(typeof _cartdat!=="undefined")return 1;return 0},function(){return _cartdat.length/32768},function(){_cdpos=_cdpos+1;return _cartdat[_cdpos-1]},function($0){ciii=$0;iii=0},function(){iii=iii+1;return _cartname[ciii].charCodeAt(iii-1)},function(){let stateObj={load_param_data:false};history.pushState(stateObj,"PICO-8","?")},function(){Module.pico8Reset=function(){codo_command=1};Module.pico8ToggleSound=function(){codo_command=3};Module.pico8TogglePaused=function(){codo_command=4};Module.pico8SetPaused=function(p){codo_command=5;codo_command_p=0;if(p)codo_command_p=1};Module.pico8ToggleControlMenu=function(){codo_command=7};Module.pico8DragOver=function(){codo_command=10};Module.pico8DragStop=function(){codo_command=11}},function(){function mkdir_0(d){try{stat=FS.stat(d)}catch(e){FS.mkdir(d)}}mkdir_0("/user_data");FS.mount(IDBFS,{},"/user_data");FS.syncfs(true,function(err){if(!err){console.log("codo: mounted filesystem.\n");codo_mounted_filesystem=1;mkdir_0("/user_data/cdata");mkdir_0("/user_data/cstore");mkdir_0("/user_data/carts");mkdir_0("/user_data/backup");mkdir_0("/user_data/plates");mkdir_0("/user_data/bbs");mkdir_0("/user_data/bbs/carts");mkdir_0("/user_data/bbs/labels")}else{console.log("** could not mount filesystem\n");console.log(err)}})},function(){var val=0;if(window.location.pathname.indexOf("widget.php")>=0)val=1;return val},function(){var val=0;if(window.location.pathname.indexOf("pico-8.php")>=0)val=1;return val},function($0,$1,$2,$3,$4,$5,$6,$7){if(typeof pico8_state!=="undefined"){pico8_state.is_paused=$0;pico8_state.sound_volume=$1;pico8_state.frame_number=$2;pico8_state.has_focus=$3;pico8_state.show_dpad=$4;pico8_state.request_pointer_lock=$5;pico8_state.require_page_navigate_confirmation=$6;pico8_state.shutdown_requested=$7}},function(){var val=0;if(typeof codo_command!=="undefined"){val=codo_command;codo_command=0}return val},function(){var val=0;if(typeof codo_command_p!=="undefined"){val=codo_command_p;codo_command_p=0}return val},function(){button_i=0},function(){var val=-1;if(typeof pico8_buttons!=="undefined"){val=pico8_buttons[button_i];button_i++}return val},function(){var val=0;if(typeof pico8_gamepads!=="undefined"){val=pico8_gamepads.count}return val},function(){if(typeof on_module_load!=="undefined"){if(on_module_load)on_module_load()}},function($0,$1,$2,$3){download_browser_file(UTF8ToString($0,$1),UTF8ToString($2,$3))},function($0,$1,$2,$3,$4,$5){if(typeof p8img!=="undefined"){p8img.src=""}p8img=document.createElement("img");p8img.src=UTF8ToString($0,$1);p8img.style="width:128px; height:128px; image-rendering: pixelated; -ms-interpolation-mode: nearest-neighbor;";if(typeof p8imgholder==="undefined"||!p8imgholder){p8imgholder=document.createElement("div");p8imgholder.style.cssText="min-width:160px; display:table; position:fixed; top:20px; left:20px; padding:12px; background-color:#000; box-shadow: 2px 2px 8px rgba(16, 0, 48, 0.4);";document.body.appendChild(p8imgholder)}if(p8imgholder){while(p8imgholder.childElementCount>0)p8imgholder.removeChild(p8imgholder.firstChild);var dismiss=document.createElement("div");dismiss.style.cssText="display:table; font-size:10pt; color:#fff; padding:4px; cursor:pointer; margin-left:10px; float:right";dismiss.addEventListener("click",function(){p8img.src="";while(p8imgholder.childElementCount>0)p8imgholder.removeChild(p8imgholder.firstChild);p8imgholder.style.display="none"},false);dismiss.innerHTML="X";p8imgholder.appendChild(dismiss);p8imgholder.appendChild(p8img);var info=document.createElement("div");info.innerHTML='
(right-click to save)
';p8imgholder.appendChild(info);if(p8imgholder.style.display=="none")p8imgholder.style.display=""}},function(){jsString=p8_dropped_cart;if(!jsString)return 0;var lengthBytes=lengthBytesUTF8(jsString)+1;var stringOnWasmHeap=_malloc(lengthBytes);stringToUTF8(jsString,stringOnWasmHeap,lengthBytes);return stringOnWasmHeap},function(){jsString=p8_dropped_cart_name;if(!jsString)return 0;var lengthBytes=lengthBytesUTF8(jsString)+1;var stringOnWasmHeap2=_malloc(lengthBytes);stringToUTF8(jsString,stringOnWasmHeap2,lengthBytes);return stringOnWasmHeap2},function($0,$1){if(typeof pico8_state!=="undefined"){if(typeof pico8_state.system_messages==="undefined")pico8_state.system_messages=new Array;pico8_state.system_messages.push(UTF8ToString($0,$1))}},function($0){var str=window.location.hostname;return allocate(intArrayFromString(str),"i8",ALLOC_NORMAL)},function($0,$1){if(typeof pico8_gpio!=="undefined")pico8_gpio[$0]=$1},function($0){var val=0;if(typeof pico8_gpio!=="undefined")val=pico8_gpio[$0];return val},function(){FS.syncfs(false,function(err){})},function(){var val=0;if(typeof codo_mounted_filesystem!=="undefined")val=1;return val},function(){return typeof p8_touch_detected==="undefined"||!p8_touch_detected?0:1},function(){return document.hidden?1:0},function(){if(typeof codo_key_buffer==="undefined")codo_key_buffer=[];document.addEventListener("keydown",function(e){var val=-1;if(e.key.length==1){val=e.key.charCodeAt(0)}else{if(e.key=="Tab")val=9;if(e.key=="Enter")val=13;if(e.key=="Backspace")val=8;if(e.key=="Escape")val=27;if(val==-1){}}var el=codo_textarea_el;codo_key_buffer.push(val)})},function(){addEventListener("mousedown",function(event){if(typeof pico8_state!=="undefined")if(event.target.tagName.toLowerCase()!="canvas"){pico8_state.clicked_outside=true}})},function(){document.addEventListener("wheel",function(e){dx=e.deltaX;if(dx<0)dx=-1;if(dx>0)dx=1;if(e.deltaMode==2)dx*=4;if(typeof codo_wheel_dx!=="undefined")codo_wheel_dx-=dx;dy=e.deltaY;if(dy<0)dy=-1;if(dy>0)dy=1;if(e.deltaMode==2)dy*=4;if(typeof codo_wheel_dy!=="undefined")codo_wheel_dy-=dy})},function($0){function audio_log(msg){if(window.console&&window.console.log){window.console.log("[codo] audio_init_webaudio "+msg)}}audio_log("audio_init");var codo_audio_context;if(typeof Module==="undefined")audio_log(" *** Module undefined");else if(typeof Module.ccall==="undefined")audio_log(" **** Module.ccall undefined");else{var webAudioAPI=window.AudioContext||window.webkitAudioContext||window.mozAudioContext||window.oAudioContext||window.msAudioContext;if(webAudioAPI){if(typeof pico8_audio_context!=="undefined"){codo_audio_context=pico8_audio_context;audio_log("found pico8_audio_context")}else if(typeof voxatron_audio_context!=="undefined"){codo_audio_context=voxatron_audio_context;audio_log("found voxatron_audio_context")}else{codo_audio_context=new webAudioAPI;audio_log("creating own audio context")}if(codo_audio_context){audio_log("Sample Rate: "+codo_audio_context.sampleRate);audio_log("Buffer Size: "+$0);node=codo_audio_context.createScriptProcessor($0,1,1);node.onaudioprocess=function(e){var data=e.outputBuffer.getChannelData(0);var r=22050/codo_audio_context.sampleRate;var len0=Math.floor(data.length*r);var len1=data.length;var ptr=Module.ccall("mix_0","number",["number","number"],[len0,len1]);for(var j=0;j0)ret=1;return ret},function(){return pico8_mouse[0]},function(){return pico8_mouse[1]},function(){if(typeof codo_key_buffer==="undefined")codo_key_buffer=[];return codo_key_buffer.length>0?1:0},function(){if(typeof codo_key_buffer==="undefined")codo_key_buffer=[];let val=codo_key_buffer.shift()|0;return val},function(){temp=typeof codo_wheel_dx!=="undefined"?codo_wheel_dx:0;codo_wheel_dx=0;return temp},function(){temp=typeof codo_wheel_dy!=="undefined"?codo_wheel_dy:0;codo_wheel_dy=0;return temp},function(){if(document.hidden)return 0;el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el==document.activeElement)return 1;el=document.activeElement;return!el||el.tagName.toLowerCase()!="input"&&el.tagName.toLowerCase()!="textarea"},function(){if(typeof pico8_state!=="undefined")if(pico8_state.clicked_outside){pico8_state.clicked_outside=false;return 1}return 0},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el.style.display!="none"){el.focus();el.select()}},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el.style.display!="none"){el.select()}},function(){return pico8_mouse[2]},function(){_dir_name=""},function($0){_dir_name=_dir_name+String.fromCharCode($0)},function(){FS.createPath("",_dir_name,true,true)},function(){Module["canvas"].exitPointerLock()},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el){}},function(){_codo_str_out=""},function($0,$1){_codo_str_out=Module.UTF8ToString($0,$1)},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el){el.value=_codo_str_out;return 0}else return 1},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el.style.display=="none"&&(typeof p8_touch_detected==="undefined"||!p8_touch_detected)){el.style.display="";el.focus();el.select()}},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el.style.display!="none"&&el.value!=""){_codo_text_value=el.value;return 1}return 0},function($0,$1){Module.stringToUTF8(_codo_text_value,$0,$1)}];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}function _emscripten_asm_const_ii(code,a0){return ASM_CONSTS[code](a0)}function _emscripten_asm_const_iii(code,a0,a1){return ASM_CONSTS[code](a0,a1)}function _emscripten_asm_const_iiiii(code,a0,a1,a2,a3){return ASM_CONSTS[code](a0,a1,a2,a3)}function _emscripten_asm_const_iiiiiii(code,a0,a1,a2,a3,a4,a5){return ASM_CONSTS[code](a0,a1,a2,a3,a4,a5)}function _emscripten_asm_const_iiiiiiiii(code,a0,a1,a2,a3,a4,a5,a6,a7){return ASM_CONSTS[code](a0,a1,a2,a3,a4,a5,a6,a7)}__ATINIT__.push({func:function(){___emscripten_environ_constructor()}});memoryInitializer="data:application/octet-stream;base64,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AAECAwQFBgcICQoLDA0ODwAAgIAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEhISEhISEhAAAAAAAAAAAAYCCAAAAAAAAA/wAAARITJBXWZ0hJmjvcXY7vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAABAAAABQAAAAEAAAAFAAAABQAAAAUAAAABAAAAAQAAAAEAAAAFAAAAAAAAAAEAAAADAAAABQAAAAQAAAACAAAACwAAAA8AAAAHAAAADAAAAA0AAAAJAAAACAAAAAYAAAAKAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAACQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAAAAAFpaAAAfUQAAfX0AAB64//+g+f//v1EAAMC1//+gmf//ILH//+Gg//9Am///APb//2Cx//8fGwAAwPX//1JJRka4MgAAV0FWRWZtdCAQAAAAAQABACJWAABErAAAAgAQAGRhdGEAAAAAAAAAAMRjAQDQYwEA3GMBAOhjAQD0YwEA/2MBAApkAQAWZAEAImQBAC5kAQA6ZAEARWQBAFBkAQAAAAAAAAAAAAAAAACFYwEAimMBAJBjAQCTYwEAmGMBAKJjAQCsYwEArmMBALBjAQCyYwEAtGMBALhjAQC6YwEAAAAAAAAAAAAAAAAA8WcBAPpnAQABaAEADWgBABdoAQAfaAEAKmgBADRoAQA+aAEAR2gBAE9oAQBZaAEAAAAAAAAAAAAAAAAAAAAAAMT8LwBiaAEAaGgBAG5oAQB0aAEAemgBAIBoAQCGaAEAAAAAAAAAAAAAAAAAAAAAAMT8LwCMaAEAm2gBAKxoAQC9aAEAzGgBAN5oAQD0aAEAxPwvAANpAQALaQEAFWkBAB9pAQAwaQEAO2kBAEppAQBjb2RvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQABAoKAAAACh8KHwofFB8FHxECBAgRCBQdEg0EBAAAAAQICAgEBAICAgQVDh8OFQQEHwQEAAAACBAAAB8AAAAAAAAEAQIECBAfERERHwQMBAQfHwEfEB8fAQcBHxERHwEBHxAfAR8QEB8RHx8BAQEBHxEfER8fER8BAQAEAAQAAAQABAgDDBAMAwAOAA4AGAYBBhgfAQcABB8RHRUdHxEfEREeER4RHw8QEBAPHhERER8fEBwQHx8QHhAQDhAQEQ8RER8REQ4EBAQOAgICEgwSFBgUEhAQEBAfERsVERERGRUTEQ4REREOHhEeEBAfERETHx4RHhERDxAOAR4fBAQEBBEREREOERERCgQRERUbEREKBAoREREOBAQfAgQIHwwICAgMEAgEAgEGAgICBgQKAAAAAAAAAB8EAgAAAB8RHxERHhEeER8PEBAQDx4REREfHxAcEB8fEB4QEA4QEBEPEREfEREOBAQEDgICAhIMEhQYFBIQEBAQHxEbFRERERkVExEOERERDh4RHhAQHxEREx8eER4REQ8QDgEeHwQEBAQRERERDhEREQoEEREVGxERCgQKERERDgQEHwIECB8EBAgEBAQEBAQEBAQCBAQFCgAAAAAAAAAfXHABAGBwAQBkcAEAaHABAGxwAQBxcAEAdnABAHtwAQCAcAEAhXABAIpwAQCPcAEAlHABAJlwAQCecAEAo3ABAKhwAQCtcAEAsnABALdwAQC8cAEAwXABAMZwAQDLcAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP7/AAD+/wAA/v8AAP7/AAD+/wAA/f8AAP3/AAD9/wAA/f8AAPz/AAD8/wAA/P8AAPz/AAD7/wAA+/8AAPv/AAD6/wAA+v8AAPr/AAD5/wAA+f8AAPn/AAD4/wAA+P8AAPf/AAD3/wAA9/8AAPb/AAD2/wAA9f8AAPX/AAD0/wAA9P8AAPP/AADz/wAA8v8AAPL/AADx/wAA8f8AAPD/AADw/wAA7/8AAO//AADu/wAA7f8AAO3/AADs/wAA7P8AAOv/AADq/wAA6v8AAOn/AADo/wAA6P8AAOf/AADm/wAA5v8AAOX/AADk/wAA4/8AAOP/AADi/wAA4f8AAOD/AADg/wAA3/8AAN7/AADd/wAA3P8AANz/AADb/wAA2v8AANn/AADY/wAA1/8AANb/AADV/wAA1f8AANT/AADT/wAA0v8AANH/AADQ/wAAz/8AAM7/AADN/wAAzP8AAMv/AADK/wAAyf8AAMj/AADH/wAAxv8AAMX/AADE/wAAwv8AAMH/AADA/wAAv/8AAL7/AAC9/wAAvP8AALv/AAC5/wAAuP8AALf/AAC2/wAAtf8AALT/AACy/wAAsf8AALD/AACv/wAArf8AAKz/AACr/wAAqf8AAKj/AACn/wAApv8AAKT/AACj/wAAov8AAKD/AACf/wAAnf8AAJz/AACb/wAAmf8AAJj/AACW/wAAlf8AAJT/AACS/wAAkf8AAI//AACO/wAAjP8AAIv/AACJ/wAAiP8AAIb/AACF/wAAg/8AAIL/AACA/wAAfv8AAH3/AAB7/wAAev8AAHj/AAB2/wAAdf8AAHP/AABx/wAAcP8AAG7/AABs/wAAa/8AAGn/AABn/wAAZv8AAGT/AABi/wAAYP8AAF//AABd/wAAW/8AAFn/AABY/wAAVv8AAFT/AABS/wAAUP8AAE7/AABN/wAAS/8AAEn/AABH/wAARf8AAEP/AABB/wAAP/8AAD3/AAA7/wAAOv8AADj/AAA2/wAANP8AADL/AAAw/wAALv8AACz/AAAq/wAAKP8AACX/AAAj/wAAIf8AAB//AAAd/wAAG/8AABn/AAAX/wAAFf8AABP/AAAQ/wAADv8AAAz/AAAK/wAACP8AAAb/AAAD/wAAAf8AAP/+AAD9/gAA+/4AAPj+AAD2/gAA9P4AAPH+AADv/gAA7f4AAOv+AADo/gAA5v4AAOT+AADh/gAA3/4AAN3+AADa/gAA2P4AANX+AADT/gAA0f4AAM7+AADM/gAAyf4AAMf+AADE/gAAwv4AAL/+AAC9/gAAuv4AALj+AAC1/gAAs/4AALD+AACu/gAAq/4AAKn+AACm/gAApP4AAKH+AACe/gAAnP4AAJn+AACX/gAAlP4AAJH+AACP/gAAjP4AAIn+AACH/gAAhP4AAIH+AAB+/gAAfP4AAHn+AAB2/gAAc/4AAHH+AABu/gAAa/4AAGj+AABm/gAAY/4AAGD+AABd/gAAWv4AAFf+AABV/gAAUv4AAE/+AABM/gAASf4AAEb+AABD/gAAQP4AAD3+AAA6/gAAN/4AADT+AAAx/gAALv4AACv+AAAo/gAAJf4AACL+AAAf/gAAHP4AABn+AAAW/gAAE/4AABD+AAAN/gAACv4AAAf+AAAE/gAAAf4AAP39AAD6/QAA9/0AAPT9AADx/QAA7v0AAOr9AADn/QAA5P0AAOH9AADd/QAA2v0AANf9AADU/QAA0P0AAM39AADK/QAAx/0AAMP9AADA/QAAvf0AALn9AAC2/QAAs/0AAK/9AACs/QAAqP0AAKX9AACi/QAAnv0AAJv9AACX/QAAlP0AAJD9AACN/QAAif0AAIb9AACD/QAAf/0AAHz9AAB4/QAAdP0AAHH9AABt/QAAav0AAGb9AABj/QAAX/0AAFv9AABY/QAAVP0AAFH9AABN/QAASf0AAEb9AABC/QAAPv0AADv9AAA3/QAAM/0AADD9AAAs/QAAKP0AACT9AAAh/QAAHf0AABn9AAAV/QAAEv0AAA79AAAK/QAABv0AAAL9AAD+/AAA+/wAAPf8AADz/AAA7/wAAOv8AADn/AAA4/wAAN/8AADc/AAA2PwAANT8AADQ/AAAzPwAAMj8AADE/AAAwPwAALz8AAC4/AAAtPwAALD8AACs/AAAqPwAAKT8AACg/AAAm/wAAJf8AACT/AAAj/wAAIv8AACH/AAAg/wAAH/8AAB7/AAAdvwAAHL8AABu/AAAavwAAGb8AABh/AAAXfwAAFn8AABV/AAAUfwAAEz8AABI/AAARPwAAD/8AAA7/AAAN/wAADP8AAAu/AAAKvwAACb8AAAh/AAAHfwAABj8AAAU/AAAEPwAAAv8AAAH/AAAAvwAAP77AAD6+wAA9fsAAPH7AADs+wAA6PsAAOP7AADf+wAA2vsAANb7AADR+wAAzfsAAMj7AADE+wAAv/sAALv7AAC2+wAAsfsAAK37AACo+wAApPsAAJ/7AACa+wAAlvsAAJH7AACM+wAAiPsAAIP7AAB++wAAevsAAHX7AABw+wAAa/sAAGf7AABi+wAAXfsAAFj7AABU+wAAT/sAAEr7AABF+wAAQPsAADz7AAA3+wAAMvsAAC37AAAo+wAAI/sAAB/7AAAa+wAAFfsAABD7AAAL+wAABvsAAAH7AAD8+gAA9/oAAPL6AADt+gAA6PoAAOP6AADe+gAA2foAANT6AADP+gAAyvoAAMX6AADA+gAAu/oAALb6AACx+gAArPoAAKf6AACh+gAAnPoAAJf6AACS+gAAjfoAAIj6AACD+gAAffoAAHj6AABz+gAAbvoAAGn6AABj+gAAXvoAAFn6AABU+gAATvoAAEn6AABE+gAAPvoAADn6AAA0+gAAL/oAACn6AAAk+gAAH/oAABn6AAAU+gAADvoAAAn6AAAE+gAA/vkAAPn5AADz+QAA7vkAAOj5AADj+QAA3vkAANj5AADT+QAAzfkAAMj5AADC+QAAvfkAALf5AACy+QAArPkAAKb5AACh+QAAm/kAAJb5AACQ+QAAivkAAIX5AAB/+QAAevkAAHT5AABu+QAAafkAAGP5AABd+QAAWPkAAFL5AABM+QAARvkAAEH5AAA7+QAANfkAADD5AAAq+QAAJPkAAB75AAAY+QAAE/kAAA35AAAH+QAAAfkAAPv4AAD1+AAA8PgAAOr4AADk+AAA3vgAANj4AADS+AAAzPgAAMb4AADA+AAAuvgAALT4AACv+AAAqfgAAKP4AACd+AAAl/gAAJH4AACL+AAAhfgAAH74AAB4+AAAcvgAAGz4AABm+AAAYPgAAFr4AABU+AAATvgAAEj4AABC+AAAO/gAADX4AAAv+AAAKfgAACP4AAAd+AAAFvgAABD4AAAK+AAABPgAAP73AAD39wAA8fcAAOv3AADl9wAA3vcAANj3AADS9wAAy/cAAMX3AAC/9wAAuPcAALL3AACs9wAApfcAAJ/3AACZ9wAAkvcAAIz3AACF9wAAf/cAAHn3AABy9wAAbPcAAGX3AABf9wAAWPcAAFL3AABL9wAARfcAAD73AAA49wAAMfcAACv3AAAk9wAAHvcAABf3AAAQ9wAACvcAAAP3AAD99gAA9vYAAO/2AADp9gAA4vYAANv2AADV9gAAzvYAAMf2AADB9gAAuvYAALP2AACt9gAApvYAAJ/2AACY9gAAkvYAAIv2AACE9gAAffYAAHf2AABw9gAAafYAAGL2AABb9gAAVPYAAE72AABH9gAAQPYAADn2AAAy9gAAK/YAACT2AAAd9gAAFvYAABD2AAAJ9gAAAvYAAPv1AAD09QAA7fUAAOb1AADf9QAA2PUAANH1AADK9QAAw/UAALz1AAC19QAArvUAAKb1AACf9QAAmPUAAJH1AACK9QAAg/UAAHz1AAB19QAAbvUAAGb1AABf9QAAWPUAAFH1AABK9QAAQ/UAADv1AAA09QAALfUAACb1AAAe9QAAF/UAABD1AAAJ9QAAAfUAAPr0AADz9AAA6/QAAOT0AADd9AAA1fQAAM70AADH9AAAv/QAALj0AACx9AAAqfQAAKL0AACa9AAAk/QAAIz0AACE9AAAffQAAHX0AABu9AAAZvQAAF/0AABX9AAAUPQAAEj0AABB9AAAOfQAADL0AAAq9AAAI/QAABv0AAAT9AAADPQAAAT0AAD98wAA9fMAAO3zAADm8wAA3vMAANfzAADP8wAAx/MAAMDzAAC48wAAsPMAAKjzAACh8wAAmfMAAJHzAACK8wAAgvMAAHrzAABy8wAAavMAAGPzAABb8wAAU/MAAEvzAABD8wAAPPMAADTzAAAs8wAAJPMAABzzAAAU8wAADPMAAATzAAD98gAA9fIAAO3yAADl8gAA3fIAANXyAADN8gAAxfIAAL3yAAC18gAArfIAAKXyAACd8gAAlfIAAI3yAACF8gAAffIAAHXyAABt8gAAZfIAAF3yAABU8gAATPIAAETyAAA88gAANPIAACzyAAAk8gAA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r8cAAKDHAACQxwAAgMcAAHDHAABhxwAAUccAAEHHAAAxxwAAIccAABLHAAACxwAA8sYAAOLGAADSxgAAwsYAALPGAACjxgAAk8YAAIPGAABzxgAAY8YAAFPGAABExgAANMYAACTGAAAUxgAABMYAAPTFAADkxQAA1MUAAMTFAAC0xQAApMUAAJTFAACExQAAdMUAAGTFAABUxQAARMUAADTFAAAkxQAAFMUAAATFAAD0xAAA5MQAANTEAADExAAAtMQAAKTEAACUxAAAg8QAAHPEAABjxAAAU8QAAEPEAAAzxAAAI8QAABPEAAACxAAA8sMAAOLDAADSwwAAwsMAALHDAAChwwAAkcMAAIHDAABxwwAAYMMAAFDDAABAwwAAMMMAAB/DAAAPwwAA/8IAAO7CAADewgAAzsIAAL7CAACtwgAAncIAAI3CAAB8wgAAbMIAAFzCAABLwgAAO8IAACrCAAAawgAACsIAAPnBAADpwQAA2MEAAMjBAAC4wQAAp8EAAJfBAACGwQAAdsEAAGXBAABVwQAARMEAADTBAAAjwQAAE8EAAALBAADywAAA4cAAANHAAADAwAAAsMAAAJ/AAACPwAAAfsAAAG7AAABdwAAATMAAADzAAAArwAAAG8AAAArAAAD5vwAA6b8AANi/AADHvwAAt78AAKa/AACVvwAAhb8AAHS/AABjvwAAU78AAEK/AAAxvwAAIb8AABC/AAD/vgAA7r4AAN6+AADNvgAAvL4AAKu+AACbvgAAir4AAHm+AABovgAAV74AAEe+AAA2vgAAJb4AABS+AAADvgAA8r0AAOK9AADRvQAAwL0AAK+9AACevQAAjb0AAHy9AABrvQAAWr0AAEq9AAA5vQAAKL0AABe9AAAGvQAA9bwAAOS8AADTvAAAwrwAALG8AACgvAAAj7wAAH68AABtvAAAXLwAAEu8AAA6vAAAKbwAABi8AAAHvAAA9rsAAOW7AADUuwAAw7sAALG7AACguwAAj7sAAH67AABtuwAAXLsAAEu7AAA6uwAAKLsAABe7AAAGuwAA9boAAOS6AADTugAAwboAALC6AACfugAAjroAAH26AABrugAAWroAAEm6AAA4ugAAJroAABW6AAAEugAA87kAAOG5AADQuQAAv7kAAK65AACcuQAAi7kAAHq5AABouQAAV7kAAEa5AAA0uQAAI7kAABK5AAAAuQAA77gAAN24AADMuAAAu7gAAKm4AACYuAAAhrgAAHW4AABkuAAAUrgAAEG4AAAvuAAAHrgAAAy4AAD7twAA6bcAANi3AADGtwAAtbcAAKO3AACStwAAgLcAAG+3AABdtwAATLcAADq3AAAptwAAF7cAAAW3AAD0tgAA4rYAANG2AAC/tgAArbYAAJy2AACKtgAAebYAAGe2AABVtgAARLYAADK2AAAgtgAAD7YAAP21AADrtQAA2rUAAMi1AAC2tQAApbUAAJO1AACBtQAAb7UAAF61AABMtQAAOrUAACi1AAAXtQAABbUAAPO0AADhtAAA0LQAAL60AACstAAAmrQAAIi0AAB3tAAAZbQAAFO0AABBtAAAL7QAAB20AAALtAAA+rMAAOizAADWswAAxLMAALKzAACgswAAjrMAAHyzAABqswAAWLMAAEezAAA1swAAI7MAABGzAAD/sgAA7bIAANuyAADJsgAAt7IAAKWyAACTsgAAgbIAAG+yAABdsgAAS7IAADmyAAAnsgAAFbIAAAOyAADwsQAA3rEAAMyxAAC6sQAAqLEAAJaxAACEsQAAcrEAAGCxAABOsQAAO7EAACmxAAAXsQAABbEAAPOwAADhsAAAzrAAALywAACqsAAAmLAAAIawAAB0sAAAYbAAAE+wAAA9sAAAK7AAABiwAAAGsAAA9K8AAOKvAADPrwAAva8AAKuvAACZrwAAhq8AAHSvAABirwAAT68AAD2vAAArrwAAGK8AAAavAAD0rgAA4a4AAM+uAAC9rgAAqq4AAJiuAACFrgAAc64AAGGuAABOrgAAPK4AACmuAAAXrgAABa4AAPKtAADgrQAAza0AALutAACorQAAlq0AAIOtAABxrQAAXq0AAEytAAA5rQAAJ60AABStAAACrQAA76wAAN2sAADKrAAAuKwAAKWsAACTrAAAgKwAAG2sAABbrAAASKwAADasAAAjrAAAEawAAP6rAADrqwAA2asAAMarAACzqwAAoasAAI6rAAB7qwAAaasAAFarAABDqwAAMasAAB6rAAALqwAA+aoAAOaqAADTqgAAwaoAAK6qAACbqgAAiKoAAHaqAABjqgAAUKoAAD2qAAAqqgAAGKoAAAWqAADyqQAA36kAAM2pAAC6qQAAp6kAAJSpAACBqQAAbqkAAFypAABJqQAA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hBYAAIgWAACLFgAAjxYAAJMWAACWFgAAmhYAAJ4WAAChFgAApRYAAKkWAACsFgAAsBYAALQWAAC3FgAAuxYAAL8WAADCFgAAxhYAAMoWAADNFgAA0RYAANUWAADYFgAA3BYAAOAWAADjFgAA5xYAAOsWAADuFgAA8hYAAPYWAAD5FgAA/RYAAAAXAAAEFwAACBcAAAsXAAAPFwAAExcAABYXAAAaFwAAHRcAACEXAAAlFwAAKBcAACwXAAAwFwAAMxcAADcXAAA6FwAAPhcAAEIXAABFFwAASRcAAEwXAABQFwAAVBcAAFcXAABbFwAAXhcAAGIXAABmFwAAaRcAAG0XAABwFwAAdBcAAHgXAAB7FwAAfxcAAIIXAACGFwAAiRcAAI0XAACRFwAAlBcAAJgXAACbFwAAnxcAAKIXAACmFwAAqhcAAK0XAACxFwAAtBcAALgXAAC7FwAAvxcAAMIXAADGFwAAyRcAAM0XAADRFwAA1BcAANgXAADbFwAA3xcAAOIXAADmFwAA6RcAAO0XAADwFwAA9BcAAPcXAAD7FwAA/hcAAAIYAAAGGAAACRgAAA0YAAAQGAAAFBgAABcYAAAbGAAAHhgAACIYAAAlGAAAKRgAACwYAAAwGAAAMxgAADcYAAA6GAAAPhgAAEEYAABFGAAASBgAAEwYAABPGAAAUxgAAFYYAABaGAAAXRgAAGAYAABkGAAAZxgAAGsYAABuGAAAchgAAHUYAAB5GAAAfBgAAIAYAACDGAAAhxgAAIoYAACOGAAAkRgAAJQYAACYGAAAmxgAAJ8YAACiGAAAphgAAKkYAACtGAAAsBgAALMYAAC3GAAAuhgAAL4YAADBGAAAxRgAAMgYAADMGAAAzxgAANIYAADWGAAA2RgAAN0YAADgGAAA4xgAAOcYAADqGAAA7hgAAPEYAAD1GAAA+BgAAPsYAAD/GAAAAhkAAAYZAAAJGQAADBkAABAZAAATGQAAFxkAABoZAAAdGQAAIRkAACQZAAAoGQAAKxkAAC4ZAAAyGQAANRkAADgZAAA8GQAAPxkAAEMZAABGGQAASRkAAE0ZAABQGQAAUxkAAFcZAABaGQAAXRkAAGEZAABkGQAAaBkAAGsZAABuGQAAchkAAHUZAAB4GQAAfBkAAH8ZAACCGQAAhhkAAIkZAACMGQAAkBkAAJMZAACWGQAA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xPwvACZ4AQAveAEAxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AQHgBAEl4AQBQeAEAV3gBAF14AQAmdgEAY3gBAG14AQBxeAEAdngBAIR4AQCKeAEAxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwCQeAEAmngBAKV4AQC4eAEAyXgBANZ4AQDmeAEA73gBAPh4AQABeQEACnkBABV5AQAmeQEAL3kBADh5AQBBeQEASnkBAFN5AQBceQEAZ3kBAHB5AQB5eQEAgnkBAIt5AQCUeQEAnnkBAKd5AQCxeQEAunkBAMN5AQDQeQEA2XkBAOJ5AQDyeQEAA3oBABN6AQAhegEANHoBAEd6AQBYegEAY3oBAHB6AQCCegEAkHoBAJ16AQCsegEAxPwvAMT8LwC/egEAyXoBANR6AQDdegEA5noBAPF6AQD9egEAB3sBAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwARewEAHHsBACZ7AQAwewEAOnsBAER7AQBOewEAWnsBAF57AQBjewEAbnsBAHd7AQCBewEAiXsBAJF7AQCcewEApHsBAK97AQC8ewEAy3sBANh7AQDmewEA9XsBAAJ8AQANfAEAE3wBABl8AQAefAEAI3wBAC98AQDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8A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dAIAAG8CAABrAgAAZgIAAGICAABcAgAAWQIAAFUCAABQAgAATAIAAEgCAABEAgAAPwIAADoCAAA3AgAAMwIAAC8CAAArAgAAJwIAACMCAAAfAgAAGgIAABcCAAAUAgAAEAIAAAwCAAAIAgAABAIAAAECAAD8AQAA+QEAAPYBAADyAQAA7gEAAOsBAADnAQAA5AEAAOABAADdAQAA2gEAANYBAADTAQAAzwEAAMwBAADJAQAAAgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADAFAAAwBUAAMAWAADAFwAAwBgAAMAZAADAGgAAwBsAAMAcAADAHQAAwB4AAMAfAADAAAAAswEAAMMCAADDAwAAwwQAAMMFAADDBgAAwwcAAMMIAADDCQAAwwoAAMMLAADDDAAAww0AANMOAADDDwAAwwAADLsBAAzDAgAMwwMADMMEAAzTAAAAABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRv////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAACgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUFAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAHhdHQAABAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAK/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////8iIgIA9gEAABmTDQoaCgAAfQYAAP/////vvq3eZ0UjAQEAAAD/////CQAAAO++rd5nRSMBh3QBAP////8ABAAAAQAAAAAAPAABAAAAAQAAAIAAAACAAAAAsIYAALCGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIj8LwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX3CJAP8JLw9WkwEAxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8Af39/f39/f39/f39/f38AAHJvb3RfcGF0aABjZGF0YV9wYXRoAGpveXN0aWNrX2luZGV4AGJ1dHRvbl9rZXlzACAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZABsaXZlX25vdGVzAGN1cnNvcl9zbmFwAGd1aV90aGVtZQBzaGlmdF9nbHlwaHMAc2hvd19iYWNrdXBfbWVzc2FnZXMAaG9zdF9mcmFtZXJhdGVfY29udHJvbABjb250ZW50X2ZpbHRlcgByZWNvcmRfYWN0aXZpdHlfbG9nAGFsbG93X2Z1bmN0aW9uX2tleXMAY2hlY2tfZm9yX2NhcnRfdXBkYXRlcwBlbmFibGVfZ3BpbwBmbGlwX2FtcGVyc2FuZABhdXRvX2hpZGVfbW91c2VfY3Vyc29yAGFnZ3Jlc3NpdmVfYmFja3VwcwBwZXJpb2RpY19iYWNrdXBzAHRyYW5zZm9ybV9zY3JlZW4AZ2Z4X2dyaWRfbGluZXMAdmVyc2lvbiAlcwoKADAuMi41ZwAvLyBhdWRpbyB2b2x1bWU6IDAuLjI1NiAKAHZvbHVtZSAlZAoKAAovLyBMb2NhdGlvbiBvZiBwaWNvLTgncyByb290IGZvbGRlcgoAcm9vdF9wYXRoICVzCgoACi8vIExvY2F0aW9uIG9mIGNhcnRyaWRnZSBzYXZlIGRhdGEKAGNkYXRhX3BhdGggJXMKCgAKLy8gU3BlY2lmeSB3aGljaCBwbGF5ZXIgaW5kZXggam95c3RpY2sgY29udHJvbCBiZWdpbnMgYXQgKDAuLjcpCgBqb3lzdGlja19pbmRleCAlZAoKAAovLyBDdXN0b20ga2V5Ym9hcmQgc2NhbmNvZGVzIGZvciBidXR0b25zLiBwbGF5ZXIwIDAuLjYsIHBsYXllcjEgMC4uNQoAYnV0dG9uX2tleXMgACVkIAAKCgAvLyBQbGF5IG5vdGVzIGFzIHRoZXkgYXJlIHBsb3R0ZWQgaW4gZnJlcXVlbmN5IG1vZGUKAGxpdmVfbm90ZXMgJWQKCgAvLyBpZmYgMTogd2hlbiB1c2luZyBrZXlib2FyZCBjdXJzb3IsIHNuYXAgdG8gY2xvc2VzdCBwaXhlbCAvIG1hcCBjZWwKAGN1cnNvcl9zbmFwICVkCgoALy8gMCBkZWZhdWx0ICAxIGRhcmsgYmx1ZSBiYWNrZ3JvdW5kIGluIGNvZGUgZWRpdG9yICAyIGJsYWNrIGJhY2tncm91bmQgaW4gY29kZSBlZGl0b3IgICAzIGdyYXkgYmFja2dyb3VuZCBpbiBjb2RlIGVkaXRvciAgIAoAZ3VpX3RoZW1lICVkCgoALy8gc2NhbGUgb2Ygc2NyZWVuc2hvdHMgYW5kIGdpZnMgLy8gMiBtZWFucyAyNTZ4MjU2CgBzY3JlZW5zaG90X3NjYWxlICVkCgBnaWZfc2NhbGUgJWQKCgAvLyBtYXhpbXVtIGdpZiBsZW5ndGggaW4gc2Vjb25kcyAoMC4uMTIwOyAwIG1lYW5zIG5vIGdpZiByZWNvcmRpbmcpCgBnaWZfbGVuICVkCgoALy8gd2hlbiAxLCByZXNldCB0aGUgcmVjb3JkaW5nIHdoZW4gcHJlc3NpbmcgY3RybC05ICh1c2VmdWwgZm9yIGNyZWF0aW5nIGEgbm9uLW92ZXJsYXBwaW5nIHNlcXVlbmNlKQoAZ2lmX3Jlc2V0X21vZGUgJWQKCgAvLyAwIGZvciBvZmYuIDEgZm9yIGF1dG8uIDIgdG8gYWxsb3cgY29udHJvbCBvZiBhIGNhcnQncyBmcmFtZXJhdGUgZHVlIHRvIGhvc3QgbWFjaGluZSdzIGNwdSBjYXBhY2l0eQoAaG9zdF9mcmFtZXJhdGVfY29udHJvbCAlZAoKAC8vIGZpbHRlciBzcGxvcmUgY2FydHJpZGdlcwoALy8gMCBvZmYgICAxIG9uIChleGNsdWRlIGNhcnRyaWRnZSB0YWdnZWQgYXMgJ21hdHVyZScgYnkgY29tbXVuaXR5KQoAc3Bsb3JlX2ZpbHRlciAlZAoKAC8vIHRhYiBkaXNwbGF5IHdpZHRoICgxIH4gNCBzcGFjZXMpCgB0YWJfd2lkdGggJWQKCgAvLyAwIG9mZiAxIG9uOiBkcmF3IHRhYiBjaGFyYWN0ZXJzIGFzIHNtYWxsIHZlcnRpY2FsIGxpbmVzCgBkcmF3X3RhYnMgJWQKCgAvLyAwIG9mZiAxIG9uOiByZWNvcmQgdGhlIGN1cnJlbnQgY2FydHJpZGdlIGFuZCBlZGl0b3IgdmlldyBldmVyeSAzIHNlY29uZHMgKHNlZSBbYXBwZGF0YV0vYWN0aXZpdHkubG9nLnR4dCkKAHJlY29yZF9hY3Rpdml0eV9sb2cgJWQKCgAvLyAwIG9mZiAxIG9uOiBhbGxvdyBGNi4uRjkgKGFsdGVybmF0aXZlOiBjdHJsIDYuLjkpCgBhbGxvd19mdW5jdGlvbl9rZXlzICVkCgoALy8gMCBvZmYgMSBvbjogYXV0b21hdGljYWxseSBjaGVjayBmb3IgYSBuZXdlciB2ZXJzaW9uIG9mIGEgQkJTIGNhcnQgZWFjaCB0aW1lIGl0IGlzIHJ1bi4KAGNoZWNrX2Zvcl9jYXJ0X3VwZGF0ZXMgJWQKCgBmbGlwX2FtcGVyc2FuZCAxCgoALy8gaGlkZSBtb3VzZSBjdXJzb3IgZm9yIG4gc2Vjb25kcyB3aGVuIHR5cGluZy4KAGF1dG9faGlkZV9tb3VzZV9jdXJzb3IgJWQKCgAvLyAwIG9mZiAxIG9uOiBiYWNrdXAgd2l0aCBhIG5ldyB0aW1lc3RhbXBlZCBmaWxlbmFtZSBvbiBldmVyeSBydW4KAC8vIG5vcm1hbGx5IG5vdCBuZWVkZWQgLS0gd2FzIHVzZWQgZm9yIGRlYnVnZ2luZyBjcmFzaC1vbi1ydW4KAGFnZ3Jlc3NpdmVfYmFja3VwcyAlZAoKAC8vIGJhY2sgdXAgY2FydHJpZGdlIGluIGVkaXRvciBldmVyeSBuIG1pbnV0ZXMgd2hlbiBub3QgaWRsZSAoMCBmb3Igbm8gcGVyaW9kaWMgYmFja3VwcykKAHBlcmlvZGljX2JhY2t1cHMgJWQKCgAvLyBnbG9iYWwgc2NyZWVuIHRyYW5zZm9ybWF0aW9uczoKAC8vICAxMjkgZmxpcCBob3Jpem9udGFsbHkKAC8vICAxMzAgZmxpcCB2ZXJ0aWNhbGx5CgAvLyAgMTMzIHJvdGF0ZSBDVyA5MCBkZWdyZWVzCgAvLyAgMTM0IHJvdGF0ZSBDVyAxODAgZGVncmVlcwoALy8gIDEzNSByb3RhdGUgQ1cgMjcwIGRlZ3JlZXMKAHRyYW5zZm9ybV9zY3JlZW4gJWQKCgAvLyAwIG9mZiAgPiAxOiBjb2xvdXIgdG8gZHJhdyBwaXhlbCBncmlkIGluIHRoZSBnZnggZWRpdG9yIGF0IHpvb206OCBhbmQgem9vbTo0ICgxNiBmb3IgYmxhY2spCgBnZnhfZ3JpZF9saW5lcyAlZAoKAHtjaWlpID0gJDA7IGlpaSA9IDA7fQAie2lpaSA9IGlpaSsxOyByZXR1cm4gX2NhcnRuYW1lW2NpaWldLmNoYXJDb2RlQXQoaWlpLTEpOyB9IgBbY29kb10gYmJzX3dnZXRfb25sb2FkIDo6IHJlY2VpdmVkLiBwcmVwYXJpbmcgdG8gcnVuLiBwc3RhdGUuY3VycmVudF9maWxlbmFtZSAlcyBhcHAuYXJndl9maWxlbmFtZSAlcwoAd3JvdGUgbGVuOiAlZAoAL2Jicy9nZXRfY2FydC5waHAAbGlkPQBmaWxlbmFtZV9ub3RfZm91bmQucDgucG5nAGJic193Z2V0X29ubG9hZDogc2V0IGN1cnJlbnRfZmlsZW5hbWUgdG8gJXMgKGRlcml2ZWQgZnJvbSAlcykKAGNvdWxkIG5vdCBmZXRjaCBjYXJ0ACJ7IGlmICh0eXBlb2YgX2NhcnRkYXQgIT09J3VuZGVmaW5lZCcpIHJldHVybiAxOyByZXR1cm4gMDt9IgAie3JldHVybiBfY2FydGRhdC5sZW5ndGggLyAzMjc2OH0iACJ7IF9jZHBvcz1fY2Rwb3MrMTsgcmV0dXJuIF9jYXJ0ZGF0W19jZHBvcy0xXTsgfSIAc3RhcnRpbmcgZG93bmxvYWQKAGxvYWRpbmcgZW1iZWRkZWQgY2FydHJpZGdlCgBqb3lzdGljawBnbG9iYWxfYXBpAGtpb3NrAGdwaW9fYmFzZQBnbGl0Y2hfdGVzdAB4AGV4ZWMAcGFyYW0AcABhY2NlcHRfZnV0dXJlAHR2X2ZyYW1lAGRpc3BsYXlzX3gAZGlzcGxheXNfeQBpAG8AdXJsX2NvZGUAdXJsX2dmeABjaWQAbGV0IHN0YXRlT2JqID0geyBsb2FkX3BhcmFtX2RhdGEgOiBmYWxzZSB9OyBoaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZU9iaiwgIlBJQ08tOCIsICI/Iik7AGZ1bmN0aW9uIG1rZGlyXzAoZCkgeyB0cnkgeyBzdGF0ID0gRlMuc3RhdChkKTsgfSBjYXRjaCAoZSkgeyBGUy5ta2RpcihkKTsgfSB9IG1rZGlyXzAoJy91c2VyX2RhdGEnKTsgRlMubW91bnQoSURCRlMsIHt9LCAnL3VzZXJfZGF0YScpOyBGUy5zeW5jZnModHJ1ZSwgZnVuY3Rpb24gKGVycikgeyBpZiAoIWVycikgeyBjb25zb2xlLmxvZygiY29kbzogbW91bnRlZCBmaWxlc3lzdGVtLlxuIik7IGNvZG9fbW91bnRlZF9maWxlc3lzdGVtID0gMTsgbWtkaXJfMCgnL3VzZXJfZGF0YS9jZGF0YScpOyBta2Rpcl8wKCcvdXNlcl9kYXRhL2NzdG9yZScpOyBta2Rpcl8wKCcvdXNlcl9kYXRhL2NhcnRzJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvYmFja3VwJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvcGxhdGVzJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvYmJzJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvYmJzL2NhcnRzJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvYmJzL2xhYmVscycpOyB9IGVsc2UgeyBjb25zb2xlLmxvZygiKiogY291bGQgbm90IG1vdW50IGZpbGVzeXN0ZW1cbiIpOyBjb25zb2xlLmxvZyhlcnIpOyB9IH0gKTsAL3VudGl0bGVkLnA4AC91bnRpdGxlZF8lZC5wOAAieyBNb2R1bGUucGljbzhSZXNldCA9IGZ1bmN0aW9uKCkgeyBjb2RvX2NvbW1hbmQgPSAxO30gOyBNb2R1bGUucGljbzhUb2dnbGVTb3VuZCA9IGZ1bmN0aW9uKCkgeyBjb2RvX2NvbW1hbmQgPSAzO30gOyBNb2R1bGUucGljbzhUb2dnbGVQYXVzZWQgPSBmdW5jdGlvbigpIHsgY29kb19jb21tYW5kID0gNDsgfSA7IE1vZHVsZS5waWNvOFNldFBhdXNlZCA9IGZ1bmN0aW9uKHApIHsgY29kb19jb21tYW5kID0gNTsgY29kb19jb21tYW5kX3AgPSAwOyBpZiAocCkgY29kb19jb21tYW5kX3A9MTt9IDsgTW9kdWxlLnBpY284VG9nZ2xlQ29udHJvbE1lbnUgPSBmdW5jdGlvbigpIHsgY29kb19jb21tYW5kID0gNzt9IDsgTW9kdWxlLnBpY284RHJhZ092ZXIgPSBmdW5jdGlvbigpIHsgY29kb19jb21tYW5kID0gMTA7fSA7IE1vZHVsZS5waWNvOERyYWdTdG9wID0gZnVuY3Rpb24oKSB7IGNvZG9fY29tbWFuZCA9IDExO30gOyB9IgBjYXJ0cy8AY2RhdGEvAHBpY284LmRhdABkYXRhLnBvZABSVU5OSU5HOiAlcwoAY291bGRuJ3QgbG9hZCAlcwoAY291bGQgbm90IGxvYWQgJXMKAC4vAHt2YXIgdmFsPTA7IGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZigid2lkZ2V0LnBocCIpID49IDApIHZhbD0xOyByZXR1cm4gdmFsO30Ae3ZhciB2YWw9MDsgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5pbmRleE9mKCJwaWNvLTgucGhwIikgPj0gMCkgdmFsPTE7IHJldHVybiB2YWw7fQBhIG5ldyB2ZXJzaW9uIG9mIHRoaXMAY2FydHJpZGdlIGlzIGF2YWlsYWJsZQAlMDJkAGRpcmVjdG9yeTogLwBkaXJlY3Rvcnk6ICVzAG5vdCBmb3VuZAAtLW1vcmUtLQBjb250aW51ZQByZXNldCBjYXJ0AHNvdW5kOm9uAHNvdW5kOm9mZgB2b2x1bWU6IDAxMjM0NTY3AHVwZGF0ZSBjYXJ0AHNraXAAc291bmQgb2ZmIChjdHJsLW0pAHNvdW5kIG9uIChjdHJsLW0pAGRvd25sb2FkIHRpbWVkIG91dABkb3dubG9hZGluZy4uIGNhbmNlbGxlZAAubmZvAC90ZW1wLQBjb3VsZCBub3QgZmluZCBjYXJ0AGRvd25sb2FkaW5nLi4gb2sAbG9hZGVkICMlcyAoJWQgY2hhcnMpAGNvdWxkIG5vdCBjb25uZWN0IHRvIGJicwBmdXR1cmUgdmVyc2lvbi4gcGxlYXNlIHVwZGF0ZSEAIHZvbHVtZTogICAgICAgICAgICAgIChjdHJsLS8rKQB7IGlmICh0eXBlb2YgcGljbzhfc3RhdGUgIT09ICd1bmRlZmluZWQnKXsgcGljbzhfc3RhdGUuaXNfcGF1c2VkID0gJDA7IHBpY284X3N0YXRlLnNvdW5kX3ZvbHVtZSA9ICQxOyBwaWNvOF9zdGF0ZS5mcmFtZV9udW1iZXIgPSAkMjsgcGljbzhfc3RhdGUuaGFzX2ZvY3VzID0gJDM7IHBpY284X3N0YXRlLnNob3dfZHBhZCA9ICQ0OyBwaWNvOF9zdGF0ZS5yZXF1ZXN0X3BvaW50ZXJfbG9jayA9ICQ1OyBwaWNvOF9zdGF0ZS5yZXF1aXJlX3BhZ2VfbmF2aWdhdGVfY29uZmlybWF0aW9uID0gJDY7IHBpY284X3N0YXRlLnNodXRkb3duX3JlcXVlc3RlZCA9ICQ3OyB9IH0AInt2YXIgdmFsPTA7IGlmICh0eXBlb2YgY29kb19jb21tYW5kICE9PSAndW5kZWZpbmVkJykge3ZhbD1jb2RvX2NvbW1hbmQ7IGNvZG9fY29tbWFuZD0wO30gcmV0dXJuIHZhbH0iACJ7dmFyIHZhbD0wOyBpZiAodHlwZW9mIGNvZG9fY29tbWFuZF9wICE9PSAndW5kZWZpbmVkJykge3ZhbD1jb2RvX2NvbW1hbmRfcDsgY29kb19jb21tYW5kX3A9MDt9IHJldHVybiB2YWx9IgAie2J1dHRvbl9pID0gMH0iACJ7dmFyIHZhbD0tMTsgaWYgKHR5cGVvZiBwaWNvOF9idXR0b25zICE9PSAndW5kZWZpbmVkJykge3ZhbCA9IHBpY284X2J1dHRvbnNbYnV0dG9uX2ldOyBidXR0b25faSArKzt9IHJldHVybiB2YWw7fSIAInt2YXIgdmFsID0gMDsgaWYgKHR5cGVvZiBwaWNvOF9nYW1lcGFkcyAhPT0gJ3VuZGVmaW5lZCcpIHt2YWwgPSBwaWNvOF9nYW1lcGFkcy5jb3VudDt9IHJldHVybiB2YWw7fSIAKiogZmFpbGVkIHRvIHNhdmUgc2NyZWVuc2hvdABzZXQgdmlkZW8gc3RhcnRpbmcgcG9pbnQAbm8gdmlkZW8gcmVjb3JkZWQgKHJlYzogY3RybC04KQAqKiBmYWlsZWQgdG8gc2F2ZSB2aWRlbwBqb3lzdGljayAlZCBjb25uZWN0ZWQAam95c3RpY2sgJWQgZGlzY29ubmVjdGVkAGlmICh0eXBlb2Ygb25fbW9kdWxlX2xvYWQgIT09ICd1bmRlZmluZWQnKSB7IGlmIChvbl9tb2R1bGVfbG9hZCkgb25fbW9kdWxlX2xvYWQoKTsgfQBjb3VsZCBub3Qgb3BlbiBmaWxlIHRvIHNhdmUgZnJvbSB3ZWI6ICVzCgB7IGRvd25sb2FkX2Jyb3dzZXJfZmlsZShVVEY4VG9TdHJpbmcoJDAsICQxKSwgVVRGOFRvU3RyaW5nKCQyLCAkMykpOyB9AGRhdGE6aW1hZ2UvJXM7YmFzZTY0LAB7IGlmICh0eXBlb2YgcDhpbWcgIT09ICd1bmRlZmluZWQnKSB7IHA4aW1nLnNyYz0iIjsgfSBwOGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOyBwOGltZy5zcmMgPSBVVEY4VG9TdHJpbmcoJDAsICQxKTsgcDhpbWcuc3R5bGUgPSAnd2lkdGg6MTI4cHg7IGhlaWdodDoxMjhweDsgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IG5lYXJlc3QtbmVpZ2hib3I7JzsgaWYgKHR5cGVvZiBwOGltZ2hvbGRlciA9PT0gJ3VuZGVmaW5lZCcgfHwgIXA4aW1naG9sZGVyKXsgcDhpbWdob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgcDhpbWdob2xkZXIuc3R5bGUuY3NzVGV4dCA9ICdtaW4td2lkdGg6MTYwcHg7IGRpc3BsYXk6dGFibGU7IHBvc2l0aW9uOmZpeGVkOyB0b3A6MjBweDsgbGVmdDoyMHB4OyBwYWRkaW5nOjEycHg7IGJhY2tncm91bmQtY29sb3I6IzAwMDsgYm94LXNoYWRvdzogMnB4IDJweCA4cHggcmdiYSgxNiwgMCwgNDgsIDAuNCk7JzsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwOGltZ2hvbGRlcik7IH0gaWYgKHA4aW1naG9sZGVyKSB7IHdoaWxlIChwOGltZ2hvbGRlci5jaGlsZEVsZW1lbnRDb3VudCA+IDApIHA4aW1naG9sZGVyLnJlbW92ZUNoaWxkKHA4aW1naG9sZGVyLmZpcnN0Q2hpbGQpOyB2YXIgZGlzbWlzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBkaXNtaXNzLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTp0YWJsZTsgZm9udC1zaXplOjEwcHQ7IGNvbG9yOiNmZmY7IHBhZGRpbmc6NHB4OyBjdXJzb3I6cG9pbnRlcjsgbWFyZ2luLWxlZnQ6MTBweDsgZmxvYXQ6cmlnaHQnOyBkaXNtaXNzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcDhpbWcuc3JjPSIiOyB3aGlsZSAocDhpbWdob2xkZXIuY2hpbGRFbGVtZW50Q291bnQgPiAwKSBwOGltZ2hvbGRlci5yZW1vdmVDaGlsZChwOGltZ2hvbGRlci5maXJzdENoaWxkKTsgcDhpbWdob2xkZXIuc3R5bGUuZGlzcGxheT0ibm9uZSI7IH0sIGZhbHNlKTsgZGlzbWlzcy5pbm5lckhUTUwgPSAnWCc7IHA4aW1naG9sZGVyLmFwcGVuZENoaWxkKGRpc21pc3MpOyBwOGltZ2hvbGRlci5hcHBlbmRDaGlsZChwOGltZyk7IHZhciBpbmZvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGluZm8uaW5uZXJIVE1MID0gJzxicj4gPGZvbnQgc3R5bGU9ImNvbG9yOiNiYmI7IGZvbnQtc2l6ZTo4cHQiPjxjZW50ZXI+IChyaWdodC1jbGljayB0byBzYXZlKSA8L2NlbnRlcj48L2ZvbnQ+JzsgcDhpbWdob2xkZXIuYXBwZW5kQ2hpbGQoaW5mbyk7IGlmIChwOGltZ2hvbGRlci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikgcDhpbWdob2xkZXIuc3R5bGUuZGlzcGxheSA9ICIiOyB9IH0AY291bGQgbm90IGNvbXByZXNzIGNvZGUKAGhleGR1bXAgJWQgYnl0ZXMgdG8gY2xpcGJvYXJkAHdyaXRpbmcgJWQgYnl0ZXMgKGNvZGUgb25seSkAd3JpdGluZyAlZCBieXRlcwAlMngAbG9hZGluZyBmdXR1cmUgY2FydCB2ZXJzaW9uAGZ1dHVyZSB2ZXJzaW9uOiAlZABjYXJ0cmlkZ2UgZGF0YSBpcyBjb3JydXB0ZWQAJXMlcy5wOCVzAC5yb20AJXMlcyVzLnA4AHVudGl0bGVkAGJhY2t1cC8AJTRkJTAyZCUwMmRfJTAyZCUwMmQlMDJkXwBwcm9ncmFtIG92ZXIgc2l6ZSBsaW1pdAoAY29tcHJlc3NlZCBjb2RlIHNpemUgdG9vIGxhcmdlCgAlZCAvICVkIGJ5dGVzAHdhcm5pbmc6IGNvbXByZXNzZWQgY29kZSB0b28gYmlnAHRvIGJlIGV4cG9ydGVkIG9yIHNhdmVkIGFzIHBuZwAoc2F2aW5nIC5wOCBhbnl3YXkpAGZsYXR0ZW5lZCAjaW5jbHVkZXMAKiogZmFpbGVkIHRvIHNhdmUgKioAL3VzZXJfZGF0YS9jc3RvcmUvJXMlcwBfXwBwcmVwYXJlX2xvYWRlZF9jYXJ0OiBsb29raW5nIGZvciBzYW5kYm94ZWQgY2FydCBwYXRjaDogJXMKACAgZm91bmQKACAgbm90IGZvdW5kCgB3YXJuaW5nOiBwb3NzaWJsZSBkZXByZWNhdGVkIEBAAGxlZ2FjeTogcGF0ICVkIHN3YXAgY2hhbjogJWQgJWQAcHJpbnQoImFyY2hlb3MiLDk4LDM0LDcpAC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIGxlZ2FjeSAwLjEuMSBhcGkgaW5qZWN0ZWQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIF92YWxpZGF0ZShjKSBpZiAoYy5fbnVtPT1uaWwpIHRoZW4gbG9jYWwgaT0wIHdoaWxlKGNbaSsxXX49bmlsKSBkbyBpPWkrMSBlbmQgYy5fbnVtPWkgYy5fbWF4PWkgCWMuX21pbj1pKzEgYy5fbnVtID0gaSBjLl9jaSA9IGkgZW5kIGVuZCAJZnVuY3Rpb24gZm9yZWFjaChjLCBmKSBpZiAoYyA9PSBuaWwpIHRoZW4gcmV0dXJuIGVuZCBfdmFsaWRhdGUoYykgaWYgKGMuX21heCA9PSBuaWwpIHRoZW4gcmV0dXJuIGVuZCBmb3IgaT0xLGMuX21heCBkbyBpZiAoY1tpXSB+PSBuaWwpIHRoZW4gYy5fY2kgPSBpIGYoY1tpXSkgZW5kIGVuZCBlbmQgZnVuY3Rpb24gYWxsKGMpIGlmIChjID09IG5pbCkgdGhlbiByZXR1cm4gZnVuY3Rpb24oKSBlbmQgZW5kIF92YWxpZGF0ZShjKSBsb2NhbCBpPTAgcmV0dXJuIGZ1bmN0aW9uKCkgaT1pKzEgd2hpbGUgKGNbaV09PW5pbCBhbmQgaTxjLl9tYXgpIGRvIGk9aSsxIGVuZCBpZiAoY1tpXSB+PSBuaWwpIHRoZW4gYy5fY2k9aSByZXR1cm4gY1tpXSBlbmQgZW5kIGVuZCBmdW5jdGlvbiBhZGQoYywgaSkgaWYgKGMgPT0gbmlsKSB0aGVuIHJldHVybiBlbmQgX3ZhbGlkYXRlKGMpIGZvciBqPWMuX21pbixjLl9tYXgrMSBkbyBpZiAoY1tqXSA9PSBuaWwpIHRoZW4gYy5fbWF4ID0gbWF4KGMuX21heCxqKSBjLl9taW4gPSBqKzEgYy5fbnVtID0gYy5fbnVtKzEgY1tqXT1pIHJldHVybiBpIGVuZCBlbmQgZW5kIGZ1bmN0aW9uIGNvdW50KGMpIGlmIChjID09IG5pbCkgdGhlbiByZXR1cm4gMCBlbmQgX3ZhbGlkYXRlKGMpIHJldHVybiBjLl9udW0gZW5kIGZ1bmN0aW9uIGRlbChjLGkpIGlmIChjID09IG5pbCkgdGhlbiByZXR1cm4gZW5kIF92YWxpZGF0ZShjKSBpZiAoaT09bmlsKSB0aGVuIHJldHVybiBlbmQgaWYgKGMuX2NpPT1pKSB0aGVuIGNbYy5fY2ldPW5pbCBjLl9taW49bWluKGMuX21pbiwgYy5fY2kpIGMuX251bT1jLl9udW0tMSByZXR1cm4gZWxzZSBmb3Igaj0xLGMuX21heCBkbyBpZiAoY1tqXT09aSkgdGhlbiBjW2pdPW5pbCBjLl9taW49bWluKGMuX21pbixqKSBjLl9udW09Yy5fbnVtLTEgcmV0dXJuIGVuZCBlbmQgZW5kIHdoaWxlIChjLl9tYXg+MSBhbmQgY1tjLl9tYXhdPT1uaWwpIGRvIGMuX21heD1jLl9tYXgtMSBlbmQgZW5kICBuZD0wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoAbGVnYWN5OiAwLjEuMSBhcGkgaW5qZWN0ZWQALmx1YQBwbGVhc2Ugc3BlZmljeSBhIGZpbGVuYW1lACoqKiBubyBmaWxlbmFtZS4gbm90IHNhdmVkISAqKioAY2FuIG5vdCBvdmVyd3JpdGUgYmJzIGNhcnQAKiBjYW4gbm90IG92ZXJ3cml0ZSBiYnMgY2FydCEgKgBzYXZlIGZhaWxlZAAqKioqIHNhdmUgZmFpbGVkICoqKioAc2F2ZWQgJXMlcyAqKnRlbXAgZGlzayoqAHNhdmVkICVzJXMlcyAqKnRlbXAgZGlzayoqACVzXyUlZC5wbmcAJXMucG5nAGZpbGUgb3V0cHV0IHBhdGg6ICVzCgBzYXZpbmcgc2NyZWVuc2hvdCB0bzogJXMKAHBuZwBtb3VudF9lbWJlZGRlZF9jYXJ0OiAlcyAoJWQgY2hhcnMpICVzCgAqKiBtb3VudF9lbWJlZGRlZF9jYXJ0OiBmYWlsZWQgdG8gbW91bnQAY291bGQgbm90IGxvYWQgY2FydHJpZGdlAGNhbiBub3QgbG9hZABwOG0ucG5nAHA4bS5wbmcgbm90IHN1cHBvcnRlZABpbWFnZSBpcyB0b28gbGFyZ2UgKDEyOCBtYXgpAGZpbGUgaXMgdG9vIGxhcmdlICgyNTZrIG1heCkAeyBqc1N0cmluZyA9IHA4X2Ryb3BwZWRfY2FydDsgaWYgKCFqc1N0cmluZykgcmV0dXJuIDA7IHZhciBsZW5ndGhCeXRlcyA9IGxlbmd0aEJ5dGVzVVRGOChqc1N0cmluZykrMTsgdmFyIHN0cmluZ09uV2FzbUhlYXAgPSBfbWFsbG9jKGxlbmd0aEJ5dGVzKTsgc3RyaW5nVG9VVEY4KGpzU3RyaW5nLCBzdHJpbmdPbldhc21IZWFwLCBsZW5ndGhCeXRlcyk7IHJldHVybiBzdHJpbmdPbldhc21IZWFwOyB9AHsganNTdHJpbmcgPSBwOF9kcm9wcGVkX2NhcnRfbmFtZTsgaWYgKCFqc1N0cmluZykgcmV0dXJuIDA7IHZhciBsZW5ndGhCeXRlcyA9IGxlbmd0aEJ5dGVzVVRGOChqc1N0cmluZykrMTsgdmFyIHN0cmluZ09uV2FzbUhlYXAyID0gX21hbGxvYyhsZW5ndGhCeXRlcyk7IHN0cmluZ1RvVVRGOChqc1N0cmluZywgc3RyaW5nT25XYXNtSGVhcDIsIGxlbmd0aEJ5dGVzKTsgcmV0dXJuIHN0cmluZ09uV2FzbUhlYXAyOyB9AGxvYWRpbmcgdXJsX3N0cjogJXMKAGJhc2U2NCwAQEAgdHJ5aW5nIHRvIGxvYWQgYXMgaW1hZ2UgJWQKAEBAIHNldHRpbmcgYXMgZHJvcHBlZCBpbWFnZTogJWQgJWQKAEBAIHRyeWluZyBhcyBkYXRhIGZpbGUuIGRhdF9mLT5sZW46ICVkCgBjb3VsZCBub3QgZmluZCBkcm9wcGVkIGZpbGUAaHR0cHM6Ly9waWNvLTgtZWR1LmNvbS8/Yz0AbGV0IHN0YXRlT2JqID0geyBsb2FkX3BhcmFtX2RhdGEgOiB0cnVlfTsgaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGVPYmosICdQSUNPLTggVVJMIENhcnQnLCAnJXMnKTsAKiogZmFpbGVkOiB1cmwgaXMgdG9vIGxvbmcAJWQgLyAyMDQwIGNoYXJzAG5vIHZhbHVlAHVzZXJkYXRhAG51bWJlcgB0aHJlYWQAcHJvdG8AdXB2YWwAc3RhY2sgb3ZlcmZsb3cAQyBzdGFjayBvdmVyZmxvdwB0YWJsZSBvdmVyZmxvdwAnZm9yJyBpbml0aWFsIHZhbHVlIG11c3QgYmUgYSBudW1iZXIAJ2ZvcicgbGltaXQgbXVzdCBiZSBhIG51bWJlcgAnZm9yJyBzdGVwIG11c3QgYmUgYSBudW1iZXIAbk4AeFgAYkIAYXR0ZW1wdCB0byBjb21wYXJlIHR3byAlcyB2YWx1ZXMAYXR0ZW1wdCB0byBjb21wYXJlICVzIHdpdGggJXMAc3RyaW5nIGxlbmd0aCBvdmVyZmxvdwBjb25jYXRlbmF0ZQB1cHZhbHVlAGluZGV4AGF0dGVtcHQgdG8gbW9kaWZ5ICVzICclcycgKHN0cmluZ3MgYXJlIGltbXV0YWJsZSkAYXR0ZW1wdCB0byAlcyAlcyAnJXMnIChhICVzIHZhbHVlKQBhdHRlbXB0IHRvICVzIGEgJXMgdmFsdWUAX0VOVgBnbG9iYWwAZmllbGQAbWV0aG9kAGNvbnN0YW50ACUwLjVmAC45OTk5AC4wMDAwACUwLjNmACUwLjRmAGdldCBsZW5ndGggb2YAcGVyZm9ybSBhcml0aG1ldGljIG9uAHRhYmxlIGluZGV4IGlzIG5pbABtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcjogYmxvY2sgdG9vIGJpZwBsb29wIGluIHNldHRhYmxlAGxvb3AgaW4gZ2V0dGFibGUAYXR0ZW1wdCB0byB5aWVsZCBhY3Jvc3MgYSBDLWNhbGwgYm91bmRhcnkAYXR0ZW1wdCB0byB5aWVsZCBmcm9tIG91dHNpZGUgYSBjb3JvdXRpbmUAY2FsbABbc3RyaW5nICIAIl0AJXMAMHgleABpbnZhbGlkIG9wdGlvbiAnJSUlYycgdG8gJ2x1YV9wdXNoZnN0cmluZycAZXJyb3IgaW4gZXJyb3IgaGFuZGxpbmcAYXR0ZW1wdCB0byBsb2FkIGEgJXMgY2h1bmsgKG1vZGUgaXMgJyVzJykAdGV4dABjb250cm9sIHN0cnVjdHVyZSB0b28gbG9uZwBsYWJlbHMvZ290b3MAbm8gdmlzaWJsZSBsYWJlbCAnJXMnIGZvciA8Z290bz4gYXQgbGluZSAlZCAodGFiICVkKQA8JXM+IGF0IGxpbmUgJWQgbm90IGluc2lkZSBhIGxvb3AAPGdvdG8gJXM+IGF0IGxpbmUgJWQgKHRhYiAlZCkganVtcHMgaW50byB0aGUgc2NvcGUgb2YgbG9jYWwgJyVzJwB0b28gbWFueSAlcyAobGltaXQgaXMgJWQpACVzOiVkOiAlcwBsZXhpY2FsIGVsZW1lbnQgdG9vIGxvbmcAJyVzJwAlcyBuZWFyICVzAEBAACclYycAOjoAPG51bWJlcj4APG5hbWU+ADxzdHJpbmc+ADxlb2w+AF5ePQBvcGNvZGVzACVzIGV4cGVjdGVkAEMgbGV2ZWxzAGZ1bmN0aW9uIG9yIGV4cHJlc3Npb24gdG9vIGNvbXBsZXgAKGZvciBpbmRleCkAKGZvciBsaW1pdCkAKGZvciBzdGVwKQAoZm9yIGdlbmVyYXRvcikAKGZvciBzdGF0ZSkAKGZvciBjb250cm9sKQAnPScgb3IgJ2luJyBleHBlY3RlZABsYWJlbCAnJXMnIGFscmVhZHkgZGVmaW5lZCBvbiBsaW5lICVkICh0YWIgJWQpAChmb3IgY29tcG91bmQpAHVuZXhwZWN0ZWQgc3ltYm9sAGZ1bmN0aW9uIGFyZ3VtZW50cyBleHBlY3RlZABpdGVtcyBpbiBhIGNvbnN0cnVjdG9yAGZ1bmN0aW9ucwBzZWxmADxuYW1lPiBvciAnLi4uJyBleHBlY3RlZABjb25zdGFudHMAbG9jYWwgdmFyaWFibGVzACVzIGV4cGVjdGVkICh0byBjbG9zZSAlcyBhdCBsaW5lICVkICh0YWIgJWQpKQBjYW5ub3QgdXNlICcuLi4nIG91dHNpZGUgYSB2YXJhcmcgZnVuY3Rpb24AZnVuY3Rpb24gYXQgbGluZSAlZCAodGFiICVkKQBtYWluIGZ1bmN0aW9uAHRvbyBtYW55ICVzIChsaW1pdCBpcyAlZCkgaW4gJXMAaW52YWxpZCBsb25nIHN0cmluZyBkZWxpbWl0ZXIAdW5maW5pc2hlZCBzdHJpbmcAaGV4YWRlY2ltYWwgZGlnaXQgZXhwZWN0ZWQAaW52YWxpZCBlc2NhcGUgc2VxdWVuY2UAZGVjaW1hbCBlc2NhcGUgdG9vIGxhcmdlAFh4AG1hbGZvcm1lZCBudW1iZXIAdW5maW5pc2hlZCBsb25nIGNvbW1lbnQAdW5maW5pc2hlZCBsb25nIHN0cmluZwBjaHVuayBoYXMgdG9vIG1hbnkgbGluZXMAdXB2YWx1ZXMAYmluYXJ5IHN0cmluZwB0cnVuY2F0ZWQAbm90IGEAdmVyc2lvbiBtaXNtYXRjaCBpbgBpbmNvbXBhdGlibGUAY29ycnVwdGVkACVzOiAlcyBwcmVjb21waWxlZCBjaHVuawBpbnZhbGlkIGtleSB0byAnbmV4dCcAc3RhY2sgdHJhY2ViYWNrOgAKCS4uLgBTbG50AAoJJXM6ACVkOgAgaW4gAGZ1bmN0aW9uICclcycAbWFpbiBjaHVuawBmdW5jdGlvbiA8JXM6JWQ+AAoJKC4uLnRhaWwgY2FsbHMuLi4pAD1bQ10APT8AbWFpbgBMdWEAZm9yIGl0ZXJhdG9yAG1ldGFtZXRob2QAYmFkIGFyZ3VtZW50ICMlZCAoJXMpAG4AY2FsbGluZyAnJXMnIG9uIGJhZCBzZWxmICglcykAYmFkIGFyZ3VtZW50ICMlZCB0byAnJXMnICglcykAU2wAJXM6JWQ6IAAlcyBleHBlY3RlZCwgZ290ICVzAHZhbHVlIGV4cGVjdGVkAG9iamVjdCBsZW5ndGggaXMgbm90IGEgbnVtYmVyAF9fdG9zdHJpbmcAJXM6ICVwAF9faW5kZXgAX19uZXdpbmRleABfX2djAF9fbW9kZQBfX2xlbgBfX2VxAF9fYWRkAF9fc3ViAF9fbXVsAF9fZGl2AF9fbW9kAF9fcG93AF9fYW5kAF9fb3IAX194b3IAX19zaGwAX19zaHIAX19sc2hyAF9fcm90bABfX3JvdHIAX19ub3QAX19pZGl2AF9fcGVlawBfX3BlZWsyAF9fcGVlazQAX191bm0AX19sdABfX2xlAF9fY29uY2F0AF9fY2FsbABfX21ldGF0YWJsZQBuaWwgb3IgdGFibGUgZXhwZWN0ZWQAY2Fubm90IGNoYW5nZSBhIHByb3RlY3RlZCBtZXRhdGFibGUAdGFibGUgb3Igc3RyaW5nIGV4cGVjdGVkAF9fcGFpcnMAX19pcGFpcnMAYXNzZXJ0aW9uIGZhaWxlZCEAaW5kZXggb3V0IG9mIHJhbmdlAGNvcm91dGluZSBleHBlY3RlZABjb3JvbGliOiB0b28gbWFueSBhcmd1bWVudHMgdG8gcmVzdW1lAGNvcm9saWI6IGNhbm5vdCByZXN1bWUgZGVhZCBjb3JvdXRpbmUAY29yb2xpYjogdG9vIG1hbnkgcmVzdWx0cyB0byByZXN1bWUAY2Fubm90IHJlc3VtZSBub24tc3VzcGVuZGVkIGNvcm91dGluZQBjYW5ub3QgcmVzdW1lIGRlYWQgY29yb3V0aW5lAHJ1bm5pbmcAc3VzcGVuZGVkAG5vcm1hbABkZWFkAHRvbyBtYW55IHJlc3VsdHMgdG8gdW5wYWNrAHVwbG9hZAB7IGlmICh0eXBlb2YgcGljbzhfc3RhdGUgIT09ICd1bmRlZmluZWQnKXsgaWYgKHR5cGVvZiBwaWNvOF9zdGF0ZS5zeXN0ZW1fbWVzc2FnZXMgPT09ICd1bmRlZmluZWQnKSBwaWNvOF9zdGF0ZS5zeXN0ZW1fbWVzc2FnZXMgPSBuZXcgQXJyYXkoKTsgcGljbzhfc3RhdGUuc3lzdGVtX21lc3NhZ2VzLnB1c2goVVRGOFRvU3RyaW5nKCQwLCAkMSkpOyB9IH0AX2VuZF9vZl9wcm9ncmFtAHRvIGNsb3NlICcAYXQgbGluZSAAJWQgKHRhYiAlZCkAdW5jbG9zZWQgJXMgYXQgbGluZSAlZCAodGFiICVkKQoAdW5jbG9zZWQgJXMALS0gcGljby04IGhlYWRlcgBhc3NlcnRpb24gZmFpbGVkAHBvc2l0aW9uIG91dCBvZiBib3VuZHMAbm90IGVub3VnaCBtZW1vcnkAPGVvZj4AdGhlbWUgAHRoZW1lAGJsdWUAc2V0IHRoZW1lIHRvIGJsdWUAYXV0bwBzZXQgdGhlbWUgdG8gYXV0bwBjbGFzc2ljAHNldCB0aGVtZSB0byBjbGFzc2ljAGNvbmZpZyB0aGVtZSBbdmFsdWVdAGF2YWlsYWJsZSB0aGVtZXM6AGRyYXdfdGFicyAAZHJhd190YWJzAHNob3dfdGFicyAAc2hvd190YWJzAG9uAHRhYiBjaGFyYWN0ZXJzIG9uAG9mZgB0YWIgY2hhcmFjdGVycyBvZmYAY29uZmlnIGRyYXdfdGFicyBbb24gfCBvZmZdAHdoZW4gb24sIHRhYiBjaGFyYWN0ZXJzIGFyZSAAZHJhd24gaW4gdGhlIGNvZGUgZWRpdG9yLgBjdXJyZW50IHNldHRpbmc6IG9uAGN1cnJlbnQgc2V0dGluZzogb2ZmAHNwbG9yZV9maWx0ZXIgAHNwbG9yZV9maWx0ZXIAZmlsdGVyIG9uAGZpbHRlciBvZmYAY29uZmlnIGZpbHRlciBbb24gfCBvZmZdAHdoZW4gb24sIGNhcnRyaWRnZXMgdGFnZ2VkIGFzAG1hdHVyZSB3aWxsIG5vdCBiZSBkb3dubG9hZGVkLgBmaWx0ZXIgaXMgY3VycmVudGx5OiBvbgBmaWx0ZXIgaXMgY3VycmVudGx5OiBvZmYAdm9sdW1lIABzZXQgdm9sdW1lOiAlZABjb25maWcgdm9sdW1lIFt2YWxdAHZhbDogOCBxdWlldCAuLiAyNTYgbG91ZABjdXJyZW50IHZvbHVtZTogJWQAZ2lmX2xlbiAAc2V0IGdpZl9sZW46ICVkAGdpZl9sZW4AY29uZmlnIGdpZl9sZW4gW3NlY29uZHNdAGN1cnJlbnQgZ2lmX2xlbjogJWQAZ2lmX3Jlc2V0X21vZGUgAHNldCBnaWZfcmVzZXRfbW9kZTogJWQAZ2lmX3Jlc2V0X21vZGUAY29uZmlnIGdpZl9yZXNldF9tb2RlIFttb2RlXQAgMDogZG9uJ3QgcmVzZXQgYWZ0ZXIgcmVjb3JkaW5nACAxOiByZXNldCBhZnRlciBlYWNoIHJlY29yZGluZwBjdXJyZW50IGdpZl9yZXNldF9tb2RlOiAlZABzZnhfZmlsdGVycyAAc2V0IHNmeF9maWx0ZXJzOiAlZABnaWZfc2NhbGUgAHNldCBnaWZfc2NhbGU6ICVkAGdpZl9zY2FsZQBjb25maWcgZ2lmX3NjYWxlIFtzaXplXQBjdXJyZW50IGdpZl9zY2FsZTogJWQAc2NyZWVuc2hvdF9zY2FsZSAAc2V0IHNjcmVlbnNob3Rfc2NhbGU6ICVkAHNjcmVlbnNob3Rfc2NhbGUAY29uZmlnIHNjcmVlbnNob3Rfc2NhbGUgW3NpemVdAGN1cnJlbnQgc2NyZWVuc2hvdF9zY2FsZTogJWQAdGFiX3dpZHRoIABzZXQgdGFiX3dpZHRoOiAlZAB0YWJfd2lkdGgAY29uZmlnIHRhYl93aWR0aCBbd2lkdGhdAGN1cnJlbnQgdGFiX3dpZHRoOiAlZABjb25maWcgW3NldHRpbmddAGF2YWlsYWJsZSBzZXR0aW5nczoAJWQvJWQgJTMuMWYgZnBzACVkLyVkICUxLjJmICUxLjJmAHJlc3VtZSgpAG5vdGhpbmcgdG8gcmVzdW1lAHN0YXQoNCkAIF9kcmF3AHByb2dyYW0gZXhjZWVkcyBjaGFyIGxpbWl0ACVkIC8gJWQgY2hhcnMKAHByb2dyYW0gdG9vIGxhcmdlACVkIC8gJWQgdG9rZW5zCgAtLSBwaWNvLTggaGVhZGVyCglkbyAJbG9jYWwgX3JlZnVuZF9jcHVfID0gX19yZWZ1bmRfY3B1X18gCWxvY2FsIF9wYWlycyA9IF9fcGFpcnNfXyAJbG9jYWwgX2lwYWlycyA9IF9faXBhaXJzX18gCWxvY2FsIF90eXBlID0gX190eXBlIAlsb2NhbCBfdG9zdHIgPSBfX3Rvc3RyIAlsb2NhbCBfc3RvcCA9IF9fc3RvcCAJbG9jYWwgX3ByaW50ID0gX19wcmludCAJbG9jYWwgX3ByaW50aCA9IF9fcHJpbnRoIAlsb2NhbCBfdG9zdHJpbmcgPSBfX3Rvc3RyaW5nX18gCWxvY2FsIF9sb2FkID0gX19sb2FkIAlsb2NhbCBfc3RhdCA9IHN0YXQgCWxvY2FsIF9leHRjbWQgPSBfX2V4dGNtZCAJbG9jYWwgX19tZW51aXRlbSA9IF9tZW51aXRlbSAJbG9jYWwgX3lpZWxkZWRfdG9fZXNjYXBlX3NsaWNlID0gX195aWVsZGVkX3RvX2VzY2FwZV9zbGljZSAJbG9jYWwgX2NvcmVzdW1lID0gX19jb3Jlc3VtZSAJbG9jYWwgX3NlbGVjdCA9IF9fc2VsZWN0IAlsb2NhbCBfc3VwZXJ5aWVsZCA9IF9fc3VwZXJ5aWVsZCAJbG9jYWwgX2xhc3RfbWVudWl0ZW1faW5kZXggPSAwIAlsb2NhbCBfbGFzdF9tZW51aXRlbV9jYWxsYmFjayA9IGZ1bmN0aW9uKCkgZW5kIAlsb2NhbCBfbWlkID0gbWlkIAlfcGF1c2VtZW51PV9wYXVzZW1lbnUgb3Ige30JZnVuY3Rpb24gbWVudWl0ZW0oaW5kZXgsIGxhYmVsLCBjYWxsYmFjaykgCQlpbmRleCA9IGluZGV4IG9yIF9sYXN0X21lbnVpdGVtX2luZGV4IAkJY2FsbGJhY2sgPSBjYWxsYmFjayBvciBfbGFzdF9tZW51aXRlbV9jYWxsYmFjayAJCWlmICh0eXBlKGluZGV4KX49Im51bWJlciIpIHRoZW4gc3RvcCgiYmFkIG1lbnVpdGVtIGluZGV4IikgZW5kIAkJaWYgKGluZGV4IDwgMSBvciBpbmRleCA+IDUpIHRoZW4gcmV0dXJuIGVuZAkJX3BhdXNlbWVudVtpbmRleF0gPSB7fSAJCV9wYXVzZW1lbnVbaW5kZXhdLmxhYmVsID0gbGFiZWwgCQlfcGF1c2VtZW51W2luZGV4XS5jYWxsYmFjayA9IGNhbGxiYWNrIAkJX19tZW51aXRlbShpbmRleCwgbGFiZWwpIAllbmQgCWZ1bmN0aW9uIHBhaXJzKGMpICBpZiAoYyA9PSBuaWwpIHRoZW4gcmV0dXJuIGZ1bmN0aW9uKCkgZW5kIGVuZCByZXR1cm4gX3BhaXJzIChjKSBlbmQgCWZ1bmN0aW9uIGlwYWlycyhjKSBpZiAoYyA9PSBuaWwpIHRoZW4gcmV0dXJuIGZ1bmN0aW9uKCkgZW5kIGVuZCByZXR1cm4gX2lwYWlycyhjKSBlbmQgCWZ1bmN0aW9uIGFsbChjKSBpZiAoYyA9PSBuaWwgb3IgI2MgPT0gMCkgdGhlbiByZXR1cm4gZnVuY3Rpb24oKSBlbmQgZW5kIAkgCWxvY2FsIGk9MSAJIAlsb2NhbCBsaT1uaWwgCQlfcmVmdW5kX2NwdV8oKCNjID49IDE2KSBhbmQgLTE2IG9yIC0jYykgCSAJcmV0dXJuIGZ1bmN0aW9uKCkgCSAJCWlmIChjW2ldID09IGxpKSB0aGVuIGk9aSsxIGVuZCAJIAkJd2hpbGUoY1tpXT09bmlsIGFuZCBpIDw9ICNjKSBkbyBpPWkrMSBlbmQgCSAJCWxpPWNbaV0gCQkJX3JlZnVuZF9jcHVfKC0xNykgCSAJCXJldHVybiBsaSAJIAllbmQgCWVuZCAJZnVuY3Rpb24gZm9yZWFjaChjLF9mKSBmb3IgaSBpbiBhbGwoYykgZG8gX2YoaSkgZW5kIGVuZCBmdW5jdGlvbiB0b3N0ciguLi4pIAktLVtbIG5lZWQgdG8gdXNlIHRvc3RyaW5nIHdoZW4gbWV0YXRhYmxlIGFuZCBtdC5fX3Rvc3RyaW5nIGlzIHNldCBzbyB0aGF0IG10Ll9fdG9zdHJpbmcgd29ya3MuIHNlZSB0ZXN0cy9tZXRhKi5wOCBdXSAJbG9jYWwgcD17Li4ufSAJbG9jYWwgYSxiLG1heF9kZXB0aCA9IHBbMV0scFsyXSxwWzNdIAlpZiAobWF4X2RlcHRoKSB0aGVuIHJldHVybiBfdG9zdHIoLi4uKSBlbmQgCWlmICgoX3R5cGUoYSk9PSJ0YWJsZSIgYW5kICgoZ2V0bWV0YXRhYmxlKGEpIGFuZCBnZXRtZXRhdGFibGUoYSkuX190b3N0cmluZykgb3IgYikpKSBvciAoKF90eXBlKGEpPT0iZnVuY3Rpb24iIGFuZCBiKSkgdGhlbiAJIHJldHVybiBfdG9zdHJpbmcoYSkgICAgIGVsc2UgCSByZXR1cm4gX3Rvc3RyKC4uLikgCWVuZCBlbmQgCS0tW1sgcHJpbnQoKSBzaG91bGQgcHJpbnQgbm90aGluZzsgcHJpbnQobmlsKSBzaG91bGQgcHJpbnQgW25pbF07IHN0b3AoKSBwYXNzZXMgYXJncyB0byBwcmludCBzbyB0aGF0IGNhbiBwcmludCBpbiBhIGNvbG91cl1dCWZ1bmN0aW9uIHN0b3AoLi4uKSAgICBpZiBfc2VsZWN0KCcjJywuLi4pPT0wIHRoZW4gX3N0b3AoKSAgIGVsc2UgbG9jYWwgYT17Li4ufSByZXR1cm4gX3N0b3AgICh0b3N0cihhWzFdKSwgX3NlbGVjdCgyLC4uLikpIGVuZCBlbmQgCWZ1bmN0aW9uIHByaW50KC4uLikgICBpZiBfc2VsZWN0KCcjJywuLi4pPT0wIHRoZW4gX3ByaW50KCkgIGVsc2UgbG9jYWwgYT17Li4ufSByZXR1cm4gX3ByaW50ICh0b3N0cihhWzFdKSwgX3NlbGVjdCgyLC4uLikpIGVuZCBlbmQgCWZ1bmN0aW9uIHByaW50aCguLi4pICBpZiBfc2VsZWN0KCcjJywuLi4pPT0wIHRoZW4gX3ByaW50aCgpIGVsc2UgbG9jYWwgYT17Li4ufSByZXR1cm4gX3ByaW50aCh0b3N0cihhWzFdKSwgX3NlbGVjdCgyLC4uLikpIGVuZCBlbmQgZnVuY3Rpb24gbG9hZCguLi4pIAlsb2NhbCByZXM9X2xvYWQoLi4uKSAJZmxpcCgpIC0tW1t0byBzdXBlcnlpZWxkLiByZWY6cGljb3dhcmVdXQlpZiAoX3N0YXQoMTA3KSA+IDApIHRoZW4gcmV0dXJuIHRydWUgZW5kIAlpZiAoX3N0YXQoMTA3KSA9PSAtMSkgdGhlbiByZXR1cm4gZmFsc2UsICJjb3VsZCBub3QgZmluZCBjYXJ0IiBlbmQgCWlmIChfc3RhdCgxMDcpID09IC0yKSB0aGVuIHJldHVybiBmYWxzZSwgImNvdWxkIG5vdCBmZXRjaCBjYXJ0IiBlbmQgCWlmIChfc3RhdCgxMDcpID09IC0zKSB0aGVuIHJldHVybiBmYWxzZSwgImNvdWxkIG5vdCBjb25uZWN0IHRvIGJicyIgZW5kIAlpZiAoX3N0YXQoMTA3KSA8IDAgb3IgcmVzID09IG5pbCkgdGhlbiByZXR1cm4gZmFsc2UsICJhY2Nlc3MgZGVuaWVkIiBlbmQgCXJldHVybiByZXMgZW5kIGZ1bmN0aW9uIGV4dGNtZChjbWQsIC4uLikgCWxvY2FsIHJlcz1fZXh0Y21kKGNtZCwgLi4uKSAJaWYgKGNtZD09ImdvX2JhY2siIG9yIGNtZD09ImJyZWFkY3J1bWIiKSB0aGVuIAkJZmxpcCgpIC0tW1t0byBzdXBlcnlpZWxkXV0JZW5kIAlyZXR1cm4gcmVzIGVuZCBmdW5jdGlvbiBjb3Jlc3VtZShjLC4uLikgCV95aWVsZGVkX3RvX2VzY2FwZV9zbGljZSgwKSAJbG9jYWwgcjAscjEgPV9jb3Jlc3VtZShjLC4uLikJd2hpbGUgKF95aWVsZGVkX3RvX2VzY2FwZV9zbGljZSgpIGFuZCBjb3N0YXR1cyhjKSA9PSAic3VzcGVuZGVkIikgZG8gCQlfeWllbGRlZF90b19lc2NhcGVfc2xpY2UoMCkgCQlyMCxyMSA9IF9jb3Jlc3VtZShjLC4uLikgCWVuZCAJX3lpZWxkZWRfdG9fZXNjYXBlX3NsaWNlKDApIAlyZXR1cm4gcjAscjEgZW5kIGZ1bmN0aW9uIGZsaXAoKSAJcmVwZWF0IAkJbG9jYWwgY29udGludWVfbWVudSA9IGZhbHNlIAkJZm9yIGk9MSw1IGRvIAkJIGxvY2FsIHZhbCA9IF9nZXRfbWVudV9pdGVtX3NlbGVjdGVkKGkpIAkJIGlmICh2YWwpIHRoZW4gCQkgIF9sYXN0X21lbnVpdGVtX2luZGV4ID0gaSAJCSAgX2xhc3RfbWVudWl0ZW1fY2FsbGJhY2sgPSBfcGF1c2VtZW51W2ldLmNhbGxiYWNrIAkJICBjb250aW51ZV9tZW51ID0gX3BhdXNlbWVudVtpXS5jYWxsYmFjayh2YWwpIAkJICBpZiAodmFsICYgMyA+IDApIHRoZW4gY29udGludWVfbWVudSA9IHRydWUgZW5kIAkJIGVuZCAJCWVuZCAJCWlmIChjb250aW51ZV9tZW51KSB0aGVuIGV4dGNtZCgicGF1c2UiLCAxKSBfc3VwZXJ5aWVsZCgpIGVuZCAgCXVudGlsIG5vdCBjb250aW51ZV9tZW51IAlfX2ZsaXAoKSBlbmQgZW5kIC0tW1sgc2NvcGUgXV1fX3JlZnVuZF9jcHVfXyA9IG5pbCBfX2lwYWlyc19fID0gbmlsIF9fcGFpcnNfXyA9IG5pbCBfX3Rvc3RyICAgID0gbmlsIF9fc3RvcCAgICAgPSBuaWwgX19wcmludCAgICA9IG5pbCBfX3ByaW50aCAgID0gbmlsIF9fbG9hZCAgICAgPSBuaWwgX19leHRjbWQgICA9IG5pbCBfX3Rvc3RyaW5nX18gPSBuaWwgX195aWVsZGVkX3RvX2VzY2FwZV9zbGljZSA9IG5pbCBfX2NvcmVzdW1lID0gbmlsIF9fc2VsZWN0ID0gbmlsIF9fc3VwZXJ5aWVsZCA9IG5pbCAAgD2AIG9yIDAuNSCBPYEgb3IgMjMxMzAuNSCCPYIgb3IgMjA3NjcuNSCDPYMgb3IgMyCEPYQgb3IgMzIxMjUuNSCFPYUgb3IgLTE4NDAyLjUghj2GIG9yIC0xNjMyLjUghz2HIG9yIDIwOTI3LjUgiD2IIG9yIC0xOTAwOC41IIk9iSBvciAtMjYyMDguNSCKPYogb3IgLTIwMTkyLjUgiz2LIG9yIDAgjD2MIG9yIC0yNDM1MS41II09jSBvciAtMjU3OTIuNSCOPY4gb3IgNCCPPY8gb3IgLTIwMDMyLjUgkD2QIG9yIC0yNTYwLjUgkT2RIG9yIDEgkj2SIG9yIC0yMDEyOC41IJM9kyBvciA2OTQzLjUglD2UIG9yIDIglT2VIG9yIC0yNjI0LjUglj2WIG9yIDMxNDU1LjUglz2XIG9yIDUgmD2YIG9yIDM4NTUuNSCZPZkgb3IgMjE4NDUuNSA7AGxvY2FsIHRpbWUsc3ViLGNocixvcmQsdG9zdHIsdG9udW0sYWRkLGRlbCxkZWxpLGNsaXAsY29sb3IscGFsLHBhbHQsZmlsbHAscGdldCxwc2V0LHNnZXQsc3NldCxmZ2V0LGZzZXQsY2lyYyxjaXJjZmlsbCxyZWN0LHJlY3RmaWxsLG92YWwsb3ZhbGZpbGwsbGluZSxzcHIsc3Nwcj0gICAgICB0aW1lLHN1YixjaHIsb3JkLHRvc3RyLHRvbnVtLGFkZCxkZWwsZGVsaSxjbGlwLGNvbG9yLHBhbCxwYWx0LGZpbGxwLHBnZXQscHNldCxzZ2V0LHNzZXQsZmdldCxmc2V0LGNpcmMsY2lyY2ZpbGwscmVjdCxyZWN0ZmlsbCxvdmFsLG92YWxmaWxsLGxpbmUsc3ByLHNzcHIgbG9jYWwgbWdldCxtc2V0LHRsaW5lLHBlZWsscG9rZSxwZWVrMixwb2tlMixwZWVrNCxwb2tlNCxtZW1jcHksbWVtc2V0LG1heCxtaW4sbWlkLGZscixjZWlsLGNvcyxzaW4sYXRhbjIscmFuZCxzcmFuZCxiYW5kLGJvcixieG9yLGJub3Qsc2hsLHNocixsc2hyLHJvdGwscm90cj0gICAgICAgbWdldCxtc2V0LHRsaW5lLHBlZWsscG9rZSxwZWVrMixwb2tlMixwZWVrNCxwb2tlNCxtZW1jcHksbWVtc2V0LG1heCxtaW4sbWlkLGZscixjZWlsLGNvcyxzaW4sYXRhbjIscmFuZCxzcmFuZCxiYW5kLGJvcixieG9yLGJub3Qsc2hsLHNocixsc2hyLHJvdGwscm90cjsgADsKADEwMzg4ACBuZD0wIAAlcyAlcygpACVzICVzKCIlcyIpAHNwbG9yZSgpAAogX2VuZF9vZl9wcm9ncmFtID0gMSAKAAoJICAgIF9lbmRfb2ZfcHJvZ3JhbSA9IDEgCgkgICAgaWYgKF9pbml0IH49IG5pbCkgdGhlbiBfaW5pdCgpIGVuZAogICAgICAgICAgICBfc2V0X21haW5sb29wX2V4aXN0cygwKQoJICAgIGlmIChfbWFpbmxvb3Agfj0gbmlsKSB0aGVuIF9zZXRfbWFpbmxvb3BfZXhpc3RzKDEpIGVuZAoJICAgIGlmIChfdXBkYXRlNjAgfj0gbmlsKSB0aGVuIF9zZXRfZnBzKDYwKSBfdXBkYXRlPW5pbCBlbHNlIF9zZXRfZnBzKDMwKSBlbmQKCSAgICBpZiAoX21haW5sb29wID09IG5pbCBhbmQgKF9kcmF3IH49IG5pbCBvciBfdXBkYXRlIH49IG5pbCBvciBfdXBkYXRlNjAgfj0gbmlsKSkgdGhlbgoJICAgIAlfc2V0X21haW5sb29wX2V4aXN0cygyKQoJCSAgICBfbWFpbmxvb3AgPSBmdW5jdGlvbigpIAoJICAgICAgICAJd2hpbGUgKHRydWUpIGRvCgkJCQkJX3VwZGF0ZV9idXR0b25zKF91cGRhdGU2MCBhbmQgMSBvciAyKQoJCQkJICAgIF9zdGFydGZyYW1lKCkgCgkJCQkgICAgaWYgKHN0YXQoNykgPT0gNjApIHRoZW4KCQkJCSAgICAJX21hcmtfY3B1KDApIF91cGRhdGU2MCgpIAoJCQkJICAgIGVsc2VpZiAoc3RhdCg3KSA9PSAzMCBhbmQgX3VwZGF0ZTYwKSB0aGVuCgkJCQkgICAgCV91cGRhdGU2MCgpIF91cGRhdGVfYnV0dG9ucygxKSBfbWFya19jcHUoMCkgX3VwZGF0ZTYwKCkKCQkJCSAgICBlbHNlaWYgKHN0YXQoNykgPT0gMzAgYW5kIF91cGRhdGUpIHRoZW4KCQkJCSAgICAJX21hcmtfY3B1KDApIF91cGRhdGUoKSAKCQkJCSAgICBlbHNlaWYgKHN0YXQoNykgPT0gMTUgYW5kIF91cGRhdGUpIHRoZW4KCQkJCSAgICAJX3VwZGF0ZSgpICBfdXBkYXRlX2J1dHRvbnMoMikgX21hcmtfY3B1KDApIF91cGRhdGUoKQoJCQkJICAgIGVuZAoJCQkJICAgIF9tYXJrX2NwdSgxKQoJCQkJICAgIGlmIChfZHJhdyB+PSBuaWwpIHRoZW4KCQkJCQkJbG9jYWwgZGkscmVzPTAsdHJ1ZSAKCQkJCQkJd2hpbGUgKGRpIDwgc3RhdCgxMSkgYW5kIHJlcykgZG8gcmVzID0gX21hcF9kaXNwbGF5KGRpKSBpZiAocmVzKSB0aGVuIHJlcz1fZHJhdygpIGVuZCBkaT1kaSsxIGVuZCAKCQkJCQkJX21hcF9kaXNwbGF5KDApIAoJCQkJCWVuZAoJCQkJICAgIF9tYXJrX2NwdSgyKQoJCQkJCV91cGRhdGVfZnJhbWVyYXRlKCkKCQkJCSAgICBmbGlwKCkKCQkJICAgIGVuZAoJCSAgICBlbmQKCSAgICBlbmQKCQlpZiAoX21haW5sb29wIH49IG5pbCkgdGhlbiBfbWFpbmxvb3AoKSBlbmQKICAgICAgICAKAHN5bnRheCBlcnJvcgBzeW50YXggZXJyb3IgbGluZSAlZCAodGFiICVkKQB1bmV4cGVjdGVkIHN5bWJvbCBuZWFyICdlbmQnAHVuZXhwZWN0ZWQgZW5kIG9mIGxpbmUAJXMgbGluZSAlZAoACi0tPjgKAC5wOC5wbmcAYmJzLwBydW5fY2FydCBjdXJyZW50X2ZpbGVuYW1lOiAlcyBydW5uaW5nX2ZpbGVuYW1lOiAlcyBydW5uaW5nX2NhcnRfbGlkOiAlcwoAc3RhY2sgdHJhY2ViYWNrACdfbWFpbmxvb3AAaW4gZnVuY3Rpb24gJwBpbiAlcyBsaW5lICVkICh0YWIgJWQpAGluIG1haW4gY2h1bmsAYXQgbGluZSAlZCAodGFiICVkKQBnYyBub3QgcnVubmluZzsgY291bGQgbm90IHBlcmZvcm0gZW1lcmdlbmN5IGNvbGxlY3Rpb24KAGdjIGhhcmQgY29sbGVjdDogJWQgLT4gJWQgKG92ZXJoZWFkOiVkKQoAb3V0IG9mIG1lbW9yeQBydW50aW1lIGVycm9yIGxpbmUgJWQgdGFiICVkAHJ1bnRpbWUgZXJyb3IAa2V5d29yZCBoYXNoIGNvbGxpc2lvbjogJXMgJXMKAGdvdG8AYnJlYWsAaXBhaXJzACVzXyUlZC5naWYAJXMuZ2lmACoqIEVHaWZPcGVuRmlsZU5hbWUgZXJyb3IgJWQ6ICVzCgBzYXZpbmcgZ2lmIHRvOiAlcwoATkVUU0NBUEUyLjAAZ2lmACoqIEVHaWZTcGV3KCkgR0lGX0VSUk9SCgBbY2FydF0AWy9jYXJ0XQBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvAEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Xy0ALnA4bAAudHh0AC5vYmoALm10bAAuc3ZnAC5wb3YALnNmZAAuY3N2AC5wcG0AWyVzXQBfX3JlZnVuZF9jcHVfXwBfX3BhaXJzX18AX19pcGFpcnNfXwBfX3N0b3AAX19wcmludABfX3ByaW50aABfX3Rvc3RyAF9fbG9hZABfX2V4dGNtZABfX3Rvc3RyaW5nX18AdG9zdHJpbmcAX190eXBlAF9fc2VsZWN0AF9fY29yZXN1bWUAX195aWVsZGVkX3RvX2VzY2FwZV9zbGljZQBjZABta2RpcgBleGl0AGZpbGU6ICVzJXMAdG9rZW5zOiAgICAgJTVkIC8gICVkAGNoYXJzOiAgICAgICU1ZCAvICVkAGNvbXByZXNzZWQ6ICU1ZCAvICVkAHVuc2F2ZWQgY2hhbmdlcwBleHRlcm5hbCBjaGFuZ2VzAGNvbnRpbnVlIHdpdGggc2h1dGRvd24/IFt5L25dAEBAIHBpY28tOCBzaHV0dGluZyBkb3duAGNvbnRpbnVlIHdpdGggcmVib290PyBbeS9uXQB0cnk6IGhlbHAgPHRvcGljPiBpbnN0ZWFkLiBlLmcuAGNvbW1hbmRzAGxvYWQgPGZpbGVuYW1lPiAgc2F2ZSA8ZmlsZW5hbWU+AHJ1biAob3IgY3RybC1yKSAgcmVzdW1lAHNodXRkb3duICAgICAgICAgcmVib290AGluc3RhbGxfZGVtb3MgICAgbHMAY2QgPGRpcm5hbWU+ICAgICBta2RpciA8ZGlybmFtZT4AY2QgLi4gICAgICB0byBnbyB1cCBhIGRpcmVjdG9yeQBrZXljb25maWcgIHRvIGNob29zZSBidXR0b25zAHNwbG9yZSAgICAgdG8gZXhwbG9yZSBjYXJ0cmlkZ2VzAGhlbHAgPHRvcGljPgBwcmVzcyBlc2MgdG8gdG9nZ2xlIGVkaXRvciB2aWV3AGFsdCtlbnRlciB0byB0b2dnbGUgZnVsbHNjcmVlbgBhbHQrZjQgb3IgY3RybC1xIHRvIGZhc3RxdWl0AGN0cmwtbS8tLysgdG8gYWRqdXN0IHZvbHVtZSAAY2FuIG5vdCBzYXZlIHdoaWxlIHJ1bm5pbmcAZmlsZW5hbWUgdG9vIGxvbmcAQHVybABAY2xpcABAY2xpcC5wOABAY2xpcC5wbmcAQGNsaXAucDgucG5nAHdhcm5pbmc6IGxhYmVsIGlzIGJsYW5rAHJ1biBjYXJ0IGFuZCBjdHJsLTcgdG8gY2FwdHVyZQBfY2xpcC5wOC5wbmcAX2NsaXAucDgucG5nLmhleABjb3BpZWQgdG8gdGV4dGZpZWxkIC0tIHByZXNzAGN0cmwtYyB0byBjb3B5IHRvIGNsaXBib2FyZCEAZmFpbGVkIHRvIHNhdmUgdG8gY2xpcGJvYXJkACogc2F2ZSBmYWlsZWQgKgBpbGxlZ2FsIGZpbGVuYW1lOgBmaWxlIGFscmVhZHkgZXhpc3RzAG92ZXJ3cml0ZT8gW3kvbl0Ac2F2ZWQgJXMlcwBjb3VsZCBub3Qgc2F2ZQBsb2dpbiB1bmF2YWlsYWJsZQBta2RpciBbbmFtZV0AbWtkaXIgZmFpbGVkOiBpbGxlZ2FsIHBhdGggbmFtZQBkaXJlY3Rvcnk6IC8lcwAlcyVzLwAlcyVzJXMvAGNkOiBmYWlsZWQAZGlyZWN0b3J5IG5vdCBmb3VuZAAvJXMAbGFiZWwAc2F2ZWQgbGFiZWwAc2NyZWVuACoqIGNvdWxkIG5vdCBzYXZlIHNjcmVlbnNob3QAc2F2ZWQgaW1hZ2UAZ2VuZXJhdGVkIHNjcmVlbnNob3QAcmVjAHJlY19mcmFtZXMAdmlkZW8AQEAgc2F2ZSBnaWYgcmVzdWx0OiAlZCB2aWRlb19jbGlwX2luZGV4OiAlZAoAbm8gdmlkZW8gcmVjb3JkZWQgKDAgZnJhbWVzKQAqKiBjb3VsZCBub3Qgc2F2ZSBnaWYAc2F2ZWQgJWQgc2Vjb25kIGdpZgBnZW5lcmF0ZWQgJWQgc2Vjb25kIGdpZgBhdWRpb19yZWMAYXVkaW9fZW5kAHBhdXNlAGNvbnRyb2xzAGJyZWFkY3J1bWIAZ29fYmFjawBzZXRfdGl0bGUAc2V0X2ZpbGVuYW1lAHVua25vd24gZXh0Y21kOiVzAGRvd25sb2FkaW5nLi4gAGJhZCBjYXJ0cmlkZ2UgaWQAL2Jicy9jcG9zdF9saXN0ZXIzLnBocD9uZm89MSZ2ZXJzaW9uPSVzJWMmbGlkPSVzAEBkcm9wcGVkAGRyb3BwZWQucDgAbG9hZGVkIGNhcnRyaWRnZSAoJWQgY2hhcnMpAHNvcnJ5LCBAY2xpcCBpcyBub3QgYXZhaWxhYmxlAGxvYWRlZCAlcyVzICglZCBjaGFycykAY291bGQgbm90IGxvYWQ6IGZ1dHVyZSB2ZXJzaW9uAGNvdWxkIG5vdCBsb2FkOiBjb2RlIHNpemUgPiA2NGsAY291bGQgbm90IGxvYWQAMHglMDh4ADB4JTA0eC4lMDR4AHByZXNzIGN0cmwtYyB0byBjb21wbGV0ZSBjb3B5AHByaW50aDogYmFkIGxvZyBmaWxlIG5hbWUAcHJpbnRoOiB0b28gbXVjaCBsb2cgZGF0YSAoMTBtYiBtYXgpAHwlcwB0b28gbWFueSBwcmludGggZmlsZXMAYQAlcwoAcHJpbnRoOiBjb3VsZCBub3Qgd3JpdGUgZmlsZQBjb3VudABfX2ZsaXAAX19zdXBlcnlpZWxkAGJhY2t1cABpbnN0YWxsX2RlbW9zAGluc3RhbGxfZ2FtZXMAa2V5Y29uZmlnAG1hcGRyYXcAYmJzcmVxAHJhZGlvAHNldF9kcmF3X3NsaWNlAF9tZW51aXRlbQBuZXh0AGluZXh0AHNldG1ldGF0YWJsZQBnZXRtZXRhdGFibGUAcmF3ZXF1YWwAcmF3bGVuAHJhd2dldAByYXdzZXQAYXNzZXJ0AF9fdHJhY2UAdHJhY2UAaG9sZGZyYW1lAF9zdGFydGZyYW1lAF9nZXRfbWVudV9pdGVtX3NlbGVjdGVkAF91cGRhdGVfYnV0dG9ucwBfdXBkYXRlX2ZyYW1lcmF0ZQBfc2V0X21haW5sb29wX2V4aXN0cwBfc2V0X2ZwcwBfbWFya19jcHUAX21hcF9kaXNwbGF5AHRvbyBtYW55IG9yZCByZXN1bHRzAGRldmtpdCBrZXlib2FyZCBlbmFibGVkAGRldmtpdCBtb3VzZSBlbmFibGVkAHsgdmFyIHN0ciA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTsgcmV0dXJuIGFsbG9jYXRlKGludEFycmF5RnJvbVN0cmluZyhzdHIpLCAnaTgnLCBBTExPQ19OT1JNQUwpOyB9AGRzZXQgY2FsbGVkIGJlZm9yZSBjYXJ0ZGF0YSgpAGRnZXQgY2FsbGVkIGJlZm9yZSBjYXJ0ZGF0YSgpAGhpZ2ggc2NvcmVzIG5vdCBpbXBsZW1lbnRlZCB5ZXQhAGNhbiBub3QgY29ubmVjdCB0byBiYnNyZXEgaG9zdAB0b28gbWFueSBwZWVrIHJlc3VsdHMAY3N0b3JlLwBzYW5kYm94ZWRfY3N0b3JlIGZpbGUgbm90IGZvdW5kOiAlcwoAICAtLT4gdXNpbmcgaW50ZXJuYWwgZmlsZTogJXMKAHNwbG9yZSBpcyBub3QgYXZhaWxhYmxlAGluIHRoaXMgdmVyc2lvbi4AaW5zdGFsbGluZyBnYW1lcyB0byAvZ2FtZXMvAGJhY2tlZCB1cCAlcyVzAGJhY2t1cHMAY29uZmlnAHVzZWFnZTogZm9sZGVyIFtsb2NhdGlvbl0AbG9jYXRpb25zOgBiYWNrdXBzIGNvbmZpZyBiYnMgZGVza3RvcABob3N0IGFsbG9jYXRpb24gZXJyb3IAJWRtYiArICVkawoAbm8gaGVscCB0b3BpYyB1bmRlciBjdXJzb3IAdHlwZSB0aGUgdG9waWMgd2l0aG91dCA8Pi4gZS5nLjoAaGVscCBnZngAYWJvdXQAcGljby04AIAgcGljby04IDAuMi41ZwBtYWRlIGJ5IHplcCBhdCBwaWNvIHBpY28gY2FmZSwAdG9reW8uIHRoaXMgcHJvZ3JhbSBpcyBkZWRpY2F0ZWQAdG8gdG9tLCBsb3VpcyBhbmQgbmFjY2kuAHBpY28tOCB3YXMgbWFkZSB3aXRoIHNkbDIsIGx1YSwAZ2lmbGliLCB3aXJpbmdwaSwgbGliYjY0LCBtaW5peiwAbGliY3VybCwgYW5kIGdudSB0b29scy4AYXVkaW8Ac2Z4AIAgYXVkaW8gYXBpIGZ1bmN0aW9ucwBtdXNpYyBzZngAaW5wdXQAdXNlIHRoZSBrZXljb25maWcgY29tbWFuZAB0byBzZXQgZGVmYXVsdCBidXR0b24ga2V5cy4AgCBpbnB1dCBhcGkgZnVuY3Rpb25zAGJ0biBidG5wAHN0cmluZwBzdHJpbmdzAIAgc3RyaW5ncwBzdHJpbmdzIGluIGx1YSBhcmUgaW1tdXRhYmxlOwB0aGV5IGNhbiBiZSBjcmVhdGVkIGFuZCBqb2luZWQAdG9nZXRoZXIsIGJ1dCBub3QgbW9kaWZpZWQuAHMgPSAiZm9vIiAgICAgAD90eXBlKHMpICAgIC0tIHN0cmluZyAAP3MgPT0gImZvbyIgLS0gdHJ1ZQA/cy4uImJvbyIgICAtLSBmb29ib28gKGpvaW4pAD9zLi4oMisyKSAgIC0tIGZvbzQAP3NbMV0gICAgICAgLS0gZgA/I3MgICAgICAgICAtLSAzIChsZW5ndGgpAIAgc3RyaW5nIGZ1bmN0aW9ucwBzdWIgY2hyIG9yZCBzcGxpdCB0b3N0ciB0b251bQCAIGxlbmd0aCBvcGVyYXRvcjogIwBnaXZlcyB0aGUgbGVuZ3RoIG9mIGEgc3RyaW5nIG9yAGEgdGFibGUgdGhhdCBpcyBpbmRleGVkIHdpdGgAaW50ZWdlcnMgc3RhcnRpbmcgYXQgMToAPiA/IyJ0aGUgcXVpY2sgYnJvd24gZm94IgAxOQA+IGE9ezEsMiwzfQA+ID8jYQBzZWUgYWxzbzogdGFibGVzIHN0cmluZ3MAdGFibGUAdGFibGVzAIAgdGFibGVzAGx1YSBwcm92aWRlcyBhIHNpbmdsZSB0eXBlIGZvcgBzdHJ1Y3R1cmVkIGRhdGE6IHRoZSB0YWJsZS4ga2V5cwBhbmQgdmFsdWVzIGluIGEgdGFibGUgY2FuIGJlIGEAYSBtaXh0dXJlIG9mIGFueSB0eXBlLCBhbmQgdGh1cwBjYW4gYmUgdXNlZCBhcyBhcnJheXMsIG1hcHMsAHNldHMsIG9yIGR1Y2stdHlwZWQgb2JqZWN0cy4AdGJsID0gezUsNiw3fSAtLSBjcmVhdGUgYSB0YWJsZQA/dGJsWzFdIC0tIDUgKDEtYmFzZWQpAD8jdGJsICAgLS0gMyAoMS1iYXNlZCBsZW5ndGgpAHogPSB7WzBdPTUsNn0gLS0gc3RhcnQgYXQgMABwID0ge3g9NCx5PTR9IC0tIHN0cmluZyBrZXlzAD9wLnggICAgICAgICAgLS0gc2FtZSBhcyA/cFsieCJdAIAgdGFibGUgZnVuY3Rpb25zAGFkZCBkZWwgZGVsaSBhbGwgZm9yZWFjaCBwYWlycwBsdWEAgCBsdWEgY2hlYXRzaGVldAAtLSAgc2luZ2xlIGxpbmUgY29tbWVudAAtLVtbIGNvbW1lbnQgdGhhdCBzcGFucyBtdWx0aXBsZQBsaW5lcyBdXQBsb2NhbCBhICAgICAgIC0tIGxvY2FsIHZhcmlhYmxlAHgseSx6ID0gMyw0LDUgLS0gZ2xvYmFscwBwcmludCh4PT0zKSAgIC0tIHByaW50IGJvb2xlYW4AZnVuY3Rpb24gcGx1czIoeCkgcmV0dXJuIHgrMiBlbmQAZm9yIGk9MTAsOTAsNSBkbyBjaXJjKGksNSxpKSBlbmQAd2hpbGUoeCA8IDQpIGRvIHg9eCsxIGVuZABpZiAoeCAhPSA0KSB0aGVuIGZvbygpIGVuZABpZiAoeCA9PSA0KSBmb28oKSAtLSBzaG9ydGhhbmQAgCBleHRyYSB0b3BpY3MAdGFibGVzIHN0cmluZ3MgbnVtYmVycyBsb2dpYwBmdW5jdGlvbgByZXR1cm4AgCBrZXl3b3JkczogZnVuY3Rpb24gcmV0dXJuAGEgZnVuY3Rpb24gY2FuIHRha2UgYW55IG51bWJlcgBvZiBhcmd1bWVudHMsIGFuZCByZXR1cm4gYW55AG51bWJlciBvZiByZXN1bHRzOgBmdW5jdGlvbiBmb28oYSwgYikAICBwcmludCgiaW5zaWRlIGZvbyIpACAgcmV0dXJuIGEgKyBiLCAzIC0tIDIgcmVzdWx0cwBlbmQAPiB4LHkgPSBmb28oOCw5KQA+IHByaW50KHgpADE3AD4gcHJpbnQoeSkAd2hpbGUAgCBrZXl3b3JkOiB3aGlsZQByZXBlYXQgYSBibG9jayBvZiBjb2RlIHdoaWxlIGEAY29uZGl0aW9uIGlzIHRydWUuAGkgPSAzAHdoaWxlIGkgPCA1IGRvACAgcHJpbnQoaSkAICBpID0gaSArIDEALS0tIG91dHB1dCAtLS0AZG8AgCBrZXl3b3JkOiBkbwBkZW5vdGUgdGhlIHN0YXJ0IG9mIGEgYmxvY2sAb2YgY29kZS4gdXNlZCBieSB3aGlsZSBhbmQAZm9yIGxvb3BzLgCAIGtleXdvcmQ6IGVuZABkZW5vdGUgdGhlIGVuZCBvZiBhIGJsb2NrIG9mAGNvZGUuIHVzZWQgYnkgd2hpbGUsIGlmLCBmb3IAbG9vcHMsIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucy4AcmVwZWF0AHVudGlsAIAga2V5d29yZHM6IHJlcGVhdCwgdW50aWwAcmVwZWF0IGEgYmxvY2sgb2YgY29kZSB1bnRpbABzb21lIGNvbmRpdGlvbiBpcyB0cnVlIGF0IHRoZQBlbmQgb2YgdGhlIGJsb2NrLgB0aGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGlzAGFsd2F5cyBleGVjdXRlZCBhdCBsZWFzdCBvbmNlLAB1bmxpa2Ugd2hpbGUgLi4gZG8gLi4gZW5kLgB1bnRpbCBpID49IDUAaWYAdGhlbgBlbHNlaWYAZWxzZQCAIGlmLCB0aGVuLCBlbHNlaWYsIGVsc2UAZG8gc29tZXRoaW5nIHdoZW4gc29tZXRoaW5nIGlzAHRydWUuIGVsc2UgYW5kIGVsc2VpZiBibG9ja3MgYXJlAG9wdGlvbmFsOgBpZiB4ID4geSB0aGVuACAgcHJpbnQoeC4uIiBpcyBtb3JlIHRoYW4gIi4ueSkAaWYgeCA8IDQgdGhlbgAgIHByaW50KCJ4IGlzIGxlc3MgdGhhdCA0IikAZWxzZWlmIHggPCA2IHRoZW4AICBwcmludCgieCBpcyA0IG9yIDUiKQAgIHByaW50KCJ4IGlzIDYgb3IgbW9yZSIpAGlmICh4PDQpID8ieDw0IiAtLSBzaG9ydGhhbmQAZm9yAGluAIAgZm9yIGxvb3BzAHJlcGVhdCBhIGJsb2NrIG9mIGNvZGUgbiB0aW1lcy4AZm9yIGk9MSw1IGRvAC0tIHJlc3VsdDogMSAyIDMgNCA1AGEgc3RlcCBzaXplIGNhbiBiZSBhZGRlZDoAZm9yIGk9MSw4LDIgZG8gcHJpbnQoaSkgZW5kAC0tIHJlc3VsdDogMSAzIDUgNwBmb3IgbG9vcHMgY2FuIGFsc28gYmUgdXNlZCB0bwBpdGVyYXRlIG92ZXIgdGFibGVzLgBzZWUgYWxzbzogcGFpcnMgYWxsAHRydWUAZmFsc2UAbmlsAGJvb2xlYW4AgCB0cnVlIGZhbHNlIG5pbABib29sZWFuIHZhcmlhYmxlcyBjYW4gaGF2ZSB0aGUAdmFsdWUgdHJ1ZSBvciBmYWxzZS4gbmlsIGlzIGEAc3BlY2lhbCB2YWx1ZSB0aGF0IG1lYW5zIGZhbHNlAGluIGJvb2xlYW4gZXhwcmVzc2lvbnMsIGFuZABvdGhlcndpc2UgbWVhbnMgJ3VuZGVmaW5lZCcuAD4gP3p4YyAgLS0gbm90IGRlZmluZWQsIHNvIG5pbAA+ID96eGMgYW5kIHRydWUAbmlsLCB1bnJlZmVyZW5jZWQgdmFyaWFibGVzIGFyZQBhdXRvbWF0aWNhbGx5IGdhcmJhZ2UgY29sbGVjdGVkLgA+IGE9bmlsIC0tIHdpbGwgYmUgY29sbGVjdGVkLgB0eXBlcwCAIHR5cGUodikAcmV0dXJuIHRoZSB0eXBlIG9mIHZhcmlhYmxlIHYAYXMgYSBzdHJpbmc6ACBuaWwAIGJvb2xlYW4AIG51bWJlcgAgc3RyaW5nACBmdW5jdGlvbgAgdGFibGUAgCBzZWUgYWxzbzoAbnVtYmVycyBzdHJpbmdzIHRhYmxlcwBsb2NhbACAIGtleXdvcmQ6IGxvY2FsAGRlY2xhcmUgYSB2YXJpYWJsZSBhcyBsb2NhbC4AdGhpcyBiaW5kcyB0aGUgc2NvcGUgb2YgdGhlAHZhcmlhYmxlIHRvIHRoZSBzYW1lIGJsb2NrAG9mIGNvZGUgaXQgd2FzIGRlZmluZWQgaW4uAGZ1bmN0aW9uIGZvbyh6KQAgIGxvY2FsIHkgPSB6IC0tIGxvY2FsIHRvIGZvbwAgIHkgPSB5ICsgMQAgIHJldHVybiB5AD9mb28oMTApIC0tIDExAD95IC0tIG5pbCEgdGhlcmUgaXMgbm8gZ2xvYmFsIHkuADwAPgA8PQA+PQA9PQB+PQAhPQBhbmQAb3IAbm90AGxvZ2ljAIAgbG9naWNhbCBleHByZXNzaW9ucyBpbiBsdWEAdGhlIGxvZ2ljYWwgb3BlcmF0b3JzIGFyZToAYW5kLCBvciwgYW5kIG5vdAA/NSA+IDMgYW5kIDUgPiA0IC0tIHRydWUAPzEgPiA1IGFuZCA1ID4gNCAtLSBmYWxzZQA/MSA+IDUgb3IgIDUgPiA0IC0tIHRydWUAP25vdCAoMSA+IDUpICAgICAtLSB0cnVlAG5pbCBpcyBjb25zaWRlcmVkIGZhbHNlLgByZWxhdGlvbmFsIG9wZXJhdG9yczoAPCA+IDw9ID49ID09IH49IChvciAhPSkAgCBhc3NpZ25tZW50OiA9AGdpdmUgdGhlIHZhcmlhYmxlIG9uIGxocwB0aGUgdmFsdWUgb2YgdGhlIHJocy4APiB4ID0gMys1AD4gP3gAZGF0YQBtZW0AgCBtZW1vcnkgJiBkYXRhIGFwaSBmdW5jdGlvbnMAcGVlayBwb2tlIG1lbXNldCBtZW1jcHkAcmVsb2FkIGNzdG9yZSBzY29yZXN1YgBjYXJ0ZGF0YSBkZ2V0IGRzZXQAgCBzZngobixbY2hhbl0sW29mZnNldF0sW2xlbl0pAHBsYXkgc2Z4IG4gKDAuLjYzKQBvZmZzZXQgYW5kIGxlbiBzcGVjaWZ5IHRoZSBzdGFydABwb3NpdGlvbiBhbmQgZHVyYXRpb24sIGFuZCBhcmUAZ2l2ZW4gaW4gbnVtYmVyIG9mIG5vdGVzLgBjaGFuICAgOiB0aGUgY2hhbm5lbCB0byBwbGF5IG9uAGNoYW4gLTE6IHVzZSBhbiB1bnVzZWQgY2hhbm5lbABjaGFuIC0yOiBzdG9wIHNmeCBuIG9uIGFsbCBjaGFucwCAIG11c2ljKHAsW2ZhZGVfbGVuXSxbbWFza10AcGxheSBtdXNpYyBzdGFydGluZyBmcm9tIHBhdHRlcm4AcC4gdXNlIHAgLTEgdG8gc3RvcCBhbnkgbXVzaWMuAGZhZGVfbGVuIGlzIGdpdmVuIGluIG1zICgxMDAwIGlzAG9uZSBzZWNvbmQpLiBtYXNrIGlzIGEgYml0ZmllbGQAdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGNoYW5uZWxzAHRvIHJlc2VydmUgZm9yIG11c2ljLgBidG4AgCBidG4oW2JdLCBbcGxdKQBnZXQgYnV0dG9uIGIgc3RhdGUgZm9yIHBsYXllciBwbABvciBwbGF5ZXIgMCB3aGVuIHBsIGlzIG5vdCBnaXZlbgBiIGlzIGEgYnV0dG9uIGluZGV4OgAwOosgMTqRIDI6lCAzOoMgNDqOIDU6lyAAYnRuKCkgcmV0dXJucyBhIGJpdGZpZWxkIGZvcgBwbGF5ZXIgMCBhbmQgMQBnbHlwaHMAgCBnbHlwaCB2YWx1ZXMAZ2x5cGhzICgngC4umScpIGNhbiBiZSB1c2VkAGFzIHBhcnQgb2YgcmVndWxhciB2YXJpYWJsZQBuYW1lcywgYnV0IHNpbmdsZSBjaGFyYWN0ZXIAZ2x5cGhzIGFyZSBhbHNvIGFzc2lnbmVkIHNwZWNpYWwAdmFsdWVzIG9uIGJvb3Q6AIAgYnV0dG9ucwCLOjAgkToxIJQ6MiCDOjMgjjo0IJc6NQCAIGZpbGwgcGF0dGVybnMgLy8gZmlsbHAolSkAgIGChIWGh4iJioyNkJKTlQBzZWUgYWxzbzogYnRuIGJ0bnAgZmlsbHAAYnRucACAIGJ0bnAoW2JdLCBbcGxdKQByZXR1cm5zIHRydWUgd2hlbiBidXR0b24gYiB3YXMAcHJlc3NlZCBieSBwbGF5ZXIgcGwgKDAuLjcpLgBwbCBkZWZhdWx0cyB0byAwIHdoZW4gbm90IGdpdmVuLgBidG5wIHJlcGVhdHMgZXZlcnkgbiBmcmFtZXM6ADB4NWY1YyBpbml0aWFsIGRlbGF5IChkZWY6IDE1KQAweDVmNWYgcmVwZWF0IGRlbGF5ICAoZGVmOiAgNCkAYnRucCBvbmx5IHdvcmtzIHdoZW4gdXNlZCBmcm9tAGluc2lkZSBfdXBkYXRlKigpLCBfZHJhdygpLCBvcgBiZXR3ZWVuIGNhbGxzIHRvIGZsaXAoKS4AaGVscABtYW4AdG9waWMAdG9waWNzAIAgaGVscCBjb21tYW5kAHR5cGUgaGVscCBbdG9waWNdIGZvciBoZWxwAHRvcGljcyBhcmUgc2hvd24gaW4gYmx1ZS4AcHJlc3MgY3RybC11IGluIHRoZSBjb2RlIGVkaXRvcgBmb3IgaGVscCBvbiB3aGF0ZXZlciBpcyB1bmRlcgB0aGUgY3Vyc29yLgCAIG1haW4gdG9waWNzAGdmeCBkYXRhIGF1ZGlvIHN5c3RlbSBtYXRoIGx1YQBtYXRoAG1hdGhzAIAgbWF0aCBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycwBjb3Mgc2luIGF0YW4yIHNxcnQgc3JhbmQgcm5kAG1heCBtaW4gbWlkIGZsciBjZWlsIHNnbiBhYnMA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eCA8PCBuAHNoaWZ0IGxlZnQuIG1vdmUgYWxsIG9mIHRoZQBiaXRzIGluIHggbGVmdCBuIHBsYWNlcy4APiA/dG9zdHIoMHhmZi4wYyA8PCA4LCAxKQAweGZmMGMuMDAwMABzaHIAPj4APj49AIAgc2hyKHgsIG4pACAgIHggPj4gbgBhcml0aG1ldGljIHNoaWZ0IHJpZ2h0LiBtb3ZlIGFsbABiaXRzIGluIHggcmlnaHQgbiBwbGFjZXMuIHRoZQBsZWZ0LW1vc3QgYml0IGlzICdzdGlja3knLCBzbwB0aGF0IG5lZ2F0aXZlIHZhbHVlcyByZW1haW4AbmVnYXRpdmUuAD4gP3Rvc3RyKDB4ODBjYS5mZSA+PiA4LCAxKQAweGZmODAuY2FmZQBsc2hyAD4+PgA+Pj49ACAgIHggPj4+IG4AbG9naWNhbCBzaGlmdCByaWdodC4gbW92ZSBhbGwAYml0cyBpbiB4IHJpZ2h0IG4gcGxhY2VzLiB6ZXJvcwBjb21lIGluIGZyb20gdGhlIGxlZnQuAD4gP3Rvc3RyKDB4ODBjYS5mZSA+Pj4gOCwgMSkAMHgwMDgwLmNhZmUAcm90bAA8PD4APDw+PQCAIHJvdGwoeCwgbikAICAgeCA8PD4gbgByb3RhdGUgYml0cyBsZWZ0IG4gcGxhY2VzLgA+ID90b3N0cigweGNhZmUuZjAwZCA8PD4gNCwgMSkAMHhhZmVmLjAwZGMAcm90cgA+PjwAPj48PQCAIHJvdHIoeCwgbikAICAgeCA+PjwgbgByb3RhdGUgYml0cyByaWdodCBuIHBsYWNlcy4APiA/dG9zdHIoMHhjYWZlLmYwMGQgPj48IDQsIDEpADB4ZGNhZi5lZjAwAG51bWJlcnMAgCBudW1iZXJzAG51bWJlcnMgaW4gcGljby04IGFyZSAxNjoxNgBmaXhlZCBwb2ludC4gdGhpcyBtZWFucyB0aGF0ADE2IGJpdHMgYXJlIHVzZWQgZm9yIHRoZQBpbnRlZ2VyIHBhcnQsIGFuZCAxNiBmb3IgdGhlAGZyYWN0aW9uYWwgcGFydC4gdGhlIHJhbmdlIG9mAHBvc3NpYmxlIHZhbHVlcyBpczoALTMyNzY4LjAgdG8gMzI3NjcuOTk5OTkAbnVtYmVycyB3cml0dGVuIGluIGRlY2ltYWwgYXJlAHJvdW5kZWQgdG8gdGhlIGNsb3Nlc3QgZml4ZWQAcG9pbnQgdmFsdWUuIHRvIHNlZSB0aGUgcmF3IDMyLQBiaXQgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb246AD4gP3Rvc3RyKDEvNiwgMSkAMHgwMDAwLjJhYWEAaGV4AGhleGFkZWNpbWFsAIAgaGV4YWRlY2ltYWwAbnVtYmVycyBjYW4gYmUgd3JpdHRlbiBpbiBoZXgAYnkgcHJlZml4aW5nIHRoZW0gd2l0aCAiMHgiOgA+IHByaW50KDB4M2YpADYzAGhleGlkZWNpbWFsIG5vdGF0aW9uIGlzIGJhc2UtMTYAdXNpbmcgY2hhcmFjdGVyIGEuLmYgZm9yIHRoZQB2YWx1ZXMgMTAuLjE1LiBpbiB0aGUgZXhhbXBsZQBhYm92ZSwgMHgzMCBtZWFucyA0OCAoMyoxNikgYW5kAHRoZSBmIG1lYW5zIDE1LCBzbyB0aGUgcmVzdWx0IGluAGRlY2ltYWwgaXM6IDQ4ICsgMTUgLT4gNjMuAHRvIGNvbnZlcnQgZnJvbSBkZWNpbWFsIHRvIGhleDoAPiBwcmludCh0b3N0cig2MywgMSkpADB4MDAzZi4wMDAwIC0tIGFsbCAzMiBiaXRzIHNob3duAGJpbmFyeQCAIGJpbmFyeQBudW1iZXJzIGNhbiBiZSB3cml0dGVuIGluIGJpbmFyeQBmb3JtIGJ5IHByZWZpeGluZyB0aGVtIHdpdGggIjBiIgA+IHByaW50KDBiMTAwMS4wMSkAOS4yNQA4ICB8ICA0ICB8ICAyICB8ICAxICB8IDEvMiB8IDEvNAAtLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLQAxICB8ICAwICB8ICAwICB8ICAxICB8ICAwICB8ICAxIABpbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIGZpcnN0ADEgaXMgaW4gdGhlICI4cyIgY29sdW1uLCBzbyB0aGUAaW50ZWdlciBwYXJ0IGlzIDgrMSA9IDkuIGFmdGVyAHRoZSBkZWNpbWFsIHBvaW50LCBlYWNoIDEgbWVhbnMAMS8yLCAxLzQsIC4uLiAxLzY1NTM2LiBpbiB0aGlzAGNhc2UgdGhlIG9ubHkgMSBpcyBpbiB0aGUgMS80dGhzAGNvbHVtbiwgc28gdGhlIHJlc3VsdCBpcyA5LjI1AGJpdGZpZWxkAGJpdGZpZWxkcwCAIGJpdGZpZWxkcwBiaXRmaWVsZHMgYXJlIG51bWJlcnMgd2hlcmUgZWFjaABlYWNoIGJpdCBoYXMgYmVlbiBhc3NpZ25lZCBhAHBhcnRpY3VsYXIgbWVhbmluZy4gcGljby04IHVzZXMAYml0ZmllbGRzIGZvciB0aGUgc3ByaXRlIGZsYWdzLABhbmQgc29tZXRpbWVzIGFzIHBhcmFtZXRlcnMgYW5kAHJldHVybiB2YWx1ZXMgZm9yIGFwaSBmdW5jdGlvbnMuAHRvIGNvbnN0cnVjdCBhIGJpdGZpZWxkLCB5b3UgY2FuAGJvcigpIHRoZSBzZXBhcmF0ZSBiaXRzIHRvZ2V0aGVyAGFuZCB0aGVuIHRlc3QgaWYgZWFjaCBiaXQgKGZsYWcpAGlzIHNldCB1c2luZyBiYW5kKCk6AD4gZmxhZ3MgPSA4fDEgLS1zZXQgYml0cyAzIGFuZCAwAD4gPyhmbGFncyAmIDgpID4gMCAtLWNoZWNrIGJpdCAzAHNlZSBhbHNvOiBiaW5hcnkgYm9yIGJhbmQAKwArPQAtPQCAIG9wZXJhdG9yOiArIC0gKz0gLT0AYWRkLCBzdWJ0cmFjdC4APiA/Mys0AD4geD03AD4geC09MgB3aGVuIHRoZSByZXN1bHQgaXMgZ3JlYXRlciB0aGFuADB4N2ZmZi5mZmZmLCB0aGUgcmVzdWx0IGxvb3BzOgA+ID8weDdmZmYgKyAxAC0zMjc2OAAqPQAvPQCAIG9wZXJhdG9yczogKiAvICo9IC89AG11bHRpcGx5IHR3byBudW1iZXJzLCBvciBkaXZpZGUAb25lIGJ5IHRoZSBvdGhlci4APiA/Myo0ADEyAD4geD04AD4geC89NAB0aGUgcmVzdWx0cyBvZiBtdWx0aXBseSBvdmVyZmxvdwBidXQgdGhlIHJlc3VsdHMgb2YgZGl2aWRlIGFyZQBjbGFtcGVkIHRvIC0zMjc2OC4uMHg3ZmZmLmZmZmY6AD4gP3Rvc3RyKDUwMCAvIDAsIDEpADB4N2ZmZi5mZmZmAFwAXD0AgCBpbnRlZ2VyIGRpdmlkZSBvcGVyYXRvcjogXABnaXZlcyB0aGUgc2FtZSByZXN1bHQgYXMgYQByZWd1bGFyIGRpdmlkZSByb3VuZGVkIGRvd24uAD4gPzlcMiAtLSBzYW1lIGFzIGZscig5LzIpAD4geCA9IDE2AD4geCBcPSAzACUAJT0AgCBtb2R1bG8gb3BlcmF0b3I6ICUgJT0AeCAlIHkgbWVhbnM6IGtlZXAgYWRkaW5nIHkAb3Igc3VidHJhY3RpbmcgeSBmcm9tIHggdW50aWwAMCA8PSB4IDwgeS4APiA/IDE1ICUgNABmb3IgcG9zaXRpdmUgbnVtYmVycywgdGhpcyBpcwB0aGUgc2FtZSBhcyBkaXZpbmcgeCBieSB5IGFuZAB5IGFuZCByZXR1cm5pbmcgdGhlIHJlbWFpbmRlci4AbW9kdWxvIGlzIHVzZWZ1bCB3aGVuZXZlciB5b3UAeW91IG5lZWQgdG8gd3JhcCBhIG51bWJlciB0bwBhIHBhcnRpY3VsYXIgcmFuZ2UuIGZvciBleGFtcGxlOgBmbHIodCgpJTMpIC0tIDAgMSAyIDAgMSAyIC4uAHNlZSBhbHNvOiBwZWVrMiAoZS5nLiAlbWVtX2FkZHIpAF4AXj0AgCBleHBvbmVudCBvcGVyYXRvcjogXiBePQB4IF4geSBnaXZlcyB4IHRvIHRoZSBwb3dlciBvZiB5LgB5IGNhbiBiZSBmcmFjdGlvbmFsLgA+ID81IF4gMyAgLS0gIHNhbWUgYXMgNSo1KjUAMTI1AD4gPzE2IF4gMC41AG5vdGU6IHheeSBtZWFucyBiaXR3aXNlIHhvciBpbgBvdGhlciBsYW5ndWFnZXMhIGluIHBpY28tOCBsdWEsAHhvciBpcyB4fnkgKG9yIGxlZ2FjeTogeF5eeSkALi49AIAgc3RyaW5nIGpvaW4gb3BlcmF0b3I6IC4uIC4uPQBvcGVyYW5kcyBjYW4gYWxzbyBiZSBub24tc3RyaW5nAHZhcmlhYmxlcywgYW5kIGFyZSBhdXRvbWF0aWNhbGx5AGNvbnZlcnRlZCB0byBjb21wbGV0ZSB0aGUgam9pbi4APiA/ImhlbGxvICIuLiJ3b3JsZCIAaGVsbG8gd29ybGQAPiB4ID0gNQA+ID8ieCBpczogIi4ueAB4IGlzIDUALi4uAIAgYXJndW1lbnRzOiAuLi4ALi4uIG1lYW5zICdyZW1haW5pbmcgYXJndW1lbnRzJwBmdW5jdGlvbiBwcmludF9hbGwoLi4uKQAgYT17Li4ufQAgZm9yZWFjaChhLCBwcmludCkAcHJpbnRfYWxsKDEsMiwzKQBzZWUgYWxzbzogc2VsZWN0IHBhY2sgdW5wYWNrAHNlbGVjdAB1bnBhY2sAcGFjawCAIHNlbGVjdCguLi4sIG4pACAgIHBhY2soLi4uKQAgICB1bnBhY2sodGJsKQBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBhAHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMuAHNlbGVjdCByZXR1cm5zIGEgZ2l2ZW4gYXJndW1lbnQuAHBhY2sgY29udmVydHMgYW55IG51bWJlciBvZgBhcmd1bWVudHMgaW50byBhIHRhYmxlLCBhbmQAdW5wYWNrIGJhY2sgaW50byByZXR1cm4gdmFsdWVzLgBmdW5jdGlvbiBmb28oYSwgLi4uKQAgID8iYXJnMjoiLi5zZWxlY3QoMSwuLi4pACAgLS0gcmV0dXJuIGFsbCBidXQgZmlyc3QgYXJnACAgcmV0dXJuIHBhY2soLi4uKQBiID0gZm9vKHVucGFja3sxLDIsM30pIC0tIHsyLDN9AHN5c3RlbQCAIHN5c3RlbSBhcGkgZnVuY3Rpb25zAHJ1biBzdG9wIHJlc2V0IHlpZWxkIHRpbWUAbWVudWl0ZW0gc3RhdCBzZXJpYWwgZXh0Y21kAGNvY3JlYXRlIGNvcmVzdW1lIGNvc3RhdHVzAIAgc3lzdGVtIGNvbW1hbmRzAGxvYWQgc2F2ZSBpbXBvcnQgZXhwb3J0IGluZm8AcmVzdW1lIGZvbGRlciBzaHV0ZG93biByZWJvb3QAc3Bsb3JlIGJhY2t1cCBsb2dpbiBsb2dvdXQAgCBjYWxsYmFja3MAX2luaXQgX2RyYXcgX3VwZGF0ZSBfdXBkYXRlNjAAgCBpbnB1dABfaW5pdAAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tAIAgX2luaXQoKQB3aGVuIF9pbml0IGlzIGRlZmluZWQsIGl0IGlzAGNhbGxlZCBvbmNlIGJlZm9yZSBlbnRlcmluZyB0aGUAbWFpbiBfdXBkYXRlIC8gX2RyYXcgbG9vcC4AX2RyYXcAgCBfZHJhdygpAHdoZW4gX2RyYXcgaXMgZGVmaW5lZCBpbiBhAHByb2dyYW0sIGl0IGlzIGNhbGxlZCBvbmNlAHBlciBmcmFtZS4gdGhpcyBjb3VsZCBiZSAxNSwAMzAgb3IgNjAgdGltZXMgcGVyIHNlY29uZC4AdGhlIGNvbnRlbnRzIG9mIHRoZSB2aWRlbwBtZW1vcnkgaXMgZGlzcGxheWVkIG9uY2UgX2RyYXcAcmV0dXJucyAtLSB0aGVyZSBpcyBubyBuZWVkIHRvAGV4cGxpY2l0bHkgY2FsbCBmbGlwKCkuAF91cGRhdGUAX3VwZGF0ZTYwAIAgX3VwZGF0ZSgpIF91cGRhdGU2MCgpAHdoZW4gX3VwZGF0ZSBvciB1cGRhdGU2MCBpcwBkZWZpbmVkLCBpdCBpcyBjYWxsZWQgYXQgMzAgb3IANjAgdGltZXMgcGVyIHNlY29uZCByZWdhcmRsZXNzAG9mIHRoZSBmcmFtZXJhdGUgKHByb3ZpZGVkAHRoZXJlIGlzIHN1ZmZpY2llbnQgY3B1IHRvAGRvIHNvKS4AZ2Z4AIAgZ2Z4IGFwaSBmdW5jdGlvbnMAY2FtZXJhIGNsaXAgY2xzIGNvbG9yIHBhbCBwYWx0AGZpbGxwIGZsaXAgbGluZSByZWN0IHJlY3RmaWxsAG92YWwgb3ZhbGZpbGwgY2lyYyBjaXJjZmlsbABwZ2V0IHBzZXQgcHJpbnQgcHJpbnRoIGN1cnNvcgBtYXAgbWdldCBtc2V0IGZnZXQgZnNldCB0bGluZQBzcHIgc3NwciBzZ2V0IHNzZXQAZmxpcACAIGZsaXAoKQBmbGlwIHRoZSBiYWNrIHBhZ2UgdG8gdGhlIHNjcmVlbgBhbmQgc3RhcnQgdGhlIG5leHQgZnJhbWUuAG5vdGUgdGhhdCBwcm9ncmFtcyB0aGF0IGhhdmUgYQBfZHJhdygpIGZ1bmN0aW9uIGRvIG5vdCBuZWVkIHRvAGNhbGwgZmxpcCgpLgAtLSBkcmF3IG9uZSBzdGFyIHBlciBmcmFtZQBmb3IgaT0xLDEwMCBkbwAgPyKSIixybmQoMTI4KSxybmQoMTI4KSxybmQoMTYpACBmbGlwKCkAY2FtZXJhAIAgY2FtZXJhKHgsIHkpAHNldCBhIHNjcmVlbiBvZmZzZXQgb2YgLXgsIC15AGZvciBhbGwgZHJhd2luZyBvcGVyYXRpb25zLgBjYW1lcmEoKSB0byByZXNldABjbGlwAIAgY2xpcCh4LCB5LCB3LCBoLCBbY2xpcF9vbGRdKQBzZXRzIHRoZSBjbGlwcGluZyByZWN0YW5nbGUgaW4AcGl4ZWxzLiB3aGVuIGNsaXBfb2xkIGlzIHRydWUsAGNsaXAgdGhlIG5ldyBjbGlwcGluZyByZWN0YW5nbGUAYnkgdGhlIGV4aXN0aW5nIG9uZS4AY2xzAIAgY2xzKFtjb2xdKQBjbGVhciB0aGUgc2NyZWVuIGFuZCByZXNldCB0aGUAY2xpcHBpbmcgcmVjdGFuZ2xlLiBjb2wgZGVmYXVsdHMAdG8gYmxhY2suAGNvbG9yAIAgY29sb3IoW2NvbF0pAHNldCB0aGUgY3VycmVudCBjb2xvdXIgdXNlZCBieQBkcmF3aW5nIGZ1bmN0aW9ucy4gaWYgY29sIGlzAG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIDYuAHdoZW4gYSBmaWxsIHBhdHRlcm4gaXMgZGVmaW5lZAB1c2luZyBmaWxscCgpLCBhIHNlY29uZCBjb2xvdXIAaXMgbmVlZGVkIGFuZCBjYW4gYmUgc3BlY2lmaWVkAGluIHRoZSBoaWdoIDQgYml0czoAY29sb3IoMHg4NykgLS0gcmVkIGFuZCB3aGl0ZQB0aGUgZmlsbCBwYXR0ZXJuIGl0c2VsZiBjYW4gYWxzbwBiZSBzcGVjaWZpZWQgaW4gY29sb3VyIGFyZ3VtZW50cwAoc2VlIHRoZSBtYW51YWwgZm9yIGRldGFpbHMpLgBwYWwAcGFsZXR0ZQCAIHBhbChjMCwgYzEsIFtwXSkAbWFwIGNvbG91ciBjMCB0byBjMSBmb3IgcGFsIHA6ADAgZHJhdyBwYWxldHRlIChkZWZhdWx0KQAxIGRpc3BsYXkgcGFsZXR0ZQAyIHNlY29uZGFyeSBwYWxldHRlAHVzZSBwYWwoKSB0byByZXNldC4AJTJkAHBhbHQAgCBwYWx0KGMsIHQpAHNldCB0aGUgdHJhbnNwYXJlbmN5IGZvciBjb2xvdXIAYyB0byB0IChib29sZWFuKS4gdHJhbnNwYXJlbmN5AGlzIG9ic2VydmVkIGJ5IHNwcigpLCBzc3ByKCksAG1hcCgpIGFuZCB0bGluZSgpLgBwYWx0KCkgdG8gcmVzZXQgdG8gZGVmYXVsdHMuAHdoZW4gYSBzaW5nbGUgbnVtYmVyIGFyZ3VtZW50AGlzIGdpdmVuLCBpdCBpcyB0YWtlbiB0byBiZSBhAGJpdGZpZWxkIG9mIGFsbCAxNiB0cmFuc3BhcmVuY3kAdmFsdWVzIHN0YXJ0aW5nIGZyb20gaGlnaCBiaXRzLgAtLSBtYWtlIGNvbHMgMC4uMyB0cmFuc3BhcmVudDoAcGFsdCgweGYwMDApAC0tIG1ha2UgY29sb3VyIDggdHJhbnNwYXJlbnQ6AHBhbHQoOCwgdHJ1ZSkAZmlsbHAAgCBmaWxscChwKQBwIGlzIGEgYml0ZmllbGQgdGhhdCBzcGVjaWZpZXMAYSA0WDQgZmlsbCBwYXR0ZXJuIG9ic2VydmVkIGJ5AGNpcmMqKCksIHJlY3QqKCksIG92YWwqKCksIHBzZXQAYW5kIGxpbmUoKS4gYml0IDB4Yi4xIGluZGljYXRlcwB0cmFuc3BhcmVuY3kuIHRoZSAxNiBiaXQgbGF5b3V0OgAgMHg4MDAwIDB4NDAwMCAweDIwMDAgMHgxMDAwACAgMHg4MDAgIDB4NDAwICAweDIwMCAgMHgxMDAAICAgMHg4MCAgIDB4NDAgICAweDIwICAgMHgxMAAgICAgMHg4ICAgIDB4NCAgICAweDIgICAgMHgxACBmaWxscCgweDg0MjEpICBmaWxscCgweDUwYzApACBmaWxscCiFKSBmaWxscCiHKSBmaWxscCiWKQBsaW5lAIAgbGluZSh4MCwgeTAsIFt4MSwgeTEsXSBbY29sXSkAZHJhdyBhIGxpbmUgZnJvbSAoeDAseTApIHRvACh4MSx5MSkuIHdoZW4geDEseTEgYXJlIG5vdCwAZ2l2ZW4sIHRoZSBlbmQgb2YgdGhlIGxhc3QgZHJhd24AbGluZSBpcyB1c2VkLgByZWN0AHJlY3RmaWxsAIAgcmVjdCAgICAoeDAseTAseDEseTEsW2NvbF0pACAgIHJlY3RmaWxsKHgwLHkwLHgxLHkxLFtjb2xdKQBkcmF3IGEgcmVjdGFuZ2xlIG9yIGZpbGxlZAByZWN0YW5nbGUgd2l0aCBwb2ludHMgYXQAb3Bwb3NpdGUgY29ybmVycyBnaXZlbiBieQAoeDAseTApLCAoeDEseTEpLgBvdmFsAG92YWxmaWxsAIAgb3ZhbCAgICAoeDAseTAseDEseTEsW2NvbF0pACAgIG92YWxmaWxsKHgwLHkwLHgxLHkxLFtjb2xdKQBkcmF3IGFuIGVsbGlwc29pZCBib3VuZGVkIGJ5AHRoZSBnaXZlbiByZWN0YW5nbGUuAGNpcmMAY2lyY2ZpbGwAgCBjaXJjICAgICh4LCB5LCByLCBbY29sXSkAICAgY2lyY2ZpbGwoeCwgeSwgciwgW2NvbF0pAGRyYXcgYSBjaXJjbGUgYXQgKHgseSkgd2l0aCBhAHJhZGl1cyBvZiByLiB3aGVuIGEgbmVnYXRpdmUAcmFkaXVzIGlzIGdpdmVuLCBub3RoaW5nIGlzAGRyYXduLgBtYXAAgCBtYXAoW3R4LCB0eV0sIFtzeCwgc3ldLAAgICBbdHcsIHRoXSwgW2xheWVyc10AZHJhdyB0aGUgbWFwIGZyb20gdGlsZSB0eCwgdHkAYXQgc2NyZWVuIHBvc2l0aW9uIHN4LCBzeS4AdHcsdGggZ2l2ZXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQAdG8gZHJhdyBpbiB0aWxlcy4AbGF5ZXJzIGlzIGEgYml0ZmllbGQgdGhhdCBtZWFucwBvbmx5IHNwcml0ZXMgd2l0aCB0aGUgbWF0Y2hpbmcAc3ByaXRlIGZsYWdzIHNob3VsZCBiZSBkcmF3bi4Ac3ByaXRlIDAgaXMgbm90IGRyYXduIHVubGVzcyB0aGUAYml0IGF0IDB4NWYzNiAmIDB4OCBpcyBzZXQuAG1nZXQAbXNldACAIG1nZXQoeCx5KQAgICBtc2V0KHgseSx2YWwpAGdldCBvciBzZXQgdGhlIHZhbHVlIG9mIHRoZSBtYXAAdGlsZSBhdCB4LHkuIHdoZW4geCx5IGlzIG91dHNpZGUAdGhlIG1hcCBhcmVhLCBtZ2V0IHJldHVybnMgMC4AZmdldABmc2V0AIAgZmdldChuLCBbZl0pACAgIGZzZXQobiwgYml0ZmllbGQpACAgIGZzZXQobiwgZiwgdmFsKQBnZXQgb3Igc2V0IHRoZSB2YWx1ZSBvZiBhIHNwcml0ZQBmbGFnIGYgZm9yIHNwcml0ZSBuLiB3aGVuIGYgaXMAb21pdHRlZCwgYWxsIGZsYWdzIGFyZSByZXRyaWV2ZWQAL3NldCBhcyBhIHNpbmdsZSA4LWJpdCBiaXRmaWVsZC4AZXhhbXBsZXMgdXNpbmcgc3ByaXRlIDI6AGZzZXQoMiwgNCwgdHJ1ZSkgLS0gc2V0IGZsYWcgNABmc2V0KDIsIDB4YikgIC0tIHNldCBmbGFncyAwLDEsMwA/ZmdldCgyLCAzKSAgIC0tIHRydWUAaW5pdGlhbCBzcHJpdGUgZmxhZyBzdGF0ZXMgY2FuAGJlIHNldCBpbiB0aGUgc3ByaXRlIGVkaXRvci4AdGxpbmUAgCB0bGluZSh4LCB5LCB4MSwgeTEsIG14LCBteSwAICAgW21keCwgbWR5XSwgW2xheWVyc10pAGRyYXcgYSB0ZXh0dXJlZCBsaW5lIGZyb20gKHgseSkAdG8gKHgxLHkxKSwgc2FtcGxpbmcgY29sb3VycwBmcm9tIHRoZSBtYXAgYXQgZWFjaCBwb2ludC4Ad2hlbiBsYXllcnMgaXMgZ2l2ZW4sIG9ubHkgdGlsZXMAd2l0aCBtYXRjaGluZyBmbGFncyBhcmUgZHJhd24uAG14LG15IGFyZSBtYXAgY29vcmRzIGdpdmVuIGluAHRpbGVzIGFuZCBpbmNyZW1lbnRlZCBieSBtZHgsAG1keSBhZnRlciBlYWNoIHBpeGVsIGlzIGRyYXduLgBkcmF3IHN0YXRlOgAweDVmMzg6IGxvb3Agd2lkdGggaW4gdGlsZXMAMHg1ZjM5OiBsb29wIGhlaWdodCBpbiB0aWxlcwAweDVmM2E6IG9mZnNldCB4IGluIHRpbGVzADB4NWYzYjogb2Zmc2V0IHkgaW4gdGlsZXMAMHg1ZjM2JjB4ODogZHJhdyBzcHJpdGUgMABzcHIAgCBzcHIobiwgeCwgeSwgW3csIGhdLAAgICBbZmxpcF94XSwgW2ZsaXBfeV0AZHJhdyBzcHJpdGUgbiBhdCB4LCB5AHcgKHdpZHRoKSBhbmQgaCAoaGVpZ2h0KSBhcmUgMQBieSBkZWZhdWx0LCBhbmQgc3BlY2lmeSBob3cgbWFueQA4eDggc3ByaXRlcyB0byBkcmF3LgBjb2xvciAwIGlzIG5vdCBkcmF3biBieSBkZWZhdWx0AChoZWxwIHBhbHQgZm9yIG1vcmUgaW5mb3JtYXRpb24pAGZsaXBfeCwgZmxpcF95IGFyZSBib29sZWFuczoAd2hlbiB0cnVlLCBkcmF3IG1pcnJvcmVkAHNzcHIAgCBzc3ByKHN4LCBzeSwgc3csIHNoLCBkeCwgZHksACAgIFtkdywgZGhdLCBbZmxpcF93XSwgW2ZsaXBfaF0Ac3RyZXRjaCBzcHJpdGUgdXNpbmcgdGhlIHNvdXJjZQByZWN0YW5nbGUgc3gsIHN5LCBzdywgc2gAZHJhdyBhdCB0aGUgZGVzdGluYXRpb24gZHgsIGR5AHdpdGggaGVpZ2h0IGR3LCBkaC4gd2hlbiBkdywgZGgAYXJlIG5vdCBnaXZlbiwgdXNlIHN3LCBzaAB3aGVuIHRydWUsIGRyYXcgbWlycm9yZWQuAHNnZXQAc3NldACAIHNnZXQoeCx5KQAgICBzc2V0KHgseSx2YWwpAGdldCBvciBzZXQgdGhlIHZhbHVlIG9mIGEgcGl4ZWwAaW4gdGhlIHNwcml0ZXNoZWV0IGF0IHgsIHkAcGdldABwc2V0AG9uIHRoZSBzY3JlZW4gYXQgeCwgeQBwcmludAA/AIAgcHJpbnQoc3RyLCB4LCB5LCBbY29sXSkAICAgcHJpbnQoc3RyLCBbY29sXSkAcHJpbnQgdGhlIHN0cmluZyBzdHIgYXQgeCwgeQBvciB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24Ac2hvcnRoYW5kOiB1c2UgPyBvbiBhIHNpbmdsZQBsaW5lIHdpdGhvdXQgYnJhY2tldHM6AD8iaGVsbG8iAHNvbWUgcDhzY2lpIGNvZGVzOgBcIzMgc2V0IGJhY2tncm91bmQgY29sICgwLi5mKQBcZjcgc2V0IGZvcmVncm91bmQgY29sICgwLi5mKQBcXmkgaW52ZXJ0ZWQgbW9kZQBcXncgd2lkZSBtb2RlICheLXcgdG8gZGlzYWJsZSkAXF50IHRhbGwgbW9kZSAoXi13IHRvIGRpc2FibGUpAFxecCBwaW5iYWxsIG1vZGUAXGEgYmVlcABwcmludGgAgCBwcmludGgoc3RyLCBbZmlsZW5hbWVdLAAgICBbb3ZlcndyaXRlXSwgW3RvX2Rlc2t0b3BdAHByaW50IHN0ciB0byBob3N0LiB3aGVuIHBpY28tOABpcyBydW5uaW5nIGZyb20gYSBzaGVsbCwgdGhlAG91dHB1dCBpcyBzZW50IHRvIHRoYXQgc2hlbGwsIG9yAGFwcGVuZGVkIHRvIGEgZmlsZSB3aGVuIGEAZmlsZW5hbWUgaXMgZ2l2ZW4uAGluIHRoZSBzZWNvbmQgY2FzZSwgYW55IGV4aXN0aW5nAGZpbGUgaXMgb3ZlcndyaXR0ZW4gd2hlbgBvdmVyd3JpdGUgaXMgdHJ1ZS4gdGhlIGZpbGUgaXMAc2F2ZWQgdG8gZGVza3RvcCB3aGVuIHRvX2Rlc2t0b3AAaXMgdHJ1ZS4AY3Vyc29yAIAgY3Vyc29yKHgsIHksIFtjb2xdAHNldCB0aGUgY3Vyc29yIHBvc2l0aW9uAGlmIGNvbCBpcyBzcGVjaWZpZWQsIGFsc28gc2V0IHRoZQBjdXJyZW50IGRyYXcgY29sb3VyLgBwZWVrAHBlZWsyAHBlZWs0AEAAJACAIHBlZWsoYWRkciwgW25dKQByZWFkIGEgYnl0ZSBmcm9tIG1lbW9yeSBhdCBhZGRyLgB3aGVuIG4gaXMgZ2l2ZW4sIHJldHVybiBuIGJ5dGVzIAByZWFkIHNlcXVlbnRpYWxseS4gaW50ZWdlcnMgYW5kAG51bWJlcnMgY2FuIGJlIHJlYWQgd2l0aCBwZWVrMigpAGFuZCBwZWVrNCByZXNwZWN0aXZlbHkuAC0tIGZldGNoIDIgYnl0ZXMgb2YgdmlkZW8gcmFtAGEsYiA9IHBlZWsoMHg2MDAwLCAyKQAtLSBvcGVyYXRvciBhbHRlcm5hdGl2ZXMAQGFkZHIgIC0tIHBlZWsoYWRkcikAJWFkZHIgIC0tIHBlZWsyKGFkZHIpACRhZGRyICAtLSBwZWVrNChhZGRyKQBwb2tlAHBva2UyAHBva2U0AIAgcG9rZShhZGRyLCB2YWwxLCBbdmFsMiwgLi4uXSkAd3JpdGUgb25lIG9yIG1vcmUgYnl0ZXMgdG8gcmFtAHN0YXJ0aW5nIGZyb20gYWRkci4gaW50ZWdlcnMAYW5kIG51bWJlcnMgY2FuIGJlIHdyaXR0ZW4gd2l0aABwb2tlMiBhbmQgcG9rZTQuAC0tIHdyaXRlIDQgYnl0ZXMgdG8gdmlkZW8gcmFtAHBva2UyKDB4NzAwMCwgMHg0NTY3LCAweDg5YWIpAG1lbXNldACAIG1lbXNldChhZGRyLCB2YWwsIGxlbikAd3JpdGUgdGhlIDgtYml0IHZhbHVlIHZhbCBpbnRvAHJhbSBzdGFydGluZyBmcm9tIGFkZHIsIGZvcgBsZW4gYnl0ZXMuAC0tIGZpbGwgaGFsZiBvZiB2aWRlbyBtZW1vcnkAbWVtc2V0KDB4NjAwMCwgMHhjOCwgMHgxMDAwKQBtZW1jcHkAgCBtZW1jcHkoZGVzdCwgc3JjLCBsZW4pAGNvcHkgbGVuIGJ5dGVzIGZyb20gYWRkcmVzcyBzcmMAdG8gZGVzdC4gc2VjdGlvbnMgY2FuIGJlAG92ZXJsYXBwaW5nIGFuZCBkbyBub3QgbmVlZCB0bwBiZSBhbGlnbmVkLgAtLSBjb3B5IHNvbWUgb2YgdGhlIHZpZGVvIHJhbSB0bwAtLSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4AbWVtY3B5KDB4NjAwMCwgMHg2ODAwLCAweDgwMCkAcmVsb2FkAIAgcmVsb2FkKGRlc3QsIHNyYywgbGVuLCBbZm5dKQBzaW1pbGFyIHRvIG1lbWNweSwgYnV0IHJlYWQAZnJvbSBjYXJ0cmlkZ2Ugcm9tIGFuZCB3cml0ZQB0byByYW0gYXQgZGVzdCBmb3IgbGVuIGJ5dGVzLgByZWxvYWQoKSByZWxvYWRzIGV2ZXJ5dGhpbmcuAHRoZSBjb2RlIHNlY3Rpb24gKD49IDB4NDMwMCkAaXMgcHJvdGVjdGVkIGFuZCBjYW4gbm90IGJlAGFjY2Vzc2VkIGJ5IHJlbG9hZCAvIGNzdG9yZS4Ad2hlbiBmaWxlbmFtZSBmbiBpcyBnaXZlbiwAZGF0YSBpcyByZWFkIGZyb20gYSBzZXBhcmF0ZQBjYXJ0cmlkZ2UgZmlsZS4AY3N0b3JlAIAgY3N0b3JlKGRlc3QsIHNyYywgbGVuLCBbZm5dKQBmcm9tIHJhbSBhbmQgd3JpdGUgdG8gY2FydCByb20AYXQgZGVzdCBmb3IgbGVuIGJ5dGVzLgBjc3RvcmUoKSBzdG9yZXMgZXZlcnl0aGluZyBpbgByYW0gYmFjayB0byB0aGUgY2FydHJpZGdlLgBzY29yZXN1YgCAIHNjb3Jlc3ViKHRibCwgc2NvcmUsIFtleHRyYV0pAHN1Ym1pdCBhIGhpZ2hzY29yZSB0byB0aGUgYmJzLgB0YmwgaXMgYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlAHRhYmxlIGFuZCBjYW4gYmUgPD0gNDAgY2hhcnMAbG9uZy4gZS5nLiAibGV2ZWxfMSIAc2NvcmUgaXMgYSBudW1iZXIuIGhpZ2hlciBpcwBiZXR0ZXI7IHRoZSB0b3AgNjQgc2NvcmVzIGFyZQByZXR1cm5lZCBpbiBhIHRhYmxlIHdpdGggZmllbGRzOgBuYW1lIHNjb3JlIGV4dHJhIGRhdGUAdXNlIHNjb3Jlc3ViKHRibCkgdG8gZ3JhYiB0aGUAdGFibGUgc3RhdGUgd2l0aG91dCBzdWJtaXR0aW5nAGEgc2NvcmUuAGV4dHJhIGlzIGEgYmluYXJ5IHN0cmluZyBvZgBtZXRhZGF0YSA8PSA3NjggYnl0ZXMgbG9uZy4AY2FydGRhdGEAgCBjYXJ0ZGF0YShpZCkAb3BlbnMgYSBwZXJtYW5lbnQgZGF0YSBzdG9yYWdlAHNsb3QgdG8gYmUgYWNjZXNzZWQgd2l0aCBkZ2V0KCkAYW5kIGRzZXQoKSBvciBieSBkaXJlY3RseSBwb2tlLwBwZWVraW5nIHJhbSBhdCAweDVlMDAuLjB4NWVmZi4AaWQgaXMgYSBzdHJpbmcgPD0gNjQgY2hhcnMgbG9uZwB0aGF0IG1pZ2h0IG5vdCBiZSB1bmlxdWUgKGl0IGlzAHBvc3NpYmxlIGZvciB0d28gY2FydHMgdG8gc2hhcmUAdGhlIHNhbWUgc3RvcmFnZSkuAGNhcnRkYXRhKCkgY2FuIG9ubHkgYmUgY2FsbGVkAG9uY2UgcGVyIHByb2dyYW0gLS0gaXQgaXMgbm90AHBvc3NpYmxlIHRvIHVzZSBtdWx0aXBsZSBkYXRhAHN0b3JhZ2Ugc2xvdHMgaW4gb25lIHByb2dyYW0uAGRnZXQAZHNldACAIGRnZXQoaSkAICAgZHNldChpLCB2YWwpAGdldC9zZXQgdGhlIG51bWJlciBpbiBwZXJtYW5lbnQAZGF0YSBzdG9yYWdlIGF0IGluZGV4IGkgKDAuLjYzKS4Ac2FtZSBhcyBwZWVrNCgweDVlMDAraSo0KSBhbmQAcG9rZTQoMHg1ZTAwK2kqNCwgdmFsKSwgYWZ0ZXIAY2FydGRhdGEoaWQpIGhhcyBiZWVuIHVzZWQgdG8AbWFwIHRoaXMgbWVtb3J5IHJhbmdlIHRvIHN0b3JhZ2UAY2FsbGluZyBk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KHsxLDIsImhleSJ9LCBwcmludCkAaGV5AHBhaXJzAIAgcGFpcnModGJsKQB1c2VkIHRvIGl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMAaW4gYSB0YWJsZSwgaW5jbHVkaW5nIGtleXMgdGhhdABhcmUgYXJlIG5vdCBpbnRlZ2Vycy4gZWFjaCBjYWxsAHRvIHRoZSBmdW5jdGlvbiBpdCBnZW5lcmF0ZXMAcmV0dXJucyBib3RoIHRoZSBrZXkgKGspIGFuZCB0aGUAdmFsdWUgKHYpIGZvciB0aGF0IGl0ZW06AGEgPSB7Zm9vID0gMywgWzEuNV0gPSAiYmxhaCJ9AGZvciBrLHYgaW4gcGFpcnMoYSkgZG8AICBwcmludCgiazoiLi5rLi4iICB2OiIuLnYpAGs6Zm9vICB2OjMAazoxLjUgIHY6YmxhaABydW4AgCBydW4oW3BhcmFtX3N0cl0pAHJ1biB0aGUgcHJvZ3JhbS4gd2hlbiBjYWxsZWQAd2hlbiBhbHJlYWR5IHJ1bm5pbmcsIHRoZQBwcm9ncmFtIGlzIHJlc3RhcnRlZC4AcGFyYW1fc3RyIGlzIGEgc3RyaW5nIHRoYXQgY2FuAGJlIGFjY2Vzc2VkIGR1cmluZyBydW50aW1lIHdpdGgAc3RhdCg5KS4Ac3RvcACAIHN0b3AoW21lc3NhZ2VdKQBzdG9wIHRoZSBjdXJyZW50bHkgcnVubmluZwBwcm9ncmFtIGFuZCBvcHRpb25hbGx5IHByaW50AGEgbWVzc2FnZS4AYSBzdG9wcGVkIHByb2dyYW0gY2FuIHJlc3VtZWQAd2l0aCB0aGUgcmVzdW1lIGNvbW1hbmQsIG9yAGFkdmFuY2VkIGJ5IGEgc2luZ2xlIGZyYW1lIHdpdGgAYSBmdWxsIHN0b3AuAHJlc3VtZQCAID4gcmVzdW1lACAgID4gLgByZXN1bWUgYSBwcm9ncmFtIHRoYXQgd2FzAHN0b3BwZWQgZWl0aGVyIHdpdGggc3RvcCgpIG9yAGJ5IHByZXNzaW5nIGVzY2FwZS4AYSBzaW5nbGUgZnJhbWUgY2FuIGJlIHJ1biBieQBlbnRlcmluZyBhIGZ1bGwgc3RvcCwgYW5kIHRoZW4AcHJlc3NpbmcgZW50ZXIgdG8gZ2V0IHN1YnNlcXVlbnQAZnJhbWVzLgByZXNldACAIHJlc2V0KCkAcmVzdG9yZSB0aGUgdmFsdWVzIGluIHJhbSBmcm9tADB4NWYwMC4uMHg1ZjdmIHRvIHRoZWlyIGRlZmF1bHQAdmFsdWVzLgB0aGlzIGluY2x1ZGVzIHRoZSBwYWxldHRlLABjYW1lcmEgcG9zaXRpb24sIGNsaXBwaW5nLCBhbmQAZmlsbCBwYXR0ZXJuLgBpdCBjYW4gYWxzbyBiZSB1c2VkIGZyb20gY29tbWFuZABsaW5lIHdpdGhvdXQgdGhlIGJyYWNrZXRzLiB0aGlzAGNhbiBiZSB1c2VmdWwgd2hlbiB0aGUgdGV4dCBpcwBpbnZpc2libGUgYmVjYXVzZSBvZiBwYWxldHRlAGNoYW5nZXMuAHlpZWxkAIAgeWllbGQoKQBleGl0IGEgY29yb3V0aW5lIGFuZCB0aGVuAHJlc3VtZSBhdCB0aGF0IHBvaW50IHdoZW4AY29yZXN1bWUoKSBpcyBjYWxsZWQuAGZvciBhbiBleGFtcGxlLCBzZWU6AGNvcmVzdW1lAGNvY3JlYXRlAGNvcm91dGluZQBjb3JvdXRpbmVzAIAgY29jcmVhdGUoZikAICAgY29yZXN1bWUoYywgW3AwLCBwMSwgLi4uXSkAY3JlYXRlIGEgY29yb3V0aW5lIGZyb20gYQBmdW5jdGlvbiBmLCBhbmQgdGhlbiBydW4gaXQAd2l0aCBhcmd1bWVudHMgcDAsIHAxLi4AZnVuY3Rpb24gaGV5KCkAICBwcmludCJkb2luZyBzb21ldGhpbmciACAgeWllbGQoKQAgIHByaW50InNvbWV0aGluZyBlbHNlIgAgIHByaW50ImZpbmlzaGVkIgBjID0gY29jcmVhdGUoaGV5KQBjb3Jlc3VtZShjKSAgLS0gZG9pbmcgc29tZXRoaW5nAGNvcmVzdW1lKGMpICAtLSBzb21ldGhpbmcgZWxzZQA/Y29zdGF0dXMoYykgLS0gInN1c3BlbmRlZCIAY29zdGF0dXMAgCBjb3N0YXR1cyhjKQByZXR1cm5zIHRoZSBzdGF0dXMgb2YgYQBjb3JvdXRpbmUgYyBhcyBhIHN0cmluZzoAICBydW5uaW5nACAgc3VzcGVuZGVkACAgZGVhZAB0aW1lAHQAgCB0aW1lKCkAICAgdCgpAHJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzAHNpbmNlIHRoZSBwcm9ncmFtIHN0YXJ0ZWQAcnVubmluZywgdGFrZW4gZnJvbSB0aGUgbW9tZW50AHRoZSBjdXJyZW50IGZyYW1lIHN0YXJ0ZWQuAG1lbnVpdGVtAIAgbWVudWl0ZW0oaW5kZXgsIFtsYWJlbF0sIFtmXSkAYWRkIGFuIGl0ZW0gdG8gdGhlIHBhdXNlIG1lbnUgAGF0IHNsb3QgaW5kZXggKDEuLjUpIHdpdGggYQBsYWJlbCA8PSAxNiBjaGFycyBsb25nLgBmIGlzIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQAd2hlbiB0aGUgbWVudSBpdGVtIGlzIHNlbGVjdGVkAG9yIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ1dHRvbnMAYXJlIHByZXNzZWQuIGl0IHRha2VzIGEgc2luZ2xlAGJpdGZpZWxkIHBhcmFtZXRlciBpbmRpY2F0aW5nAHdoaWNoIGJ1dHRvbiB3YXMgcHJlc3NlZC4AbWVudWl0ZW0oMSwgImZvbyIsIGZ1bmN0aW9uKGIpACA/InNlbGVjdGVkIGZvbzoiLi5iAGVuZCkAd2hlbiBubyBsYWJlbCBvciBjYWxsYmFjayBpcwBzcGVjaWZpZWQsIHRoZSBpdGVtIGlzIGRlbGV0ZWQuAHN0YXQAgCBzdGF0KHgpAGdldCBzeXN0ZW0gc3RhdHVzACAwIG1lbW9yeSB1c2FnZSAoMC4uMjA0OCkAIDEgY3B1ICAgICAgKDEuMCA9PSAxMDAlKQAgNCBjbGlwYm9hcmQgY29udGVudHMAIDYgcGFyYW1ldGVyIHN0cmluZwAgNyBjdXJyZW50IGZyYW1lcmF0ZQAgNDYuLjQ5IGN1cnJlbnQgcGxheWluZyBzZngAIDUwLi41MyBub3RlIG51bWJlciAocGVyIGNoYW4pACA1NCBjdXJyZW50bHkgcGxheWluZyBwYXR0ZXJuACA1NSB0b3RhbCBwYXR0ZXJucyBwbGF5ZWQAIDU2IHRpY2tzIHBsYXllZCBvbiBwYXR0ZXJuACA1NyB0cnVlIHdoZW4gbXVzaWMgcGxheWluZwAgODAuLjg1IHV0YyB0aW1lOyB5ZWFyLi5zZWNvbmQAIDkwLi45NSBsb2NhbCB0aW1lACAxMDAgYnJlYWRjcnVtYiBsYWJlbCwgb3IgbmlsAHNlcmlhbACAIHNlcmlhbChjaGFubmVsLCBhZGRyLCBsZW4pAHJlYWQvd3JpdGUgZGF0YSB0byBhIG1lbW9yeQBhZGRyZXNzIGZvciBsZW4gYnl0ZXMuAGNoYW5uZWw6ACAweDAwMC4uMHgwZmUgZ3BpbyBwaW5zIChyYXNwaSkAIDB4MGZmIGRlbGF5IGZvciBsZW4gbXMAIDB4ODAwIGRyb3BwZWQgZmlsZSAtLSBzdGF0KDEyMCkAIDB4ODAyIGRyb3BwZWQgZmlsZQAgMHg4MDQgc3RkaW4AIDB4ODA1IHN0ZG91dABleHRjbWQAgCBleHRjbWQoY21kX3N0cikAc3BlY2lhbCBzeXN0ZW0gY29tbWFuZHMgY2FuIGJlAGlzc3VlZCBmcm9tIGEgcnVubmluZyBwcm9ncmFtOgBwYXVzZTogcGF1c2UgY2FydAByZXNldDogcmVzZXQgY2FydABnb19iYWNrOiByZXR1cm4gdG8gcHJldmlvdXMgY2FydABsYWJlbDogc2V0IGNhcnQgbGFiZWwAc2NyZWVuOiBzYXZlIGEgc2NyZWVuc2hvdAByZWM6IHNldCB2aWRlbyBzdGFydCBwb2ludAByZWNfZnJhbWVzOiAxIGZyYW1lIHBlciBmbGlwAHZpZGVvOiBzYXZlIGEgLmdpZiB0byBkZXNrdG9wAGF1ZGlvX3JlYzogc3RhcnQgcmVjb3JkaW5nIGF1ZGlvAGF1ZGlvX2VuZDogc2F2ZSAud2F2IHRvIGRlc2t0b3AAc2h1dGRvd246IChmb3IgZXhwb3J0ZWQgY2FydHMpAGZvbGRlcjogb3BlbiBjdXJyZW50IGZvbGRlcgBsb2FkAIAgPiBsb2FkIGZpbGVuYW1lACAgIGxvYWQoZmlsZW5hbWUsIFticmVhZGNydW1iXSwAICAgW3BhcmFtX3N0cl0pAGxvYWQgYSBjYXJ0cmlkZ2UuIHdoZW4gY2FsbGVkAGZyb20gYSBydW5uaW5nIHByb2dyYW0sIHRoZQBsb2FkZWQgY2FydHJpZGdlIGlzIGltbWVkaWF0ZWx5AHJ1biB3aXRoIHBhcmFtX3N0ciAoYWNjZXNzaWJsZQB3aXRoIHN0YXQoNikpIGFuZCBhIG1lbnUgaXRlbQB3aXRoIHRoZSBsYWJlbCBicmVhZGNydW1iIGlzAGluc2VydGVkLCBhbGxvd2luZyB0aGUgdXNlciB0bwByZXR1cm4gdG8gdGhlIHByZXZpb3VzIGNhcnQuAGZpbGVuYW1lcyBzdGFydGluZyB3aXRoICMgYXJlAHRha2VuIHRvIGJlIGJicyBjYXJ0cmlkZ2UgaWRzLgBzYXZlAIAgPiBzYXZlIGZpbGVuYW1lAHNhdmUgdGhlIHdvcmtpbmcgY2FydHJpZGdlIHRvIGEAZmlsZS4gd2hlbiB0aGUgZmlsZSBkb2VzIG5vdABjb250YWluIHRoZSAucDggZXh0ZW5zaW9uLCBpdCBpcwBhZGRlZCBhdXRvbWF0aWNhbGx5OgA+IHNhdmUgZm9vAHNhdmVkIGZvby5wOAB1c2UgLnBuZyBpbiB0aGUgZmlsZW5hbWUgdG8gc2F2ZQBhIC5wOC5wbmcgY2FydHJpZGdlLiB0byBjYXB0dXJlAGEgbGFiZWwgYmVmb3JlaGFuZCwgcHJlc3MgY3RybC03AHRvIHNhdmUgdG8gY2xpcGJvYXJkLCB1c2U6AD5zYXZlIEBjbGlwAHRoaXMgY2FuIGJlIHBhc3RlZCBhcyB0ZXh0IGFuZABpcyBzdXBwb3J0ZWQgYnkgdGhlIGJicy4AaW1wb3J0AIAgPiBpbXBvcnQgZmlsZW5hbWUAaW1wb3J0IGFuIGltYWdlIG1hcHBpbmcgdG8gdGhlAGN1cnJlbnQgcGFsZXR0ZS4gdW5sZXNzIC1sIGlzAHVzZWQsIGltcG9ydCB0byB0aGUgc3ByaXRlc2hlZXQuACAtbCAgICAgLS0gaW1wb3J0IGNhcnQgbGFiZWwAIC14IG51bSAtLSBsb2FkIGF0IHggcG9zaXRpb24AIC15IG51bSAtLSBsb2FkIGF0IHkgcG9zaXRpb24APiBpbXBvcnQgLWwgbXlsYWJlbC5wbmcAZXhwb3J0AIAgPiBleHBvcnQgZmlsZW5hbWUgAGV4cG9ydCBhIGZpbGUgYmFzZWQgb24gdHlwZToAIC5wbmcgIHNwcml0ZXNoZWV0ACAud2F2ICBjdXJyZW50IHNmeCBvciBwYXR0ZXJuACAuYmluICBzdGFuZC1hbG9uZSBiaW5hcmllcwAgLmh0bWwgc3RhbmQtYWxvbmUgd2ViIGFwcAAgLnA4LnBuZyAgIHNhdmUgYSBjb3B5ACAubWFwLnBuZyAgbWFwIHZpc3VhbGlzYXRpb24AZXhwb3J0IGxhYmVsOgA+IGV4cG9ydCAtbCBsYWJlbC5wbmcAdGlueSAucm9tIGZvcm1hdCAoY29kZSBvbmx5KToAPiBleHBvcnQgLXQgZm9vLnA4LnJvbQBiaW5hcnkgbXVsdGljYXJ0OgA+IGV4cG9ydCBmb28uYmluIGNhcnQyLnA4IGMzLnA4AGluZm8AgCA+IGluZm8AZ2V0IHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlAGN1cnJlbnRseSBsb2FkZWQgY2FydHJpZGdlOgAgZmlsZW5hbWUAIGNhcGFjaXR5IHN0YXRzACB1bnNhdmVkIGNoYW5nZXMAZm9sZGVyAIAgPiBmb2xkZXIgW3doaWNoXQBvcGVuIHRoZSBjdXJyZW50IGZvbGRlciBpbiB0aGUAaG9zdCdzIGZpbGUgbmF2aWdhdG9yLgB3aGVuIHdoaWNoIGlzIGdpdmVuLCBhIHNwZWNpYWwAbG9jYXRpb24gaXMgb3BlbmVkOgAgYmFja3VwcwAgY29uZmlnACBiYnMAIGRlc2t0b3AAdG8gb3BlbiBhIGZvbGRlciBmcm9tIGEgcnVubmluZwBjYXJ0cmlkZ2UgdGhhdCBoYXMgYmVlbiBleHBvcnRlZAB0byBiaW5hcnksIHVzZSBleHRjbWQoImZvbGRlciIuAHNodXRkb3duAIAgPiBzaHV0ZG93bgBwcm9tcHQgZm9yIGFueSB1bnNhdmVkIGNoYW5nZXMAYW5kIHRoZW4gY2xvc2UgcGljby04LgBmb3IgZmFzdCBzaHV0ZG93biwgdXNlIGtleXM6ACBhbHQtZjQgKHdpbmRvd3MpACBjdHJsLXEgKGxpbnV4IC8gbWFjKQBscwBkaXIAgCA+IGxzIFtwYXRoXQBsaXN0IGFsbCBvZiB0aGUgY2FydHMgaW4AdGhlIGdpdmVuIHBhdGguAGxzICogdG8gc2hvdyBoaWRkZW4gZmlsZXMAcmVib290AIAgPiByZWJvb3QAYW5kIHRoZW4gcmVib290IHBpY28tOC4AdGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvAHN0YXJ0IGEgbmV3IGVtcHR5IHByb2plY3QuAHNwbG9yZQCAID4gc3Bsb3JlACAgID4gcwBvcGVuIHNwbG9yZTogcGljby04J3MgYmJzAGNhcnRyaWRnZSBicm93c2VyLgB1c2UgbGVmdCBhbmQgcmlnaHQgdG8gc3dpdGNoAGJldHdlZW4gY2FydHJpZGdlIGxpc3RzLCBhbmQAdXAgYW5kIGRvd24gdG8gc2VsZWN0IGEgY2FydC4AdXNlIJcvjiB0byBvcGVuIGEgY2FydHJpZGdlAG9yIHRoZSBtZW51IGJ1dHRvbiBmb3IgbW9yZQBvcHRpb25zLgBsb2dpbgBsb2dvdXQAgCA+IGxvZ2luACAgID4gbG9nb3V0AGxvZyBpbiB0byB5b3VyIGxleGFsb2ZmbGUAYWNjb3VudC4gd2hpbGUgbG9nZ2VkIGluLCB1c2VycwBhcmUgYWJsZSB0byBzdWJtaXQgaGlnaCBzY29yZXMAdXNpbmcgc2NvcmVzdWIoKSwgYWRkIHN0YXJzIHRvAGNhcnRzLCBhbmQgc3luYyBiYnMgZmF2b3VyaXRlcy4AW25vdCBpbXBsZW1lbnRlZCB5ZXQhXQB0b3BpYyBub3QgZm91bmQ6AF4KIDAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiEjJSgpe31bXTw+Kz0vKjo7Lix+XwBpZihfdXBkYXRlNjApX3VwZGF0ZT1mdW5jdGlvbigpX3VwZGF0ZTYwKClfdXBkYXRlNjAoKWVuZABpZihfdXBkYXRlNjApX3VwZGF0ZT1mdW5jdGlvbigpX3VwZGF0ZTYwKClfdXBkYXRlX2J1dHRvbnMoKV91cGRhdGU2MCgpZW5kAEdJRjg3YQBHSUY4OWEAAAEDBw8fP3//JXMlcy5wOGQudHh0ACUwOHgAY2FydGRhdGEoKSBjYW4gb25seSBiZSBjYWxsZWQgb25jZQBjYXJ0IGRhdGEgaWQgdG9vIGxvbmcAY2FydCBkYXRhIGlkOiBiYWQgY2hhcgAud2F2AC5yYXcAZXhwb3J0IGlzIHVuYXZhaWxhYmxlAGNvdWxkIG5vdCBvcGVuIGZpbGUAd3JvdGUgJWQgZmlsZSVjAG5vIHJlY29yZGluZyBpbiBwcm9ncmVzcwBzZnggJWQgOjogdGlja3MgJWQAcGF0dGVybiAlZAAlc18lJWQuJXMAJXMuJXMAd2F2AHBsYXllciBrZXkgY29uZmlnAHNhdmVkIGNvbmZpZy4AcHJlc3MgZXNjYXBlAHRvIGNvbnRpbnVlAHByZXNzIGtleSBmb3I6AGRlbCBmb3IgZGVmYXVsdABlc2MgdG8gY2FuY2VsACVzIDogJXMAbGVmdAByaWdodAB1cABkb3duAHogLyBjIC8gbgB4IC8gdiAvIG0AcwBmAGUAZAB0YWIAcQBwIC8gZW50ZXIAcDEgbGVmdCAgICAAcDEgcmlnaHQgICAAcDEgdXAgICAgICAAcDEgZG93biAgICAAcDEgjiAgICAgIABwMSCXICAgICAgAHAyIGxlZnQgICAgAHAyIHJpZ2h0ICAgAHAyIHVwICAgICAgAHAyIGRvd24gICAgAHAyII4gICAgICAAcDIglyAgICAgIABwYXVzZSAgICAgIABscnVkb3hwY3Vyc29ycwB6IHgvYyB2AHMgZiBlIGQAdGFiIHEgdwAgICAgICAgACVkIGpveXN0aWNrcyBkZXRlY3RlZAAucG5nAHwlLTIwcyB8JS0yMHMgfCUtNmQgfCUtMTZzIHwlLTIwcyB8JXMKAGNvdWxkIG5vdCBsb2FkIGZhdm91cml0ZXMgZmlsZTogJXMKAGJicwBiYnMvJWQvACVzdGVtcC0lZC5uZm8AJXMlZC5wOC5wbmcAYmJzL2NhcnRzACVzL3RlbXAtJXMubmZvACVzLyVzLnA4LnBuZwAlcy9iYnMvZ2V0X2NhcnQucGhwP2NhdD03JnBsYXlfc3JjPSVkJmxpZD0lcwBiYnMvbGFiZWxzLwAlcyVzLnBuZwBydW4gY2FydABvcHRpb25zAHJlbW92ZSBmcm9tIGZhdm91cml0ZXMAZmF2b3VyaXRlAGNhcnRzIGJ5IEAlcwBzaW1pbGFyIGNhcnRzAHNlYXJjaCBiYnMgdGhyZWFkAG9wZW4gdGhyZWFkIGluIGJyb3dzZXIAW2JhY2tdAGVkaXQgY2FydAByZS1kb3dubG9hZABvcGVuIGluIGJyb3dzZXIAYmFjawB2b2x1bWUAZnVsbHNjcmVlbgBzaHV0ZG93biBwaWNvLTgAY2F0PTcmc2VhcmNoPSVzJm1heD0zMgBiYnMvdGVtcF8lc19fLnBpcC5wbmcAYmJzL3RlbXBfJXMucGlwLnBuZwBiYnMvJXMucGlwLnBuZwAvYmJzL2Nwb3N0X2xpc3RlcjMucGhwP21heD0zMiZzdGFydF9pbmRleD0lZCYlcyZ2ZXJzaW9uPSVzJWMmY2ZpbD0lZAAwMDAyMDVnAGRvd25sb2FkIGZhaWxlZAAucDgAbGlkAHRpdGxlAGF1dGhvcgBtaWQAY2F0c3ViACBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkAY2FuY2VsbGVkAGRvd25sb2FkIGNhbmNlbGxlZABQSUNPLTgAeyBpZiAodHlwZW9mIHBpY284X2dwaW8gIT09ICd1bmRlZmluZWQnKSBwaWNvOF9ncGlvWyQwXT0kMX0Ae3ZhciB2YWw9MDsgaWYgKHR5cGVvZiBwaWNvOF9ncGlvICE9PSAndW5kZWZpbmVkJykgdmFsID0gcGljbzhfZ3Bpb1skMF07IHJldHVybiB2YWx9AGhlbGxvLnA4AGFwaS5wOABhdXRvbWF0YS5wOABib3VuY2UucDgAY2FzdC5wOABjb2xsaWRlLnA4AGRvdHMzZC5wOABkcmlwcHkucDgAamVscGkucDgAc29ydC5wOAB3YW5kZXIucDgAd2F2ZXMucDgAMTUxMzMAMTk2MzkAMTAwMjIAMTk0ODgAMTg5NzMANDE0MjIANTcyMDEAY2VsZXN0ZS5wOC5wbmcAZnJvZ19ob21lLnA4LnBuZwBodWdfYXJlbmEucDgucG5nAGFyY2hlb3MucDgucG5nAGR1c2tfY2hpbGQucDgucG5nADhfbGVnc190b19sb3ZlLnA4LnBuZwBlbWJyYWNlLnA4LnBuZwBjZWxlc3RlAGZyb2cgaG9tZQBodWcgYXJlbmEAdG93ZXIgb2YgYXJjaGVvcwBkdXNrIGNoaWxkADggbGVncyB0byBsb3ZlAGVtYnJhY2UAaW5zdGFsbGluZyBkZW1vIGNhcnRzIHRvIC9kZW1vcy8AZGVtb3MvAGNvdWxkIG5vdCB3cml0ZSB0byBkaXNrAGZhdm91cml0ZXMudHh0AGdhbWVzLwAjaW5jbHVkZSAAY2FuIG5vdCAjaW5jbHVkZQBzZXJpYWwgYnVmZmVyIG92ZXJmbG93ACUxMDIzcwBmcmVxAGRtYQB0eXBlAGJyaWdodG5lc3MAaW52ZXJ0AGxlZHMAcGljby04IDAuMi41ZwAoYykgMjAxNC0yMyBsZXhhbG9mZmxlIGdhbWVzIGxscABib290aW5nIGNhcnRyaWRnZS4uAFtjb2RvXSAlcwA+Y29kb19pbml0CgBwbGF0Zm9ybTogJXMKAEVtc2NyaXB0ZW4AY29kb19zeXN0ZW1faW5pdAoAY29kb19yZXNldF90aW1lcgoAY29kb19ndWlfaW5pdAoAY29kb19rZXlzX2luaXQKAGNvZG9fdGV4dF9pbml0CgBjb2RvX3ZpZGVvX2luaXQKAGNvZG9fbW91c2VfaW5pdAoAY29kb19qb3lzdGlja19pbml0CgA8b2sKAHdpZHRoAGhlaWdodAB3aW5kb3dfeAB3aW5kb3dfeQBzb3VuZABtdXNpYwBzb2Z0d2FyZV9ibGl0AHNvZnR3YXJlX2JsaXR0ZXIAaG9tZQBkZXNrdG9wAHBpeGVsX3BlcmZlY3QAZHJhd19yZWN0AHRpbWVvdXQAaGVhZGxlc3MAcGVyZl90aW1pbmcAZnJhbWVidWZmZXIAZW11bGF0ZV90ZXh0aW5wdXQAZGVmZXJyZWRfZGVhbGxvYwBleHRfZGlzcGxheQBwcmVibGl0X3NjYWxlAGRpc3BsYXkAbG9nX3N5c3RlbV9pbmZvACVkACVkLCVkLCVkLCVkAD5jb2RvX2V4aXQKAGNtdXNpY19zdG9wCgBjb2RvX21haW5fZXhpdAoAY29kb19jb25maWdfc2F2ZQoAY29kb19zb3VuZF9leGl0CgBjb2RvX3ZpZGVvX2V4aXQKAGNvZG9fam95c3RpY2tfZXhpdAoAY29kb19zeXN0ZW1fZXhpdAoAY29kb19pdGVtc19jcmVhdGVkOiAlZAoARlMuc3luY2ZzKCBmYWxzZSwgZnVuY3Rpb24gKGVycikgeyB9ICk7ACUyMHM6JTAzZCAgIAAgIC49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LAAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAAgIHwgIFRvIG1hcCBrZXkgQSB0byBCICh3aGVuIEEgaXMgcHJlc3NlZCwgaXQgc2hvd3MgdXAgYXMgaWYgQiB3ZXJlIHByZXNzZWQpLCAgfAAgIHwgIHByZXNzIEEgdG8gZ2V0IHRoZSBzY2FuY29kZSwgYW5kIGxvb2sgdXAgQiBpbiB0aGUgbGlzdC4gVGhlbiwgYWRkIGl0IHRvICAgfAAgIHwgIG1hcF9zY2FuY29kZXMgaW4gY29uZmlnLnR4dC4gRm9yIGV4YW1wbGUsIHRvIG1hcCBiYWNrc3BhY2UgKDQyKSBhcyAgICAgICAgfAAgIHwgIGVzY2FwZSAoNDEpLCBhbmQgYWxzbyByaWdodCBzaGlmdCgyMjkpIGFzIHJpZ2h0IGN1cnNvciBrZXkgKDc5KTogICAgICAgICAgfAAgIHwgIG1hcF9zY2FuY29kZXMgNDI9NDEsMjI5PTc5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAAgIHwgIE5vdGU6IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGV4dGlucHV0IGV2ZW50cyBtYXBwZWQgdmlhIGtiZCBsYXlvdXQuICAgICAgfAAgIGA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwA6OiBzY2FuY29kZSB2aWV3ZXIgICAgLy8gYWx0K2Y0IC8gY3RybC1xIHRvIHF1aXQAJTAzZABwcmVzc2VkIHNjYW5jb2RlOiU0ZCAgICBuYW1lOiUxNnMKAC1zY2FuY29kZXMAY29kb19kZXN0cm95X3BvZDogY3BvZC0+aXRlbXMgIT0gMAoAQmFkIGNwb2RfYWRkX2l0ZW0gdHlwZQBCYWQgY3BvZF9hZGRfaXRlbQBDT04AUFJOAEFVWABOVUwAQ09NMABDT00xAENPTTIAQ09NMwBDT000AENPTTUAQ09NNgBDT003AENPTTgAQ09NOQBMUFQwAExQVDEATFBUMgBMUFQzAExQVDQATFBUNQBMUFQ2AExQVDcATFBUOABMUFQ5AGNvZG9fbG9hZF9wb2RfZmlsZTogVW5rbm93biBDaHVuayEKAHJiAGZhaWxlZABvawBjb2RvX2xvYWRfcG9kOiAlcyAlcyAKACoqIHdlYiBmaWxlIHN5c3RlbSBub3QgbW91bnRlZC4gcmV0dXJuaW5nIHZkaXNrIGZpbGU6ICVzICglcykKACAtPiByZXR1cm5pbmcgdmRpc2sgZmlsZTogJXMgKCVzKQoAY29kb19zcGxpdF9maWxlbmFtZV9leDogZmlsZV9uYW1lIHRvbyBsb25nCgAie3JldHVybiAoKHR5cGVvZiBwOF90b3VjaF9kZXRlY3RlZCA9PT0gJ3VuZGVmaW5lZCcpIHx8ICFwOF90b3VjaF9kZXRlY3RlZCkgPyAwIDogMTt9IgBAQCBkZWZhdWx0IG1peF9idWZmZXJfc2l6ZSBhZGp1c3RlZCB0byAyMDQ4IChNb2JpbGUpAGNvbmZpZy50eHQARm91bmQgY29uZmlnLnR4dAoAPgoAJTAyZCAlcwoAdmlkZW9fbW9kZQAgJWQgJWQAd2luZG93X3NpemUAc2NyZWVuX3NpemUAd2luZG93ZWQAICVkAGZvcmVncm91bmRfc2xlZXBfbXMAYmFja2dyb3VuZF9zbGVlcF9tcwBzb3VuZF92b2x1bWUAbXVzaWNfdm9sdW1lAG1peF9idWZmZXJfc2l6ZQB3aW5kaWIAb3BlbmdsX2JsaXQAc2hvd19mcHMAbGFyZ2Vfd2luZG93AGZyYW1lbGVzcwB3aW5kb3dfcG9zaXRpb24AbmV3IHdpbmRvdyBwb3NpdGlvbjogJWQsICVkCgBzZXNzaW9ucwBybWJfa2V5AGRlc2t0b3BfcGF0aABmdWxsc2NyZWVuX21ldGhvZABibGl0X21ldGhvZAByZWFkX2NvbnRyb2xsZXJzX2luX2JhY2tncm91bmQAbWFwX3NjYW5jb2RlcwAlZD0lZAA8CgB3AHNvdW5kX3ZvbHVtZSAlZCAvLyAwLi4yNTYKAG11c2ljX3ZvbHVtZSAlZCAvLyAwLi4yNTYKAC4uAH4AY29kb19zYXZlX3BuZyByZXN1bHQ6ICVkICBmaWxlOiAlcwoACkFzc2VydGlvbiBmYWlsZWQ6ICVzCgBDb3VsZCBub3QgYWxsb2NhdGUgdmVydGV4AENvdWxkIG5vdCBhbGxvY2F0ZSBib25lX3ZlcnRleABDb3VsZCBub3QgYWxsb2NhdGUgcG9seQBhY3RvciVkACAASUhEUgBQTFRFAGJLR0QAcEhZcwBJREFUAHRJTUUAelRYdABMb2RlUE5HADIwMTEwMjIxAGlUWHQAdEVYdAB0Uk5TAGNvZG9fZnJlZSBmYWlsICV4ICV4CgAlMDh4JTA4eCUwOHglMDh4JTA4eAAie3JldHVybiBkb2N1bWVudC5oaWRkZW4gPyAxIDogMDt9IgBjb2RvX3NvdW5kX2luaXQgbWl4X2J1ZmZlcl9zaXplOiAlZAoAY29kb19zZXRfc2NyZWVuICVkICVkICVkICV4CgByZXRyaWV2aW5nIGRlc2t0b3AgcmVzb2x1dGlvbjogJWQgJWQKACB3aW5kb3cgc2l6ZTogJWQgJWQKACBkZXNrdG9wIHNpemU6ICVkICVkCgBvawoAJVktJW0tJWQgJUg6JU06JVMAJXMvJXMAKgAlZC0lZC0lZCAlZDolZDolZABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAMQAyADMANAA1ADYANwA4ADkAMABSZXR1cm4ARXNjYXBlAEJhY2tzcGFjZQBUYWIAU3BhY2UALQA9AFsAXQBTbGFzaAAjADsAJwBgACwALwBDYXBzTG9jawBGMQBGMgBGMwBGNABGNQBGNgBGNwBGOABGOQBGMTAARjExAEYxMgBQcmludFNjcmVlbgBTY3JvbGxMb2NrAFBhdXNlAEluc2VydABIb21lAFBhZ2VVcABEZWxldGUARW5kAFBhZ2VEb3duAFJpZ2h0AExlZnQARG93bgBVcABOdW1sb2NrAEtleXBhZCAvAEtleXBhZCAqAEtleXBhZCAtAEtleXBhZCArAEtleXBhZCBFbnRlcgBLZXlwYWQgMQBLZXlwYWQgMgBLZXlwYWQgMwBLZXlwYWQgNABLZXlwYWQgNQBLZXlwYWQgNgBLZXlwYWQgNwBLZXlwYWQgOABLZXlwYWQgOQBLZXlwYWQgMABLZXlwYWQgLgBBcHBsaWNhdGlvbgBQb3dlcgBLZXlwYWQgPQBGMTMARjE0AEYxNQBGMTYARjE3AEYxOABGMTkARjIwAEYyMQBGMjIARjIzAEYyNABFeGVjdXRlAEhlbHAATWVudQBTZWxlY3QAU3RvcABBZ2FpbgBVbmRvAEN1dABDb3B5AFBhc3RlAEZpbmQATXV0ZQBWb2x1bWVVcABWb2x1bWVEb3duAEtleXBhZCAsAEtleXBhZCA9IChBUzQwMCkAQWx0RXJhc2UAU3lzUmVxAENhbmNlbABDbGVhcgBQcmlvcgBTZXBhcmF0b3IAT3V0AE9wZXIAQ2xlYXIgLyBBZ2FpbgBDclNlbABFeFNlbABLZXlwYWQgMDAAS2V5cGFkIDAwMABUaG91c2FuZHNTZXBhcmF0b3IARGVjaW1hbFNlcGFyYXRvcgBDdXJyZW5jeVVuaXQAQ3VycmVuY3lTdWJVbml0AEtleXBhZCAoAEtleXBhZCApAEtleXBhZCB7AEtleXBhZCB9AEtleXBhZCBUYWIAS2V5cGFkIEJhY2tzcGFjZQBLZXlwYWQgQQBLZXlwYWQgQgBLZXlwYWQgQwBLZXlwYWQgRABLZXlwYWQgRQBLZXlwYWQgRgBLZXlwYWQgWE9SAEtleXBhZCBeAEtleXBhZCAlAEtleXBhZCA8AEtleXBhZCA+AEtleXBhZCAmAEtleXBhZCAmJgBLZXlwYWQgfABLZXlwYWQgfHwAS2V5cGFkIDoAS2V5cGFkICMAS2V5cGFkIFNwYWNlAEtleXBhZCBAAEtleXBhZCAhAEtleXBhZCBNZW1TdG9yZQBLZXlwYWQgTWVtUmVjYWxsAEtleXBhZCBNZW1DbGVhcgBLZXlwYWQgTWVtQWRkAEtleXBhZCBNZW1TdWJ0cmFjdABLZXlwYWQgTWVtTXVsdGlwbHkAS2V5cGFkIE1lbURpdmlkZQBLZXlwYWQgKy8tAEtleXBhZCBDbGVhcgBLZXlwYWQgQ2xlYXJFbnRyeQBLZXlwYWQgQmluYXJ5AEtleXBhZCBPY3RhbABLZXlwYWQgRGVjaW1hbABLZXlwYWQgSGV4YWRlY2ltYWwATGVmdCBDdHJsAExlZnQgU2hpZnQATGVmdCBBbHQATGVmdCBHVUkAUmlnaHQgQ3RybABSaWdodCBTaGlmdABSaWdodCBBbHQAUmlnaHQgR1VJAE1vZGVTd2l0Y2gAQXVkaW9OZXh0AEF1ZGlvUHJldgBBdWRpb1N0b3AAQXVkaW9QbGF5AEF1ZGlvTXV0ZQBNZWRpYVNlbGVjdABXV1cATWFpbABDYWxjdWxhdG9yAENvbXB1dGVyAEFDIFNlYXJjaABBQyBIb21lAEFDIEJhY2sAQUMgRm9yd2FyZABBQyBTdG9wAEFDIFJlZnJlc2gAQUMgQm9va21hcmtzAEJyaWdodG5lc3NEb3duAEJyaWdodG5lc3NVcABEaXNwbGF5U3dpdGNoAEtCRElsbHVtVG9nZ2xlAEtCRElsbHVtRG93bgBLQkRJbGx1bVVwAEVqZWN0AFNsZWVwAEFwcDEAQXBwMgBBdWRpb1Jld2luZABBdWRpb0Zhc3RGb3J3YXJkAFVuYWJsZSB0byBpbml0aWFsaXplIFNETABpZiAodHlwZW9mIGNvZG9fa2V5X2J1ZmZlciA9PT0gJ3VuZGVmaW5lZCcpIGNvZG9fa2V5X2J1ZmZlciA9IFtdOyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgeyB2YXIgdmFsID0gLTE7IGlmIChlLmtleS5sZW5ndGggPT0gMSkgeyB2YWwgPSBlLmtleS5jaGFyQ29kZUF0KDApOyB9IGVsc2UgeyBpZiAoZS5rZXkgPT0gIlRhYiIpIHZhbCA9IDk7IGlmIChlLmtleSA9PSAiRW50ZXIiKSB2YWwgPSAxMzsgaWYgKGUua2V5ID09ICJCYWNrc3BhY2UiKSB2YWwgPSA4OyBpZiAoZS5rZXkgPT0gIkVzY2FwZSIpIHZhbCA9IDI3OyBpZiAodmFsID09IC0xKXsgfSB9IHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RvX3RleHRhcmVhIik7IGNvZG9fa2V5X2J1ZmZlci5wdXNoKHZhbCk7IH0pOwB2YXIgX2NvZG9fdGV4dF92YWx1ZSA9ICIiOyB2YXIgX2NvZG9fc3RyX291dCA9ICIiOyB2YXIgY29kb193aGVlbF9keCA9IDA7IHZhciBjb2RvX3doZWVsX2R5ID0gMDsgYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZnVuY3Rpb24oZXZlbnQpeyBpZiAodHlwZW9mIHBpY284X3N0YXRlICE9PSAndW5kZWZpbmVkJykgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gImNhbnZhcyIpIHsgcGljbzhfc3RhdGUuY2xpY2tlZF9vdXRzaWRlID0gdHJ1ZTsgfSB9KTsAZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBmdW5jdGlvbihlKXsgZHggPSBlLmRlbHRhWDsgaWYgKGR4IDwgMCkgZHggPSAtMTsgaWYgKGR4ID4gMCkgZHggPSAxOyBpZiAoZS5kZWx0YU1vZGUgPT0gMikgZHggKj0gNDsgaWYgKHR5cGVvZiBjb2RvX3doZWVsX2R4ICE9PSAndW5kZWZpbmVkJykgY29kb193aGVlbF9keCAtPSBkeDsgZHkgPSBlLmRlbHRhWTsgaWYgKGR5IDwgMCkgZHkgPSAtMTsgaWYgKGR5ID4gMCkgZHkgPSAxOyBpZiAoZS5kZWx0YU1vZGUgPT0gMikgZHkgKj0gNDsgaWYgKHR5cGVvZiBjb2RvX3doZWVsX2R5ICE9PSAndW5kZWZpbmVkJykgY29kb193aGVlbF9keSAtPSBkeTsgfSk7AAoKKiogRkFUQUwgRVJST1I6ICVzCgoAU0RMIEVycm9yOiAlcwoAInt2YXIgcmV0ID0gMDsgaWYgKHR5cGVvZiBwaWNvOF9tb3VzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgcGljbzhfbW91c2UubGVuZ3RoID4gMCkgcmV0PTE7IHJldHVybiByZXQ7fSIAIntyZXR1cm4gcGljbzhfbW91c2VbMF19IgAie3JldHVybiBwaWNvOF9tb3VzZVsxXX0iAGZ1bmN0aW9uIGF1ZGlvX2xvZyhtc2cpIHsgaWYgKHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZykgeyB3aW5kb3cuY29uc29sZS5sb2coIltjb2RvXSBhdWRpb19pbml0X3dlYmF1ZGlvICIrbXNnKTsgfSB9IGF1ZGlvX2xvZygiYXVkaW9faW5pdCIpOyB2YXIgY29kb19hdWRpb19jb250ZXh0OyBpZiAodHlwZW9mIE1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIGF1ZGlvX2xvZygiICoqKiBNb2R1bGUgdW5kZWZpbmVkIik7IGVsc2UgaWYgKHR5cGVvZiBNb2R1bGUuY2NhbGwgPT09ICd1bmRlZmluZWQnKSBhdWRpb19sb2coIiAqKioqIE1vZHVsZS5jY2FsbCB1bmRlZmluZWQiKTsgZWxzZSB7IHZhciB3ZWJBdWRpb0FQSSA9IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCB8fCB3aW5kb3cubW96QXVkaW9Db250ZXh0IHx8IHdpbmRvdy5vQXVkaW9Db250ZXh0IHx8IHdpbmRvdy5tc0F1ZGlvQ29udGV4dDsgaWYgKHdlYkF1ZGlvQVBJKSB7IGlmICh0eXBlb2YgcGljbzhfYXVkaW9fY29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHsgY29kb19hdWRpb19jb250ZXh0ID0gcGljbzhfYXVkaW9fY29udGV4dDsgYXVkaW9fbG9nKCJmb3VuZCBwaWNvOF9hdWRpb19jb250ZXh0Iik7IH0gZWxzZSBpZiAodHlwZW9mIHZveGF0cm9uX2F1ZGlvX2NvbnRleHQgIT09ICd1bmRlZmluZWQnKSB7IGNvZG9fYXVkaW9fY29udGV4dCA9IHZveGF0cm9uX2F1ZGlvX2NvbnRleHQ7IGF1ZGlvX2xvZygiZm91bmQgdm94YXRyb25fYXVkaW9fY29udGV4dCIpOyB9IGVsc2UgeyBjb2RvX2F1ZGlvX2NvbnRleHQgPSBuZXcgd2ViQXVkaW9BUEk7IGF1ZGlvX2xvZygiY3JlYXRpbmcgb3duIGF1ZGlvIGNvbnRleHQiKTsgfSBpZiAoY29kb19hdWRpb19jb250ZXh0KSB7IGF1ZGlvX2xvZygiU2FtcGxlIFJhdGU6ICIrY29kb19hdWRpb19jb250ZXh0LnNhbXBsZVJhdGUpOyBhdWRpb19sb2coIkJ1ZmZlciBTaXplOiAiKyQwKTsgbm9kZSA9IGNvZG9fYXVkaW9fY29udGV4dC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IoJDAsIDEsIDEpOyBub2RlLm9uYXVkaW9wcm9jZXNzID0gZnVuY3Rpb24oZSkgeyB2YXIgZGF0YSA9IGUub3V0cHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApOyB2YXIgciA9IDIyMDUwLjAgLyBjb2RvX2F1ZGlvX2NvbnRleHQuc2FtcGxlUmF0ZTsgdmFyIGxlbjAgPSBNYXRoLmZsb29yKGRhdGEubGVuZ3RoICogcik7IHZhciBsZW4xID0gZGF0YS5sZW5ndGg7IHZhciBwdHIgPSBNb2R1bGUuY2NhbGwoJ21peF8wJywgJ251bWJlcicsIFsnbnVtYmVyJywnbnVtYmVyJ10sIFtsZW4wLCBsZW4xXSk7IGZvciAodmFyIGogPSAwOyBqIDwgZGF0YS5sZW5ndGg7IGorKykgZGF0YVtqXSA9IE1vZHVsZS5nZXRWYWx1ZShwdHIgKyBqKjIsICdpMTYnKSAvIDB4ODAwMDsgfTsgbm9kZS5jb25uZWN0KGNvZG9fYXVkaW9fY29udGV4dC5kZXN0aW5hdGlvbik7IH0gZWxzZSB7IGF1ZGlvX2xvZygiKiogZmFpbGVkIHRvIGNyZWF0ZSBjb2RvX2F1ZGlvX2NvbnRleHQiKTsgfSB9IGVsc2UgeyBhdWRpb19sb2coIioqIHdlYkF1ZGlvQVBJIG5vdCBmb3VuZCIpOyB9IH0AIntyZXR1cm4gZG9jdW1lbnQucG9pbnRlckxvY2tFbGVtZW50ID8gMSA6IDA7fSIAImlmICh0eXBlb2YgY29kb19rZXlfYnVmZmVyID09PSAndW5kZWZpbmVkJykgY29kb19rZXlfYnVmZmVyID0gW107IHJldHVybiBjb2RvX2tleV9idWZmZXIubGVuZ3RoID4gMCA/IDEgOiAwOyIAImlmICh0eXBlb2YgY29kb19rZXlfYnVmZmVyID09PSAndW5kZWZpbmVkJykgY29kb19rZXlfYnVmZmVyID0gW107IGxldCB2YWwgPSBjb2RvX2tleV9idWZmZXIuc2hpZnQoKSB8IDA7IHJldHVybiB2YWw7IgAie3RlbXAgPSAodHlwZW9mIGNvZG9fd2hlZWxfZHggIT09ICd1bmRlZmluZWQnKSA/IGNvZG9fd2hlZWxfZHg6MDsgY29kb193aGVlbF9keCA9IDA7IHJldHVybiB0ZW1wO30iACJ7dGVtcCA9ICh0eXBlb2YgY29kb193aGVlbF9keSAhPT0gJ3VuZGVmaW5lZCcpID8gY29kb193aGVlbF9keTowOyBjb2RvX3doZWVsX2R5ID0gMDsgcmV0dXJuIHRlbXA7fSIAInsgaWYgKGRvY3VtZW50LmhpZGRlbikgcmV0dXJuIDA7IGVsID0gKHR5cGVvZiBjb2RvX3RleHRhcmVhID09PSAndW5kZWZpbmVkJykgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvZG9fdGV4dGFyZWFcIikgOiBjb2RvX3RleHRhcmVhOyBpZiAoZWwgJiYgZWwgPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgcmV0dXJuIDE7IGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsgcmV0dXJuICghZWwgfHwgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSBcImlucHV0XCIgJiYgZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9IFwidGV4dGFyZWFcIikpOyB9IgAieyBpZiAoKHR5cGVvZiBwaWNvOF9zdGF0ZSkgIT09ICd1bmRlZmluZWQnKSBpZiAocGljbzhfc3RhdGUuY2xpY2tlZF9vdXRzaWRlKSB7IHBpY284X3N0YXRlLmNsaWNrZWRfb3V0c2lkZSA9IGZhbHNlOyByZXR1cm4gMTsgfSByZXR1cm4gMDsgfSIAZWwgPSAodHlwZW9mIGNvZG9fdGV4dGFyZWEgPT09ICd1bmRlZmluZWQnKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RvX3RleHRhcmVhIikgOiBjb2RvX3RleHRhcmVhOyBpZiAoZWwgJiYgZWwuc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsgZWwuZm9jdXMoKTsgZWwuc2VsZWN0KCk7IH0AZWwgPSAodHlwZW9mIGNvZG9fdGV4dGFyZWEgPT09ICd1bmRlZmluZWQnKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RvX3RleHRhcmVhIikgOiBjb2RvX3RleHRhcmVhOyBpZiAoZWwgJiYgZWwuc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsgZWwuc2VsZWN0KCk7IH0AIntyZXR1cm4gcGljbzhfbW91c2VbMl19IgAvdXNlcl9kYXRhLyVzACJ7dmFyIHZhbD0wOyBpZiAodHlwZW9mIGNvZG9fbW91bnRlZF9maWxlc3lzdGVtICE9PSAndW5kZWZpbmVkJykgdmFsPTE7IHJldHVybiB2YWw7fSIAQEAgY29kb19ta2RpciBmYWlsZWQ7IGZpbGVzeXN0ZW0gbm90IG1vdW50ZWQAX2Rpcl9uYW1lPSIiOwB7X2Rpcl9uYW1lPV9kaXJfbmFtZStTdHJpbmcuZnJvbUNoYXJDb2RlKCQwKTt9AEZTLmNyZWF0ZVBhdGgoIiIsIF9kaXJfbmFtZSwgdHJ1ZSwgdHJ1ZSk7AFtjb2RvXSBleGl0aW5nIHBvaW50ZXIgbG9jawB7TW9kdWxlWydjYW52YXMnXS5leGl0UG9pbnRlckxvY2soKTt9AEBAIGNvZG9fd2dldF9vbmVycm9yOiAlcwoAZWwgPSAodHlwZW9mIGNvZG9fdGV4dGFyZWEgPT09ICd1bmRlZmluZWQnKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RvX3RleHRhcmVhIikgOiBjb2RvX3RleHRhcmVhOyBpZiAoZWwpIHsgfQBfY29kb19zdHJfb3V0PSIiOwB7IF9jb2RvX3N0cl9vdXQgPSBNb2R1bGUuVVRGOFRvU3RyaW5nKCQwLCAkMSk7IH0AInsgZWwgPSAodHlwZW9mIGNvZG9fdGV4dGFyZWEgPT09ICd1bmRlZmluZWQnKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29kb190ZXh0YXJlYVwiKSA6IGNvZG9fdGV4dGFyZWE7IGlmIChlbCkgeyBlbC52YWx1ZSA9IF9jb2RvX3N0cl9vdXQ7IHJldHVybiAwOyB9IGVsc2UgcmV0dXJuIDE7IH0iAGVsID0gKHR5cGVvZiBjb2RvX3RleHRhcmVhID09PSAndW5kZWZpbmVkJykgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kb190ZXh0YXJlYSIpIDogY29kb190ZXh0YXJlYTsgaWYgKGVsICYmIGVsLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiICYmICgodHlwZW9mIHA4X3RvdWNoX2RldGVjdGVkID09PSAndW5kZWZpbmVkJykgfHwgIXA4X3RvdWNoX2RldGVjdGVkKSkgeyBlbC5zdHlsZS5kaXNwbGF5ID0gIiI7IGVsLmZvY3VzKCk7IGVsLnNlbGVjdCgpOyB9AHsgTW9kdWxlLnN0cmluZ1RvVVRGOChfY29kb190ZXh0X3ZhbHVlLCAkMCwgJDEpOyB9ACJlbCA9ICh0eXBlb2YgY29kb190ZXh0YXJlYSA9PT0gJ3VuZGVmaW5lZCcpID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb2RvX3RleHRhcmVhXCIpIDogY29kb190ZXh0YXJlYTsgaWYgKGVsICYmIGVsLnN0eWxlLmRpc3BsYXkgIT0gXCJub25lXCIgJiYgZWwudmFsdWUgIT0gXCJcIikgeyBfY29kb190ZXh0X3ZhbHVlID0gZWwudmFsdWU7IHJldHVybiAxOyB9IHJldHVybiAwOyIAJXMlcwBwaWNvLTggY2FydHJpZGdlAHZlcnNpb24gJWQAIyNlbmRfcDgAX19sdWFfXwBfX2dmeF9fAF9fZ2ZmX18AX19tYXBfXwBfX3NmeF9fAF9fbXVzaWNfXwBfX2xhYmVsX18AX19jaGFuZ2VfbWFza19fAF9fbWV0YToAJTAyeCUwMnglMDJ4JTAyeAAlMDJ4JTF4JTF4JTF4ACUwMnggAAoAcgBwaWNvLTggY2FydHJpZGdlIC8vIGh0dHA6Ly93d3cucGljby04LmNvbQoAdmVyc2lvbiAlZAoAX19sdWFfXwoAX19nZnhfXwoAJXgAX19sYWJlbF9fCgBfX2dmZl9fCgAlMDJ4AF9fbWFwX18KAF9fc2Z4X18KACUwMngleCV4JXgAX19tdXNpY19fCgAlMDJ4JTAyeCUwMnglMDJ4CgBfX2NoYW5nZV9tYXNrX18KAHdiAGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5XwBAJSQAI14/ACgpe31bXTw+ACFAIyQlXiYqOjsuLH49Ky0vXGAnIgAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAAAQIEBwMGBQBpbmZpbml0eQBuYW4AcndhAC4=";var tempDoublePtr=3145120;function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){lockPointer=false;console.log("forcing lockPointer to false");Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=false;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};canvas.exitFullscreen=canvas.exitFullscreen.bind(document);Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=event.wheelDelta;break;case"wheel":delta=event["deltaY"];break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h1)return 0;if(!surfData.buffer){surfData.buffer=_malloc(surfData.width*surfData.height*4);HEAP32[surf+20>>2]=surfData.buffer}HEAP32[surf+20>>2]=surfData.buffer;if(surf==SDL.screen&&Module.screenIsReadOnly&&surfData.image)return 0;if(SDL.defaults.discardOnLock){if(!surfData.image){surfData.image=surfData.ctx.createImageData(surfData.width,surfData.height)}if(!SDL.defaults.opaqueFrontBuffer)return}else{surfData.image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height)}if(surf==SDL.screen&&SDL.defaults.opaqueFrontBuffer){var data=surfData.image.data;var num=data.length;for(var i=0;i>2],y:HEAP32[rect+4>>2],w:HEAP32[rect+8>>2],h:HEAP32[rect+12>>2]}},updateRect:function(rect,r){HEAP32[rect>>2]=r.x;HEAP32[rect+4>>2]=r.y;HEAP32[rect+8>>2]=r.w;HEAP32[rect+12>>2]=r.h},intersectionOfRects:function(first,second){var leftX=Math.max(first.x,second.x);var leftY=Math.max(first.y,second.y);var rightX=Math.min(first.x+first.w,second.x+second.w);var rightY=Math.min(first.y+first.h,second.y+second.h);return{x:leftX,y:leftY,w:Math.max(leftX,rightX)-leftX,h:Math.max(leftY,rightY)-leftY}},checkPixelFormat:function(fmt){},loadColorToCSSRGB:function(color){var rgba=HEAP32[color>>2];return"rgb("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+")"},loadColorToCSSRGBA:function(color){var rgba=HEAP32[color>>2];return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>24&255)/255+")"},translateColorToCSSRGBA:function(rgba){return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>>24)/255+")"},translateRGBAToCSSRGBA:function(r,g,b,a){return"rgba("+(r&255)+","+(g&255)+","+(b&255)+","+(a&255)/255+")"},translateRGBAToColor:function(r,g,b,a){return r|g<<8|b<<16|a<<24},makeSurface:function(width,height,flags,usePageCanvas,source,rmask,gmask,bmask,amask){flags=flags||0;var is_SDL_HWSURFACE=flags&1;var is_SDL_HWPALETTE=flags&2097152;var is_SDL_OPENGL=flags&67108864;var surf=_malloc(60);var pixelFormat=_malloc(44);var bpp=is_SDL_HWPALETTE?1:4;var buffer=0;if(!is_SDL_HWSURFACE&&!is_SDL_OPENGL){buffer=_malloc(width*height*4)}HEAP32[surf>>2]=flags;HEAP32[surf+4>>2]=pixelFormat;HEAP32[surf+8>>2]=width;HEAP32[surf+12>>2]=height;HEAP32[surf+16>>2]=width*bpp;HEAP32[surf+20>>2]=buffer;HEAP32[surf+36>>2]=0;HEAP32[surf+40>>2]=0;HEAP32[surf+44>>2]=Module["canvas"].width;HEAP32[surf+48>>2]=Module["canvas"].height;HEAP32[surf+56>>2]=1;HEAP32[pixelFormat>>2]=-2042224636;HEAP32[pixelFormat+4>>2]=0;HEAP8[pixelFormat+8>>0]=bpp*8;HEAP8[pixelFormat+9>>0]=bpp;HEAP32[pixelFormat+12>>2]=rmask||255;HEAP32[pixelFormat+16>>2]=gmask||65280;HEAP32[pixelFormat+20>>2]=bmask||16711680;HEAP32[pixelFormat+24>>2]=amask||4278190080;SDL.GL=SDL.GL||is_SDL_OPENGL;var canvas;if(!usePageCanvas){if(SDL.canvasPool.length>0){canvas=SDL.canvasPool.pop()}else{canvas=document.createElement("canvas")}canvas.width=width;canvas.height=height}else{canvas=Module["canvas"]}var webGLContextAttributes={antialias:SDL.glAttributes[13]!=0&&SDL.glAttributes[14]>1,depth:SDL.glAttributes[6]>0,stencil:SDL.glAttributes[7]>0,alpha:SDL.glAttributes[3]>0};var ctx=Browser.createContext(canvas,is_SDL_OPENGL,usePageCanvas,webGLContextAttributes);SDL.surfaces[surf]={width:width,height:height,canvas:canvas,ctx:ctx,surf:surf,buffer:buffer,pixelFormat:pixelFormat,alpha:255,flags:flags,locked:0,usePageCanvas:usePageCanvas,source:source,isFlagSet:function(flag){return flags&flag}};return surf},copyIndexedColorData:function(surfData,rX,rY,rW,rH){if(!surfData.colors){return}var fullWidth=Module["canvas"].width;var fullHeight=Module["canvas"].height;var startX=rX||0;var startY=rY||0;var endX=(rW||fullWidth-startX)+startX;var endY=(rH||fullHeight-startY)+startY;var buffer=surfData.buffer;if(!surfData.image.data32){surfData.image.data32=new Uint32Array(surfData.image.data.buffer)}var data32=surfData.image.data32;var colors32=surfData.colors32;for(var y=startY;y>0]]}}},freeSurface:function(surf){var refcountPointer=surf+56;var refcount=HEAP32[refcountPointer>>2];if(refcount>1){HEAP32[refcountPointer>>2]=refcount-1;return}var info=SDL.surfaces[surf];if(!info.usePageCanvas&&info.canvas)SDL.canvasPool.push(info.canvas);if(info.buffer)_free(info.buffer);_free(info.pixelFormat);_free(surf);SDL.surfaces[surf]=null;if(surf===SDL.screen){SDL.screen=null}},blitSurface:function(src,srcrect,dst,dstrect,scale){var srcData=SDL.surfaces[src];var dstData=SDL.surfaces[dst];var sr,dr;if(srcrect){sr=SDL.loadRect(srcrect)}else{sr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstrect){dr=SDL.loadRect(dstrect)}else{dr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstData.clipRect){var widthScale=!scale||sr.w===0?1:sr.w/dr.w;var heightScale=!scale||sr.h===0?1:sr.h/dr.h;dr=SDL.intersectionOfRects(dstData.clipRect,dr);sr.w=dr.w*widthScale;sr.h=dr.h*heightScale;if(dstrect){SDL.updateRect(dstrect,dr)}}var blitw,blith;if(scale){blitw=dr.w;blith=dr.h}else{blitw=sr.w;blith=sr.h}if(sr.w===0||sr.h===0||blitw===0||blith===0){return 0}var oldAlpha=dstData.ctx.globalAlpha;dstData.ctx.globalAlpha=srcData.alpha/255;dstData.ctx.drawImage(srcData.canvas,sr.x,sr.y,sr.w,sr.h,dr.x,dr.y,blitw,blith);dstData.ctx.globalAlpha=oldAlpha;if(dst!=SDL.screen){warnOnce("WARNING: copying canvas data to memory for compatibility");_SDL_LockSurface(dst);dstData.locked--}return 0},downFingers:{},savedKeydown:null,receiveEvent:function(event){function unpressAllPressedKeys(){for(var code in SDL.keyboardMap){SDL.events.push({type:"keyup",keyCode:SDL.keyboardMap[code]})}}switch(event.type){case"touchstart":case"touchmove":{event.preventDefault();var touches=[];if(event.type==="touchstart"){for(var i=0;i0?Math.max(delta,1):Math.min(delta,-1);var button=delta>0?3:4;SDL.events.push({type:"mousedown",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"mouseup",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"wheel",deltaX:0,deltaY:delta});event.preventDefault();break;case"mousemove":if(SDL.DOMButtons[0]===1){SDL.events.push({type:"touchmove",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}if(Browser.pointerLock){if("mozMovementX"in event){event["movementX"]=event["mozMovementX"];event["movementY"]=event["mozMovementY"]}if(event["movementX"]==0&&event["movementY"]==0){event.preventDefault();return}}case"keydown":case"keyup":case"keypress":case"mousedown":case"mouseup":if(event.type!=="keydown"||!SDL.unicode&&!SDL.textInput||(event.keyCode===8||event.keyCode===9)){}if(event.type=="mousedown"){SDL.DOMButtons[event.button]=1;SDL.events.push({type:"touchstart",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}else if(event.type=="mouseup"){if(!SDL.DOMButtons[event.button]){return}SDL.events.push({type:"touchend",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}});SDL.DOMButtons[event.button]=0}if(event.type==="keydown"||event.type==="mousedown"){SDL.canRequestFullscreen=true}else if(event.type==="keyup"||event.type==="mouseup"){if(SDL.isRequestingFullscreen){Module["requestFullscreen"](false,true);SDL.isRequestingFullscreen=false}SDL.canRequestFullscreen=false}if(event.type==="keypress"&&SDL.savedKeydown){SDL.savedKeydown.keypressCharCode=event.charCode;SDL.savedKeydown=null}else if(event.type==="keydown"){SDL.savedKeydown=event}if(event.type!=="keypress"||SDL.textInput){SDL.events.push(event)}break;case"mouseout":for(var i=0;i<3;i++){if(SDL.DOMButtons[i]){SDL.events.push({type:"mouseup",button:i,pageX:event.pageX,pageY:event.pageY});SDL.DOMButtons[i]=0}}event.preventDefault();break;case"focus":SDL.events.push(event);event.preventDefault();break;case"blur":SDL.events.push(event);unpressAllPressedKeys();event.preventDefault();break;case"visibilitychange":SDL.events.push({type:"visibilitychange",visible:!document.hidden});unpressAllPressedKeys();event.preventDefault();break;case"unload":if(Browser.mainLoop.runner){SDL.events.push(event);Browser.mainLoop.runner()}return;case"resize":SDL.events.push(event);if(event.preventDefault){event.preventDefault()}break}if(SDL.events.length>=1e4){err("SDL event queue full, dropping events");SDL.events=SDL.events.slice(0,1e4)}SDL.flushEventsToHandler();return},lookupKeyCodeForEvent:function(event){var code=event.keyCode;if(code>=65&&code<=90){code+=32}else{code=SDL.keyCodes[event.keyCode]||event.keyCode;if(event.location===KeyboardEvent.DOM_KEY_LOCATION_RIGHT&&code>=(224|1<<10)&&code<=(227|1<<10)){code+=4}}return code},handleEvent:function(event){if(event.handled)return;event.handled=true;switch(event.type){case"touchstart":case"touchend":case"touchmove":{Browser.calculateMouseEvent(event);break}case"keydown":case"keyup":{var down=event.type==="keydown";var code=SDL.lookupKeyCodeForEvent(event);HEAP8[SDL.keyboardState+code>>0]=down;SDL.modState=(HEAP8[SDL.keyboardState+1248>>0]?64:0)|(HEAP8[SDL.keyboardState+1249>>0]?1:0)|(HEAP8[SDL.keyboardState+1250>>0]?256:0)|(HEAP8[SDL.keyboardState+1252>>0]?128:0)|(HEAP8[SDL.keyboardState+1253>>0]?2:0)|(HEAP8[SDL.keyboardState+1254>>0]?512:0);if(down){SDL.keyboardMap[code]=event.keyCode}else{delete SDL.keyboardMap[code]}break}case"mousedown":case"mouseup":if(event.type=="mousedown"){SDL.buttonState|=1<0){if(SDL.makeCEvent(SDL.events.shift(),ptr)!==false)return 1}return 0}else{return SDL.events.length>0}},makeCEvent:function(event,ptr){if(typeof event==="number"){_memcpy(ptr,event,28);_free(event);return}SDL.handleEvent(event);switch(event.type){case"keydown":case"keyup":{var down=event.type==="keydown";var key=SDL.lookupKeyCodeForEvent(event);var scan;if(key>=1024){scan=key-1024}else{scan=SDL.scanCodes[key]||key}HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+8>>0]=down?1:0;HEAP8[ptr+9>>0]=0;HEAP32[ptr+12>>2]=scan;HEAP32[ptr+16>>2]=key;HEAP16[ptr+20>>1]=SDL.modState;HEAP32[ptr+24>>2]=event.keypressCharCode||key;break}case"keypress":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];var cStr=intArrayFromString(String.fromCharCode(event.charCode));for(var i=0;i>0]=cStr[i]}break}case"mousedown":case"mouseup":case"mousemove":{if(event.type!="mousemove"){var down=event.type==="mousedown";HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP8[ptr+16>>0]=event.button+1;HEAP8[ptr+17>>0]=down?1:0;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY}else{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP32[ptr+16>>2]=SDL.buttonState;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY;HEAP32[ptr+28>>2]=Browser.mouseMovementX;HEAP32[ptr+32>>2]=Browser.mouseMovementY}break}case"wheel":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+16>>2]=event.deltaX;HEAP32[ptr+20>>2]=event.deltaY;break}case"touchstart":case"touchend":case"touchmove":{var touch=event.touch;if(!Browser.touches[touch.identifier])break;var w=Module["canvas"].width;var h=Module["canvas"].height;var x=Browser.touches[touch.identifier].x/w;var y=Browser.touches[touch.identifier].y/h;var lx=Browser.lastTouches[touch.identifier].x/w;var ly=Browser.lastTouches[touch.identifier].y/h;var dx=x-lx;var dy=y-ly;if(touch["deviceID"]===undefined)touch.deviceID=SDL.TOUCH_DEFAULT_ID;if(dx===0&&dy===0&&event.type==="touchmove")return false;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=_SDL_GetTicks();tempI64=[touch.deviceID>>>0,(tempDouble=touch.deviceID,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr+8>>2]=tempI64[0],HEAP32[ptr+12>>2]=tempI64[1];tempI64=[touch.identifier>>>0,(tempDouble=touch.identifier,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr+16>>2]=tempI64[0],HEAP32[ptr+20>>2]=tempI64[1];HEAPF32[ptr+24>>2]=x;HEAPF32[ptr+28>>2]=y;HEAPF32[ptr+32>>2]=dx;HEAPF32[ptr+36>>2]=dy;if(touch.force!==undefined){HEAPF32[ptr+40>>2]=touch.force}else{HEAPF32[ptr+40>>2]=event.type=="touchend"?0:1}break}case"unload":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];break}case"resize":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=event.w;HEAP32[ptr+8>>2]=event.h;break}case"joystick_button_up":case"joystick_button_down":{var state=event.type==="joystick_button_up"?0:1;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.button;HEAP8[ptr+6>>0]=state;break}case"joystick_axis_motion":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.axis;HEAP32[ptr+8>>2]=SDL.joystickAxisValueConversion(event.value);break}case"focus":{var SDL_WINDOWEVENT_FOCUS_GAINED=12;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_GAINED;break}case"blur":{var SDL_WINDOWEVENT_FOCUS_LOST=13;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_LOST;break}case"visibilitychange":{var SDL_WINDOWEVENT_SHOWN=1;var SDL_WINDOWEVENT_HIDDEN=2;var visibilityEventID=event.visible?SDL_WINDOWEVENT_SHOWN:SDL_WINDOWEVENT_HIDDEN;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=visibilityEventID;break}default:throw"Unhandled SDL event: "+event.type}},makeFontString:function(height,fontName){if(fontName.charAt(0)!="'"&&fontName.charAt(0)!='"'){fontName='"'+fontName+'"'}return height+"px "+fontName+", serif"},estimateTextWidth:function(fontData,text){var h=fontData.size;var fontString=SDL.makeFontString(h,fontData.name);var tempCtx=SDL.ttfContext;tempCtx.save();tempCtx.font=fontString;var ret=tempCtx.measureText(text).width|0;tempCtx.restore();return ret},allocateChannels:function(num){if(SDL.numChannels&&SDL.numChannels>=num&&num!=0)return;SDL.numChannels=num;SDL.channels=[];for(var i=0;i>1]/32768}}else if(SDL.audio.format==8){for(var j=0;j>0];channelData[j]=(v>=0?v-128:v+128)/128}}else if(SDL.audio.format==33056){for(var j=0;j>2]}}else{throw"Invalid SDL audio format "+SDL.audio.format+"!"}}},debugSurface:function(surfData){console.log("dumping surface "+[surfData.surf,surfData.source,surfData.width,surfData.height]);var image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);var data=image.data;var num=Math.min(surfData.width,surfData.height);for(var i=0;i0}},queryJoysticks:function(){for(var joystick in SDL.lastJoystickState){var state=SDL.getGamepad(joystick-1);var prevState=SDL.lastJoystickState[joystick];if(typeof state==="undefined")return;if(state===null)return;if(typeof state.timestamp!=="number"||state.timestamp!==prevState.timestamp||!state.timestamp){var i;for(i=0;ideviceIndex&&deviceIndex>=0){return gamepads[deviceIndex]}return null}};function _SDL_ClearError(){}function _SDL_GetError(){if(!SDL.errorMessage){SDL.errorMessage=allocate(intArrayFromString("unknown SDL-emscripten error"),"i8",ALLOC_NORMAL)}return SDL.errorMessage}function _SDL_GetModState(){return SDL.modState}function _SDL_GetMouseState(x,y){if(x)HEAP32[x>>2]=Browser.mouseX;if(y)HEAP32[y>>2]=Browser.mouseY;return SDL.buttonState}function _SDL_GetWindowSize(window,width,height){var w=Module["canvas"].width;var h=Module["canvas"].height;if(width)HEAP32[width>>2]=w;if(height)HEAP32[height>>2]=h}function _SDL_Init(initFlags){SDL.startTime=Date.now();SDL.initFlags=initFlags;if(!Module["doNotCaptureKeyboard"]){var keyboardListeningElement=Module["keyboardListeningElement"]||document;keyboardListeningElement.addEventListener("keydown",SDL.receiveEvent);keyboardListeningElement.addEventListener("keyup",SDL.receiveEvent);keyboardListeningElement.addEventListener("keypress",SDL.receiveEvent);window.addEventListener("focus",SDL.receiveEvent);window.addEventListener("blur",SDL.receiveEvent);document.addEventListener("visibilitychange",SDL.receiveEvent)}window.addEventListener("unload",SDL.receiveEvent);SDL.keyboardState=_malloc(65536);_memset(SDL.keyboardState,0,65536);SDL.DOMEventToSDLEvent["keydown"]=768;SDL.DOMEventToSDLEvent["keyup"]=769;SDL.DOMEventToSDLEvent["keypress"]=771;SDL.DOMEventToSDLEvent["mousedown"]=1025;SDL.DOMEventToSDLEvent["mouseup"]=1026;SDL.DOMEventToSDLEvent["mousemove"]=1024;SDL.DOMEventToSDLEvent["wheel"]=1027;SDL.DOMEventToSDLEvent["touchstart"]=1792;SDL.DOMEventToSDLEvent["touchend"]=1793;SDL.DOMEventToSDLEvent["touchmove"]=1794;SDL.DOMEventToSDLEvent["unload"]=256;SDL.DOMEventToSDLEvent["resize"]=28673;SDL.DOMEventToSDLEvent["visibilitychange"]=512;SDL.DOMEventToSDLEvent["focus"]=512;SDL.DOMEventToSDLEvent["blur"]=512;SDL.DOMEventToSDLEvent["joystick_axis_motion"]=1536;SDL.DOMEventToSDLEvent["joystick_button_down"]=1539;SDL.DOMEventToSDLEvent["joystick_button_up"]=1540;return 0}function _SDL_LockAudio(){}function _SDL_PollEvent(ptr){return SDL.pollEvent(ptr)}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i0){return}if(surfData.isFlagSet(2097152)){SDL.copyIndexedColorData(surfData)}else if(!surfData.colors){var data=surfData.image.data;var buffer=surfData.buffer;assert(buffer%4==0,"Invalid buffer offset: "+buffer);var src=buffer>>2;var dst=0;var isScreen=surf==SDL.screen;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=isScreen?255:val>>24&255;src++;dst+=4}}else{var data32=new Uint32Array(data.buffer);if(isScreen&&SDL.defaults.opaqueFrontBuffer){num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=new Uint8Array(data.buffer);var i=3;var j=i+4*num;if(num%8==0){while(i>0]*4;var start=base+x*4;data[start]=colors[val];data[start+1]=colors[val+1];data[start+2]=colors[val+2]}s+=width*3}}surfData.ctx.putImageData(surfData.image,0,0)}var ENV={};function ___buildEnvironment(environ){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=getMemory(TOTAL_ENV_SIZE);envPtr=getMemory(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[environ>>2]=envPtr}else{envPtr=HEAP32[environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in ENV){if(typeof ENV[key]==="string"){var line=key+"="+ENV[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}function ___lock(){}var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(9);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-20}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-22}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-22;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-22}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-13}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(9);return stream},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-75}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall220(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),dirp=SYSCALLS.get(),count=SYSCALLS.get();if(!stream.getdents){stream.getdents=FS.readdir(stream.path)}var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var idx=Math.floor(off/struct_size);while(idx>>0,(tempDouble=id,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-22}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-22;case 9:___setErrNo(22);return-1;default:{return-22}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-25;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-25;return 0}case 21519:{if(!stream.tty)return-25;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-25;return-22}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-25;return 0}case 21524:{if(!stream.tty)return-25;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _abort(){Module["abort"]()}function _emscripten_async_wget_data(url,arg,onload,onerror){Browser.asyncLoad(UTF8ToString(url),function(byteArray){var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer);dynCall_viii(onload,arg,buffer,byteArray.length);_free(buffer)},function(){if(onerror)dynCall_vi(onerror,arg)},true)}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _exit(status){exit(status)}var ___tm_current=3144960;var ___tm_timezone=(stringToUTF8("GMT",3145008,4),3145008);function _gmtime_r(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();HEAP32[tmPtr+36>>2]=0;HEAP32[tmPtr+32>>2]=0;var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+40>>2]=___tm_timezone;return tmPtr}function _gmtime(time){return _gmtime_r(time,___tm_current)}function _tzset(){if(_tzset.called)return;_tzset.called=true;HEAP32[__get_timezone()>>2]=(new Date).getTimezoneOffset()*60;var winter=new Date(2e3,0,1);var summer=new Date(2e3,6,1);HEAP32[__get_daylight()>>2]=Number(winter.getTimezoneOffset()!=summer.getTimezoneOffset());function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocate(intArrayFromString(winterName),"i8",ALLOC_NORMAL);var summerNamePtr=allocate(intArrayFromString(summerName),"i8",ALLOC_NORMAL);if(summer.getTimezoneOffset()>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(2e3,6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}function _localtime(time){return _localtime_r(time,___tm_current)}function _longjmp(env,value){_setThrew(env,value||1);throw"longjmp"}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]);return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){var day=new Date(date.tm_year+1900,date.tm_mon+1,date.tm_mday,0,0,0,0);return day.getDay()||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end>_emscripten_get_heap_size()){abort()}HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var GLOBAL_BASE=8;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}return null}var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STACK_BASE=3145136,DYNAMIC_BASE=8388016,DYNAMICTOP_PTR=3145104;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||134217728;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var ASM_CONSTS=[function(){if(typeof _cartdat!=="undefined")return 1;return 0},function(){return _cartdat.length/32768},function(){_cdpos=_cdpos+1;return _cartdat[_cdpos-1]},function($0){ciii=$0;iii=0},function(){iii=iii+1;return _cartname[ciii].charCodeAt(iii-1)},function(){let stateObj={load_param_data:false};history.pushState(stateObj,"PICO-8","?")},function(){Module.pico8Reset=function(){codo_command=1};Module.pico8ToggleSound=function(){codo_command=3};Module.pico8TogglePaused=function(){codo_command=4};Module.pico8SetPaused=function(p){codo_command=5;codo_command_p=0;if(p)codo_command_p=1};Module.pico8ToggleControlMenu=function(){codo_command=7};Module.pico8DragOver=function(){codo_command=10};Module.pico8DragStop=function(){codo_command=11}},function(){function mkdir_0(d){try{stat=FS.stat(d)}catch(e){FS.mkdir(d)}}mkdir_0("/user_data");FS.mount(IDBFS,{},"/user_data");FS.syncfs(true,function(err){if(!err){console.log("codo: mounted filesystem.\n");codo_mounted_filesystem=1;mkdir_0("/user_data/cdata");mkdir_0("/user_data/cstore");mkdir_0("/user_data/carts");mkdir_0("/user_data/backup");mkdir_0("/user_data/plates");mkdir_0("/user_data/bbs");mkdir_0("/user_data/bbs/carts");mkdir_0("/user_data/bbs/labels")}else{console.log("** could not mount filesystem\n");console.log(err)}})},function(){var val=0;if(window.location.pathname.indexOf("widget.php")>=0)val=1;return val},function(){var val=0;if(window.location.pathname.indexOf("pico-8.php")>=0)val=1;return val},function($0,$1,$2,$3,$4,$5,$6,$7){if(typeof pico8_state!=="undefined"){pico8_state.is_paused=$0;pico8_state.sound_volume=$1;pico8_state.frame_number=$2;pico8_state.has_focus=$3;pico8_state.show_dpad=$4;pico8_state.request_pointer_lock=$5;pico8_state.require_page_navigate_confirmation=$6;pico8_state.shutdown_requested=$7}},function(){var val=0;if(typeof codo_command!=="undefined"){val=codo_command;codo_command=0}return val},function(){var val=0;if(typeof codo_command_p!=="undefined"){val=codo_command_p;codo_command_p=0}return val},function(){button_i=0},function(){var val=-1;if(typeof pico8_buttons!=="undefined"){val=pico8_buttons[button_i];button_i++}return val},function(){var val=0;if(typeof pico8_gamepads!=="undefined"){val=pico8_gamepads.count}return val},function(){if(typeof on_module_load!=="undefined"){if(on_module_load)on_module_load()}},function($0,$1,$2,$3){download_browser_file(UTF8ToString($0,$1),UTF8ToString($2,$3))},function($0,$1,$2,$3,$4,$5){if(typeof p8img!=="undefined"){p8img.src=""}p8img=document.createElement("img");p8img.src=UTF8ToString($0,$1);p8img.style="width:128px; height:128px; image-rendering: pixelated; -ms-interpolation-mode: nearest-neighbor;";if(typeof p8imgholder==="undefined"||!p8imgholder){p8imgholder=document.createElement("div");p8imgholder.style.cssText="min-width:160px; display:table; position:fixed; top:20px; left:20px; padding:12px; background-color:#000; box-shadow: 2px 2px 8px rgba(16, 0, 48, 0.4);";document.body.appendChild(p8imgholder)}if(p8imgholder){while(p8imgholder.childElementCount>0)p8imgholder.removeChild(p8imgholder.firstChild);var dismiss=document.createElement("div");dismiss.style.cssText="display:table; font-size:10pt; color:#fff; padding:4px; cursor:pointer; margin-left:10px; float:right";dismiss.addEventListener("click",function(){p8img.src="";while(p8imgholder.childElementCount>0)p8imgholder.removeChild(p8imgholder.firstChild);p8imgholder.style.display="none"},false);dismiss.innerHTML="X";p8imgholder.appendChild(dismiss);p8imgholder.appendChild(p8img);var info=document.createElement("div");info.innerHTML='
(right-click to save)
';p8imgholder.appendChild(info);if(p8imgholder.style.display=="none")p8imgholder.style.display=""}},function(){jsString=p8_dropped_cart;if(!jsString)return 0;var lengthBytes=lengthBytesUTF8(jsString)+1;var stringOnWasmHeap=_malloc(lengthBytes);stringToUTF8(jsString,stringOnWasmHeap,lengthBytes);return stringOnWasmHeap},function(){jsString=p8_dropped_cart_name;if(!jsString)return 0;var lengthBytes=lengthBytesUTF8(jsString)+1;var stringOnWasmHeap2=_malloc(lengthBytes);stringToUTF8(jsString,stringOnWasmHeap2,lengthBytes);return stringOnWasmHeap2},function($0,$1){if(typeof pico8_state!=="undefined"){if(typeof pico8_state.system_messages==="undefined")pico8_state.system_messages=new Array;pico8_state.system_messages.push(UTF8ToString($0,$1))}},function($0){var str=window.location.hostname;return allocate(intArrayFromString(str),"i8",ALLOC_NORMAL)},function($0,$1){if(typeof pico8_gpio!=="undefined")pico8_gpio[$0]=$1},function($0){var val=0;if(typeof pico8_gpio!=="undefined")val=pico8_gpio[$0];return val},function(){FS.syncfs(false,function(err){})},function(){var val=0;if(typeof codo_mounted_filesystem!=="undefined")val=1;return val},function(){return typeof p8_touch_detected==="undefined"||!p8_touch_detected?0:1},function(){return document.hidden?1:0},function(){if(typeof codo_key_buffer==="undefined")codo_key_buffer=[];Module["canvas"].addEventListener("keydown",function(e){var val=-1;if(e.key.length==1){val=e.key.charCodeAt(0)}else{if(e.key=="Tab")val=9;if(e.key=="Enter")val=13;if(e.key=="Backspace")val=8;if(e.key=="Escape")val=27;if(val==-1){}}var el=codo_textarea_el;codo_key_buffer.push(val)})},function(){addEventListener("mousedown",function(event){if(typeof pico8_state!=="undefined")if(event.target.tagName.toLowerCase()!="canvas"){pico8_state.clicked_outside=true}})},function(){document.addEventListener("wheel",function(e){dx=e.deltaX;if(dx<0)dx=-1;if(dx>0)dx=1;if(e.deltaMode==2)dx*=4;if(typeof codo_wheel_dx!=="undefined")codo_wheel_dx-=dx;dy=e.deltaY;if(dy<0)dy=-1;if(dy>0)dy=1;if(e.deltaMode==2)dy*=4;if(typeof codo_wheel_dy!=="undefined")codo_wheel_dy-=dy})},function($0){function audio_log(msg){if(window.console&&window.console.log){window.console.log("[codo] audio_init_webaudio "+msg)}}audio_log("audio_init");var codo_audio_context;if(typeof Module==="undefined")audio_log(" *** Module undefined");else if(typeof Module.ccall==="undefined")audio_log(" **** Module.ccall undefined");else{var webAudioAPI=window.AudioContext||window.webkitAudioContext||window.mozAudioContext||window.oAudioContext||window.msAudioContext;if(webAudioAPI){if(typeof pico8_audio_context!=="undefined"){codo_audio_context=pico8_audio_context;audio_log("found pico8_audio_context")}else if(typeof voxatron_audio_context!=="undefined"){codo_audio_context=voxatron_audio_context;audio_log("found voxatron_audio_context")}else{codo_audio_context=new webAudioAPI;audio_log("creating own audio context")}if(codo_audio_context){audio_log("Sample Rate: "+codo_audio_context.sampleRate);audio_log("Buffer Size: "+$0);node=codo_audio_context.createScriptProcessor($0,1,1);node.onaudioprocess=function(e){var data=e.outputBuffer.getChannelData(0);var r=22050/codo_audio_context.sampleRate;var len0=Math.floor(data.length*r);var len1=data.length;var ptr=Module.ccall("mix_0","number",["number","number"],[len0,len1]);for(var j=0;j0)ret=1;return ret},function(){return pico8_mouse[0]},function(){return pico8_mouse[1]},function(){if(typeof codo_key_buffer==="undefined")codo_key_buffer=[];return codo_key_buffer.length>0?1:0},function(){if(typeof codo_key_buffer==="undefined")codo_key_buffer=[];let val=codo_key_buffer.shift()|0;return val},function(){temp=typeof codo_wheel_dx!=="undefined"?codo_wheel_dx:0;codo_wheel_dx=0;return temp},function(){temp=typeof codo_wheel_dy!=="undefined"?codo_wheel_dy:0;codo_wheel_dy=0;return temp},function(){if(document.hidden)return 0;el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el==document.activeElement)return 1;el=document.activeElement;return!el||el.tagName.toLowerCase()!="input"&&el.tagName.toLowerCase()!="textarea"},function(){if(typeof pico8_state!=="undefined")if(pico8_state.clicked_outside){pico8_state.clicked_outside=false;return 1}return 0},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el.style.display!="none"){el.focus();el.select()}},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el.style.display!="none"){el.select()}},function(){return pico8_mouse[2]},function(){_dir_name=""},function($0){_dir_name=_dir_name+String.fromCharCode($0)},function(){FS.createPath("",_dir_name,true,true)},function(){Module["canvas"].exitPointerLock()},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el){}},function(){_codo_str_out=""},function($0,$1){_codo_str_out=Module.UTF8ToString($0,$1)},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el){el.value=_codo_str_out;return 0}else return 1},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el.style.display=="none"&&(typeof p8_touch_detected==="undefined"||!p8_touch_detected)){el.style.display="";el.focus();el.select()}},function(){el=typeof codo_textarea==="undefined"?codo_textarea_el:codo_textarea;if(el&&el.style.display!="none"&&el.value!=""){_codo_text_value=el.value;return 1}return 0},function($0,$1){Module.stringToUTF8(_codo_text_value,$0,$1)}];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}function _emscripten_asm_const_ii(code,a0){return ASM_CONSTS[code](a0)}function _emscripten_asm_const_iii(code,a0,a1){return ASM_CONSTS[code](a0,a1)}function _emscripten_asm_const_iiiii(code,a0,a1,a2,a3){return ASM_CONSTS[code](a0,a1,a2,a3)}function _emscripten_asm_const_iiiiiii(code,a0,a1,a2,a3,a4,a5){return ASM_CONSTS[code](a0,a1,a2,a3,a4,a5)}function _emscripten_asm_const_iiiiiiiii(code,a0,a1,a2,a3,a4,a5,a6,a7){return ASM_CONSTS[code](a0,a1,a2,a3,a4,a5,a6,a7)}__ATINIT__.push({func:function(){___emscripten_environ_constructor()}});memoryInitializer="data:application/octet-stream;base64,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AAECAwQFBgcICQoLDA0ODwAAgIAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEhISEhISEhAAAAAAAAAAAAYCCAAAAAAAAA/wAAARITJBXWZ0hJmjvcXY7vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAABAAAABQAAAAEAAAAFAAAABQAAAAUAAAABAAAAAQAAAAEAAAAFAAAAAAAAAAEAAAADAAAABQAAAAQAAAACAAAACwAAAA8AAAAHAAAADAAAAA0AAAAJAAAACAAAAAYAAAAKAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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YPgAAFr4AABU+AAATvgAAEj4AABC+AAAO/gAADX4AAAv+AAAKfgAACP4AAAd+AAAFvgAABD4AAAK+AAABPgAAP73AAD39wAA8fcAAOv3AADl9wAA3vcAANj3AADS9wAAy/cAAMX3AAC/9wAAuPcAALL3AACs9wAApfcAAJ/3AACZ9wAAkvcAAIz3AACF9wAAf/cAAHn3AABy9wAAbPcAAGX3AABf9wAAWPcAAFL3AABL9wAARfcAAD73AAA49wAAMfcAACv3AAAk9wAAHvcAABf3AAAQ9wAACvcAAAP3AAD99gAA9vYAAO/2AADp9gAA4vYAANv2AADV9gAAzvYAAMf2AADB9gAAuvYAALP2AACt9gAApvYAAJ/2AACY9gAAkvYAAIv2AACE9gAAffYAAHf2AABw9gAAafYAAGL2AABb9gAAVPYAAE72AABH9gAAQPYAADn2AAAy9gAAK/YAACT2AAAd9gAAFvYAABD2AAAJ9gAAAvYAAPv1AAD09QAA7fUAAOb1AADf9QAA2PUAANH1AADK9QAAw/UAALz1AAC19QAArvUAAKb1AACf9QAAmPUAAJH1AACK9QAAg/UAAHz1AAB19QAAbvUAAGb1AABf9QAAWPUAAFH1AABK9QAAQ/UAADv1AAA09QAALfUAACb1AAAe9QAAF/UAABD1AAAJ9QAAAfUAAPr0AADz9AAA6/QAAOT0AADd9AAA1fQAAM70AADH9AAAv/QAALj0AACx9AAAqfQAAKL0AACa9AAAk/QAAIz0AACE9AAAffQAAHX0AABu9AAAZvQAAF/0AABX9AAAUPQAAEj0AABB9AAAOfQAADL0AAAq9AAAI/QAABv0AAAT9AAADPQAAAT0AAD98wAA9fMAAO3zAADm8wAA3vMAANfzAADP8wAAx/MAAMDzAAC48wAAsPMAAKjzAACh8wAAmfMAAJHzAACK8wAAgvMAAHrzAABy8wAAavMAAGPzAABb8wAAU/MAAEvzAABD8wAAPPMAADTzAAAs8wAAJPMAABzzAAAU8wAADPMAAATzAAD98gAA9fIAAO3yAADl8gAA3fIAANXyAADN8gAAxfIAAL3yAAC18gAArfIAAKXyAACd8gAAlfIAAI3yAACF8gAAffIAAHXyAABt8gAAZfIAAF3yAABU8gAATPIAAETyAAA88gAANPIAACzyAAAk8gAA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r8cAAKDHAACQxwAAgMcAAHDHAABhxwAAUccAAEHHAAAxxwAAIccAABLHAAACxwAA8sYAAOLGAADSxgAAwsYAALPGAACjxgAAk8YAAIPGAABzxgAAY8YAAFPGAABExgAANMYAACTGAAAUxgAABMYAAPTFAADkxQAA1MUAAMTFAAC0xQAApMUAAJTFAACExQAAdMUAAGTFAABUxQAARMUAADTFAAAkxQAAFMUAAATFAAD0xAAA5MQAANTEAADExAAAtMQAAKTEAACUxAAAg8QAAHPEAABjxAAAU8QAAEPEAAAzxAAAI8QAABPEAAACxAAA8sMAAOLDAADSwwAAwsMAALHDAAChwwAAkcMAAIHDAABxwwAAYMMAAFDDAABAwwAAMMMAAB/DAAAPwwAA/8IAAO7CAADewgAAzsIAAL7CAACtwgAAncIAAI3CAAB8wgAAbMIAAFzCAABLwgAAO8IAACrCAAAawgAACsIAAPnBAADpwQAA2MEAAMjBAAC4wQAAp8EAAJfBAACGwQAAdsEAAGXBAABVwQAARMEAADTBAAAjwQAAE8EAAALBAADywAAA4cAAANHAAADAwAAAsMAAAJ/AAACPwAAAfsAAAG7AAABdwAAATMAAADzAAAArwAAAG8AAAArAAAD5vwAA6b8AANi/AADHvwAAt78AAKa/AACVvwAAhb8AAHS/AABjvwAAU78AAEK/AAAxvwAAIb8AABC/AAD/vgAA7r4AAN6+AADNvgAAvL4AAKu+AACbvgAAir4AAHm+AABovgAAV74AAEe+AAA2vgAAJb4AABS+AAADvgAA8r0AAOK9AADRvQAAwL0AAK+9AACevQAAjb0AAHy9AABrvQAAWr0AAEq9AAA5vQAAKL0AABe9AAAGvQAA9bwAAOS8AADTvAAAwrwAALG8AACgvAAAj7wAAH68AABtvAAAXLwAAEu8AAA6vAAAKbwAABi8AAAHvAAA9rsAAOW7AADUuwAAw7sAALG7AACguwAAj7sAAH67AABtuwAAXLsAAEu7AAA6uwAAKLsAABe7AAAGuwAA9boAAOS6AADTugAAwboAALC6AACfugAAjroAAH26AABrugAAWroAAEm6AAA4ugAAJroAABW6AAAEugAA87kAAOG5AADQuQAAv7kAAK65AACcuQAAi7kAAHq5AABouQAAV7kAAEa5AAA0uQAAI7kAABK5AAAAuQAA77gAAN24AADMuAAAu7gAAKm4AACYuAAAhrgAAHW4AABkuAAAUrgAAEG4AAAvuAAAHrgAAAy4AAD7twAA6bcAANi3AADGtwAAtbcAAKO3AACStwAAgLcAAG+3AABdtwAATLcAADq3AAAptwAAF7cAAAW3AAD0tgAA4rYAANG2AAC/tgAArbYAAJy2AACKtgAAebYAAGe2AABVtgAARLYAADK2AAAgtgAAD7YAAP21AADrtQAA2rUAAMi1AAC2tQAApbUAAJO1AACBtQAAb7UAAF61AABMtQAAOrUAACi1AAAXtQAABbUAAPO0AADhtAAA0LQAAL60AACstAAAmrQAAIi0AAB3tAAAZbQAAFO0AABBtAAAL7QAAB20AAALtAAA+rMAAOizAADWswAAxLMAALKzAACgswAAjrMAAHyzAABqswAAWLMAAEezAAA1swAAI7MAABGzAAD/sgAA7bIAANuyAADJsgAAt7IAAKWyAACTsgAAgbIAAG+yAABdsgAAS7IAADmyAAAnsgAAFbIAAAOyAADwsQAA3rEAAMyxAAC6sQAAqLEAAJaxAACEsQAAcrEAAGCxAABOsQAAO7EAACmxAAAXsQAABbEAAPOwAADhsAAAzrAAALywAACqsAAAmLAAAIawAAB0sAAAYbAAAE+wAAA9sAAAK7AAABiwAAAGsAAA9K8AAOKvAADPrwAAva8AAKuvAACZrwAAhq8AAHSvAABirwAAT68AAD2vAAArrwAAGK8AAAavAAD0rgAA4a4AAM+uAAC9rgAAqq4AAJiuAACFrgAAc64AAGGuAABOrgAAPK4AACmuAAAXrgAABa4AAPKtAADgrQAAza0AALutAACorQAAlq0AAIOtAABxrQAAXq0AAEytAAA5rQAAJ60AABStAAACrQAA76wAAN2sAADKrAAAuKwAAKWsAACTrAAAgKwAAG2sAABbrAAASKwAADasAAAjrAAAEawAAP6rAADrqwAA2asAAMarAACzqwAAoasAAI6rAAB7qwAAaasAAFarAABDqwAAMasAAB6rAAALqwAA+aoAAOaqAADTqgAAwaoAAK6qAACbqgAAiKoAAHaqAABjqgAAUKoAAD2qAAAqqgAAGKoAAAWqAADyqQAA36kAAM2pAAC6qQAAp6kAAJSpAACBqQAAbqkAAFypAABJqQAA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hBYAAIgWAACLFgAAjxYAAJMWAACWFgAAmhYAAJ4WAAChFgAApRYAAKkWAACsFgAAsBYAALQWAAC3FgAAuxYAAL8WAADCFgAAxhYAAMoWAADNFgAA0RYAANUWAADYFgAA3BYAAOAWAADjFgAA5xYAAOsWAADuFgAA8hYAAPYWAAD5FgAA/RYAAAAXAAAEFwAACBcAAAsXAAAPFwAAExcAABYXAAAaFwAAHRcAACEXAAAlFwAAKBcAACwXAAAwFwAAMxcAADcXAAA6FwAAPhcAAEIXAABFFwAASRcAAEwXAABQFwAAVBcAAFcXAABbFwAAXhcAAGIXAABmFwAAaRcAAG0XAABwFwAAdBcAAHgXAAB7FwAAfxcAAIIXAACGFwAAiRcAAI0XAACRFwAAlBcAAJgXAACbFwAAnxcAAKIXAACmFwAAqhcAAK0XAACxFwAAtBcAALgXAAC7FwAAvxcAAMIXAADGFwAAyRcAAM0XAADRFwAA1BcAANgXAADbFwAA3xcAAOIXAADmFwAA6RcAAO0XAADwFwAA9BcAAPcXAAD7FwAA/hcAAAIYAAAGGAAACRgAAA0YAAAQGAAAFBgAABcYAAAbGAAAHhgAACIYAAAlGAAAKRgAACwYAAAwGAAAMxgAADcYAAA6GAAAPhgAAEEYAABFGAAASBgAAEwYAABPGAAAUxgAAFYYAABaGAAAXRgAAGAYAABkGAAAZxgAAGsYAABuGAAAchgAAHUYAAB5GAAAfBgAAIAYAACDGAAAhxgAAIoYAACOGAAAkRgAAJQYAACYGAAAmxgAAJ8YAACiGAAAphgAAKkYAACtGAAAsBgAALMYAAC3GAAAuhgAAL4YAADBGAAAxRgAAMgYAADMGAAAzxgAANIYAADWGAAA2RgAAN0YAADgGAAA4xgAAOcYAADqGAAA7hgAAPEYAAD1GAAA+BgAAPsYAAD/GAAAAhkAAAYZAAAJGQAADBkAABAZAAATGQAAFxkAABoZAAAdGQAAIRkAACQZAAAoGQAAKxkAAC4ZAAAyGQAANRkAADgZAAA8GQAAPxkAAEMZAABGGQAASRkAAE0ZAABQGQAAUxkAAFcZAABaGQAAXRkAAGEZAABkGQAAaBkAAGsZAABuGQAAchkAAHUZAAB4GQAAfBkAAH8ZAACCGQAAhhkAAIkZAACMGQAAkBkAAJMZAACWGQAA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xPwvACZ4AQAveAEAxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AQHgBAEl4AQBQeAEAV3gBAF14AQAmdgEAY3gBAG14AQBxeAEAdngBAIR4AQCKeAEAxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwCQeAEAmngBAKV4AQC4eAEAyXgBANZ4AQDmeAEA73gBAPh4AQABeQEACnkBABV5AQAmeQEAL3kBADh5AQBBeQEASnkBAFN5AQBceQEAZ3kBAHB5AQB5eQEAgnkBAIt5AQCUeQEAnnkBAKd5AQCxeQEAunkBAMN5AQDQeQEA2XkBAOJ5AQDyeQEAA3oBABN6AQAhegEANHoBAEd6AQBYegEAY3oBAHB6AQCCegEAkHoBAJ16AQCsegEAxPwvAMT8LwC/egEAyXoBANR6AQDdegEA5noBAPF6AQD9egEAB3sBAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwARewEAHHsBACZ7AQAwewEAOnsBAER7AQBOewEAWnsBAF57AQBjewEAbnsBAHd7AQCBewEAiXsBAJF7AQCcewEApHsBAK97AQC8ewEAy3sBANh7AQDmewEA9XsBAAJ8AQANfAEAE3wBABl8AQAefAEAI3wBAC98AQDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8A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dAIAAG8CAABrAgAAZgIAAGICAABcAgAAWQIAAFUCAABQAgAATAIAAEgCAABEAgAAPwIAADoCAAA3AgAAMwIAAC8CAAArAgAAJwIAACMCAAAfAgAAGgIAABcCAAAUAgAAEAIAAAwCAAAIAgAABAIAAAECAAD8AQAA+QEAAPYBAADyAQAA7gEAAOsBAADnAQAA5AEAAOABAADdAQAA2gEAANYBAADTAQAAzwEAAMwBAADJAQAAAgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADAFAAAwBUAAMAWAADAFwAAwBgAAMAZAADAGgAAwBsAAMAcAADAHQAAwB4AAMAfAADAAAAAswEAAMMCAADDAwAAwwQAAMMFAADDBgAAwwcAAMMIAADDCQAAwwoAAMMLAADDDAAAww0AANMOAADDDwAAwwAADLsBAAzDAgAMwwMADMMEAAzTAAAAABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRv////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAACgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUFAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAHhdHQAABAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAK/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////8iIgIA9gEAABmTDQoaCgAAfQYAAP/////vvq3eZ0UjAQEAAAD/////CQAAAO++rd5nRSMBh3QBAP////8ABAAAAQAAAAAAPAABAAAAAQAAAIAAAACAAAAAsIYAALCGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIj8LwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX3CJAP8JLw9WkwEAxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8AxPwvAMT8LwDE/C8Af39/f39/f39/f39/f38AAHJvb3RfcGF0aABjZGF0YV9wYXRoAGpveXN0aWNrX2luZGV4AGJ1dHRvbl9rZXlzACAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZABsaXZlX25vdGVzAGN1cnNvcl9zbmFwAGd1aV90aGVtZQBzaGlmdF9nbHlwaHMAc2hvd19iYWNrdXBfbWVzc2FnZXMAaG9zdF9mcmFtZXJhdGVfY29udHJvbABjb250ZW50X2ZpbHRlcgByZWNvcmRfYWN0aXZpdHlfbG9nAGFsbG93X2Z1bmN0aW9uX2tleXMAY2hlY2tfZm9yX2NhcnRfdXBkYXRlcwBlbmFibGVfZ3BpbwBmbGlwX2FtcGVyc2FuZABhdXRvX2hpZGVfbW91c2VfY3Vyc29yAGFnZ3Jlc3NpdmVfYmFja3VwcwBwZXJpb2RpY19iYWNrdXBzAHRyYW5zZm9ybV9zY3JlZW4AZ2Z4X2dyaWRfbGluZXMAdmVyc2lvbiAlcwoKADAuMi41ZwAvLyBhdWRpbyB2b2x1bWU6IDAuLjI1NiAKAHZvbHVtZSAlZAoKAAovLyBMb2NhdGlvbiBvZiBwaWNvLTgncyByb290IGZvbGRlcgoAcm9vdF9wYXRoICVzCgoACi8vIExvY2F0aW9uIG9mIGNhcnRyaWRnZSBzYXZlIGRhdGEKAGNkYXRhX3BhdGggJXMKCgAKLy8gU3BlY2lmeSB3aGljaCBwbGF5ZXIgaW5kZXggam95c3RpY2sgY29udHJvbCBiZWdpbnMgYXQgKDAuLjcpCgBqb3lzdGlja19pbmRleCAlZAoKAAovLyBDdXN0b20ga2V5Ym9hcmQgc2NhbmNvZGVzIGZvciBidXR0b25zLiBwbGF5ZXIwIDAuLjYsIHBsYXllcjEgMC4uNQoAYnV0dG9uX2tleXMgACVkIAAKCgAvLyBQbGF5IG5vdGVzIGFzIHRoZXkgYXJlIHBsb3R0ZWQgaW4gZnJlcXVlbmN5IG1vZGUKAGxpdmVfbm90ZXMgJWQKCgAvLyBpZmYgMTogd2hlbiB1c2luZyBrZXlib2FyZCBjdXJzb3IsIHNuYXAgdG8gY2xvc2VzdCBwaXhlbCAvIG1hcCBjZWwKAGN1cnNvcl9zbmFwICVkCgoALy8gMCBkZWZhdWx0ICAxIGRhcmsgYmx1ZSBiYWNrZ3JvdW5kIGluIGNvZGUgZWRpdG9yICAyIGJsYWNrIGJhY2tncm91bmQgaW4gY29kZSBlZGl0b3IgICAzIGdyYXkgYmFja2dyb3VuZCBpbiBjb2RlIGVkaXRvciAgIAoAZ3VpX3RoZW1lICVkCgoALy8gc2NhbGUgb2Ygc2NyZWVuc2hvdHMgYW5kIGdpZnMgLy8gMiBtZWFucyAyNTZ4MjU2CgBzY3JlZW5zaG90X3NjYWxlICVkCgBnaWZfc2NhbGUgJWQKCgAvLyBtYXhpbXVtIGdpZiBsZW5ndGggaW4gc2Vjb25kcyAoMC4uMTIwOyAwIG1lYW5zIG5vIGdpZiByZWNvcmRpbmcpCgBnaWZfbGVuICVkCgoALy8gd2hlbiAxLCByZXNldCB0aGUgcmVjb3JkaW5nIHdoZW4gcHJlc3NpbmcgY3RybC05ICh1c2VmdWwgZm9yIGNyZWF0aW5nIGEgbm9uLW92ZXJsYXBwaW5nIHNlcXVlbmNlKQoAZ2lmX3Jlc2V0X21vZGUgJWQKCgAvLyAwIGZvciBvZmYuIDEgZm9yIGF1dG8uIDIgdG8gYWxsb3cgY29udHJvbCBvZiBhIGNhcnQncyBmcmFtZXJhdGUgZHVlIHRvIGhvc3QgbWFjaGluZSdzIGNwdSBjYXBhY2l0eQoAaG9zdF9mcmFtZXJhdGVfY29udHJvbCAlZAoKAC8vIGZpbHRlciBzcGxvcmUgY2FydHJpZGdlcwoALy8gMCBvZmYgICAxIG9uIChleGNsdWRlIGNhcnRyaWRnZSB0YWdnZWQgYXMgJ21hdHVyZScgYnkgY29tbXVuaXR5KQoAc3Bsb3JlX2ZpbHRlciAlZAoKAC8vIHRhYiBkaXNwbGF5IHdpZHRoICgxIH4gNCBzcGFjZXMpCgB0YWJfd2lkdGggJWQKCgAvLyAwIG9mZiAxIG9uOiBkcmF3IHRhYiBjaGFyYWN0ZXJzIGFzIHNtYWxsIHZlcnRpY2FsIGxpbmVzCgBkcmF3X3RhYnMgJWQKCgAvLyAwIG9mZiAxIG9uOiByZWNvcmQgdGhlIGN1cnJlbnQgY2FydHJpZGdlIGFuZCBlZGl0b3IgdmlldyBldmVyeSAzIHNlY29uZHMgKHNlZSBbYXBwZGF0YV0vYWN0aXZpdHkubG9nLnR4dCkKAHJlY29yZF9hY3Rpdml0eV9sb2cgJWQKCgAvLyAwIG9mZiAxIG9uOiBhbGxvdyBGNi4uRjkgKGFsdGVybmF0aXZlOiBjdHJsIDYuLjkpCgBhbGxvd19mdW5jdGlvbl9rZXlzICVkCgoALy8gMCBvZmYgMSBvbjogYXV0b21hdGljYWxseSBjaGVjayBmb3IgYSBuZXdlciB2ZXJzaW9uIG9mIGEgQkJTIGNhcnQgZWFjaCB0aW1lIGl0IGlzIHJ1bi4KAGNoZWNrX2Zvcl9jYXJ0X3VwZGF0ZXMgJWQKCgBmbGlwX2FtcGVyc2FuZCAxCgoALy8gaGlkZSBtb3VzZSBjdXJzb3IgZm9yIG4gc2Vjb25kcyB3aGVuIHR5cGluZy4KAGF1dG9faGlkZV9tb3VzZV9jdXJzb3IgJWQKCgAvLyAwIG9mZiAxIG9uOiBiYWNrdXAgd2l0aCBhIG5ldyB0aW1lc3RhbXBlZCBmaWxlbmFtZSBvbiBldmVyeSBydW4KAC8vIG5vcm1hbGx5IG5vdCBuZWVkZWQgLS0gd2FzIHVzZWQgZm9yIGRlYnVnZ2luZyBjcmFzaC1vbi1ydW4KAGFnZ3Jlc3NpdmVfYmFja3VwcyAlZAoKAC8vIGJhY2sgdXAgY2FydHJpZGdlIGluIGVkaXRvciBldmVyeSBuIG1pbnV0ZXMgd2hlbiBub3QgaWRsZSAoMCBmb3Igbm8gcGVyaW9kaWMgYmFja3VwcykKAHBlcmlvZGljX2JhY2t1cHMgJWQKCgAvLyBnbG9iYWwgc2NyZWVuIHRyYW5zZm9ybWF0aW9uczoKAC8vICAxMjkgZmxpcCBob3Jpem9udGFsbHkKAC8vICAxMzAgZmxpcCB2ZXJ0aWNhbGx5CgAvLyAgMTMzIHJvdGF0ZSBDVyA5MCBkZWdyZWVzCgAvLyAgMTM0IHJvdGF0ZSBDVyAxODAgZGVncmVlcwoALy8gIDEzNSByb3RhdGUgQ1cgMjcwIGRlZ3JlZXMKAHRyYW5zZm9ybV9zY3JlZW4gJWQKCgAvLyAwIG9mZiAgPiAxOiBjb2xvdXIgdG8gZHJhdyBwaXhlbCBncmlkIGluIHRoZSBnZnggZWRpdG9yIGF0IHpvb206OCBhbmQgem9vbTo0ICgxNiBmb3IgYmxhY2spCgBnZnhfZ3JpZF9saW5lcyAlZAoKAHtjaWlpID0gJDA7IGlpaSA9IDA7fQAie2lpaSA9IGlpaSsxOyByZXR1cm4gX2NhcnRuYW1lW2NpaWldLmNoYXJDb2RlQXQoaWlpLTEpOyB9IgBbY29kb10gYmJzX3dnZXRfb25sb2FkIDo6IHJlY2VpdmVkLiBwcmVwYXJpbmcgdG8gcnVuLiBwc3RhdGUuY3VycmVudF9maWxlbmFtZSAlcyBhcHAuYXJndl9maWxlbmFtZSAlcwoAd3JvdGUgbGVuOiAlZAoAL2Jicy9nZXRfY2FydC5waHAAbGlkPQBmaWxlbmFtZV9ub3RfZm91bmQucDgucG5nAGJic193Z2V0X29ubG9hZDogc2V0IGN1cnJlbnRfZmlsZW5hbWUgdG8gJXMgKGRlcml2ZWQgZnJvbSAlcykKAGNvdWxkIG5vdCBmZXRjaCBjYXJ0ACJ7IGlmICh0eXBlb2YgX2NhcnRkYXQgIT09J3VuZGVmaW5lZCcpIHJldHVybiAxOyByZXR1cm4gMDt9IgAie3JldHVybiBfY2FydGRhdC5sZW5ndGggLyAzMjc2OH0iACJ7IF9jZHBvcz1fY2Rwb3MrMTsgcmV0dXJuIF9jYXJ0ZGF0W19jZHBvcy0xXTsgfSIAc3RhcnRpbmcgZG93bmxvYWQKAGxvYWRpbmcgZW1iZWRkZWQgY2FydHJpZGdlCgBqb3lzdGljawBnbG9iYWxfYXBpAGtpb3NrAGdwaW9fYmFzZQBnbGl0Y2hfdGVzdAB4AGV4ZWMAcGFyYW0AcABhY2NlcHRfZnV0dXJlAHR2X2ZyYW1lAGRpc3BsYXlzX3gAZGlzcGxheXNfeQBpAG8AdXJsX2NvZGUAdXJsX2dmeABjaWQAbGV0IHN0YXRlT2JqID0geyBsb2FkX3BhcmFtX2RhdGEgOiBmYWxzZSB9OyBoaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZU9iaiwgIlBJQ08tOCIsICI/Iik7AGZ1bmN0aW9uIG1rZGlyXzAoZCkgeyB0cnkgeyBzdGF0ID0gRlMuc3RhdChkKTsgfSBjYXRjaCAoZSkgeyBGUy5ta2RpcihkKTsgfSB9IG1rZGlyXzAoJy91c2VyX2RhdGEnKTsgRlMubW91bnQoSURCRlMsIHt9LCAnL3VzZXJfZGF0YScpOyBGUy5zeW5jZnModHJ1ZSwgZnVuY3Rpb24gKGVycikgeyBpZiAoIWVycikgeyBjb25zb2xlLmxvZygiY29kbzogbW91bnRlZCBmaWxlc3lzdGVtLlxuIik7IGNvZG9fbW91bnRlZF9maWxlc3lzdGVtID0gMTsgbWtkaXJfMCgnL3VzZXJfZGF0YS9jZGF0YScpOyBta2Rpcl8wKCcvdXNlcl9kYXRhL2NzdG9yZScpOyBta2Rpcl8wKCcvdXNlcl9kYXRhL2NhcnRzJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvYmFja3VwJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvcGxhdGVzJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvYmJzJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvYmJzL2NhcnRzJyk7IG1rZGlyXzAoJy91c2VyX2RhdGEvYmJzL2xhYmVscycpOyB9IGVsc2UgeyBjb25zb2xlLmxvZygiKiogY291bGQgbm90IG1vdW50IGZpbGVzeXN0ZW1cbiIpOyBjb25zb2xlLmxvZyhlcnIpOyB9IH0gKTsAL3VudGl0bGVkLnA4AC91bnRpdGxlZF8lZC5wOAAieyBNb2R1bGUucGljbzhSZXNldCA9IGZ1bmN0aW9uKCkgeyBjb2RvX2NvbW1hbmQgPSAxO30gOyBNb2R1bGUucGljbzhUb2dnbGVTb3VuZCA9IGZ1bmN0aW9uKCkgeyBjb2RvX2NvbW1hbmQgPSAzO30gOyBNb2R1bGUucGljbzhUb2dnbGVQYXVzZWQgPSBmdW5jdGlvbigpIHsgY29kb19jb21tYW5kID0gNDsgfSA7IE1vZHVsZS5waWNvOFNldFBhdXNlZCA9IGZ1bmN0aW9uKHApIHsgY29kb19jb21tYW5kID0gNTsgY29kb19jb21tYW5kX3AgPSAwOyBpZiAocCkgY29kb19jb21tYW5kX3A9MTt9IDsgTW9kdWxlLnBpY284VG9nZ2xlQ29udHJvbE1lbnUgPSBmdW5jdGlvbigpIHsgY29kb19jb21tYW5kID0gNzt9IDsgTW9kdWxlLnBpY284RHJhZ092ZXIgPSBmdW5jdGlvbigpIHsgY29kb19jb21tYW5kID0gMTA7fSA7IE1vZHVsZS5waWNvOERyYWdTdG9wID0gZnVuY3Rpb24oKSB7IGNvZG9fY29tbWFuZCA9IDExO30gOyB9IgBjYXJ0cy8AY2RhdGEvAHBpY284LmRhdABkYXRhLnBvZABSVU5OSU5HOiAlcwoAY291bGRuJ3QgbG9hZCAlcwoAY291bGQgbm90IGxvYWQgJXMKAC4vAHt2YXIgdmFsPTA7IGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZigid2lkZ2V0LnBocCIpID49IDApIHZhbD0xOyByZXR1cm4gdmFsO30Ae3ZhciB2YWw9MDsgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5pbmRleE9mKCJwaWNvLTgucGhwIikgPj0gMCkgdmFsPTE7IHJldHVybiB2YWw7fQBhIG5ldyB2ZXJzaW9uIG9mIHRoaXMAY2FydHJpZGdlIGlzIGF2YWlsYWJsZQAlMDJkAGRpcmVjdG9yeTogLwBkaXJlY3Rvcnk6ICVzAG5vdCBmb3VuZAAtLW1vcmUtLQBjb250aW51ZQByZXNldCBjYXJ0AHNvdW5kOm9uAHNvdW5kOm9mZgB2b2x1bWU6IDAxMjM0NTY3AHVwZGF0ZSBjYXJ0AHNraXAAc291bmQgb2ZmIChjdHJsLW0pAHNvdW5kIG9uIChjdHJsLW0pAGRvd25sb2FkIHRpbWVkIG91dABkb3dubG9hZGluZy4uIGNhbmNlbGxlZAAubmZvAC90ZW1wLQBjb3VsZCBub3QgZmluZCBjYXJ0AGRvd25sb2FkaW5nLi4gb2sAbG9hZGVkICMlcyAoJWQgY2hhcnMpAGNvdWxkIG5vdCBjb25uZWN0IHRvIGJicwBmdXR1cmUgdmVyc2lvbi4gcGxlYXNlIHVwZGF0ZSEAIHZvbHVtZTogICAgICAgICAgICAgIChjdHJsLS8rKQB7IGlmICh0eXBlb2YgcGljbzhfc3RhdGUgIT09ICd1bmRlZmluZWQnKXsgcGljbzhfc3RhdGUuaXNfcGF1c2VkID0gJDA7IHBpY284X3N0YXRlLnNvdW5kX3ZvbHVtZSA9ICQxOyBwaWNvOF9zdGF0ZS5mcmFtZV9udW1iZXIgPSAkMjsgcGljbzhfc3RhdGUuaGFzX2ZvY3VzID0gJDM7IHBpY284X3N0YXRlLnNob3dfZHBhZCA9ICQ0OyBwaWNvOF9zdGF0ZS5yZXF1ZXN0X3BvaW50ZXJfbG9jayA9ICQ1OyBwaWNvOF9zdGF0ZS5yZXF1aXJlX3BhZ2VfbmF2aWdhdGVfY29uZmlybWF0aW9uID0gJDY7IHBpY284X3N0YXRlLnNodXRkb3duX3JlcXVlc3RlZCA9ICQ3OyB9IH0AInt2YXIgdmFsPTA7IGlmICh0eXBlb2YgY29kb19jb21tYW5kICE9PSAndW5kZWZpbmVkJykge3ZhbD1jb2RvX2NvbW1hbmQ7IGNvZG9fY29tbWFuZD0wO30gcmV0dXJuIHZhbH0iACJ7dmFyIHZhbD0wOyBpZiAodHlwZW9mIGNvZG9fY29tbWFuZF9wICE9PSAndW5kZWZpbmVkJykge3ZhbD1jb2RvX2NvbW1hbmRfcDsgY29kb19jb21tYW5kX3A9MDt9IHJldHVybiB2YWx9IgAie2J1dHRvbl9pID0gMH0iACJ7dmFyIHZhbD0tMTsgaWYgKHR5cGVvZiBwaWNvOF9idXR0b25zICE9PSAndW5kZWZpbmVkJykge3ZhbCA9IHBpY284X2J1dHRvbnNbYnV0dG9uX2ldOyBidXR0b25faSArKzt9IHJldHVybiB2YWw7fSIAInt2YXIgdmFsID0gMDsgaWYgKHR5cGVvZiBwaWNvOF9nYW1lcGFkcyAhPT0gJ3VuZGVmaW5lZCcpIHt2YWwgPSBwaWNvOF9nYW1lcGFkcy5jb3VudDt9IHJldHVybiB2YWw7fSIAKiogZmFpbGVkIHRvIHNhdmUgc2NyZWVuc2hvdABzZXQgdmlkZW8gc3RhcnRpbmcgcG9pbnQAbm8gdmlkZW8gcmVjb3JkZWQgKHJlYzogY3RybC04KQAqKiBmYWlsZWQgdG8gc2F2ZSB2aWRlbwBqb3lzdGljayAlZCBjb25uZWN0ZWQAam95c3RpY2sgJWQgZGlzY29ubmVjdGVkAGlmICh0eXBlb2Ygb25fbW9kdWxlX2xvYWQgIT09ICd1bmRlZmluZWQnKSB7IGlmIChvbl9tb2R1bGVfbG9hZCkgb25fbW9kdWxlX2xvYWQoKTsgfQBjb3VsZCBub3Qgb3BlbiBmaWxlIHRvIHNhdmUgZnJvbSB3ZWI6ICVzCgB7IGRvd25sb2FkX2Jyb3dzZXJfZmlsZShVVEY4VG9TdHJpbmcoJDAsICQxKSwgVVRGOFRvU3RyaW5nKCQyLCAkMykpOyB9AGRhdGE6aW1hZ2UvJXM7YmFzZTY0LAB7IGlmICh0eXBlb2YgcDhpbWcgIT09ICd1bmRlZmluZWQnKSB7IHA4aW1nLnNyYz0iIjsgfSBwOGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOyBwOGltZy5zcmMgPSBVVEY4VG9TdHJpbmcoJDAsICQxKTsgcDhpbWcuc3R5bGUgPSAnd2lkdGg6MTI4cHg7IGhlaWdodDoxMjhweDsgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IG5lYXJlc3QtbmVpZ2hib3I7JzsgaWYgKHR5cGVvZiBwOGltZ2hvbGRlciA9PT0gJ3VuZGVmaW5lZCcgfHwgIXA4aW1naG9sZGVyKXsgcDhpbWdob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgcDhpbWdob2xkZXIuc3R5bGUuY3NzVGV4dCA9ICdtaW4td2lkdGg6MTYwcHg7IGRpc3BsYXk6dGFibGU7IHBvc2l0aW9uOmZpeGVkOyB0b3A6MjBweDsgbGVmdDoyMHB4OyBwYWRkaW5nOjEycHg7IGJhY2tncm91bmQtY29sb3I6IzAwMDsgYm94LXNoYWRvdzogMnB4IDJweCA4cHggcmdiYSgxNiwgMCwgNDgsIDAuNCk7JzsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwOGltZ2hvbGRlcik7IH0gaWYgKHA4aW1naG9sZGVyKSB7IHdoaWxlIChwOGltZ2hvbGRlci5jaGlsZEVsZW1lbnRDb3VudCA+IDApIHA4aW1naG9sZGVyLnJlbW92ZUNoaWxkKHA4aW1naG9sZGVyLmZpcnN0Q2hpbGQpOyB2YXIgZGlzbWlzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBkaXNtaXNzLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTp0YWJsZTsgZm9udC1zaXplOjEwcHQ7IGNvbG9yOiNmZmY7IHBhZGRpbmc6NHB4OyBjdXJzb3I6cG9pbnRlcjsgbWFyZ2luLWxlZnQ6MTBweDsgZmxvYXQ6cmlnaHQnOyBkaXNtaXNzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcDhpbWcuc3JjPSIiOyB3aGlsZSAocDhpbWdob2xkZXIuY2hpbGRFbGVtZW50Q291bnQgPiAwKSBwOGltZ2hvbGRlci5yZW1vdmVDaGlsZChwOGltZ2hvbGRlci5maXJzdENoaWxkKTsgcDhpbWdob2xkZXIuc3R5bGUuZGlzcGxheT0ibm9uZSI7IH0sIGZhbHNlKTsgZGlzbWlzcy5pbm5lckhUTUwgPSAnWCc7IHA4aW1naG9sZGVyLmFwcGVuZENoaWxkKGRpc21pc3MpOyBwOGltZ2hvbGRlci5hcHBlbmRDaGlsZChwOGltZyk7IHZhciBpbmZvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGluZm8uaW5uZXJIVE1MID0gJzxicj4gPGZvbnQgc3R5bGU9ImNvbG9yOiNiYmI7IGZvbnQtc2l6ZTo4cHQiPjxjZW50ZXI+IChyaWdodC1jbGljayB0byBzYXZlKSA8L2NlbnRlcj48L2ZvbnQ+JzsgcDhpbWdob2xkZXIuYXBwZW5kQ2hpbGQoaW5mbyk7IGlmIChwOGltZ2hvbGRlci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikgcDhpbWdob2xkZXIuc3R5bGUuZGlzcGxheSA9ICIiOyB9IH0AY291bGQgbm90IGNvbXByZXNzIGNvZGUKAGhleGR1bXAgJWQgYnl0ZXMgdG8gY2xpcGJvYXJkAHdyaXRpbmcgJWQgYnl0ZXMgKGNvZGUgb25seSkAd3JpdGluZyAlZCBieXRlcwAlMngAbG9hZGluZyBmdXR1cmUgY2FydCB2ZXJzaW9uAGZ1dHVyZSB2ZXJzaW9uOiAlZABjYXJ0cmlkZ2UgZGF0YSBpcyBjb3JydXB0ZWQAJXMlcy5wOCVzAC5yb20AJXMlcyVzLnA4AHVudGl0bGVkAGJhY2t1cC8AJTRkJTAyZCUwMmRfJTAyZCUwMmQlMDJkXwBwcm9ncmFtIG92ZXIgc2l6ZSBsaW1pdAoAY29tcHJlc3NlZCBjb2RlIHNpemUgdG9vIGxhcmdlCgAlZCAvICVkIGJ5dGVzAHdhcm5pbmc6IGNvbXByZXNzZWQgY29kZSB0b28gYmlnAHRvIGJlIGV4cG9ydGVkIG9yIHNhdmVkIGFzIHBuZwAoc2F2aW5nIC5wOCBhbnl3YXkpAGZsYXR0ZW5lZCAjaW5jbHVkZXMAKiogZmFpbGVkIHRvIHNhdmUgKioAL3VzZXJfZGF0YS9jc3RvcmUvJXMlcwBfXwBwcmVwYXJlX2xvYWRlZF9jYXJ0OiBsb29raW5nIGZvciBzYW5kYm94ZWQgY2FydCBwYXRjaDogJXMKACAgZm91bmQKACAgbm90IGZvdW5kCgB3YXJuaW5nOiBwb3NzaWJsZSBkZXByZWNhdGVkIEBAAGxlZ2FjeTogcGF0ICVkIHN3YXAgY2hhbjogJWQgJWQAcHJpbnQoImFyY2hlb3MiLDk4LDM0LDcpAC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIGxlZ2FjeSAwLjEuMSBhcGkgaW5qZWN0ZWQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIF92YWxpZGF0ZShjKSBpZiAoYy5fbnVtPT1uaWwpIHRoZW4gbG9jYWwgaT0wIHdoaWxlKGNbaSsxXX49bmlsKSBkbyBpPWkrMSBlbmQgYy5fbnVtPWkgYy5fbWF4PWkgCWMuX21pbj1pKzEgYy5fbnVtID0gaSBjLl9jaSA9IGkgZW5kIGVuZCAJZnVuY3Rpb24gZm9yZWFjaChjLCBmKSBpZiAoYyA9PSBuaWwpIHRoZW4gcmV0dXJuIGVuZCBfdmFsaWRhdGUoYykgaWYgKGMuX21heCA9PSBuaWwpIHRoZW4gcmV0dXJuIGVuZCBmb3IgaT0xLGMuX21heCBkbyBpZiAoY1tpXSB+PSBuaWwpIHRoZW4gYy5fY2kgPSBpIGYoY1tpXSkgZW5kIGVuZCBlbmQgZnVuY3Rpb24gYWxsKGMpIGlmIChjID09IG5pbCkgdGhlbiByZXR1cm4gZnVuY3Rpb24oKSBlbmQgZW5kIF92YWxpZGF0ZShjKSBsb2NhbCBpPTAgcmV0dXJuIGZ1bmN0aW9uKCkgaT1pKzEgd2hpbGUgKGNbaV09PW5pbCBhbmQgaTxjLl9tYXgpIGRvIGk9aSsxIGVuZCBpZiAoY1tpXSB+PSBuaWwpIHRoZW4gYy5fY2k9aSByZXR1cm4gY1tpXSBlbmQgZW5kIGVuZCBmdW5jdGlvbiBhZGQoYywgaSkgaWYgKGMgPT0gbmlsKSB0aGVuIHJldHVybiBlbmQgX3ZhbGlkYXRlKGMpIGZvciBqPWMuX21pbixjLl9tYXgrMSBkbyBpZiAoY1tqXSA9PSBuaWwpIHRoZW4gYy5fbWF4ID0gbWF4KGMuX21heCxqKSBjLl9taW4gPSBqKzEgYy5fbnVtID0gYy5fbnVtKzEgY1tqXT1pIHJldHVybiBpIGVuZCBlbmQgZW5kIGZ1bmN0aW9uIGNvdW50KGMpIGlmIChjID09IG5pbCkgdGhlbiByZXR1cm4gMCBlbmQgX3ZhbGlkYXRlKGMpIHJldHVybiBjLl9udW0gZW5kIGZ1bmN0aW9uIGRlbChjLGkpIGlmIChjID09IG5pbCkgdGhlbiByZXR1cm4gZW5kIF92YWxpZGF0ZShjKSBpZiAoaT09bmlsKSB0aGVuIHJldHVybiBlbmQgaWYgKGMuX2NpPT1pKSB0aGVuIGNbYy5fY2ldPW5pbCBjLl9taW49bWluKGMuX21pbiwgYy5fY2kpIGMuX251bT1jLl9udW0tMSByZXR1cm4gZWxzZSBmb3Igaj0xLGMuX21heCBkbyBpZiAoY1tqXT09aSkgdGhlbiBjW2pdPW5pbCBjLl9taW49bWluKGMuX21pbixqKSBjLl9udW09Yy5fbnVtLTEgcmV0dXJuIGVuZCBlbmQgZW5kIHdoaWxlIChjLl9tYXg+MSBhbmQgY1tjLl9tYXhdPT1uaWwpIGRvIGMuX21heD1jLl9tYXgtMSBlbmQgZW5kICBuZD0wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoAbGVnYWN5OiAwLjEuMSBhcGkgaW5qZWN0ZWQALmx1YQBwbGVhc2Ugc3BlZmljeSBhIGZpbGVuYW1lACoqKiBubyBmaWxlbmFtZS4gbm90IHNhdmVkISAqKioAY2FuIG5vdCBvdmVyd3JpdGUgYmJzIGNhcnQAKiBjYW4gbm90IG92ZXJ3cml0ZSBiYnMgY2FydCEgKgBzYXZlIGZhaWxlZAAqKioqIHNhdmUgZmFpbGVkICoqKioAc2F2ZWQgJXMlcyAqKnRlbXAgZGlzayoqAHNhdmVkICVzJXMlcyAqKnRlbXAgZGlzayoqACVzXyUlZC5wbmcAJXMucG5nAGZpbGUgb3V0cHV0IHBhdGg6ICVzCgBzYXZpbmcgc2NyZWVuc2hvdCB0bzogJXMKAHBuZwBtb3VudF9lbWJlZGRlZF9jYXJ0OiAlcyAoJWQgY2hhcnMpICVzCgAqKiBtb3VudF9lbWJlZGRlZF9jYXJ0OiBmYWlsZWQgdG8gbW91bnQAY291bGQgbm90IGxvYWQgY2FydHJpZGdlAGNhbiBub3QgbG9hZABwOG0ucG5nAHA4bS5wbmcgbm90IHN1cHBvcnRlZABpbWFnZSBpcyB0b28gbGFyZ2UgKDEyOCBtYXgpAGZpbGUgaXMgdG9vIGxhcmdlICgyNTZrIG1heCkAeyBqc1N0cmluZyA9IHA4X2Ryb3BwZWRfY2FydDsgaWYgKCFqc1N0cmluZykgcmV0dXJuIDA7IHZhciBsZW5ndGhCeXRlcyA9IGxlbmd0aEJ5dGVzVVRGOChqc1N0cmluZykrMTsgdmFyIHN0cmluZ09uV2FzbUhlYXAgPSBfbWFsbG9jKGxlbmd0aEJ5dGVzKTsgc3RyaW5nVG9VVEY4KGpzU3RyaW5nLCBzdHJpbmdPbldhc21IZWFwLCBsZW5ndGhCeXRlcyk7IHJldHVybiBzdHJpbmdPbldhc21IZWFwOyB9AHsganNTdHJpbmcgPSBwOF9kcm9wcGVkX2NhcnRfbmFtZTsgaWYgKCFqc1N0cmluZykgcmV0dXJuIDA7IHZhciBsZW5ndGhCeXRlcyA9IGxlbmd0aEJ5dGVzVVRGOChqc1N0cmluZykrMTsgdmFyIHN0cmluZ09uV2FzbUhlYXAyID0gX21hbGxvYyhsZW5ndGhCeXRlcyk7IHN0cmluZ1RvVVRGOChqc1N0cmluZywgc3RyaW5nT25XYXNtSGVhcDIsIGxlbmd0aEJ5dGVzKTsgcmV0dXJuIHN0cmluZ09uV2FzbUhlYXAyOyB9AGxvYWRpbmcgdXJsX3N0cjogJXMKAGJhc2U2NCwAQEAgdHJ5aW5nIHRvIGxvYWQgYXMgaW1hZ2UgJWQKAEBAIHNldHRpbmcgYXMgZHJvcHBlZCBpbWFnZTogJWQgJWQKAEBAIHRyeWluZyBhcyBkYXRhIGZpbGUuIGRhdF9mLT5sZW46ICVkCgBjb3VsZCBub3QgZmluZCBkcm9wcGVkIGZpbGUAaHR0cHM6Ly9waWNvLTgtZWR1LmNvbS8/Yz0AbGV0IHN0YXRlT2JqID0geyBsb2FkX3BhcmFtX2RhdGEgOiB0cnVlfTsgaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGVPYmosICdQSUNPLTggVVJMIENhcnQnLCAnJXMnKTsAKiogZmFpbGVkOiB1cmwgaXMgdG9vIGxvbmcAJWQgLyAyMDQwIGNoYXJzAG5vIHZhbHVlAHVzZXJkYXRhAG51bWJlcgB0aHJlYWQAcHJvdG8AdXB2YWwAc3RhY2sgb3ZlcmZsb3cAQyBzdGFjayBvdmVyZmxvdwB0YWJsZSBvdmVyZmxvdwAnZm9yJyBpbml0aWFsIHZhbHVlIG11c3QgYmUgYSBudW1iZXIAJ2ZvcicgbGltaXQgbXVzdCBiZSBhIG51bWJlcgAnZm9yJyBzdGVwIG11c3QgYmUgYSBudW1iZXIAbk4AeFgAYkIAYXR0ZW1wdCB0byBjb21wYXJlIHR3byAlcyB2YWx1ZXMAYXR0ZW1wdCB0byBjb21wYXJlICVzIHdpdGggJXMAc3RyaW5nIGxlbmd0aCBvdmVyZmxvdwBjb25jYXRlbmF0ZQB1cHZhbHVlAGluZGV4AGF0dGVtcHQgdG8gbW9kaWZ5ICVzICclcycgKHN0cmluZ3MgYXJlIGltbXV0YWJsZSkAYXR0ZW1wdCB0byAlcyAlcyAnJXMnIChhICVzIHZhbHVlKQBhdHRlbXB0IHRvICVzIGEgJXMgdmFsdWUAX0VOVgBnbG9iYWwAZmllbGQAbWV0aG9kAGNvbnN0YW50ACUwLjVmAC45OTk5AC4wMDAwACUwLjNmACUwLjRmAGdldCBsZW5ndGggb2YAcGVyZm9ybSBhcml0aG1ldGljIG9uAHRhYmxlIGluZGV4IGlzIG5pbABtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcjogYmxvY2sgdG9vIGJpZwBsb29wIGluIHNldHRhYmxlAGxvb3AgaW4gZ2V0dGFibGUAYXR0ZW1wdCB0byB5aWVsZCBhY3Jvc3MgYSBDLWNhbGwgYm91bmRhcnkAYXR0ZW1wdCB0byB5aWVsZCBmcm9tIG91dHNpZGUgYSBjb3JvdXRpbmUAY2FsbABbc3RyaW5nICIAIl0AJXMAMHgleABpbnZhbGlkIG9wdGlvbiAnJSUlYycgdG8gJ2x1YV9wdXNoZnN0cmluZycAZXJyb3IgaW4gZXJyb3IgaGFuZGxpbmcAYXR0ZW1wdCB0byBsb2FkIGEgJXMgY2h1bmsgKG1vZGUgaXMgJyVzJykAdGV4dABjb250cm9sIHN0cnVjdHVyZSB0b28gbG9uZwBsYWJlbHMvZ290b3MAbm8gdmlzaWJsZSBsYWJlbCAnJXMnIGZvciA8Z290bz4gYXQgbGluZSAlZCAodGFiICVkKQA8JXM+IGF0IGxpbmUgJWQgbm90IGluc2lkZSBhIGxvb3AAPGdvdG8gJXM+IGF0IGxpbmUgJWQgKHRhYiAlZCkganVtcHMgaW50byB0aGUgc2NvcGUgb2YgbG9jYWwgJyVzJwB0b28gbWFueSAlcyAobGltaXQgaXMgJWQpACVzOiVkOiAlcwBsZXhpY2FsIGVsZW1lbnQgdG9vIGxvbmcAJyVzJwAlcyBuZWFyICVzAEBAACclYycAOjoAPG51bWJlcj4APG5hbWU+ADxzdHJpbmc+ADxlb2w+AF5ePQBvcGNvZGVzACVzIGV4cGVjdGVkAEMgbGV2ZWxzAGZ1bmN0aW9uIG9yIGV4cHJlc3Npb24gdG9vIGNvbXBsZXgAKGZvciBpbmRleCkAKGZvciBsaW1pdCkAKGZvciBzdGVwKQAoZm9yIGdlbmVyYXRvcikAKGZvciBzdGF0ZSkAKGZvciBjb250cm9sKQAnPScgb3IgJ2luJyBleHBlY3RlZABsYWJlbCAnJXMnIGFscmVhZHkgZGVmaW5lZCBvbiBsaW5lICVkICh0YWIgJWQpAChmb3IgY29tcG91bmQpAHVuZXhwZWN0ZWQgc3ltYm9sAGZ1bmN0aW9uIGFyZ3VtZW50cyBleHBlY3RlZABpdGVtcyBpbiBhIGNvbnN0cnVjdG9yAGZ1bmN0aW9ucwBzZWxmADxuYW1lPiBvciAnLi4uJyBleHBlY3RlZABjb25zdGFudHMAbG9jYWwgdmFyaWFibGVzACVzIGV4cGVjdGVkICh0byBjbG9zZSAlcyBhdCBsaW5lICVkICh0YWIgJWQpKQBjYW5ub3QgdXNlICcuLi4nIG91dHNpZGUgYSB2YXJhcmcgZnVuY3Rpb24AZnVuY3Rpb24gYXQgbGluZSAlZCAodGFiICVkKQBtYWluIGZ1bmN0aW9uAHRvbyBtYW55ICVzIChsaW1pdCBpcyAlZCkgaW4gJXMAaW52YWxpZCBsb25nIHN0cmluZyBkZWxpbWl0ZXIAdW5maW5pc2hlZCBzdHJpbmcAaGV4YWRlY2ltYWwgZGlnaXQgZXhwZWN0ZWQAaW52YWxpZCBlc2NhcGUgc2VxdWVuY2UAZGVjaW1hbCBlc2NhcGUgdG9vIGxhcmdlAFh4AG1hbGZvcm1lZCBudW1iZXIAdW5maW5pc2hlZCBsb25nIGNvbW1lbnQAdW5maW5pc2hlZCBsb25nIHN0cmluZwBjaHVuayBoYXMgdG9vIG1hbnkgbGluZXMAdXB2YWx1ZXMAYmluYXJ5IHN0cmluZwB0cnVuY2F0ZWQAbm90IGEAdmVyc2lvbiBtaXNtYXRjaCBpbgBpbmNvbXBhdGlibGUAY29ycnVwdGVkACVzOiAlcyBwcmVjb21waWxlZCBjaHVuawBpbnZhbGlkIGtleSB0byAnbmV4dCcAc3RhY2sgdHJhY2ViYWNrOgAKCS4uLgBTbG50AAoJJXM6ACVkOgAgaW4gAGZ1bmN0aW9uICclcycAbWFpbiBjaHVuawBmdW5jdGlvbiA8JXM6JWQ+AAoJKC4uLnRhaWwgY2FsbHMuLi4pAD1bQ10APT8AbWFpbgBMdWEAZm9yIGl0ZXJhdG9yAG1ldGFtZXRob2QAYmFkIGFyZ3VtZW50ICMlZCAoJXMpAG4AY2FsbGluZyAnJXMnIG9uIGJhZCBzZWxmICglcykAYmFkIGFyZ3VtZW50ICMlZCB0byAnJXMnICglcykAU2wAJXM6JWQ6IAAlcyBleHBlY3RlZCwgZ290ICVzAHZhbHVlIGV4cGVjdGVkAG9iamVjdCBsZW5ndGggaXMgbm90IGEgbnVtYmVyAF9fdG9zdHJpbmcAJXM6ICVwAF9faW5kZXgAX19uZXdpbmRleABfX2djAF9fbW9kZQBfX2xlbgBfX2VxAF9fYWRkAF9fc3ViAF9fbXVsAF9fZGl2AF9fbW9kAF9fcG93AF9fYW5kAF9fb3IAX194b3IAX19zaGwAX19zaHIAX19sc2hyAF9fcm90bABfX3JvdHIAX19ub3QAX19pZGl2AF9fcGVlawBfX3BlZWsyAF9fcGVlazQAX191bm0AX19sdABfX2xlAF9fY29uY2F0AF9fY2FsbABfX21ldGF0YWJsZQBuaWwgb3IgdGFibGUgZXhwZWN0ZWQAY2Fubm90IGNoYW5nZSBhIHByb3RlY3RlZCBtZXRhdGFibGUAdGFibGUgb3Igc3RyaW5nIGV4cGVjdGVkAF9fcGFpcnMAX19pcGFpcnMAYXNzZXJ0aW9uIGZhaWxlZCEAaW5kZXggb3V0IG9mIHJhbmdlAGNvcm91dGluZSBleHBlY3RlZABjb3JvbGliOiB0b28gbWFueSBhcmd1bWVudHMgdG8gcmVzdW1lAGNvcm9saWI6IGNhbm5vdCByZXN1bWUgZGVhZCBjb3JvdXRpbmUAY29yb2xpYjogdG9vIG1hbnkgcmVzdWx0cyB0byByZXN1bWUAY2Fubm90IHJlc3VtZSBub24tc3VzcGVuZGVkIGNvcm91dGluZQBjYW5ub3QgcmVzdW1lIGRlYWQgY29yb3V0aW5lAHJ1bm5pbmcAc3VzcGVuZGVkAG5vcm1hbABkZWFkAHRvbyBtYW55IHJlc3VsdHMgdG8gdW5wYWNrAHVwbG9hZAB7IGlmICh0eXBlb2YgcGljbzhfc3RhdGUgIT09ICd1bmRlZmluZWQnKXsgaWYgKHR5cGVvZiBwaWNvOF9zdGF0ZS5zeXN0ZW1fbWVzc2FnZXMgPT09ICd1bmRlZmluZWQnKSBwaWNvOF9zdGF0ZS5zeXN0ZW1fbWVzc2FnZXMgPSBuZXcgQXJyYXkoKTsgcGljbzhfc3RhdGUuc3lzdGVtX21lc3NhZ2VzLnB1c2goVVRGOFRvU3RyaW5nKCQwLCAkMSkpOyB9IH0AX2VuZF9vZl9wcm9ncmFtAHRvIGNsb3NlICcAYXQgbGluZSAAJWQgKHRhYiAlZCkAdW5jbG9zZWQgJXMgYXQgbGluZSAlZCAodGFiICVkKQoAdW5jbG9zZWQgJXMALS0gcGljby04IGhlYWRlcgBhc3NlcnRpb24gZmFpbGVkAHBvc2l0aW9uIG91dCBvZiBib3VuZHMAbm90IGVub3VnaCBtZW1vcnkAPGVvZj4AdGhlbWUgAHRoZW1lAGJsdWUAc2V0IHRoZW1lIHRvIGJsdWUAYXV0bwBzZXQgdGhlbWUgdG8gYXV0bwBjbGFzc2ljAHNldCB0aGVtZSB0byBjbGFzc2ljAGNvbmZpZyB0aGVtZSBbdmFsdWVdAGF2YWlsYWJsZSB0aGVtZXM6AGRyYXdfdGFicyAAZHJhd190YWJzAHNob3dfdGFicyAAc2hvd190YWJzAG9uAHRhYiBjaGFyYWN0ZXJzIG9uAG9mZgB0YWIgY2hhcmFjdGVycyBvZmYAY29uZmlnIGRyYXdfdGFicyBbb24gfCBvZmZdAHdoZW4gb24sIHRhYiBjaGFyYWN0ZXJzIGFyZSAAZHJhd24gaW4gdGhlIGNvZGUgZWRpdG9yLgBjdXJyZW50IHNldHRpbmc6IG9uAGN1cnJlbnQgc2V0dGluZzogb2ZmAHNwbG9yZV9maWx0ZXIgAHNwbG9yZV9maWx0ZXIAZmlsdGVyIG9uAGZpbHRlciBvZmYAY29uZmlnIGZpbHRlciBbb24gfCBvZmZdAHdoZW4gb24sIGNhcnRyaWRnZXMgdGFnZ2VkIGFzAG1hdHVyZSB3aWxsIG5vdCBiZSBkb3dubG9hZGVkLgBmaWx0ZXIgaXMgY3VycmVudGx5OiBvbgBmaWx0ZXIgaXMgY3VycmVudGx5OiBvZmYAdm9sdW1lIABzZXQgdm9sdW1lOiAlZABjb25maWcgdm9sdW1lIFt2YWxdAHZhbDogOCBxdWlldCAuLiAyNTYgbG91ZABjdXJyZW50IHZvbHVtZTogJWQAZ2lmX2xlbiAAc2V0IGdpZl9sZW46ICVkAGdpZl9sZW4AY29uZmlnIGdpZl9sZW4gW3NlY29uZHNdAGN1cnJlbnQgZ2lmX2xlbjogJWQAZ2lmX3Jlc2V0X21vZGUgAHNldCBnaWZfcmVzZXRfbW9kZTogJWQAZ2lmX3Jlc2V0X21vZGUAY29uZmlnIGdpZl9yZXNldF9tb2RlIFttb2RlXQAgMDogZG9uJ3QgcmVzZXQgYWZ0ZXIgcmVjb3JkaW5nACAxOiByZXNldCBhZnRlciBlYWNoIHJlY29yZGluZwBjdXJyZW50IGdpZl9yZXNldF9tb2RlOiAlZABzZnhfZmlsdGVycyAAc2V0IHNmeF9maWx0ZXJzOiAlZABnaWZfc2NhbGUgAHNldCBnaWZfc2NhbGU6ICVkAGdpZl9zY2FsZQBjb25maWcgZ2lmX3NjYWxlIFtzaXplXQBjdXJyZW50IGdpZl9zY2FsZTogJWQAc2NyZWVuc2hvdF9zY2FsZSAAc2V0IHNjcmVlbnNob3Rfc2NhbGU6ICVkAHNjcmVlbnNob3Rfc2NhbGUAY29uZmlnIHNjcmVlbnNob3Rfc2NhbGUgW3NpemVdAGN1cnJlbnQgc2NyZWVuc2hvdF9zY2FsZTogJWQAdGFiX3dpZHRoIABzZXQgdGFiX3dpZHRoOiAlZAB0YWJfd2lkdGgAY29uZmlnIHRhYl93aWR0aCBbd2lkdGhdAGN1cnJlbnQgdGFiX3dpZHRoOiAlZABjb25maWcgW3NldHRpbmddAGF2YWlsYWJsZSBzZXR0aW5nczoAJWQvJWQgJTMuMWYgZnBzACVkLyVkICUxLjJmICUxLjJmAHJlc3VtZSgpAG5vdGhpbmcgdG8gcmVzdW1lAHN0YXQoNCkAIF9kcmF3AHByb2dyYW0gZXhjZWVkcyBjaGFyIGxpbWl0ACVkIC8gJWQgY2hhcnMKAHByb2dyYW0gdG9vIGxhcmdlACVkIC8gJWQgdG9rZW5zCgAtLSBwaWNvLTggaGVhZGVyCglkbyAJbG9jYWwgX3JlZnVuZF9jcHVfID0gX19yZWZ1bmRfY3B1X18gCWxvY2FsIF9wYWlycyA9IF9fcGFpcnNfXyAJbG9jYWwgX2lwYWlycyA9IF9faXBhaXJzX18gCWxvY2FsIF90eXBlID0gX190eXBlIAlsb2NhbCBfdG9zdHIgPSBfX3Rvc3RyIAlsb2NhbCBfc3RvcCA9IF9fc3RvcCAJbG9jYWwgX3ByaW50ID0gX19wcmludCAJbG9jYWwgX3ByaW50aCA9IF9fcHJpbnRoIAlsb2NhbCBfdG9zdHJpbmcgPSBfX3Rvc3RyaW5nX18gCWxvY2FsIF9sb2FkID0gX19sb2FkIAlsb2NhbCBfc3RhdCA9IHN0YXQgCWxvY2FsIF9leHRjbWQgPSBfX2V4dGNtZCAJbG9jYWwgX19tZW51aXRlbSA9IF9tZW51aXRlbSAJbG9jYWwgX3lpZWxkZWRfdG9fZXNjYXBlX3NsaWNlID0gX195aWVsZGVkX3RvX2VzY2FwZV9zbGljZSAJbG9jYWwgX2NvcmVzdW1lID0gX19jb3Jlc3VtZSAJbG9jYWwgX3NlbGVjdCA9IF9fc2VsZWN0IAlsb2NhbCBfc3VwZXJ5aWVsZCA9IF9fc3VwZXJ5aWVsZCAJbG9jYWwgX2xhc3RfbWVudWl0ZW1faW5kZXggPSAwIAlsb2NhbCBfbGFzdF9tZW51aXRlbV9jYWxsYmFjayA9IGZ1bmN0aW9uKCkgZW5kIAlsb2NhbCBfbWlkID0gbWlkIAlfcGF1c2VtZW51PV9wYXVzZW1lbnUgb3Ige30JZnVuY3Rpb24gbWVudWl0ZW0oaW5kZXgsIGxhYmVsLCBjYWxsYmFjaykgCQlpbmRleCA9IGluZGV4IG9yIF9sYXN0X21lbnVpdGVtX2luZGV4IAkJY2FsbGJhY2sgPSBjYWxsYmFjayBvciBfbGFzdF9tZW51aXRlbV9jYWxsYmFjayAJCWlmICh0eXBlKGluZGV4KX49Im51bWJlciIpIHRoZW4gc3RvcCgiYmFkIG1lbnVpdGVtIGluZGV4IikgZW5kIAkJaWYgKGluZGV4IDwgMSBvciBpbmRleCA+IDUpIHRoZW4gcmV0dXJuIGVuZAkJX3BhdXNlbWVudVtpbmRleF0gPSB7fSAJCV9wYXVzZW1lbnVbaW5kZXhdLmxhYmVsID0gbGFiZWwgCQlfcGF1c2VtZW51W2luZGV4XS5jYWxsYmFjayA9IGNhbGxiYWNrIAkJX19tZW51aXRlbShpbmRleCwgbGFiZWwpIAllbmQgCWZ1bmN0aW9uIHBhaXJzKGMpICBpZiAoYyA9PSBuaWwpIHRoZW4gcmV0dXJuIGZ1bmN0aW9uKCkgZW5kIGVuZCByZXR1cm4gX3BhaXJzIChjKSBlbmQgCWZ1bmN0aW9uIGlwYWlycyhjKSBpZiAoYyA9PSBuaWwpIHRoZW4gcmV0dXJuIGZ1bmN0aW9uKCkgZW5kIGVuZCByZXR1cm4gX2lwYWlycyhjKSBlbmQgCWZ1bmN0aW9uIGFsbChjKSBpZiAoYyA9PSBuaWwgb3IgI2MgPT0gMCkgdGhlbiByZXR1cm4gZnVuY3Rpb24oKSBlbmQgZW5kIAkgCWxvY2FsIGk9MSAJIAlsb2NhbCBsaT1uaWwgCQlfcmVmdW5kX2NwdV8oKCNjID49IDE2KSBhbmQgLTE2IG9yIC0jYykgCSAJcmV0dXJuIGZ1bmN0aW9uKCkgCSAJCWlmIChjW2ldID09IGxpKSB0aGVuIGk9aSsxIGVuZCAJIAkJd2hpbGUoY1tpXT09bmlsIGFuZCBpIDw9ICNjKSBkbyBpPWkrMSBlbmQgCSAJCWxpPWNbaV0gCQkJX3JlZnVuZF9jcHVfKC0xNykgCSAJCXJldHVybiBsaSAJIAllbmQgCWVuZCAJZnVuY3Rpb24gZm9yZWFjaChjLF9mKSBmb3IgaSBpbiBhbGwoYykgZG8gX2YoaSkgZW5kIGVuZCBmdW5jdGlvbiB0b3N0ciguLi4pIAktLVtbIG5lZWQgdG8gdXNlIHRvc3RyaW5nIHdoZW4gbWV0YXRhYmxlIGFuZCBtdC5fX3Rvc3RyaW5nIGlzIHNldCBzbyB0aGF0IG10Ll9fdG9zdHJpbmcgd29ya3MuIHNlZSB0ZXN0cy9tZXRhKi5wOCBdXSAJbG9jYWwgcD17Li4ufSAJbG9jYWwgYSxiLG1heF9kZXB0aCA9IHBbMV0scFsyXSxwWzNdIAlpZiAobWF4X2RlcHRoKSB0aGVuIHJldHVybiBfdG9zdHIoLi4uKSBlbmQgCWlmICgoX3R5cGUoYSk9PSJ0YWJsZSIgYW5kICgoZ2V0bWV0YXRhYmxlKGEpIGFuZCBnZXRtZXRhdGFibGUoYSkuX190b3N0cmluZykgb3IgYikpKSBvciAoKF90eXBlKGEpPT0iZnVuY3Rpb24iIGFuZCBiKSkgdGhlbiAJIHJldHVybiBfdG9zdHJpbmcoYSkgICAgIGVsc2UgCSByZXR1cm4gX3Rvc3RyKC4uLikgCWVuZCBlbmQgCS0tW1sgcHJpbnQoKSBzaG91bGQgcHJpbnQgbm90aGluZzsgcHJpbnQobmlsKSBzaG91bGQgcHJpbnQgW25pbF07IHN0b3AoKSBwYXNzZXMgYXJncyB0byBwcmludCBzbyB0aGF0IGNhbiBwcmludCBpbiBhIGNvbG91cl1dCWZ1bmN0aW9uIHN0b3AoLi4uKSAgICBpZiBfc2VsZWN0KCcjJywuLi4pPT0wIHRoZW4gX3N0b3AoKSAgIGVsc2UgbG9jYWwgYT17Li4ufSByZXR1cm4gX3N0b3AgICh0b3N0cihhWzFdKSwgX3NlbGVjdCgyLC4uLikpIGVuZCBlbmQgCWZ1bmN0aW9uIHByaW50KC4uLikgICBpZiBfc2VsZWN0KCcjJywuLi4pPT0wIHRoZW4gX3ByaW50KCkgIGVsc2UgbG9jYWwgYT17Li4ufSByZXR1cm4gX3ByaW50ICh0b3N0cihhWzFdKSwgX3NlbGVjdCgyLC4uLikpIGVuZCBlbmQgCWZ1bmN0aW9uIHByaW50aCguLi4pICBpZiBfc2VsZWN0KCcjJywuLi4pPT0wIHRoZW4gX3ByaW50aCgpIGVsc2UgbG9jYWwgYT17Li4ufSByZXR1cm4gX3ByaW50aCh0b3N0cihhWzFdKSwgX3NlbGVjdCgyLC4uLikpIGVuZCBlbmQgZnVuY3Rpb24gbG9hZCguLi4pIAlsb2NhbCByZXM9X2xvYWQoLi4uKSAJZmxpcCgpIC0tW1t0byBzdXBlcnlpZWxkLiByZWY6cGljb3dhcmVdXQlpZiAoX3N0YXQoMTA3KSA+IDApIHRoZW4gcmV0dXJuIHRydWUgZW5kIAlpZiAoX3N0YXQoMTA3KSA9PSAtMSkgdGhlbiByZXR1cm4gZmFsc2UsICJjb3VsZCBub3QgZmluZCBjYXJ0IiBlbmQgCWlmIChfc3RhdCgxMDcpID09IC0yKSB0aGVuIHJldHVybiBmYWxzZSwgImNvdWxkIG5vdCBmZXRjaCBjYXJ0IiBlbmQgCWlmIChfc3RhdCgxMDcpID09IC0zKSB0aGVuIHJldHVybiBmYWxzZSwgImNvdWxkIG5vdCBjb25uZWN0IHRvIGJicyIgZW5kIAlpZiAoX3N0YXQoMTA3KSA8IDAgb3IgcmVzID09IG5pbCkgdGhlbiByZXR1cm4gZmFsc2UsICJhY2Nlc3MgZGVuaWVkIiBlbmQgCXJldHVybiByZXMgZW5kIGZ1bmN0aW9uIGV4dGNtZChjbWQsIC4uLikgCWxvY2FsIHJlcz1fZXh0Y21kKGNtZCwgLi4uKSAJaWYgKGNtZD09ImdvX2JhY2siIG9yIGNtZD09ImJyZWFkY3J1bWIiKSB0aGVuIAkJZmxpcCgpIC0tW1t0byBzdXBlcnlpZWxkXV0JZW5kIAlyZXR1cm4gcmVzIGVuZCBmdW5jdGlvbiBjb3Jlc3VtZShjLC4uLikgCV95aWVsZGVkX3RvX2VzY2FwZV9zbGljZSgwKSAJbG9jYWwgcjAscjEgPV9jb3Jlc3VtZShjLC4uLikJd2hpbGUgKF95aWVsZGVkX3RvX2VzY2FwZV9zbGljZSgpIGFuZCBjb3N0YXR1cyhjKSA9PSAic3VzcGVuZGVkIikgZG8gCQlfeWllbGRlZF90b19lc2NhcGVfc2xpY2UoMCkgCQlyMCxyMSA9IF9jb3Jlc3VtZShjLC4uLikgCWVuZCAJX3lpZWxkZWRfdG9fZXNjYXBlX3NsaWNlKDApIAlyZXR1cm4gcjAscjEgZW5kIGZ1bmN0aW9uIGZsaXAoKSAJcmVwZWF0IAkJbG9jYWwgY29udGludWVfbWVudSA9IGZhbHNlIAkJZm9yIGk9MSw1IGRvIAkJIGxvY2FsIHZhbCA9IF9nZXRfbWVudV9pdGVtX3NlbGVjdGVkKGkpIAkJIGlmICh2YWwpIHRoZW4gCQkgIF9sYXN0X21lbnVpdGVtX2luZGV4ID0gaSAJCSAgX2xhc3RfbWVudWl0ZW1fY2FsbGJhY2sgPSBfcGF1c2VtZW51W2ldLmNhbGxiYWNrIAkJICBjb250aW51ZV9tZW51ID0gX3BhdXNlbWVudVtpXS5jYWxsYmFjayh2YWwpIAkJICBpZiAodmFsICYgMyA+IDApIHRoZW4gY29udGludWVfbWVudSA9IHRydWUgZW5kIAkJIGVuZCAJCWVuZCAJCWlmIChjb250aW51ZV9tZW51KSB0aGVuIGV4dGNtZCgicGF1c2UiLCAxKSBfc3VwZXJ5aWVsZCgpIGVuZCAgCXVudGlsIG5vdCBjb250aW51ZV9tZW51IAlfX2ZsaXAoKSBlbmQgZW5kIC0tW1sgc2NvcGUgXV1fX3JlZnVuZF9jcHVfXyA9IG5pbCBfX2lwYWlyc19fID0gbmlsIF9fcGFpcnNfXyA9IG5pbCBfX3Rvc3RyICAgID0gbmlsIF9fc3RvcCAgICAgPSBuaWwgX19wcmludCAgICA9IG5pbCBfX3ByaW50aCAgID0gbmlsIF9fbG9hZCAgICAgPSBuaWwgX19leHRjbWQgICA9IG5pbCBfX3Rvc3RyaW5nX18gPSBuaWwgX195aWVsZGVkX3RvX2VzY2FwZV9zbGljZSA9IG5pbCBfX2NvcmVzdW1lID0gbmlsIF9fc2VsZWN0ID0gbmlsIF9fc3VwZXJ5aWVsZCA9IG5pbCAAgD2AIG9yIDAuNSCBPYEgb3IgMjMxMzAuNSCCPYIgb3IgMjA3NjcuNSCDPYMgb3IgMyCEPYQgb3IgMzIxMjUuNSCFPYUgb3IgLTE4NDAyLjUghj2GIG9yIC0xNjMyLjUghz2HIG9yIDIwOTI3LjUgiD2IIG9yIC0xOTAwOC41IIk9iSBvciAtMjYyMDguNSCKPYogb3IgLTIwMTkyLjUgiz2LIG9yIDAgjD2MIG9yIC0yNDM1MS41II09jSBvciAtMjU3OTIuNSCOPY4gb3IgNCCPPY8gb3IgLTIwMDMyLjUgkD2QIG9yIC0yNTYwLjUgkT2RIG9yIDEgkj2SIG9yIC0yMDEyOC41IJM9kyBvciA2OTQzLjUglD2UIG9yIDIglT2VIG9yIC0yNjI0LjUglj2WIG9yIDMxNDU1LjUglz2XIG9yIDUgmD2YIG9yIDM4NTUuNSCZPZkgb3IgMjE4NDUuNSA7AGxvY2FsIHRpbWUsc3ViLGNocixvcmQsdG9zdHIsdG9udW0sYWRkLGRlbCxkZWxpLGNsaXAsY29sb3IscGFsLHBhbHQsZmlsbHAscGdldCxwc2V0LHNnZXQsc3NldCxmZ2V0LGZzZXQsY2lyYyxjaXJjZmlsbCxyZWN0LHJlY3RmaWxsLG92YWwsb3ZhbGZpbGwsbGluZSxzcHIsc3Nwcj0gICAgICB0aW1lLHN1YixjaHIsb3JkLHRvc3RyLHRvbnVtLGFkZCxkZWwsZGVsaSxjbGlwLGNvbG9yLHBhbCxwYWx0LGZpbGxwLHBnZXQscHNldCxzZ2V0LHNzZXQsZmdldCxmc2V0LGNpcmMsY2lyY2ZpbGwscmVjdCxyZWN0ZmlsbCxvdmFsLG92YWxmaWxsLGxpbmUsc3ByLHNzcHIgbG9jYWwgbWdldCxtc2V0LHRsaW5lLHBlZWsscG9rZSxwZWVrMixwb2tlMixwZWVrNCxwb2tlNCxtZW1jcHksbWVtc2V0LG1heCxtaW4sbWlkLGZscixjZWlsLGNvcyxzaW4sYXRhbjIscmFuZCxzcmFuZCxiYW5kLGJvcixieG9yLGJub3Qsc2hsLHNocixsc2hyLHJvdGwscm90cj0gICAgICAgbWdldCxtc2V0LHRsaW5lLHBlZWsscG9rZSxwZWVrMixwb2tlMixwZWVrNCxwb2tlNCxtZW1jcHksbWVtc2V0LG1heCxtaW4sbWlkLGZscixjZWlsLGNvcyxzaW4sYXRhbjIscmFuZCxzcmFuZCxiYW5kLGJvcixieG9yLGJub3Qsc2hsLHNocixsc2hyLHJvdGwscm90cjsgADsKADEwMzg4ACBuZD0wIAAlcyAlcygpACVzICVzKCIlcyIpAHNwbG9yZSgpAAogX2VuZF9vZl9wcm9ncmFtID0gMSAKAAoJICAgIF9lbmRfb2ZfcHJvZ3JhbSA9IDEgCgkgICAgaWYgKF9pbml0IH49IG5pbCkgdGhlbiBfaW5pdCgpIGVuZAogICAgICAgICAgICBfc2V0X21haW5sb29wX2V4aXN0cygwKQoJICAgIGlmIChfbWFpbmxvb3Agfj0gbmlsKSB0aGVuIF9zZXRfbWFpbmxvb3BfZXhpc3RzKDEpIGVuZAoJICAgIGlmIChfdXBkYXRlNjAgfj0gbmlsKSB0aGVuIF9zZXRfZnBzKDYwKSBfdXBkYXRlPW5pbCBlbHNlIF9zZXRfZnBzKDMwKSBlbmQKCSAgICBpZiAoX21haW5sb29wID09IG5pbCBhbmQgKF9kcmF3IH49IG5pbCBvciBfdXBkYXRlIH49IG5pbCBvciBfdXBkYXRlNjAgfj0gbmlsKSkgdGhlbgoJICAgIAlfc2V0X21haW5sb29wX2V4aXN0cygyKQoJCSAgICBfbWFpbmxvb3AgPSBmdW5jdGlvbigpIAoJICAgICAgICAJd2hpbGUgKHRydWUpIGRvCgkJCQkJX3VwZGF0ZV9idXR0b25zKF91cGRhdGU2MCBhbmQgMSBvciAyKQoJCQkJICAgIF9zdGFydGZyYW1lKCkgCgkJCQkgICAgaWYgKHN0YXQoNykgPT0gNjApIHRoZW4KCQkJCSAgICAJX21hcmtfY3B1KDApIF91cGRhdGU2MCgpIAoJCQkJICAgIGVsc2VpZiAoc3RhdCg3KSA9PSAzMCBhbmQgX3VwZGF0ZTYwKSB0aGVuCgkJCQkgICAgCV91cGRhdGU2MCgpIF91cGRhdGVfYnV0dG9ucygxKSBfbWFya19jcHUoMCkgX3VwZGF0ZTYwKCkKCQkJCSAgICBlbHNlaWYgKHN0YXQoNykgPT0gMzAgYW5kIF91cGRhdGUpIHRoZW4KCQkJCSAgICAJX21hcmtfY3B1KDApIF91cGRhdGUoKSAKCQkJCSAgICBlbHNlaWYgKHN0YXQoNykgPT0gMTUgYW5kIF91cGRhdGUpIHRoZW4KCQkJCSAgICAJX3VwZGF0ZSgpICBfdXBkYXRlX2J1dHRvbnMoMikgX21hcmtfY3B1KDApIF91cGRhdGUoKQoJCQkJICAgIGVuZAoJCQkJICAgIF9tYXJrX2NwdSgxKQoJCQkJICAgIGlmIChfZHJhdyB+PSBuaWwpIHRoZW4KCQkJCQkJbG9jYWwgZGkscmVzPTAsdHJ1ZSAKCQkJCQkJd2hpbGUgKGRpIDwgc3RhdCgxMSkgYW5kIHJlcykgZG8gcmVzID0gX21hcF9kaXNwbGF5KGRpKSBpZiAocmVzKSB0aGVuIHJlcz1fZHJhdygpIGVuZCBkaT1kaSsxIGVuZCAKCQkJCQkJX21hcF9kaXNwbGF5KDApIAoJCQkJCWVuZAoJCQkJICAgIF9tYXJrX2NwdSgyKQoJCQkJCV91cGRhdGVfZnJhbWVyYXRlKCkKCQkJCSAgICBmbGlwKCkKCQkJICAgIGVuZAoJCSAgICBlbmQKCSAgICBlbmQKCQlpZiAoX21haW5sb29wIH49IG5pbCkgdGhlbiBfbWFpbmxvb3AoKSBlbmQKICAgICAgICAKAHN5bnRheCBlcnJvcgBzeW50YXggZXJyb3IgbGluZSAlZCAodGFiICVkKQB1bmV4cGVjdGVkIHN5bWJvbCBuZWFyICdlbmQnAHVuZXhwZWN0ZWQgZW5kIG9mIGxpbmUAJXMgbGluZSAlZAoACi0tPjgKAC5wOC5wbmcAYmJzLwBydW5fY2FydCBjdXJyZW50X2ZpbGVuYW1lOiAlcyBydW5uaW5nX2ZpbGVuYW1lOiAlcyBydW5uaW5nX2NhcnRfbGlkOiAlcwoAc3RhY2sgdHJhY2ViYWNrACdfbWFpbmxvb3AAaW4gZnVuY3Rpb24gJwBpbiAlcyBsaW5lICVkICh0YWIgJWQpAGluIG1haW4gY2h1bmsAYXQgbGluZSAlZCAodGFiICVkKQBnYyBub3QgcnVubmluZzsgY291bGQgbm90IHBlcmZvcm0gZW1lcmdlbmN5IGNvbGxlY3Rpb24KAGdjIGhhcmQgY29sbGVjdDogJWQgLT4gJWQgKG92ZXJoZWFkOiVkKQoAb3V0IG9mIG1lbW9yeQBydW50aW1lIGVycm9yIGxpbmUgJWQgdGFiICVkAHJ1bnRpbWUgZXJyb3IAa2V5d29yZCBoYXNoIGNvbGxpc2lvbjogJXMgJXMKAGdvdG8AYnJlYWsAaXBhaXJzACVzXyUlZC5naWYAJXMuZ2lmACoqIEVHaWZPcGVuRmlsZU5hbWUgZXJyb3IgJWQ6ICVzCgBzYXZpbmcgZ2lmIHRvOiAlcwoATkVUU0NBUEUyLjAAZ2lmACoqIEVHaWZTcGV3KCkgR0lGX0VSUk9SCgBbY2FydF0AWy9jYXJ0XQBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvAEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Xy0ALnA4bAAudHh0AC5vYmoALm10bAAuc3ZnAC5wb3YALnNmZAAuY3N2AC5wcG0AWyVzXQBfX3JlZnVuZF9jcHVfXwBfX3BhaXJzX18AX19pcGFpcnNfXwBfX3N0b3AAX19wcmludABfX3ByaW50aABfX3Rvc3RyAF9fbG9hZABfX2V4dGNtZABfX3Rvc3RyaW5nX18AdG9zdHJpbmcAX190eXBlAF9fc2VsZWN0AF9fY29yZXN1bWUAX195aWVsZGVkX3RvX2VzY2FwZV9zbGljZQBjZABta2RpcgBleGl0AGZpbGU6ICVzJXMAdG9rZW5zOiAgICAgJTVkIC8gICVkAGNoYXJzOiAgICAgICU1ZCAvICVkAGNvbXByZXNzZWQ6ICU1ZCAvICVkAHVuc2F2ZWQgY2hhbmdlcwBleHRlcm5hbCBjaGFuZ2VzAGNvbnRpbnVlIHdpdGggc2h1dGRvd24/IFt5L25dAEBAIHBpY28tOCBzaHV0dGluZyBkb3duAGNvbnRpbnVlIHdpdGggcmVib290PyBbeS9uXQB0cnk6IGhlbHAgPHRvcGljPiBpbnN0ZWFkLiBlLmcuAGNvbW1hbmRzAGxvYWQgPGZpbGVuYW1lPiAgc2F2ZSA8ZmlsZW5hbWU+AHJ1biAob3IgY3RybC1yKSAgcmVzdW1lAHNodXRkb3duICAgICAgICAgcmVib290AGluc3RhbGxfZGVtb3MgICAgbHMAY2QgPGRpcm5hbWU+ICAgICBta2RpciA8ZGlybmFtZT4AY2QgLi4gICAgICB0byBnbyB1cCBhIGRpcmVjdG9yeQBrZXljb25maWcgIHRvIGNob29zZSBidXR0b25zAHNwbG9yZSAgICAgdG8gZXhwbG9yZSBjYXJ0cmlkZ2VzAGhlbHAgPHRvcGljPgBwcmVzcyBlc2MgdG8gdG9nZ2xlIGVkaXRvciB2aWV3AGFsdCtlbnRlciB0byB0b2dnbGUgZnVsbHNjcmVlbgBhbHQrZjQgb3IgY3RybC1xIHRvIGZhc3RxdWl0AGN0cmwtbS8tLysgdG8gYWRqdXN0IHZvbHVtZSAAY2FuIG5vdCBzYXZlIHdoaWxlIHJ1bm5pbmcAZmlsZW5hbWUgdG9vIGxvbmcAQHVybABAY2xpcABAY2xpcC5wOABAY2xpcC5wbmcAQGNsaXAucDgucG5nAHdhcm5pbmc6IGxhYmVsIGlzIGJsYW5rAHJ1biBjYXJ0IGFuZCBjdHJsLTcgdG8gY2FwdHVyZQBfY2xpcC5wOC5wbmcAX2NsaXAucDgucG5nLmhleABjb3BpZWQgdG8gdGV4dGZpZWxkIC0tIHByZXNzAGN0cmwtYyB0byBjb3B5IHRvIGNsaXBib2FyZCEAZmFpbGVkIHRvIHNhdmUgdG8gY2xpcGJvYXJkACogc2F2ZSBmYWlsZWQgKgBpbGxlZ2FsIGZpbGVuYW1lOgBmaWxlIGFscmVhZHkgZXhpc3RzAG92ZXJ3cml0ZT8gW3kvbl0Ac2F2ZWQgJXMlcwBjb3VsZCBub3Qgc2F2ZQBsb2dpbiB1bmF2YWlsYWJsZQBta2RpciBbbmFtZV0AbWtkaXIgZmFpbGVkOiBpbGxlZ2FsIHBhdGggbmFtZQBkaXJlY3Rvcnk6IC8lcwAlcyVzLwAlcyVzJXMvAGNkOiBmYWlsZWQAZGlyZWN0b3J5IG5vdCBmb3VuZAAvJXMAbGFiZWwAc2F2ZWQgbGFiZWwAc2NyZWVuACoqIGNvdWxkIG5vdCBzYXZlIHNjcmVlbnNob3QAc2F2ZWQgaW1hZ2UAZ2VuZXJhdGVkIHNjcmVlbnNob3QAcmVjAHJlY19mcmFtZXMAdmlkZW8AQEAgc2F2ZSBnaWYgcmVzdWx0OiAlZCB2aWRlb19jbGlwX2luZGV4OiAlZAoAbm8gdmlkZW8gcmVjb3JkZWQgKDAgZnJhbWVzKQAqKiBjb3VsZCBub3Qgc2F2ZSBnaWYAc2F2ZWQgJWQgc2Vjb25kIGdpZgBnZW5lcmF0ZWQgJWQgc2Vjb25kIGdpZgBhdWRpb19yZWMAYXVkaW9fZW5kAHBhdXNlAGNvbnRyb2xzAGJyZWFkY3J1bWIAZ29fYmFjawBzZXRfdGl0bGUAc2V0X2ZpbGVuYW1lAHVua25vd24gZXh0Y21kOiVzAGRvd25sb2FkaW5nLi4gAGJhZCBjYXJ0cmlkZ2UgaWQAL2Jicy9jcG9zdF9saXN0ZXIzLnBocD9uZm89MSZ2ZXJzaW9uPSVzJWMmbGlkPSVzAEBkcm9wcGVkAGRyb3BwZWQucDgAbG9hZGVkIGNhcnRyaWRnZSAoJWQgY2hhcnMpAHNvcnJ5LCBAY2xpcCBpcyBub3QgYXZhaWxhYmxlAGxvYWRlZCAlcyVzICglZCBjaGFycykAY291bGQgbm90IGxvYWQ6IGZ1dHVyZSB2ZXJzaW9uAGNvdWxkIG5vdCBsb2FkOiBjb2RlIHNpemUgPiA2NGsAY291bGQgbm90IGxvYWQAMHglMDh4ADB4JTA0eC4lMDR4AHByZXNzIGN0cmwtYyB0byBjb21wbGV0ZSBjb3B5AHByaW50aDogYmFkIGxvZyBmaWxlIG5hbWUAcHJpbnRoOiB0b28gbXVjaCBsb2cgZGF0YSAoMTBtYiBtYXgpAHwlcwB0b28gbWFueSBwcmludGggZmlsZXMAYQAlcwoAcHJpbnRoOiBjb3VsZCBub3Qgd3JpdGUgZmlsZQBjb3VudABfX2ZsaXAAX19zdXBlcnlpZWxkAGJhY2t1cABpbnN0YWxsX2RlbW9zAGluc3RhbGxfZ2FtZXMAa2V5Y29uZmlnAG1hcGRyYXcAYmJzcmVxAHJhZGlvAHNldF9kcmF3X3NsaWNlAF9tZW51aXRlbQBuZXh0AGluZXh0AHNldG1ldGF0YWJsZQBnZXRtZXRhdGFibGUAcmF3ZXF1YWwAcmF3bGVuAHJhd2dldAByYXdzZXQAYXNzZXJ0AF9fdHJhY2UAdHJhY2UAaG9sZGZyYW1lAF9zdGFydGZyYW1lAF9nZXRfbWVudV9pdGVtX3NlbGVjdGVkAF91cGRhdGVfYnV0dG9ucwBfdXBkYXRlX2ZyYW1lcmF0ZQBfc2V0X21haW5sb29wX2V4aXN0cwBfc2V0X2ZwcwBfbWFya19jcHUAX21hcF9kaXNwbGF5AHRvbyBtYW55IG9yZCByZXN1bHRzAGRldmtpdCBrZXlib2FyZCBlbmFibGVkAGRldmtpdCBtb3VzZSBlbmFibGVkAHsgdmFyIHN0ciA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTsgcmV0dXJuIGFsbG9jYXRlKGludEFycmF5RnJvbVN0cmluZyhzdHIpLCAnaTgnLCBBTExPQ19OT1JNQUwpOyB9AGRzZXQgY2FsbGVkIGJlZm9yZSBjYXJ0ZGF0YSgpAGRnZXQgY2FsbGVkIGJlZm9yZSBjYXJ0ZGF0YSgpAGhpZ2ggc2NvcmVzIG5vdCBpbXBsZW1lbnRlZCB5ZXQhAGNhbiBub3QgY29ubmVjdCB0byBiYnNyZXEgaG9zdAB0b28gbWFueSBwZWVrIHJlc3VsdHMAY3N0b3JlLwBzYW5kYm94ZWRfY3N0b3JlIGZpbGUgbm90IGZvdW5kOiAlcwoAICAtLT4gdXNpbmcgaW50ZXJuYWwgZmlsZTogJXMKAHNwbG9yZSBpcyBub3QgYXZhaWxhYmxlAGluIHRoaXMgdmVyc2lvbi4AaW5zdGFsbGluZyBnYW1lcyB0byAvZ2FtZXMvAGJhY2tlZCB1cCAlcyVzAGJhY2t1cHMAY29uZmlnAHVzZWFnZTogZm9sZGVyIFtsb2NhdGlvbl0AbG9jYXRpb25zOgBiYWNrdXBzIGNvbmZpZyBiYnMgZGVza3RvcABob3N0IGFsbG9jYXRpb24gZXJyb3IAJWRtYiArICVkawoAbm8gaGVscCB0b3BpYyB1bmRlciBjdXJzb3IAdHlwZSB0aGUgdG9waWMgd2l0aG91dCA8Pi4gZS5nLjoAaGVscCBnZngAYWJvdXQAcGljby04AIAgcGljby04IDAuMi41ZwBtYWRlIGJ5IHplcCBhdCBwaWNvIHBpY28gY2FmZSwAdG9reW8uIHRoaXMgcHJvZ3JhbSBpcyBkZWRpY2F0ZWQAdG8gdG9tLCBsb3VpcyBhbmQgbmFjY2kuAHBpY28tOCB3YXMgbWFkZSB3aXRoIHNkbDIsIGx1YSwAZ2lmbGliLCB3aXJpbmdwaSwgbGliYjY0LCBtaW5peiwAbGliY3VybCwgYW5kIGdudSB0b29scy4AYXVkaW8A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b3JkOiBkbwBkZW5vdGUgdGhlIHN0YXJ0IG9mIGEgYmxvY2sAb2YgY29kZS4gdXNlZCBieSB3aGlsZSBhbmQAZm9yIGxvb3BzLgCAIGtleXdvcmQ6IGVuZABkZW5vdGUgdGhlIGVuZCBvZiBhIGJsb2NrIG9mAGNvZGUuIHVzZWQgYnkgd2hpbGUsIGlmLCBmb3IAbG9vcHMsIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucy4AcmVwZWF0AHVudGlsAIAga2V5d29yZHM6IHJlcGVhdCwgdW50aWwAcmVwZWF0IGEgYmxvY2sgb2YgY29kZSB1bnRpbABzb21lIGNvbmRpdGlvbiBpcyB0cnVlIGF0IHRoZQBlbmQgb2YgdGhlIGJsb2NrLgB0aGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGlzAGFsd2F5cyBleGVjdXRlZCBhdCBsZWFzdCBvbmNlLAB1bmxpa2Ugd2hpbGUgLi4gZG8gLi4gZW5kLgB1bnRpbCBpID49IDUAaWYAdGhlbgBlbHNlaWYAZWxzZQCAIGlmLCB0aGVuLCBlbHNlaWYsIGVsc2UAZG8gc29tZXRoaW5nIHdoZW4gc29tZXRoaW5nIGlzAHRydWUuIGVsc2UgYW5kIGVsc2VpZiBibG9ja3MgYXJlAG9wdGlvbmFsOgBpZiB4ID4geSB0aGVuACAgcHJpbnQoeC4uIiBpcyBtb3JlIHRoYW4gIi4ueSkAaWYgeCA8IDQgdGhlbgAgIHByaW50KCJ4IGlzIGxlc3MgdGhhdCA0IikAZWxzZWlmIHggPCA2IHRoZW4AICBwcmludCgieCBpcyA0IG9yIDUiKQAgIHByaW50KCJ4IGlzIDYgb3IgbW9yZSIpAGlmICh4PDQpID8ieDw0IiAtLSBzaG9ydGhhbmQAZm9yAGluAIAgZm9yIGxvb3BzAHJlcGVhdCBhIGJsb2NrIG9mIGNvZGUgbiB0aW1lcy4AZm9yIGk9MSw1IGRvAC0tIHJlc3VsdDogMSAyIDMgNCA1AGEgc3RlcCBzaXplIGNhbiBiZSBhZGRlZDoAZm9yIGk9MSw4LDIgZG8gcHJpbnQoaSkgZW5kAC0tIHJlc3VsdDogMSAzIDUgNwBmb3IgbG9vcHMgY2FuIGFsc28gYmUgdXNlZCB0bwBpdGVyYXRlIG92ZXIgdGFibGVzLgBzZWUgYWxzbzogcGFpcnMgYWxsAHRydWUAZmFsc2UAbmlsAGJvb2xlYW4AgCB0cnVlIGZhbHNlIG5pbABib29sZWFuIHZhcmlhYmxlcyBjYW4gaGF2ZSB0aGUAdmFsdWUgdHJ1ZSBvciBmYWxzZS4gbmlsIGlzIGEAc3BlY2lhbCB2YWx1ZSB0aGF0IG1lYW5zIGZhbHNlAGluIGJvb2xlYW4gZXhwcmVzc2lvbnMsIGFuZABvdGhlcndpc2UgbWVhbnMgJ3VuZGVmaW5lZCcuAD4gP3p4YyAgLS0gbm90IGRlZmluZWQsIHNvIG5pbAA+ID96eGMgYW5kIHRydWUAbmlsLCB1bnJlZmVyZW5jZWQgdmFyaWFibGVzIGFyZQBhdXRvbWF0aWNhbGx5IGdhcmJhZ2UgY29sbGVjdGVkLgA+IGE9bmlsIC0tIHdpbGwgYmUgY29sbGVjdGVkLgB0eXBlcwCAIHR5cGUodikAcmV0dXJuIHRoZSB0eXBlIG9mIHZhcmlhYmxlIHYAYXMgYSBzdHJpbmc6ACBuaWwAIGJvb2xlYW4AIG51bWJlcgAgc3RyaW5nACBmdW5jdGlvbgAgdGFibGUAgCBzZWUgYWxzbzoAbnVtYmVycyBzdHJpbmdzIHRhYmxlcwBsb2NhbACAIGtleXdvcmQ6IGxvY2FsAGRlY2xhcmUgYSB2YXJpYWJsZSBhcyBsb2NhbC4AdGhpcyBiaW5kcyB0aGUgc2NvcGUgb2YgdGhlAHZhcmlhYmxlIHRvIHRoZSBzYW1lIGJsb2NrAG9mIGNvZGUgaXQgd2FzIGRlZmluZWQgaW4uAGZ1bmN0aW9uIGZvbyh6KQAgIGxvY2FsIHkgPSB6IC0tIGxvY2FsIHRvIGZvbwAgIHkgPSB5ICsgMQAgIHJldHVybiB5AD9mb28oMTApIC0tIDExAD95IC0tIG5pbCEgdGhlcmUgaXMgbm8gZ2xvYmFsIHkuADwAPgA8PQA+PQA9PQB+PQAhPQBhbmQAb3IAbm90AGxvZ2ljAIAgbG9naWNhbCBleHByZXNzaW9ucyBpbiBsdWEAdGhlIGxvZ2ljYWwgb3BlcmF0b3JzIGFyZToAYW5kLCBvciwgYW5kIG5vdAA/NSA+IDMgYW5kIDUgPiA0IC0tIHRydWUAPzEgPiA1IGFuZCA1ID4gNCAtLSBmYWxzZQA/MSA+IDUgb3IgIDUgPiA0IC0tIHRydWUAP25vdCAoMSA+IDUpICAgICAtLSB0cnVlAG5pbCBpcyBjb25zaWRlcmVkIGZhbHNlLgByZWxhdGlvbmFsIG9wZXJhdG9yczoAPCA+IDw9ID49ID09IH49IChvciAhPSkAgCBhc3NpZ25tZW50OiA9AGdpdmUgdGhlIHZhcmlhYmxlIG9uIGxocwB0aGUgdmFsdWUgb2YgdGhlIHJocy4APiB4ID0gMys1AD4gP3gAZGF0YQBtZW0AgCBtZW1vcnkgJiBkYXRhIGFwaSBmdW5jdGlvbnMAcGVlayBwb2tlIG1lbXNldCBtZW1jcHkAcmVsb2FkIGNzdG9yZSBzY29yZXN1YgBjYXJ0ZGF0YSBkZ2V0IGRzZXQAgCBzZngobixbY2hhbl0sW29mZnNldF0sW2xlbl0pAHBsYXkgc2Z4IG4gKDAuLjYzKQBvZmZzZXQgYW5kIGxlbiBzcGVjaWZ5IHRoZSBzdGFydABwb3NpdGlvbiBhbmQgZHVyYXRpb24sIGFuZCBhcmUAZ2l2ZW4gaW4gbnVtYmVyIG9mIG5vdGVzLgBjaGFuICAgOiB0aGUgY2hhbm5lbCB0byBwbGF5IG9uAGNoYW4gLTE6IHVzZSBhbiB1bnVzZWQgY2hhbm5lbABjaGFuIC0yOiBzdG9wIHNmeCBuIG9uIGFsbCBjaGFucwCAIG11c2ljKHAsW2ZhZGVfbGVuXSxbbWFza10AcGxheSBtdXNpYyBzdGFydGluZyBmcm9tIHBhdHRlcm4AcC4gdXNlIHAgLTEgdG8gc3RvcCBhbnkgbXVzaWMuAGZhZGVfbGVuIGlzIGdpdmVuIGluIG1zICgxMDAwIGlzAG9uZSBzZWNvbmQpLiBtYXNrIGlzIGEgYml0ZmllbGQAdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGNoYW5uZWxzAHRvIHJlc2VydmUgZm9yIG11c2ljLgBidG4AgCBidG4oW2JdLCBbcGxdKQBnZXQgYnV0dG9uIGIgc3RhdGUgZm9yIHBsYXllciBwbABvciBwbGF5ZXIgMCB3aGVuIHBsIGlzIG5vdCBnaXZlbgBiIGlzIGEgYnV0dG9uIGluZGV4OgAwOosgMTqRIDI6lCAzOoMgNDqOIDU6lyAAYnRuKCkgcmV0dXJucyBhIGJpdGZpZWxkIGZvcgBwbGF5ZXIgMCBhbmQgMQBnbHlwaHMAgCBnbHlwaCB2YWx1ZXMAZ2x5cGhzICgngC4umScpIGNhbiBiZSB1c2VkAGFzIHBhcnQgb2YgcmVndWxhciB2YXJpYWJsZQBuYW1lcywgYnV0IHNpbmdsZSBjaGFyYWN0ZXIAZ2x5cGhzIGFyZSBhbHNvIGFzc2lnbmVkIHNwZWNpYWwAdmFsdWVzIG9uIGJvb3Q6AIAgYnV0dG9ucwCLOjAgkToxIJQ6MiCDOjMgjjo0IJc6NQCAIGZpbGwgcGF0dGVybnMgLy8gZmlsbHAolSkAgIGChIWGh4iJioyNkJKTlQBzZWUgYWxzbzogYnRuIGJ0bnAgZmlsbHAAYnRucACAIGJ0bnAoW2JdLCBbcGxdKQByZXR1cm5zIHRydWUgd2hlbiBidXR0b24gYiB3YXMAcHJlc3NlZCBieSBwbGF5ZXIgcGwgKDAuLjcpLgBwbCBkZWZhdWx0cyB0byAwIHdoZW4gbm90IGdpdmVuLgBidG5wIHJlcGVhdHMgZXZlcnkgbiBmcmFtZXM6ADB4NWY1YyBpbml0aWFsIGRlbGF5IChkZWY6IDE1KQAweDVmNWYgcmVwZWF0IGRlbGF5ICAoZGVmOiAgNCkAYnRucCBvbmx5IHdvcmtzIHdoZW4gdXNlZCBmcm9tAGluc2lkZSBfdXBkYXRlKigpLCBfZHJhdygpLCBvcgBiZXR3ZWVuIGNhbGxzIHRvIGZsaXAoKS4AaGVscABtYW4AdG9waWMAdG9waWNzAIAgaGVscCBjb21tYW5kAHR5cGUgaGVscCBbdG9waWNdIGZvciBoZWxwAHRvcGljcyBhcmUgc2hvd24gaW4gYmx1ZS4AcHJlc3MgY3RybC11IGluIHRoZSBjb2RlIGVkaXRvcgBmb3IgaGVscCBvbiB3aGF0ZXZlciBpcyB1bmRlcgB0aGUgY3Vyc29yLgCAIG1haW4gdG9waWNzAGdmeCBkYXRhIGF1ZGlvIHN5c3RlbSBtYXRoIGx1YQBtYXRoAG1hdGhzAIAgbWF0aCBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycwBjb3Mgc2luIGF0YW4yIHNxcnQgc3JhbmQgcm5kAG1heCBtaW4gbWlkIGZsciBjZWlsIHNnbiBhYnMA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eCA8PCBuAHNoaWZ0IGxlZnQuIG1vdmUgYWxsIG9mIHRoZQBiaXRzIGluIHggbGVmdCBuIHBsYWNlcy4APiA/dG9zdHIoMHhmZi4wYyA8PCA4LCAxKQAweGZmMGMuMDAwMABzaHIAPj4APj49AIAgc2hyKHgsIG4pACAgIHggPj4gbgBhcml0aG1ldGljIHNoaWZ0IHJpZ2h0LiBtb3ZlIGFsbABiaXRzIGluIHggcmlnaHQgbiBwbGFjZXMuIHRoZQBsZWZ0LW1vc3QgYml0IGlzICdzdGlja3knLCBzbwB0aGF0IG5lZ2F0aXZlIHZhbHVlcyByZW1haW4AbmVnYXRpdmUuAD4gP3Rvc3RyKDB4ODBjYS5mZSA+PiA4LCAxKQAweGZmODAuY2FmZQBsc2hyAD4+PgA+Pj49ACAgIHggPj4+IG4AbG9naWNhbCBzaGlmdCByaWdodC4gbW92ZSBhbGwAYml0cyBpbiB4IHJpZ2h0IG4gcGxhY2VzLiB6ZXJvcwBjb21lIGluIGZyb20gdGhlIGxlZnQuAD4gP3Rvc3RyKDB4ODBjYS5mZSA+Pj4gOCwgMSkAMHgwMDgwLmNhZmUAcm90bAA8PD4APDw+PQCAIHJvdGwoeCwgbikAICAgeCA8PD4gbgByb3RhdGUgYml0cyBsZWZ0IG4gcGxhY2VzLgA+ID90b3N0cigweGNhZmUuZjAwZCA8PD4gNCwgMSkAMHhhZmVmLjAwZGMAcm90cgA+PjwAPj48PQCAIHJvdHIoeCwgbikAICAgeCA+PjwgbgByb3RhdGUgYml0cyByaWdodCBuIHBsYWNlcy4APiA/dG9zdHIoMHhjYWZlLmYwMGQgPj48IDQsIDEpADB4ZGNhZi5lZjAwAG51bWJlcnMAgCBudW1iZXJzAG51bWJlcnMgaW4gcGljby04IGFyZSAxNjoxNgBmaXhlZCBwb2ludC4gdGhpcyBtZWFucyB0aGF0ADE2IGJpdHMgYXJlIHVzZWQgZm9yIHRoZQBpbnRlZ2VyIHBhcnQsIGFuZCAxNiBmb3IgdGhlAGZyYWN0aW9uYWwgcGFydC4gdGhlIHJhbmdlIG9mAHBvc3NpYmxlIHZhbHVlcyBpczoALTMyNzY4LjAgdG8gMzI3NjcuOTk5OTkAbnVtYmVycyB3cml0dGVuIGluIGRlY2ltYWwgYXJlAHJvdW5kZWQgdG8gdGhlIGNsb3Nlc3QgZml4ZWQAcG9pbnQgdmFsdWUuIHRvIHNlZSB0aGUgcmF3IDMyLQBiaXQgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb246AD4gP3Rvc3RyKDEvNiwgMSkAMHgwMDAwLjJhYWEAaGV4AGhleGFkZWNpbWFsAIAgaGV4YWRlY2ltYWwAbnVtYmVycyBjYW4gYmUgd3JpdHRlbiBpbiBoZXgAYnkgcHJlZml4aW5nIHRoZW0gd2l0aCAiMHgiOgA+IHByaW50KDB4M2YpADYzAGhleGlkZWNpbWFsIG5vdGF0aW9uIGlzIGJhc2UtMTYAdXNpbmcgY2hhcmFjdGVyIGEuLmYgZm9yIHRoZQB2YWx1ZXMgMTAuLjE1LiBpbiB0aGUgZXhhbXBsZQBhYm92ZSwgMHgzMCBtZWFucyA0OCAoMyoxNikgYW5kAHRoZSBmIG1lYW5zIDE1LCBzbyB0aGUgcmVzdWx0IGluAGRlY2ltYWwgaXM6IDQ4ICsgMTUgLT4gNjMuAHRvIGNvbnZlcnQgZnJvbSBkZWNpbWFsIHRvIGhleDoAPiBwcmludCh0b3N0cig2MywgMSkpADB4MDAzZi4wMDAwIC0tIGFsbCAzMiBiaXRzIHNob3duAGJpbmFyeQCAIGJpbmFyeQBudW1iZXJzIGNhbiBiZSB3cml0dGVuIGluIGJpbmFyeQBmb3JtIGJ5IHByZWZpeGluZyB0aGVtIHdpdGggIjBiIgA+IHByaW50KDBiMTAwMS4wMSkAOS4yNQA4ICB8ICA0ICB8ICAyICB8ICAxICB8IDEvMiB8IDEvNAAtLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLQAxICB8ICAwICB8ICAwICB8ICAxICB8ICAwICB8ICAxIABpbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIGZpcnN0ADEgaXMgaW4gdGhlICI4cyIgY29sdW1uLCBzbyB0aGUAaW50ZWdlciBwYXJ0IGlzIDgrMSA9IDkuIGFmdGVyAHRoZSBkZWNpbWFsIHBvaW50LCBlYWNoIDEgbWVhbnMAMS8yLCAxLzQsIC4uLiAxLzY1NTM2LiBpbiB0aGlzAGNhc2UgdGhlIG9ubHkgMSBpcyBpbiB0aGUgMS80dGhzAGNvbHVtbiwgc28gdGhlIHJlc3VsdCBpcyA5LjI1AGJpdGZpZWxkAGJpdGZpZWxkcwCAIGJpdGZpZWxkcwBiaXRmaWVsZHMgYXJlIG51bWJlcnMgd2hlcmUgZWFjaABlYWNoIGJpdCBoYXMgYmVlbiBhc3NpZ25lZCBhAHBhcnRpY3VsYXIgbWVhbmluZy4gcGljby04IHVzZXMAYml0ZmllbGRzIGZvciB0aGUgc3ByaXRlIGZsYWdzLABhbmQgc29tZXRpbWVzIGFzIHBhcmFtZXRlcnMgYW5kAHJldHVybiB2YWx1ZXMgZm9yIGFwaSBmdW5jdGlvbnMuAHRvIGNvbnN0cnVjdCBhIGJpdGZpZWxkLCB5b3UgY2FuAGJvcigpIHRoZSBzZXBhcmF0ZSBiaXRzIHRvZ2V0aGVyAGFuZCB0aGVuIHRlc3QgaWYgZWFjaCBiaXQgKGZsYWcpAGlzIHNldCB1c2luZyBiYW5kKCk6AD4gZmxhZ3MgPSA4fDEgLS1zZXQgYml0cyAzIGFuZCAwAD4gPyhmbGFncyAmIDgpID4gMCAtLWNoZWNrIGJpdCAzAHNlZSBhbHNvOiBiaW5hcnkgYm9yIGJhbmQAKwArPQAtPQCAIG9wZXJhdG9yOiArIC0gKz0gLT0AYWRkLCBzdWJ0cmFjdC4APiA/Mys0AD4geD03AD4geC09MgB3aGVuIHRoZSByZXN1bHQgaXMgZ3JlYXRlciB0aGFuADB4N2ZmZi5mZmZmLCB0aGUgcmVzdWx0IGxvb3BzOgA+ID8weDdmZmYgKyAxAC0zMjc2OAAqPQAvPQCAIG9wZXJhdG9yczogKiAvICo9IC89AG11bHRpcGx5IHR3byBudW1iZXJzLCBvciBkaXZpZGUAb25lIGJ5IHRoZSBvdGhlci4APiA/Myo0ADEyAD4geD04AD4geC89NAB0aGUgcmVzdWx0cyBvZiBtdWx0aXBseSBvdmVyZmxvdwBidXQgdGhlIHJlc3VsdHMgb2YgZGl2aWRlIGFyZQBjbGFtcGVkIHRvIC0zMjc2OC4uMHg3ZmZmLmZmZmY6AD4gP3Rvc3RyKDUwMCAvIDAsIDEpADB4N2ZmZi5mZmZmAFwAXD0AgCBpbnRlZ2VyIGRpdmlkZSBvcGVyYXRvcjogXABnaXZlcyB0aGUgc2FtZSByZXN1bHQgYXMgYQByZWd1bGFyIGRpdmlkZSByb3VuZGVkIGRvd24uAD4gPzlcMiAtLSBzYW1lIGFzIGZscig5LzIpAD4geCA9IDE2AD4geCBcPSAzACUAJT0AgCBtb2R1bG8gb3BlcmF0b3I6ICUgJT0AeCAlIHkgbWVhbnM6IGtlZXAgYWRkaW5nIHkAb3Igc3VidHJhY3RpbmcgeSBmcm9tIHggdW50aWwAMCA8PSB4IDwgeS4APiA/IDE1ICUgNABmb3IgcG9zaXRpdmUgbnVtYmVycywgdGhpcyBpcwB0aGUgc2FtZSBhcyBkaXZpbmcgeCBieSB5IGFuZAB5IGFuZCByZXR1cm5pbmcgdGhlIHJlbWFpbmRlci4AbW9kdWxvIGlzIHVzZWZ1bCB3aGVuZXZlciB5b3UAeW91IG5lZWQgdG8gd3JhcCBhIG51bWJlciB0bwBhIHBhcnRpY3VsYXIgcmFuZ2UuIGZvciBleGFtcGxlOgBmbHIodCgpJTMpIC0tIDAgMSAyIDAgMSAyIC4uAHNlZSBhbHNvOiBwZWVrMiAoZS5nLiAlbWVtX2FkZHIpAF4AXj0AgCBleHBvbmVudCBvcGVyYXRvcjogXiBePQB4IF4geSBnaXZlcyB4IHRvIHRoZSBwb3dlciBvZiB5LgB5IGNhbiBiZSBmcmFjdGlvbmFsLgA+ID81IF4gMyAgLS0gIHNhbWUgYXMgNSo1KjUAMTI1AD4gPzE2IF4gMC41AG5vdGU6IHheeSBtZWFucyBiaXR3aXNlIHhvciBpbgBvdGhlciBsYW5ndWFnZXMhIGluIHBpY28tOCBsdWEsAHhvciBpcyB4fnkgKG9yIGxlZ2FjeTogeF5eeSkALi49AIAgc3RyaW5nIGpvaW4gb3BlcmF0b3I6IC4uIC4uPQBvcGVyYW5kcyBjYW4gYWxzbyBiZSBub24tc3RyaW5nAHZhcmlhYmxlcywgYW5kIGFyZSBhdXRvbWF0aWNhbGx5AGNvbnZlcnRlZCB0byBjb21wbGV0ZSB0aGUgam9pbi4APiA/ImhlbGxvICIuLiJ3b3JsZCIAaGVsbG8gd29ybGQAPiB4ID0gNQA+ID8ieCBpczogIi4ueAB4IGlzIDUALi4uAIAgYXJndW1lbnRzOiAuLi4ALi4uIG1lYW5zICdyZW1haW5pbmcgYXJndW1lbnRzJwBmdW5jdGlvbiBwcmludF9hbGwoLi4uKQAgYT17Li4ufQAgZm9yZWFjaChhLCBwcmludCkAcHJpbnRfYWxsKDEsMiwzKQBzZWUgYWxzbzogc2VsZWN0IHBhY2sgdW5wYWNrAHNlbGVjdAB1bnBhY2sAcGFjawCAIHNlbGVjdCguLi4sIG4pACAgIHBhY2soLi4uKQAgICB1bnBhY2sodGJsKQBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBhAHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMuAHNlbGVjdCByZXR1cm5zIGEgZ2l2ZW4gYXJndW1lbnQuAHBhY2sgY29udmVydHMgYW55IG51bWJlciBvZgBhcmd1bWVudHMgaW50byBhIHRhYmxlLCBhbmQAdW5wYWNrIGJhY2sgaW50byByZXR1cm4gdmFsdWVzLgBmdW5jdGlvbiBmb28oYSwgLi4uKQAgID8iYXJnMjoiLi5zZWxlY3QoMSwuLi4pACAgLS0gcmV0dXJuIGFsbCBidXQgZmlyc3QgYXJnACAgcmV0dXJuIHBhY2soLi4uKQBiID0gZm9vKHVucGFja3sxLDIsM30pIC0tIHsyLDN9AHN5c3RlbQCAIHN5c3RlbSBhcGkgZnVuY3Rpb25zAHJ1biBzdG9wIHJlc2V0IHlpZWxkIHRpbWUAbWVudWl0ZW0gc3RhdCBzZXJpYWwgZXh0Y21kAGNvY3JlYXRlIGNvcmVzdW1lIGNvc3RhdHVzAIAgc3lzdGVtIGNvbW1hbmRzAGxvYWQgc2F2ZSBpbXBvcnQgZXhwb3J0IGluZm8AcmVzdW1lIGZvbGRlciBzaHV0ZG93biByZWJvb3QAc3Bsb3JlIGJhY2t1cCBsb2dpbiBsb2dvdXQAgCBjYWxsYmFja3MAX2luaXQgX2RyYXcgX3VwZGF0ZSBfdXBkYXRlNjAAgCBpbnB1dABfaW5pdAAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tAIAgX2luaXQoKQB3aGVuIF9pbml0IGlzIGRlZmluZWQsIGl0IGlzAGNhbGxlZCBvbmNlIGJlZm9yZSBlbnRlcmluZyB0aGUAbWFpbiBfdXBkYXRlIC8gX2RyYXcgbG9vcC4AX2RyYXcAgCBfZHJhdygpAHdoZW4gX2RyYXcgaXMgZGVmaW5lZCBpbiBhAHByb2dyYW0sIGl0IGlzIGNhbGxlZCBvbmNlAHBlciBmcmFtZS4gdGhpcyBjb3VsZCBiZSAxNSwAMzAgb3IgNjAgdGltZXMgcGVyIHNlY29uZC4AdGhlIGNvbnRlbnRzIG9mIHRoZSB2aWRlbwBtZW1vcnkgaXMgZGlzcGxheWVkIG9uY2UgX2RyYXcAcmV0dXJucyAtLSB0aGVyZSBpcyBubyBuZWVkIHRvAGV4cGxpY2l0bHkgY2FsbCBmbGlwKCkuAF91cGRhdGUAX3VwZGF0ZTYwAIAgX3VwZGF0ZSgpIF91cGRhdGU2MCgpAHdoZW4gX3VwZGF0ZSBvciB1cGRhdGU2MCBpcwBkZWZpbmVkLCBpdCBpcyBjYWxsZWQgYXQgMzAgb3IANjAgdGltZXMgcGVyIHNlY29uZCByZWdhcmRsZXNzAG9mIHRoZSBmcmFtZXJhdGUgKHByb3ZpZGVkAHRoZXJlIGlzIHN1ZmZpY2llbnQgY3B1IHRvAGRvIHNvKS4AZ2Z4AIAgZ2Z4IGFwaSBmdW5jdGlvbnMAY2FtZXJhIGNsaXAgY2xzIGNvbG9yIHBhbCBwYWx0AGZpbGxwIGZsaXAgbGluZSByZWN0IHJlY3RmaWxsAG92YWwgb3ZhbGZpbGwgY2lyYyBjaXJjZmlsbABwZ2V0IHBzZXQgcHJpbnQgcHJpbnRoIGN1cnNvcgBtYXAgbWdldCBtc2V0IGZnZXQgZnNldCB0bGluZQBzcHIgc3NwciBzZ2V0IHNzZXQAZmxpcACAIGZsaXAoKQBmbGlwIHRoZSBiYWNrIHBhZ2UgdG8gdGhlIHNjcmVlbgBhbmQgc3RhcnQgdGhlIG5leHQgZnJhbWUuAG5vdGUgdGhhdCBwcm9ncmFtcyB0aGF0IGhhdmUgYQBfZHJhdygpIGZ1bmN0aW9uIGRvIG5vdCBuZWVkIHRvAGNhbGwgZmxpcCgpLgAtLSBkcmF3IG9uZSBzdGFyIHBlciBmcmFtZQBmb3IgaT0xLDEwMCBkbwAgPyKSIixybmQoMTI4KSxybmQoMTI4KSxybmQoMTYpACBmbGlwKCkAY2FtZXJhAIAgY2FtZXJhKHgsIHkpAHNldCBhIHNjcmVlbiBvZmZzZXQgb2YgLXgsIC15AGZvciBhbGwgZHJhd2luZyBvcGVyYXRpb25zLgBjYW1lcmEoKSB0byByZXNldABjbGlwAIAgY2xpcCh4LCB5LCB3LCBoLCBbY2xpcF9vbGRdKQBzZXRzIHRoZSBjbGlwcGluZyByZWN0YW5nbGUgaW4AcGl4ZWxzLiB3aGVuIGNsaXBfb2xkIGlzIHRydWUsAGNsaXAgdGhlIG5ldyBjbGlwcGluZyByZWN0YW5nbGUAYnkgdGhlIGV4aXN0aW5nIG9uZS4AY2xzAIAgY2xzKFtjb2xdKQBjbGVhciB0aGUgc2NyZWVuIGFuZCByZXNldCB0aGUAY2xpcHBpbmcgcmVjdGFuZ2xlLiBjb2wgZGVmYXVsdHMAdG8gYmxhY2suAGNvbG9yAIAgY29sb3IoW2NvbF0pAHNldCB0aGUgY3VycmVudCBjb2xvdXIgdXNlZCBieQBkcmF3aW5nIGZ1bmN0aW9ucy4gaWYgY29sIGlzAG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIDYuAHdoZW4gYSBmaWxsIHBhdHRlcm4gaXMgZGVmaW5lZAB1c2luZyBmaWxscCgpLCBhIHNlY29uZCBjb2xvdXIAaXMgbmVlZGVkIGFuZCBjYW4gYmUgc3BlY2lmaWVkAGluIHRoZSBoaWdoIDQgYml0czoAY29sb3IoMHg4NykgLS0gcmVkIGFuZCB3aGl0ZQB0aGUgZmlsbCBwYXR0ZXJuIGl0c2VsZiBjYW4gYWxzbwBiZSBzcGVjaWZpZWQgaW4gY29sb3VyIGFyZ3VtZW50cwAoc2VlIHRoZSBtYW51YWwgZm9yIGRldGFpbHMpLgBwYWwAcGFsZXR0ZQCAIHBhbChjMCwgYzEsIFtwXSkAbWFwIGNvbG91ciBjMCB0byBjMSBmb3IgcGFsIHA6ADAgZHJhdyBwYWxldHRlIChkZWZhdWx0KQAxIGRpc3BsYXkgcGFsZXR0ZQAyIHNlY29uZGFyeSBwYWxldHRlAHVzZSBwYWwoKSB0byByZXNldC4AJTJkAHBhbHQAgCBwYWx0KGMsIHQpAHNldCB0aGUgdHJhbnNwYXJlbmN5IGZvciBjb2xvdXIAYyB0byB0IChib29sZWFuKS4gdHJhbnNwYXJlbmN5AGlzIG9ic2VydmVkIGJ5IHNwcigpLCBzc3ByKCksAG1hcCgpIGFuZCB0bGluZSgpLgBwYWx0KCkgdG8gcmVzZXQgdG8gZGVmYXVsdHMuAHdoZW4gYSBzaW5nbGUgbnVtYmVyIGFyZ3VtZW50AGlzIGdpdmVuLCBpdCBpcyB0YWtlbiB0byBiZSBhAGJpdGZpZWxkIG9mIGFsbCAxNiB0cmFuc3BhcmVuY3kAdmFsdWVzIHN0YXJ0aW5nIGZyb20gaGlnaCBiaXRzLgAtLSBtYWtlIGNvbHMgMC4uMyB0cmFuc3BhcmVudDoAcGFsdCgweGYwMDApAC0tIG1ha2UgY29sb3VyIDggdHJhbnNwYXJlbnQ6AHBhbHQoOCwgdHJ1ZSkAZmlsbHAAgCBmaWxscChwKQBwIGlzIGEgYml0ZmllbGQgdGhhdCBzcGVjaWZpZXMAYSA0WDQgZmlsbCBwYXR0ZXJuIG9ic2VydmVkIGJ5AGNpcmMqKCksIHJlY3QqKCksIG92YWwqKCksIHBzZXQAYW5kIGxpbmUoKS4gYml0IDB4Yi4xIGluZGljYXRlcwB0cmFuc3BhcmVuY3kuIHRoZSAxNiBiaXQgbGF5b3V0OgAgMHg4MDAwIDB4NDAwMCAweDIwMDAgMHgxMDAwACAgMHg4MDAgIDB4NDAwICAweDIwMCAgMHgxMDAAICAgMHg4MCAgIDB4NDAgICAweDIwICAgMHgxMAAgICAgMHg4ICAgIDB4NCAgICAweDIgICAgMHgxACBmaWxscCgweDg0MjEpICBmaWxscCgweDUwYzApACBmaWxscCiFKSBmaWxscCiHKSBmaWxscCiWKQBsaW5lAIAgbGluZSh4MCwgeTAsIFt4MSwgeTEsXSBbY29sXSkAZHJhdyBhIGxpbmUgZnJvbSAoeDAseTApIHRvACh4MSx5MSkuIHdoZW4geDEseTEgYXJlIG5vdCwAZ2l2ZW4sIHRoZSBlbmQgb2YgdGhlIGxhc3QgZHJhd24AbGluZSBpcyB1c2VkLgByZWN0AHJlY3RmaWxsAIAgcmVjdCAgICAoeDAseTAseDEseTEsW2NvbF0pACAgIHJlY3RmaWxsKHgwLHkwLHgxLHkxLFtjb2xdKQBkcmF3IGEgcmVjdGFuZ2xlIG9yIGZpbGxlZAByZWN0YW5nbGUgd2l0aCBwb2ludHMgYXQAb3Bwb3NpdGUgY29ybmVycyBnaXZlbiBieQAoeDAseTApLCAoeDEseTEpLgBvdmFsAG92YWxmaWxsAIAgb3ZhbCAgICAoeDAseTAseDEseTEsW2NvbF0pACAgIG92YWxmaWxsKHgwLHkwLHgxLHkxLFtjb2xdKQBkcmF3IGFuIGVsbGlwc29pZCBib3VuZGVkIGJ5AHRoZSBnaXZlbiByZWN0YW5nbGUuAGNpcmMAY2lyY2ZpbGwAgCBjaXJjICAgICh4LCB5LCByLCBbY29sXSkAICAgY2lyY2ZpbGwoeCwgeSwgciwgW2NvbF0pAGRyYXcgYSBjaXJjbGUgYXQgKHgseSkgd2l0aCBhAHJhZGl1cyBvZiByLiB3aGVuIGEgbmVnYXRpdmUAcmFkaXVzIGlzIGdpdmVuLCBub3RoaW5nIGlzAGRyYXduLgBtYXAAgCBtYXAoW3R4LCB0eV0sIFtzeCwgc3ldLAAgICBbdHcsIHRoXSwgW2xheWVyc10AZHJhdyB0aGUgbWFwIGZyb20gdGlsZSB0eCwgdHkAYXQgc2NyZWVuIHBvc2l0aW9uIHN4LCBzeS4AdHcsdGggZ2l2ZXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQAdG8gZHJhdyBpbiB0aWxlcy4AbGF5ZXJzIGlzIGEgYml0ZmllbGQgdGhhdCBtZWFucwBvbmx5IHNwcml0ZXMgd2l0aCB0aGUgbWF0Y2hpbmcAc3ByaXRlIGZsYWdzIHNob3VsZCBiZSBkcmF3bi4Ac3ByaXRlIDAgaXMgbm90IGRyYXduIHVubGVzcyB0aGUAYml0IGF0IDB4NWYzNiAmIDB4OCBpcyBzZXQuAG1nZXQAbXNldACAIG1nZXQoeCx5KQAgICBtc2V0KHgseSx2YWwpAGdldCBvciBzZXQgdGhlIHZhbHVlIG9mIHRoZSBtYXAAdGlsZSBhdCB4LHkuIHdoZW4geCx5IGlzIG91dHNpZGUAdGhlIG1hcCBhcmVhLCBtZ2V0IHJldHVybnMgMC4AZmdldABmc2V0AIAgZmdldChuLCBbZl0pACAgIGZzZXQobiwgYml0ZmllbGQpACAgIGZzZXQobiwgZiwgdmFsKQBnZXQgb3Igc2V0IHRoZSB2YWx1ZSBvZiBhIHNwcml0ZQBmbGFnIGYgZm9yIHNwcml0ZSBuLiB3aGVuIGYgaXMAb21pdHRlZCwgYWxsIGZsYWdzIGFyZSByZXRyaWV2ZWQAL3NldCBhcyBhIHNpbmdsZSA4LWJpdCBiaXRmaWVsZC4AZXhhbXBsZXMgdXNpbmcgc3ByaXRlIDI6AGZzZXQoMiwgNCwgdHJ1ZSkgLS0gc2V0IGZsYWcgNABmc2V0KDIsIDB4YikgIC0tIHNldCBmbGFncyAwLDEsMwA/ZmdldCgyLCAzKSAgIC0tIHRydWUAaW5pdGlhbCBzcHJpdGUgZmxhZyBzdGF0ZXMgY2FuAGJlIHNldCBpbiB0aGUgc3ByaXRlIGVkaXRvci4AdGxpbmUAgCB0bGluZSh4LCB5LCB4MSwgeTEsIG14LCBteSwAICAgW21keCwgbWR5XSwgW2xheWVyc10pAGRyYXcgYSB0ZXh0dXJlZCBsaW5lIGZyb20gKHgseSkAdG8gKHgxLHkxKSwgc2FtcGxpbmcgY29sb3VycwBmcm9tIHRoZSBtYXAgYXQgZWFjaCBwb2ludC4Ad2hlbiBsYXllcnMgaXMgZ2l2ZW4sIG9ubHkgdGlsZXMAd2l0aCBtYXRjaGluZyBmbGFncyBhcmUgZHJhd24uAG14LG15IGFyZSBtYXAgY29vcmRzIGdpdmVuIGluAHRpbGVzIGFuZCBpbmNyZW1lbnRlZCBieSBtZHgsAG1keSBhZnRlciBlYWNoIHBpeGVsIGlzIGRyYXduLgBkcmF3IHN0YXRlOgAweDVmMzg6IGxvb3Agd2lkdGggaW4gdGlsZXMAMHg1ZjM5OiBsb29wIGhlaWdodCBpbiB0aWxlcwAweDVmM2E6IG9mZnNldCB4IGluIHRpbGVzADB4NWYzYjogb2Zmc2V0IHkgaW4gdGlsZXMAMHg1ZjM2JjB4ODogZHJhdyBzcHJpdGUgMABzcHIAgCBzcHIobiwgeCwgeSwgW3csIGhdLAAgICBbZmxpcF94XSwgW2ZsaXBfeV0AZHJhdyBzcHJpdGUgbiBhdCB4LCB5AHcgKHdpZHRoKSBhbmQgaCAoaGVpZ2h0KSBhcmUgMQBieSBkZWZhdWx0LCBhbmQgc3BlY2lmeSBob3cgbWFueQA4eDggc3ByaXRlcyB0byBkcmF3LgBjb2xvciAwIGlzIG5vdCBkcmF3biBieSBkZWZhdWx0AChoZWxwIHBhbHQgZm9yIG1vcmUgaW5mb3JtYXRpb24pAGZsaXBfeCwgZmxpcF95IGFyZSBib29sZWFuczoAd2hlbiB0cnVlLCBkcmF3IG1pcnJvcmVkAHNzcHIAgCBzc3ByKHN4LCBzeSwgc3csIHNoLCBkeCwgZHksACAgIFtkdywgZGhdLCBbZmxpcF93XSwgW2ZsaXBfaF0Ac3RyZXRjaCBzcHJpdGUgdXNpbmcgdGhlIHNvdXJjZQByZWN0YW5nbGUgc3gsIHN5LCBzdywgc2gAZHJhdyBhdCB0aGUgZGVzdGluYXRpb24gZHgsIGR5AHdpdGggaGVpZ2h0IGR3LCBkaC4gd2hlbiBkdywgZGgAYXJlIG5vdCBnaXZlbiwgdXNlIHN3LCBzaAB3aGVuIHRydWUsIGRyYXcgbWlycm9yZWQuAHNnZXQAc3NldACAIHNnZXQoeCx5KQAgICBzc2V0KHgseSx2YWwpAGdldCBvciBzZXQgdGhlIHZhbHVlIG9mIGEgcGl4ZWwAaW4gdGhlIHNwcml0ZXNoZWV0IGF0IHgsIHkAcGdldABwc2V0AG9uIHRoZSBzY3JlZW4gYXQgeCwgeQBwcmludAA/AIAgcHJpbnQoc3RyLCB4LCB5LCBbY29sXSkAICAgcHJpbnQoc3RyLCBbY29sXSkAcHJpbnQgdGhlIHN0cmluZyBzdHIgYXQgeCwgeQBvciB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24Ac2hvcnRoYW5kOiB1c2UgPyBvbiBhIHNpbmdsZQBsaW5lIHdpdGhvdXQgYnJhY2tldHM6AD8iaGVsbG8iAHNvbWUgcDhzY2lpIGNvZGVzOgBcIzMgc2V0IGJhY2tncm91bmQgY29sICgwLi5mKQBcZjcgc2V0IGZvcmVncm91bmQgY29sICgwLi5mKQBcXmkgaW52ZXJ0ZWQgbW9kZQBcXncgd2lkZSBtb2RlICheLXcgdG8gZGlzYWJsZSkAXF50IHRhbGwgbW9kZSAoXi13IHRvIGRpc2FibGUpAFxecCBwaW5iYWxsIG1vZGUAXGEgYmVlcABwcmludGgAgCBwcmludGgoc3RyLCBbZmlsZW5hbWVdLAAgICBbb3ZlcndyaXRlXSwgW3RvX2Rlc2t0b3BdAHByaW50IHN0ciB0byBob3N0LiB3aGVuIHBpY28tOABpcyBydW5uaW5nIGZyb20gYSBzaGVsbCwgdGhlAG91dHB1dCBpcyBzZW50IHRvIHRoYXQgc2hlbGwsIG9yAGFwcGVuZGVkIHRvIGEgZmlsZSB3aGVuIGEAZmlsZW5hbWUgaXMgZ2l2ZW4uAGluIHRoZSBzZWNvbmQgY2FzZSwgYW55IGV4aXN0aW5nAGZpbGUgaXMgb3ZlcndyaXR0ZW4gd2hlbgBvdmVyd3JpdGUgaXMgdHJ1ZS4gdGhlIGZpbGUgaXMAc2F2ZWQgdG8gZGVza3RvcCB3aGVuIHRvX2Rlc2t0b3AAaXMgdHJ1ZS4AY3Vyc29yAIAgY3Vyc29yKHgsIHksIFtjb2xdAHNldCB0aGUgY3Vyc29yIHBvc2l0aW9uAGlmIGNvbCBpcyBzcGVjaWZpZWQsIGFsc28gc2V0IHRoZQBjdXJyZW50IGRyYXcgY29sb3VyLgBwZWVrAHBlZWsyAHBlZWs0AEAAJACAIHBlZWsoYWRkciwgW25dKQByZWFkIGEgYnl0ZSBmcm9tIG1lbW9yeSBhdCBhZGRyLgB3aGVuIG4gaXMgZ2l2ZW4sIHJldHVybiBuIGJ5dGVzIAByZWFkIHNlcXVlbnRpYWxseS4gaW50ZWdlcnMgYW5kAG51bWJlcnMgY2FuIGJlIHJlYWQgd2l0aCBwZWVrMigpAGFuZCBwZWVrNCByZXNwZWN0aXZlbHkuAC0tIGZldGNoIDIgYnl0ZXMgb2YgdmlkZW8gcmFtAGEsYiA9IHBlZWsoMHg2MDAwLCAyKQAtLSBvcGVyYXRvciBhbHRlcm5hdGl2ZXMAQGFkZHIgIC0tIHBlZWsoYWRkcikAJWFkZHIgIC0tIHBlZWsyKGFkZHIpACRhZGRyICAtLSBwZWVrNChhZGRyKQBwb2tlAHBva2UyAHBva2U0AIAgcG9rZShhZGRyLCB2YWwxLCBbdmFsMiwgLi4uXSkAd3JpdGUgb25lIG9yIG1vcmUgYnl0ZXMgdG8gcmFtAHN0YXJ0aW5nIGZyb20gYWRkci4gaW50ZWdlcnMAYW5kIG51bWJlcnMgY2FuIGJlIHdyaXR0ZW4gd2l0aABwb2tlMiBhbmQgcG9rZTQuAC0tIHdyaXRlIDQgYnl0ZXMgdG8gdmlkZW8gcmFtAHBva2UyKDB4NzAwMCwgMHg0NTY3LCAweDg5YWIpAG1lbXNldACAIG1lbXNldChhZGRyLCB2YWwsIGxlbikAd3JpdGUgdGhlIDgtYml0IHZhbHVlIHZhbCBpbnRvAHJhbSBzdGFydGluZyBmcm9tIGFkZHIsIGZvcgBsZW4gYnl0ZXMuAC0tIGZpbGwgaGFsZiBvZiB2aWRlbyBtZW1vcnkAbWVtc2V0KDB4NjAwMCwgMHhjOCwgMHgxMDAwKQBtZW1jcHkAgCBtZW1jcHkoZGVzdCwgc3JjLCBsZW4pAGNvcHkgbGVuIGJ5dGVzIGZyb20gYWRkcmVzcyBzcmMAdG8gZGVzdC4gc2VjdGlvbnMgY2FuIGJlAG92ZXJsYXBwaW5nIGFuZCBkbyBub3QgbmVlZCB0bwBiZSBhbGlnbmVkLgAtLSBjb3B5IHNvbWUgb2YgdGhlIHZpZGVvIHJhbSB0bwAtLSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4AbWVtY3B5KDB4NjAwMCwgMHg2ODAwLCAweDgwMCkAcmVsb2FkAIAgcmVsb2FkKGRlc3QsIHNyYywgbGVuLCBbZm5dKQBzaW1pbGFyIHRvIG1lbWNweSwgYnV0IHJlYWQAZnJvbSBjYXJ0cmlkZ2Ugcm9tIGFuZCB3cml0ZQB0byByYW0gYXQgZGVzdCBmb3IgbGVuIGJ5dGVzLgByZWxvYWQoKSByZWxvYWRzIGV2ZXJ5dGhpbmcuAHRoZSBjb2RlIHNlY3Rpb24gKD49IDB4NDMwMCkAaXMgcHJvdGVjdGVkIGFuZCBjYW4gbm90IGJlAGFjY2Vzc2VkIGJ5IHJlbG9hZCAvIGNzdG9yZS4Ad2hlbiBmaWxlbmFtZSBmbiBpcyBnaXZlbiwAZGF0YSBpcyByZWFkIGZyb20gYSBzZXBhcmF0ZQBjYXJ0cmlkZ2UgZmlsZS4AY3N0b3JlAIAgY3N0b3JlKGRlc3QsIHNyYywgbGVuLCBbZm5dKQBmcm9tIHJhbSBhbmQgd3JpdGUgdG8gY2FydCByb20AYXQgZGVzdCBmb3IgbGVuIGJ5dGVzLgBjc3RvcmUoKSBzdG9yZXMgZXZlcnl0aGluZyBpbgByYW0gYmFjayB0byB0aGUgY2FydHJpZGdlLgBzY29yZXN1YgCAIHNjb3Jlc3ViKHRibCwgc2NvcmUsIFtleHRyYV0pAHN1Ym1pdCBhIGhpZ2hzY29yZSB0byB0aGUgYmJzLgB0YmwgaXMgYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlAHRhYmxlIGFuZCBjYW4gYmUgPD0gNDAgY2hhcnMAbG9uZy4gZS5nLiAibGV2ZWxfMSIAc2NvcmUgaXMgYSBudW1iZXIuIGhpZ2hlciBpcwBiZXR0ZXI7IHRoZSB0b3AgNjQgc2NvcmVzIGFyZQByZXR1cm5lZCBpbiBhIHRhYmxlIHdpdGggZmllbGRzOgBuYW1lIHNjb3JlIGV4dHJhIGRhdGUAdXNlIHNjb3Jlc3ViKHRibCkgdG8gZ3JhYiB0aGUAdGFibGUgc3RhdGUgd2l0aG91dCBzdWJtaXR0aW5nAGEgc2NvcmUuAGV4dHJhIGlzIGEgYmluYXJ5IHN0cmluZyBvZgBtZXRhZGF0YSA8PSA3NjggYnl0ZXMgbG9uZy4AY2FydGRhdGEAgCBjYXJ0ZGF0YShpZCkAb3BlbnMgYSBwZXJtYW5lbnQgZGF0YSBzdG9yYWdlAHNsb3QgdG8gYmUgYWNjZXNzZWQgd2l0aCBkZ2V0KCkAYW5kIGRzZXQoKSBvciBieSBkaXJlY3RseSBwb2tlLwBwZWVraW5nIHJhbSBhdCAweDVlMDAuLjB4NWVmZi4AaWQgaXMgYSBzdHJpbmcgPD0gNjQgY2hhcnMgbG9uZwB0aGF0IG1pZ2h0IG5vdCBiZSB1bmlxdWUgKGl0IGlzAHBvc3NpYmxlIGZvciB0d28gY2FydHMgdG8gc2hhcmUAdGhlIHNhbWUgc3RvcmFnZSkuAGNhcnRkYXRhKCkgY2FuIG9ubHkgYmUgY2FsbGVkAG9uY2UgcGVyIHByb2dyYW0gLS0gaXQgaXMgbm90AHBvc3NpYmxlIHRvIHVzZSBtdWx0aXBsZSBkYXRhAHN0b3JhZ2Ugc2xvdHMgaW4gb25lIHByb2dyYW0uAGRnZXQAZHNldACAIGRnZXQoaSkAICAgZHNldChpLCB2YWwpAGdldC9zZXQgdGhlIG51bWJlciBpbiBwZXJtYW5lbnQAZGF0YSBzdG9yYWdlIGF0IGluZGV4IGkgKDAuLjYzKS4Ac2FtZSBhcyBwZWVrNCgweDVlMDAraSo0KSBhbmQAcG9rZTQoMHg1ZTAwK2kqNCwgdmFsKSwgYWZ0ZXIAY2FydGRhdGEoaWQpIGhhcyBiZWVuIHVzZWQgdG8AbWFwIHRoaXMgbWVtb3J5IHJhbmdlIHRvIHN0b3JhZ2UAY2FsbGluZyBk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KHsxLDIsImhleSJ9LCBwcmludCkAaGV5AHBhaXJzAIAgcGFpcnModGJsKQB1c2VkIHRvIGl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMAaW4gYSB0YWJsZSwgaW5jbHVkaW5nIGtleXMgdGhhdABhcmUgYXJlIG5vdCBpbnRlZ2Vycy4gZWFjaCBjYWxsAHRvIHRoZSBmdW5jdGlvbiBpdCBnZW5lcmF0ZXMAcmV0dXJucyBib3RoIHRoZSBrZXkgKGspIGFuZCB0aGUAdmFsdWUgKHYpIGZvciB0aGF0IGl0ZW06AGEgPSB7Zm9vID0gMywgWzEuNV0gPSAiYmxhaCJ9AGZvciBrLHYgaW4gcGFpcnMoYSkgZG8AICBwcmludCgiazoiLi5rLi4iICB2OiIuLnYpAGs6Zm9vICB2OjMAazoxLjUgIHY6YmxhaABydW4AgCBydW4oW3BhcmFtX3N0cl0pAHJ1biB0aGUgcHJvZ3JhbS4gd2hlbiBjYWxsZWQAd2hlbiBhbHJlYWR5IHJ1bm5pbmcsIHRoZQBwcm9ncmFtIGlzIHJlc3RhcnRlZC4AcGFyYW1fc3RyIGlzIGEgc3RyaW5nIHRoYXQgY2FuAGJlIGFjY2Vzc2VkIGR1cmluZyBydW50aW1lIHdpdGgAc3RhdCg5KS4Ac3RvcACAIHN0b3AoW21lc3NhZ2VdKQBzdG9wIHRoZSBjdXJyZW50bHkgcnVubmluZwBwcm9ncmFtIGFuZCBvcHRpb25hbGx5IHByaW50AGEgbWVzc2FnZS4AYSBzdG9wcGVkIHByb2dyYW0gY2FuIHJlc3VtZWQAd2l0aCB0aGUgcmVzdW1lIGNvbW1hbmQsIG9yAGFkdmFuY2VkIGJ5IGEgc2luZ2xlIGZyYW1lIHdpdGgAYSBmdWxsIHN0b3AuAHJlc3VtZQCAID4gcmVzdW1lACAgID4gLgByZXN1bWUgYSBwcm9ncmFtIHRoYXQgd2FzAHN0b3BwZWQgZWl0aGVyIHdpdGggc3RvcCgpIG9yAGJ5IHByZXNzaW5nIGVzY2FwZS4AYSBzaW5nbGUgZnJhbWUgY2FuIGJlIHJ1biBieQBlbnRlcmluZyBhIGZ1bGwgc3RvcCwgYW5kIHRoZW4AcHJlc3NpbmcgZW50ZXIgdG8gZ2V0IHN1YnNlcXVlbnQAZnJhbWVzLgByZXNldACAIHJlc2V0KCkAcmVzdG9yZSB0aGUgdmFsdWVzIGluIHJhbSBmcm9tADB4NWYwMC4uMHg1ZjdmIHRvIHRoZWlyIGRlZmF1bHQAdmFsdWVzLgB0aGlzIGluY2x1ZGVzIHRoZSBwYWxldHRlLABjYW1lcmEgcG9zaXRpb24sIGNsaXBwaW5nLCBhbmQAZmlsbCBwYXR0ZXJuLgBpdCBjYW4gYWxzbyBiZSB1c2VkIGZyb20gY29tbWFuZABsaW5lIHdpdGhvdXQgdGhlIGJyYWNrZXRzLiB0aGlzAGNhbiBiZSB1c2VmdWwgd2hlbiB0aGUgdGV4dCBpcwBpbnZpc2libGUgYmVjYXVzZSBvZiBwYWxldHRlAGNoYW5nZXMuAHlpZWxkAIAgeWllbGQoKQBleGl0IGEgY29yb3V0aW5lIGFuZCB0aGVuAHJlc3VtZSBhdCB0aGF0IHBvaW50IHdoZW4AY29yZXN1bWUoKSBpcyBjYWxsZWQuAGZvciBhbiBleGFtcGxlLCBzZWU6AGNvcmVzdW1lAGNvY3JlYXRlAGNvcm91dGluZQBjb3JvdXRpbmVzAIAgY29jcmVhdGUoZikAICAgY29yZXN1bWUoYywgW3AwLCBwMSwgLi4uXSkAY3JlYXRlIGEgY29yb3V0aW5lIGZyb20gYQBmdW5jdGlvbiBmLCBhbmQgdGhlbiBydW4gaXQAd2l0aCBhcmd1bWVudHMgcDAsIHAxLi4AZnVuY3Rpb24gaGV5KCkAICBwcmludCJkb2luZyBzb21ldGhpbmciACAgeWllbGQoKQAgIHByaW50InNvbWV0aGluZyBlbHNlIgAgIHByaW50ImZpbmlzaGVkIgBjID0gY29jcmVhdGUoaGV5KQBjb3Jlc3VtZShjKSAgLS0gZG9pbmcgc29tZXRoaW5nAGNvcmVzdW1lKGMpICAtLSBzb21ldGhpbmcgZWxzZQA/Y29zdGF0dXMoYykgLS0gInN1c3BlbmRlZCIAY29zdGF0dXMAgCBjb3N0YXR1cyhjKQByZXR1cm5zIHRoZSBzdGF0dXMgb2YgYQBjb3JvdXRpbmUgYyBhcyBhIHN0cmluZzoAICBydW5uaW5nACAgc3VzcGVuZGVkACAgZGVhZAB0aW1lAHQAgCB0aW1lKCkAICAgdCgpAHJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzAHNpbmNlIHRoZSBwcm9ncmFtIHN0YXJ0ZWQAcnVubmluZywgdGFrZW4gZnJvbSB0aGUgbW9tZW50AHRoZSBjdXJyZW50IGZyYW1lIHN0YXJ0ZWQuAG1lbnVpdGVtAIAgbWVudWl0ZW0oaW5kZXgsIFtsYWJlbF0sIFtmXSkAYWRkIGFuIGl0ZW0gdG8gdGhlIHBhdXNlIG1lbnUgAGF0IHNsb3QgaW5kZXggKDEuLjUpIHdpdGggYQBsYWJlbCA8PSAxNiBjaGFycyBsb25nLgBmIGlzIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQAd2hlbiB0aGUgbWVudSBpdGVtIGlzIHNlbGVjdGVkAG9yIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ1dHRvbnMAYXJlIHByZXNzZWQuIGl0IHRha2VzIGEgc2luZ2xlAGJpdGZpZWxkIHBhcmFtZXRlciBpbmRpY2F0aW5nAHdoaWNoIGJ1dHRvbiB3YXMgcHJlc3NlZC4AbWVudWl0ZW0oMSwgImZvbyIsIGZ1bmN0aW9uKGIpACA/InNlbGVjdGVkIGZvbzoiLi5iAGVuZCkAd2hlbiBubyBsYWJlbCBvciBjYWxsYmFjayBpcwBzcGVjaWZpZWQsIHRoZSBpdGVtIGlzIGRlbGV0ZWQuAHN0YXQAgCBzdGF0KHgpAGdldCBzeXN0ZW0gc3RhdHVzACAwIG1lbW9yeSB1c2FnZSAoMC4uMjA0OCkAIDEgY3B1ICAgICAgKDEuMCA9PSAxMDAlKQAgNCBjbGlwYm9hcmQgY29udGVudHMAIDYgcGFyYW1ldGVyIHN0cmluZwAgNyBjdXJyZW50IGZyYW1lcmF0ZQAgNDYuLjQ5IGN1cnJlbnQgcGxheWluZyBzZngAIDUwLi41MyBub3RlIG51bWJlciAocGVyIGNoYW4pACA1NCBjdXJyZW50bHkgcGxheWluZyBwYXR0ZXJuACA1NSB0b3RhbCBwYXR0ZXJucyBwbGF5ZWQAIDU2IHRpY2tzIHBsYXllZCBvbiBwYXR0ZXJuACA1NyB0cnVlIHdoZW4gbXVzaWMgcGxheWluZwAgODAuLjg1IHV0YyB0aW1lOyB5ZWFyLi5zZWNvbmQAIDkwLi45NSBsb2NhbCB0aW1lACAxMDAgYnJlYWRjcnVtYiBsYWJlbCwgb3IgbmlsAHNlcmlhbACAIHNlcmlhbChjaGFubmVsLCBhZGRyLCBsZW4pAHJlYWQvd3JpdGUgZGF0YSB0byBhIG1lbW9yeQBhZGRyZXNzIGZvciBsZW4gYnl0ZXMuAGNoYW5uZWw6ACAweDAwMC4uMHgwZmUgZ3BpbyBwaW5zIChyYXNwaSkAIDB4MGZmIGRlbGF5IGZvciBsZW4gbXMAIDB4ODAwIGRyb3BwZWQgZmlsZSAtLSBzdGF0KDEyMCkAIDB4ODAyIGRyb3BwZWQgZmlsZQAgMHg4MDQgc3RkaW4AIDB4ODA1IHN0ZG91dABleHRjbWQAgCBleHRjbWQoY21kX3N0cikAc3BlY2lhbCBzeXN0ZW0gY29tbWFuZHMgY2FuIGJlAGlzc3VlZCBmcm9tIGEgcnVubmluZyBwcm9ncmFtOgBwYXVzZTogcGF1c2UgY2FydAByZXNldDogcmVzZXQgY2FydABnb19iYWNrOiByZXR1cm4gdG8gcHJldmlvdXMgY2FydABsYWJlbDogc2V0IGNhcnQgbGFiZWwAc2NyZWVuOiBzYXZlIGEgc2NyZWVuc2hvdAByZWM6IHNldCB2aWRlbyBzdGFydCBwb2ludAByZWNfZnJhbWVzOiAxIGZyYW1lIHBlciBmbGlwAHZpZGVvOiBzYXZlIGEgLmdpZiB0byBkZXNrdG9wAGF1ZGlvX3JlYzogc3RhcnQgcmVjb3JkaW5nIGF1ZGlvAGF1ZGlvX2VuZDogc2F2ZSAud2F2IHRvIGRlc2t0b3AAc2h1dGRvd246IChmb3IgZXhwb3J0ZWQgY2FydHMpAGZvbGRlcjogb3BlbiBjdXJyZW50IGZvbGRlcgBsb2FkAIAgPiBsb2FkIGZpbGVuYW1lACAgIGxvYWQoZmlsZW5hbWUsIFticmVhZGNydW1iXSwAICAgW3BhcmFtX3N0cl0pAGxvYWQgYSBjYXJ0cmlkZ2UuIHdoZW4gY2FsbGVkAGZyb20gYSBydW5uaW5nIHByb2dyYW0sIHRoZQBsb2FkZWQgY2FydHJpZGdlIGlzIGltbWVkaWF0ZWx5AHJ1biB3aXRoIHBhcmFtX3N0ciAoYWNjZXNzaWJsZQB3aXRoIHN0YXQoNikpIGFuZCBhIG1lbnUgaXRlbQB3aXRoIHRoZSBsYWJlbCBicmVhZGNydW1iIGlzAGluc2VydGVkLCBhbGxvd2luZyB0aGUgdXNlciB0bwByZXR1cm4gdG8gdGhlIHByZXZpb3VzIGNhcnQuAGZpbGVuYW1lcyBzdGFydGluZyB3aXRoICMgYXJlAHRha2VuIHRvIGJlIGJicyBjYXJ0cmlkZ2UgaWRzLgBzYXZlAIAgPiBzYXZlIGZpbGVuYW1lAHNhdmUgdGhlIHdvcmtpbmcgY2FydHJpZGdlIHRvIGEAZmlsZS4gd2hlbiB0aGUgZmlsZSBkb2VzIG5vdABjb250YWluIHRoZSAucDggZXh0ZW5zaW9uLCBpdCBpcwBhZGRlZCBhdXRvbWF0aWNhbGx5OgA+IHNhdmUgZm9vAHNhdmVkIGZvby5wOAB1c2UgLnBuZyBpbiB0aGUgZmlsZW5hbWUgdG8gc2F2ZQBhIC5wOC5wbmcgY2FydHJpZGdlLiB0byBjYXB0dXJlAGEgbGFiZWwgYmVmb3JlaGFuZCwgcHJlc3MgY3RybC03AHRvIHNhdmUgdG8gY2xpcGJvYXJkLCB1c2U6AD5zYXZlIEBjbGlwAHRoaXMgY2FuIGJlIHBhc3RlZCBhcyB0ZXh0IGFuZABpcyBzdXBwb3J0ZWQgYnkgdGhlIGJicy4AaW1wb3J0AIAgPiBpbXBvcnQgZmlsZW5hbWUAaW1wb3J0IGFuIGltYWdlIG1hcHBpbmcgdG8gdGhlAGN1cnJlbnQgcGFsZXR0ZS4gdW5sZXNzIC1sIGlzAHVzZWQsIGltcG9ydCB0byB0aGUgc3ByaXRlc2hlZXQuACAtbCAgICAgLS0gaW1wb3J0IGNhcnQgbGFiZWwAIC14IG51bSAtLSBsb2FkIGF0IHggcG9zaXRpb24AIC15IG51bSAtLSBsb2FkIGF0IHkgcG9zaXRpb24APiBpbXBvcnQgLWwgbXlsYWJlbC5wbmcAZXhwb3J0AIAgPiBleHBvcnQgZmlsZW5hbWUgAGV4cG9ydCBhIGZpbGUgYmFzZWQgb24gdHlwZToAIC5wbmcgIHNwcml0ZXNoZWV0ACAud2F2ICBjdXJyZW50IHNmeCBvciBwYXR0ZXJuACAuYmluICBzdGFuZC1hbG9uZSBiaW5hcmllcwAgLmh0bWwgc3RhbmQtYWxvbmUgd2ViIGFwcAAgLnA4LnBuZyAgIHNhdmUgYSBjb3B5ACAubWFwLnBuZyAgbWFwIHZpc3VhbGlzYXRpb24AZXhwb3J0IGxhYmVsOgA+IGV4cG9ydCAtbCBsYWJlbC5wbmcAdGlueSAucm9tIGZvcm1hdCAoY29kZSBvbmx5KToAPiBleHBvcnQgLXQgZm9vLnA4LnJvbQBiaW5hcnkgbXVsdGljYXJ0OgA+IGV4cG9ydCBmb28uYmluIGNhcnQyLnA4IGMzLnA4AGluZm8AgCA+IGluZm8AZ2V0IHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlAGN1cnJlbnRseSBsb2FkZWQgY2FydHJpZGdlOgAgZmlsZW5hbWUAIGNhcGFjaXR5IHN0YXRzACB1bnNhdmVkIGNoYW5nZXMAZm9sZGVyAIAgPiBmb2xkZXIgW3doaWNoXQBvcGVuIHRoZSBjdXJyZW50IGZvbGRlciBpbiB0aGUAaG9zdCdzIGZpbGUgbmF2aWdhdG9yLgB3aGVuIHdoaWNoIGlzIGdpdmVuLCBhIHNwZWNpYWwAbG9jYXRpb24gaXMgb3BlbmVkOgAgYmFja3VwcwAgY29uZmlnACBiYnMAIGRlc2t0b3AAdG8gb3BlbiBhIGZvbGRlciBmcm9tIGEgcnVubmluZwBjYXJ0cmlkZ2UgdGhhdCBoYXMgYmVlbiBleHBvcnRlZAB0byBiaW5hcnksIHVzZSBleHRjbWQoImZvbGRlciIuAHNodXRkb3duAIAgPiBzaHV0ZG93bgBwcm9tcHQgZm9yIGFueSB1bnNhdmVkIGNoYW5nZXMAYW5kIHRoZW4gY2xvc2UgcGljby04LgBmb3IgZmFzdCBzaHV0ZG93biwgdXNlIGtleXM6ACBhbHQtZjQgKHdpbmRvd3MpACBjdHJsLXEgKGxpbnV4IC8gbWFjKQBscwBkaXIAgCA+IGxzIFtwYXRoXQBsaXN0IGFsbCBvZiB0aGUgY2FydHMgaW4AdGhlIGdpdmVuIHBhdGguAGxzICogdG8gc2hvdyBoaWRkZW4gZmlsZXMAcmVib290AIAgPiByZWJvb3QAYW5kIHRoZW4gcmVib290IHBpY28tOC4AdGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvAHN0YXJ0IGEgbmV3IGVtcHR5IHByb2plY3QuAHNwbG9yZQCAID4gc3Bsb3JlACAgID4gcwBvcGVuIHNwbG9yZTogcGljby04J3MgYmJzAGNhcnRyaWRnZSBicm93c2VyLgB1c2UgbGVmdCBhbmQgcmlnaHQgdG8gc3dpdGNoAGJldHdlZW4gY2FydHJpZGdlIGxpc3RzLCBhbmQAdXAgYW5kIGRvd24gdG8gc2VsZWN0IGEgY2FydC4AdXNlIJcvjiB0byBvcGVuIGEgY2FydHJpZGdlAG9yIHRoZSBtZW51IGJ1dHRvbiBmb3IgbW9yZQBvcHRpb25zLgBsb2dpbgBsb2dvdXQAgCA+IGxvZ2luACAgID4gbG9nb3V0AGxvZyBpbiB0byB5b3VyIGxleGFsb2ZmbGUAYWNjb3VudC4gd2hpbGUgbG9nZ2VkIGluLCB1c2VycwBhcmUgYWJsZSB0byBzdWJtaXQgaGlnaCBzY29yZXMAdXNpbmcgc2NvcmVzdWIoKSwgYWRkIHN0YXJzIHRvAGNhcnRzLCBhbmQgc3luYyBiYnMgZmF2b3VyaXRlcy4AW25vdCBpbXBsZW1lbnRlZCB5ZXQhXQB0b3BpYyBub3QgZm91bmQ6AF4KIDAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiEjJSgpe31bXTw+Kz0vKjo7Lix+XwBpZihfdXBkYXRlNjApX3VwZGF0ZT1mdW5jdGlvbigpX3VwZGF0ZTYwKClfdXBkYXRlNjAoKWVuZABpZihfdXBkYXRlNjApX3VwZGF0ZT1mdW5jdGlvbigpX3VwZGF0ZTYwKClfdXBkYXRlX2J1dHRvbnMoKV91cGRhdGU2MCgpZW5kAEdJRjg3YQBHSUY4OWEAAAEDBw8fP3//JXMlcy5wOGQudHh0ACUwOHgAY2FydGRhdGEoKSBjYW4gb25seSBiZSBjYWxsZWQgb25jZQBjYXJ0IGRhdGEgaWQgdG9vIGxvbmcAY2FydCBkYXRhIGlkOiBiYWQgY2hhcgAud2F2AC5yYXcAZXhwb3J0IGlzIHVuYXZhaWxhYmxlAGNvdWxkIG5vdCBvcGVuIGZpbGUAd3JvdGUgJWQgZmlsZSVjAG5vIHJlY29yZGluZyBpbiBwcm9ncmVzcwBzZnggJWQgOjogdGlja3MgJWQAcGF0dGVybiAlZAAlc18lJWQuJXMAJXMuJXMAd2F2AHBsYXllciBrZXkgY29uZmlnAHNhdmVkIGNvbmZpZy4AcHJlc3MgZXNjYXBlAHRvIGNvbnRpbnVlAHByZXNzIGtleSBmb3I6AGRlbCBmb3IgZGVmYXVsdABlc2MgdG8gY2FuY2VsACVzIDogJXMAbGVmdAByaWdodAB1cABkb3duAHogLyBjIC8gbgB4IC8gdiAvIG0AcwBmAGUAZAB0YWIAcQBwIC8gZW50ZXIAcDEgbGVmdCAgICAAcDEgcmlnaHQgICAAcDEgdXAgICAgICAAcDEgZG93biAgICAAcDEgjiAgICAgIABwMSCXICAgICAgAHAyIGxlZnQgICAgAHAyIHJpZ2h0ICAgAHAyIHVwICAgICAgAHAyIGRvd24gICAgAHAyII4gICAgICAAcDIglyAgICAgIABwYXVzZSAgICAgIABscnVkb3hwY3Vyc29ycwB6IHgvYyB2AHMgZiBlIGQAdGFiIHEgdwAgICAgICAgACVkIGpveXN0aWNrcyBkZXRlY3RlZAAucG5nAHwlLTIwcyB8JS0yMHMgfCUtNmQgfCUtMTZzIHwlLTIwcyB8JXMKAGNvdWxkIG5vdCBsb2FkIGZhdm91cml0ZXMgZmlsZTogJXMKAGJicwBiYnMvJWQvACVzdGVtcC0lZC5uZm8AJXMlZC5wOC5wbmcAYmJzL2NhcnRzACVzL3RlbXAtJXMubmZvACVzLyVzLnA4LnBuZwAlcy9iYnMvZ2V0X2NhcnQucGhwP2NhdD03JnBsYXlfc3JjPSVkJmxpZD0lcwBiYnMvbGFiZWxzLwAlcyVzLnBuZwBydW4gY2FydABvcHRpb25zAHJlbW92ZSBmcm9tIGZhdm91cml0ZXMAZmF2b3VyaXRlAGNhcnRzIGJ5IEAlcwBzaW1pbGFyIGNhcnRzAHNlYXJjaCBiYnMgdGhyZWFkAG9wZW4gdGhyZWFkIGluIGJyb3dzZXIAW2JhY2tdAGVkaXQgY2FydAByZS1kb3dubG9hZABvcGVuIGluIGJyb3dzZXIAYmFjawB2b2x1bWUAZnVsbHNjcmVlbgBzaHV0ZG93biBwaWNvLTgAY2F0PTcmc2VhcmNoPSVzJm1heD0zMgBiYnMvdGVtcF8lc19fLnBpcC5wbmcAYmJzL3RlbXBfJXMucGlwLnBuZwBiYnMvJXMucGlwLnBuZwAvYmJzL2Nwb3N0X2xpc3RlcjMucGhwP21heD0zMiZzdGFydF9pbmRleD0lZCYlcyZ2ZXJzaW9uPSVzJWMmY2ZpbD0lZAAwMDAyMDVnAGRvd25sb2FkIGZhaWxlZAAucDgAbGlkAHRpdGxlAGF1dGhvcgBtaWQAY2F0c3ViACBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkAY2FuY2VsbGVkAGRvd25sb2FkIGNhbmNlbGxlZABQSUNPLTgAeyBpZiAodHlwZW9mIHBpY284X2dwaW8gIT09ICd1bmRlZmluZWQnKSBwaWNvOF9ncGlvWyQwXT0kMX0Ae3ZhciB2YWw9MDsgaWYgKHR5cGVvZiBwaWNvOF9ncGlvICE9PSAndW5kZWZpbmVkJykgdmFsID0gcGljbzhfZ3Bpb1skMF07IHJldHVybiB2YWx9AGhlbGxvLnA4AGFwaS5wOABhdXRvbWF0YS5wOABib3VuY2UucDgAY2FzdC5wOABjb2xsaWRlLnA4AGRvdHMzZC5wOABkcmlwcHkucDgAamVscGkucDgAc29ydC5wOAB3YW5kZXIucDgAd2F2ZXMucDgAMTUxMzMAMTk2MzkAMTAwMjIAMTk0ODgAMTg5NzMANDE0MjIANTcyMDEAY2VsZXN0ZS5wOC5wbmcAZnJvZ19ob21lLnA4LnBuZwBodWdfYXJlbmEucDgucG5nAGFyY2hlb3MucDgucG5nAGR1c2tfY2hpbGQucDgucG5nADhfbGVnc190b19sb3ZlLnA4LnBuZwBlbWJyYWNlLnA4LnBuZwBjZWxlc3RlAGZyb2cgaG9tZQBodWcgYXJlbmEAdG93ZXIgb2YgYXJjaGVvcwBkdXNrIGNoaWxkADggbGVncyB0byBsb3ZlAGVtYnJhY2UAaW5zdGFsbGluZyBkZW1vIGNhcnRzIHRvIC9kZW1vcy8AZGVtb3MvAGNvdWxkIG5vdCB3cml0ZSB0byBkaXNrAGZhdm91cml0ZXMudHh0AGdhbWVzLwAjaW5jbHVkZSAAY2FuIG5vdCAjaW5jbHVkZQBzZXJpYWwgYnVmZmVyIG92ZXJmbG93ACUxMDIzcwBmcmVxAGRtYQB0eXBlAGJyaWdodG5lc3MAaW52ZXJ0AGxlZHMAcGljby04IDAuMi41ZwAoYykgMjAxNC0yMyBsZXhhbG9mZmxlIGdhbWVzIGxscABib290aW5nIGNhcnRyaWRnZS4uAFtjb2RvXSAlcwA+Y29kb19pbml0CgBwbGF0Zm9ybTogJXMKAEVtc2NyaXB0ZW4AY29kb19zeXN0ZW1faW5pdAoAY29kb19yZXNldF90aW1lcgoAY29kb19ndWlfaW5pdAoAY29kb19rZXlzX2luaXQKAGNvZG9fdGV4dF9pbml0CgBjb2RvX3ZpZGVvX2luaXQKAGNvZG9fbW91c2VfaW5pdAoAY29kb19qb3lzdGlja19pbml0CgA8b2sKAHdpZHRoAGhlaWdodAB3aW5kb3dfeAB3aW5kb3dfeQBzb3VuZABtdXNpYwBzb2Z0d2FyZV9ibGl0AHNvZnR3YXJlX2JsaXR0ZXIAaG9tZQBkZXNrdG9wAHBpeGVsX3BlcmZlY3QAZHJhd19yZWN0AHRpbWVvdXQAaGVhZGxlc3MAcGVyZl90aW1pbmcAZnJhbWVidWZmZXIAZW11bGF0ZV90ZXh0aW5wdXQAZGVmZXJyZWRfZGVhbGxvYwBleHRfZGlzcGxheQBwcmVibGl0X3NjYWxlAGRpc3BsYXkAbG9nX3N5c3RlbV9pbmZvACVkACVkLCVkLCVkLCVkAD5jb2RvX2V4aXQKAGNtdXNpY19zdG9wCgBjb2RvX21haW5fZXhpdAoAY29kb19jb25maWdfc2F2ZQoAY29kb19zb3VuZF9leGl0CgBjb2RvX3ZpZGVvX2V4aXQKAGNvZG9fam95c3RpY2tfZXhpdAoAY29kb19zeXN0ZW1fZXhpdAoAY29kb19pdGVtc19jcmVhdGVkOiAlZAoARlMuc3luY2ZzKCBmYWxzZSwgZnVuY3Rpb24gKGVycikgeyB9ICk7ACUyMHM6JTAzZCAgIAAgIC49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LAAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAAgIHwgIFRvIG1hcCBrZXkgQSB0byBCICh3aGVuIEEgaXMgcHJlc3NlZCwgaXQgc2hvd3MgdXAgYXMgaWYgQiB3ZXJlIHByZXNzZWQpLCAgfAAgIHwgIHByZXNzIEEgdG8gZ2V0IHRoZSBzY2FuY29kZSwgYW5kIGxvb2sgdXAgQiBpbiB0aGUgbGlzdC4gVGhlbiwgYWRkIGl0IHRvICAgfAAgIHwgIG1hcF9zY2FuY29kZXMgaW4gY29uZmlnLnR4dC4gRm9yIGV4YW1wbGUsIHRvIG1hcCBiYWNrc3BhY2UgKDQyKSBhcyAgICAgICAgfAAgIHwgIGVzY2FwZSAoNDEpLCBhbmQgYWxzbyByaWdodCBzaGlmdCgyMjkpIGFzIHJpZ2h0IGN1cnNvciBrZXkgKDc5KTogICAgICAgICAgfAAgIHwgIG1hcF9zY2FuY29kZXMgNDI9NDEsMjI5PTc5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAAgIHwgIE5vdGU6IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGV4dGlucHV0IGV2ZW50cyBtYXBwZWQgdmlhIGtiZCBsYXlvdXQuICAgICAgfAAgIGA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwA6OiBzY2FuY29kZSB2aWV3ZXIgICAgLy8gYWx0K2Y0IC8gY3RybC1xIHRvIHF1aXQAJTAzZABwcmVzc2VkIHNjYW5jb2RlOiU0ZCAgICBuYW1lOiUxNnMKAC1zY2FuY29kZXMAY29kb19kZXN0cm95X3BvZDogY3BvZC0+aXRlbXMgIT0gMAoAQmFkIGNwb2RfYWRkX2l0ZW0gdHlwZQBCYWQgY3BvZF9hZGRfaXRlbQBDT04AUFJOAEFVWABOVUwAQ09NMABDT00xAENPTTIAQ09NMwBDT000AENPTTUAQ09NNgBDT003AENPTTgAQ09NOQBMUFQwAExQVDEATFBUMgBMUFQzAExQVDQATFBUNQBMUFQ2AExQVDcATFBUOABMUFQ5AGNvZG9fbG9hZF9wb2RfZmlsZTogVW5rbm93biBDaHVuayEKAHJiAGZhaWxlZABvawBjb2RvX2xvYWRfcG9kOiAlcyAlcyAKACoqIHdlYiBmaWxlIHN5c3RlbSBub3QgbW91bnRlZC4gcmV0dXJuaW5nIHZkaXNrIGZpbGU6ICVzICglcykKACAtPiByZXR1cm5pbmcgdmRpc2sgZmlsZTogJXMgKCVzKQoAY29kb19zcGxpdF9maWxlbmFtZV9leDogZmlsZV9uYW1lIHRvbyBsb25nCgAie3JldHVybiAoKHR5cGVvZiBwOF90b3VjaF9kZXRlY3RlZCA9PT0gJ3VuZGVmaW5lZCcpIHx8ICFwOF90b3VjaF9kZXRlY3RlZCkgPyAwIDogMTt9IgBAQCBkZWZhdWx0IG1peF9idWZmZXJfc2l6ZSBhZGp1c3RlZCB0byAyMDQ4IChNb2JpbGUpAGNvbmZpZy50eHQARm91bmQgY29uZmlnLnR4dAoAPgoAJTAyZCAlcwoAdmlkZW9fbW9kZQAgJWQgJWQAd2luZG93X3NpemUAc2NyZWVuX3NpemUAd2luZG93ZWQAICVkAGZvcmVncm91bmRfc2xlZXBfbXMAYmFja2dyb3VuZF9zbGVlcF9tcwBzb3VuZF92b2x1bWUAbXVzaWNfdm9sdW1lAG1peF9idWZmZXJfc2l6ZQB3aW5kaWIAb3BlbmdsX2JsaXQAc2hvd19mcHMAbGFyZ2Vfd2luZG93AGZyYW1lbGVzcwB3aW5kb3dfcG9zaXRpb24AbmV3IHdpbmRvdyBwb3NpdGlvbjogJWQsICVkCgBzZXNzaW9ucwBybWJfa2V5AGRlc2t0b3BfcGF0aABmdWxsc2NyZWVuX21ldGhvZABibGl0X21ldGhvZAByZWFkX2NvbnRyb2xsZXJzX2luX2JhY2tncm91bmQAbWFwX3NjYW5jb2RlcwAlZD0lZAA8CgB3AHNvdW5kX3ZvbHVtZSAlZCAvLyAwLi4yNTYKAG11c2ljX3ZvbHVtZSAlZCAvLyAwLi4yNTYKAC4uAH4AY29kb19zYXZlX3BuZyByZXN1bHQ6ICVkICBmaWxlOiAlcwoACkFzc2VydGlvbiBmYWlsZWQ6ICVzCgBDb3VsZCBub3QgYWxsb2NhdGUgdmVydGV4AENvdWxkIG5vdCBhbGxvY2F0ZSBib25lX3ZlcnRleABDb3VsZCBub3QgYWxsb2NhdGUgcG9seQBhY3RvciVkACAASUhEUgBQTFRFAGJLR0QAcEhZcwBJREFUAHRJTUUAelRYdABMb2RlUE5HADIwMTEwMjIxAGlUWHQAdEVYdAB0Uk5TAGNvZG9fZnJlZSBmYWlsICV4ICV4CgAlMDh4JTA4eCUwOHglMDh4JTA4eAAie3JldHVybiBkb2N1bWVudC5oaWRkZW4gPyAxIDogMDt9IgBjb2RvX3NvdW5kX2luaXQgbWl4X2J1ZmZlcl9zaXplOiAlZAoAY29kb19zZXRfc2NyZWVuICVkICVkICVkICV4CgByZXRyaWV2aW5nIGRlc2t0b3AgcmVzb2x1dGlvbjogJWQgJWQKACB3aW5kb3cgc2l6ZTogJWQgJWQKACBkZXNrdG9wIHNpemU6ICVkICVkCgBvawoAJVktJW0tJWQgJUg6JU06JVMAJXMvJXMAKgAlZC0lZC0lZCAlZDolZDolZABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAMQAyADMANAA1ADYANwA4ADkAMABSZXR1cm4ARXNjYXBlAEJhY2tzcGFjZQBUYWIAU3BhY2UALQA9AFsAXQBTbGFzaAAjADsAJwBgACwALwBDYXBzTG9jawBGMQBGMgBGMwBGNABGNQBGNgBGNwBGOABGOQBGMTAARjExAEYxMgBQcmludFNjcmVlbgBTY3JvbGxMb2NrAFBhdXNlAEluc2VydABIb21lAFBhZ2VVcABEZWxldGUARW5kAFBhZ2VEb3duAFJpZ2h0AExlZnQARG93bgBVcABOdW1sb2NrAEtleXBhZCAvAEtleXBhZCAqAEtleXBhZCAtAEtleXBhZCArAEtleXBhZCBFbnRlcgBLZXlwYWQgMQBLZXlwYWQgMgBLZXlwYWQgMwBLZXlwYWQgNABLZXlwYWQgNQBLZXlwYWQgNgBLZXlwYWQgNwBLZXlwYWQgOABLZXlwYWQgOQBLZXlwYWQgMABLZXlwYWQgLgBBcHBsaWNhdGlvbgBQb3dlcgBLZXlwYWQgPQBGMTMARjE0AEYxNQBGMTYARjE3AEYxOABGMTkARjIwAEYyMQBGMjIARjIzAEYyNABFeGVjdXRlAEhlbHAATWVudQBTZWxlY3QAU3RvcABBZ2FpbgBVbmRvAEN1dABDb3B5AFBhc3RlAEZpbmQATXV0ZQBWb2x1bWVVcABWb2x1bWVEb3duAEtleXBhZCAsAEtleXBhZCA9IChBUzQwMCkAQWx0RXJhc2UAU3lzUmVxAENhbmNlbABDbGVhcgBQcmlvcgBTZXBhcmF0b3IAT3V0AE9wZXIAQ2xlYXIgLyBBZ2FpbgBDclNlbABFeFNlbABLZXlwYWQgMDAAS2V5cGFkIDAwMABUaG91c2FuZHNTZXBhcmF0b3IARGVjaW1hbFNlcGFyYXRvcgBDdXJyZW5jeVVuaXQAQ3VycmVuY3lTdWJVbml0AEtleXBhZCAoAEtleXBhZCApAEtleXBhZCB7AEtleXBhZCB9AEtleXBhZCBUYWIAS2V5cGFkIEJhY2tzcGFjZQBLZXlwYWQgQQBLZXlwYWQgQgBLZXlwYWQgQwBLZXlwYWQgRABLZXlwYWQgRQBLZXlwYWQgRgBLZXlwYWQgWE9SAEtleXBhZCBeAEtleXBhZCAlAEtleXBhZCA8AEtleXBhZCA+AEtleXBhZCAmAEtleXBhZCAmJgBLZXlwYWQgfABLZXlwYWQgfHwAS2V5cGFkIDoAS2V5cGFkICMAS2V5cGFkIFNwYWNlAEtleXBhZCBAAEtleXBhZCAhAEtleXBhZCBNZW1TdG9yZQBLZXlwYWQgTWVtUmVjYWxsAEtleXBhZCBNZW1DbGVhcgBLZXlwYWQgTWVtQWRkAEtleXBhZCBNZW1TdWJ0cmFjdABLZXlwYWQgTWVtTXVsdGlwbHkAS2V5cGFkIE1lbURpdmlkZQBLZXlwYWQgKy8tAEtleXBhZCBDbGVhcgBLZXlwYWQgQ2xlYXJFbnRyeQBLZXlwYWQgQmluYXJ5AEtleXBhZCBPY3RhbABLZXlwYWQgRGVjaW1hbABLZXlwYWQgSGV4YWRlY2ltYWwATGVmdCBDdHJsAExlZnQgU2hpZnQATGVmdCBBbHQATGVmdCBHVUkAUmlnaHQgQ3RybABSaWdodCBTaGlmdABSaWdodCBBbHQAUmlnaHQgR1VJAE1vZGVTd2l0Y2gAQXVkaW9OZXh0AEF1ZGlvUHJldgBBdWRpb1N0b3AAQXVkaW9QbGF5AEF1ZGlvTXV0ZQBNZWRpYVNlbGVjdABXV1cATWFpbABDYWxjdWxhdG9yAENvbXB1dGVyAEFDIFNlYXJjaABBQyBIb21lAEFDIEJhY2sAQUMgRm9yd2FyZABBQyBTdG9wAEFDIFJlZnJlc2gAQUMgQm9va21hcmtzAEJyaWdodG5lc3NEb3duAEJyaWdodG5lc3NVcABEaXNwbGF5U3dpdGNoAEtCRElsbHVtVG9nZ2xlAEtCRElsbHVtRG93bgBLQkRJbGx1bVVwAEVqZWN0AFNsZWVwAEFwcDEAQXBwMgBBdWRpb1Jld2luZABBdWRpb0Zhc3RGb3J3YXJkAFVuYWJsZSB0byBpbml0aWFsaXplIFNETABpZiAodHlwZW9mIGNvZG9fa2V5X2J1ZmZlciA9PT0gJ3VuZGVmaW5lZCcpIGNvZG9fa2V5X2J1ZmZlciA9IFtdOyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgeyB2YXIgdmFsID0gLTE7IGlmIChlLmtleS5sZW5ndGggPT0gMSkgeyB2YWwgPSBlLmtleS5jaGFyQ29kZUF0KDApOyB9IGVsc2UgeyBpZiAoZS5rZXkgPT0gIlRhYiIpIHZhbCA9IDk7IGlmIChlLmtleSA9PSAiRW50ZXIiKSB2YWwgPSAxMzsgaWYgKGUua2V5ID09ICJCYWNrc3BhY2UiKSB2YWwgPSA4OyBpZiAoZS5rZXkgPT0gIkVzY2FwZSIpIHZhbCA9IDI3OyBpZiAodmFsID09IC0xKXsgfSB9IHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RvX3RleHRhcmVhIik7IGNvZG9fa2V5X2J1ZmZlci5wdXNoKHZhbCk7IH0pOwB2YXIgX2NvZG9fdGV4dF92YWx1ZSA9ICIiOyB2YXIgX2NvZG9fc3RyX291dCA9ICIiOyB2YXIgY29kb193aGVlbF9keCA9IDA7IHZhciBjb2RvX3doZWVsX2R5ID0gMDsgYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZnVuY3Rpb24oZXZlbnQpeyBpZiAodHlwZW9mIHBpY284X3N0YXRlICE9PSAndW5kZWZpbmVkJykgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gImNhbnZhcyIpIHsgcGljbzhfc3RhdGUuY2xpY2tlZF9vdXRzaWRlID0gdHJ1ZTsgfSB9KTsAZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBmdW5jdGlvbihlKXsgZHggPSBlLmRlbHRhWDsgaWYgKGR4IDwgMCkgZHggPSAtMTsgaWYgKGR4ID4gMCkgZHggPSAxOyBpZiAoZS5kZWx0YU1vZGUgPT0gMikgZHggKj0gNDsgaWYgKHR5cGVvZiBjb2RvX3doZWVsX2R4ICE9PSAndW5kZWZpbmVkJykgY29kb193aGVlbF9keCAtPSBkeDsgZHkgPSBlLmRlbHRhWTsgaWYgKGR5IDwgMCkgZHkgPSAtMTsgaWYgKGR5ID4gMCkgZHkgPSAxOyBpZiAoZS5kZWx0YU1vZGUgPT0gMikgZHkgKj0gNDsgaWYgKHR5cGVvZiBjb2RvX3doZWVsX2R5ICE9PSAndW5kZWZpbmVkJykgY29kb193aGVlbF9keSAtPSBkeTsgfSk7AAoKKiogRkFUQUwgRVJST1I6ICVzCgoAU0RMIEVycm9yOiAlcwoAInt2YXIgcmV0ID0gMDsgaWYgKHR5cGVvZiBwaWNvOF9tb3VzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgcGljbzhfbW91c2UubGVuZ3RoID4gMCkgcmV0PTE7IHJldHVybiByZXQ7fSIAIntyZXR1cm4gcGljbzhfbW91c2VbMF19IgAie3JldHVybiBwaWNvOF9tb3VzZVsxXX0iAGZ1bmN0aW9uIGF1ZGlvX2xvZyhtc2cpIHsgaWYgKHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZykgeyB3aW5kb3cuY29uc29sZS5sb2coIltjb2RvXSBhdWRpb19pbml0X3dlYmF1ZGlvICIrbXNnKTsgfSB9IGF1ZGlvX2xvZygiYXVkaW9faW5pdCIpOyB2YXIgY29kb19hdWRpb19jb250ZXh0OyBpZiAodHlwZW9mIE1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIGF1ZGlvX2xvZygiICoqKiBNb2R1bGUgdW5kZWZpbmVkIik7IGVsc2UgaWYgKHR5cGVvZiBNb2R1bGUuY2NhbGwgPT09ICd1bmRlZmluZWQnKSBhdWRpb19sb2coIiAqKioqIE1vZHVsZS5jY2FsbCB1bmRlZmluZWQiKTsgZWxzZSB7IHZhciB3ZWJBdWRpb0FQSSA9IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCB8fCB3aW5kb3cubW96QXVkaW9Db250ZXh0IHx8IHdpbmRvdy5vQXVkaW9Db250ZXh0IHx8IHdpbmRvdy5tc0F1ZGlvQ29udGV4dDsgaWYgKHdlYkF1ZGlvQVBJKSB7IGlmICh0eXBlb2YgcGljbzhfYXVkaW9fY29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHsgY29kb19hdWRpb19jb250ZXh0ID0gcGljbzhfYXVkaW9fY29udGV4dDsgYXVkaW9fbG9nKCJmb3VuZCBwaWNvOF9hdWRpb19jb250ZXh0Iik7IH0gZWxzZSBpZiAodHlwZW9mIHZveGF0cm9uX2F1ZGlvX2NvbnRleHQgIT09ICd1bmRlZmluZWQnKSB7IGNvZG9fYXVkaW9fY29udGV4dCA9IHZveGF0cm9uX2F1ZGlvX2NvbnRleHQ7IGF1ZGlvX2xvZygiZm91bmQgdm94YXRyb25fYXVkaW9fY29udGV4dCIpOyB9IGVsc2UgeyBjb2RvX2F1ZGlvX2NvbnRleHQgPSBuZXcgd2ViQXVkaW9BUEk7IGF1ZGlvX2xvZygiY3JlYXRpbmcgb3duIGF1ZGlvIGNvbnRleHQiKTsgfSBpZiAoY29kb19hdWRpb19jb250ZXh0KSB7IGF1ZGlvX2xvZygiU2FtcGxlIFJhdGU6ICIrY29kb19hdWRpb19jb250ZXh0LnNhbXBsZVJhdGUpOyBhdWRpb19sb2coIkJ1ZmZlciBTaXplOiAiKyQwKTsgbm9kZSA9IGNvZG9fYXVkaW9fY29udGV4dC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IoJDAsIDEsIDEpOyBub2RlLm9uYXVkaW9wcm9jZXNzID0gZnVuY3Rpb24oZSkgeyB2YXIgZGF0YSA9IGUub3V0cHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApOyB2YXIgciA9IDIyMDUwLjAgLyBjb2RvX2F1ZGlvX2NvbnRleHQuc2FtcGxlUmF0ZTsgdmFyIGxlbjAgPSBNYXRoLmZsb29yKGRhdGEubGVuZ3RoICogcik7IHZhciBsZW4xID0gZGF0YS5sZW5ndGg7IHZhciBwdHIgPSBNb2R1bGUuY2NhbGwoJ21peF8wJywgJ251bWJlcicsIFsnbnVtYmVyJywnbnVtYmVyJ10sIFtsZW4wLCBsZW4xXSk7IGZvciAodmFyIGogPSAwOyBqIDwgZGF0YS5sZW5ndGg7IGorKykgZGF0YVtqXSA9IE1vZHVsZS5nZXRWYWx1ZShwdHIgKyBqKjIsICdpMTYnKSAvIDB4ODAwMDsgfTsgbm9kZS5jb25uZWN0KGNvZG9fYXVkaW9fY29udGV4dC5kZXN0aW5hdGlvbik7IH0gZWxzZSB7IGF1ZGlvX2xvZygiKiogZmFpbGVkIHRvIGNyZWF0ZSBjb2RvX2F1ZGlvX2NvbnRleHQiKTsgfSB9IGVsc2UgeyBhdWRpb19sb2coIioqIHdlYkF1ZGlvQVBJIG5vdCBmb3VuZCIpOyB9IH0AIntyZXR1cm4gZG9jdW1lbnQucG9pbnRlckxvY2tFbGVtZW50ID8gMSA6IDA7fSIAImlmICh0eXBlb2YgY29kb19rZXlfYnVmZmVyID09PSAndW5kZWZpbmVkJykgY29kb19rZXlfYnVmZmVyID0gW107IHJldHVybiBjb2RvX2tleV9idWZmZXIubGVuZ3RoID4gMCA/IDEgOiAwOyIAImlmICh0eXBlb2YgY29kb19rZXlfYnVmZmVyID09PSAndW5kZWZpbmVkJykgY29kb19rZXlfYnVmZmVyID0gW107IGxldCB2YWwgPSBjb2RvX2tleV9idWZmZXIuc2hpZnQoKSB8IDA7IHJldHVybiB2YWw7IgAie3RlbXAgPSAodHlwZW9mIGNvZG9fd2hlZWxfZHggIT09ICd1bmRlZmluZWQnKSA/IGNvZG9fd2hlZWxfZHg6MDsgY29kb193aGVlbF9keCA9IDA7IHJldHVybiB0ZW1wO30iACJ7dGVtcCA9ICh0eXBlb2YgY29kb193aGVlbF9keSAhPT0gJ3VuZGVmaW5lZCcpID8gY29kb193aGVlbF9keTowOyBjb2RvX3doZWVsX2R5ID0gMDsgcmV0dXJuIHRlbXA7fSIAInsgaWYgKGRvY3VtZW50LmhpZGRlbikgcmV0dXJuIDA7IGVsID0gKHR5cGVvZiBjb2RvX3RleHRhcmVhID09PSAndW5kZWZpbmVkJykgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvZG9fdGV4dGFyZWFcIikgOiBjb2RvX3RleHRhcmVhOyBpZiAoZWwgJiYgZWwgPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgcmV0dXJuIDE7IGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsgcmV0dXJuICghZWwgfHwgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSBcImlucHV0XCIgJiYgZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9IFwidGV4dGFyZWFcIikpOyB9IgAieyBpZiAoKHR5cGVvZiBwaWNvOF9zdGF0ZSkgIT09ICd1bmRlZmluZWQnKSBpZiAocGljbzhfc3RhdGUuY2xpY2tlZF9vdXRzaWRlKSB7IHBpY284X3N0YXRlLmNsaWNrZWRfb3V0c2lkZSA9IGZhbHNlOyByZXR1cm4gMTsgfSByZXR1cm4gMDsgfSIAZWwgPSAodHlwZW9mIGNvZG9fdGV4dGFyZWEgPT09ICd1bmRlZmluZWQnKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RvX3RleHRhcmVhIikgOiBjb2RvX3RleHRhcmVhOyBpZiAoZWwgJiYgZWwuc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsgZWwuZm9jdXMoKTsgZWwuc2VsZWN0KCk7IH0AZWwgPSAodHlwZW9mIGNvZG9fdGV4dGFyZWEgPT09ICd1bmRlZmluZWQnKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RvX3RleHRhcmVhIikgOiBjb2RvX3RleHRhcmVhOyBpZiAoZWwgJiYgZWwuc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsgZWwuc2VsZWN0KCk7IH0AIntyZXR1cm4gcGljbzhfbW91c2VbMl19IgAvdXNlcl9kYXRhLyVzACJ7dmFyIHZhbD0wOyBpZiAodHlwZW9mIGNvZG9fbW91bnRlZF9maWxlc3lzdGVtICE9PSAndW5kZWZpbmVkJykgdmFsPTE7IHJldHVybiB2YWw7fSIAQEAgY29kb19ta2RpciBmYWlsZWQ7IGZpbGVzeXN0ZW0gbm90IG1vdW50ZWQAX2Rpcl9uYW1lPSIiOwB7X2Rpcl9uYW1lPV9kaXJfbmFtZStTdHJpbmcuZnJvbUNoYXJDb2RlKCQwKTt9AEZTLmNyZWF0ZVBhdGgoIiIsIF9kaXJfbmFtZSwgdHJ1ZSwgdHJ1ZSk7AFtjb2RvXSBleGl0aW5nIHBvaW50ZXIgbG9jawB7TW9kdWxlWydjYW52YXMnXS5leGl0UG9pbnRlckxvY2soKTt9AEBAIGNvZG9fd2dldF9vbmVycm9yOiAlcwoAZWwgPSAodHlwZW9mIGNvZG9fdGV4dGFyZWEgPT09ICd1bmRlZmluZWQnKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RvX3RleHRhcmVhIikgOiBjb2RvX3RleHRhcmVhOyBpZiAoZWwpIHsgfQBfY29kb19zdHJfb3V0PSIiOwB7IF9jb2RvX3N0cl9vdXQgPSBNb2R1bGUuVVRGOFRvU3RyaW5nKCQwLCAkMSk7IH0AInsgZWwgPSAodHlwZW9mIGNvZG9fdGV4dGFyZWEgPT09ICd1bmRlZmluZWQnKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29kb190ZXh0YXJlYVwiKSA6IGNvZG9fdGV4dGFyZWE7IGlmIChlbCkgeyBlbC52YWx1ZSA9IF9jb2RvX3N0cl9vdXQ7IHJldHVybiAwOyB9IGVsc2UgcmV0dXJuIDE7IH0iAGVsID0gKHR5cGVvZiBjb2RvX3RleHRhcmVhID09PSAndW5kZWZpbmVkJykgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kb190ZXh0YXJlYSIpIDogY29kb190ZXh0YXJlYTsgaWYgKGVsICYmIGVsLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiICYmICgodHlwZW9mIHA4X3RvdWNoX2RldGVjdGVkID09PSAndW5kZWZpbmVkJykgfHwgIXA4X3RvdWNoX2RldGVjdGVkKSkgeyBlbC5zdHlsZS5kaXNwbGF5ID0gIiI7IGVsLmZvY3VzKCk7IGVsLnNlbGVjdCgpOyB9AHsgTW9kdWxlLnN0cmluZ1RvVVRGOChfY29kb190ZXh0X3ZhbHVlLCAkMCwgJDEpOyB9ACJlbCA9ICh0eXBlb2YgY29kb190ZXh0YXJlYSA9PT0gJ3VuZGVmaW5lZCcpID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb2RvX3RleHRhcmVhXCIpIDogY29kb190ZXh0YXJlYTsgaWYgKGVsICYmIGVsLnN0eWxlLmRpc3BsYXkgIT0gXCJub25lXCIgJiYgZWwudmFsdWUgIT0gXCJcIikgeyBfY29kb190ZXh0X3ZhbHVlID0gZWwudmFsdWU7IHJldHVybiAxOyB9IHJldHVybiAwOyIAJXMlcwBwaWNvLTggY2FydHJpZGdlAHZlcnNpb24gJWQAIyNlbmRfcDgAX19sdWFfXwBfX2dmeF9fAF9fZ2ZmX18AX19tYXBfXwBfX3NmeF9fAF9fbXVzaWNfXwBfX2xhYmVsX18AX19jaGFuZ2VfbWFza19fAF9fbWV0YToAJTAyeCUwMnglMDJ4JTAyeAAlMDJ4JTF4JTF4JTF4ACUwMnggAAoAcgBwaWNvLTggY2FydHJpZGdlIC8vIGh0dHA6Ly93d3cucGljby04LmNvbQoAdmVyc2lvbiAlZAoAX19sdWFfXwoAX19nZnhfXwoAJXgAX19sYWJlbF9fCgBfX2dmZl9fCgAlMDJ4AF9fbWFwX18KAF9fc2Z4X18KACUwMngleCV4JXgAX19tdXNpY19fCgAlMDJ4JTAyeCUwMnglMDJ4CgBfX2NoYW5nZV9tYXNrX18KAHdiAGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5XwBAJSQAI14/ACgpe31bXTw+ACFAIyQlXiYqOjsuLH49Ky0vXGAnIgAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAAAQIEBwMGBQBpbmZpbml0eQBuYW4AcndhAC4=";var tempDoublePtr=3145120;function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){lockPointer=false;console.log("forcing lockPointer to false");Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=false;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};canvas.exitFullscreen=canvas.exitFullscreen.bind(document);Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=event.wheelDelta;break;case"wheel":delta=event["deltaY"];break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h1)return 0;if(!surfData.buffer){surfData.buffer=_malloc(surfData.width*surfData.height*4);HEAP32[surf+20>>2]=surfData.buffer}HEAP32[surf+20>>2]=surfData.buffer;if(surf==SDL.screen&&Module.screenIsReadOnly&&surfData.image)return 0;if(SDL.defaults.discardOnLock){if(!surfData.image){surfData.image=surfData.ctx.createImageData(surfData.width,surfData.height)}if(!SDL.defaults.opaqueFrontBuffer)return}else{surfData.image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height)}if(surf==SDL.screen&&SDL.defaults.opaqueFrontBuffer){var data=surfData.image.data;var num=data.length;for(var i=0;i>2],y:HEAP32[rect+4>>2],w:HEAP32[rect+8>>2],h:HEAP32[rect+12>>2]}},updateRect:function(rect,r){HEAP32[rect>>2]=r.x;HEAP32[rect+4>>2]=r.y;HEAP32[rect+8>>2]=r.w;HEAP32[rect+12>>2]=r.h},intersectionOfRects:function(first,second){var leftX=Math.max(first.x,second.x);var leftY=Math.max(first.y,second.y);var rightX=Math.min(first.x+first.w,second.x+second.w);var rightY=Math.min(first.y+first.h,second.y+second.h);return{x:leftX,y:leftY,w:Math.max(leftX,rightX)-leftX,h:Math.max(leftY,rightY)-leftY}},checkPixelFormat:function(fmt){},loadColorToCSSRGB:function(color){var rgba=HEAP32[color>>2];return"rgb("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+")"},loadColorToCSSRGBA:function(color){var rgba=HEAP32[color>>2];return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>24&255)/255+")"},translateColorToCSSRGBA:function(rgba){return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>>24)/255+")"},translateRGBAToCSSRGBA:function(r,g,b,a){return"rgba("+(r&255)+","+(g&255)+","+(b&255)+","+(a&255)/255+")"},translateRGBAToColor:function(r,g,b,a){return r|g<<8|b<<16|a<<24},makeSurface:function(width,height,flags,usePageCanvas,source,rmask,gmask,bmask,amask){flags=flags||0;var is_SDL_HWSURFACE=flags&1;var is_SDL_HWPALETTE=flags&2097152;var is_SDL_OPENGL=flags&67108864;var surf=_malloc(60);var pixelFormat=_malloc(44);var bpp=is_SDL_HWPALETTE?1:4;var buffer=0;if(!is_SDL_HWSURFACE&&!is_SDL_OPENGL){buffer=_malloc(width*height*4)}HEAP32[surf>>2]=flags;HEAP32[surf+4>>2]=pixelFormat;HEAP32[surf+8>>2]=width;HEAP32[surf+12>>2]=height;HEAP32[surf+16>>2]=width*bpp;HEAP32[surf+20>>2]=buffer;HEAP32[surf+36>>2]=0;HEAP32[surf+40>>2]=0;HEAP32[surf+44>>2]=Module["canvas"].width;HEAP32[surf+48>>2]=Module["canvas"].height;HEAP32[surf+56>>2]=1;HEAP32[pixelFormat>>2]=-2042224636;HEAP32[pixelFormat+4>>2]=0;HEAP8[pixelFormat+8>>0]=bpp*8;HEAP8[pixelFormat+9>>0]=bpp;HEAP32[pixelFormat+12>>2]=rmask||255;HEAP32[pixelFormat+16>>2]=gmask||65280;HEAP32[pixelFormat+20>>2]=bmask||16711680;HEAP32[pixelFormat+24>>2]=amask||4278190080;SDL.GL=SDL.GL||is_SDL_OPENGL;var canvas;if(!usePageCanvas){if(SDL.canvasPool.length>0){canvas=SDL.canvasPool.pop()}else{canvas=document.createElement("canvas")}canvas.width=width;canvas.height=height}else{canvas=Module["canvas"]}var webGLContextAttributes={antialias:SDL.glAttributes[13]!=0&&SDL.glAttributes[14]>1,depth:SDL.glAttributes[6]>0,stencil:SDL.glAttributes[7]>0,alpha:SDL.glAttributes[3]>0};var ctx=Browser.createContext(canvas,is_SDL_OPENGL,usePageCanvas,webGLContextAttributes);SDL.surfaces[surf]={width:width,height:height,canvas:canvas,ctx:ctx,surf:surf,buffer:buffer,pixelFormat:pixelFormat,alpha:255,flags:flags,locked:0,usePageCanvas:usePageCanvas,source:source,isFlagSet:function(flag){return flags&flag}};return surf},copyIndexedColorData:function(surfData,rX,rY,rW,rH){if(!surfData.colors){return}var fullWidth=Module["canvas"].width;var fullHeight=Module["canvas"].height;var startX=rX||0;var startY=rY||0;var endX=(rW||fullWidth-startX)+startX;var endY=(rH||fullHeight-startY)+startY;var buffer=surfData.buffer;if(!surfData.image.data32){surfData.image.data32=new Uint32Array(surfData.image.data.buffer)}var data32=surfData.image.data32;var colors32=surfData.colors32;for(var y=startY;y>0]]}}},freeSurface:function(surf){var refcountPointer=surf+56;var refcount=HEAP32[refcountPointer>>2];if(refcount>1){HEAP32[refcountPointer>>2]=refcount-1;return}var info=SDL.surfaces[surf];if(!info.usePageCanvas&&info.canvas)SDL.canvasPool.push(info.canvas);if(info.buffer)_free(info.buffer);_free(info.pixelFormat);_free(surf);SDL.surfaces[surf]=null;if(surf===SDL.screen){SDL.screen=null}},blitSurface:function(src,srcrect,dst,dstrect,scale){var srcData=SDL.surfaces[src];var dstData=SDL.surfaces[dst];var sr,dr;if(srcrect){sr=SDL.loadRect(srcrect)}else{sr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstrect){dr=SDL.loadRect(dstrect)}else{dr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstData.clipRect){var widthScale=!scale||sr.w===0?1:sr.w/dr.w;var heightScale=!scale||sr.h===0?1:sr.h/dr.h;dr=SDL.intersectionOfRects(dstData.clipRect,dr);sr.w=dr.w*widthScale;sr.h=dr.h*heightScale;if(dstrect){SDL.updateRect(dstrect,dr)}}var blitw,blith;if(scale){blitw=dr.w;blith=dr.h}else{blitw=sr.w;blith=sr.h}if(sr.w===0||sr.h===0||blitw===0||blith===0){return 0}var oldAlpha=dstData.ctx.globalAlpha;dstData.ctx.globalAlpha=srcData.alpha/255;dstData.ctx.drawImage(srcData.canvas,sr.x,sr.y,sr.w,sr.h,dr.x,dr.y,blitw,blith);dstData.ctx.globalAlpha=oldAlpha;if(dst!=SDL.screen){warnOnce("WARNING: copying canvas data to memory for compatibility");_SDL_LockSurface(dst);dstData.locked--}return 0},downFingers:{},savedKeydown:null,receiveEvent:function(event){function unpressAllPressedKeys(){for(var code in SDL.keyboardMap){SDL.events.push({type:"keyup",keyCode:SDL.keyboardMap[code]})}}switch(event.type){case"touchstart":case"touchmove":{event.preventDefault();var touches=[];if(event.type==="touchstart"){for(var i=0;i0?Math.max(delta,1):Math.min(delta,-1);var button=delta>0?3:4;SDL.events.push({type:"mousedown",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"mouseup",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"wheel",deltaX:0,deltaY:delta});event.preventDefault();break;case"mousemove":if(SDL.DOMButtons[0]===1){SDL.events.push({type:"touchmove",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}if(Browser.pointerLock){if("mozMovementX"in event){event["movementX"]=event["mozMovementX"];event["movementY"]=event["mozMovementY"]}if(event["movementX"]==0&&event["movementY"]==0){event.preventDefault();return}}case"keydown":case"keyup":case"keypress":case"mousedown":case"mouseup":if(event.type!=="keydown"||!SDL.unicode&&!SDL.textInput||(event.keyCode===8||event.keyCode===9)){}if(event.type=="mousedown"){SDL.DOMButtons[event.button]=1;SDL.events.push({type:"touchstart",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}else if(event.type=="mouseup"){if(!SDL.DOMButtons[event.button]){return}SDL.events.push({type:"touchend",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}});SDL.DOMButtons[event.button]=0}if(event.type==="keydown"||event.type==="mousedown"){SDL.canRequestFullscreen=true}else if(event.type==="keyup"||event.type==="mouseup"){if(SDL.isRequestingFullscreen){Module["requestFullscreen"](false,true);SDL.isRequestingFullscreen=false}SDL.canRequestFullscreen=false}if(event.type==="keypress"&&SDL.savedKeydown){SDL.savedKeydown.keypressCharCode=event.charCode;SDL.savedKeydown=null}else if(event.type==="keydown"){SDL.savedKeydown=event}if(event.type!=="keypress"||SDL.textInput){SDL.events.push(event)}break;case"mouseout":for(var i=0;i<3;i++){if(SDL.DOMButtons[i]){SDL.events.push({type:"mouseup",button:i,pageX:event.pageX,pageY:event.pageY});SDL.DOMButtons[i]=0}}event.preventDefault();break;case"focus":SDL.events.push(event);event.preventDefault();break;case"blur":SDL.events.push(event);unpressAllPressedKeys();event.preventDefault();break;case"visibilitychange":SDL.events.push({type:"visibilitychange",visible:!document.hidden});unpressAllPressedKeys();event.preventDefault();break;case"unload":if(Browser.mainLoop.runner){SDL.events.push(event);Browser.mainLoop.runner()}return;case"resize":SDL.events.push(event);if(event.preventDefault){event.preventDefault()}break}if(SDL.events.length>=1e4){err("SDL event queue full, dropping events");SDL.events=SDL.events.slice(0,1e4)}SDL.flushEventsToHandler();return},lookupKeyCodeForEvent:function(event){var code=event.keyCode;if(code>=65&&code<=90){code+=32}else{code=SDL.keyCodes[event.keyCode]||event.keyCode;if(event.location===KeyboardEvent.DOM_KEY_LOCATION_RIGHT&&code>=(224|1<<10)&&code<=(227|1<<10)){code+=4}}return code},handleEvent:function(event){if(event.handled)return;event.handled=true;switch(event.type){case"touchstart":case"touchend":case"touchmove":{Browser.calculateMouseEvent(event);break}case"keydown":case"keyup":{var down=event.type==="keydown";var code=SDL.lookupKeyCodeForEvent(event);HEAP8[SDL.keyboardState+code>>0]=down;SDL.modState=(HEAP8[SDL.keyboardState+1248>>0]?64:0)|(HEAP8[SDL.keyboardState+1249>>0]?1:0)|(HEAP8[SDL.keyboardState+1250>>0]?256:0)|(HEAP8[SDL.keyboardState+1252>>0]?128:0)|(HEAP8[SDL.keyboardState+1253>>0]?2:0)|(HEAP8[SDL.keyboardState+1254>>0]?512:0);if(down){SDL.keyboardMap[code]=event.keyCode}else{delete SDL.keyboardMap[code]}break}case"mousedown":case"mouseup":if(event.type=="mousedown"){SDL.buttonState|=1<0){if(SDL.makeCEvent(SDL.events.shift(),ptr)!==false)return 1}return 0}else{return SDL.events.length>0}},makeCEvent:function(event,ptr){if(typeof event==="number"){_memcpy(ptr,event,28);_free(event);return}SDL.handleEvent(event);switch(event.type){case"keydown":case"keyup":{var down=event.type==="keydown";var key=SDL.lookupKeyCodeForEvent(event);var scan;if(key>=1024){scan=key-1024}else{scan=SDL.scanCodes[key]||key}HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+8>>0]=down?1:0;HEAP8[ptr+9>>0]=0;HEAP32[ptr+12>>2]=scan;HEAP32[ptr+16>>2]=key;HEAP16[ptr+20>>1]=SDL.modState;HEAP32[ptr+24>>2]=event.keypressCharCode||key;break}case"keypress":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];var cStr=intArrayFromString(String.fromCharCode(event.charCode));for(var i=0;i>0]=cStr[i]}break}case"mousedown":case"mouseup":case"mousemove":{if(event.type!="mousemove"){var down=event.type==="mousedown";HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP8[ptr+16>>0]=event.button+1;HEAP8[ptr+17>>0]=down?1:0;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY}else{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP32[ptr+16>>2]=SDL.buttonState;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY;HEAP32[ptr+28>>2]=Browser.mouseMovementX;HEAP32[ptr+32>>2]=Browser.mouseMovementY}break}case"wheel":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+16>>2]=event.deltaX;HEAP32[ptr+20>>2]=event.deltaY;break}case"touchstart":case"touchend":case"touchmove":{var touch=event.touch;if(!Browser.touches[touch.identifier])break;var w=Module["canvas"].width;var h=Module["canvas"].height;var x=Browser.touches[touch.identifier].x/w;var y=Browser.touches[touch.identifier].y/h;var lx=Browser.lastTouches[touch.identifier].x/w;var ly=Browser.lastTouches[touch.identifier].y/h;var dx=x-lx;var dy=y-ly;if(touch["deviceID"]===undefined)touch.deviceID=SDL.TOUCH_DEFAULT_ID;if(dx===0&&dy===0&&event.type==="touchmove")return false;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=_SDL_GetTicks();tempI64=[touch.deviceID>>>0,(tempDouble=touch.deviceID,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr+8>>2]=tempI64[0],HEAP32[ptr+12>>2]=tempI64[1];tempI64=[touch.identifier>>>0,(tempDouble=touch.identifier,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr+16>>2]=tempI64[0],HEAP32[ptr+20>>2]=tempI64[1];HEAPF32[ptr+24>>2]=x;HEAPF32[ptr+28>>2]=y;HEAPF32[ptr+32>>2]=dx;HEAPF32[ptr+36>>2]=dy;if(touch.force!==undefined){HEAPF32[ptr+40>>2]=touch.force}else{HEAPF32[ptr+40>>2]=event.type=="touchend"?0:1}break}case"unload":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];break}case"resize":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=event.w;HEAP32[ptr+8>>2]=event.h;break}case"joystick_button_up":case"joystick_button_down":{var state=event.type==="joystick_button_up"?0:1;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.button;HEAP8[ptr+6>>0]=state;break}case"joystick_axis_motion":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.axis;HEAP32[ptr+8>>2]=SDL.joystickAxisValueConversion(event.value);break}case"focus":{var SDL_WINDOWEVENT_FOCUS_GAINED=12;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_GAINED;break}case"blur":{var SDL_WINDOWEVENT_FOCUS_LOST=13;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_LOST;break}case"visibilitychange":{var SDL_WINDOWEVENT_SHOWN=1;var SDL_WINDOWEVENT_HIDDEN=2;var visibilityEventID=event.visible?SDL_WINDOWEVENT_SHOWN:SDL_WINDOWEVENT_HIDDEN;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=visibilityEventID;break}default:throw"Unhandled SDL event: "+event.type}},makeFontString:function(height,fontName){if(fontName.charAt(0)!="'"&&fontName.charAt(0)!='"'){fontName='"'+fontName+'"'}return height+"px "+fontName+", serif"},estimateTextWidth:function(fontData,text){var h=fontData.size;var fontString=SDL.makeFontString(h,fontData.name);var tempCtx=SDL.ttfContext;tempCtx.save();tempCtx.font=fontString;var ret=tempCtx.measureText(text).width|0;tempCtx.restore();return ret},allocateChannels:function(num){if(SDL.numChannels&&SDL.numChannels>=num&&num!=0)return;SDL.numChannels=num;SDL.channels=[];for(var i=0;i>1]/32768}}else if(SDL.audio.format==8){for(var j=0;j>0];channelData[j]=(v>=0?v-128:v+128)/128}}else if(SDL.audio.format==33056){for(var j=0;j>2]}}else{throw"Invalid SDL audio format "+SDL.audio.format+"!"}}},debugSurface:function(surfData){console.log("dumping surface "+[surfData.surf,surfData.source,surfData.width,surfData.height]);var image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);var data=image.data;var num=Math.min(surfData.width,surfData.height);for(var i=0;i0}},queryJoysticks:function(){for(var joystick in SDL.lastJoystickState){var state=SDL.getGamepad(joystick-1);var prevState=SDL.lastJoystickState[joystick];if(typeof state==="undefined")return;if(state===null)return;if(typeof state.timestamp!=="number"||state.timestamp!==prevState.timestamp||!state.timestamp){var i;for(i=0;ideviceIndex&&deviceIndex>=0){return gamepads[deviceIndex]}return null}};function _SDL_ClearError(){}function _SDL_GetError(){if(!SDL.errorMessage){SDL.errorMessage=allocate(intArrayFromString("unknown SDL-emscripten error"),"i8",ALLOC_NORMAL)}return SDL.errorMessage}function _SDL_GetModState(){return SDL.modState}function _SDL_GetMouseState(x,y){if(x)HEAP32[x>>2]=Browser.mouseX;if(y)HEAP32[y>>2]=Browser.mouseY;return SDL.buttonState}function _SDL_GetWindowSize(window,width,height){var w=Module["canvas"].width;var h=Module["canvas"].height;if(width)HEAP32[width>>2]=w;if(height)HEAP32[height>>2]=h}function _SDL_Init(initFlags){SDL.startTime=Date.now();SDL.initFlags=initFlags;if(!Module["doNotCaptureKeyboard"]){var keyboardListeningElement=Module["keyboardListeningElement"]||document;keyboardListeningElement.addEventListener("keydown",SDL.receiveEvent);keyboardListeningElement.addEventListener("keyup",SDL.receiveEvent);keyboardListeningElement.addEventListener("keypress",SDL.receiveEvent);window.addEventListener("focus",SDL.receiveEvent);window.addEventListener("blur",SDL.receiveEvent);document.addEventListener("visibilitychange",SDL.receiveEvent)}window.addEventListener("unload",SDL.receiveEvent);SDL.keyboardState=_malloc(65536);_memset(SDL.keyboardState,0,65536);SDL.DOMEventToSDLEvent["keydown"]=768;SDL.DOMEventToSDLEvent["keyup"]=769;SDL.DOMEventToSDLEvent["keypress"]=771;SDL.DOMEventToSDLEvent["mousedown"]=1025;SDL.DOMEventToSDLEvent["mouseup"]=1026;SDL.DOMEventToSDLEvent["mousemove"]=1024;SDL.DOMEventToSDLEvent["wheel"]=1027;SDL.DOMEventToSDLEvent["touchstart"]=1792;SDL.DOMEventToSDLEvent["touchend"]=1793;SDL.DOMEventToSDLEvent["touchmove"]=1794;SDL.DOMEventToSDLEvent["unload"]=256;SDL.DOMEventToSDLEvent["resize"]=28673;SDL.DOMEventToSDLEvent["visibilitychange"]=512;SDL.DOMEventToSDLEvent["focus"]=512;SDL.DOMEventToSDLEvent["blur"]=512;SDL.DOMEventToSDLEvent["joystick_axis_motion"]=1536;SDL.DOMEventToSDLEvent["joystick_button_down"]=1539;SDL.DOMEventToSDLEvent["joystick_button_up"]=1540;return 0}function _SDL_LockAudio(){}function _SDL_PollEvent(ptr){return SDL.pollEvent(ptr)}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i0){return}if(surfData.isFlagSet(2097152)){SDL.copyIndexedColorData(surfData)}else if(!surfData.colors){var data=surfData.image.data;var buffer=surfData.buffer;assert(buffer%4==0,"Invalid buffer offset: "+buffer);var src=buffer>>2;var dst=0;var isScreen=surf==SDL.screen;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=isScreen?255:val>>24&255;src++;dst+=4}}else{var data32=new Uint32Array(data.buffer);if(isScreen&&SDL.defaults.opaqueFrontBuffer){num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=new Uint8Array(data.buffer);var i=3;var j=i+4*num;if(num%8==0){while(i>0]*4;var start=base+x*4;data[start]=colors[val];data[start+1]=colors[val+1];data[start+2]=colors[val+2]}s+=width*3}}surfData.ctx.putImageData(surfData.image,0,0)}var ENV={};function ___buildEnvironment(environ){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=getMemory(TOTAL_ENV_SIZE);envPtr=getMemory(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[environ>>2]=envPtr}else{envPtr=HEAP32[environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in ENV){if(typeof ENV[key]==="string"){var line=key+"="+ENV[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}function ___lock(){}var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(9);dir=dirstream.path}path=PATH.join2(dir,path)}return path},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-20}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-22}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-22;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-22}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-13}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(9);return stream},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-75}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall220(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),dirp=SYSCALLS.get(),count=SYSCALLS.get();if(!stream.getdents){stream.getdents=FS.readdir(stream.path)}var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var idx=Math.floor(off/struct_size);while(idx>>0,(tempDouble=id,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-22}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-22;case 9:___setErrNo(22);return-1;default:{return-22}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-25;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-25;return 0}case 21519:{if(!stream.tty)return-25;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-25;return-22}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-25;return 0}case 21524:{if(!stream.tty)return-25;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _abort(){Module["abort"]()}function _emscripten_async_wget_data(url,arg,onload,onerror){Browser.asyncLoad(UTF8ToString(url),function(byteArray){var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer);dynCall_viii(onload,arg,buffer,byteArray.length);_free(buffer)},function(){if(onerror)dynCall_vi(onerror,arg)},true)}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _exit(status){exit(status)}var ___tm_current=3144960;var ___tm_timezone=(stringToUTF8("GMT",3145008,4),3145008);function _gmtime_r(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();HEAP32[tmPtr+36>>2]=0;HEAP32[tmPtr+32>>2]=0;var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+40>>2]=___tm_timezone;return tmPtr}function _gmtime(time){return _gmtime_r(time,___tm_current)}function _tzset(){if(_tzset.called)return;_tzset.called=true;HEAP32[__get_timezone()>>2]=(new Date).getTimezoneOffset()*60;var winter=new Date(2e3,0,1);var summer=new Date(2e3,6,1);HEAP32[__get_daylight()>>2]=Number(winter.getTimezoneOffset()!=summer.getTimezoneOffset());function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocate(intArrayFromString(winterName),"i8",ALLOC_NORMAL);var summerNamePtr=allocate(intArrayFromString(summerName),"i8",ALLOC_NORMAL);if(summer.getTimezoneOffset()>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(2e3,6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}function _localtime(time){return _localtime_r(time,___tm_current)}function _longjmp(env,value){_setThrew(env,value||1);throw"longjmp"}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]);return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){var day=new Date(date.tm_year+1900,date.tm_mon+1,date.tm_mday,0,0,0,0);return day.getDay()||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i - +
+Content here
+Content here
+Content here
+Content here
+Content here
+Content here
+Content here
+Content here
+Content here
+Content here
+Content here
+Content here
+Content here
+ +