From a36c731d15c07038633734bcb3cf2b7846ae8951 Mon Sep 17 00:00:00 2001 From: ezcGman Date: Thu, 23 Nov 2023 17:13:13 +0100 Subject: [PATCH 001/126] En-/disable LED maps when receiving realtime data --- wled00/FX.h | 3 +- wled00/FX_2Dfcn.cpp | 4 +- wled00/FX_fcn.cpp | 16 +- wled00/cfg.cpp | 2 + wled00/data/settings_sync.htm | 5 +- wled00/html_settings.h | 437 +++++++++++++++++----------------- wled00/set.cpp | 5 + wled00/wled.h | 7 +- wled00/xml.cpp | 3 +- 9 files changed, 250 insertions(+), 232 deletions(-) diff --git a/wled00/FX.h b/wled00/FX.h index c9306e80a..963471b01 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -821,7 +821,8 @@ class WS2812FX { // 96 bytes currentMilliamps, getLengthPhysical(void), getLengthTotal(void), // will include virtual/nonexistent pixels in matrix - getFps(); + getFps(), + getMappedPixelIndex(uint16_t index); inline uint16_t getFrameTime(void) { return _frametime; } inline uint16_t getMinShowDelay(void) { return MIN_SHOW_DELAY; } diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 60a7e68fd..562ee0ecd 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -164,7 +164,7 @@ void /*IRAM_ATTR*/ WS2812FX::setPixelColorXY(int x, int y, uint32_t col) #else uint16_t index = x; #endif - if (index < customMappingSize) index = customMappingTable[index]; + index = getMappedPixelIndex(index); if (index >= _length) return; busses.setPixelColor(index, col); } @@ -176,7 +176,7 @@ uint32_t WS2812FX::getPixelColorXY(uint16_t x, uint16_t y) { #else uint16_t index = x; #endif - if (index < customMappingSize) index = customMappingTable[index]; + index = getMappedPixelIndex(index); if (index >= _length) return 0; return busses.getPixelColor(index); } diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index dc4f32117..101616bfd 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -898,8 +898,7 @@ void Segment::refreshLightCapabilities() { if (start < Segment::maxWidth * Segment::maxHeight) { // we are withing 2D matrix (includes 1D segments) for (int y = startY; y < stopY; y++) for (int x = start; x < stop; x++) { - uint16_t index = x + Segment::maxWidth * y; - if (index < strip.customMappingSize) index = strip.customMappingTable[index]; // convert logical address to physical + uint16_t index = strip.getMappedPixelIndex(x + Segment::maxWidth * y); // convert logical address to physical if (index < 0xFFFFU) { if (segStartIdx > index) segStartIdx = index; if (segStopIdx < index) segStopIdx = index; @@ -1289,14 +1288,14 @@ void WS2812FX::service() { void IRAM_ATTR WS2812FX::setPixelColor(int i, uint32_t col) { - if (i < customMappingSize) i = customMappingTable[i]; + i = getMappedPixelIndex(i); if (i >= _length) return; busses.setPixelColor(i, col); } uint32_t WS2812FX::getPixelColor(uint16_t i) { - if (i < customMappingSize) i = customMappingTable[i]; + i = getMappedPixelIndex(i); if (i >= _length) return 0; return busses.getPixelColor(i); } @@ -1599,7 +1598,7 @@ void WS2812FX::setSegment(uint8_t segId, uint16_t i1, uint16_t i2, uint8_t group _queuedChangesSegId = segId; return; // queued changes are applied immediately after effect function returns } - + _segments[segId].setUp(i1, i2, grouping, spacing, offset, startY, stopY); } @@ -1875,6 +1874,13 @@ bool WS2812FX::deserializeMap(uint8_t n) { return true; } +uint16_t WS2812FX::getMappedPixelIndex(uint16_t index) { + if ((realtimeMode == REALTIME_MODE_INACTIVE || realtimeRespectLedMaps) + && index < customMappingSize) index = strip.customMappingTable[index]; // convert logical address to physical + + return index; +} + WS2812FX* WS2812FX::instance = nullptr; diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 4234d9b01..44f4fea98 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -411,6 +411,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { JsonObject if_live = interfaces["live"]; CJSON(receiveDirect, if_live["en"]); CJSON(useMainSegmentOnly, if_live[F("mso")]); + CJSON(realtimeRespectLedMaps, if_live[F("rlm")]); CJSON(e131Port, if_live["port"]); // 5568 if (e131Port == DDP_DEFAULT_PORT) e131Port = E131_DEFAULT_PORT; // prevent double DDP port allocation CJSON(e131Multicast, if_live[F("mc")]); @@ -872,6 +873,7 @@ void serializeConfig() { JsonObject if_live = interfaces.createNestedObject("live"); if_live["en"] = receiveDirect; if_live[F("mso")] = useMainSegmentOnly; + if_live[F("rlm")] = realtimeRespectLedMaps; if_live["port"] = e131Port; if_live[F("mc")] = e131Multicast; diff --git a/wled00/data/settings_sync.htm b/wled00/data/settings_sync.htm index 0a579f0f0..42b3bdc57 100644 --- a/wled00/data/settings_sync.htm +++ b/wled00/data/settings_sync.htm @@ -19,7 +19,7 @@ scE.setAttribute("type", "text/javascript"); scE.setAttribute("async", async); d.body.appendChild(scE); - // success event + // success event scE.addEventListener("load", () => { //console.log("File loaded"); GetV();SetVal(); @@ -145,7 +145,8 @@ Make this instance discoverable:

Realtime

Receive UDP realtime:
-Use main segment only:

+Use main segment only:
+Respect LED Maps:

Network DMX input
Type: -
- - - - - - - -
-
-
-

Quick Load

-
-
- -
-

Solid color

-
-
-
-
-
-
-

-
-
-
-
-
R
-
-
- -
- -
-
- -
- -
-

-
-
- -
- -
-
-
-
-

RGB channels

-
-
- -
-
-

-
-
- -
-
-

-
-
- -
-
-

-
-
-

White channel

-
- -
-
-
-
-

White balance

-
- -
-
-
-
- -
-

Color slots

- -
- -
-
-
- -
-

Presets

-
- - - -
-
-
- -
-

Effect

-
- -
- -
-
- -
-
- -
- -
-
- -
-
-
Solid
-
Default
-
-
- - - -
-
- -
-
-
-
- - - -
-
- -
-
-
-
-
-
-
- -
-
-
- - - - - -
- - + + \ No newline at end of file diff --git a/wled00/data/simple.js b/wled00/data/simple.js index b35d1b624..417626b21 100644 --- a/wled00/data/simple.js +++ b/wled00/data/simple.js @@ -1,1459 +1,119 @@ -//page js +/* +This file creates the simple UI by fetching the default UI and modifying it. +*/ + var loc = false, locip, locproto = "http:"; -var noNewSegs = false; -var isOn = false, isInfo = false, isNodes = false, isRgbw = false, cct = false; -var whites = [0,0,0]; -var selColors; -var powered = [true]; -var selectedFx = 0; -var selectedPal = 0; -var csel = 0; -var currentPreset = -1; -var lastUpdate = 0; -var segCount = 0, ledCount = 0, lowestUnused = 0, maxSeg = 0, lSeg = 0; -var tr = 7; -var d = document; -var palettesData; -var fxdata = []; -var pJson = {}, eJson = {}, lJson = {}; -var pN = "", pI = 0, pNum = 0; -var pmt = 1, pmtLS = 0, pmtLast = 0; -var lastinfo = {}; -var ws, cpick, ranges; -var cfg = { - theme:{base:"dark", bg:{url:""}, alpha:{bg:0.6,tab:0.8}, color:{bg:""}}, - comp :{colors:{picker: true, rgb: false, quick: true, hex: false}, labels:true, pcmbot:false, pid:true, seglen:false} -}; -var hol = [ - [0,11,24,4,"https://aircoookie.github.io/xmas.png"], // christmas - [0,2,17,1,"https://images.alphacoders.com/491/491123.jpg"], // st. Patrick's day - [2022,3,17,2,"https://aircoookie.github.io/easter.png"], - [2023,3,9,2,"https://aircoookie.github.io/easter.png"], - [2024,2,31,2,"https://aircoookie.github.io/easter.png"] -]; - -function handleVisibilityChange() {if (!d.hidden && new Date () - lastUpdate > 3000) requestJson();} -function sCol(na, col) {d.documentElement.style.setProperty(na, col);} -function gId(c) {return d.getElementById(c);} -function gEBCN(c) {return d.getElementsByClassName(c);} -function isEmpty(o) {return Object.keys(o).length === 0;} -function isObj(i) { return (i && typeof i === 'object' && !Array.isArray(i)); } - -function applyCfg() -{ - cTheme(cfg.theme.base === "light"); - var bg = cfg.theme.color.bg; - if (bg) sCol('--c-1', bg); - var ccfg = cfg.comp.colors; - //gId('picker').style.display = "none"; // ccfg.picker ? "block":"none"; - //gId('vwrap').style.display = "none"; // ccfg.picker ? "block":"none"; - //gId('rgbwrap').style.display = ccfg.rgb ? "block":"none"; - gId('qcs-w').style.display = ccfg.quick ? "block":"none"; - var l = cfg.comp.labels; //l = false; - var e = d.querySelectorAll('.tab-label'); - for (var i=0; i { - var a = parseFloat(cfg.theme.alpha.bg); - if (isNaN(a)) a = 0.6; - bg.style.opacity = a; - bg.style.backgroundImage = `url(${img.src})`; - img = null; - }); -} - -function loadSkinCSS(cId) -{ - if (!gId(cId)) // check if element exists - { - var h = document.getElementsByTagName('head')[0]; - var l = document.createElement('link'); - l.id = cId; - l.rel = 'stylesheet'; - l.type = 'text/css'; - l.href = getURL('/skin.css'); - l.media = 'all'; - h.appendChild(l); +} else { + // detect reverse proxy + let paths = window.location.pathname.slice(1, window.location.pathname.endsWith('/') ? -1 : undefined).split("/"); + if (paths.length > 2) { + locproto = window.location.protocol; + loc = true; + locip = window.location.hostname + (window.location.port ? ":" + window.location.port : "") + "/" + paths[0]; } } function getURL(path) { return (loc ? locproto + "//" + locip : "") + path; } -async function onLoad() -{ - let l = window.location; - if (l.protocol == "file:") { - loc = true; - locip = localStorage.getItem('locIp'); - if (!locip) { - locip = prompt("File Mode. Please enter WLED IP!"); - localStorage.setItem('locIp', locip); - } - } else { - // detect reverse proxy and/or HTTPS - let pathn = l.pathname; - let paths = pathn.slice(1,pathn.endsWith('/')?-1:undefined).split("/"); - if (paths[0]==="sliders") paths.shift(); - //while (paths[0]==="") paths.shift(); - locproto = l.protocol; - locip = l.hostname + (l.port ? ":" + l.port : ""); - if (paths.length > 0 && paths[0]!=="") { - loc = true; - locip += "/" + paths.join('/'); - } else if (locproto==="https:") { - loc = true; - } - } - var sett = localStorage.getItem('wledUiCfg'); - if (sett) cfg = mergeDeep(cfg, JSON.parse(sett)); - makeWS(); +// fetch default UI and modify it +fetch(getURL("/index.htm")) + .then(response => response.text()) + .then(data => { + let parser = new DOMParser(); + let doc = parser.parseFromString(data, 'text/html'); + // patch simple ui + simplifyUI(doc); - applyCfg(); - if (cfg.theme.bg.url=="" || cfg.theme.bg.url === "https://picsum.photos/1920/1080") { - var iUrl = cfg.theme.bg.url; - fetch(getURL("/holidays.json"), { - method: 'get' - }) - .then((res)=>{ - return res.json(); - }) - .then((json)=>{ - if (Array.isArray(json)) hol = json; - //TODO: do some parsing first - }) - .catch((e)=>{ - console.log("holidays.json does not contain array of holidays. Defaults loaded."); - }) - .finally(()=>{ - var today = new Date(); - for (var i=0; i=hs && today { + // create new script element + let newScript = document.createElement('script'); + // copy attributes + for (let i = 0; i < script.attributes.length; i++) { + newScript.setAttribute(script.attributes[i].name, script.attributes[i].value); } - if (iUrl !== "") loadBg(iUrl); + // copy content + newScript.innerHTML = script.innerHTML; + // replace script + script.parentNode.replaceChild(newScript, script); }); - } else - loadBg(cfg.theme.bg.url); - loadSkinCSS('skinCss'); + finalizeSimpleUI(); - var cd = gId('csl').children; - for (var i = 0; i < cd.length; i++) cd[i].style.backgroundColor = "rgb(0, 0, 0)"; - selectSlot(0); - cpick.on("input:end", ()=>{ - setColor(1); - }); - pmtLS = localStorage.getItem('wledPmt'); + }) + .catch(error => console.error('Error:', error)); - // Load initial data - loadPalettes(()=>{ - loadPalettesData(redrawPalPrev); - loadFX(()=>{ - loadFXData(); - loadPresets(()=>{ - requestJson(); - }); +// Transforms the default UI into the simple UI +function simplifyUI(doc) { + function gId(id) { + return doc.getElementById(id); + } + + // Disable PC Mode as it does not exist in simple UI + localStorage.setItem("pcm", "false"); + + // Put effects below palett list + gId("Colors").innerHTML += gId("Effects").innerHTML; + // Hide buttons in top bar + gId("buttonNl").style.display = "none"; + gId("buttonSync").style.display = "none"; + gId("buttonSr").style.display = "none"; + gId("buttonPcm").style.display = "none"; + + // Hide bottom bar + gId("bot").style.display = "none"; + doc.documentElement.style.setProperty('--bh', '0px'); + + // Hide other tabs + gId("Effects").style.display = "none"; + gId("Segments").style.display = "none"; + gId("Presets").style.display = "none"; + + // Chage height of palette list + gId("pallist").style.height = "300px"; + gId("pallist").style.overflow = "scroll"; + + // set brightness to 255 and hide slider + gId("sliderBri").value = 255; + gId("briwrap").style.display = "none"; + + // Hide filter options + gId("filters").style.display = "none"; + + /* var observer = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + if (mutation.attributeName === "class") { + let element = mutation.target; + if (element.matches("#pallist .lstI.selected")) { + element.style.top = "0px"; + } + } }); }); - - d.addEventListener("visibilitychange", handleVisibilityChange, false); - size(); - gId("cv").style.opacity=0; - var sls = d.querySelectorAll('input[type="range"]'); - for (var sl of sls) { - sl.addEventListener('touchstart', toggleBubble); - sl.addEventListener('touchend', toggleBubble); - } -} - -var timeout; -function showToast(text, error = false) -{ - if (error) gId('connind').style.backgroundColor = "var(--c-r)"; - var x = gId("toast"); - x.innerHTML = text; - x.className = error ? "error":"show"; - clearTimeout(timeout); - x.style.animation = 'none'; - timeout = setTimeout(()=>{ x.classList.remove("show"); }, 2900); - if (error) console.log(text); -} - -function showErrorToast() -{ - if (ws && ws.readyState === WebSocket.OPEN) { - // if we received a timeout force WS reconnect - ws.close(); - ws = null; - if (lastinfo.ws > -1) setTimeout(makeWS,500); - } - showToast('Connection to light failed!', true); -} - -function clearErrorToast() {gId("toast").className = gId("toast").className.replace("error", "");} - -function getRuntimeStr(rt) -{ - var t = parseInt(rt); - var days = Math.floor(t/86400); - var hrs = Math.floor((t - days*86400)/3600); - var mins = Math.floor((t - days*86400 - hrs*3600)/60); - var str = days ? (days + " " + (days == 1 ? "day" : "days") + ", ") : ""; - str += (hrs || days) ? (hrs + " " + (hrs == 1 ? "hour" : "hours")) : ""; - if (!days && hrs) str += ", "; - if (t > 59 && !days) str += mins + " min"; - if (t < 3600 && t > 59) str += ", "; - if (t < 3600) str += (t - mins*60) + " sec"; - return str; -} - -function inforow(key, val, unit = "") -{ - return `${key}${val}${unit}`; -} - -function pName(i) -{ - var n = "Preset " + i; - if (pJson && pJson[i] && pJson[i].n) n = pJson[i].n; - return n; -} - -function isPlaylist(i) -{ - return pJson[i].playlist && pJson[i].playlist.ps; -} - -function papiVal(i) -{ - if (!pJson || !pJson[i]) return ""; - var o = Object.assign({},pJson[i]); - if (o.win) return o.win; - delete o.n; delete o.p; delete o.ql; - return JSON.stringify(o); -} - -function qlName(i) -{ - if (!pJson || !pJson[i] || !pJson[i].ql) return ""; - return pJson[i].ql; -} - -function cpBck() -{ - var copyText = gId("bck"); - - copyText.select(); - copyText.setSelectionRange(0, 999999); - d.execCommand("copy"); - showToast("Copied to clipboard!"); -} - -function loadPresets(callback = null) -{ - //1st boot (because there is a callback) - if (callback && pmt == pmtLS && pmt > 0) { - //we have a copy of the presets in local storage and don't need to fetch another one - pJson = JSON.parse(localStorage.getItem("wledP")); - populatePresets(); - pmtLast = pmt; - callback(); - return; - } - - //afterwards - if (!callback && pmt == pmtLast) return; - - pmtLast = pmt; - - fetch(getURL('/presets.json'), { - method: 'get' - }) - .then(res => { - if (!res.ok) showErrorToast(); - return res.json(); - }) - .then(json => { - clearErrorToast(); - pJson = json; - populatePresets(); - }) - .catch(function (error) { - showToast(error, true); - console.log(error); - }) - .finally(()=>{ - if (callback) setTimeout(callback,99); - }); -} - -function loadPalettes(callback = null) -{ - fetch(getURL('/json/palettes'), { - method: 'get' - }) - .then(res => { - if (!res.ok) showErrorToast(); - return res.json(); - }) - .then(json => { - clearErrorToast(); - lJson = Object.entries(json); - populatePalettes(); - }) - .catch(function (error) { - showToast(error, true); - }) - .finally(()=>{ - if (callback) callback(); - }); -} - -function loadFX(callback = null) -{ - fetch(getURL('/json/effects'), { - method: 'get' - }) - .then(res => { - if (!res.ok) showErrorToast(); - return res.json(); - }) - .then(json => { - clearErrorToast(); - eJson = Object.entries(json); - populateEffects(); - }) - .catch(function (error) { - showToast(error, true); - }) - .finally(()=>{ - if (callback) callback(); - }); -} - -function loadFXData(callback = null) -{ - fetch(getURL('/json/fxdata'), { - method: 'get' - }) - .then(res => { - if (!res.ok) showErrorToast(); - return res.json(); - }) - .then(json => { - clearErrorToast(); - fxdata = json||[]; - // add default value for Solid - fxdata.shift() - fxdata.unshift("@;!;"); - }) - .catch(function (error) { - fxdata = []; - showToast(error, true); - }) - .finally(()=>{ - if (callback) callback(); - updateUI(); - }); -} - -var pQL = []; -function populateQL() -{ - var cn = ""; - if (pQL.length > 0) { - pQL.sort((a,b) => (a[0]>b[0])); - for (var key of (pQL||[])) { - cn += ``; - } - } - gId('pql').innerHTML = cn; -} - -function populatePresets() -{ - if (!pJson) {pJson={};return}; - delete pJson["0"]; - var cn = ""; //`

All presets

`; - var arr = Object.entries(pJson); - arr.sort(cmpP); - pQL = []; - var is = []; - pNum = 0; - for (var key of (arr||[])) - { - if (!isObj(key[1])) continue; - let i = parseInt(key[0]); - var qll = key[1].ql; - if (qll) pQL.push([i, qll, pName(i)]); - is.push(i); - - cn += `
`; - //if (cfg.comp.pid) cn += `
${i}
`; - cn += `${isPlaylist(i)?"":""}${pName(i)}
`; - pNum++; - } - gId('pcont').innerHTML = cn; - updatePA(); - populateQL(); -} - -function parseInfo() { - var li = lastinfo; - var name = li.name; - gId('namelabel').innerHTML = name; -// if (name === "Dinnerbone") d.documentElement.style.transform = "rotate(180deg)"; - if (li.live) name = "(Live) " + name; - if (loc) name = "(L) " + name; - d.title = name; - isRgbw = li.leds.wv; - ledCount = li.leds.count; -// syncTglRecv = li.str; - maxSeg = li.leds.maxseg; - pmt = li.fs.pmt; - cct = li.leds.cct; -} - -function populateInfo(i) -{ - var cn=""; - var heap = i.freeheap/1000; - heap = heap.toFixed(1); - var pwr = i.leds.pwr; - var pwru = "Not calculated"; - if (pwr > 1000) {pwr /= 1000; pwr = pwr.toFixed((pwr > 10) ? 0 : 1); pwru = pwr + " A";} - else if (pwr > 0) {pwr = 50 * Math.round(pwr/50); pwru = pwr + " mA";} - var urows=""; - if (i.u) { - for (const [k, val] of Object.entries(i.u)) { - if (val[1]) - urows += inforow(k,val[0],val[1]); - else - urows += inforow(k,val); - } - } - var vcn = "Kuuhaku"; - if (i.ver.startsWith("0.14.")) vcn = "Hoshi"; - if (i.ver.includes("-bl")) vcn = "Supāku"; - if (i.cn) vcn = i.cn; - - cn += `v${i.ver} "${vcn}"

-${urows} -${inforow("Build",i.vid)} -${inforow("Signal strength",i.wifi.signal +"% ("+ i.wifi.rssi, " dBm)")} -${inforow("Uptime",getRuntimeStr(i.uptime))} -${inforow("Time",i.time)} -${inforow("Free heap",heap," kB")} -${i.psram?inforow("Free PSRAM",(i.psram/1024).toFixed(1)," kB"):""} -${inforow("Estimated current",pwru)} -${inforow("Average FPS",i.leds.fps)} -${inforow("MAC address",i.mac)} -${inforow("Filesystem",i.fs.u + "/" + i.fs.t + " kB (" +Math.round(i.fs.u*100/i.fs.t) + "%)")} -${inforow("Environment",i.arch + " " + i.core + " (" + i.lwip + ")")} -
`; - gId('kv').innerHTML = cn; -} - -function populateSegments(s) -{ - var cn = ""; - segCount = (s.seg||[]).length; - lowestUnused = 0; lSeg = 0; - - if (segCount > 1) { - for (var y = 0; y < segCount && y<4; y++) - { - var inst=s.seg[y]; - let i = parseInt(inst.id); - powered[i] = inst.on; - if (i == lowestUnused) lowestUnused = i+1; - if (i > lSeg) lSeg = i; - - cn += -`
${(inst.n&&inst.n!=='')?inst.n:('Segment '+y)}
-
- -
- -
- -
-
- -
-
`; - } - //if (gId('buttonBri').className !== 'active') tglBri(true); - } else { - //tglBri(false); - } - //gId('buttonBri').style.display = (segCount > 1) ? "block" : "none"; - gId('segcont').innerHTML = cn; - for (var i = 0; i < segCount && i<4; i++) updateTrail(gId(`seg${i}bri`)); -} - -function btype(b) -{ - switch (b) { - case 2: - case 32: return "ESP32"; - case 1: - case 82: return "ESP8266"; - } - return "?"; + var config = { attributes: true, childList: true, subtree: true }; + observer.observe(doc.body, config); */ } -function bname(o) -{ - if (o.name=="WLED") return o.ip; - return o.name; -} - -function populateNodes(i,n) -{ - var cn=""; - var urows=""; - var nnodes = 0; - if (n.nodes) { - n.nodes.sort((a,b) => (a.name).localeCompare(b.name)); - for (var x=0;x${bname(o)}`; - urows += inforow(url,`${btype(o.type)}
${o.vid==0?"N/A":o.vid}`); - nnodes++; - } - } - } - if (i.ndc < 0) cn += `Instance List is disabled.`; - else if (nnodes == 0) cn += `No other instances found.`; - cn += ` - ${urows} - ${inforow("Current instance:",i.name)} -
`; - gId('kn').innerHTML = cn; -} - -function loadNodes() -{ - fetch(getURL('/json/nodes'), { - method: 'get' - }) - .then(res => { - if (!res.ok) showToast('Could not load Node list!', true); - return res.json(); - }) - .then(json => { - clearErrorToast(); - populateNodes(lastinfo, json); - }) - .catch(function (error) { - showToast(error, true); - console.log(error); - }); -} - -function populateEffects() -{ - var effects = eJson; - var html = ""; - - effects.shift(); //remove solid - for (let i = 0; i < effects.length; i++) effects[i] = {id: effects[i][0], name:effects[i][1]}; - effects.sort((a,b) => (a.name).localeCompare(b.name)); - effects.unshift({ - "id": 0, - "name": "Solid@;!;0" - }); - - for (let i = 0; i < effects.length; i++) { - // WLEDSR: add slider and color control to setEffect (used by requestjson) - if (effects[i].name.indexOf("RSVD") < 0) { - var posAt = effects[i].name.indexOf("@"); - var extra = ''; - if (posAt > 0) - extra = effects[i].name.substr(posAt); - else - posAt = 999; - html += generateListItemHtml( - 'fx', - effects[i].id, - effects[i].name.substr(0,posAt), - 'setEffect', - '','', - extra - ); - } - } - gId('fxlist').innerHTML=html; -} - -function populatePalettes() -{ - var palettes = lJson; - palettes.shift(); //remove default - for (let i = 0; i < palettes.length; i++) { - palettes[i] = { - "id": palettes[i][0], - "name": palettes[i][1] - }; - } - palettes.sort((a,b) => (a.name).localeCompare(b.name)); - palettes.unshift({ - "id": 0, - "name": "Default", - }); - var html = ""; - for (let i = 0; i < palettes.length; i++) { - html += generateListItemHtml( - 'palette', - palettes[i].id, - palettes[i].name, - 'setPalette', - `
` - ); - } - gId('pallist').innerHTML=html; -} - -function redrawPalPrev() -{ - let palettes = d.querySelectorAll('#pallist .lstI'); - for (let i = 0; i < palettes.length; i++) { - let id = palettes[i].dataset.id; - let lstPrev = palettes[i].querySelector('.lstIprev'); - if (lstPrev) { - lstPrev.style = genPalPrevCss(id); - } - } -} - -function genPalPrevCss(id) -{ - if (!palettesData) return; - - var paletteData = palettesData[id]; - var previewCss = ""; - - if (!paletteData) return 'display: none'; - - // We need at least two colors for a gradient - if (paletteData.length == 1) { - paletteData[1] = paletteData[0]; - if (Array.isArray(paletteData[1])) { - paletteData[1][0] = 255; - } - } - - var gradient = []; - for (let j = 0; j < paletteData.length; j++) { - const element = paletteData[j]; - let r; - let g; - let b; - let index = false; - if (Array.isArray(element)) { - index = element[0]/255*100; - r = element[1]; - g = element[2]; - b = element[3]; - } else if (element == 'r') { - r = Math.random() * 255; - g = Math.random() * 255; - b = Math.random() * 255; - } else { - if (selColors) { - let e = element[1] - 1; - r = selColors[e][0]; - g = selColors[e][1]; - b = selColors[e][2]; - } - } - if (index === false) { - index = j / paletteData.length * 100; - } - - gradient.push(`rgb(${r},${g},${b}) ${index}%`); - } - - return `background: linear-gradient(to right,${gradient.join()});`; -} - -function generateOptionItemHtml(id, name) -{ - return ``; -} - -function generateListItemHtml(listName, id, name, clickAction, extraHtml = '', extraClass = '', extraPar = '') -{ - return `
-
- - ${name} - -
- ${extraHtml} -
`; -} - -//update the 'sliderdisplay' background div of a slider for a visual indication of slider position -function updateTrail(e) -{ - if (e==null) return; - var max = e.hasAttribute('max') ? e.attributes.max.value : 255; - var perc = e.value * 100 / max; - perc = parseInt(perc); - if (perc < 50) perc += 2; - var val = `linear-gradient(90deg, var(--c-f) ${perc}%, var(--c-4) ${perc}%)`; - e.parentNode.getElementsByClassName('sliderdisplay')[0].style.background = val; - var b = e.parentNode.parentNode.getElementsByTagName('output')[0]; - if (b) b.innerHTML = e.value; -} - -//rangetouch slider function -function toggleBubble(e) -{ - var b = e.target.parentNode.parentNode.getElementsByTagName('output')[0]; - b.classList.toggle('sliderbubbleshow'); -} - -function updatePA() -{ - var ps = gEBCN("pres"); - for (let i = 0; i < ps.length; i++) { - ps[i].classList.remove('selected');; - } - ps = gEBCN("psts"); - for (let i = 0; i < ps.length; i++) { - ps[i].classList.remove('selected');; - } - if (currentPreset > 0) { - var acv = gId(`p${currentPreset}o`); - if (acv) acv.classList.add('selected'); - acv = gId(`p${currentPreset}qlb`); - if (acv) acv.classList.add('selected'); - } -} - -function updateUI() -{ - gId('buttonPower').className = (isOn) ? "active":""; - - var sel = 0; - if (lJson && lJson.length) { - for (var i=0; i b[0]); - // playlists follow presets - var name = (a[1].playlist ? '~' : ' ') + a[1].n; - return name.localeCompare((b[1].playlist ? '~' : ' ') + b[1].n, undefined, {numeric: true}); -} - -function makeWS() { - if (ws) return; - let url = loc ? getURL('/ws').replace("http","ws") : "ws://"+window.location.hostname+"/ws"; - ws = new WebSocket(url); - ws.onmessage = (e)=>{ - var json = JSON.parse(e.data); - if (json.leds) return; //liveview packet - clearTimeout(jsonTimeout); - jsonTimeout = null; - lastUpdate = new Date(); - clearErrorToast(); - gId('connind').style.backgroundColor = "var(--c-l)"; - // json object should contain json.info AND json.state (but may not) - var i = json.info; - if (i) { - lastinfo = i; - parseInfo(); - if (isInfo) populateInfo(i); - } else - i = lastinfo; - var s = json.state ? json.state : json; - readState(s); - }; - ws.onclose = (e)=>{ - gId('connind').style.backgroundColor = "var(--c-r)"; - ws = null; - if (lastinfo.ws > -1) setTimeout(makeWS,500); - } - ws.onopen = (e)=>{ - ws.send("{'v':true}"); - reqsLegal = true; - clearErrorToast(); - } -} - -function readState(s,command=false) -{ - if (!s) return false; - - isOn = s.on; - gId('sliderBri').value= s.bri; - nlA = s.nl.on; - nlDur = s.nl.dur; - nlTar = s.nl.tbri; - nlFade = s.nl.fade; - syncSend = s.udpn.send; - if (s.pl<0) currentPreset = s.ps; - else currentPreset = s.pl; - tr = s.transition/10; - - var selc=0; var ind=0; - populateSegments(s); - for (let i = 0; i < (s.seg||[]).length; i++) - { - if(s.seg[i].sel) {selc = ind; break;} ind++; - } - var i=s.seg[selc]; - if (!i) { - showToast('No Segments!', true); - updateUI(); - return; - } - - selColors = i.col; - var cd = gId('csl').children; - for (let e = cd.length-1; e >= 0; e--) - { - var r,g,b,w; - r = i.col[e][0]; - g = i.col[e][1]; - b = i.col[e][2]; - if (isRgbw) w = i.col[e][3]; - cd[e].style.backgroundColor = "rgb(" + r + "," + g + "," + b + ")"; - if (isRgbw) whites[e] = parseInt(w); - selectSlot(csel); - } - gId('sliderW').value = whites[csel]; - if (i.cct && i.cct>=0) gId("sliderA").value = i.cct; - - gId('sliderSpeed').value = i.sx; - gId('sliderIntensity').value = i.ix; -/* - gId('sliderC1').value = i.f1x ? i.f1x : 0; - gId('sliderC2').value = i.f2x ? i.f2x : 0; - gId('sliderC3').value = i.f3x ? i.f3x : 0; -*/ - if (s.error && s.error != 0) { - var errstr = ""; - switch (s.error) { - case 10: - errstr = "Could not mount filesystem!"; - break; - case 11: - errstr = "Not enough space to save preset!"; - break; - case 12: - errstr = "Preset not found."; - break; - case 13: - errstr = "Missing IR.json."; - break; - case 19: - errstr = "A filesystem error has occured."; - break; - } - showToast('Error ' + s.error + ": " + errstr, true); - } - - selectedPal = i.pal; - selectedFx = i.fx; - updateUI(); +// Called when simple UI is ready +function finalizeSimpleUI() { + // disable horizontal scrolling + simpleUI = true; + // set brightness + setBri(); + // set correct position of selected and sticky palette + Array.from(document.styleSheets[0].cssRules).find(rule => rule.selectorText == "#pallist .lstI.sticky").style.top = "0px"; + Array.from(document.styleSheets[0].cssRules).find(rule => rule.selectorText == "#pallist .lstI.selected").style.top = "42px"; + } - -var jsonTimeout; -var reqsLegal = false; - -function requestJson(command=null) -{ - gId('connind').style.backgroundColor = "var(--c-r)"; - if (command && !reqsLegal) return; //stop post requests from chrome onchange event on page restore - if (!jsonTimeout) jsonTimeout = setTimeout(showErrorToast, 3000); - var req = null; - var useWs = (ws && ws.readyState === WebSocket.OPEN); - var type = command ? 'post':'get'; - if (command) { - if (useWs || !command.ps) command.v = true; // force complete /json/si API response - command.time = Math.floor(Date.now() / 1000); - req = JSON.stringify(command); - if (req.length > 1000) useWs = false; //do not send very long requests over websocket - }; - - if (useWs) { - ws.send(req?req:'{"v":true}'); - return; - } else if (command && command.ps) { //refresh UI if we don't use WS (async loading of presets) - setTimeout(requestJson,200); - } - - fetch(getURL('/json/si'), { - method: type, - headers: { - "Content-type": "application/json; charset=UTF-8" - }, - body: req - }) - .then(res => { - if (!res.ok) showErrorToast(); - return res.json(); - }) - .then(json => { - clearTimeout(jsonTimeout); - jsonTimeout = null; - lastUpdate = new Date(); - clearErrorToast(); - gId('connind').style.backgroundColor = "var(--c-g)"; - if (!json) { showToast('Empty response', true); return; } - if (json.success) return; - if (json.info) { - lastinfo = json.info; - parseInfo(); - if (isInfo) populateInfo(lastinfo); - } - var s = json.state ? json.state : json; - readState(s); - reqsLegal = true; - }) - .catch(function (error) { - showToast(error, true); - console.log(error); - }); -} - -function togglePower() -{ - isOn = !isOn; - var obj = {"on": isOn}; - requestJson(obj); -} - -function toggleInfo() -{ - if (isNodes) toggleNodes(); - isInfo = !isInfo; - if (isInfo) requestJson(); - gId('info').style.transform = (isInfo) ? "translateY(0px)":"translateY(100%)"; - gId('buttonI').className = (isInfo) ? "active":""; -} - -function toggleNodes() -{ - if (isInfo) toggleInfo(); - isNodes = !isNodes; - if (isNodes) loadNodes(); - gId('nodes').style.transform = (isNodes) ? "translateY(0px)":"translateY(100%)"; - gId('buttonNodes').className = (isNodes) ? "active":""; -} -/* -function tglBri(b=null) -{ - if (b===null) b = gId(`briwrap`).style.display === "block"; - gId('briwrap').style.display = !b ? "block":"none"; - gId('buttonBri').className = !b ? "active":""; - size(); -} -*/ -function tglCP() -{ - var p = gId('buttonCP').className === "active"; - gId('buttonCP').className = !p ? "active":""; - gId('picker').style.display = !p ? "block":"none"; - gId('vwrap').style.display = !p ? "block":"none"; - gId('rgbwrap').style.display = !p ? "block":"none"; - var csl = gId('Slots').style.display === "block"; - gId('Slots').style.display = !csl ? "block":"none"; - //var ps = gId(`Presets`).style.display === "block"; - //gId('Presets').style.display = !ps ? "block":"none"; -} - -function tglCs(i) -{ - var pss = gId(`p${i}cstgl`).checked; - gId(`p${i}o1`).style.display = pss? "block" : "none"; - gId(`p${i}o2`).style.display = !pss? "block" : "none"; -} - -function selSeg(s) -{ - var sel = gId(`seg${s}sel`).checked; - var obj = {"seg": {"id": s, "sel": sel}}; - requestJson(obj); -} - -function tglPalDropdown() -{ - var p = gId('palDropdown').style; - p.display = (p.display==='block'?'none':'block'); - gId('fxDropdown').style.display = 'none'; - if (p.display==='block') - gId('palDropdown').scrollIntoView({ - behavior: 'smooth', - block: 'center', - }); -} - -function tglFxDropdown() -{ - var p = gId('fxDropdown').style; - p.display = (p.display==='block'?'none':'block'); - gId('palDropdown').style.display = 'none'; - if (p.display==='block') - gId('fxDropdown').scrollIntoView({ - behavior: 'smooth', - block: 'center', - }); -} - -function setSegPwr(s) -{ - var obj = {"seg": {"id": s, "on": !powered[s]}}; - requestJson(obj); -} - -function setSegBri(s) -{ - var obj = {"seg": {"id": s, "bri": parseInt(gId(`seg${s}bri`).value)}}; - requestJson(obj); -} - -function setEffect(ind = 0) -{ - tglFxDropdown(); - var obj = {"seg": {"fx": parseInt(ind), "fxdef":true}}; // fxdef sets effect parameters to default values, TODO add client setting - requestJson(obj); -} - -function setPalette(paletteId = null) -{ - tglPalDropdown(); - var obj = {"seg": {"pal": paletteId}}; - requestJson(obj); -} - -function setBri() -{ - var obj = {"bri": parseInt(gId('sliderBri').value)}; - requestJson(obj); -} - -function setSpeed() -{ - var obj = {"seg": {"sx": parseInt(gId('sliderSpeed').value)}}; - requestJson(obj); -} - -function setIntensity() -{ - var obj = {"seg": {"ix": parseInt(gId('sliderIntensity').value)}}; - requestJson(obj); -} - -function setLor(i) -{ - var obj = {"lor": i}; - requestJson(obj); -} - -function setPreset(i) -{ - var obj = {"ps": i}; - if (isPlaylist(i)) obj.on = true; - showToast("Loading preset " + pName(i) +" (" + i + ")"); - requestJson(obj); -} - -function selectSlot(b) -{ - csel = b; - var cd = gId('csl').children; - for (let i = 0; i < cd.length; i++) cd[i].classList.remove('xxs-w'); - cd[b].classList.add('xxs-w'); - setPicker(cd[b].style.backgroundColor); - gId('sliderW').value = whites[b]; - redrawPalPrev(); - updatePSliders(); -} - -var lasth = 0; -function pC(col) -{ - if (col == "rnd") { - col = {h: 0, s: 0, v: 100}; - col.s = Math.floor((Math.random() * 50) + 50); - do { - col.h = Math.floor(Math.random() * 360); - } while (Math.abs(col.h - lasth) < 50); - lasth = col.h; - } - setPicker(col); - setColor(0); -} - -function updatePSliders() { - //update RGB sliders - var col = cpick.color.rgb; - gId('sliderR').value = col.r; - gId('sliderG').value = col.g; - gId('sliderB').value = col.b; - - //update hex field - var str = cpick.color.hexString.substring(1); - var w = whites[csel]; - if (w > 0) str += w.toString(16); - - //update value slider - var v = gId('sliderV'); - v.value = cpick.color.value; - //background color as if color had full value - var hsv = {"h":cpick.color.hue,"s":cpick.color.saturation,"v":100}; - var c = iro.Color.hsvToRgb(hsv); - var cs = 'rgb('+c.r+','+c.g+','+c.b+')'; - v.nextElementSibling.style.backgroundImage = `linear-gradient(90deg, #000 0%, ${cs})`; - - //update Kelvin slider - gId('sliderK').value = cpick.color.kelvin; -} - -function setPicker(rgb) { - var c = new iro.Color(rgb); - if (c.value > 0) cpick.color.set(c); - else cpick.color.setChannel('hsv', 'v', 0); -} - -function fromV() -{ - cpick.color.setChannel('hsv', 'v', d.getElementById('sliderV').value); -} - -function fromK() -{ - cpick.color.set({ kelvin: d.getElementById('sliderK').value }); -} - -function fromRgb() -{ - var r = gId('sliderR').value; - var g = gId('sliderG').value; - var b = gId('sliderB').value; - setPicker(`rgb(${r},${g},${b})`); - setColor(0); -} - -// sets color from picker: 0=all, 1=leaving picker/HSV, 2=ignore white channel -function setColor(sr) -{ - var cd = gId('csl').children; // color slots - if (sr == 1 && cd[csel].style.backgroundColor == 'rgb(0, 0, 0)') cpick.color.setChannel('hsv', 'v', 100); - cd[csel].style.backgroundColor = cpick.color.rgbString; - if (sr != 2) whites[csel] = parseInt(gId('sliderW').value); - var col = cpick.color.rgb; - var obj = {"seg": {"col": [[col.r, col.g, col.b, whites[csel]],[],[]]}}; - if (sr==1 || gId(`picker`).style.display !== "block") obj.seg.fx = 0; - if (csel == 1) { - obj = {"seg": {"col": [[],[col.r, col.g, col.b, whites[csel]],[]]}}; - } else if (csel == 2) { - obj = {"seg": {"col": [[],[],[col.r, col.g, col.b, whites[csel]]]}}; - } - requestJson(obj); -} - -function setBalance(b) -{ - var obj = {"seg": {"cct": parseInt(b)}}; - requestJson(obj); -} - -var hc = 0; -setInterval(()=>{if (!isInfo) return; hc+=18; if (hc>300) hc=0; if (hc>200)hc=306; if (hc==144) hc+=36; if (hc==108) hc+=18; -gId('heart').style.color = `hsl(${hc}, 100%, 50%)`;}, 910); - -function openGH() { window.open("https://github.com/Aircoookie/WLED/wiki"); } - -var cnfr = false; -function cnfReset() -{ - if (!cnfr) { - var bt = gId('resetbtn'); - bt.style.color = "#f00"; - bt.innerHTML = "Confirm Reboot"; - cnfr = true; return; - } - window.location.href = "/reset"; -} - -function loadPalettesData(callback = null) -{ - if (palettesData) return; - const lsKey = "wledPalx"; - var palettesDataJson = localStorage.getItem(lsKey); - if (palettesDataJson) { - try { - palettesDataJson = JSON.parse(palettesDataJson); - if (palettesDataJson && palettesDataJson.vid == lastinfo.vid) { - palettesData = palettesDataJson.p; - if (callback) callback(); //redrawPalPrev() - return; - } - } catch (e) {} - } - - palettesData = {}; - getPalettesData(0, ()=>{ - localStorage.setItem(lsKey, JSON.stringify({ - p: palettesData, - vid: lastinfo.vid - })); - if (callback) setTimeout(callback, 99); //redrawPalPrev() - }); -} - -function getPalettesData(page, callback) -{ - fetch(getURL(`/json/palx?page=${page}`), { - method: 'get', - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then((res)=>{ - if (!res.ok) showErrorToast(); - return res.json(); - }) - .then((json)=>{ - palettesData = Object.assign({}, palettesData, json.p); - if (page < json.m) setTimeout(()=>{ getPalettesData(page + 1, callback); }, 50); - else callback(); - }) - .catch((e)=>{ - showToast(e, true); - }); -} - -function search(f,l=null) -{ - f.nextElementSibling.style.display=(f.value!=='')?'block':'none'; - if (!l) return; - var el = gId(l).querySelectorAll('.lstI'); - for (i = 0; i < el.length; i++) { - var it = el[i]; - var itT = it.querySelector('.lstIname').innerText.toUpperCase(); - it.style.display = itT.indexOf(f.value.toUpperCase())>-1?'':'none'; - } -} - -function clean(c) -{ - c.style.display='none'; - var i=c.previousElementSibling; - i.value=''; - i.focus(); - i.dispatchEvent(new Event('input')); -} - -function unfocusSliders() -{ - gId("sliderBri").blur(); - gId("sliderSpeed").blur(); - gId("sliderIntensity").blur(); -} - -//sliding UI -const _C = d.querySelector('.container'), N = 1; - -let iSlide = 0, x0 = null, scrollS = 0, locked = false, w; - -function unify(e) { return e.changedTouches ? e.changedTouches[0] : e; } - -function hasIroClass(classList) -{ - for (var i = 0; i < classList.length; i++) { - var element = classList[i]; - if (element.startsWith('Iro')) return true; - } - return false; -} -//required by rangetouch.js -function lock(e) -{ - var l = e.target.classList; - var pl = e.target.parentElement.classList; - - if (l.contains('noslide') || hasIroClass(l) || hasIroClass(pl)) return; - - x0 = unify(e).clientX; - scrollS = gEBCN("tabcontent")[iSlide].scrollTop; - - _C.classList.toggle('smooth', !(locked = true)); -} -//required by rangetouch.js -function move(e) -{ - if(!locked) return; - var clientX = unify(e).clientX; - var dx = clientX - x0; - var s = Math.sign(dx); - var f = +(s*dx/w).toFixed(2); - - if((clientX != 0) && - (iSlide > 0 || s < 0) && (iSlide < N - 1 || s > 0) && - f > 0.12 && - gEBCN("tabcontent")[iSlide].scrollTop == scrollS) - { - _C.style.setProperty('--i', iSlide -= s); - f = 1 - f; - updateTablinks(iSlide); - } - _C.style.setProperty('--f', f); - _C.classList.toggle('smooth', !(locked = false)); - x0 = null; -} - -function size() -{ - var h = gId('top').clientHeight; - sCol('--th', h + "px"); - sCol("--tp", h - (gId(`briwrap`).style.display === "block" ? 0 : gId(`briwrap`).clientTop) + "px"); - sCol("--bh", "0px"); -} - -function mergeDeep(target, ...sources) -{ - if (!sources.length) return target; - const source = sources.shift(); - - if (isObj(target) && isObj(source)) { - for (const key in source) { - if (isObj(source[key])) { - if (!target[key]) Object.assign(target, { [key]: {} }); - mergeDeep(target[key], source[key]); - } else { - Object.assign(target, { [key]: source[key] }); - } - } - } - return mergeDeep(target, ...sources); -} - -size(); -window.addEventListener('resize', size, false); - -_C.addEventListener('mousedown', lock, false); -_C.addEventListener('touchstart', lock, false); - -_C.addEventListener('mouseout', move, false); -_C.addEventListener('mouseup', move, false); -_C.addEventListener('touchend', move, false); diff --git a/wled00/wled_server.cpp b/wled00/wled_server.cpp index 4dbfa1909..56e112a0c 100644 --- a/wled00/wled_server.cpp +++ b/wled00/wled_server.cpp @@ -253,6 +253,15 @@ void initServer() size_t len, bool final) {handleUpload(request, filename, index, data, len, final);} ); + server.on("/index.htm", HTTP_GET, [](AsyncWebServerRequest *request){ + if (handleFileRead(request, "/index.htm")) return; + if (handleIfNoneMatchCacheHeader(request)) return; + AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_index, PAGE_index_L); + response->addHeader(FPSTR(s_content_enc),"gzip"); + setStaticContentCacheHeaders(response); + request->send(response); + }); + #ifdef WLED_ENABLE_SIMPLE_UI server.on("/simple.htm", HTTP_GET, [](AsyncWebServerRequest *request){ if (handleFileRead(request, "/simple.htm")) return; From 23374e98ae10ed866a48b6fb39b21f6aa9a63736 Mon Sep 17 00:00:00 2001 From: Woody Date: Thu, 9 Nov 2023 18:15:04 +0100 Subject: [PATCH 004/126] Added preset quick load before palette list --- wled00/data/simple.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/wled00/data/simple.js b/wled00/data/simple.js index 417626b21..16c0115d0 100644 --- a/wled00/data/simple.js +++ b/wled00/data/simple.js @@ -66,6 +66,9 @@ function simplifyUI(doc) { // Put effects below palett list gId("Colors").innerHTML += gId("Effects").innerHTML; + // Put preset quick load before palette list + gId("Colors").insertBefore(gId("pql"), gId("pall")); + // Hide buttons in top bar gId("buttonNl").style.display = "none"; gId("buttonSync").style.display = "none"; @@ -115,5 +118,4 @@ function finalizeSimpleUI() { // set correct position of selected and sticky palette Array.from(document.styleSheets[0].cssRules).find(rule => rule.selectorText == "#pallist .lstI.sticky").style.top = "0px"; Array.from(document.styleSheets[0].cssRules).find(rule => rule.selectorText == "#pallist .lstI.selected").style.top = "42px"; - } From 40cc30e05469269c2f25ca67135a8f1148b1f588 Mon Sep 17 00:00:00 2001 From: Woody Date: Thu, 9 Nov 2023 18:18:55 +0100 Subject: [PATCH 005/126] Remove unnecessary comment in simple.js --- wled00/data/simple.js | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/wled00/data/simple.js b/wled00/data/simple.js index 16c0115d0..fd3739ff6 100644 --- a/wled00/data/simple.js +++ b/wled00/data/simple.js @@ -51,7 +51,6 @@ fetch(getURL("/index.htm")) script.parentNode.replaceChild(newScript, script); }); finalizeSimpleUI(); - }) .catch(error => console.error('Error:', error)); @@ -94,19 +93,6 @@ function simplifyUI(doc) { // Hide filter options gId("filters").style.display = "none"; - - /* var observer = new MutationObserver(function (mutations) { - mutations.forEach(function (mutation) { - if (mutation.attributeName === "class") { - let element = mutation.target; - if (element.matches("#pallist .lstI.selected")) { - element.style.top = "0px"; - } - } - }); - }); - var config = { attributes: true, childList: true, subtree: true }; - observer.observe(doc.body, config); */ } // Called when simple UI is ready From 63ad3f9290c190d4e2d5063d1202ab48868cd068 Mon Sep 17 00:00:00 2001 From: Woody Date: Thu, 9 Nov 2023 20:48:15 +0100 Subject: [PATCH 006/126] Show brightness slider --- wled00/data/simple.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/wled00/data/simple.js b/wled00/data/simple.js index fd3739ff6..e52ec747c 100644 --- a/wled00/data/simple.js +++ b/wled00/data/simple.js @@ -87,10 +87,6 @@ function simplifyUI(doc) { gId("pallist").style.height = "300px"; gId("pallist").style.overflow = "scroll"; - // set brightness to 255 and hide slider - gId("sliderBri").value = 255; - gId("briwrap").style.display = "none"; - // Hide filter options gId("filters").style.display = "none"; } @@ -99,8 +95,6 @@ function simplifyUI(doc) { function finalizeSimpleUI() { // disable horizontal scrolling simpleUI = true; - // set brightness - setBri(); // set correct position of selected and sticky palette Array.from(document.styleSheets[0].cssRules).find(rule => rule.selectorText == "#pallist .lstI.sticky").style.top = "0px"; Array.from(document.styleSheets[0].cssRules).find(rule => rule.selectorText == "#pallist .lstI.selected").style.top = "42px"; From d3b7b857a4de39ab04c112373845a2a5e5660ea0 Mon Sep 17 00:00:00 2001 From: Woody Date: Thu, 9 Nov 2023 21:39:45 +0100 Subject: [PATCH 007/126] Fix palette list shadow of selected option Fix padding and margin in pallist element Fix palette list shadow of selected option --- wled00/data/simple.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/wled00/data/simple.js b/wled00/data/simple.js index e52ec747c..33959c231 100644 --- a/wled00/data/simple.js +++ b/wled00/data/simple.js @@ -86,6 +86,9 @@ function simplifyUI(doc) { // Chage height of palette list gId("pallist").style.height = "300px"; gId("pallist").style.overflow = "scroll"; + // fix shadow + gId("pallist").style.margin = "0px -16px"; + gId("pallist").style.padding = "0px 16px"; // Hide filter options gId("filters").style.display = "none"; From b852b6f55ca1ca02f41a40af6fb6b45fc581395c Mon Sep 17 00:00:00 2001 From: Woody Date: Mon, 13 Nov 2023 13:36:21 +0100 Subject: [PATCH 008/126] Add simplifiedUI to info object --- wled00/json.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/wled00/json.cpp b/wled00/json.cpp index a91404cb2..43ab92b6d 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -650,6 +650,7 @@ void serializeInfo(JsonObject root) root[F("name")] = serverDescription; root[F("udpport")] = udpPort; + root[F("simplifiedui")] = simplifiedUI; root["live"] = (bool)realtimeMode; root[F("liveseg")] = useMainSegmentOnly ? strip.getMainSegmentId() : -1; // if using main segment only for live From 0c97d7701eaf16bf347d5068e0e5fa8177bcb0a6 Mon Sep 17 00:00:00 2001 From: Woody Date: Mon, 13 Nov 2023 13:45:38 +0100 Subject: [PATCH 009/126] Remove no longer needed code for simplifiedUI --- wled00/wled_server.cpp | 31 +------------------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/wled00/wled_server.cpp b/wled00/wled_server.cpp index 56e112a0c..86b4fa21c 100644 --- a/wled00/wled_server.cpp +++ b/wled00/wled_server.cpp @@ -1,9 +1,6 @@ #include "wled.h" #include "html_ui.h" -#ifdef WLED_ENABLE_SIMPLE_UI - #include "html_simple.h" -#endif #include "html_settings.h" #include "html_other.h" #ifdef WLED_ENABLE_PIXART @@ -253,26 +250,6 @@ void initServer() size_t len, bool final) {handleUpload(request, filename, index, data, len, final);} ); - server.on("/index.htm", HTTP_GET, [](AsyncWebServerRequest *request){ - if (handleFileRead(request, "/index.htm")) return; - if (handleIfNoneMatchCacheHeader(request)) return; - AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_index, PAGE_index_L); - response->addHeader(FPSTR(s_content_enc),"gzip"); - setStaticContentCacheHeaders(response); - request->send(response); - }); - -#ifdef WLED_ENABLE_SIMPLE_UI - server.on("/simple.htm", HTTP_GET, [](AsyncWebServerRequest *request){ - if (handleFileRead(request, "/simple.htm")) return; - if (handleIfNoneMatchCacheHeader(request)) return; - AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_simple, PAGE_simple_L); - response->addHeader(FPSTR(s_content_enc),"gzip"); - setStaticContentCacheHeaders(response); - request->send(response); - }); -#endif - server.on("/iro.js", HTTP_GET, [](AsyncWebServerRequest *request){ AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", iroJs, iroJs_length); response->addHeader(FPSTR(s_content_enc),"gzip"); @@ -460,13 +437,7 @@ void serveIndex(AsyncWebServerRequest* request) if (handleIfNoneMatchCacheHeader(request)) return; - AsyncWebServerResponse *response; -#ifdef WLED_ENABLE_SIMPLE_UI - if (simplifiedUI) - response = request->beginResponse_P(200, "text/html", PAGE_simple, PAGE_simple_L); - else -#endif - response = request->beginResponse_P(200, "text/html", PAGE_index, PAGE_index_L); + AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_index, PAGE_index_L); response->addHeader(FPSTR(s_content_enc),"gzip"); setStaticContentCacheHeaders(response); From a3dd6ce891151d94be7dfc5d1f086f55c546b02b Mon Sep 17 00:00:00 2001 From: Woody Date: Tue, 14 Nov 2023 20:28:22 +0100 Subject: [PATCH 010/126] simplifiedUI moved to index.js --- wled00/data/index.css | 8 ++++++++ wled00/data/index.js | 44 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/wled00/data/index.css b/wled00/data/index.css index 058dc6c26..c9bf8b665 100644 --- a/wled00/data/index.css +++ b/wled00/data/index.css @@ -1325,11 +1325,19 @@ TD .checkmark, TD .radiomark { top: calc(var(--sti) + 42px); } +#pallist.simplified .lstI.selected { + top: 42px; +} + #fxlist .lstI.sticky, #pallist .lstI.sticky { top: var(--sti); } +#pallist.simplified .lstI.sticky { + top: 0px; +} + /* list item content */ .lstIcontent { padding: 9px 0 7px; diff --git a/wled00/data/index.js b/wled00/data/index.js index 1efd5332e..62f7d18d6 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -12,7 +12,7 @@ var currentPreset = -1; var lastUpdate = 0; var segCount = 0, ledCount = 0, lowestUnused = 0, maxSeg = 0, lSeg = 0; var pcMode = false, pcModeA = false, lastw = 0, wW; -var simpleUI = false; +var simplifiedUI = false; var tr = 7; var d = document; var palettesData; @@ -626,6 +626,7 @@ function parseInfo(i) { if (i.live) name = "(Live) " + name; if (loc) name = "(L) " + name; d.title = name; + simplifiedUI = i.simplifiedui; ledCount = i.leds.count; //syncTglRecv = i.str; maxSeg = i.leds.maxseg; @@ -1661,6 +1662,7 @@ function requestJson(command=null) parseInfo(i); populatePalettes(i); if (isInfo) populateInfo(i); + if (simplifiedUI) simplifyUI(); } var s = json.state ? json.state : json; readState(s); @@ -2903,7 +2905,7 @@ function hasIroClass(classList) //required by rangetouch.js function lock(e) { - if (pcMode || simpleUI) return; + if (pcMode || simplifiedUI) return; var l = e.target.classList; var pl = e.target.parentElement.classList; @@ -2917,7 +2919,7 @@ function lock(e) //required by rangetouch.js function move(e) { - if(!locked || pcMode || simpleUI) return; + if(!locked || pcMode || simplifiedUI) return; var clientX = unify(e).clientX; var dx = clientX - x0; var s = Math.sign(dx); @@ -3017,6 +3019,42 @@ function tooltip() }); }); }; +function simplifyUI() { + // Disable PC Mode as it does not exist in simple UI + if (pcMode) togglePcMode(true); + + // Put effects below palett list + gId("Colors").innerHTML += gId("Effects").innerHTML; + // Put preset quick load before palette list + gId("Colors").insertBefore(gId("pql"), gId("pall")); + + // Hide buttons in top bar + gId("buttonNl").style.display = "none"; + gId("buttonSync").style.display = "none"; + gId("buttonSr").style.display = "none"; + gId("buttonPcm").style.display = "none"; + + // Hide bottom bar + gId("bot").style.display = "none"; + document.documentElement.style.setProperty('--bh', '0px'); + + // Hide other tabs + gId("Effects").style.display = "none"; + gId("Segments").style.display = "none"; + gId("Presets").style.display = "none"; + + // Chage height of palette list + gId("pallist").style.height = "300px"; + gId("pallist").style.overflow = "scroll"; + // fix shadow + gId("pallist").style.margin = "0px -16px"; + gId("pallist").style.padding = "0px 16px"; + // set correct position of selected and sticky palette + gId("pallist").classList.add("simplified"); + + // Hide filter options + gId("filters").style.display = "none"; +} size(); _C.style.setProperty('--n', N); From 3ee3b9725584f963d72b60364080d44a0fd17d36 Mon Sep 17 00:00:00 2001 From: Woody Date: Tue, 14 Nov 2023 21:04:18 +0100 Subject: [PATCH 011/126] Remove old simplifiedUI code and update cdata.js --- tools/cdata.js | 28 +- wled00/data/simple.htm | 12 - wled00/data/simple.js | 104 ---- wled00/html_simple.h | 1141 ---------------------------------------- 4 files changed, 1 insertion(+), 1284 deletions(-) delete mode 100644 wled00/data/simple.htm delete mode 100644 wled00/data/simple.js delete mode 100644 wled00/html_simple.h diff --git a/tools/cdata.js b/tools/cdata.js index 90619ba67..09816f959 100644 --- a/tools/cdata.js +++ b/tools/cdata.js @@ -219,36 +219,10 @@ function writeChunks(srcDir, specs, resultFile) { } writeHtmlGzipped("wled00/data/index.htm", "wled00/html_ui.h", 'index'); -writeHtmlGzipped("wled00/data/simple.htm", "wled00/html_simple.h", 'simple'); writeHtmlGzipped("wled00/data/pixart/pixart.htm", "wled00/html_pixart.h", 'pixart'); writeHtmlGzipped("wled00/data/cpal/cpal.htm", "wled00/html_cpal.h", 'cpal'); writeHtmlGzipped("wled00/data/pxmagic/pxmagic.htm", "wled00/html_pxmagic.h", 'pxmagic'); -/* -writeChunks( - "wled00/data", - [ - { - file: "simple.css", - name: "PAGE_simpleCss", - method: "gzip", - filter: "css-minify", - }, - { - file: "simple.js", - name: "PAGE_simpleJs", - method: "gzip", - filter: "js-minify", - }, - { - file: "simple.htm", - name: "PAGE_simple", - method: "gzip", - filter: "html-minify-ui", - } - ], - "wled00/html_simplex.h" -); -*/ + writeChunks( "wled00/data", [ diff --git a/wled00/data/simple.htm b/wled00/data/simple.htm deleted file mode 100644 index eca95ddd8..000000000 --- a/wled00/data/simple.htm +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/wled00/data/simple.js b/wled00/data/simple.js deleted file mode 100644 index 33959c231..000000000 --- a/wled00/data/simple.js +++ /dev/null @@ -1,104 +0,0 @@ -/* -This file creates the simple UI by fetching the default UI and modifying it. -*/ - -var loc = false, locip, locproto = "http:"; -if (window.location.protocol == "file:") { - loc = true; - locip = localStorage.getItem('locIp'); - if (!locip) { - locip = prompt("File Mode. Please enter WLED IP!"); - localStorage.setItem('locIp', locip); - } -} else { - // detect reverse proxy - let paths = window.location.pathname.slice(1, window.location.pathname.endsWith('/') ? -1 : undefined).split("/"); - if (paths.length > 2) { - locproto = window.location.protocol; - loc = true; - locip = window.location.hostname + (window.location.port ? ":" + window.location.port : "") + "/" + paths[0]; - } -} - -function getURL(path) { - return (loc ? locproto + "//" + locip : "") + path; -} - -// fetch default UI and modify it -fetch(getURL("/index.htm")) - .then(response => response.text()) - .then(data => { - let parser = new DOMParser(); - let doc = parser.parseFromString(data, 'text/html'); - // patch simple ui - simplifyUI(doc); - - // copy page to current page - document.documentElement.innerHTML = doc.documentElement.innerHTML; - - // execute scripts in page - let scripts = document.querySelectorAll('script'); - scripts.forEach(script => { - // create new script element - let newScript = document.createElement('script'); - // copy attributes - for (let i = 0; i < script.attributes.length; i++) { - newScript.setAttribute(script.attributes[i].name, script.attributes[i].value); - } - // copy content - newScript.innerHTML = script.innerHTML; - // replace script - script.parentNode.replaceChild(newScript, script); - }); - finalizeSimpleUI(); - }) - .catch(error => console.error('Error:', error)); - -// Transforms the default UI into the simple UI -function simplifyUI(doc) { - function gId(id) { - return doc.getElementById(id); - } - - // Disable PC Mode as it does not exist in simple UI - localStorage.setItem("pcm", "false"); - - // Put effects below palett list - gId("Colors").innerHTML += gId("Effects").innerHTML; - // Put preset quick load before palette list - gId("Colors").insertBefore(gId("pql"), gId("pall")); - - // Hide buttons in top bar - gId("buttonNl").style.display = "none"; - gId("buttonSync").style.display = "none"; - gId("buttonSr").style.display = "none"; - gId("buttonPcm").style.display = "none"; - - // Hide bottom bar - gId("bot").style.display = "none"; - doc.documentElement.style.setProperty('--bh', '0px'); - - // Hide other tabs - gId("Effects").style.display = "none"; - gId("Segments").style.display = "none"; - gId("Presets").style.display = "none"; - - // Chage height of palette list - gId("pallist").style.height = "300px"; - gId("pallist").style.overflow = "scroll"; - // fix shadow - gId("pallist").style.margin = "0px -16px"; - gId("pallist").style.padding = "0px 16px"; - - // Hide filter options - gId("filters").style.display = "none"; -} - -// Called when simple UI is ready -function finalizeSimpleUI() { - // disable horizontal scrolling - simpleUI = true; - // set correct position of selected and sticky palette - Array.from(document.styleSheets[0].cssRules).find(rule => rule.selectorText == "#pallist .lstI.sticky").style.top = "0px"; - Array.from(document.styleSheets[0].cssRules).find(rule => rule.selectorText == "#pallist .lstI.selected").style.top = "42px"; -} diff --git a/wled00/html_simple.h b/wled00/html_simple.h deleted file mode 100644 index 9a93b7915..000000000 --- a/wled00/html_simple.h +++ /dev/null @@ -1,1141 +0,0 @@ -/* - * Binary array for the Web UI. - * gzip is used for smaller size and improved speeds. - * - * Please see https://kno.wled.ge/advanced/custom-features/#changing-web-ui - * to find out how to easily modify the web UI source! - */ - -// Autogenerated from wled00/data/simple.htm, do not edit!! -const uint16_t PAGE_simple_L = 18059; -const uint8_t PAGE_simple[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xcd, 0x7d, 0x69, 0x77, 0xe2, 0xba, - 0xb2, 0xe8, 0xf7, 0xfc, 0x0a, 0xda, 0x7d, 0x4e, 0x1a, 0x1f, 0x1c, 0x30, 0xf3, 0xd4, 0x24, 0x87, - 0x90, 0x90, 0x79, 0x24, 0x73, 0xbf, 0x5e, 0xb7, 0x3d, 0x08, 0x70, 0x62, 0x6c, 0xc7, 0x36, 0x53, - 0x68, 0xee, 0x5a, 0xef, 0xbf, 0xbd, 0x1f, 0xf6, 0xaa, 0x24, 0xdb, 0xd8, 0x06, 0x92, 0xf4, 0xde, - 0xef, 0xac, 0xfb, 0x7a, 0xef, 0x80, 0xd1, 0x50, 0x92, 0x4a, 0xa5, 0x9a, 0x54, 0x92, 0xbf, 0x7f, - 0xd9, 0xbb, 0x68, 0xdd, 0x3c, 0x5e, 0xee, 0x27, 0xfa, 0xee, 0x40, 0xdf, 0x4e, 0x7c, 0xc7, 0xaf, - 0x84, 0x2e, 0x19, 0xbd, 0x06, 0x47, 0x0c, 0x0e, 0x13, 0x88, 0xa4, 0xc2, 0xd7, 0x80, 0xb8, 0x52, - 0xc2, 0x90, 0x06, 0xa4, 0xc1, 0x8d, 0x34, 0x32, 0xb6, 0x4c, 0xdb, 0xe5, 0x12, 0x1b, 0x8a, 0x69, - 0xb8, 0xc4, 0x70, 0x1b, 0xdc, 0x58, 0x53, 0xdd, 0x7e, 0x43, 0x25, 0x23, 0x4d, 0x21, 0x5b, 0xf4, - 0x87, 0xa0, 0x19, 0x9a, 0xab, 0x49, 0xfa, 0x96, 0xa3, 0x48, 0x3a, 0x69, 0x64, 0x85, 0x01, 0x24, - 0x0c, 0x86, 0x03, 0xff, 0x37, 0xe7, 0x03, 0xdd, 0x50, 0xfa, 0x92, 0xed, 0x10, 0x00, 0x32, 0x74, - 0xbb, 0x5b, 0x15, 0x2e, 0xda, 0x98, 0xdb, 0x27, 0x03, 0xb2, 0xa5, 0x98, 0xba, 0x69, 0x73, 0x89, - 0xa0, 0xb9, 0xaf, 0x39, 0xfa, 0x2f, 0x04, 0xc3, 0xcf, 0x99, 0x12, 0x87, 0xf3, 0xaa, 0x4a, 0x96, - 0xa5, 0x93, 0xad, 0x81, 0x29, 0x6b, 0xf0, 0x35, 0x26, 0xf2, 0x16, 0x24, 0x6c, 0x29, 0x92, 0x25, - 0xc9, 0x3a, 0xc1, 0x9a, 0xba, 0x66, 0xbc, 0x24, 0x6c, 0xa2, 0x37, 0x38, 0xa7, 0x0f, 0xc3, 0x51, - 0x86, 0x6e, 0x42, 0x03, 0x38, 0x30, 0xac, 0xbe, 0x4d, 0xba, 0x0d, 0x4e, 0x95, 0x5c, 0xa9, 0xa6, - 0x0d, 0xa4, 0x1e, 0xc9, 0x4c, 0xb6, 0x30, 0xa7, 0x2e, 0x4b, 0x0e, 0x29, 0x15, 0x84, 0x66, 0xb3, - 0xb9, 0xdb, 0x6c, 0xee, 0x37, 0xf7, 0xe1, 0x13, 0xbf, 0x0f, 0x9a, 0xad, 0x03, 0x7c, 0x6a, 0xf7, - 0xe0, 0xe3, 0x48, 0xbf, 0xba, 0x79, 0x51, 0xce, 0x5b, 0x7d, 0xf3, 0x04, 0xd3, 0xf6, 0x6e, 0xf5, - 0xa3, 0xeb, 0xf6, 0x11, 0x3e, 0x5e, 0xb1, 0xd2, 0x3d, 0x5a, 0xf6, 0x30, 0x73, 0x99, 0x79, 0xc4, - 0x94, 0xfd, 0xec, 0xf1, 0xf5, 0x7e, 0xfb, 0xf6, 0xe2, 0x28, 0xfb, 0x0c, 0x49, 0x99, 0xcb, 0xf1, - 0xc5, 0xa4, 0x77, 0x7e, 0x40, 0x9a, 0xb7, 0x67, 0x93, 0xfd, 0xea, 0x41, 0x49, 0xb9, 0x6a, 0x9d, - 0xec, 0xdd, 0x37, 0xfb, 0x56, 0x73, 0xef, 0x29, 0xd7, 0xad, 0x5c, 0x9e, 0x3d, 0xef, 0x76, 0xf2, - 0x57, 0xf7, 0x62, 0xe5, 0xea, 0x24, 0x27, 0x9e, 0x48, 0x4f, 0xad, 0x5c, 0xaf, 0xdb, 0xaa, 0xf6, - 0x5b, 0xc6, 0xab, 0x39, 0x34, 0xcf, 0x7b, 0xcd, 0xeb, 0xde, 0x63, 0xf9, 0xed, 0x6c, 0xd2, 0x9c, - 0x9e, 0xeb, 0xb7, 0xea, 0xd5, 0xa1, 0xfe, 0xa0, 0x35, 0xf5, 0x8b, 0xdc, 0xd9, 0x5e, 0x73, 0xaf, - 0x94, 0xdf, 0xbf, 0x7b, 0x3d, 0x3f, 0x6c, 0x12, 0xb1, 0x49, 0x3b, 0xa2, 0xb7, 0x6f, 0x5e, 0x3a, - 0xc3, 0xab, 0x41, 0xab, 0xc5, 0x6d, 0x6f, 0x24, 0xbe, 0xbb, 0x9a, 0xab, 0x93, 0xed, 0xfb, 0xd3, - 0xfd, 0xbd, 0xef, 0x19, 0xf6, 0x9c, 0xf8, 0xee, 0x28, 0xb6, 0x66, 0xb9, 0xdb, 0x1b, 0xdd, 0xa1, - 0xa1, 0xb8, 0x9a, 0x69, 0x24, 0xba, 0x84, 0xa8, 0xb2, 0xa4, 0xbc, 0x24, 0xf9, 0xd9, 0x7c, 0x24, - 0xd9, 0x09, 0x98, 0x72, 0x53, 0x19, 0x0e, 0x00, 0xf3, 0xe9, 0x1e, 0x71, 0xf7, 0x75, 0x82, 0x8f, - 0xce, 0xee, 0xf4, 0x46, 0xea, 0x9d, 0xc3, 0x1c, 0x24, 0x39, 0xa4, 0x1e, 0x8e, 0xff, 0x21, 0xfe, - 0x14, 0xf4, 0x45, 0x51, 0xc5, 0x26, 0x92, 0x4b, 0xbc, 0xd2, 0x49, 0x8e, 0xb5, 0xc2, 0xf1, 0x75, - 0x3d, 0xed, 0x4e, 0x2d, 0x6f, 0xe2, 0x34, 0x45, 0xc2, 0x16, 0x33, 0xcf, 0xd2, 0x48, 0xf2, 0x0a, - 0x08, 0x7a, 0xda, 0xb1, 0x95, 0x06, 0xa7, 0xd9, 0x66, 0xfa, 0xd9, 0xc1, 0x9f, 0x92, 0xaa, 0xee, - 0x8f, 0x00, 0xc6, 0xa9, 0xe6, 0xc0, 0xec, 0x13, 0x3b, 0xc9, 0xe9, 0x26, 0xb4, 0x27, 0x90, 0xc6, - 0xf6, 0x4c, 0xb1, 0x34, 0xe5, 0xa5, 0x61, 0x90, 0x71, 0x02, 0xcb, 0xb7, 0x90, 0x80, 0x2e, 0x21, - 0x05, 0x0b, 0x7d, 0xb5, 0xe8, 0x03, 0x27, 0xcc, 0x28, 0xa5, 0xd6, 0x72, 0x25, 0x51, 0x18, 0xf7, - 0x09, 0xd1, 0x4f, 0xb5, 0x5e, 0xdf, 0x35, 0x88, 0xe3, 0xd4, 0xbe, 0x64, 0x59, 0x4a, 0xd3, 0xe8, - 0xe9, 0xa4, 0x96, 0x2b, 0x7b, 0x05, 0xf6, 0x34, 0x9b, 0x50, 0x4c, 0xd4, 0x38, 0x45, 0x37, 0x95, - 0x97, 0xb1, 0xe6, 0x10, 0xe8, 0x88, 0x34, 0x35, 0x87, 0x6e, 0xed, 0xc7, 0x4c, 0x31, 0x07, 0x96, - 0x69, 0x40, 0x87, 0x6a, 0xd8, 0xe6, 0x50, 0x4b, 0xdf, 0x63, 0x25, 0xc1, 0xb4, 0xb0, 0x8a, 0x53, - 0x9b, 0xcd, 0xe7, 0x3f, 0xe7, 0xbc, 0x40, 0x7b, 0x96, 0x36, 0x8d, 0x24, 0xa7, 0x19, 0x16, 0xd4, - 0x23, 0x06, 0x74, 0x39, 0xc9, 0x43, 0x9f, 0x61, 0x15, 0xd0, 0x8e, 0x26, 0xb3, 0x7c, 0xa4, 0x1c, - 0x25, 0xff, 0x1a, 0xac, 0x13, 0xa3, 0x47, 0xbc, 0xa2, 0x43, 0x0b, 0xc8, 0x93, 0x5c, 0x76, 0x74, - 0x4d, 0x25, 0xb6, 0x93, 0x84, 0xf2, 0x75, 0x9c, 0x10, 0xf7, 0x63, 0x2c, 0xbb, 0x1f, 0x60, 0xd9, - 0x65, 0x58, 0xb6, 0xb1, 0x31, 0xd7, 0x1c, 0x2a, 0x7d, 0x8a, 0x6c, 0xf7, 0x5d, 0x64, 0xd3, 0xc2, - 0x4e, 0xe3, 0x1a, 0xbf, 0x6e, 0x68, 0x1d, 0x18, 0xca, 0xd0, 0x4a, 0x7e, 0xa3, 0x23, 0xfc, 0xc1, - 0x1a, 0xa4, 0x85, 0xb8, 0x9f, 0xdf, 0x84, 0x19, 0x74, 0x56, 0x27, 0x2e, 0x74, 0x16, 0x4a, 0x1d, - 0xc1, 0xc2, 0xb5, 0x47, 0x92, 0x9e, 0xa4, 0xc3, 0xe2, 0x10, 0x85, 0x90, 0x47, 0xb8, 0x46, 0x63, - 0x31, 0x14, 0x18, 0x89, 0x3a, 0xed, 0xb8, 0x30, 0x9c, 0xcd, 0xcd, 0xa4, 0xa2, 0x13, 0xc9, 0x0e, - 0x6a, 0xb9, 0xbc, 0x60, 0x1a, 0xa7, 0xd0, 0x91, 0x24, 0xcf, 0xcf, 0x85, 0xac, 0x28, 0x22, 0xe6, - 0x00, 0xec, 0x8d, 0x36, 0x20, 0x30, 0x29, 0xc9, 0xa4, 0x4f, 0xbb, 0x40, 0xb2, 0xfd, 0x34, 0x8c, - 0x19, 0xb0, 0xdd, 0xea, 0x6b, 0xba, 0x0a, 0x35, 0xa1, 0x64, 0xf1, 0xf3, 0xe5, 0x75, 0xaf, 0xfc, - 0xc6, 0xf7, 0x8c, 0xb7, 0x2e, 0x60, 0x81, 0xb8, 0x53, 0x58, 0x28, 0x1b, 0xff, 0xee, 0x02, 0xfb, - 0xd9, 0xea, 0x4a, 0x0a, 0x99, 0x79, 0x4f, 0x03, 0x4d, 0x9f, 0xd6, 0xee, 0x8f, 0x80, 0x69, 0x38, - 0x75, 0x40, 0x67, 0x6d, 0x68, 0xeb, 0x49, 0xca, 0x4f, 0x30, 0x3f, 0x33, 0x36, 0xbb, 0xdd, 0x5c, - 0xdd, 0xe7, 0x7b, 0x94, 0xed, 0xf9, 0xbc, 0x45, 0x15, 0xab, 0x07, 0x67, 0xbd, 0x26, 0xe5, 0x2c, - 0xcd, 0xa6, 0x71, 0xdb, 0x6c, 0x3a, 0x6c, 0xb9, 0x66, 0xf1, 0x73, 0xd0, 0x6e, 0x36, 0x0f, 0x9e, - 0x06, 0xbd, 0xe6, 0xda, 0x7f, 0xbb, 0x83, 0x66, 0xb3, 0xf7, 0x30, 0xbe, 0x6e, 0x35, 0x5f, 0x95, - 0xc7, 0xe3, 0xa7, 0xa3, 0xe6, 0xcd, 0x63, 0xeb, 0xb8, 0x79, 0x3e, 0x6e, 0xbd, 0x99, 0xcd, 0xdd, - 0x16, 0xb0, 0xa8, 0xf1, 0xe3, 0xe1, 0xd1, 0xae, 0x53, 0xde, 0xab, 0x68, 0x17, 0xe3, 0xb7, 0xde, - 0x20, 0x7f, 0xf6, 0x70, 0x66, 0xbc, 0x3d, 0xb5, 0x5e, 0x5c, 0xe3, 0x59, 0x91, 0xcf, 0x53, 0x57, - 0xfa, 0xf1, 0xa9, 0x74, 0x9c, 0x1f, 0xea, 0xb7, 0xa7, 0x96, 0x6e, 0xdd, 0x97, 0x6e, 0x5f, 0xef, - 0x35, 0x93, 0x74, 0xaa, 0xd9, 0xe3, 0x29, 0x11, 0x9f, 0x6f, 0xf5, 0xe3, 0xf1, 0x93, 0x5d, 0x34, - 0x6e, 0xd4, 0xfd, 0xfc, 0xa9, 0xe1, 0xaa, 0x97, 0xa3, 0x66, 0x2f, 0xd5, 0x75, 0x33, 0x5d, 0xd9, - 0x39, 0x75, 0x0e, 0xf4, 0xf3, 0xd3, 0x61, 0x5f, 0x1f, 0x5c, 0x3d, 0x9f, 0x68, 0xe5, 0xf3, 0xcb, - 0xbd, 0xfd, 0xa3, 0xde, 0xf8, 0x66, 0x00, 0x3c, 0x4d, 0x2a, 0x0d, 0x54, 0x3d, 0xd5, 0x39, 0xbc, - 0xdd, 0xed, 0xef, 0x1f, 0xa9, 0x87, 0xed, 0x89, 0xf4, 0x52, 0x76, 0x0a, 0xfb, 0x99, 0xe9, 0x5b, - 0xff, 0xb8, 0xf3, 0xdc, 0x2a, 0xef, 0x5e, 0x5d, 0x9d, 0x76, 0xf7, 0xc6, 0xa6, 0xd5, 0xce, 0x68, - 0x25, 0xe9, 0xb5, 0xb3, 0xaf, 0xef, 0xb7, 0xf7, 0x1e, 0x26, 0x95, 0xa7, 0xbb, 0xfb, 0xe7, 0x69, - 0xde, 0x9e, 0x0e, 0x0a, 0xe7, 0xa5, 0xb6, 0xfe, 0x74, 0x55, 0xe8, 0x0f, 0x53, 0xc6, 0x83, 0x73, - 0x70, 0xb4, 0x77, 0x76, 0xd5, 0xce, 0xf7, 0x9a, 0x13, 0x29, 0x5b, 0x68, 0xf6, 0x9a, 0xb6, 0x7b, - 0x77, 0xd6, 0xef, 0xbe, 0xf4, 0x9e, 0xbb, 0xfb, 0x4d, 0x59, 0x6b, 0xf5, 0xc7, 0xc3, 0xce, 0xd1, - 0x78, 0xff, 0xb6, 0x35, 0x18, 0xaa, 0x97, 0x7d, 0xed, 0x4a, 0xbd, 0x29, 0xd9, 0xa3, 0xa3, 0xe7, - 0xd3, 0xce, 0xf5, 0xd3, 0xfe, 0x78, 0xaf, 0xdf, 0xae, 0xee, 0x1e, 0x39, 0xa6, 0x79, 0x54, 0xcc, - 0xdf, 0x1c, 0x5d, 0x1f, 0x99, 0x47, 0xb7, 0x7b, 0x95, 0x97, 0xe9, 0xf9, 0xd3, 0x51, 0xf9, 0xf6, - 0xb9, 0x39, 0x3d, 0xb3, 0xaf, 0x33, 0xd2, 0x59, 0x66, 0x6f, 0x2c, 0x5d, 0x58, 0xe6, 0x9b, 0xd4, - 0xaf, 0x9e, 0x1e, 0xb4, 0x9c, 0xc7, 0xdc, 0xdb, 0x79, 0xee, 0xf1, 0xe2, 0xcd, 0xc9, 0x9d, 0xe6, - 0x27, 0xaf, 0xe4, 0xdc, 0x2a, 0xbc, 0x3d, 0x3c, 0xbf, 0x56, 0xe4, 0x87, 0x9b, 0x4c, 0xff, 0x6c, - 0xf7, 0xf4, 0x39, 0x53, 0xcc, 0x3f, 0xee, 0x35, 0x8f, 0x3a, 0xa9, 0xf2, 0xb0, 0x54, 0xaa, 0x18, - 0xf9, 0xc3, 0xd4, 0xe1, 0xf5, 0xa5, 0xfa, 0xa4, 0x66, 0x87, 0xf9, 0x9b, 0x37, 0xf5, 0xfa, 0x49, - 0xbd, 0x3b, 0xbb, 0xe9, 0x1e, 0xe9, 0xc5, 0xc3, 0xee, 0x49, 0x4f, 0xcd, 0xca, 0xe5, 0xce, 0xe8, - 0x55, 0xad, 0xde, 0x57, 0x87, 0x96, 0xad, 0x5e, 0x56, 0xae, 0x6e, 0x2e, 0x06, 0x44, 0x7a, 0x2b, - 0xde, 0x5c, 0x5e, 0x5c, 0x1f, 0xeb, 0x7b, 0x7b, 0xcf, 0x87, 0x77, 0xcf, 0x07, 0x62, 0xf3, 0xfc, - 0xec, 0xea, 0xd1, 0x19, 0x5c, 0xdb, 0x27, 0xfa, 0xc0, 0x9a, 0xbe, 0xde, 0x95, 0x5f, 0x86, 0xf2, - 0xd1, 0x55, 0x2b, 0x77, 0xd0, 0x39, 0x7a, 0x69, 0x77, 0x52, 0x67, 0x06, 0x69, 0x1d, 0x17, 0x2a, - 0xc7, 0xc7, 0xed, 0xbb, 0x56, 0xff, 0xaa, 0x3b, 0x1c, 0x9f, 0x9c, 0x59, 0xb9, 0xe9, 0x6d, 0xd5, - 0x1a, 0xbc, 0x66, 0xef, 0x4e, 0x6e, 0xaf, 0x4b, 0x36, 0x71, 0xc5, 0x03, 0x4b, 0xec, 0x3c, 0xdf, - 0x3d, 0x5e, 0x5f, 0xb7, 0x53, 0x0f, 0xcf, 0xe5, 0xd4, 0x85, 0x76, 0xdb, 0x79, 0xc9, 0x1c, 0x1c, - 0xbd, 0x0d, 0xb3, 0x03, 0xed, 0xf0, 0xe9, 0x7e, 0x92, 0xea, 0x55, 0x1e, 0xb3, 0xd7, 0xb7, 0x2f, - 0xee, 0xe5, 0xe0, 0xf5, 0x48, 0x73, 0xaf, 0x6f, 0x1e, 0xee, 0xce, 0xdf, 0xde, 0x5a, 0xee, 0xb0, - 0x7d, 0x79, 0xa2, 0x1c, 0x8a, 0x6f, 0xd7, 0xbb, 0x07, 0xa9, 0xc7, 0x6a, 0xa6, 0x65, 0xf4, 0x77, - 0xa5, 0x9c, 0x38, 0x2a, 0x9a, 0x87, 0x5d, 0x67, 0xff, 0xf6, 0xac, 0xf7, 0x70, 0x76, 0xb9, 0xdf, - 0xbd, 0x28, 0x3e, 0x29, 0xc7, 0x13, 0xb1, 0x7d, 0x74, 0xa9, 0xdd, 0x4d, 0xc7, 0xbd, 0x67, 0xb9, - 0x74, 0x76, 0x34, 0xbc, 0x4b, 0x99, 0x4f, 0x85, 0x51, 0xee, 0xe5, 0xa5, 0x94, 0x79, 0x33, 0x8e, - 0x26, 0x7b, 0x27, 0x76, 0x6f, 0x78, 0x96, 0xcb, 0x4d, 0x53, 0xf2, 0x7d, 0x65, 0x7c, 0x7b, 0xf0, - 0xaa, 0x95, 0xa5, 0xd3, 0x4a, 0xf7, 0xea, 0xf8, 0x6d, 0x6c, 0xb4, 0x9e, 0x2b, 0xee, 0x91, 0x65, - 0xa9, 0x47, 0x55, 0xf9, 0x71, 0xaf, 0x73, 0x77, 0x7c, 0xd7, 0xba, 0x3a, 0x32, 0x34, 0xeb, 0x5e, - 0x3c, 0x94, 0x5d, 0x45, 0x57, 0x6e, 0xca, 0xa3, 0xd6, 0xf4, 0x74, 0xf0, 0x20, 0x75, 0xee, 0xec, - 0xab, 0xce, 0xf9, 0xd9, 0x54, 0x96, 0x8e, 0x8f, 0x77, 0xfb, 0xb9, 0x4b, 0xed, 0xc1, 0x7e, 0x90, - 0x7b, 0x6a, 0xa9, 0x29, 0xbf, 0x12, 0x45, 0xdd, 0xbb, 0xb9, 0xa8, 0xee, 0x5f, 0xed, 0x1f, 0x91, - 0x7b, 0xf1, 0xee, 0xf2, 0xfe, 0x4a, 0x51, 0xaf, 0x2a, 0xba, 0x7b, 0x79, 0xb1, 0x3f, 0x4c, 0x95, - 0x4b, 0xaf, 0xb9, 0xa3, 0xc9, 0xed, 0x8d, 0x79, 0x4c, 0xee, 0xad, 0xee, 0xf3, 0x95, 0x76, 0x78, - 0x78, 0x58, 0x84, 0xa5, 0xb4, 0x77, 0xfa, 0x9c, 0x95, 0x0f, 0x7b, 0x57, 0x93, 0x07, 0xe7, 0x16, - 0x06, 0x74, 0xf2, 0x28, 0xf7, 0x52, 0xad, 0x09, 0xfc, 0x57, 0xaa, 0x92, 0x43, 0xe5, 0x62, 0x04, - 0x0c, 0xfb, 0x38, 0xab, 0x97, 0x64, 0xd1, 0xd8, 0x2b, 0x3f, 0x1f, 0xa4, 0xe4, 0x4e, 0x33, 0xab, - 0xb6, 0x9e, 0xee, 0x26, 0x83, 0x71, 0xe5, 0xe9, 0x38, 0x73, 0xf4, 0xe8, 0x4e, 0x2e, 0x5d, 0xf9, - 0x78, 0xa2, 0x5b, 0x57, 0x99, 0xd3, 0x83, 0xe7, 0xce, 0xab, 0x28, 0xde, 0x0c, 0xd4, 0xf3, 0xa3, - 0xa7, 0x89, 0x7d, 0x40, 0xf4, 0xd4, 0x34, 0x65, 0x3f, 0x1d, 0xdb, 0x66, 0xca, 0xb8, 0xed, 0xe7, - 0x2f, 0xed, 0xf3, 0xa3, 0x83, 0xf1, 0x49, 0xe9, 0xde, 0x7e, 0x38, 0x3f, 0xbb, 0xcb, 0x4d, 0x6e, - 0xc8, 0xf5, 0xfd, 0x61, 0xe7, 0xb9, 0xa3, 0xbc, 0xb8, 0xa7, 0xc7, 0x5d, 0x92, 0xb5, 0x95, 0xb2, - 0x63, 0x4d, 0x47, 0x2f, 0x79, 0xb9, 0x74, 0x57, 0x78, 0x29, 0x54, 0x3a, 0x76, 0xbe, 0x39, 0xc8, - 0x5e, 0x8e, 0x32, 0x57, 0x5a, 0xb7, 0xef, 0x1c, 0xe5, 0x86, 0x67, 0x23, 0xa5, 0x52, 0xca, 0x5f, - 0x68, 0x57, 0x57, 0xd7, 0xe7, 0x26, 0x51, 0xad, 0xcb, 0xee, 0xa1, 0xd1, 0x19, 0x2b, 0xc0, 0x1b, - 0x53, 0xd2, 0xde, 0xfe, 0x7e, 0xa9, 0xac, 0x9c, 0xbc, 0xdd, 0xf4, 0x76, 0xf5, 0xab, 0xde, 0xb3, - 0xf5, 0xdc, 0xbb, 0xd9, 0x33, 0x8e, 0xdd, 0x03, 0xe3, 0x21, 0xf7, 0x2a, 0x0f, 0x1e, 0x8e, 0x4b, - 0xed, 0x8b, 0xdd, 0xd3, 0xa7, 0xf2, 0xd8, 0xb1, 0x53, 0xc7, 0x4f, 0x6f, 0x8f, 0x86, 0xfc, 0xac, - 0xca, 0x2f, 0xad, 0xe1, 0x7e, 0xf7, 0x56, 0x3c, 0x1c, 0xe9, 0xe3, 0x57, 0xd9, 0xbd, 0xed, 0x1d, - 0x97, 0xdf, 0xae, 0x1f, 0xda, 0xe7, 0xc7, 0xce, 0xa8, 0x33, 0xd1, 0xc7, 0x6f, 0xb9, 0xfb, 0x47, - 0x57, 0x2a, 0x4c, 0x9e, 0x6d, 0x2d, 0xd3, 0x75, 0x86, 0xba, 0x61, 0xb4, 0xef, 0x2e, 0xa7, 0xa6, - 0x61, 0x5d, 0x8a, 0xd7, 0xa7, 0x45, 0xf3, 0xee, 0xfc, 0xe4, 0xe5, 0xa5, 0xbb, 0xaf, 0x1f, 0x14, - 0x14, 0xe7, 0x66, 0xef, 0xbc, 0xe9, 0xf4, 0xde, 0x5a, 0xf9, 0xca, 0x41, 0xb9, 0xd7, 0x39, 0xb9, - 0xeb, 0x75, 0x9e, 0xca, 0x83, 0x8c, 0xb2, 0x3f, 0x3a, 0x69, 0x9e, 0x0e, 0x26, 0x27, 0x6f, 0x99, - 0xcc, 0xb0, 0xdc, 0x2f, 0x91, 0xde, 0x61, 0xbb, 0x7c, 0x66, 0x1f, 0x16, 0x9e, 0x8f, 0xad, 0xcc, - 0xd3, 0xa4, 0xf0, 0x9a, 0xcf, 0x49, 0x95, 0x9b, 0x72, 0x76, 0x62, 0x1c, 0xde, 0x5d, 0xb7, 0x0e, - 0xf4, 0x6e, 0xfb, 0xe9, 0xdc, 0x75, 0xd5, 0x5c, 0x5b, 0xb9, 0x95, 0xa4, 0x69, 0x89, 0x54, 0x2f, - 0x5f, 0xfa, 0x43, 0x65, 0x7a, 0x2d, 0x9a, 0x97, 0xc3, 0xec, 0x5b, 0xf6, 0x2d, 0xb3, 0xb7, 0x9b, - 0xaa, 0x8c, 0xb5, 0x49, 0xb3, 0xad, 0x9e, 0xdd, 0x66, 0x7b, 0xc6, 0x60, 0xb7, 0x30, 0x69, 0x8e, - 0x4b, 0x15, 0x6b, 0x7c, 0xa8, 0xdc, 0x3f, 0xeb, 0x6d, 0x7b, 0xd7, 0x78, 0x98, 0x9c, 0x3e, 0x3f, - 0x97, 0xf2, 0xb7, 0x07, 0xbd, 0xd1, 0xf9, 0xc1, 0xdd, 0x41, 0xf3, 0xb8, 0xfd, 0x36, 0x69, 0x8f, - 0x53, 0xf7, 0xe6, 0xc0, 0x28, 0x9f, 0x35, 0x35, 0xf9, 0x4e, 0x1e, 0x96, 0x74, 0x72, 0x78, 0xbd, - 0x5b, 0x74, 0x94, 0xac, 0xd8, 0x3d, 0x75, 0x65, 0x5b, 0xb5, 0x33, 0xc7, 0xaf, 0x77, 0xa5, 0x47, - 0x3b, 0x65, 0x8e, 0xc6, 0x6d, 0xf7, 0xfa, 0x70, 0xbf, 0x7c, 0x56, 0x78, 0x3b, 0xa8, 0x8a, 0xaf, - 0xe7, 0xbb, 0xa5, 0xc7, 0xeb, 0x7d, 0xd3, 0x2c, 0x66, 0x5f, 0xda, 0xc7, 0x92, 0xfc, 0x9a, 0x3f, - 0x27, 0x87, 0x77, 0x27, 0x2a, 0xe9, 0x66, 0xfa, 0xce, 0x59, 0xbb, 0xdd, 0xb1, 0xdc, 0xe2, 0xa0, - 0xf2, 0x30, 0x38, 0x7e, 0xdd, 0xdb, 0x6b, 0x1a, 0xd7, 0xa2, 0x52, 0xc8, 0x56, 0x06, 0x93, 0xc1, - 0xc4, 0xbe, 0x7a, 0xbb, 0x1a, 0x4e, 0x2f, 0x0d, 0xc7, 0xba, 0x1e, 0x77, 0x9b, 0x8f, 0x2f, 0x96, - 0xdb, 0x7f, 0xb3, 0x01, 0x2d, 0x37, 0xd9, 0xc9, 0x79, 0xa7, 0x5b, 0xb8, 0x77, 0x77, 0xcf, 0xce, - 0xaa, 0x7b, 0x57, 0x37, 0xd9, 0xea, 0xf0, 0x34, 0xd5, 0x93, 0x0b, 0xe5, 0x5e, 0xfb, 0xf4, 0x32, - 0xaf, 0xdc, 0x88, 0x95, 0x76, 0xe5, 0xa8, 0xa0, 0x3e, 0x4d, 0x8e, 0xf5, 0x42, 0xf6, 0xc0, 0x99, - 0x54, 0xef, 0x0f, 0xdf, 0x4e, 0x77, 0x2f, 0x0e, 0xdf, 0xee, 0x9f, 0xaf, 0x3b, 0xd5, 0xf3, 0xd3, - 0xd6, 0xc5, 0xed, 0x6e, 0xab, 0x7d, 0x95, 0x1a, 0x1e, 0xf4, 0x77, 0x33, 0x77, 0xe5, 0xa7, 0xb7, - 0xdb, 0xf1, 0xc9, 0x7e, 0xe7, 0x66, 0xb0, 0x67, 0x6b, 0xc7, 0xa9, 0x5b, 0xa4, 0xfd, 0x8c, 0xdc, - 0x7e, 0x68, 0x9f, 0x9d, 0x9e, 0x3a, 0xcf, 0x3d, 0xad, 0xe9, 0x16, 0x2c, 0xab, 0x3c, 0xd4, 0xad, - 0x89, 0x9c, 0x73, 0xdf, 0xf6, 0x2b, 0x47, 0x95, 0x49, 0x7f, 0x7a, 0x78, 0xb1, 0xb7, 0x7b, 0x92, - 0xef, 0x1c, 0xf4, 0x4a, 0x57, 0x97, 0xd9, 0xdc, 0xae, 0x76, 0x99, 0x7f, 0x3c, 0x1b, 0xe7, 0xec, - 0xbd, 0xb6, 0x7b, 0x7f, 0xbb, 0xf7, 0x70, 0x9a, 0x22, 0x8e, 0x31, 0xca, 0x1f, 0x56, 0xaf, 0x26, - 0xaf, 0xdd, 0x81, 0xbc, 0x67, 0xc8, 0x67, 0xa7, 0xcf, 0x07, 0xb7, 0x6d, 0xeb, 0xf5, 0xf5, 0x49, - 0x36, 0xee, 0x3b, 0x3d, 0x51, 0xef, 0xdf, 0x8f, 0xaa, 0xe3, 0xdb, 0x7c, 0xf1, 0xf5, 0xe6, 0xf0, - 0xf5, 0xb2, 0xfa, 0xf6, 0x7a, 0x6b, 0x9f, 0x96, 0x5f, 0x5e, 0x4f, 0x9e, 0x2b, 0x8f, 0xcf, 0x4f, - 0x6f, 0x3d, 0x31, 0x6b, 0xc9, 0xd5, 0xd4, 0xf4, 0xaa, 0xe2, 0x3c, 0x3c, 0x59, 0x8f, 0x93, 0x93, - 0x03, 0xad, 0x7d, 0x7c, 0x73, 0xee, 0x1c, 0x8d, 0xc7, 0xd6, 0xf4, 0xba, 0x50, 0xe8, 0xed, 0x5f, - 0x18, 0x77, 0x99, 0x14, 0x01, 0x42, 0x52, 0x0f, 0xf7, 0x32, 0x39, 0xfd, 0x2a, 0x3f, 0xec, 0x14, - 0xa7, 0xd9, 0xd7, 0xb7, 0xa3, 0x37, 0xf7, 0xe1, 0xf6, 0xfc, 0x72, 0xbf, 0x64, 0xaa, 0x8f, 0xc7, - 0xe2, 0xe5, 0xeb, 0xad, 0x76, 0x7f, 0xec, 0xf6, 0x4e, 0x0e, 0x4e, 0xce, 0x8e, 0x4e, 0x1f, 0x4b, - 0xa2, 0x3a, 0x21, 0x8f, 0x53, 0x43, 0x96, 0x53, 0x4e, 0xfb, 0xe4, 0xe4, 0xf5, 0xdc, 0x10, 0xef, - 0xdf, 0x72, 0xf6, 0xa9, 0x7b, 0x26, 0xef, 0x5e, 0xdd, 0x5f, 0x1a, 0x8f, 0xee, 0xe0, 0x58, 0x2a, - 0xdc, 0xbf, 0xb6, 0xaf, 0x4d, 0x39, 0x53, 0x1d, 0x0c, 0x86, 0x53, 0xe5, 0xea, 0x6e, 0x54, 0xd6, - 0xba, 0xad, 0xf3, 0xd1, 0x83, 0xad, 0xf7, 0xdf, 0x7a, 0x7b, 0xa7, 0x7b, 0x23, 0x50, 0xc9, 0x53, - 0x95, 0xc3, 0xe2, 0xe4, 0xf9, 0xa4, 0x5a, 0xa8, 0x28, 0x7b, 0xc4, 0x4d, 0xb5, 0xa5, 0x87, 0x6e, - 0x27, 0x75, 0xfa, 0x62, 0x66, 0xee, 0xdd, 0xd4, 0xa8, 0xa3, 0xbc, 0x4a, 0xf6, 0x6b, 0xe9, 0xe5, - 0xe9, 0x46, 0x7e, 0x29, 0x9c, 0x4b, 0x27, 0xaf, 0xd6, 0x85, 0xfc, 0xb2, 0xbf, 0x6f, 0x39, 0x92, - 0x52, 0x3d, 0xcd, 0xda, 0xd7, 0xe7, 0x0f, 0xc7, 0xbd, 0x4b, 0xd9, 0xbe, 0x9f, 0xee, 0xa9, 0x8f, - 0xcf, 0xa4, 0xe4, 0xee, 0x5e, 0x35, 0xdf, 0xdc, 0x17, 0xf9, 0xb1, 0x25, 0x8e, 0xf7, 0x48, 0xe1, - 0xd6, 0x38, 0xd7, 0xac, 0x81, 0xf1, 0x04, 0xba, 0xcb, 0x30, 0x33, 0x7c, 0xee, 0x96, 0x4e, 0xba, - 0xe5, 0x11, 0xc9, 0x66, 0x73, 0x87, 0xc3, 0x6e, 0x35, 0xb7, 0x3f, 0xca, 0x94, 0x89, 0xb1, 0x9b, - 0x49, 0x19, 0x97, 0x65, 0x4b, 0x06, 0xa5, 0xf3, 0xea, 0xf8, 0x49, 0xd6, 0xc4, 0xe7, 0x56, 0xc7, - 0x32, 0xcf, 0xab, 0x30, 0xf0, 0x9b, 0x97, 0xe7, 0xf2, 0xf1, 0xd9, 0xd8, 0x92, 0xef, 0x7b, 0xa6, - 0xd5, 0x94, 0xfb, 0xae, 0x7c, 0x71, 0xff, 0x32, 0x75, 0x9b, 0xed, 0xfc, 0x49, 0x2a, 0xf3, 0x6a, - 0x8a, 0x9d, 0x66, 0xe7, 0xfc, 0x3e, 0x77, 0x90, 0x93, 0x4f, 0xbb, 0x86, 0xd3, 0xb7, 0x76, 0x0b, - 0x52, 0x55, 0x1d, 0xbc, 0x95, 0x33, 0x87, 0x93, 0x4c, 0x46, 0x55, 0xf2, 0x17, 0x0f, 0xe7, 0x4f, - 0x05, 0xa0, 0xd5, 0xe9, 0xc3, 0xed, 0x5d, 0x4e, 0x7d, 0xbc, 0x76, 0xf6, 0xaa, 0xe5, 0xd7, 0x93, - 0xd3, 0x72, 0xf5, 0x55, 0x7a, 0x1b, 0xc2, 0xd0, 0x8e, 0xb2, 0xa3, 0xcb, 0x87, 0x9b, 0x72, 0xbe, - 0x5c, 0x94, 0xef, 0x3b, 0x07, 0xa6, 0xb2, 0x6b, 0x76, 0xf7, 0x72, 0xe4, 0xe8, 0xfa, 0xed, 0x58, - 0x54, 0xce, 0x5a, 0x22, 0xe8, 0x6e, 0xe3, 0x2b, 0xb1, 0xd7, 0x1d, 0x0d, 0x3b, 0xea, 0x48, 0xcd, - 0x16, 0xba, 0xd9, 0x21, 0x50, 0xfd, 0xe9, 0xe5, 0x7e, 0xfe, 0xf8, 0xf8, 0xf0, 0xb4, 0x34, 0x6c, - 0xa9, 0x19, 0xa3, 0x68, 0x54, 0xd4, 0x7c, 0xf1, 0xf6, 0xe2, 0xe4, 0xd2, 0x28, 0x19, 0x7d, 0x1b, - 0x04, 0xa4, 0x7d, 0x97, 0x97, 0xd4, 0xbc, 0xf1, 0x96, 0xd3, 0x6e, 0xb4, 0xf3, 0xd3, 0x42, 0xb6, - 0xb0, 0x6f, 0x90, 0xee, 0x69, 0xe6, 0xf8, 0xe0, 0x54, 0xbf, 0x7f, 0x72, 0x9f, 0xee, 0xa5, 0x57, - 0x73, 0xbf, 0x5f, 0x98, 0x74, 0x9e, 0x47, 0xce, 0x81, 0x9c, 0x29, 0x0d, 0xaa, 0xb6, 0xd4, 0xd6, - 0x9d, 0xd3, 0x41, 0x61, 0x78, 0xf8, 0x72, 0x75, 0xaf, 0x8f, 0xca, 0x37, 0x99, 0x31, 0x79, 0x7a, - 0x7b, 0x3e, 0x3c, 0x24, 0xe5, 0xc9, 0x93, 0x76, 0xfb, 0x66, 0x1d, 0x17, 0xef, 0x9b, 0xf7, 0xbb, - 0xa7, 0x7b, 0xe7, 0xe3, 0xeb, 0x93, 0xc9, 0xf8, 0xfa, 0xd1, 0x68, 0x9b, 0x0f, 0x07, 0x13, 0x45, - 0x3a, 0x99, 0x9c, 0x97, 0xf6, 0xae, 0x2b, 0xbb, 0xe7, 0x46, 0xce, 0xac, 0x9e, 0xbf, 0xc2, 0x0c, - 0xbb, 0x23, 0x5b, 0x2a, 0xde, 0x18, 0x47, 0xcf, 0x0f, 0x67, 0xbb, 0xfa, 0xe0, 0xa8, 0xfd, 0x94, - 0x9f, 0x5e, 0x3e, 0x3e, 0xe4, 0xcf, 0xdc, 0xea, 0xa8, 0x38, 0x18, 0x1c, 0x0e, 0xc7, 0x8f, 0xa3, - 0xd1, 0xe4, 0x72, 0x44, 0xec, 0xd3, 0x2a, 0xe9, 0x8c, 0x9c, 0xb7, 0x87, 0xf3, 0xe7, 0xdb, 0x07, - 0xfb, 0x45, 0x7e, 0x55, 0x0e, 0x2e, 0xee, 0xee, 0x73, 0xf2, 0xbe, 0xbc, 0x77, 0x70, 0xa2, 0xe5, - 0xcf, 0x4e, 0xef, 0x6e, 0xee, 0xdf, 0xde, 0xee, 0x0f, 0xdb, 0xc5, 0xc2, 0xee, 0x30, 0x93, 0xb3, - 0x9b, 0xd9, 0xd7, 0x17, 0xb3, 0xa4, 0x57, 0xbb, 0xed, 0xde, 0x9d, 0xbc, 0x3b, 0xb4, 0xbb, 0x77, - 0xbb, 0xf7, 0xed, 0xb6, 0x7e, 0x77, 0x9f, 0x1d, 0xf6, 0x26, 0x17, 0x63, 0xc5, 0x49, 0x55, 0xee, - 0x33, 0x19, 0xe0, 0x4f, 0x4f, 0xc7, 0x1a, 0x39, 0xd5, 0xab, 0xf7, 0x0f, 0xcd, 0x0a, 0x39, 0x38, - 0x2d, 0x2a, 0xf6, 0x6e, 0xb9, 0xdb, 0xbf, 0x38, 0x9b, 0x4e, 0xf4, 0x8a, 0xfc, 0x7c, 0x75, 0x7f, - 0xf0, 0xbc, 0x9b, 0x95, 0xef, 0x33, 0xe6, 0x4b, 0xe9, 0x56, 0x79, 0x25, 0x86, 0x63, 0x97, 0xdb, - 0x95, 0xc3, 0xf2, 0xd0, 0x75, 0x06, 0xea, 0xab, 0x79, 0x38, 0x78, 0xab, 0x56, 0xed, 0xd1, 0x94, - 0xec, 0x67, 0x2e, 0xdf, 0x40, 0x41, 0x28, 0x0c, 0x46, 0x77, 0x0f, 0xa7, 0xcf, 0xd3, 0xc7, 0xca, - 0xa8, 0xf2, 0x5c, 0x7c, 0xe8, 0x3f, 0x91, 0xc3, 0xbc, 0x74, 0xf9, 0x50, 0x2e, 0xaa, 0x96, 0x76, - 0x51, 0x24, 0xe7, 0x99, 0x8b, 0xb7, 0xb1, 0x72, 0x50, 0x7e, 0x7b, 0xe9, 0xea, 0x6e, 0xc6, 0x51, - 0x8b, 0xa4, 0xfc, 0xa8, 0xbc, 0xca, 0x17, 0xe6, 0xb8, 0x7b, 0xdd, 0xcb, 0xe5, 0xae, 0x8b, 0xc5, - 0x4a, 0x51, 0x72, 0x73, 0xa3, 0x87, 0x87, 0x4a, 0xf9, 0x3e, 0xfb, 0x28, 0xf6, 0xae, 0xc4, 0x72, - 0xb5, 0x50, 0x2d, 0x93, 0xc7, 0x9b, 0xec, 0xfe, 0xcb, 0xd4, 0xdc, 0x7f, 0x3d, 0x7b, 0x04, 0x1d, - 0xf0, 0x50, 0xad, 0x5c, 0x8d, 0x4e, 0x0e, 0xec, 0xeb, 0x83, 0x92, 0x7c, 0xfc, 0x78, 0xb3, 0xd7, - 0x6a, 0x3d, 0x3d, 0x1e, 0xec, 0xdf, 0x2b, 0x83, 0xe2, 0x41, 0x16, 0xd0, 0x98, 0xd3, 0x8a, 0x85, - 0xc7, 0xea, 0xbd, 0xab, 0xed, 0x0e, 0x5f, 0xf4, 0xcb, 0x62, 0xf9, 0xd1, 0xdd, 0x7d, 0x3a, 0x6b, - 0xde, 0xeb, 0xc3, 0x5c, 0xf7, 0xf1, 0x6d, 0xef, 0xac, 0x7c, 0x95, 0x2a, 0xb6, 0x81, 0x93, 0x77, - 0xf2, 0x17, 0x6f, 0xc5, 0x67, 0x90, 0x61, 0x47, 0x92, 0xe2, 0xca, 0xf7, 0x97, 0xe6, 0x78, 0x78, - 0xd5, 0x3b, 0x9f, 0x1e, 0xea, 0xc3, 0x13, 0x5d, 0x1a, 0x57, 0xc7, 0x86, 0x7c, 0x31, 0x70, 0x87, - 0xd2, 0xb3, 0x99, 0xb9, 0xeb, 0x8c, 0xab, 0xc0, 0x91, 0x3b, 0xd7, 0xe3, 0x33, 0x65, 0x08, 0x64, - 0xf9, 0x34, 0x6e, 0xf7, 0xfb, 0x25, 0xa7, 0xdc, 0x77, 0x5e, 0x6d, 0xed, 0xbe, 0xe5, 0xf4, 0x9a, - 0x39, 0x27, 0x6f, 0xb4, 0x41, 0x6d, 0x2e, 0x1c, 0x95, 0x2f, 0x52, 0x92, 0x33, 0x19, 0x4f, 0x9e, - 0x64, 0xf7, 0xf4, 0x54, 0xcc, 0xef, 0x57, 0xe5, 0xbe, 0x72, 0x5d, 0x7a, 0x7c, 0xab, 0x0e, 0x8e, - 0xe4, 0xb6, 0x78, 0x5b, 0x2d, 0x9d, 0x88, 0x93, 0x83, 0x66, 0x59, 0x9e, 0x54, 0xa7, 0x29, 0x3d, - 0x97, 0xc9, 0x94, 0xf3, 0xcf, 0xa9, 0xc3, 0x9c, 0x26, 0xee, 0x1f, 0xa8, 0xb9, 0xf2, 0xb0, 0x79, - 0x77, 0x7e, 0x94, 0xb9, 0xef, 0xb7, 0x1e, 0x87, 0xf7, 0xaf, 0x47, 0x7b, 0xd2, 0xe3, 0x44, 0x52, - 0x1d, 0x51, 0x57, 0xee, 0xda, 0x77, 0x29, 0xf5, 0x42, 0x3f, 0x1c, 0xec, 0x4e, 0x32, 0xaf, 0x17, - 0x65, 0xa5, 0x94, 0x19, 0x3e, 0x3d, 0x88, 0xee, 0x35, 0xb9, 0x75, 0x8f, 0xaf, 0x46, 0xa5, 0xc2, - 0x14, 0xc8, 0xb7, 0x39, 0x7a, 0x28, 0x4d, 0xf6, 0xc8, 0x5b, 0xf3, 0x21, 0x53, 0xb9, 0x1f, 0x54, - 0x5a, 0xbd, 0x7e, 0xa6, 0x5a, 0xbc, 0xa8, 0x5e, 0x4c, 0x9c, 0xf3, 0xd6, 0xa3, 0xe1, 0x3c, 0xdc, - 0x5f, 0xa5, 0xca, 0x56, 0xeb, 0xad, 0x92, 0x39, 0x3f, 0x7b, 0x2a, 0x96, 0x9f, 0x9a, 0x47, 0x07, - 0xfb, 0xea, 0xcd, 0x38, 0x25, 0x59, 0x95, 0xbb, 0xd4, 0x51, 0xfe, 0xfc, 0xf6, 0x8e, 0xc0, 0x9a, - 0x1a, 0x6b, 0xa3, 0x94, 0xae, 0x28, 0xaf, 0xcf, 0xd9, 0x72, 0xee, 0xa1, 0xfc, 0x38, 0x2e, 0xf6, - 0x8e, 0x9b, 0xb7, 0x57, 0x07, 0x8f, 0x97, 0x57, 0xa5, 0xab, 0xe9, 0xe4, 0xba, 0xdb, 0x23, 0xad, - 0xd4, 0x95, 0x52, 0xbc, 0x37, 0x9a, 0x67, 0xad, 0xe6, 0x61, 0x7b, 0x54, 0xba, 0x39, 0x76, 0x89, - 0x9b, 0xb7, 0x8c, 0x4c, 0x25, 0x2f, 0x17, 0x1e, 0x5b, 0xcd, 0xa3, 0xdd, 0x51, 0xbe, 0x68, 0x76, - 0xad, 0x9b, 0xeb, 0xa9, 0x5b, 0xbc, 0x7c, 0x06, 0x9d, 0xf4, 0xa6, 0x72, 0xf2, 0xd8, 0xdc, 0xbf, - 0x3a, 0xa9, 0x18, 0xed, 0xde, 0xae, 0x02, 0x6a, 0xf1, 0xed, 0x18, 0x68, 0xff, 0xf5, 0xb0, 0xb3, - 0x7b, 0x62, 0xee, 0x1f, 0x94, 0x4f, 0x9e, 0xae, 0x4e, 0xcf, 0xac, 0x67, 0xb3, 0x38, 0xec, 0x4b, - 0x99, 0xcb, 0xa3, 0xdc, 0x74, 0xb8, 0x7b, 0x7f, 0xd1, 0xba, 0xe9, 0xec, 0x3d, 0x49, 0xcf, 0xd6, - 0xeb, 0x55, 0xa9, 0x92, 0x7a, 0x92, 0xb2, 0x95, 0xe7, 0xde, 0x41, 0xef, 0xf1, 0xec, 0xa6, 0x62, - 0xec, 0xf6, 0x9f, 0x4f, 0x94, 0xb6, 0x7d, 0xd2, 0x7a, 0x6c, 0x97, 0xa6, 0x27, 0x9d, 0xa7, 0xeb, - 0xd3, 0x76, 0xd1, 0xbd, 0x2e, 0x3e, 0x9e, 0xf4, 0x6f, 0xdf, 0xde, 0xce, 0xef, 0xcf, 0x8a, 0xb9, - 0xc1, 0xee, 0x68, 0x78, 0x79, 0xa6, 0x9d, 0x96, 0x27, 0x97, 0x93, 0xc2, 0xad, 0x74, 0xdd, 0x6b, - 0x6b, 0xc7, 0x4f, 0xcd, 0xbb, 0xb6, 0xa3, 0x3c, 0xe5, 0x0e, 0x6f, 0x8f, 0xfa, 0xb7, 0x97, 0xca, - 0xbe, 0x74, 0x58, 0xbc, 0xbf, 0xdf, 0x1b, 0x8d, 0x06, 0x23, 0xf5, 0xb2, 0xab, 0x17, 0x4f, 0xa4, - 0xd6, 0xe8, 0xa2, 0x62, 0x66, 0x53, 0xdd, 0x76, 0x6b, 0x57, 0x2e, 0xf5, 0x47, 0xc3, 0xd3, 0xb7, - 0x8a, 0x7e, 0x76, 0x7d, 0x31, 0xee, 0x3e, 0x5f, 0x9e, 0x57, 0x34, 0xc9, 0xae, 0x8a, 0xd7, 0xad, - 0x96, 0x76, 0xdd, 0x3a, 0xb6, 0xf3, 0xc3, 0xde, 0xeb, 0x61, 0xb7, 0x74, 0xfa, 0xda, 0xbb, 0x7d, - 0x7c, 0x74, 0x8a, 0xfd, 0xb7, 0xd1, 0xb0, 0xea, 0x9e, 0x1d, 0x5d, 0xdc, 0xda, 0x99, 0x89, 0x35, - 0xba, 0x76, 0xce, 0xef, 0x46, 0xea, 0x53, 0xc6, 0x4a, 0x0d, 0x76, 0x2b, 0x46, 0xf9, 0x2e, 0x07, - 0x5c, 0x51, 0xbc, 0x49, 0x49, 0xd7, 0xfd, 0x4b, 0xeb, 0xbc, 0xef, 0x9c, 0xb7, 0x2f, 0x5e, 0x27, - 0xe6, 0x7e, 0x6e, 0x28, 0x3a, 0xc3, 0xd7, 0x1b, 0xcd, 0xea, 0x4d, 0x8a, 0x95, 0xa3, 0xe3, 0x26, - 0x75, 0x59, 0x34, 0xf8, 0x44, 0xd7, 0xb4, 0x07, 0x92, 0x9b, 0xfc, 0x86, 0x06, 0xd4, 0x37, 0x7e, - 0x5e, 0xb3, 0x4d, 0xd3, 0x9d, 0x6d, 0x6d, 0x29, 0x5b, 0xd9, 0xda, 0xd7, 0x6c, 0x36, 0x5b, 0xc7, - 0xc7, 0x6e, 0xed, 0x6b, 0xb7, 0xdb, 0xa5, 0x8f, 0xb9, 0x1a, 0x3a, 0x8a, 0xe8, 0x63, 0xbe, 0xf6, - 0x35, 0x9f, 0xcf, 0xd3, 0xc7, 0x42, 0xed, 0x6b, 0xa1, 0x50, 0xa0, 0x8f, 0xc5, 0xda, 0xd7, 0x62, - 0xb1, 0x48, 0x1f, 0x4b, 0xb5, 0xaf, 0xa5, 0x52, 0x89, 0x3e, 0x56, 0x6a, 0x5f, 0x2b, 0x95, 0x0a, - 0x7d, 0x94, 0x6b, 0x5f, 0x65, 0x59, 0xa6, 0x8f, 0x4a, 0xed, 0xab, 0xa2, 0x28, 0xf4, 0x91, 0xd4, - 0xbe, 0x12, 0x42, 0xe8, 0xa3, 0x5a, 0xfb, 0xaa, 0xaa, 0x2a, 0x7d, 0xb4, 0x21, 0xb5, 0xc0, 0x5a, - 0xeb, 0x41, 0x13, 0x84, 0x3d, 0xea, 0xf0, 0x58, 0x91, 0xe0, 0xd1, 0x05, 0x60, 0x69, 0xd6, 0x96, - 0x59, 0xb3, 0x7b, 0xb2, 0x94, 0xcc, 0x17, 0x84, 0x84, 0xff, 0x97, 0xae, 0xf2, 0x34, 0xcb, 0x95, - 0x97, 0xf3, 0xc0, 0xb0, 0x4f, 0xd2, 0xfa, 0xbc, 0x5f, 0x46, 0x62, 0x85, 0xb2, 0x62, 0x4e, 0x48, - 0x2c, 0x3e, 0x96, 0xcb, 0xf5, 0x59, 0xb9, 0x62, 0x56, 0x48, 0xf8, 0x7f, 0xd1, 0x42, 0x6e, 0xbf, - 0x56, 0x16, 0xad, 0x09, 0x3e, 0x59, 0xfe, 0x13, 0xd4, 0x2a, 0xe5, 0x59, 0x9a, 0x6c, 0xd5, 0xb2, - 0x05, 0x6b, 0x92, 0xa8, 0xc0, 0x5f, 0xd6, 0xcb, 0x85, 0xb4, 0x2a, 0xfc, 0x14, 0x13, 0x65, 0xfc, - 0xa4, 0xe5, 0xd5, 0x9a, 0x61, 0x1a, 0x88, 0x0f, 0x79, 0xe0, 0xd6, 0xc4, 0x39, 0xfa, 0x10, 0x67, - 0xd4, 0x75, 0xb0, 0x25, 0x31, 0x6f, 0xc9, 0x40, 0x02, 0xe5, 0x7e, 0xa8, 0x53, 0x67, 0xc3, 0x5c, - 0x36, 0xd5, 0xe9, 0x6c, 0x20, 0xd9, 0x3d, 0xcd, 0xa8, 0x89, 0x75, 0x74, 0x27, 0xf5, 0x6c, 0x73, - 0x68, 0xa8, 0xcc, 0xcb, 0x57, 0x63, 0x1d, 0x84, 0x29, 0xe5, 0xeb, 0x61, 0x63, 0xfa, 0x90, 0xe8, - 0x23, 0xe2, 0x6a, 0x8a, 0x24, 0xdc, 0x11, 0x5b, 0x95, 0x0c, 0x49, 0x70, 0x24, 0xc3, 0xd9, 0x72, - 0x88, 0xad, 0x75, 0x59, 0x41, 0x47, 0x7b, 0x23, 0xb5, 0x2c, 0xf4, 0xaa, 0x1e, 0x05, 0xd4, 0xe5, - 0xeb, 0x2e, 0x99, 0xb8, 0x5b, 0x92, 0xae, 0xf5, 0x8c, 0x9a, 0x42, 0xd0, 0x75, 0x50, 0x47, 0x87, - 0xe0, 0x8b, 0xe6, 0x6e, 0xb1, 0x6e, 0x2a, 0x92, 0xae, 0xa3, 0x0b, 0x87, 0x0d, 0xc3, 0xcb, 0x1a, - 0x02, 0x6c, 0x80, 0xaf, 0x13, 0xc5, 0xcf, 0x18, 0x98, 0x6f, 0xab, 0x52, 0x9d, 0xe5, 0xc4, 0xe5, - 0x52, 0x7e, 0x7b, 0x92, 0xb5, 0xd5, 0xd7, 0x7a, 0x7d, 0x1d, 0x5d, 0x4d, 0xde, 0x88, 0x5d, 0x1b, - 0x46, 0x62, 0x49, 0x36, 0xf4, 0xac, 0xee, 0x28, 0xb6, 0xa9, 0xeb, 0xb2, 0x64, 0x33, 0x2f, 0x6a, - 0xad, 0x04, 0xc3, 0x59, 0xa4, 0x45, 0x07, 0xe6, 0xc8, 0x7c, 0x22, 0x54, 0x97, 0x22, 0x56, 0xa0, - 0xc8, 0xef, 0x13, 0x04, 0x5f, 0xcb, 0x8a, 0xe2, 0x3f, 0xeb, 0x0c, 0x0e, 0x7d, 0xb4, 0x4c, 0x47, - 0xa3, 0xf3, 0xd1, 0xd5, 0x26, 0x44, 0xad, 0x9b, 0x20, 0x33, 0x19, 0xec, 0x2d, 0x99, 0xf4, 0xa5, - 0x91, 0x06, 0xb0, 0xb1, 0xb3, 0xf3, 0xaf, 0x72, 0x2f, 0x04, 0x62, 0xd4, 0x5f, 0xc0, 0x18, 0x8d, - 0xe3, 0x40, 0xde, 0xb6, 0x34, 0x43, 0x25, 0x93, 0xda, 0x56, 0x36, 0x32, 0x97, 0x41, 0x29, 0x0f, - 0xdf, 0xa1, 0x2c, 0x9b, 0x58, 0x44, 0x42, 0xb4, 0x78, 0x4f, 0xe1, 0x3c, 0x3a, 0x87, 0x0a, 0x76, - 0xac, 0x6e, 0x5a, 0x92, 0xa2, 0xb9, 0x53, 0x20, 0x11, 0x3a, 0x46, 0x06, 0xcd, 0x4b, 0x4c, 0xe4, - 0x9c, 0xb9, 0xe5, 0xd3, 0x10, 0x12, 0x26, 0x90, 0x63, 0x0e, 0x3f, 0xe7, 0x92, 0x20, 0xd5, 0x46, - 0x1a, 0x94, 0x26, 0xaa, 0x60, 0xcd, 0xa2, 0xf8, 0x52, 0xf9, 0x70, 0xf6, 0x8c, 0x12, 0x85, 0x4a, - 0x14, 0xd3, 0xa6, 0x74, 0xc9, 0x86, 0x2e, 0x0f, 0x5d, 0xd7, 0x34, 0x66, 0x40, 0x0c, 0xba, 0x66, - 0x10, 0x68, 0x5c, 0x19, 0xda, 0x0e, 0xc0, 0xb0, 0x4c, 0x2d, 0x3e, 0x8e, 0xe5, 0xc9, 0x93, 0x4d, - 0x5b, 0x25, 0x76, 0xb4, 0xc7, 0xb4, 0x54, 0x22, 0x9d, 0x77, 0x84, 0x78, 0x55, 0x4c, 0x0c, 0x53, - 0x6e, 0x75, 0x89, 0x72, 0x15, 0xbe, 0x3e, 0xd0, 0x0c, 0x8f, 0x12, 0x0a, 0xb8, 0xfe, 0xf0, 0xa7, - 0x37, 0x33, 0xf8, 0xdb, 0xeb, 0x6e, 0xad, 0x8f, 0x18, 0x9b, 0x2d, 0x1a, 0x08, 0x20, 0x14, 0xf8, - 0x79, 0x5a, 0x97, 0x64, 0xa2, 0x2f, 0x16, 0x9c, 0x25, 0xa9, 0xaa, 0x66, 0xf4, 0x90, 0xb2, 0x00, - 0x6b, 0xe2, 0xfc, 0x2b, 0x7a, 0xcb, 0x59, 0x99, 0xd8, 0xd4, 0xca, 0x26, 0x00, 0x1f, 0xd4, 0x60, - 0x71, 0x28, 0x49, 0x06, 0x50, 0xee, 0xf3, 0x89, 0x54, 0x02, 0x6a, 0xf2, 0x75, 0x9b, 0x75, 0x62, - 0xa9, 0xcf, 0x25, 0x3e, 0x8e, 0xb2, 0xb1, 0x0d, 0x40, 0x8d, 0x1e, 0xac, 0x1e, 0x95, 0xd4, 0xa0, - 0x9f, 0xb8, 0x88, 0xf5, 0x2d, 0x5b, 0x9f, 0xa7, 0xc7, 0x36, 0x3a, 0xd8, 0xec, 0x78, 0xbb, 0xae, - 0x69, 0x41, 0x3f, 0x75, 0xd2, 0x05, 0x66, 0xe2, 0xb5, 0x13, 0xa6, 0xad, 0xa0, 0x29, 0x57, 0xe6, - 0x03, 0xf2, 0xcb, 0xce, 0xd3, 0x8c, 0xd2, 0x82, 0x81, 0x26, 0xa4, 0xa1, 0x6b, 0x7a, 0x94, 0x9b, - 0xcf, 0x21, 0xb2, 0xd2, 0xe8, 0xc4, 0x77, 0x56, 0xb9, 0xe8, 0xd8, 0x2c, 0xa0, 0x33, 0x0f, 0xa8, - 0x00, 0x44, 0x8c, 0x1e, 0x9a, 0x97, 0x1c, 0x8e, 0x11, 0x89, 0xc1, 0x47, 0x7c, 0xb6, 0xae, 0x6a, - 0x8e, 0xa5, 0x4b, 0xd3, 0x9a, 0x66, 0xd0, 0x74, 0x19, 0x5d, 0xc1, 0x75, 0xaf, 0xdd, 0x2d, 0x4a, - 0x87, 0x89, 0x02, 0x65, 0x8e, 0x94, 0xc4, 0x9c, 0xbe, 0xa4, 0x9a, 0x63, 0x58, 0x20, 0x90, 0x44, - 0x3f, 0xc4, 0x84, 0x3f, 0x82, 0x3c, 0x2f, 0xac, 0x4e, 0xa5, 0x29, 0x2b, 0xcb, 0xc6, 0x13, 0xe7, - 0xe9, 0xfe, 0xb0, 0xe7, 0xf9, 0x1d, 0x69, 0x7f, 0x0b, 0x39, 0x3a, 0x54, 0xa3, 0x0b, 0xa2, 0xd1, - 0xc5, 0xbd, 0x8e, 0x2d, 0xcf, 0x3f, 0xcd, 0x90, 0xbb, 0x60, 0x07, 0xf3, 0xf4, 0x0b, 0x99, 0xba, - 0xde, 0x3a, 0x60, 0xcc, 0x11, 0x71, 0xee, 0x13, 0xc8, 0x96, 0x37, 0xfd, 0x15, 0x04, 0x37, 0x92, - 0xf4, 0x68, 0x49, 0x3a, 0x2d, 0xeb, 0x8b, 0x26, 0xb4, 0x50, 0x8f, 0x1c, 0x40, 0x28, 0xcc, 0xb6, - 0x43, 0x7d, 0xd5, 0x74, 0x27, 0x65, 0x46, 0x17, 0x08, 0x4a, 0x73, 0xb6, 0x7e, 0x40, 0x32, 0x90, - 0x24, 0xa0, 0x4c, 0xc8, 0x23, 0x69, 0x2d, 0xad, 0xda, 0xb4, 0xa6, 0xcf, 0x56, 0xe2, 0x3c, 0xa0, - 0x26, 0xd6, 0xa9, 0x81, 0xa6, 0xaa, 0x3a, 0x99, 0xa7, 0x61, 0xd8, 0xb3, 0x77, 0x17, 0xea, 0x72, - 0x0b, 0x50, 0x25, 0xe1, 0xad, 0xfd, 0x77, 0x6b, 0x76, 0x75, 0x13, 0x78, 0x17, 0xc5, 0xd3, 0xdf, - 0x5b, 0xed, 0xe5, 0x0f, 0x56, 0x7b, 0x01, 0x71, 0x09, 0x2b, 0xc1, 0xef, 0x95, 0xbf, 0x6c, 0x3d, - 0xf9, 0x2d, 0x5b, 0xbc, 0x4f, 0x71, 0x62, 0xb8, 0xf7, 0x4b, 0xac, 0x20, 0x26, 0x33, 0x40, 0x27, - 0x88, 0x23, 0x98, 0x44, 0x86, 0x9f, 0x46, 0x91, 0x3d, 0x22, 0xef, 0x41, 0x90, 0xf8, 0x2f, 0xda, - 0x00, 0x77, 0x00, 0xa5, 0x25, 0x54, 0x76, 0x01, 0xd6, 0x47, 0x00, 0x4a, 0xef, 0x57, 0xc7, 0xad, - 0x3c, 0x09, 0xa6, 0xd8, 0x9e, 0x85, 0x24, 0x97, 0xb7, 0xf4, 0x28, 0x2b, 0xc2, 0x84, 0xc4, 0x96, - 0xaf, 0xc8, 0x58, 0x7c, 0xf0, 0x0c, 0x43, 0xf3, 0x91, 0xb2, 0x85, 0x3c, 0x24, 0x28, 0xb1, 0x5e, - 0xd2, 0xe1, 0xc0, 0xbd, 0xbd, 0xc3, 0x05, 0x17, 0xb2, 0x09, 0x6a, 0x2a, 0x23, 0x12, 0x16, 0x9d, - 0xb2, 0x39, 0xc1, 0x89, 0xc3, 0x19, 0x60, 0xf3, 0x0e, 0x34, 0x3f, 0x59, 0x90, 0x00, 0x36, 0x00, - 0xa4, 0x31, 0xae, 0x51, 0xa6, 0x13, 0x16, 0xbf, 0xeb, 0x9b, 0x76, 0x06, 0xa0, 0xbd, 0xf6, 0x67, - 0x21, 0xea, 0x09, 0x56, 0x45, 0x22, 0xc4, 0x73, 0xbb, 0x42, 0x96, 0xff, 0x57, 0xba, 0xe8, 0xf0, - 0x09, 0x22, 0x39, 0x64, 0x0b, 0x56, 0x32, 0xed, 0xf5, 0x56, 0x94, 0xad, 0x03, 0x4f, 0xd8, 0x2a, - 0x52, 0x9e, 0x13, 0x5b, 0x93, 0x94, 0x8e, 0xb0, 0x13, 0xb0, 0x78, 0xe2, 0x8c, 0x76, 0x8d, 0x9a, - 0x10, 0xe1, 0xbf, 0x6b, 0xa7, 0x31, 0xcf, 0xc7, 0x99, 0xa4, 0xbf, 0x44, 0xbb, 0x3a, 0x99, 0xd4, - 0xe9, 0x8a, 0xdc, 0x02, 0x41, 0x3b, 0x70, 0x7c, 0x1d, 0xe0, 0x79, 0xe8, 0xb8, 0x5a, 0x77, 0xba, - 0xe5, 0x21, 0xdc, 0x4f, 0x0e, 0x58, 0x78, 0x36, 0x90, 0xf9, 0xe9, 0x6a, 0x31, 0xbc, 0xaa, 0xd2, - 0x65, 0xa7, 0xee, 0x49, 0x93, 0x2d, 0x82, 0x7b, 0x50, 0x8e, 0xa7, 0xa7, 0xb8, 0xa6, 0xe4, 0xb8, - 0xb3, 0x85, 0xa6, 0xb0, 0xb6, 0xb3, 0x45, 0x24, 0x8c, 0x89, 0xb7, 0xb6, 0xaa, 0x30, 0xc6, 0x4f, - 0xa8, 0x88, 0xde, 0x3c, 0xdb, 0x92, 0xaa, 0x0d, 0x9d, 0x1a, 0x20, 0x37, 0x10, 0x9d, 0x59, 0xd4, - 0xca, 0xd6, 0xe8, 0x41, 0x45, 0x86, 0xb8, 0x22, 0xe2, 0x71, 0x99, 0xc9, 0x3d, 0x24, 0xb7, 0x20, - 0x87, 0x5f, 0x2b, 0x5a, 0x73, 0x39, 0x64, 0x80, 0x31, 0x36, 0xb1, 0x7e, 0xe8, 0x69, 0xa7, 0x6f, - 0x8e, 0x83, 0xf1, 0x67, 0xeb, 0xa0, 0x66, 0x0f, 0x98, 0x32, 0xd3, 0x95, 0x54, 0xa2, 0x19, 0x09, - 0xa0, 0x1b, 0x61, 0xf1, 0x98, 0xc8, 0xe1, 0x87, 0x4d, 0x90, 0x24, 0x03, 0x10, 0xc4, 0xb6, 0x4d, - 0x3b, 0x04, 0x63, 0x09, 0x87, 0x5f, 0xe5, 0xdc, 0x6a, 0xc8, 0xf3, 0x34, 0x88, 0x74, 0x69, 0x49, - 0x6d, 0xf0, 0x09, 0x87, 0x0d, 0x71, 0x21, 0xc1, 0x91, 0xac, 0x42, 0x03, 0x76, 0xfb, 0xb8, 0x72, - 0xb3, 0x38, 0xde, 0xb5, 0xd3, 0x66, 0xf2, 0xab, 0x90, 0xf8, 0x48, 0x59, 0x00, 0x5f, 0x5f, 0xb9, - 0x72, 0xd2, 0x05, 0x27, 0x98, 0x27, 0x90, 0x47, 0x61, 0x1a, 0x45, 0x05, 0x2a, 0xb2, 0x50, 0xe7, - 0x5f, 0x51, 0x4c, 0x0a, 0x5f, 0x0d, 0xd0, 0x4c, 0x9c, 0x99, 0x3f, 0x83, 0xf9, 0xf9, 0x57, 0x9b, - 0x32, 0x51, 0x3f, 0x21, 0x07, 0x3a, 0x92, 0xaa, 0xbb, 0x81, 0xbe, 0xc9, 0x34, 0x4d, 0x56, 0xc8, - 0x71, 0xa5, 0x95, 0xfa, 0x4b, 0x6c, 0xa0, 0xa9, 0x44, 0x11, 0x07, 0x4a, 0x51, 0x93, 0x0d, 0x2d, - 0x15, 0x6a, 0x1b, 0x44, 0xf5, 0xa5, 0xf9, 0x57, 0x58, 0x1f, 0x06, 0xb4, 0xfc, 0x59, 0x75, 0x6c, - 0x01, 0xb9, 0x10, 0xa2, 0x51, 0xa4, 0xd7, 0x65, 0x0a, 0x5e, 0x9e, 0x5c, 0xa9, 0x2a, 0x2e, 0x74, - 0x78, 0x18, 0xa9, 0x36, 0xe8, 0x8d, 0x67, 0xef, 0x29, 0x38, 0x28, 0xe4, 0xbf, 0xbe, 0x18, 0xc2, - 0xd7, 0x97, 0xd1, 0xca, 0x72, 0x0c, 0xa9, 0x09, 0xaa, 0x7a, 0x78, 0xa8, 0x65, 0x3f, 0x3e, 0xd0, - 0x46, 0xbc, 0x6a, 0x6a, 0x50, 0x47, 0x9d, 0xad, 0x50, 0x2f, 0x58, 0xa9, 0xb4, 0xec, 0x1a, 0xfe, - 0x74, 0x14, 0x83, 0x54, 0x0a, 0x9f, 0xe6, 0x45, 0xda, 0x8d, 0x94, 0x16, 0xfd, 0x26, 0x2b, 0x62, - 0x50, 0x4f, 0xd5, 0x46, 0x7e, 0x05, 0x78, 0xf4, 0xc4, 0x4e, 0xa1, 0x4a, 0xf5, 0xed, 0xb0, 0x32, - 0x89, 0xc3, 0x5e, 0xd1, 0x2d, 0xa4, 0x87, 0xf9, 0xd7, 0x3e, 0x91, 0x6c, 0x77, 0xb6, 0xac, 0x0a, - 0x54, 0x23, 0x52, 0xbf, 0x14, 0x48, 0x7d, 0x9b, 0xa8, 0x73, 0xc0, 0xf5, 0x6c, 0xc1, 0x96, 0x28, - 0xef, 0xc5, 0x9f, 0x21, 0xb6, 0x0c, 0x3a, 0xb2, 0x36, 0xa3, 0x31, 0x28, 0x60, 0x2c, 0xc1, 0x1c, - 0xd9, 0x38, 0xb5, 0x16, 0xa0, 0x0e, 0xd7, 0x81, 0x5a, 0x8f, 0xe7, 0x28, 0x36, 0x4c, 0xc8, 0x16, - 0x51, 0x7b, 0xc4, 0xf1, 0xc6, 0x99, 0x43, 0xeb, 0x68, 0xfe, 0x6f, 0xd0, 0xf4, 0xba, 0x36, 0xe8, - 0xf9, 0x4e, 0x82, 0x2d, 0xdf, 0x59, 0xd7, 0x36, 0x07, 0xb3, 0x60, 0x89, 0x06, 0x1c, 0x74, 0xee, - 0x9a, 0xb3, 0xf7, 0x79, 0x53, 0xc0, 0x28, 0xe6, 0xbe, 0x46, 0x87, 0x5a, 0xbc, 0x6f, 0x2e, 0xe6, - 0x11, 0x69, 0x5e, 0xcb, 0x45, 0x31, 0xcc, 0x25, 0x03, 0xa1, 0xea, 0xa1, 0xb4, 0xc0, 0x16, 0x11, - 0x8d, 0x77, 0x70, 0x12, 0x61, 0x50, 0x41, 0x50, 0xc6, 0x02, 0xff, 0x9e, 0x89, 0x27, 0xfa, 0x4d, - 0x7a, 0x74, 0x37, 0xf3, 0x25, 0xc9, 0xb7, 0x6f, 0x8b, 0x86, 0x24, 0xd9, 0x31, 0xf5, 0xa1, 0x4b, - 0xe8, 0x32, 0xa4, 0x4e, 0x0b, 0xba, 0x36, 0x90, 0x17, 0x30, 0x4e, 0x84, 0x4f, 0x5e, 0x77, 0x2b, - 0x91, 0x25, 0x11, 0xb2, 0x9a, 0x62, 0x4b, 0xc7, 0x63, 0xf8, 0x4b, 0x6c, 0x38, 0x64, 0xfd, 0xc6, - 0x87, 0xe2, 0x77, 0xd1, 0x6b, 0x29, 0x87, 0x4d, 0x31, 0xc1, 0x1a, 0x60, 0x3d, 0x6a, 0xe1, 0x00, - 0x43, 0xc1, 0xe1, 0xc7, 0xeb, 0x87, 0xba, 0x87, 0x6b, 0x4c, 0xb2, 0xb7, 0x7a, 0xd8, 0x29, 0x8c, - 0xe9, 0xa8, 0x8a, 0x2a, 0xe9, 0x09, 0x5f, 0x45, 0x11, 0x30, 0x23, 0x00, 0x3d, 0xf1, 0xf3, 0xaf, - 0xbd, 0xbf, 0x03, 0xe2, 0xab, 0xd8, 0x15, 0x01, 0x86, 0xfc, 0xf7, 0x60, 0x88, 0xa0, 0xc4, 0x7d, - 0x1d, 0xff, 0x2d, 0x18, 0xdd, 0x2e, 0xc2, 0x78, 0xf9, 0x6b, 0x30, 0xba, 0xdd, 0x4a, 0x37, 0xdb, - 0xf5, 0xc0, 0x24, 0x40, 0xda, 0x0a, 0x5f, 0x15, 0x59, 0x95, 0x29, 0xc8, 0xb1, 0x2c, 0xe9, 0xff, - 0x4f, 0x20, 0xaa, 0x05, 0x22, 0x22, 0x44, 0x0f, 0x96, 0x3c, 0x94, 0x91, 0xc1, 0x79, 0x94, 0x5b, - 0x58, 0x49, 0xf7, 0x2b, 0x79, 0x6a, 0x8c, 0xcc, 0xc4, 0xd5, 0xf4, 0x98, 0xe7, 0x97, 0xf5, 0x15, - 0x9f, 0xcf, 0xe3, 0x3a, 0xc2, 0xbf, 0x5c, 0x44, 0xd6, 0xa1, 0xd7, 0xce, 0x23, 0x2c, 0x74, 0xe5, - 0x85, 0xd8, 0x12, 0x7a, 0x3f, 0x64, 0x4d, 0x47, 0x27, 0x4a, 0x3a, 0x07, 0xda, 0x00, 0x2a, 0x95, - 0x82, 0xef, 0x56, 0x09, 0x52, 0x42, 0xde, 0x97, 0x45, 0x85, 0x5a, 0x1f, 0xec, 0x2b, 0x62, 0xcc, - 0x81, 0x7d, 0x5b, 0x43, 0x37, 0x32, 0x74, 0xaa, 0x87, 0x84, 0x4a, 0xd2, 0x47, 0x9d, 0x84, 0xb8, - 0x45, 0x9a, 0x55, 0x9e, 0x85, 0x25, 0xdf, 0x3c, 0x14, 0x1e, 0x44, 0xa3, 0x83, 0x7e, 0xce, 0x7c, - 0x3f, 0x19, 0x3a, 0x06, 0x24, 0x48, 0x53, 0x08, 0x5b, 0x68, 0x61, 0x2f, 0x96, 0x37, 0x72, 0xb1, - 0xbe, 0xde, 0x89, 0x18, 0x31, 0xf6, 0x62, 0xe2, 0xd5, 0x5b, 0xa7, 0xcb, 0x6d, 0xfb, 0x7c, 0x2b, - 0x17, 0x62, 0xfc, 0xcb, 0x5d, 0xac, 0xd5, 0xfc, 0x3e, 0x7a, 0x06, 0xad, 0x3d, 0x34, 0x0c, 0x2a, - 0xd9, 0xa0, 0x51, 0xe5, 0x65, 0x85, 0xd5, 0x42, 0x99, 0xe2, 0x5a, 0x3f, 0x12, 0xea, 0xee, 0x9f, - 0x68, 0xc5, 0xed, 0x0f, 0x07, 0x60, 0xd5, 0x32, 0x83, 0x03, 0x35, 0x10, 0xe0, 0x72, 0x9a, 0x9a, - 0xc0, 0x25, 0xe3, 0xb7, 0x93, 0x0b, 0x31, 0x5f, 0x71, 0x59, 0xfc, 0xa3, 0x15, 0xb3, 0x4c, 0x5b, - 0xdd, 0x25, 0x7f, 0xcd, 0xba, 0x29, 0x08, 0x59, 0x56, 0x68, 0x54, 0xac, 0xea, 0x32, 0x3a, 0x48, - 0xe9, 0x8f, 0xf7, 0x71, 0xb1, 0x56, 0xdf, 0x03, 0xf6, 0xf3, 0x01, 0xd8, 0xd5, 0x58, 0x08, 0x2d, - 0x94, 0xbf, 0x89, 0x8b, 0x95, 0xea, 0x26, 0x6a, 0x58, 0xeb, 0xe9, 0xe6, 0x4f, 0xa6, 0xea, 0x5d, - 0x28, 0x9f, 0x1e, 0x66, 0x16, 0x7a, 0x73, 0x69, 0x13, 0x87, 0xb8, 0x20, 0x6e, 0x74, 0xcd, 0x71, - 0x67, 0x21, 0xb5, 0x21, 0x97, 0x2d, 0x86, 0xf4, 0xdc, 0xad, 0x69, 0x8d, 0x59, 0x9f, 0x8b, 0x94, - 0x89, 0xb7, 0x8e, 0x7d, 0xf4, 0x54, 0x22, 0x8a, 0x0e, 0xfe, 0x47, 0x31, 0x86, 0x7e, 0xed, 0xa0, - 0x8e, 0xef, 0x1b, 0x03, 0x32, 0x88, 0x7b, 0xa8, 0x99, 0x39, 0x12, 0xe9, 0x4e, 0x08, 0x23, 0x7e, - 0xe1, 0xe8, 0xba, 0xff, 0xda, 0x21, 0x3d, 0x1a, 0x2a, 0xba, 0x4a, 0xf0, 0xe7, 0xa8, 0x46, 0x47, - 0xb9, 0xbf, 0xe0, 0x85, 0x6a, 0x0a, 0x5f, 0xed, 0x9e, 0xcc, 0x12, 0x46, 0xec, 0x0b, 0x39, 0xb9, - 0xc0, 0xc4, 0x4c, 0x14, 0x74, 0xba, 0xaf, 0x06, 0x09, 0xbe, 0xf6, 0x82, 0x92, 0x51, 0xb6, 0x35, - 0x5a, 0x98, 0x39, 0x70, 0x98, 0xfb, 0x6a, 0xc9, 0x57, 0x20, 0x0f, 0x5c, 0x28, 0xca, 0xda, 0x0c, - 0xeb, 0x21, 0xa0, 0x93, 0x3b, 0xfa, 0xa2, 0x33, 0x0e, 0xe9, 0xa1, 0xe6, 0x11, 0x71, 0x40, 0xa3, - 0x82, 0x88, 0x0a, 0x4a, 0x48, 0xd7, 0x0c, 0xa5, 0x47, 0x70, 0x1d, 0xf3, 0xf9, 0xbe, 0x67, 0x61, - 0xc7, 0x1d, 0x55, 0x4b, 0x6c, 0x84, 0x91, 0x48, 0x76, 0xd5, 0x4a, 0x88, 0x92, 0x3c, 0x62, 0x35, - 0x24, 0x07, 0xb6, 0xd4, 0xa1, 0xe7, 0xf6, 0x46, 0xbf, 0x94, 0x3f, 0x5d, 0xd8, 0x15, 0x0c, 0x63, - 0xdc, 0x5a, 0x62, 0xfa, 0x8b, 0x0d, 0x8c, 0xe5, 0x05, 0x92, 0x57, 0x93, 0xa2, 0x00, 0xff, 0xf1, - 0x0b, 0xeb, 0x4a, 0xd1, 0x35, 0x8b, 0x99, 0xd4, 0xd1, 0xa4, 0x98, 0xff, 0x3a, 0xe2, 0x57, 0xa5, - 0x0e, 0x6d, 0xc4, 0xdf, 0x47, 0x3e, 0xac, 0x40, 0x3d, 0x5b, 0x31, 0x6e, 0x74, 0x78, 0x03, 0x88, - 0xad, 0x89, 0xe3, 0xeb, 0xf1, 0xb9, 0x85, 0xba, 0x57, 0x08, 0x71, 0xf6, 0xb0, 0xad, 0x04, 0xcb, - 0xb2, 0x3b, 0xd9, 0x45, 0xb3, 0xc1, 0x92, 0x74, 0xf8, 0x5e, 0xdf, 0x74, 0xee, 0x9d, 0xa6, 0x73, - 0xbc, 0x07, 0x86, 0xf5, 0xdf, 0x07, 0xf6, 0xd1, 0x68, 0xf2, 0xfc, 0x7b, 0xb3, 0xc8, 0x46, 0x43, - 0x7d, 0xa6, 0x1e, 0xb5, 0x2e, 0x94, 0xd8, 0x95, 0xde, 0xcf, 0x95, 0x7a, 0xc6, 0x3c, 0xfd, 0xaa, - 0x38, 0x3e, 0x59, 0xe6, 0x96, 0xd8, 0x61, 0x36, 0xec, 0xbd, 0x89, 0xe8, 0x27, 0x3e, 0xd9, 0x2e, - 0x70, 0x48, 0x9f, 0xc3, 0xd3, 0x96, 0xa3, 0x5e, 0x5f, 0x80, 0x2f, 0x07, 0x2b, 0x26, 0x54, 0xba, - 0x14, 0x2f, 0x5d, 0x0a, 0x5a, 0x5f, 0x31, 0x5e, 0xd0, 0xa8, 0x58, 0xb0, 0xf4, 0xec, 0xf3, 0x8b, - 0xa2, 0x1b, 0x91, 0x19, 0x06, 0x30, 0x4e, 0x62, 0xff, 0x14, 0x42, 0x49, 0x48, 0x86, 0x3f, 0x67, - 0x9f, 0x54, 0xab, 0x7c, 0x8f, 0xde, 0x52, 0xc7, 0xde, 0x71, 0x07, 0x55, 0x16, 0x54, 0x85, 0x9b, - 0x2a, 0xfe, 0x9f, 0x18, 0x5f, 0xe8, 0x21, 0x2d, 0x6c, 0xd9, 0x3b, 0x9c, 0x73, 0xea, 0x8b, 0x4d, - 0x27, 0x86, 0x48, 0x6a, 0x40, 0xad, 0x90, 0xc6, 0x38, 0xa0, 0xae, 0x46, 0x74, 0x95, 0xed, 0x48, - 0xae, 0xcc, 0x59, 0x95, 0x38, 0xaf, 0xd5, 0xd8, 0x96, 0x64, 0x14, 0xc1, 0xc1, 0xf0, 0xe5, 0x55, - 0x98, 0xac, 0x75, 0x4d, 0x65, 0xe8, 0x2c, 0xe1, 0x93, 0x25, 0xaf, 0x82, 0x52, 0x5a, 0x09, 0x25, - 0x90, 0x08, 0x9a, 0x61, 0xe0, 0xd6, 0xa8, 0x05, 0x94, 0xcc, 0x1c, 0xce, 0xc2, 0x7b, 0xa5, 0x01, - 0x25, 0xd1, 0xd2, 0xeb, 0x14, 0xc4, 0x79, 0xda, 0xd2, 0x42, 0x1e, 0x93, 0x88, 0x11, 0x18, 0x58, - 0x5a, 0x81, 0xff, 0x8e, 0xed, 0xd1, 0x88, 0x89, 0x6c, 0x4c, 0x6b, 0x2e, 0x45, 0x95, 0x86, 0x65, - 0x9f, 0x60, 0x94, 0x5e, 0x00, 0x61, 0xe9, 0x09, 0x70, 0x9a, 0xb5, 0x82, 0x9a, 0x84, 0x5d, 0xdd, - 0x0b, 0xc7, 0x7e, 0xc0, 0x8f, 0x0a, 0x0b, 0xca, 0x29, 0x46, 0xf8, 0x11, 0x82, 0xdd, 0x1a, 0x7b, - 0x80, 0xfd, 0x2d, 0x01, 0x6b, 0x12, 0x82, 0x16, 0x5a, 0xcc, 0x21, 0x6a, 0xf1, 0x00, 0x33, 0xd3, - 0x7b, 0x01, 0x0d, 0x56, 0xa7, 0x40, 0x7b, 0xfa, 0xd1, 0x86, 0x54, 0x69, 0xe5, 0x86, 0x54, 0x69, - 0xe5, 0x86, 0x54, 0x69, 0xd5, 0x86, 0x14, 0xcc, 0x7e, 0xda, 0x72, 0x5c, 0x67, 0xb6, 0xb4, 0xb2, - 0x16, 0x2b, 0x04, 0x4a, 0x8c, 0xed, 0xd9, 0x07, 0xdb, 0x86, 0x74, 0x1f, 0x61, 0xb6, 0x62, 0x7b, - 0xa0, 0x4f, 0x94, 0x17, 0x21, 0x8d, 0xcb, 0xd0, 0x5c, 0xed, 0xa7, 0x5a, 0x36, 0xbd, 0x62, 0x42, - 0x73, 0x69, 0x5a, 0xc1, 0x8c, 0x53, 0xfa, 0x2f, 0x7a, 0xd8, 0x7e, 0x43, 0xba, 0xd9, 0xa2, 0x3b, - 0x69, 0xb4, 0x41, 0xa6, 0xaf, 0x79, 0xcd, 0xb2, 0x1f, 0x2b, 0x88, 0x6d, 0x61, 0x34, 0xc5, 0x5a, - 0xf4, 0xa6, 0xc5, 0x5f, 0xd8, 0xa2, 0x07, 0x15, 0x50, 0xe2, 0x0f, 0x05, 0x1f, 0xd7, 0x92, 0x6f, - 0xdc, 0x63, 0xf0, 0x97, 0x64, 0x09, 0x88, 0xa7, 0x50, 0x53, 0x3e, 0x3b, 0x2e, 0x2c, 0x28, 0xbe, - 0xb0, 0x4a, 0x4d, 0x0e, 0xf5, 0x34, 0xa8, 0x53, 0x0c, 0xf9, 0x78, 0x96, 0x65, 0x89, 0x18, 0x20, - 0x8d, 0x49, 0x3e, 0x86, 0xad, 0xff, 0x0e, 0xc1, 0x79, 0x47, 0xb0, 0x47, 0xd0, 0x5d, 0xa3, 0xcf, - 0x44, 0xfd, 0x54, 0xdd, 0x12, 0x1f, 0xea, 0x6a, 0x4d, 0xea, 0x02, 0xda, 0x43, 0xa8, 0x65, 0x09, - 0x81, 0xbf, 0x88, 0xe3, 0x56, 0xf8, 0x8b, 0xa2, 0x6a, 0xe4, 0xfb, 0xfd, 0x88, 0x34, 0x10, 0x2f, - 0x15, 0x6f, 0xd5, 0x07, 0xec, 0x89, 0x62, 0x06, 0x39, 0x0e, 0x6b, 0x46, 0xe7, 0xb6, 0xea, 0x91, - 0xde, 0x02, 0xc5, 0xc5, 0xc5, 0xaa, 0xce, 0x2e, 0x0c, 0x99, 0xda, 0x3a, 0xf1, 0xe4, 0x11, 0x58, - 0x02, 0xac, 0x7e, 0xfa, 0x27, 0xae, 0x50, 0xdc, 0x6c, 0xd3, 0xa5, 0xfb, 0xad, 0x45, 0x95, 0xf4, - 0x78, 0xaa, 0xe7, 0xaf, 0xcb, 0x5b, 0x93, 0xee, 0x11, 0x52, 0x62, 0x69, 0xa4, 0x9e, 0xbd, 0x17, - 0x52, 0xb9, 0xe8, 0x33, 0x1d, 0x11, 0x98, 0x5c, 0xc1, 0xce, 0x88, 0xbf, 0x57, 0x5e, 0xfa, 0xbc, - 0x65, 0x06, 0x8a, 0x7d, 0x68, 0x4b, 0x39, 0x9b, 0x5f, 0xda, 0x3e, 0x45, 0x66, 0x4c, 0x6d, 0xa1, - 0x75, 0xfb, 0x78, 0x4c, 0xf9, 0x7e, 0x57, 0x08, 0x17, 0x1d, 0xbf, 0x6b, 0x54, 0x6d, 0xa7, 0x1f, - 0xb9, 0x15, 0x2a, 0x7b, 0x44, 0xa3, 0xa1, 0x3b, 0x6c, 0xba, 0xe3, 0x1e, 0xcd, 0x3e, 0x8a, 0x15, - 0x09, 0x69, 0x91, 0x81, 0x5a, 0xec, 0xa9, 0xd7, 0x31, 0x65, 0x5d, 0x0c, 0x29, 0x64, 0xeb, 0xb8, - 0xda, 0x3b, 0x2b, 0x3d, 0xac, 0x9a, 0xb0, 0xc0, 0xad, 0x88, 0x23, 0x35, 0xac, 0x86, 0xb3, 0xee, - 0x33, 0xbd, 0x80, 0xa8, 0xab, 0x04, 0x7a, 0x91, 0x67, 0xc3, 0xfb, 0x20, 0xca, 0x04, 0x4a, 0xf8, - 0x3b, 0xa9, 0x21, 0xb3, 0x7f, 0xb5, 0x8e, 0x1a, 0x88, 0x26, 0x8a, 0x5d, 0x10, 0x1f, 0xc5, 0xa8, - 0xb4, 0x45, 0x42, 0x61, 0x20, 0x31, 0x38, 0x65, 0x36, 0xee, 0x6b, 0x2e, 0x01, 0x2d, 0x40, 0xa2, - 0xc2, 0x1e, 0xcd, 0xb8, 0x25, 0x61, 0x81, 0x65, 0x2d, 0x9b, 0x8c, 0x56, 0xb8, 0x1c, 0x2a, 0x61, - 0x77, 0x5c, 0xb0, 0xda, 0x63, 0x3c, 0x75, 0x9e, 0x56, 0x55, 0x7f, 0x63, 0x32, 0x62, 0x50, 0xae, - 0xa8, 0xea, 0x93, 0x13, 0x32, 0xcc, 0x60, 0xf3, 0x72, 0xa1, 0xf1, 0x8a, 0x9f, 0x34, 0xbf, 0x17, - 0x48, 0xc8, 0x2e, 0x34, 0xc8, 0xad, 0xc0, 0x6b, 0xfd, 0x47, 0xf6, 0x77, 0xa8, 0xf7, 0x1f, 0x1a, - 0xdf, 0xe9, 0x6e, 0x78, 0x6f, 0xc9, 0x81, 0xe9, 0x79, 0x99, 0x7a, 0x82, 0x66, 0x31, 0x9a, 0x95, - 0xbe, 0x01, 0xba, 0x09, 0x02, 0xb4, 0x22, 0xd9, 0x4a, 0x9f, 0xd9, 0x24, 0x1f, 0x79, 0xdd, 0xe9, - 0x3a, 0x5d, 0xe5, 0x38, 0x0f, 0xc9, 0x9c, 0xb0, 0x28, 0x0a, 0x21, 0x01, 0x35, 0x8e, 0x48, 0x78, - 0x0f, 0x9e, 0xfb, 0x5b, 0xd7, 0x6a, 0x64, 0xc6, 0x82, 0x2e, 0x30, 0x53, 0x89, 0xf1, 0x8a, 0xe8, - 0xd2, 0x5c, 0xdf, 0x4e, 0x5c, 0xd1, 0xa5, 0xd8, 0x8a, 0x2e, 0xc5, 0x0f, 0xc3, 0x02, 0xc2, 0xab, - 0xaf, 0x50, 0xf1, 0xe2, 0x27, 0x0b, 0x95, 0x88, 0xb2, 0xe7, 0x3b, 0x06, 0xe2, 0xd1, 0x37, 0x2b, - 0xac, 0xf6, 0xbf, 0x64, 0x8d, 0x16, 0xf8, 0x95, 0x43, 0x59, 0xd2, 0xdb, 0x97, 0x45, 0xf0, 0xca, - 0x6a, 0xcc, 0xa4, 0x5d, 0x99, 0x65, 0x98, 0x6e, 0xb2, 0x06, 0xe8, 0x51, 0x48, 0xdf, 0xd4, 0xb1, - 0xef, 0xe8, 0x0c, 0x36, 0xf8, 0xf7, 0x4c, 0x38, 0x98, 0x4d, 0x01, 0xf8, 0xf9, 0xb2, 0x22, 0xb6, - 0x8a, 0x78, 0x83, 0x40, 0xc8, 0x55, 0xb9, 0x9e, 0xa3, 0x31, 0xe6, 0x4e, 0x5d, 0x59, 0x90, 0xf9, - 0xd4, 0x96, 0xb9, 0x97, 0x23, 0x2f, 0x76, 0xb5, 0xd2, 0xb9, 0x65, 0x3b, 0x6f, 0x3d, 0xb4, 0xf5, - 0x1c, 0xd1, 0x91, 0xfb, 0xfc, 0xfc, 0xdf, 0x03, 0xa2, 0x6a, 0x52, 0x02, 0xf0, 0x93, 0x90, 0x74, - 0x3d, 0x21, 0x19, 0x6a, 0x22, 0x49, 0x6b, 0x50, 0x32, 0xe5, 0x67, 0x21, 0xdf, 0x17, 0x83, 0x94, - 0x5a, 0xe1, 0x59, 0x7f, 0xdf, 0xab, 0xee, 0xb7, 0x11, 0xc0, 0x5f, 0x6c, 0x27, 0xe6, 0xf3, 0xe8, - 0xb6, 0x9c, 0x45, 0x81, 0x45, 0x18, 0xc1, 0x3b, 0x95, 0x8b, 0x68, 0x41, 0xf0, 0x5e, 0x6a, 0x10, - 0x94, 0x94, 0x2f, 0x17, 0x10, 0xe4, 0x62, 0x0f, 0xd6, 0xdf, 0x36, 0xa5, 0x5e, 0x2f, 0x6f, 0x59, - 0x14, 0x3f, 0xd8, 0x58, 0x65, 0xb1, 0x78, 0xef, 0xb5, 0x8d, 0x8e, 0x20, 0xe8, 0x78, 0x28, 0xf8, - 0xc9, 0x03, 0x5d, 0x4a, 0x97, 0xfe, 0x19, 0x59, 0x5c, 0x5e, 0x9c, 0xdd, 0x0a, 0x68, 0x41, 0x9f, - 0x8b, 0x85, 0xec, 0x62, 0x24, 0x41, 0x1b, 0x65, 0x14, 0xe3, 0x2b, 0xdb, 0x28, 0xa4, 0x73, 0x9f, - 0x6d, 0x63, 0x09, 0x5a, 0xc8, 0xf5, 0x88, 0x08, 0x5e, 0x58, 0x6b, 0x0b, 0xf7, 0x63, 0x88, 0xf1, - 0x88, 0x21, 0x6b, 0x8e, 0x79, 0x25, 0xd9, 0xac, 0xe0, 0x01, 0x63, 0x7a, 0xae, 0x38, 0xf1, 0x3d, - 0xe3, 0xdd, 0xbe, 0x80, 0x91, 0xbd, 0xf0, 0x05, 0x48, 0x4c, 0x68, 0x6a, 0x83, 0x53, 0x46, 0x5c, - 0x42, 0xd1, 0x25, 0xc7, 0x69, 0x70, 0x5e, 0x64, 0x0f, 0xb7, 0x8d, 0x67, 0xa0, 0xa1, 0xcb, 0x09, - 0x3c, 0xc1, 0x9f, 0xb8, 0x3d, 0x4a, 0xa7, 0xd3, 0xdf, 0x33, 0x50, 0x7e, 0x3b, 0xb1, 0xf1, 0xdd, - 0x30, 0xbd, 0x03, 0xcb, 0x14, 0x40, 0xac, 0x62, 0x82, 0xb6, 0x05, 0xbf, 0x7d, 0x9a, 0xe2, 0xb6, - 0x37, 0x3a, 0xa6, 0x6d, 0x4f, 0x05, 0x1f, 0x54, 0xc2, 0x20, 0x44, 0x75, 0x12, 0xc7, 0xd2, 0x48, - 0xea, 0x50, 0x38, 0x5f, 0x18, 0xe4, 0xef, 0x99, 0x00, 0xf0, 0xa2, 0x6b, 0x72, 0x8f, 0xdb, 0xf6, - 0x1a, 0xa6, 0x69, 0x1b, 0x5e, 0x73, 0x5e, 0xa8, 0x27, 0x47, 0x0b, 0xc1, 0xe8, 0x39, 0x2f, 0xdf, - 0xcb, 0xc6, 0xf8, 0xb3, 0xe5, 0x54, 0xa0, 0x2a, 0xac, 0x87, 0xa9, 0x6c, 0x92, 0x12, 0x1b, 0xb4, - 0x0d, 0xfa, 0x7c, 0x69, 0x8e, 0x11, 0x9e, 0x69, 0x28, 0x3a, 0x9e, 0xf4, 0x07, 0xa0, 0xbd, 0x9e, - 0x4e, 0x68, 0x6a, 0x92, 0x87, 0x4e, 0x68, 0x3e, 0x14, 0x1a, 0xf5, 0xc9, 0x6d, 0x6f, 0x7e, 0x9d, - 0x10, 0xb1, 0xd2, 0xad, 0x7f, 0xcf, 0x68, 0xdb, 0xdf, 0xad, 0xa0, 0x63, 0x41, 0x28, 0x15, 0xb7, - 0x4d, 0xeb, 0x7e, 0xcf, 0x58, 0x30, 0x00, 0xd6, 0xc4, 0xa2, 0xdd, 0x45, 0xb3, 0x47, 0x5c, 0x62, - 0x23, 0xd6, 0xe6, 0x11, 0xd0, 0xfa, 0xfa, 0x26, 0x4b, 0x25, 0xbf, 0xc9, 0xe5, 0x16, 0xb1, 0xe6, - 0xc6, 0x47, 0x2d, 0x9e, 0xe3, 0x02, 0x5a, 0x1a, 0x28, 0x4d, 0x5d, 0xd9, 0xea, 0x06, 0x36, 0x9b, - 0xcb, 0xa9, 0xeb, 0x9b, 0xa5, 0x75, 0x23, 0xcd, 0xfa, 0x53, 0xe6, 0xa3, 0xd9, 0x6f, 0xec, 0xdb, - 0x18, 0xe4, 0xa2, 0x39, 0x4e, 0x83, 0xdc, 0xa3, 0xde, 0xe2, 0x34, 0xbb, 0x1a, 0x23, 0xe3, 0x10, - 0x17, 0x63, 0x7a, 0x1d, 0xee, 0xdb, 0x9a, 0x51, 0x4b, 0xb9, 0x77, 0x10, 0xdd, 0x32, 0x8d, 0xae, - 0xd6, 0xfb, 0x68, 0xdc, 0xad, 0xcb, 0xf0, 0xa0, 0x7b, 0x7a, 0xeb, 0x92, 0x0d, 0x77, 0x63, 0x45, - 0x7b, 0x39, 0x39, 0xbf, 0x7e, 0xb8, 0xfb, 0x13, 0x0b, 0x16, 0x6c, 0xac, 0xb9, 0x30, 0x8d, 0xd2, - 0x36, 0xd9, 0x02, 0x45, 0x5a, 0x0b, 0x60, 0xd0, 0xfa, 0x89, 0xbe, 0xca, 0x6d, 0x1f, 0xe8, 0x26, - 0x6e, 0x1d, 0xcb, 0xb6, 0x7f, 0x43, 0x04, 0x42, 0x8b, 0xd0, 0xaa, 0xa6, 0x63, 0x55, 0x2d, 0x18, - 0x2e, 0xed, 0x5c, 0x22, 0x14, 0xf3, 0x1a, 0x1d, 0xcc, 0x0d, 0xde, 0x6b, 0x82, 0xe3, 0xa1, 0xbd, - 0x97, 0x18, 0x8d, 0x44, 0x97, 0xcc, 0x42, 0x3a, 0x24, 0x3c, 0xe0, 0x28, 0x7d, 0x29, 0x82, 0x58, - 0xd6, 0xae, 0xad, 0x51, 0xa0, 0xf4, 0x5e, 0x08, 0x48, 0x24, 0x2e, 0xa4, 0x00, 0x4c, 0x9c, 0x3e, - 0x5a, 0xb6, 0xc1, 0xb1, 0x6b, 0x22, 0x6e, 0x6c, 0x49, 0xd3, 0x93, 0x6e, 0x5f, 0x73, 0x20, 0x13, - 0xd8, 0x56, 0x83, 0xcb, 0x15, 0x8b, 0xf0, 0xa4, 0x19, 0x0d, 0x2e, 0xcb, 0x25, 0xc2, 0xd7, 0x33, - 0x80, 0xfe, 0xa0, 0x0f, 0xe1, 0x57, 0x36, 0x57, 0xe1, 0x56, 0xf6, 0xc7, 0x63, 0x70, 0x8b, 0x55, - 0xee, 0x7d, 0x31, 0xd1, 0x95, 0x88, 0x94, 0x65, 0x42, 0x07, 0x8b, 0xb2, 0x5c, 0x64, 0x46, 0xd1, - 0x5a, 0xa1, 0x59, 0xf0, 0x6a, 0x06, 0xe1, 0x9f, 0xcb, 0x1c, 0xc2, 0x53, 0x70, 0xb9, 0xf0, 0xb4, - 0x5d, 0x0d, 0x01, 0xa3, 0xc8, 0xfb, 0x02, 0x8e, 0xc8, 0x34, 0x89, 0x55, 0xf3, 0xc8, 0x6d, 0xd3, - 0xd2, 0x09, 0x2c, 0xbe, 0x98, 0x3f, 0x84, 0x62, 0xbd, 0x02, 0x82, 0x37, 0x56, 0x74, 0x8a, 0x36, - 0xd1, 0xea, 0x7c, 0x0a, 0x78, 0x87, 0xea, 0x5f, 0x54, 0xd5, 0xa1, 0xd0, 0x37, 0x02, 0x08, 0xaf, - 0x8a, 0xb3, 0x35, 0x5e, 0x01, 0x23, 0x34, 0x3c, 0x28, 0xb2, 0x20, 0x90, 0x6f, 0x56, 0x2b, 0xc9, - 0x7d, 0xed, 0x76, 0x45, 0xf8, 0xc7, 0xf1, 0xdf, 0x12, 0x1b, 0xf4, 0x42, 0x96, 0x06, 0x77, 0x4d, - 0xd4, 0x80, 0x5f, 0x2f, 0x69, 0x57, 0x36, 0x64, 0x6e, 0xaf, 0x40, 0x28, 0x85, 0xbc, 0x11, 0x07, - 0x2d, 0x79, 0xa0, 0x3d, 0xc8, 0x17, 0xde, 0xec, 0xaf, 0x03, 0xee, 0xd7, 0xd8, 0x0e, 0x84, 0xca, - 0x47, 0x7d, 0x57, 0x2a, 0x91, 0x06, 0x1e, 0x89, 0x0e, 0x76, 0x0c, 0x74, 0xe4, 0x9d, 0x16, 0x68, - 0x95, 0xcf, 0x0f, 0x01, 0x98, 0x4c, 0xb8, 0x85, 0x7b, 0xc9, 0x1e, 0x24, 0xee, 0xd1, 0x52, 0x7c, - 0x77, 0x18, 0xb4, 0xd6, 0x62, 0xae, 0x3f, 0x1a, 0x06, 0xfe, 0x0b, 0x37, 0xc2, 0xe0, 0xbf, 0x37, - 0x8a, 0xee, 0xba, 0x21, 0x24, 0x70, 0x8f, 0x64, 0x69, 0x1c, 0xa2, 0x28, 0x46, 0xa7, 0x62, 0x17, - 0x34, 0xe9, 0x97, 0x77, 0x86, 0x10, 0x9a, 0x86, 0xef, 0xb2, 0xfd, 0x99, 0xa9, 0x10, 0xc5, 0xc8, - 0x18, 0x2e, 0x35, 0xe3, 0xe5, 0xdd, 0x21, 0x88, 0xdd, 0xf5, 0xb3, 0xb0, 0xdc, 0x79, 0x06, 0x7b, - 0x23, 0xe8, 0xfd, 0x90, 0xbc, 0xdb, 0xf9, 0xee, 0xa7, 0x67, 0x18, 0x41, 0x2b, 0x95, 0x50, 0xc7, - 0x5b, 0x53, 0xc9, 0x78, 0x1f, 0x36, 0x96, 0xff, 0x2c, 0x89, 0x82, 0x2e, 0xd0, 0x8d, 0x20, 0xfe, - 0xc0, 0x26, 0xc4, 0x78, 0x0f, 0x31, 0x5e, 0x8d, 0xcf, 0xe1, 0xc6, 0x36, 0xd4, 0xc8, 0xd2, 0x05, - 0x09, 0x64, 0x0e, 0x56, 0x41, 0x5f, 0x8a, 0x3a, 0x02, 0xb3, 0x90, 0x8a, 0x19, 0x0c, 0xe9, 0x12, - 0x4c, 0xba, 0x30, 0x31, 0xf2, 0x48, 0x14, 0x7a, 0xd8, 0x41, 0x1a, 0x61, 0x25, 0x58, 0x43, 0xdb, - 0xd2, 0xc9, 0x9a, 0x70, 0x85, 0xad, 0x2c, 0xaa, 0xbc, 0x40, 0xe4, 0xd7, 0xeb, 0xb9, 0x2d, 0xe5, - 0x7a, 0xec, 0x1a, 0xa4, 0x38, 0x5f, 0x8a, 0x17, 0x63, 0x11, 0x0b, 0x5c, 0x20, 0x07, 0xa2, 0xfc, - 0x0b, 0x4b, 0x8c, 0x7c, 0xc9, 0x19, 0xc2, 0xc8, 0x1a, 0xe9, 0xb5, 0xb1, 0x10, 0x5f, 0x77, 0x41, - 0xcb, 0xa0, 0x47, 0x62, 0x0a, 0x62, 0xd0, 0x93, 0x5b, 0x18, 0x9e, 0x78, 0x87, 0xa2, 0x2c, 0x22, - 0xde, 0xd8, 0xe5, 0x48, 0xa2, 0x2f, 0xc4, 0xc0, 0x02, 0x87, 0x5e, 0x51, 0x29, 0x26, 0xae, 0x91, - 0x62, 0x58, 0xc2, 0x71, 0x89, 0xd5, 0xe0, 0x24, 0x63, 0xba, 0xb2, 0x87, 0x71, 0x79, 0xb6, 0x11, - 0x5a, 0x5a, 0x71, 0x4c, 0xbc, 0xfc, 0xa5, 0x71, 0x9e, 0x7c, 0x30, 0xce, 0x93, 0x77, 0xc6, 0xb9, - 0xe1, 0x0f, 0xb4, 0x9a, 0xf5, 0xe5, 0x75, 0x55, 0x5c, 0x33, 0xd8, 0x12, 0x18, 0x6d, 0xef, 0x0f, - 0x71, 0xe3, 0x7d, 0x7a, 0xf0, 0x62, 0x2c, 0x3e, 0x25, 0xec, 0x36, 0xae, 0x0f, 0x76, 0x13, 0xd8, - 0x65, 0x83, 0xe8, 0x4e, 0x54, 0x98, 0xda, 0x11, 0x20, 0x0c, 0x29, 0x7f, 0x84, 0xb0, 0xeb, 0x55, - 0x08, 0xf3, 0xd1, 0x83, 0x18, 0xbb, 0xee, 0xc9, 0xc9, 0x65, 0x4d, 0x06, 0x89, 0xe1, 0x03, 0x55, - 0xe6, 0x53, 0x9a, 0x4c, 0x9c, 0xb5, 0x62, 0xc7, 0x7a, 0x7f, 0x69, 0x4c, 0x8b, 0x21, 0x1d, 0x2c, - 0x96, 0xcf, 0x9f, 0x8e, 0x69, 0xed, 0x90, 0x36, 0xfe, 0xd2, 0x98, 0x16, 0x96, 0xda, 0xd2, 0x90, - 0x36, 0xfe, 0x6c, 0x4c, 0xbb, 0xcb, 0xd3, 0xb4, 0xf1, 0x77, 0xc7, 0xf4, 0x27, 0x1a, 0xe7, 0xfa, - 0x75, 0x3a, 0x66, 0x43, 0xdb, 0xf8, 0x04, 0x1d, 0x53, 0x81, 0xee, 0x13, 0xf2, 0x92, 0x52, 0x1f, - 0xc3, 0xc1, 0xc6, 0x32, 0x12, 0xee, 0xdf, 0xa3, 0xd5, 0x65, 0x96, 0xf5, 0x1f, 0xa2, 0xd6, 0x90, - 0x42, 0x8c, 0x81, 0x51, 0xef, 0x0d, 0x15, 0xb2, 0x71, 0xd3, 0xfc, 0xa3, 0xa1, 0x02, 0xed, 0xc7, - 0x87, 0xda, 0xfc, 0x60, 0xa8, 0xbb, 0x0c, 0x32, 0xb5, 0x33, 0xd2, 0x74, 0x34, 0x91, 0x51, 0x6f, - 0x7c, 0x72, 0xf2, 0x3f, 0x33, 0xea, 0x75, 0xaa, 0x7a, 0x47, 0x37, 0x5d, 0xe7, 0x53, 0xfc, 0x8b, - 0xce, 0x0b, 0x98, 0x67, 0x50, 0x1e, 0x51, 0xb1, 0x11, 0x72, 0xae, 0x38, 0x7a, 0x1c, 0x82, 0xaf, - 0x73, 0x84, 0x9d, 0x3b, 0x21, 0xa7, 0x84, 0x57, 0x78, 0x32, 0x71, 0x12, 0xb2, 0x6b, 0x84, 0xfd, - 0x03, 0x6c, 0x5b, 0x05, 0x7b, 0x85, 0x24, 0xb0, 0x9d, 0x5d, 0x36, 0x77, 0x3f, 0x55, 0x37, 0x0b, - 0x75, 0x73, 0x7f, 0xb1, 0x6e, 0x0e, 0xea, 0xe6, 0x97, 0xed, 0xde, 0x38, 0xe2, 0xbc, 0x78, 0xbc, - 0xf7, 0xa4, 0xbc, 0x17, 0xf5, 0xb6, 0x44, 0x81, 0x7e, 0xbe, 0x17, 0x02, 0xf8, 0xb9, 0x75, 0xe7, - 0x15, 0x5e, 0x22, 0xc3, 0x2e, 0xa8, 0x4d, 0x0b, 0x99, 0xc0, 0x48, 0x05, 0xdd, 0xc4, 0x5c, 0xb8, - 0x40, 0x22, 0xe4, 0x6d, 0xc6, 0xbe, 0xe3, 0x7e, 0xc4, 0x42, 0xa8, 0x7e, 0x63, 0x1b, 0x14, 0x94, - 0x0e, 0x05, 0xce, 0xa2, 0x7d, 0x46, 0x4d, 0xcc, 0x34, 0xa8, 0xef, 0x1b, 0x07, 0x12, 0xe4, 0xf3, - 0xcc, 0x68, 0x8f, 0xd8, 0xec, 0x8b, 0x8d, 0x86, 0x90, 0xc9, 0x8e, 0x89, 0x86, 0x5f, 0x85, 0x7a, - 0x58, 0xf2, 0x9e, 0x2f, 0x69, 0xa9, 0x7e, 0x68, 0x7f, 0xc4, 0x77, 0x86, 0x64, 0xbd, 0x92, 0x71, - 0x05, 0x8c, 0xf6, 0x2d, 0xc0, 0x17, 0xee, 0x5e, 0xae, 0xc5, 0xee, 0x3e, 0x98, 0x2e, 0xca, 0x27, - 0x89, 0x7b, 0x83, 0x15, 0x5e, 0x20, 0xd7, 0x53, 0x42, 0x59, 0x72, 0xc2, 0xb1, 0x08, 0x51, 0x57, - 0x0c, 0x3c, 0xec, 0xac, 0xa0, 0x1d, 0xcf, 0xe7, 0x8a, 0xac, 0xe3, 0x1b, 0x7f, 0x24, 0x18, 0x3a, - 0x14, 0x7e, 0x94, 0x39, 0xd0, 0xb4, 0x3f, 0xf5, 0x4d, 0x88, 0xff, 0x33, 0xbe, 0x89, 0x65, 0x8c, - 0xe1, 0xa6, 0x11, 0xee, 0x1a, 0x4f, 0x3f, 0xc0, 0x5a, 0xd8, 0x35, 0xd8, 0xd3, 0x4f, 0x71, 0x3e, - 0x1c, 0xdf, 0xc9, 0x53, 0x10, 0xab, 0x21, 0x27, 0xcf, 0xa7, 0x95, 0xa1, 0xa3, 0xa0, 0xe9, 0x28, - 0x42, 0x83, 0x74, 0xa6, 0x3d, 0xae, 0xc7, 0xe9, 0xc6, 0x1f, 0x23, 0xf5, 0x33, 0xfa, 0xf1, 0x67, - 0x91, 0x1a, 0x91, 0x4f, 0x1e, 0x1b, 0x8d, 0x9d, 0x9f, 0xc2, 0xfd, 0x00, 0xbf, 0xe9, 0x30, 0xfa, - 0xda, 0x93, 0x3d, 0xdb, 0xb4, 0x54, 0x73, 0x6c, 0xe0, 0x10, 0x7d, 0xb2, 0xf7, 0x58, 0x1d, 0x22, - 0x88, 0x06, 0x5b, 0xae, 0x73, 0xbb, 0x92, 0x0a, 0xc3, 0x36, 0xf5, 0xca, 0x44, 0x7a, 0x11, 0x6e, - 0xe3, 0x52, 0xd2, 0xd7, 0x37, 0x42, 0x97, 0x28, 0x8d, 0xe1, 0x5c, 0xd3, 0x08, 0x7a, 0x1d, 0x37, - 0xb0, 0x95, 0x3d, 0xd2, 0x95, 0x86, 0xba, 0x1b, 0x5f, 0xb3, 0xdd, 0x60, 0x04, 0x01, 0xe8, 0xc5, - 0x3e, 0x2d, 0xb7, 0x8a, 0xf1, 0xf9, 0x52, 0xf7, 0x8f, 0x18, 0xdf, 0xc6, 0x6a, 0xce, 0xd7, 0x9d, - 0x50, 0x86, 0x02, 0xac, 0xef, 0x1d, 0xce, 0xb7, 0xf1, 0x87, 0xac, 0x2f, 0xce, 0xf9, 0x36, 0xfe, - 0x22, 0xeb, 0xf3, 0x3a, 0x97, 0x88, 0xb0, 0xbe, 0x28, 0x9f, 0xc1, 0x2d, 0x7d, 0x2e, 0x81, 0xb7, - 0xa6, 0x6e, 0x61, 0x0d, 0x31, 0xd4, 0x25, 0xa0, 0x7f, 0xb6, 0x32, 0xa9, 0x58, 0xfd, 0x2e, 0x25, - 0x98, 0x5b, 0xfa, 0xab, 0x18, 0x15, 0x82, 0xe1, 0x42, 0x1e, 0x1d, 0x48, 0xdb, 0x1f, 0xd8, 0xc4, - 0x0b, 0x82, 0x58, 0x30, 0xe6, 0x0f, 0x26, 0xed, 0x83, 0x39, 0xdb, 0xf8, 0x13, 0x69, 0x25, 0xe9, - 0x1f, 0x4f, 0xda, 0x46, 0xe2, 0x7f, 0x68, 0xd2, 0xfc, 0xde, 0xfd, 0xf5, 0x59, 0x83, 0xf5, 0x46, - 0x5c, 0x97, 0x7c, 0x30, 0x6d, 0xe1, 0x52, 0xc1, 0xd2, 0x92, 0xb6, 0xe3, 0xcd, 0x60, 0xbc, 0x47, - 0xe0, 0x0a, 0x5b, 0xad, 0x1f, 0x86, 0xad, 0x83, 0x77, 0xe7, 0xdd, 0x3b, 0x73, 0x1b, 0xdb, 0xbc, - 0x62, 0x9b, 0x55, 0x52, 0x58, 0x2c, 0xfb, 0x15, 0x82, 0x5b, 0x53, 0xde, 0xd9, 0x99, 0x89, 0x83, - 0xc2, 0x4d, 0xd1, 0x00, 0x79, 0xf4, 0xec, 0x74, 0x58, 0xbf, 0xc2, 0x93, 0xb7, 0x74, 0x7e, 0x07, - 0x3d, 0xbf, 0xcc, 0x58, 0xe3, 0x12, 0x92, 0x0e, 0xf2, 0x80, 0x5e, 0xc9, 0x1c, 0xba, 0x90, 0xdc, - 0x32, 0x7a, 0xfe, 0x8d, 0xc1, 0xda, 0xdd, 0xee, 0xc5, 0xf5, 0x58, 0x3c, 0x39, 0xe8, 0x99, 0x78, - 0x4b, 0xd6, 0x79, 0xe7, 0xb6, 0xbf, 0x7f, 0x8b, 0x37, 0x04, 0xef, 0xd2, 0x5b, 0xb3, 0xda, 0xad, - 0xe6, 0x23, 0x7c, 0xb5, 0x8a, 0xed, 0x61, 0xb7, 0x48, 0xaf, 0x08, 0x7e, 0x38, 0xef, 0x5c, 0x8b, - 0x47, 0x4d, 0xdb, 0x29, 0x28, 0x25, 0x7a, 0x27, 0xf9, 0xb5, 0x71, 0x75, 0x9b, 0xdd, 0x85, 0x32, - 0x93, 0xe7, 0xf1, 0xa8, 0xf2, 0x78, 0x75, 0x8b, 0x89, 0xc7, 0xca, 0x7e, 0xff, 0x49, 0x19, 0x37, - 0x9b, 0x7b, 0xce, 0x19, 0xfc, 0x2c, 0xef, 0x35, 0x15, 0x75, 0xf4, 0x7a, 0x80, 0x15, 0x76, 0xe5, - 0xce, 0xed, 0xf5, 0xee, 0x5d, 0xab, 0x7f, 0xa3, 0x3f, 0x56, 0xe5, 0x3d, 0xb3, 0x39, 0xde, 0x3b, - 0x3b, 0xbf, 0x2f, 0x1b, 0x55, 0x63, 0xdc, 0xd2, 0xac, 0xa9, 0x7b, 0x75, 0x5e, 0x78, 0xaa, 0xb8, - 0xb2, 0x7d, 0x73, 0x38, 0xd8, 0x1b, 0xb4, 0x0b, 0xe6, 0xe5, 0xdb, 0x54, 0x57, 0xc7, 0xd7, 0xaf, - 0x56, 0xb6, 0xd3, 0x51, 0x8d, 0xbb, 0xcc, 0xf9, 0xf0, 0x69, 0xf8, 0xf6, 0x0a, 0x06, 0xc5, 0xee, - 0x74, 0xf2, 0xf0, 0x66, 0xec, 0x8e, 0xf3, 0x5a, 0xef, 0x85, 0xb4, 0xf7, 0xbb, 0x0f, 0xd3, 0xdb, - 0x61, 0xff, 0x24, 0x33, 0x6d, 0x9f, 0x89, 0xad, 0xc9, 0x71, 0x77, 0xfa, 0xfa, 0xf0, 0xb4, 0x7f, - 0xa1, 0x94, 0x32, 0x1d, 0xbb, 0x9a, 0x91, 0xbb, 0xe5, 0xe1, 0x51, 0xab, 0x78, 0x3e, 0x56, 0xcb, - 0xa6, 0x7d, 0x36, 0x6a, 0x5e, 0xae, 0xbc, 0xc5, 0x7c, 0x85, 0x9d, 0xfb, 0x32, 0x0a, 0x36, 0x47, - 0x83, 0x4d, 0xd1, 0xa0, 0xc4, 0x92, 0x32, 0x1d, 0x53, 0xa4, 0x6d, 0xf2, 0x3a, 0x24, 0x8e, 0x7b, - 0xec, 0xe0, 0x85, 0xd0, 0xdc, 0xf6, 0x35, 0xe9, 0x82, 0xde, 0xda, 0x5f, 0xab, 0x8a, 0xc7, 0x6a, - 0x47, 0xb7, 0x07, 0x5b, 0xba, 0xe9, 0x90, 0x04, 0xfe, 0xfa, 0xb3, 0xfa, 0x01, 0x3d, 0x1d, 0x19, - 0x8e, 0x8b, 0x16, 0x56, 0x02, 0xaf, 0xe0, 0xfe, 0x00, 0x06, 0x75, 0xc4, 0xa0, 0x8a, 0x4d, 0x7f, - 0x2e, 0xd8, 0x82, 0xd1, 0xbd, 0xc6, 0x54, 0x36, 0x18, 0xd9, 0x34, 0xdd, 0x04, 0xbb, 0xf2, 0x3d, - 0x6e, 0x1f, 0x38, 0x96, 0x14, 0x40, 0x44, 0x8d, 0xf2, 0x4c, 0x52, 0x49, 0x62, 0xac, 0xb9, 0x7d, - 0x2f, 0x0b, 0xe1, 0xd3, 0x23, 0xcf, 0xc8, 0x32, 0xb2, 0xa2, 0x58, 0x29, 0xd4, 0x81, 0x75, 0xb4, - 0xf7, 0xc5, 0x7d, 0x60, 0x1d, 0x58, 0x62, 0x3b, 0x21, 0x4f, 0x13, 0x4d, 0xcd, 0x56, 0x4c, 0xd3, - 0x7c, 0xd1, 0x08, 0xdd, 0x32, 0x77, 0xfb, 0x24, 0x01, 0xab, 0xde, 0xbb, 0x5f, 0xbf, 0xef, 0xba, - 0x96, 0x53, 0xcb, 0x64, 0xc6, 0x3a, 0x51, 0xd3, 0xa0, 0x66, 0x28, 0xe6, 0xd0, 0x76, 0x48, 0x1a, - 0xbd, 0xa2, 0x56, 0x06, 0x94, 0x14, 0xc9, 0xee, 0xe1, 0x5b, 0x01, 0xfe, 0x4b, 0x06, 0xb3, 0xf2, - 0x85, 0xa3, 0x57, 0xd3, 0x27, 0x14, 0x73, 0x30, 0x18, 0x1a, 0xa0, 0xf5, 0x30, 0x4e, 0xce, 0x1a, - 0xda, 0x58, 0x5a, 0x9b, 0x6c, 0xc7, 0x74, 0xdd, 0x42, 0xc3, 0xc3, 0xfc, 0x1e, 0x3c, 0xcd, 0x43, - 0xa9, 0xb3, 0xb4, 0x56, 0x5f, 0x8c, 0x3f, 0x26, 0x9b, 0x00, 0xcb, 0x78, 0x31, 0x7a, 0x30, 0x6b, - 0x1b, 0x9f, 0x22, 0x9a, 0x75, 0x73, 0xce, 0x88, 0x46, 0x0f, 0x4f, 0xf8, 0x46, 0x9c, 0x87, 0x69, - 0xcc, 0xed, 0xe6, 0x5f, 0x47, 0xc0, 0x45, 0xc5, 0x03, 0x5e, 0x0f, 0x14, 0x65, 0xc2, 0xa7, 0xcc, - 0x23, 0xc1, 0xb4, 0xd2, 0xac, 0xc8, 0x54, 0x18, 0x36, 0x36, 0xff, 0xc6, 0x7f, 0xbc, 0x4b, 0x5e, - 0x37, 0x15, 0xcd, 0x12, 0xc0, 0x94, 0x64, 0x0e, 0x60, 0xc1, 0x62, 0x5c, 0xd9, 0xd9, 0x03, 0x36, - 0x24, 0x8c, 0x1d, 0x76, 0x3f, 0xbd, 0xc0, 0xae, 0x7e, 0x17, 0x5c, 0x76, 0x7f, 0xba, 0x00, 0x95, - 0x1a, 0x5f, 0xb2, 0xf8, 0x65, 0xd9, 0xa6, 0x6b, 0xb2, 0x59, 0xae, 0x71, 0x82, 0x61, 0x9e, 0x93, - 0x31, 0x58, 0x99, 0x0e, 0xe6, 0x6a, 0xce, 0x85, 0xc1, 0xbe, 0x71, 0x35, 0xb0, 0x27, 0x3a, 0x62, - 0xf6, 0x78, 0xdd, 0x93, 0xc7, 0xf8, 0xa4, 0x28, 0x6e, 0x83, 0x5e, 0xc4, 0xaf, 0x41, 0xab, 0x8d, - 0x1f, 0xf4, 0x8c, 0xd1, 0x4f, 0xc1, 0xc2, 0x5d, 0x7a, 0xa2, 0x36, 0x7e, 0x7c, 0x81, 0x1f, 0x7e, - 0xdc, 0x62, 0x7b, 0xd2, 0x10, 0x83, 0x1f, 0x20, 0x3e, 0xe0, 0x97, 0x02, 0x3f, 0xf1, 0x6b, 0x68, - 0xe3, 0x29, 0x50, 0x66, 0x6f, 0x36, 0xb6, 0xa0, 0x6b, 0xc0, 0xce, 0x6f, 0xa9, 0x9a, 0x4c, 0xab, - 0xf4, 0x5a, 0xe6, 0xd0, 0x70, 0xe1, 0x11, 0xa8, 0x30, 0x78, 0x84, 0x26, 0xa0, 0x90, 0x31, 0x74, - 0xa0, 0x1d, 0x51, 0x00, 0x05, 0x1a, 0x7a, 0x8e, 0xe9, 0xec, 0xcb, 0xb5, 0x1b, 0x65, 0x41, 0x0d, - 0xae, 0xa7, 0x17, 0xba, 0x13, 0xe4, 0xcc, 0x8d, 0x1f, 0xd0, 0x37, 0x64, 0x14, 0x8d, 0xd9, 0x5c, - 0x20, 0xfe, 0x83, 0xee, 0x3f, 0x58, 0xe7, 0x0d, 0x8e, 0x13, 0xac, 0x23, 0xa8, 0x6f, 0x9d, 0x0f, - 0x07, 0xf8, 0x35, 0x70, 0x1b, 0x59, 0xfc, 0x3c, 0xed, 0xb0, 0x5f, 0xa7, 0xd0, 0x33, 0x6c, 0x05, - 0xbe, 0x50, 0x52, 0x60, 0x2d, 0xa5, 0xdb, 0x6b, 0xcc, 0xe8, 0x3b, 0x30, 0x6a, 0x33, 0xe4, 0xf7, - 0x35, 0x10, 0x02, 0xf6, 0x0b, 0x27, 0xc8, 0xbd, 0xda, 0x6c, 0x68, 0xeb, 0x35, 0x8e, 0x9b, 0x0b, - 0x92, 0x6e, 0xf5, 0x25, 0xc8, 0xee, 0xd5, 0xd2, 0x25, 0xc1, 0x95, 0xe4, 0x5a, 0xba, 0x02, 0x15, - 0xe9, 0x96, 0x05, 0x26, 0x42, 0x11, 0xfc, 0x39, 0xb0, 0x6a, 0x2c, 0x9a, 0xde, 0xa9, 0xcd, 0x98, - 0xe3, 0xbf, 0xf6, 0x45, 0x14, 0xec, 0x9e, 0x8c, 0xef, 0x3a, 0x78, 0xc5, 0x7d, 0x51, 0xfc, 0xdd, - 0x27, 0x13, 0xf8, 0x0d, 0xdd, 0xa6, 0xa6, 0x0b, 0xa6, 0x58, 0xca, 0x00, 0xf4, 0x74, 0x2c, 0x64, - 0x69, 0x2a, 0x26, 0x00, 0xca, 0x74, 0x62, 0x60, 0xa9, 0xb9, 0x00, 0x4a, 0x4d, 0xe3, 0x07, 0x4c, - 0x4c, 0x36, 0x2b, 0xe4, 0x0a, 0x42, 0x41, 0x08, 0xd6, 0xb4, 0x14, 0x2c, 0xfc, 0x74, 0x0f, 0x98, - 0xc6, 0x50, 0x4e, 0x6b, 0x66, 0x66, 0x32, 0x90, 0x9c, 0x34, 0x48, 0x2e, 0xee, 0xa7, 0x00, 0x75, - 0x72, 0x42, 0xb6, 0x2c, 0x64, 0x17, 0x55, 0xa8, 0x60, 0x73, 0xd2, 0x74, 0x34, 0x8a, 0x89, 0x6f, - 0x35, 0x48, 0x43, 0xaf, 0x33, 0x85, 0x6a, 0x16, 0xff, 0xb2, 0xb9, 0x7c, 0xfa, 0xd9, 0xa2, 0x55, - 0x73, 0x62, 0x2e, 0x27, 0xe4, 0xb1, 0x76, 0xee, 0x83, 0x06, 0x09, 0x60, 0x92, 0xd8, 0x7e, 0x93, - 0x50, 0x2f, 0x0f, 0xf5, 0xaa, 0x7f, 0x5e, 0xad, 0x00, 0x55, 0xf2, 0xd9, 0x3f, 0xaa, 0xf7, 0xb3, - 0x1e, 0xbc, 0x34, 0x03, 0x6c, 0x36, 0x55, 0x27, 0x77, 0x41, 0x18, 0x57, 0x8b, 0x1a, 0x71, 0x49, - 0x7e, 0xf6, 0x45, 0xf5, 0x0e, 0x45, 0x6f, 0x6e, 0xe2, 0x7b, 0x2a, 0x60, 0x5d, 0xe1, 0xed, 0x18, - 0x3e, 0x75, 0x6e, 0xe7, 0x49, 0x7e, 0x73, 0x33, 0x22, 0x80, 0xe6, 0x01, 0x4c, 0x07, 0xd6, 0x64, - 0x92, 0x08, 0x2e, 0x3f, 0x03, 0xd6, 0xe9, 0xd1, 0xa1, 0xf7, 0xaa, 0x87, 0x34, 0xb5, 0xb2, 0xf0, - 0x05, 0x0c, 0x97, 0xa0, 0xc8, 0x12, 0x1b, 0x2c, 0x44, 0x2c, 0xb8, 0xa8, 0xdb, 0x3b, 0x52, 0x93, - 0x84, 0x9f, 0xd9, 0xc4, 0x1d, 0xda, 0x46, 0x42, 0x0d, 0xbd, 0xb9, 0x63, 0x77, 0x4a, 0xb3, 0x42, - 0x45, 0xf7, 0x77, 0x5b, 0xe7, 0x6b, 0x0a, 0x3b, 0xbb, 0xd3, 0x16, 0xf2, 0x19, 0xfa, 0xa2, 0x8f, - 0x70, 0x25, 0xcd, 0xd9, 0x1f, 0x58, 0xd8, 0x6a, 0x50, 0x4d, 0x6c, 0x34, 0x1a, 0x17, 0xf2, 0x33, - 0x2c, 0x4e, 0xbc, 0x72, 0xcc, 0x81, 0x9c, 0x34, 0x90, 0x50, 0xcf, 0xed, 0x87, 0x2b, 0x41, 0x81, - 0x50, 0x15, 0xb2, 0xb9, 0xc9, 0x99, 0xb4, 0x0a, 0xd7, 0x68, 0xa0, 0x66, 0x6d, 0x76, 0x31, 0xed, - 0x4b, 0xd3, 0xb6, 0xa5, 0x69, 0x5a, 0x73, 0xe8, 0x77, 0xa4, 0x59, 0x7c, 0x9f, 0xc5, 0xb4, 0xd5, - 0xed, 0x01, 0x62, 0x15, 0x16, 0x5d, 0xc1, 0xd1, 0x4b, 0x16, 0xf1, 0x4d, 0x12, 0xb0, 0x8c, 0xd2, - 0x74, 0x15, 0xa5, 0x71, 0x11, 0xb1, 0x57, 0x65, 0x90, 0x50, 0x2a, 0x5d, 0x18, 0x69, 0xb9, 0x57, - 0x87, 0x26, 0x28, 0x6a, 0x39, 0x7a, 0xcc, 0x96, 0x13, 0x88, 0xff, 0x5a, 0x0d, 0x2c, 0x8b, 0x8b, - 0x88, 0x15, 0x75, 0xea, 0x88, 0x44, 0x6f, 0x5f, 0x9f, 0xf7, 0x30, 0xee, 0x59, 0xca, 0x0d, 0x37, - 0x4d, 0x97, 0xd3, 0x0e, 0x47, 0xa3, 0x45, 0xb9, 0x1a, 0x47, 0xdd, 0x85, 0xf5, 0x2e, 0x70, 0x5d, - 0x84, 0x65, 0x2e, 0x60, 0xb1, 0x55, 0x26, 0x38, 0x0d, 0x15, 0xaa, 0x10, 0x7b, 0xda, 0xa1, 0x0c, - 0xcc, 0xb4, 0x9b, 0x3a, 0xf4, 0x60, 0x71, 0xc9, 0x13, 0xc7, 0x0b, 0x46, 0x43, 0xac, 0x1b, 0xdf, - 0x1d, 0x0f, 0x6d, 0x75, 0x23, 0x95, 0xe2, 0x9d, 0x1f, 0xc6, 0xcf, 0x58, 0xcb, 0x66, 0xbc, 0xcd, - 0x35, 0x90, 0x3d, 0xa8, 0xb4, 0x4b, 0x7f, 0x11, 0x72, 0x72, 0x09, 0x34, 0xc0, 0xed, 0xab, 0x1c, - 0xcf, 0x7f, 0x50, 0x53, 0xf0, 0xf1, 0x2b, 0xcb, 0x16, 0x27, 0x40, 0x6e, 0xe8, 0x32, 0x51, 0x28, - 0xe3, 0xdd, 0xf4, 0x41, 0x43, 0xee, 0x60, 0xdc, 0x41, 0x61, 0x00, 0x2d, 0xc4, 0x41, 0x85, 0xb2, - 0x07, 0x2e, 0xcd, 0x46, 0x4f, 0x42, 0x8d, 0x2b, 0xc2, 0xe7, 0x22, 0xcf, 0xdd, 0x92, 0x39, 0x61, - 0x31, 0xd5, 0x94, 0xbf, 0x20, 0x6e, 0xa1, 0x84, 0xf6, 0x06, 0xcb, 0x10, 0x65, 0x95, 0xa4, 0x77, - 0x60, 0x04, 0xc0, 0x7f, 0x70, 0xd9, 0x1c, 0xb9, 0x64, 0x90, 0xe4, 0x50, 0x2b, 0xb9, 0xd5, 0x80, - 0x9e, 0x38, 0xe1, 0xb8, 0x73, 0x71, 0x0e, 0xa3, 0xc2, 0x1b, 0x56, 0xb4, 0xee, 0x34, 0x09, 0xb0, - 0xf8, 0x10, 0xdd, 0x2d, 0x82, 0x79, 0x66, 0x51, 0x32, 0x6b, 0xac, 0xa3, 0xbf, 0x1d, 0xc6, 0xc4, - 0x6b, 0x5e, 0xbe, 0xb0, 0xa0, 0xdc, 0x08, 0x54, 0xdf, 0x7d, 0x34, 0x8b, 0xd1, 0x4b, 0xe3, 0x4b, - 0x9c, 0x80, 0x56, 0x01, 0xf0, 0xd6, 0x00, 0xac, 0x28, 0xb2, 0x93, 0x8c, 0xd0, 0x34, 0x87, 0x97, - 0xd7, 0x86, 0x10, 0xa4, 0x6c, 0x75, 0x31, 0x91, 0x46, 0x21, 0x84, 0x12, 0x73, 0x98, 0xa8, 0xaa, - 0x6a, 0x24, 0x31, 0x8f, 0x89, 0xb2, 0x2c, 0x47, 0x12, 0x0b, 0x98, 0x28, 0x49, 0x52, 0x24, 0xb1, - 0x88, 0x89, 0xd5, 0x6a, 0x35, 0x92, 0x58, 0x5a, 0x95, 0x58, 0xc1, 0xc4, 0x4a, 0xa5, 0x12, 0x49, - 0x94, 0x31, 0xb1, 0x50, 0x28, 0x44, 0x12, 0x15, 0x4c, 0xcc, 0xe7, 0xf3, 0x91, 0x44, 0x82, 0x89, - 0xd9, 0x6c, 0x36, 0x92, 0xa8, 0x62, 0x22, 0xbe, 0x21, 0x2a, 0x9c, 0x68, 0x63, 0xa2, 0x92, 0x8b, - 0x96, 0xec, 0xd1, 0x92, 0x4a, 0x34, 0x51, 0xa7, 0x89, 0x25, 0x25, 0x92, 0x68, 0x42, 0x22, 0xbd, - 0x4e, 0x37, 0x27, 0x16, 0x84, 0xc4, 0xe2, 0x43, 0x4c, 0x57, 0xf9, 0x48, 0x41, 0x47, 0xf6, 0xf0, - 0x99, 0x8f, 0x25, 0xf7, 0xbd, 0xf4, 0x52, 0x24, 0xdd, 0x95, 0xd7, 0x00, 0x0e, 0x5d, 0xd5, 0x1b, - 0xab, 0x20, 0xf9, 0x35, 0xb2, 0x65, 0x51, 0x48, 0x2c, 0x3e, 0xd6, 0xd7, 0xe8, 0x7f, 0xaa, 0x0d, - 0xca, 0xd5, 0xa8, 0x1d, 0xea, 0x2f, 0xe3, 0xae, 0xa6, 0xbb, 0xe8, 0xb6, 0xd0, 0x0c, 0x3c, 0xc9, - 0x91, 0x14, 0xd3, 0x15, 0x28, 0x57, 0x8b, 0x13, 0x54, 0x1c, 0xfd, 0x94, 0xa0, 0x68, 0xe4, 0x4c, - 0x9c, 0xa0, 0xe2, 0x73, 0x92, 0x5f, 0x35, 0xa5, 0x85, 0x55, 0x93, 0x4f, 0x09, 0xaa, 0x58, 0x2c, - 0x2e, 0x13, 0x54, 0xa9, 0x54, 0xfa, 0x24, 0x41, 0xc5, 0x29, 0x97, 0x12, 0x94, 0xa2, 0x28, 0xcb, - 0x04, 0x15, 0x5f, 0x22, 0xea, 0xaa, 0xd5, 0x40, 0x09, 0x8a, 0x14, 0x72, 0xcb, 0x04, 0x55, 0x20, - 0xb9, 0x65, 0x82, 0x2a, 0x54, 0xa4, 0xd5, 0x04, 0x15, 0xbe, 0xec, 0x79, 0x0d, 0x35, 0x01, 0x32, - 0x57, 0x52, 0x13, 0xa4, 0x17, 0xd7, 0x50, 0xd3, 0x9a, 0x2b, 0xa4, 0xd7, 0x92, 0xd2, 0xda, 0xcb, - 0xa4, 0xd7, 0x91, 0xd2, 0x9a, 0x6b, 0xa5, 0xdf, 0xa5, 0xa3, 0xa1, 0x01, 0x1c, 0x96, 0x0b, 0xf1, - 0x29, 0xb4, 0x95, 0x76, 0x7b, 0xc8, 0xa7, 0xd8, 0x2b, 0xa1, 0x56, 0xbc, 0x50, 0x8c, 0xaa, 0x25, - 0x18, 0x59, 0xcc, 0x0b, 0xe6, 0xda, 0xf7, 0x5b, 0x41, 0x6b, 0x20, 0xd1, 0x4c, 0xfa, 0xf2, 0x2a, - 0x22, 0x98, 0xef, 0xbe, 0xae, 0x0a, 0xc5, 0xb0, 0xd3, 0xb0, 0xf0, 0xf5, 0x4b, 0x6d, 0x0c, 0xbc, - 0x4e, 0xc6, 0xc5, 0x83, 0xdc, 0xe3, 0xeb, 0x60, 0x92, 0x48, 0xe7, 0x49, 0x87, 0xdf, 0xdc, 0x04, - 0x59, 0x97, 0x2e, 0xf1, 0x82, 0xaf, 0x59, 0x79, 0x91, 0xd2, 0x0d, 0x27, 0x48, 0x59, 0x04, 0xf3, - 0x1c, 0xa1, 0x12, 0xdb, 0xf8, 0x85, 0xaf, 0x7b, 0xfa, 0xc7, 0x8c, 0x76, 0x66, 0xce, 0xff, 0x82, - 0x5e, 0x1b, 0x43, 0x5d, 0x9f, 0xc7, 0x46, 0xdd, 0x79, 0xd1, 0x8c, 0x56, 0xa7, 0x83, 0x43, 0xd7, - 0xba, 0xc9, 0x2f, 0x4c, 0x2d, 0xe3, 0x67, 0xb1, 0xd7, 0x78, 0x7d, 0xf4, 0x5e, 0xb5, 0xf5, 0x18, - 0xc1, 0xf7, 0xdb, 0x51, 0x94, 0x80, 0x75, 0x88, 0x18, 0x61, 0xaf, 0xba, 0xc3, 0x0e, 0x3b, 0x7d, - 0x42, 0x50, 0x60, 0xa6, 0x17, 0x2e, 0xcb, 0x8c, 0xe2, 0x38, 0x98, 0x42, 0x4d, 0x73, 0x68, 0xf3, - 0xf6, 0xfa, 0x34, 0xc9, 0x65, 0x1c, 0xe8, 0x62, 0x1a, 0x73, 0x00, 0xf3, 0x69, 0x1a, 0xfe, 0xde, - 0xe0, 0x24, 0x5d, 0xa7, 0xaf, 0x03, 0x0b, 0xbd, 0x1a, 0xcb, 0xe4, 0xe7, 0x21, 0x9d, 0x91, 0x55, - 0x0e, 0x54, 0xb9, 0x24, 0xc8, 0xd7, 0x1d, 0xdf, 0x1e, 0x4c, 0x71, 0x99, 0x0c, 0x97, 0xa2, 0x96, - 0x25, 0x18, 0x26, 0x7c, 0x8a, 0xcc, 0x25, 0x67, 0x6a, 0x28, 0x89, 0xa0, 0xb6, 0xff, 0x32, 0x2f, - 0x4a, 0x0d, 0xa4, 0x11, 0x0b, 0x3f, 0xae, 0x03, 0xa2, 0x38, 0x20, 0x25, 0xb0, 0x83, 0x1a, 0x0d, - 0x92, 0xa6, 0x20, 0x41, 0x21, 0xe3, 0xa9, 0xd5, 0x29, 0x0a, 0x49, 0x0a, 0xb8, 0x11, 0x11, 0xe8, - 0x3d, 0x5f, 0xa0, 0x43, 0xea, 0x91, 0x05, 0xfa, 0xc9, 0xef, 0xdf, 0x5e, 0x31, 0xa8, 0x0d, 0x7a, - 0x6a, 0x92, 0x6b, 0x03, 0xbc, 0xc4, 0x19, 0x58, 0x1c, 0xe9, 0xc4, 0xa5, 0x8e, 0x97, 0x1f, 0x25, - 0xe8, 0xd6, 0x1a, 0x0b, 0x7f, 0x3f, 0xba, 0xfc, 0xc2, 0xad, 0x53, 0x11, 0x18, 0x44, 0x81, 0x42, - 0xe3, 0xf9, 0x3a, 0x48, 0x62, 0xe2, 0x11, 0x31, 0x74, 0x4d, 0x72, 0xfb, 0xe8, 0x22, 0x84, 0xf9, - 0xa1, 0xe7, 0x39, 0x14, 0x92, 0xcc, 0x02, 0xd6, 0x00, 0x65, 0xce, 0x3d, 0x18, 0x0c, 0x80, 0x5b, - 0x8e, 0xdf, 0xd9, 0xca, 0xd6, 0x46, 0xa6, 0xa6, 0x26, 0x44, 0x58, 0x25, 0x16, 0x98, 0x06, 0x34, - 0xb5, 0xee, 0xed, 0xa5, 0x38, 0xa8, 0x38, 0x98, 0x30, 0xc5, 0x9b, 0x9b, 0x40, 0x48, 0x7d, 0xad, - 0xeb, 0x32, 0x5d, 0x85, 0xd9, 0xd5, 0x8b, 0xc1, 0xb3, 0xf6, 0x21, 0xa1, 0x6f, 0x3a, 0x2e, 0x36, - 0x99, 0x4a, 0x42, 0xa6, 0x69, 0xbb, 0x3b, 0xa0, 0x61, 0xa4, 0xd8, 0x23, 0xe2, 0x1a, 0x66, 0x90, - 0xe9, 0x78, 0xdb, 0x22, 0xe8, 0xd6, 0xdc, 0x17, 0x06, 0x7c, 0x27, 0xe9, 0xe1, 0x8e, 0x42, 0x49, - 0x35, 0xa0, 0x07, 0x29, 0x33, 0xfd, 0x6c, 0x6a, 0x06, 0xed, 0x0c, 0x5f, 0xf3, 0x4c, 0x1e, 0xec, - 0x8c, 0xdf, 0x38, 0xac, 0x08, 0x56, 0x89, 0x9f, 0x33, 0x62, 0x5d, 0x8d, 0xf0, 0x85, 0x06, 0xc5, - 0xe3, 0xbc, 0xb9, 0xf8, 0xee, 0x36, 0x30, 0x67, 0x07, 0xc4, 0xee, 0x91, 0x3d, 0x42, 0x2c, 0xfc, - 0xc5, 0x74, 0x2b, 0xba, 0x12, 0x93, 0x2e, 0xcf, 0xf3, 0x60, 0x6b, 0xbf, 0x90, 0xfb, 0x0e, 0x8c, - 0x74, 0xa1, 0xd3, 0x08, 0x1c, 0x17, 0xd1, 0xa0, 0x7a, 0x69, 0x58, 0x5e, 0xbf, 0x7f, 0x07, 0xb6, - 0x18, 0x58, 0xb3, 0xce, 0x70, 0x90, 0xb6, 0xfa, 0xd0, 0x35, 0x27, 0x93, 0xad, 0xe6, 0xc4, 0x4c, - 0x56, 0xac, 0x88, 0x31, 0xbd, 0x8b, 0xd6, 0x62, 0xab, 0xcb, 0x5c, 0x4a, 0xaf, 0x77, 0x89, 0xab, - 0xf4, 0x93, 0x01, 0xdd, 0xf7, 0x71, 0xb3, 0x40, 0x9a, 0x3a, 0xe9, 0x67, 0xb0, 0xbb, 0x00, 0x75, - 0xb3, 0x01, 0x71, 0xfb, 0xa6, 0x5a, 0xe3, 0xa0, 0x04, 0x37, 0xe7, 0xb1, 0xae, 0x91, 0x04, 0x4e, - 0x42, 0x68, 0x81, 0x24, 0xbf, 0x48, 0x99, 0xc5, 0x0d, 0x14, 0x18, 0x35, 0x5a, 0xc9, 0x60, 0xa9, - 0xf0, 0x69, 0x20, 0x62, 0x68, 0x85, 0xbe, 0x9d, 0xd0, 0x34, 0x1c, 0x13, 0x38, 0x87, 0x6e, 0xf6, - 0x60, 0x31, 0x87, 0x5b, 0x4b, 0xa8, 0x26, 0x71, 0xe8, 0x99, 0x21, 0x2f, 0x12, 0x3a, 0x21, 0x21, - 0xa4, 0x04, 0xd8, 0x3f, 0x41, 0xb9, 0x84, 0xe7, 0x14, 0x77, 0x28, 0x1f, 0x21, 0x6a, 0x9a, 0x43, - 0xe8, 0x5d, 0xcd, 0x80, 0xb5, 0x39, 0x65, 0x2f, 0xd2, 0xf3, 0xad, 0x0d, 0xd2, 0xf0, 0x4d, 0x4b, - 0xc1, 0x05, 0x4d, 0xdf, 0xfd, 0x0e, 0x40, 0x7c, 0x5d, 0xdf, 0x05, 0x5d, 0xdf, 0xe3, 0x85, 0x60, - 0xa1, 0x41, 0xc6, 0x0f, 0xf7, 0x27, 0x92, 0x04, 0x9d, 0xc3, 0x36, 0x70, 0xac, 0x47, 0x02, 0x5c, - 0x9d, 0xaf, 0x05, 0x39, 0x60, 0x86, 0xf8, 0xd0, 0x92, 0x8e, 0xe0, 0x25, 0x67, 0x7f, 0xfa, 0x4f, - 0xb9, 0x9f, 0x40, 0xa0, 0x8b, 0x12, 0x06, 0xbe, 0xd1, 0x11, 0x16, 0x0b, 0xfd, 0xa1, 0x23, 0x4c, - 0xfa, 0xc4, 0xa7, 0xbc, 0xe2, 0x79, 0x28, 0x4e, 0xb6, 0x1b, 0x60, 0xfd, 0x92, 0xef, 0x3a, 0xa0, - 0xc9, 0xf4, 0xbb, 0x50, 0xf8, 0xc9, 0xcf, 0x19, 0x81, 0x6e, 0x6e, 0x7a, 0xe2, 0x01, 0x38, 0x0c, - 0x3f, 0xc7, 0x05, 0xe6, 0xcb, 0x8b, 0xa5, 0x99, 0xad, 0x87, 0x59, 0x2a, 0x87, 0x8c, 0xab, 0x85, - 0x7c, 0x2b, 0x30, 0xbb, 0x9c, 0x06, 0x15, 0x4a, 0x18, 0xdd, 0x01, 0x13, 0x81, 0x6c, 0xcb, 0x26, - 0xc6, 0x07, 0x76, 0xd5, 0x82, 0xaf, 0x53, 0x17, 0x18, 0x8d, 0x90, 0x4b, 0x82, 0x9a, 0x85, 0xff, - 0xf3, 0x60, 0x5d, 0x85, 0xa3, 0x3b, 0x3e, 0xfd, 0x5a, 0x47, 0xe6, 0xf0, 0x59, 0xbf, 0x64, 0x2e, - 0xc1, 0x96, 0xc1, 0x85, 0x2e, 0xa9, 0xde, 0x36, 0x88, 0xc3, 0x66, 0x34, 0x9c, 0x82, 0x2e, 0xb8, - 0xa4, 0x4d, 0x54, 0x5b, 0x1a, 0x43, 0xd2, 0xa5, 0x4d, 0x46, 0xac, 0x46, 0xfb, 0x61, 0x51, 0xb6, - 0xfd, 0x40, 0x4b, 0x79, 0xa0, 0x58, 0xb8, 0x05, 0xcb, 0x8d, 0xfa, 0x14, 0xe8, 0x7f, 0x82, 0xba, - 0x42, 0x60, 0x2e, 0x4e, 0x9e, 0xf9, 0xaf, 0x9e, 0x5c, 0xed, 0xca, 0x10, 0xbe, 0x64, 0x03, 0x63, - 0x8a, 0x21, 0x79, 0x14, 0xc8, 0x7d, 0x5f, 0x58, 0x8a, 0xd4, 0x8e, 0xd6, 0x57, 0xd9, 0xa3, 0x2b, - 0x5f, 0x12, 0xb9, 0x98, 0x38, 0x09, 0x49, 0x5f, 0xe7, 0xa5, 0x15, 0x1d, 0xa4, 0x2f, 0x6f, 0x40, - 0x97, 0x27, 0xbe, 0xb6, 0x92, 0xfa, 0x4d, 0x77, 0xe9, 0x06, 0x34, 0x70, 0x8f, 0x75, 0xa5, 0xe9, - 0xac, 0x44, 0xca, 0x86, 0x9c, 0x2a, 0x7d, 0x73, 0x7c, 0x83, 0xbb, 0x3d, 0xe8, 0x30, 0x69, 0xc0, - 0xa0, 0x66, 0xc8, 0xb3, 0xd8, 0x88, 0xbc, 0xed, 0x21, 0x7e, 0x1d, 0x65, 0xf8, 0x07, 0xff, 0x6c, - 0x50, 0x7f, 0xea, 0x8c, 0xc9, 0xd0, 0x8a, 0x6c, 0xf7, 0x88, 0x4a, 0x61, 0xbc, 0xf8, 0xe4, 0xf0, - 0xe6, 0xec, 0x94, 0x0a, 0x63, 0xc5, 0x77, 0x9d, 0x34, 0x80, 0x4f, 0xd3, 0x2b, 0x78, 0x81, 0x5b, - 0x63, 0x07, 0xc0, 0x56, 0xc5, 0xfd, 0x3c, 0xff, 0x7d, 0x94, 0x9e, 0x5f, 0x15, 0xb9, 0x37, 0x6b, - 0x39, 0xb8, 0x88, 0xb7, 0xe1, 0xd9, 0xd3, 0x5e, 0x89, 0x46, 0xf8, 0x25, 0x96, 0x38, 0xcb, 0x5e, - 0x1b, 0x38, 0x7e, 0x10, 0xfd, 0x03, 0x73, 0x04, 0x6a, 0x03, 0x6d, 0x80, 0x9f, 0x0b, 0xb9, 0xaa, - 0x08, 0x14, 0x0b, 0xa3, 0x0b, 0xf3, 0xa1, 0x38, 0x2a, 0xf6, 0xb1, 0x57, 0x0c, 0x1f, 0xfc, 0x6c, - 0xec, 0x6c, 0x6e, 0x8e, 0x9d, 0xd0, 0x9b, 0x38, 0x81, 0xbb, 0xde, 0x13, 0xb9, 0x03, 0xe6, 0x38, - 0x71, 0xd3, 0x17, 0x97, 0xfb, 0xe7, 0x80, 0x2a, 0x28, 0xa0, 0xa0, 0xbf, 0x1a, 0xe8, 0x60, 0xec, - 0x50, 0x9d, 0x27, 0x70, 0x66, 0xa6, 0xc7, 0xce, 0xf6, 0x56, 0x76, 0x73, 0x33, 0xd4, 0x4b, 0xc6, - 0xea, 0x85, 0x22, 0x74, 0x05, 0xc8, 0x27, 0xc0, 0x3d, 0xd7, 0x02, 0x5c, 0x13, 0xcf, 0x0a, 0x36, - 0x13, 0xd4, 0x46, 0x4e, 0x74, 0x25, 0x10, 0xd2, 0xea, 0x17, 0x4e, 0x40, 0xa1, 0xb3, 0xb0, 0x71, - 0x11, 0x53, 0x91, 0x6e, 0x86, 0x71, 0x1e, 0xc2, 0xf1, 0xea, 0x64, 0x18, 0x0d, 0xdd, 0x9a, 0x4d, - 0x7a, 0x13, 0x00, 0x82, 0x86, 0x8f, 0xe8, 0x31, 0xd7, 0x43, 0x03, 0xb1, 0xdb, 0x71, 0x6d, 0x54, - 0x67, 0x98, 0xac, 0xa3, 0xb2, 0xea, 0x08, 0xf4, 0x2b, 0x82, 0xda, 0xe8, 0x19, 0x88, 0xf9, 0x74, - 0x57, 0x37, 0x81, 0x56, 0xdd, 0x4c, 0xa5, 0x54, 0x40, 0xb4, 0x3a, 0xe1, 0xd4, 0xa4, 0xbb, 0x45, - 0x93, 0xff, 0x65, 0xf2, 0x99, 0x7c, 0x09, 0xb3, 0x8d, 0xd5, 0xd9, 0x5b, 0x98, 0xfb, 0x2f, 0x87, - 0xcf, 0x94, 0x44, 0xe4, 0xa2, 0xe6, 0x0e, 0xe8, 0x4a, 0x09, 0x2e, 0x95, 0xcc, 0x36, 0xd0, 0x85, - 0x02, 0x6c, 0x9f, 0x43, 0xdf, 0xef, 0x14, 0x58, 0x5a, 0x8a, 0x13, 0x12, 0x1c, 0x5e, 0x61, 0xe1, - 0xb9, 0xca, 0xf4, 0x54, 0xc3, 0xf9, 0xfd, 0xdb, 0xdc, 0x71, 0x82, 0x0a, 0xce, 0x0e, 0xc8, 0x94, - 0x21, 0x52, 0x14, 0x7e, 0x41, 0x15, 0x28, 0x2d, 0x7c, 0x01, 0x6e, 0xea, 0xa0, 0xe8, 0x06, 0x21, - 0x0f, 0x00, 0x60, 0xfa, 0xb7, 0x8b, 0xd5, 0xcd, 0xcd, 0x2f, 0x26, 0x4b, 0x33, 0x52, 0x34, 0x3e, - 0x04, 0xd3, 0xbf, 0x63, 0x57, 0x36, 0x37, 0x59, 0x7e, 0xa8, 0xbc, 0x97, 0x8e, 0x29, 0xee, 0x56, - 0x49, 0xfc, 0x17, 0x56, 0x71, 0x08, 0x1a, 0x4f, 0x7a, 0xc8, 0x91, 0x07, 0x93, 0x6d, 0x9b, 0x63, - 0x5c, 0x42, 0x80, 0x1f, 0xc0, 0xa8, 0xa7, 0x06, 0xfe, 0xfa, 0xee, 0xda, 0xdb, 0xdf, 0x5d, 0xd5, - 0xdf, 0x9c, 0xa0, 0xef, 0x1e, 0xe0, 0xb6, 0xff, 0x31, 0x23, 0xf3, 0xef, 0x19, 0x57, 0x0d, 0x67, - 0xd1, 0x37, 0x08, 0x60, 0x96, 0x3b, 0x07, 0x25, 0xda, 0xcb, 0xce, 0x40, 0xf5, 0x5f, 0x8b, 0x66, - 0x2c, 0xcf, 0xed, 0xe8, 0xcd, 0x8a, 0x17, 0x7c, 0x06, 0xe3, 0x27, 0x3e, 0x5a, 0xa8, 0x2f, 0x7e, - 0x73, 0x93, 0x7e, 0xfd, 0x20, 0x3f, 0x17, 0x4f, 0x69, 0x48, 0x4d, 0xc2, 0x44, 0x06, 0x3f, 0x61, - 0x68, 0x61, 0x47, 0xe4, 0xa5, 0x2e, 0x4d, 0x71, 0xc3, 0x25, 0xe4, 0x8d, 0x0c, 0xca, 0x5a, 0x5e, - 0x5e, 0x08, 0x9a, 0x9f, 0x94, 0xb6, 0x9c, 0x50, 0xf7, 0x24, 0x4b, 0xbb, 0x93, 0x74, 0x5f, 0xb7, - 0xa7, 0x85, 0x7f, 0xff, 0xfe, 0xe2, 0x57, 0xe2, 0x19, 0x5c, 0x98, 0x43, 0xd6, 0x7d, 0xcf, 0x39, - 0x0a, 0xa3, 0xd7, 0x7a, 0x46, 0x12, 0x77, 0x0b, 0xfc, 0x82, 0xfe, 0x68, 0xdc, 0x34, 0xa8, 0xc2, - 0x3b, 0xf4, 0xb3, 0x96, 0x54, 0x09, 0xbe, 0x22, 0x17, 0xd2, 0x0c, 0x21, 0x78, 0xb4, 0x16, 0x8f, - 0xaf, 0x7a, 0xdc, 0x65, 0xe5, 0x86, 0x1d, 0x56, 0xaf, 0xba, 0x8f, 0xbb, 0x0f, 0x31, 0xf5, 0xaa, - 0xef, 0x84, 0x9e, 0x71, 0x2b, 0x61, 0xb1, 0xf6, 0xac, 0x5d, 0xfa, 0x1e, 0x68, 0xa6, 0x64, 0xd0, - 0x05, 0x26, 0x2b, 0x68, 0x6f, 0x10, 0xef, 0x32, 0x09, 0x60, 0x02, 0x54, 0x57, 0xee, 0xf8, 0x57, - 0x4e, 0xd1, 0xb7, 0x03, 0x83, 0xf8, 0xac, 0xd2, 0x7f, 0x28, 0x72, 0xc8, 0x84, 0x28, 0x2d, 0x73, - 0x30, 0x00, 0xa9, 0x82, 0x2c, 0xd6, 0x9a, 0x72, 0x31, 0x46, 0x60, 0x69, 0x44, 0x45, 0x26, 0x80, - 0x77, 0xc7, 0xc9, 0xa6, 0x64, 0x03, 0x07, 0x88, 0x19, 0x51, 0xbe, 0x60, 0x23, 0x94, 0xdd, 0x50, - 0x6c, 0x13, 0x18, 0xc0, 0xc0, 0x6d, 0x34, 0xa8, 0xa0, 0xa5, 0xcf, 0xdb, 0x22, 0x1f, 0x1e, 0x6a, - 0x23, 0xa4, 0x74, 0xbe, 0x23, 0x87, 0x41, 0xfb, 0x15, 0x2c, 0x93, 0xbe, 0xb6, 0x88, 0xf8, 0xcd, - 0xf0, 0xc1, 0x3e, 0x0d, 0x7c, 0x0b, 0x54, 0x79, 0x07, 0x6e, 0x57, 0x4f, 0x92, 0xdf, 0xbf, 0x21, - 0xe1, 0x4b, 0xc3, 0xcb, 0x45, 0xad, 0x2f, 0x5c, 0x30, 0xa6, 0x5e, 0x5a, 0x0c, 0xda, 0x47, 0xda, - 0x25, 0xe8, 0xf1, 0xe6, 0xcb, 0xef, 0xdf, 0x71, 0x5e, 0x2c, 0x04, 0x5a, 0x67, 0x48, 0xed, 0x5c, - 0x62, 0x85, 0xde, 0x5e, 0x14, 0x59, 0x1e, 0x42, 0xa0, 0x88, 0x2e, 0xde, 0x75, 0x0c, 0xb4, 0x10, - 0x16, 0x7e, 0x5f, 0x50, 0x9d, 0x89, 0x4a, 0x06, 0x3e, 0xa6, 0x5f, 0x92, 0x08, 0x2b, 0x27, 0x30, - 0xa9, 0x58, 0x26, 0x36, 0x37, 0xbe, 0xfe, 0xe2, 0x4f, 0x4e, 0x0c, 0x0d, 0x38, 0x8a, 0x8c, 0xbf, - 0xab, 0xf8, 0x1f, 0xc3, 0x03, 0xdb, 0x81, 0xf3, 0x56, 0x18, 0x28, 0x04, 0xb6, 0x86, 0x3d, 0x0a, - 0x4d, 0xad, 0xdf, 0xcb, 0xcf, 0x21, 0x66, 0x15, 0x26, 0x08, 0x55, 0xa3, 0x22, 0x63, 0x07, 0x4d, - 0xec, 0xbd, 0x51, 0x13, 0x2f, 0x9a, 0xf3, 0x3f, 0x35, 0x68, 0xf2, 0xc1, 0xa0, 0xbd, 0x68, 0xd2, - 0xff, 0xd7, 0x63, 0xa6, 0x1a, 0xe7, 0x7b, 0xe3, 0x66, 0x5b, 0xa5, 0xff, 0xb1, 0x61, 0x27, 0xbd, - 0xad, 0x58, 0x58, 0x8e, 0x3f, 0x7e, 0xf2, 0x81, 0xd5, 0xcc, 0x52, 0xd3, 0x43, 0x83, 0x25, 0x70, - 0xff, 0xae, 0x7f, 0xa9, 0x73, 0x6b, 0x86, 0xbe, 0xd8, 0xcc, 0xfd, 0x1c, 0x12, 0x04, 0x16, 0x72, - 0x79, 0x7b, 0x44, 0xf1, 0x81, 0xdc, 0x10, 0x3b, 0xea, 0x2d, 0x0c, 0xc1, 0xba, 0x3a, 0x05, 0x50, - 0x8b, 0xbd, 0x40, 0x1f, 0xff, 0x57, 0xa7, 0x01, 0xeb, 0x04, 0x21, 0x00, 0x4c, 0x0b, 0x0a, 0x06, - 0xe6, 0x39, 0xef, 0xab, 0xbe, 0x2e, 0xa8, 0xbe, 0x34, 0xc7, 0x01, 0x1b, 0x3e, 0x49, 0xb7, 0xf1, - 0xc0, 0xe6, 0x04, 0x43, 0x6c, 0xdb, 0x85, 0x0f, 0x1e, 0xa1, 0xd3, 0x81, 0xf2, 0x24, 0xd5, 0xf8, - 0xb5, 0x1c, 0x55, 0x90, 0x60, 0x17, 0x61, 0x26, 0xf0, 0x3e, 0x36, 0x2f, 0x9a, 0x11, 0x64, 0x2a, - 0xd4, 0x9c, 0xbf, 0xea, 0x32, 0xe7, 0x87, 0xb8, 0x62, 0x52, 0xee, 0xe7, 0x0e, 0x7e, 0x20, 0x83, - 0x8f, 0xc5, 0x6b, 0x51, 0xa6, 0x91, 0xf4, 0xaa, 0xf1, 0x75, 0x2a, 0x95, 0xc1, 0xe4, 0x9b, 0x07, - 0xd1, 0x08, 0xbf, 0xd8, 0x56, 0x18, 0x9e, 0xa0, 0xe5, 0xc3, 0x3a, 0xee, 0x7c, 0x69, 0xcc, 0x01, - 0x03, 0x42, 0x26, 0x4d, 0xb9, 0x13, 0x3f, 0xf3, 0x64, 0x16, 0x13, 0x32, 0xe2, 0xcf, 0xba, 0x8f, - 0x12, 0xc1, 0x8d, 0x13, 0x2f, 0xab, 0x50, 0x77, 0x19, 0x2e, 0x94, 0x81, 0x75, 0xc9, 0xfb, 0xd8, - 0x65, 0xea, 0x36, 0xa2, 0xd9, 0xb7, 0xf5, 0x28, 0xde, 0xd8, 0x2e, 0xbb, 0xcb, 0x30, 0x44, 0xc5, - 0x30, 0xdb, 0x64, 0x74, 0xa0, 0xff, 0x3c, 0x8f, 0xd6, 0xb5, 0x66, 0x0c, 0x89, 0xf7, 0x26, 0xfa, - 0x40, 0xad, 0x73, 0x10, 0xb3, 0x14, 0xa4, 0xd1, 0xc0, 0x92, 0x20, 0xf7, 0xea, 0x28, 0x1c, 0x61, - 0x16, 0xac, 0xa1, 0xd3, 0x4f, 0xfe, 0x70, 0x05, 0x43, 0x60, 0xda, 0x87, 0xcb, 0xff, 0x44, 0xbd, - 0x9c, 0x26, 0x83, 0x86, 0x4e, 0x27, 0x21, 0x16, 0xa2, 0x96, 0x50, 0x12, 0xc8, 0xec, 0x17, 0xd8, - 0x9f, 0x9b, 0xeb, 0x10, 0x3c, 0xe7, 0xb9, 0xed, 0x5f, 0x14, 0xc8, 0x3f, 0x66, 0x21, 0x25, 0xc4, - 0xe5, 0x77, 0xb8, 0x20, 0xf8, 0xf4, 0x1b, 0x0b, 0xe9, 0xf0, 0xaf, 0x04, 0xfd, 0x46, 0x43, 0x38, - 0xb2, 0x79, 0x16, 0x58, 0x8c, 0x3a, 0xe1, 0x3c, 0x12, 0xb8, 0xe3, 0x5f, 0xa0, 0x84, 0xb3, 0xe6, - 0x77, 0x79, 0xee, 0x45, 0xcd, 0xb0, 0xe0, 0x91, 0x5f, 0x34, 0x18, 0x21, 0x95, 0x9a, 0xb3, 0x49, - 0x64, 0xb1, 0xf2, 0x11, 0x53, 0x85, 0x91, 0xf7, 0x65, 0x33, 0xb9, 0x60, 0x1e, 0x48, 0xbc, 0xcc, - 0x18, 0xf7, 0xe3, 0x1d, 0xc2, 0x8a, 0x0f, 0xc5, 0x23, 0x46, 0x3c, 0x79, 0xf4, 0xed, 0x5b, 0x00, - 0x02, 0xba, 0xc5, 0xb0, 0x37, 0x8c, 0x60, 0x16, 0xf1, 0x73, 0xe1, 0xf6, 0x5c, 0x58, 0xe8, 0xba, - 0x36, 0x22, 0x54, 0x43, 0xe3, 0x92, 0xa7, 0xf0, 0xc8, 0x83, 0x52, 0xe7, 0x52, 0xcf, 0x97, 0x9f, - 0xe8, 0xa5, 0xa8, 0x69, 0x46, 0xc1, 0xae, 0x1f, 0x32, 0x02, 0x55, 0x89, 0xea, 0xa4, 0xc7, 0xa3, - 0x45, 0x2c, 0x87, 0x97, 0xa4, 0xe0, 0x0f, 0x3f, 0x8e, 0xc3, 0x4b, 0x83, 0x5f, 0x0e, 0xe9, 0xd1, - 0x28, 0x0c, 0x92, 0xee, 0x3a, 0x69, 0x94, 0xd3, 0x18, 0x71, 0xe2, 0x57, 0x51, 0xdc, 0x65, 0x12, - 0xa6, 0x03, 0x5b, 0x28, 0x9d, 0x9c, 0x80, 0x8e, 0xb8, 0xae, 0x4d, 0x48, 0x9f, 0x48, 0x56, 0x26, - 0x4b, 0xf2, 0x75, 0xb3, 0x61, 0xa6, 0x5d, 0xb3, 0x8d, 0x2f, 0xb7, 0x00, 0x73, 0xbf, 0xce, 0x3c, - 0x0f, 0x1e, 0x48, 0x6b, 0x6c, 0x83, 0xf6, 0xcf, 0x9d, 0xa3, 0x6f, 0x47, 0xd2, 0x15, 0x0a, 0x51, - 0xe5, 0xea, 0xce, 0x36, 0x54, 0xdc, 0x31, 0x1a, 0x49, 0x07, 0xfe, 0xcf, 0x34, 0xe0, 0x07, 0x1f, - 0x80, 0x80, 0x3c, 0x71, 0x47, 0xac, 0x65, 0x79, 0xd0, 0xfa, 0x13, 0x4d, 0xae, 0xe6, 0xa0, 0xf3, - 0x2e, 0x49, 0xcb, 0x16, 0xc5, 0x7f, 0x51, 0x43, 0x82, 0x5a, 0xa1, 0x50, 0xb1, 0x28, 0xd2, 0x42, - 0x83, 0xa6, 0x67, 0x80, 0xea, 0x1e, 0x67, 0x21, 0xe9, 0x21, 0x65, 0x28, 0x48, 0x39, 0x60, 0x65, - 0x0b, 0xe6, 0x4f, 0xb0, 0xa7, 0xe3, 0x92, 0x01, 0xca, 0xf0, 0x26, 0x50, 0xfb, 0x0e, 0xe8, 0xf6, - 0xbe, 0x06, 0x0f, 0x45, 0xa9, 0x83, 0x19, 0x97, 0x4b, 0x2d, 0x9a, 0xce, 0x5a, 0x90, 0x1a, 0xdc, - 0xc9, 0x70, 0xd8, 0x97, 0x5e, 0x86, 0x1c, 0x68, 0x7d, 0x23, 0x62, 0xa7, 0xa9, 0x2d, 0xee, 0x39, - 0x38, 0xc5, 0x74, 0xb6, 0x90, 0xe6, 0x50, 0x13, 0x82, 0x72, 0x87, 0x26, 0xb0, 0x5e, 0x0e, 0xd9, - 0x38, 0x16, 0xd3, 0x60, 0x01, 0x0c, 0x31, 0xc0, 0x89, 0xdb, 0x92, 0x75, 0xbf, 0x48, 0x67, 0x68, - 0xfd, 0x9f, 0xff, 0x0d, 0xa0, 0xb0, 0x90, 0x62, 0xd0, 0x34, 0x7c, 0x00, 0xe5, 0x1c, 0x96, 0xc4, - 0x08, 0xec, 0x04, 0xac, 0x3a, 0x4f, 0x00, 0xbf, 0x92, 0xe6, 0x1c, 0x46, 0x2b, 0xd1, 0x3f, 0xfa, - 0x86, 0x8f, 0xed, 0xff, 0x65, 0xfc, 0x63, 0xa6, 0xcf, 0xf1, 0xd3, 0xef, 0x24, 0xb7, 0x3b, 0xd4, - 0x74, 0x74, 0xf7, 0xa7, 0x47, 0x9a, 0xca, 0x47, 0xb3, 0x3a, 0xa0, 0x64, 0x4b, 0x7a, 0x02, 0xd4, - 0x63, 0xca, 0x70, 0xb1, 0xd0, 0x58, 0xeb, 0x6a, 0x69, 0x87, 0xa6, 0xa7, 0xb8, 0x7f, 0x26, 0x92, - 0xe8, 0x38, 0xa5, 0x69, 0x36, 0xa8, 0xe4, 0x02, 0x97, 0x50, 0x77, 0x07, 0x60, 0xd8, 0x47, 0xc1, - 0xdc, 0x5a, 0x68, 0x1c, 0x72, 0x42, 0xcc, 0x50, 0x4c, 0x0f, 0x69, 0x3a, 0x1f, 0x2b, 0x7d, 0x43, - 0xcb, 0x92, 0x34, 0xcd, 0x8b, 0x66, 0xb5, 0x81, 0x80, 0x12, 0x48, 0x41, 0x40, 0x4f, 0xd0, 0xd6, - 0xcb, 0xae, 0xd7, 0x12, 0x01, 0x93, 0xc2, 0x96, 0x06, 0x3b, 0xd1, 0x82, 0x97, 0x9d, 0xeb, 0xe6, - 0x19, 0x27, 0x24, 0xbd, 0xdc, 0x4c, 0x56, 0xcc, 0x15, 0xf8, 0x10, 0xcd, 0x79, 0x10, 0x90, 0x19, - 0x44, 0x5a, 0xd9, 0x87, 0x65, 0x38, 0x40, 0x8a, 0x4b, 0x78, 0x21, 0x51, 0x9c, 0x60, 0xc4, 0x3a, - 0xd2, 0x04, 0x0c, 0x83, 0x1e, 0x9c, 0x68, 0x5f, 0x76, 0xb0, 0xab, 0x94, 0x68, 0xbb, 0x96, 0x13, - 0x2b, 0x75, 0xd6, 0x6c, 0x25, 0x24, 0x55, 0x05, 0xc6, 0xe5, 0x60, 0xa9, 0x81, 0xa4, 0xc4, 0xc7, - 0x03, 0xb6, 0xba, 0x33, 0x75, 0x40, 0x93, 0xc6, 0x7c, 0x58, 0x5a, 0xc3, 0x14, 0xba, 0x95, 0xe9, - 0xa3, 0x9b, 0xc2, 0xee, 0x21, 0x82, 0x43, 0xc4, 0x9b, 0x05, 0xcb, 0x97, 0x15, 0xcc, 0xb0, 0x42, - 0x40, 0xc8, 0xff, 0x5c, 0xc2, 0xf7, 0xbe, 0x31, 0xd2, 0x6c, 0xd3, 0x18, 0xd0, 0xae, 0x93, 0x34, - 0x06, 0x2d, 0x53, 0x8b, 0x17, 0xc3, 0x37, 0x6c, 0x02, 0x8f, 0x74, 0xd6, 0xf4, 0xb1, 0x66, 0xa5, - 0x38, 0x56, 0x19, 0x8c, 0x46, 0x4a, 0x1e, 0xbf, 0x98, 0x5b, 0xea, 0x65, 0x14, 0xe5, 0x35, 0xcb, - 0xeb, 0xdb, 0x3f, 0x06, 0x15, 0x5e, 0xe3, 0xb8, 0x86, 0x82, 0x30, 0xb1, 0x24, 0x9a, 0x34, 0x3d, - 0xa6, 0x5d, 0x30, 0x71, 0x1d, 0x0f, 0x16, 0xf3, 0x62, 0xc4, 0xfc, 0x1a, 0xdb, 0x59, 0x7e, 0x11, - 0xf8, 0x21, 0xd6, 0xcd, 0xef, 0x7e, 0xc6, 0xe6, 0xa6, 0xf9, 0xbd, 0x50, 0x37, 0x17, 0x2e, 0x58, - 0x0a, 0xf9, 0x87, 0xf9, 0x93, 0x0a, 0x24, 0x23, 0x24, 0x90, 0xd2, 0x40, 0xc0, 0x75, 0x2f, 0xea, - 0xed, 0x87, 0xf1, 0xb3, 0xe1, 0xa4, 0x4d, 0x74, 0x5c, 0x36, 0xc2, 0x0d, 0x53, 0x97, 0x7c, 0xa8, - 0x1f, 0x46, 0x0a, 0x08, 0xc1, 0xd8, 0xc6, 0xce, 0x60, 0x16, 0xf6, 0xc9, 0x5b, 0x49, 0x11, 0x09, - 0xe5, 0x1f, 0x18, 0xfa, 0xc7, 0xcc, 0x41, 0xab, 0x98, 0x3a, 0x5d, 0xe1, 0x69, 0x07, 0xfe, 0x6a, - 0xfe, 0x99, 0x30, 0xc0, 0x30, 0xda, 0xe0, 0x28, 0x2d, 0x00, 0xa3, 0xec, 0x2b, 0xf1, 0x9d, 0x55, - 0xf5, 0xcf, 0x4b, 0xd0, 0x1b, 0x2d, 0xe9, 0x1d, 0xaa, 0x1c, 0xe6, 0x26, 0x36, 0x0d, 0xd9, 0xb1, - 0xea, 0xf8, 0x14, 0x89, 0x8d, 0xa7, 0xe5, 0x64, 0x73, 0xc2, 0xf9, 0xe7, 0xc9, 0xfe, 0x31, 0x33, - 0xe6, 0x8e, 0x17, 0x42, 0x1d, 0x1c, 0x6d, 0xc1, 0xde, 0x26, 0x31, 0x87, 0xe7, 0x12, 0xd8, 0x31, - 0x48, 0xd9, 0xe1, 0xbc, 0xcb, 0x35, 0xa9, 0x8c, 0xa3, 0x4d, 0x44, 0x04, 0x5d, 0x70, 0x97, 0x26, - 0xed, 0x04, 0xe7, 0x47, 0x86, 0x62, 0x47, 0x33, 0xb4, 0xa7, 0xf4, 0x31, 0x76, 0x5b, 0x0b, 0xeb, - 0xde, 0xda, 0xc3, 0x3c, 0x09, 0x60, 0xd7, 0xd0, 0xfe, 0x02, 0xf1, 0x3b, 0x9c, 0xa4, 0xb8, 0x1c, - 0xd3, 0x91, 0x42, 0xfd, 0x87, 0x62, 0x51, 0x91, 0x0e, 0xdd, 0xbf, 0x1c, 0xdb, 0xfe, 0x08, 0x02, - 0x2d, 0x0b, 0x70, 0x3a, 0x8f, 0xde, 0x42, 0x44, 0x3b, 0x10, 0x9c, 0xae, 0x63, 0x47, 0xa7, 0x18, - 0x4c, 0x7a, 0xb3, 0xcb, 0xea, 0x23, 0x42, 0x58, 0x29, 0x72, 0xe4, 0x8a, 0xd5, 0x90, 0x97, 0xee, - 0x82, 0x01, 0x50, 0x78, 0x1d, 0x8c, 0xd7, 0x8d, 0xbf, 0x7f, 0x23, 0x0c, 0x8e, 0x00, 0x5a, 0x81, - 0xc1, 0x67, 0xbc, 0x4e, 0x7c, 0x74, 0x56, 0x88, 0x8e, 0x6f, 0xf1, 0xf4, 0xa9, 0x03, 0x43, 0x74, - 0xca, 0x3c, 0x5a, 0x63, 0x1a, 0x0a, 0x53, 0x4d, 0xfc, 0xc3, 0x87, 0x91, 0x05, 0x1c, 0x28, 0x7c, - 0x9e, 0x1b, 0x3f, 0x58, 0x5a, 0x06, 0x2c, 0x2d, 0xf4, 0xe5, 0x87, 0x07, 0x8b, 0x60, 0x7e, 0x2d, - 0xb0, 0xf5, 0x2b, 0x6c, 0xad, 0xca, 0x38, 0x60, 0x6a, 0xf8, 0x8c, 0x35, 0xba, 0x45, 0xc3, 0xcf, - 0x14, 0xdc, 0x08, 0xcc, 0xd5, 0xe8, 0x57, 0x3e, 0x57, 0xf3, 0x1c, 0x36, 0xfb, 0x9d, 0xcb, 0x7c, - 0x8e, 0xab, 0xd3, 0xd4, 0x2c, 0xcb, 0xac, 0x84, 0x33, 0x2b, 0xb9, 0x52, 0x89, 0x9b, 0x7b, 0xbf, - 0x77, 0x42, 0xee, 0x12, 0xd9, 0x88, 0xf8, 0x5c, 0x38, 0xdc, 0x5c, 0xa4, 0x7b, 0x98, 0x98, 0xbe, - 0x43, 0xd2, 0x9a, 0x55, 0x63, 0xcf, 0xcb, 0x4c, 0x89, 0xc5, 0x02, 0xd3, 0x60, 0x3f, 0xc6, 0x46, - 0x40, 0xef, 0x70, 0xf0, 0x03, 0x47, 0x8d, 0x1b, 0x6b, 0x69, 0x1a, 0xef, 0xcc, 0xcf, 0xbc, 0x87, - 0xa8, 0xb5, 0x40, 0x81, 0xd2, 0x0d, 0x54, 0x9d, 0xb4, 0xcc, 0x01, 0xbe, 0x13, 0x05, 0x6b, 0x48, - 0x28, 0xa1, 0x02, 0xfc, 0xe9, 0x00, 0x49, 0xff, 0xee, 0xd7, 0xf7, 0x36, 0x43, 0x74, 0x9f, 0x37, - 0x49, 0x0d, 0x2f, 0xe7, 0x87, 0xfe, 0x13, 0x1b, 0x94, 0x58, 0x75, 0x67, 0xa1, 0x12, 0xac, 0x32, - 0x3e, 0x80, 0xf5, 0x86, 0xa8, 0x5f, 0x82, 0x11, 0xce, 0x23, 0x21, 0xd2, 0xde, 0x85, 0x52, 0x9e, - 0xcf, 0xeb, 0x1b, 0x8d, 0x13, 0xce, 0x64, 0xbc, 0x92, 0xdf, 0x98, 0xa9, 0xc1, 0xb0, 0x26, 0xf1, - 0x21, 0x73, 0x43, 0x00, 0xf5, 0x98, 0x4d, 0x97, 0x44, 0xb7, 0xaf, 0x21, 0x0f, 0xf5, 0x00, 0x0d, - 0x4a, 0x8b, 0x8d, 0x86, 0x84, 0xe2, 0x7e, 0x87, 0x3b, 0xcf, 0x80, 0xae, 0x44, 0x9f, 0xe7, 0xb8, - 0xd0, 0x7e, 0x01, 0x2f, 0x04, 0x1d, 0x77, 0x0e, 0xc8, 0x50, 0x95, 0xef, 0xe2, 0x8e, 0x99, 0x6a, - 0x70, 0x91, 0x60, 0xfa, 0x84, 0x86, 0x37, 0xd4, 0x39, 0x28, 0x2c, 0xd4, 0x34, 0x57, 0x03, 0x40, - 0xa8, 0x80, 0x60, 0xb1, 0x73, 0x33, 0x61, 0x82, 0xc1, 0x69, 0x2f, 0x22, 0xc5, 0x13, 0x5d, 0x94, - 0x59, 0x69, 0xdc, 0x50, 0x45, 0x76, 0xca, 0x5e, 0x31, 0xe6, 0x33, 0x11, 0x7c, 0xeb, 0x2a, 0x5d, - 0xa3, 0xb0, 0x5a, 0xe6, 0xf4, 0x2b, 0x10, 0x5f, 0x2d, 0x26, 0x75, 0x03, 0x40, 0x35, 0x14, 0x62, - 0x14, 0x91, 0x73, 0x4a, 0xf4, 0x51, 0x51, 0x65, 0x44, 0x28, 0xdd, 0x8c, 0x1a, 0xda, 0x5e, 0x74, - 0xf8, 0x4a, 0x0b, 0x9b, 0xc5, 0xbe, 0x7f, 0xca, 0xc0, 0x0e, 0xdc, 0x6c, 0x43, 0x5d, 0xa5, 0x3b, - 0x8e, 0x08, 0x3b, 0x81, 0xc0, 0x69, 0xc0, 0x39, 0xf3, 0xb6, 0x7f, 0xd6, 0xdb, 0x14, 0x21, 0xd6, - 0x40, 0xe7, 0x27, 0x7f, 0xd5, 0xdb, 0xb4, 0xbc, 0x0c, 0x02, 0x97, 0x85, 0x67, 0x57, 0x50, 0x17, - 0x87, 0x40, 0x25, 0x34, 0xf1, 0x2d, 0x7d, 0x4a, 0xd0, 0xcc, 0xa0, 0xc3, 0xbd, 0x4e, 0x12, 0xde, - 0xe9, 0x24, 0x3f, 0xdc, 0x9f, 0x8d, 0x99, 0xa6, 0xd6, 0x88, 0xbf, 0x99, 0x09, 0xb8, 0x67, 0x3f, - 0xc0, 0x9e, 0x45, 0x18, 0x9f, 0x5d, 0x36, 0x80, 0x12, 0xdf, 0x95, 0x80, 0xf0, 0x44, 0x06, 0x89, - 0xa3, 0x27, 0xcc, 0xd0, 0xb5, 0x20, 0x02, 0xbe, 0x83, 0x9e, 0x30, 0xd6, 0x44, 0xc2, 0x3b, 0x8c, - 0xa8, 0x94, 0xe3, 0x26, 0x23, 0x6d, 0x82, 0xde, 0x3b, 0x7a, 0xd1, 0x4d, 0x72, 0xd7, 0x9d, 0xbb, - 0x3d, 0x8e, 0xff, 0x2e, 0xfa, 0xab, 0x7c, 0x45, 0x91, 0x7f, 0xa3, 0x7f, 0x14, 0x07, 0x6c, 0x6e, - 0x8b, 0x3b, 0x4e, 0xa8, 0x84, 0x33, 0x94, 0x41, 0x9b, 0x4d, 0x9a, 0x7c, 0xcd, 0x6c, 0x54, 0xab, - 0x55, 0x14, 0xf4, 0x3d, 0xdc, 0xf4, 0x02, 0xb4, 0x21, 0x79, 0xa3, 0x53, 0xf3, 0xd0, 0x1d, 0xe8, - 0x49, 0xae, 0x3b, 0x01, 0xaa, 0xc3, 0x6a, 0x9a, 0x2a, 0x2c, 0x55, 0x17, 0x41, 0xb1, 0x17, 0x16, - 0xc7, 0xe6, 0x70, 0x3f, 0x04, 0xff, 0x07, 0xfd, 0x8f, 0xd2, 0xa4, 0x7f, 0x9e, 0xf0, 0x7d, 0x15, - 0x6a, 0xe1, 0x4e, 0xf3, 0xed, 0x3f, 0x9c, 0xa7, 0xff, 0x4f, 0xa6, 0xc8, 0xdb, 0x37, 0xc7, 0xf9, - 0x09, 0xd4, 0x3b, 0xbf, 0x3f, 0x4c, 0x3d, 0x0b, 0xfa, 0x83, 0x9a, 0xd9, 0x5a, 0x34, 0x7a, 0x4e, - 0x4b, 0xc4, 0xa5, 0xe9, 0xe1, 0xd2, 0x64, 0xb8, 0x14, 0x42, 0xe7, 0xd7, 0x38, 0xe1, 0xdb, 0x7b, - 0x47, 0xd6, 0x80, 0xc7, 0x31, 0xab, 0xdb, 0x3f, 0xf3, 0xb7, 0x1a, 0xb1, 0x91, 0x6d, 0xde, 0x20, - 0x30, 0x66, 0x55, 0x5c, 0xef, 0x57, 0x0f, 0x52, 0x82, 0xde, 0x86, 0xcc, 0xbd, 0x8b, 0xea, 0x19, - 0x1b, 0x32, 0xe2, 0x36, 0x8d, 0x0e, 0x2f, 0xe8, 0x35, 0x8e, 0xc3, 0x61, 0x29, 0xf1, 0xc0, 0xde, - 0xa0, 0xeb, 0x7c, 0x1d, 0xb7, 0x90, 0x1c, 0xb6, 0x17, 0x89, 0xc8, 0xf1, 0xfa, 0xd5, 0x72, 0x1c, - 0xa0, 0xbe, 0x68, 0x18, 0x50, 0x38, 0x8f, 0xed, 0x83, 0x84, 0x4f, 0x90, 0x2c, 0xf6, 0xd3, 0x16, - 0x69, 0x3f, 0x08, 0x95, 0x2f, 0x5f, 0x5c, 0x7f, 0x7f, 0xc4, 0xbf, 0x70, 0x21, 0xc1, 0x82, 0x8e, - 0xb3, 0x0d, 0x90, 0x44, 0x6c, 0x10, 0xe8, 0x0b, 0x00, 0xa2, 0x68, 0xa0, 0x5f, 0x4a, 0x88, 0xc6, - 0x5c, 0x60, 0x3a, 0xef, 0xe5, 0x43, 0x6e, 0x03, 0x34, 0x1b, 0x9e, 0x8f, 0x3a, 0x89, 0x18, 0x0e, - 0xc5, 0x3a, 0xf9, 0xee, 0xc3, 0xab, 0x13, 0x44, 0x0a, 0xb5, 0x91, 0x41, 0x17, 0x77, 0xb1, 0x27, - 0x74, 0xf5, 0x0a, 0xba, 0x20, 0x09, 0x76, 0xe3, 0x4b, 0x16, 0x3b, 0x16, 0x6d, 0xc7, 0xe1, 0x79, - 0xbb, 0x81, 0xee, 0xa2, 0x0c, 0xb4, 0xf0, 0x2f, 0xb0, 0x61, 0x04, 0xe6, 0x31, 0x12, 0x74, 0xf8, - 0xca, 0xfd, 0x14, 0x24, 0xf8, 0xca, 0xff, 0xa4, 0x61, 0x41, 0x09, 0x8c, 0x5b, 0xb2, 0x41, 0xde, - 0x3b, 0xbc, 0x81, 0xfd, 0xf1, 0x2c, 0x77, 0x7a, 0x27, 0x14, 0xba, 0xa8, 0x57, 0xa4, 0x49, 0xcb, - 0x69, 0x01, 0xa8, 0xe0, 0x4c, 0x8e, 0x4f, 0x0d, 0xd8, 0xec, 0x56, 0xb6, 0x0e, 0xed, 0xfb, 0x39, - 0x30, 0x00, 0xc4, 0x8c, 0x1e, 0x4d, 0xc9, 0xd2, 0x5e, 0x85, 0x53, 0x72, 0x3f, 0xe7, 0x5f, 0x00, - 0xad, 0x0d, 0x1b, 0x10, 0x66, 0x37, 0x48, 0xc6, 0xc7, 0x07, 0x8e, 0x27, 0x70, 0x6e, 0xfd, 0xc2, - 0xb8, 0x07, 0xd4, 0x9b, 0x04, 0x34, 0xb3, 0x05, 0xb4, 0xc0, 0x79, 0x10, 0x6d, 0xf6, 0xfc, 0x9f, - 0xbf, 0x78, 0x4f, 0xd9, 0xf9, 0x15, 0xba, 0xd0, 0x2a, 0xb1, 0xf6, 0x46, 0x2b, 0x8c, 0x89, 0xa3, - 0xb1, 0x45, 0xc0, 0xe2, 0xeb, 0xbf, 0xa2, 0xd4, 0x42, 0x97, 0xd9, 0x05, 0x7d, 0xfb, 0x4b, 0xb0, - 0xd0, 0xa8, 0xd2, 0xe3, 0xef, 0x1f, 0xb2, 0x37, 0xc3, 0x2c, 0xd4, 0x51, 0x32, 0x67, 0x7b, 0x84, - 0xa0, 0x3b, 0xd2, 0x9c, 0xf0, 0xf6, 0xe0, 0xca, 0x65, 0x4b, 0xb7, 0x24, 0x05, 0x07, 0x7d, 0x30, - 0x9c, 0x80, 0xee, 0x11, 0x40, 0x46, 0x78, 0x83, 0x32, 0xee, 0xbb, 0xc3, 0xc1, 0x86, 0x8e, 0xb2, - 0x62, 0x5b, 0xde, 0x4f, 0x68, 0xb0, 0xc1, 0x1c, 0x11, 0xa0, 0xd1, 0xb4, 0x98, 0x46, 0x83, 0x12, - 0xdf, 0xf7, 0xe3, 0xc5, 0xac, 0x8d, 0xd0, 0xdd, 0xe8, 0xdc, 0xb2, 0xf1, 0xb2, 0xf0, 0xd2, 0x51, - 0xb5, 0x1a, 0xb7, 0x3c, 0x99, 0xe6, 0xbc, 0xb0, 0x61, 0x3c, 0x1d, 0x1a, 0xa7, 0x60, 0xa1, 0x17, - 0x07, 0x83, 0x0d, 0x6b, 0xb9, 0x6c, 0xa1, 0xa1, 0x03, 0xfe, 0x4b, 0x23, 0x30, 0x62, 0x49, 0xba, - 0x2f, 0x39, 0x4d, 0xd7, 0xb5, 0x35, 0xd0, 0xa2, 0x48, 0x92, 0x03, 0x85, 0x9f, 0xe3, 0x41, 0xe9, - 0x94, 0xfc, 0x24, 0xea, 0x0d, 0x63, 0x77, 0xb6, 0xd4, 0x80, 0xec, 0x04, 0xb3, 0xc1, 0x4c, 0x72, - 0x9a, 0x92, 0x71, 0xeb, 0x49, 0x73, 0x61, 0x8f, 0xc2, 0x32, 0xff, 0x5e, 0x14, 0x99, 0x7a, 0x94, - 0xf3, 0x3d, 0x5c, 0xbf, 0x56, 0xbf, 0x3a, 0x31, 0xf4, 0x82, 0x02, 0x3a, 0xae, 0x7f, 0x0a, 0xa1, - 0xfb, 0xa9, 0x59, 0x0a, 0xff, 0xab, 0x8e, 0xd1, 0x72, 0xa8, 0x1a, 0xa1, 0xee, 0xb0, 0xee, 0x80, - 0x49, 0xcc, 0xc2, 0xc0, 0xd0, 0xc7, 0xa5, 0x50, 0x8c, 0x86, 0xe3, 0xf9, 0x6d, 0x23, 0x00, 0xd7, - 0xc1, 0x0e, 0x62, 0x29, 0x99, 0xe5, 0x41, 0x41, 0xa2, 0xa7, 0x37, 0x69, 0x84, 0xfd, 0x9f, 0xde, - 0x45, 0x36, 0x21, 0x52, 0x0d, 0x07, 0x8f, 0xd0, 0xf0, 0xfa, 0x34, 0x3b, 0xa9, 0xf8, 0x57, 0xdb, - 0x0c, 0x85, 0x69, 0x30, 0xd0, 0x49, 0x2e, 0xfe, 0x66, 0xc5, 0xf0, 0xa6, 0xe7, 0xc2, 0x1f, 0xeb, - 0x6f, 0xbd, 0xd2, 0x33, 0x3a, 0x1c, 0x75, 0x33, 0x7f, 0x28, 0x5d, 0x57, 0xc5, 0x84, 0x78, 0xa7, - 0xe6, 0x70, 0xeb, 0x36, 0x00, 0x86, 0x3b, 0x06, 0x7f, 0x13, 0x18, 0x90, 0x61, 0xe4, 0xec, 0xdd, - 0xb6, 0xe8, 0x93, 0x23, 0xb5, 0xc4, 0xac, 0x7f, 0xcc, 0x22, 0xd9, 0x73, 0xf3, 0x17, 0x5f, 0x07, - 0xd3, 0xcd, 0x0d, 0x41, 0x95, 0x54, 0x35, 0x0c, 0x52, 0x48, 0xae, 0xab, 0xfb, 0xaa, 0xcb, 0x60, - 0xcf, 0xbd, 0x5b, 0x79, 0x1e, 0x47, 0x21, 0xee, 0xd8, 0xb0, 0x78, 0x91, 0xf0, 0x7d, 0xc2, 0xe1, - 0xa8, 0x11, 0x3c, 0xa6, 0x48, 0x8d, 0x7e, 0x6d, 0x44, 0x68, 0xc0, 0x05, 0x43, 0x38, 0x35, 0xba, - 0x74, 0xb6, 0x67, 0x4e, 0xbf, 0x3c, 0xbc, 0xf0, 0x41, 0xd0, 0x1d, 0xc3, 0x57, 0x38, 0x8f, 0xe2, - 0xcc, 0xaf, 0x86, 0xa8, 0x03, 0x86, 0xd2, 0x08, 0x9d, 0x57, 0x04, 0x32, 0x02, 0x73, 0x56, 0xb6, - 0x89, 0xf4, 0x32, 0xf7, 0x95, 0x02, 0xbc, 0x77, 0x22, 0xac, 0x13, 0x7c, 0x5b, 0x7b, 0x07, 0x05, - 0x3d, 0xac, 0xff, 0x2d, 0xa5, 0x07, 0x11, 0x0d, 0x68, 0x47, 0xa2, 0x96, 0xd9, 0x10, 0xd9, 0x4e, - 0xe0, 0xe6, 0x26, 0x59, 0xea, 0xa8, 0x37, 0xa9, 0x2b, 0x3a, 0x49, 0x56, 0x75, 0xb2, 0x3d, 0x09, - 0xf7, 0xd1, 0x53, 0x51, 0xc3, 0x0d, 0x46, 0xd4, 0x54, 0xd0, 0xa4, 0x1a, 0x94, 0x47, 0x34, 0xe8, - 0x56, 0xbf, 0xa7, 0x3f, 0x7e, 0x6e, 0x44, 0xc1, 0xd5, 0x1d, 0xdf, 0x52, 0xd1, 0x06, 0x42, 0x6a, - 0xea, 0x3c, 0x6e, 0xd9, 0x87, 0xae, 0xc4, 0xe5, 0xfd, 0x3d, 0xb9, 0xa5, 0x5c, 0x76, 0x31, 0xcd, - 0xfa, 0xfc, 0xc5, 0x5d, 0x2b, 0xbc, 0xd7, 0x67, 0x76, 0x93, 0x58, 0xfc, 0x4c, 0x13, 0xdb, 0x6f, - 0x88, 0x1f, 0x6c, 0x62, 0x15, 0xf0, 0xfa, 0xad, 0x78, 0x79, 0x45, 0x71, 0x57, 0x16, 0x7e, 0x59, - 0x09, 0x9d, 0x96, 0xa6, 0xa5, 0x6a, 0x5e, 0xa5, 0xf0, 0x26, 0x4c, 0x4c, 0x1d, 0xf4, 0xb3, 0x3a, - 0x2c, 0x66, 0x38, 0xe9, 0x33, 0xe4, 0xf8, 0x11, 0x21, 0xe3, 0xe3, 0x93, 0x60, 0x8c, 0x20, 0x22, - 0xc4, 0x40, 0xa9, 0x20, 0xda, 0x3b, 0x27, 0x36, 0x92, 0x50, 0x44, 0xc8, 0xc0, 0xba, 0x0c, 0x4b, - 0xec, 0x04, 0xc1, 0xed, 0x33, 0x63, 0x07, 0x14, 0x76, 0x7c, 0xf0, 0xe3, 0x64, 0x76, 0xb8, 0xff, - 0x86, 0xba, 0x09, 0x0c, 0xfe, 0xa6, 0xf9, 0x7c, 0x4c, 0x85, 0xa7, 0x7a, 0xdb, 0x8a, 0xd2, 0x34, - 0xd9, 0x60, 0x31, 0x17, 0xa2, 0x30, 0x33, 0x86, 0x03, 0x62, 0x6b, 0x4a, 0xed, 0x8b, 0x38, 0xe7, - 0x6b, 0xc1, 0x9e, 0xe8, 0xa2, 0x37, 0x7e, 0x20, 0x31, 0x8a, 0xc3, 0xb1, 0xe3, 0x29, 0x94, 0x75, - 0xa6, 0x2e, 0x61, 0x44, 0x7a, 0x60, 0x35, 0x8f, 0x81, 0xd3, 0x2d, 0x22, 0xc1, 0xd0, 0x0d, 0x01, - 0x56, 0xcf, 0x98, 0x06, 0x4d, 0x8d, 0x31, 0xbc, 0x98, 0x4b, 0x2d, 0xdd, 0x81, 0xed, 0x07, 0x5a, - 0xd3, 0xca, 0xf5, 0x24, 0xc6, 0xba, 0x91, 0x71, 0x22, 0x08, 0x87, 0xc3, 0x30, 0xfe, 0x34, 0x3a, - 0xaa, 0x1d, 0x07, 0x4f, 0x03, 0xf8, 0x27, 0x0e, 0xdc, 0x70, 0xdc, 0x09, 0xa1, 0x5a, 0x37, 0xcf, - 0xd4, 0x5d, 0xea, 0x69, 0xe7, 0x67, 0x91, 0xc0, 0xbf, 0xd0, 0x2e, 0x32, 0x2f, 0x84, 0x7e, 0x2c, - 0xc2, 0xea, 0xbc, 0x43, 0xcc, 0x41, 0x7c, 0xef, 0xb2, 0x51, 0xfe, 0x67, 0xa1, 0x8b, 0x3a, 0xcf, - 0x79, 0x5a, 0x32, 0x98, 0x02, 0x60, 0xbc, 0xd7, 0xcd, 0x9d, 0xc0, 0x90, 0x6f, 0x98, 0x42, 0x68, - 0x67, 0xcf, 0x3b, 0xb8, 0xbd, 0xb9, 0x19, 0xd9, 0x17, 0x03, 0xc5, 0x00, 0xcc, 0xcf, 0xc0, 0xf4, - 0xc7, 0x50, 0x41, 0x1a, 0x29, 0x98, 0xc4, 0x63, 0x12, 0xf0, 0xbd, 0xe3, 0x7d, 0xd7, 0x5c, 0x60, - 0xc6, 0xc2, 0x18, 0xdd, 0xd8, 0x34, 0x5a, 0x90, 0x22, 0xe8, 0x8f, 0xa3, 0x2c, 0xff, 0x30, 0xc2, - 0xd0, 0x6b, 0xd0, 0xb4, 0x88, 0x41, 0xdb, 0x1b, 0xa3, 0x5f, 0x19, 0xc3, 0x8e, 0x66, 0xdf, 0x46, - 0xdf, 0x6a, 0xae, 0x3d, 0x04, 0x6d, 0x12, 0x17, 0xd7, 0xab, 0x73, 0x4a, 0x7a, 0x92, 0x8e, 0x11, - 0xf1, 0x4b, 0xf8, 0x9c, 0x87, 0x8d, 0x32, 0x7f, 0x70, 0x7e, 0xa8, 0x28, 0x4e, 0x24, 0xf1, 0xc8, - 0x0c, 0xad, 0x05, 0x3c, 0xe2, 0x4e, 0xd0, 0x53, 0x1f, 0xe7, 0x4e, 0x4c, 0xa3, 0x80, 0x3c, 0xd9, - 0xd6, 0x04, 0x43, 0x6f, 0xa2, 0x0f, 0x50, 0xa7, 0x2e, 0x7d, 0x7d, 0x6f, 0x68, 0xb3, 0x5f, 0xea, - 0xd0, 0x86, 0x9f, 0x37, 0x92, 0xf7, 0xd3, 0x65, 0x45, 0xdb, 0x92, 0x4a, 0x58, 0x02, 0xbe, 0xc4, - 0x5d, 0xc0, 0x83, 0x13, 0x1d, 0x18, 0x03, 0x24, 0x0d, 0x55, 0xcb, 0xa0, 0xe3, 0x89, 0x1d, 0x77, - 0x07, 0x4d, 0x44, 0xff, 0x2e, 0xee, 0xe0, 0x56, 0x51, 0x0d, 0x9f, 0xf1, 0xe8, 0x3a, 0xe8, 0x2b, - 0xc1, 0x2b, 0x90, 0x32, 0x59, 0xd1, 0x9b, 0x72, 0x11, 0x4c, 0x3f, 0xb1, 0xbe, 0x62, 0x1f, 0x24, - 0xa6, 0x04, 0x2c, 0x6f, 0x80, 0x30, 0x73, 0x92, 0x6e, 0x34, 0xe2, 0x06, 0x06, 0x32, 0x0c, 0x02, - 0xf2, 0xcc, 0x04, 0x6d, 0x8c, 0xc9, 0x0a, 0x27, 0x95, 0x9a, 0xfb, 0x7a, 0x99, 0xb7, 0xc5, 0x81, - 0xc8, 0x32, 0xfc, 0x98, 0xac, 0x90, 0x2b, 0xea, 0xdc, 0x4c, 0xf8, 0x4d, 0x7b, 0xde, 0x27, 0xba, - 0xdc, 0x17, 0x02, 0xbb, 0x1e, 0x18, 0x2f, 0x0d, 0x03, 0x8f, 0xe2, 0x7a, 0x3b, 0x9d, 0x2b, 0x42, - 0xbb, 0x43, 0x76, 0x9e, 0x1f, 0xf0, 0x0e, 0x16, 0x12, 0xd9, 0x46, 0xab, 0x6f, 0x6b, 0xcb, 0x73, - 0x6c, 0x0a, 0xb6, 0xa0, 0x09, 0x4a, 0x5d, 0x62, 0xc0, 0x3c, 0x9b, 0xc9, 0x5e, 0xfc, 0x02, 0x7b, - 0x49, 0x5b, 0xfc, 0x02, 0x9b, 0x8e, 0x71, 0x7e, 0x3c, 0xc9, 0xb0, 0x48, 0xc6, 0x38, 0x76, 0x7c, - 0x78, 0x2f, 0x68, 0x9c, 0x4b, 0x49, 0x29, 0x60, 0x2b, 0x29, 0x9b, 0x7e, 0x6a, 0xb8, 0x41, 0xb5, - 0x80, 0xc5, 0x2e, 0x38, 0x00, 0x08, 0x0b, 0x25, 0x5b, 0xc1, 0x90, 0xd8, 0x45, 0x78, 0x39, 0xde, - 0x65, 0xc0, 0xa3, 0x44, 0x0f, 0x11, 0xd3, 0x7d, 0x40, 0x4a, 0x5e, 0x7d, 0x2c, 0xf4, 0x53, 0x30, - 0x70, 0xe7, 0x7a, 0x73, 0x93, 0x7e, 0x6d, 0x53, 0x19, 0x1c, 0xaa, 0xd3, 0x0c, 0xea, 0xd0, 0x7c, - 0x5e, 0x58, 0x16, 0x8e, 0x41, 0xbe, 0x33, 0x11, 0x56, 0x8b, 0xc6, 0xa0, 0x84, 0x36, 0x11, 0x48, - 0x9a, 0x86, 0xce, 0x6e, 0x6e, 0x8a, 0x60, 0x6e, 0xb0, 0x67, 0x86, 0x5a, 0x15, 0x5d, 0x2b, 0xbe, - 0x37, 0xdd, 0xcf, 0x60, 0x6e, 0x73, 0xb1, 0x46, 0x2f, 0x15, 0xf6, 0x9d, 0x8e, 0x03, 0x74, 0xd9, - 0x27, 0xba, 0xc1, 0x9e, 0xe1, 0x17, 0x8e, 0xd1, 0x8d, 0xe7, 0x64, 0xcf, 0x62, 0x69, 0xdc, 0x32, - 0x27, 0x86, 0x39, 0xec, 0xf5, 0x13, 0xf4, 0x2d, 0x50, 0x18, 0x13, 0xe8, 0x48, 0x23, 0x92, 0x60, - 0x91, 0x74, 0xb1, 0x2a, 0xb9, 0x5a, 0x70, 0x1b, 0x21, 0x6d, 0xc1, 0x73, 0xd8, 0x46, 0xca, 0xe4, - 0xb1, 0xcc, 0x99, 0xe6, 0x38, 0xf8, 0xce, 0x8c, 0xa3, 0x6b, 0xea, 0xe3, 0x8c, 0x15, 0xa9, 0x62, - 0x91, 0x66, 0xa8, 0x67, 0x09, 0x3a, 0x8c, 0x04, 0xd8, 0x52, 0x09, 0x53, 0x81, 0x85, 0x86, 0xbe, - 0xe2, 0x79, 0x88, 0x7a, 0x29, 0xaf, 0xa0, 0x1b, 0x92, 0xb4, 0x60, 0x8a, 0xab, 0xc1, 0x0f, 0x95, - 0xc6, 0x0e, 0x85, 0xaf, 0xa6, 0x30, 0x40, 0x04, 0xe8, 0xe1, 0x9b, 0x2b, 0x8c, 0x74, 0x77, 0x12, - 0x0e, 0x23, 0x42, 0xfc, 0x85, 0x38, 0x51, 0xb6, 0x1e, 0x62, 0x3b, 0x8b, 0xc8, 0xfd, 0x50, 0xc4, - 0xe3, 0x9f, 0x33, 0xcf, 0x2f, 0xe4, 0xf7, 0xef, 0xa0, 0x09, 0x7e, 0x16, 0x92, 0x2f, 0xbf, 0x7f, - 0x87, 0x45, 0x4f, 0x38, 0xaa, 0x3c, 0x1a, 0x93, 0x25, 0xe4, 0x49, 0x9e, 0xf7, 0xdd, 0x68, 0x94, - 0x11, 0x9b, 0x8d, 0x8f, 0x83, 0xc4, 0xd1, 0xc1, 0xb4, 0xc3, 0x59, 0x20, 0x40, 0x39, 0xe6, 0x99, - 0xc6, 0x13, 0xf7, 0x49, 0x8c, 0x41, 0x46, 0x1e, 0x05, 0x6d, 0x83, 0xc1, 0xd5, 0x60, 0x5e, 0x67, - 0xdc, 0x28, 0x0f, 0x87, 0x4a, 0xa3, 0x8c, 0x4b, 0x1b, 0xe6, 0x38, 0xc9, 0x63, 0xa0, 0x05, 0x35, - 0x06, 0x62, 0x51, 0xae, 0x28, 0x76, 0xbd, 0x18, 0xaa, 0x2c, 0xde, 0x9d, 0x90, 0xc4, 0xab, 0x45, - 0x60, 0x21, 0x99, 0x3b, 0x3e, 0xb7, 0x87, 0xd1, 0x7d, 0x9b, 0x71, 0x23, 0x8e, 0x31, 0xfc, 0x6f, - 0x7c, 0x0d, 0x83, 0x45, 0xb1, 0xe5, 0x88, 0xd8, 0x08, 0x61, 0x59, 0xc8, 0xa1, 0x1b, 0x64, 0x95, - 0x9f, 0xdd, 0xd1, 0x42, 0x4e, 0x76, 0x47, 0xc0, 0x03, 0x79, 0x04, 0xef, 0xd6, 0xc0, 0xf0, 0x75, - 0x34, 0xf4, 0xb7, 0x70, 0x73, 0x02, 0x06, 0x89, 0xe7, 0x98, 0x34, 0xa6, 0x38, 0xd0, 0x8a, 0x75, - 0xbc, 0x6c, 0xd6, 0x46, 0xe6, 0x7c, 0x7b, 0xd3, 0xde, 0xaa, 0x70, 0x73, 0x01, 0x5f, 0xee, 0x52, - 0x73, 0xff, 0x62, 0x0c, 0x5c, 0xf2, 0x7f, 0x58, 0x69, 0xe8, 0xf1, 0x78, 0x49, 0xc2, 0x0e, 0x2a, - 0xe7, 0x8a, 0x02, 0x0a, 0x0f, 0x9d, 0x42, 0x8d, 0x2a, 0x07, 0x0b, 0xe5, 0x81, 0xa5, 0x7c, 0xac, - 0x41, 0xf8, 0x15, 0x78, 0x3e, 0xa4, 0x3d, 0x10, 0x4f, 0x7b, 0xf0, 0xbe, 0x6b, 0x24, 0x2a, 0xa6, - 0xf9, 0x5a, 0x78, 0x05, 0xe2, 0xc5, 0x13, 0xb0, 0x4a, 0x1c, 0x0b, 0xac, 0x09, 0xc2, 0x4e, 0x0b, - 0xfc, 0xb5, 0xfd, 0x87, 0x65, 0x8b, 0xdf, 0x7b, 0xb3, 0x4c, 0xe4, 0xf4, 0xcc, 0xcc, 0x34, 0x6a, - 0xec, 0x32, 0x1b, 0xfc, 0x0c, 0xc7, 0x43, 0x86, 0xaf, 0x7e, 0x9a, 0x79, 0xb7, 0xdb, 0x80, 0x7d, - 0x1a, 0xbe, 0xdc, 0x47, 0x48, 0xfa, 0xf7, 0xdf, 0xb0, 0x6f, 0x3e, 0x76, 0xdb, 0x87, 0x77, 0x8a, - 0x16, 0xef, 0x0c, 0xf3, 0xa7, 0x21, 0xb8, 0xee, 0xbd, 0xc1, 0xaa, 0xec, 0x70, 0xa1, 0x6b, 0xdf, - 0xf1, 0xad, 0x49, 0x40, 0x70, 0xa1, 0x14, 0x7c, 0x45, 0x19, 0xef, 0xd9, 0x1a, 0xfe, 0xdb, 0x6b, - 0xa2, 0x06, 0x2e, 0x03, 0xb2, 0x30, 0x71, 0xe3, 0x03, 0xf0, 0x77, 0x9a, 0xfc, 0xe9, 0x0a, 0x0f, - 0x0b, 0xfb, 0xef, 0xdd, 0xda, 0xe3, 0x3d, 0xf0, 0xec, 0xbc, 0x96, 0x3f, 0x3e, 0x16, 0xe7, 0xc5, - 0xf6, 0xa3, 0x56, 0x0c, 0x80, 0x16, 0xfb, 0xe3, 0x11, 0x9c, 0x7b, 0xf0, 0xc2, 0xa3, 0xf0, 0x20, - 0xad, 0x1c, 0x06, 0x7b, 0x6f, 0x8c, 0x1f, 0x6b, 0xe9, 0x15, 0x01, 0xbe, 0x14, 0x02, 0xd9, 0xba, - 0x0c, 0xc3, 0xab, 0xaf, 0xcd, 0x41, 0xd6, 0x85, 0x2b, 0x9a, 0xc1, 0x60, 0x9d, 0xf2, 0xee, 0xd0, - 0x8f, 0xdb, 0x70, 0x24, 0x6e, 0xc1, 0xd1, 0xc2, 0xa3, 0x95, 0xf6, 0xde, 0xea, 0xb2, 0xfe, 0x65, - 0xec, 0x1f, 0x95, 0xf6, 0x37, 0x32, 0xd8, 0x2f, 0x7f, 0x60, 0xec, 0x22, 0xe4, 0x58, 0xdd, 0xfa, - 0xfa, 0xac, 0x46, 0xdc, 0xe4, 0x8c, 0x62, 0x30, 0x14, 0x10, 0xe3, 0x3b, 0x60, 0xc8, 0x5c, 0x71, - 0x20, 0xeb, 0x17, 0x9f, 0xf6, 0x42, 0x33, 0xea, 0x8b, 0x1c, 0x33, 0xfb, 0x6b, 0x05, 0xfc, 0x65, - 0x03, 0xd8, 0x2b, 0x9d, 0xfb, 0xf5, 0xf9, 0xde, 0x78, 0xe1, 0x21, 0x24, 0xb6, 0x0e, 0x41, 0xaf, - 0xac, 0xd1, 0x8d, 0x23, 0x94, 0xab, 0xb5, 0xc5, 0x56, 0x3f, 0x41, 0xc9, 0xbb, 0xe8, 0xe3, 0x7c, - 0x1e, 0xbd, 0x62, 0x23, 0x72, 0xfd, 0x67, 0xf8, 0x28, 0x43, 0xf8, 0x1a, 0x48, 0xaf, 0x73, 0xf5, - 0x45, 0xf7, 0x16, 0xc8, 0x0e, 0xd2, 0x56, 0xce, 0x61, 0xe8, 0xfe, 0xcf, 0xf8, 0x08, 0x3d, 0x2c, - 0xac, 0x80, 0xb4, 0xb9, 0xb9, 0xaa, 0x07, 0xf4, 0xc5, 0x73, 0xa0, 0x84, 0x99, 0x77, 0x1a, 0x19, - 0x27, 0x67, 0x32, 0xe9, 0x4b, 0x23, 0xcd, 0xb4, 0x6b, 0x9c, 0x33, 0x30, 0x4d, 0x8c, 0x61, 0xa3, - 0x80, 0x6a, 0xfe, 0xb5, 0xc0, 0xb1, 0x71, 0x86, 0xaf, 0x52, 0x0d, 0x0f, 0x73, 0xb9, 0x83, 0x7f, - 0x61, 0x94, 0x2b, 0x70, 0xf5, 0xf9, 0x61, 0x46, 0x7b, 0xf0, 0x37, 0x46, 0xb9, 0x08, 0xbc, 0x59, - 0x4f, 0x1b, 0xc0, 0xad, 0xbf, 0xf8, 0xf1, 0x3c, 0xe4, 0xe7, 0x7c, 0xb9, 0x3a, 0x06, 0xcc, 0xac, - 0xaf, 0x0e, 0x56, 0x58, 0x2d, 0xd0, 0xd0, 0xc3, 0x34, 0x46, 0xc3, 0x49, 0x02, 0x4f, 0x71, 0x14, - 0xaa, 0x77, 0x05, 0x29, 0x69, 0x88, 0xfc, 0x2c, 0x36, 0x13, 0xc2, 0x72, 0x3b, 0xdd, 0x49, 0x2d, - 0x7c, 0xc0, 0xac, 0x3b, 0x51, 0x49, 0x17, 0x5d, 0x1c, 0x31, 0xa0, 0xfe, 0x05, 0x99, 0xbe, 0x0e, - 0x18, 0x27, 0xe5, 0x15, 0x90, 0x61, 0x96, 0x6a, 0x24, 0x0e, 0x87, 0xbe, 0x2f, 0x2a, 0x3a, 0xdc, - 0xa5, 0x41, 0x2e, 0xdb, 0xae, 0x7c, 0x1c, 0x71, 0xec, 0x6e, 0xe7, 0x15, 0x68, 0x73, 0x26, 0x2b, - 0x61, 0x45, 0x4c, 0x8d, 0x25, 0x8c, 0x85, 0x6e, 0x36, 0x5e, 0x35, 0x13, 0xab, 0x41, 0x2e, 0xd9, - 0x27, 0x4b, 0x60, 0xf1, 0xd6, 0xbb, 0xf8, 0xdc, 0xe2, 0x1d, 0x69, 0x24, 0x8e, 0x5b, 0x16, 0x91, - 0x1d, 0x30, 0xbc, 0x19, 0xda, 0xce, 0xf3, 0x7a, 0xe4, 0x5c, 0x18, 0xee, 0x2e, 0x82, 0xc9, 0x4e, - 0x35, 0xd5, 0x90, 0xfa, 0xe1, 0xbf, 0x83, 0xcf, 0xf2, 0x0f, 0xa3, 0xf9, 0xa7, 0xd4, 0xbc, 0xe0, - 0x44, 0x1a, 0x97, 0x18, 0x99, 0x1b, 0x37, 0xd2, 0x76, 0x60, 0xef, 0x61, 0xfc, 0x11, 0x5e, 0x5f, - 0x47, 0xea, 0x0b, 0xa6, 0xbb, 0xde, 0xbe, 0x5d, 0xda, 0xc7, 0xc4, 0xed, 0xcb, 0x15, 0xce, 0x79, - 0xfa, 0x4e, 0x79, 0x8e, 0xaf, 0xc7, 0xb2, 0xa9, 0xa3, 0xdc, 0xcb, 0x13, 0x10, 0x01, 0x54, 0xa4, - 0x25, 0xdd, 0xb5, 0x26, 0x6d, 0xc4, 0x6c, 0x5c, 0x32, 0x43, 0xc9, 0xcf, 0x0f, 0x7d, 0x94, 0xd4, - 0xc2, 0x41, 0x65, 0xaf, 0x0f, 0x7d, 0x5f, 0x44, 0x10, 0xb4, 0xbc, 0xdd, 0x2b, 0xfa, 0xee, 0x9c, - 0x06, 0x6e, 0x5f, 0x01, 0x81, 0xcf, 0xfa, 0x35, 0x51, 0x70, 0xe0, 0x6f, 0x84, 0x6f, 0x5c, 0x05, - 0x6d, 0x2e, 0x72, 0xbc, 0x32, 0x08, 0x82, 0xf6, 0xb6, 0x48, 0x53, 0x45, 0x91, 0xaf, 0xab, 0xe6, - 0x8c, 0xa4, 0xfb, 0xe1, 0x62, 0xf9, 0x52, 0xac, 0x1c, 0x3f, 0x87, 0xde, 0xea, 0x24, 0x49, 0x13, - 0x25, 0x19, 0x23, 0xa0, 0xfb, 0xf4, 0xee, 0xb5, 0x3e, 0x6e, 0x6e, 0xf1, 0x75, 0xd6, 0x39, 0x48, - 0x9c, 0x2f, 0x10, 0x42, 0x28, 0x76, 0xfc, 0x17, 0x3a, 0x2c, 0xed, 0xc8, 0x04, 0xa3, 0xf3, 0x18, - 0x2c, 0x3b, 0x0f, 0xce, 0x6e, 0x16, 0x03, 0x61, 0x5e, 0x0f, 0xe1, 0xec, 0x3a, 0xe4, 0x05, 0xb2, - 0xc3, 0xc8, 0x3c, 0x08, 0x65, 0xf4, 0x22, 0x9e, 0xa3, 0xb0, 0xdf, 0xa8, 0x1e, 0x06, 0xdd, 0x27, - 0x93, 0x0e, 0xb5, 0x80, 0x3c, 0xf7, 0x38, 0x3c, 0xf9, 0x81, 0xe7, 0x6e, 0xc4, 0x33, 0x50, 0x77, - 0x31, 0x76, 0x1c, 0x37, 0x99, 0x3a, 0x5e, 0xa9, 0x52, 0xe4, 0xa4, 0xb2, 0xff, 0x52, 0x1e, 0x3c, - 0xab, 0xcc, 0x9a, 0x0a, 0x37, 0x43, 0x53, 0x3c, 0xdf, 0x32, 0x4c, 0x49, 0xa4, 0x07, 0x43, 0x90, - 0xba, 0x91, 0x14, 0x47, 0x72, 0x87, 0x36, 0x35, 0x79, 0xbc, 0x59, 0x13, 0x8c, 0x86, 0x66, 0x9b, - 0xe9, 0x16, 0x2b, 0xef, 0x8c, 0x6e, 0x4c, 0x7c, 0x35, 0x88, 0x83, 0x3b, 0xdf, 0x9e, 0x7b, 0xc4, - 0x48, 0x33, 0xd7, 0x88, 0x91, 0xee, 0x79, 0xdf, 0x32, 0xae, 0x16, 0xe8, 0x8b, 0x41, 0x26, 0xfe, - 0x0e, 0x5a, 0x47, 0x93, 0x75, 0x3a, 0xd2, 0xd5, 0xb7, 0xae, 0xac, 0xd9, 0x83, 0xc4, 0x1b, 0x97, - 0x12, 0xe2, 0x3f, 0x05, 0xba, 0x9f, 0xcb, 0xff, 0x0a, 0xa3, 0xf5, 0x24, 0x40, 0x6b, 0xb8, 0xfb, - 0x2f, 0x44, 0x1f, 0x69, 0x46, 0x94, 0x29, 0xf8, 0x24, 0xe0, 0x31, 0x05, 0xb4, 0x9f, 0x82, 0x11, - 0xa1, 0x97, 0xcc, 0x65, 0x70, 0xb6, 0xc5, 0x9d, 0x08, 0x22, 0x08, 0x1e, 0xe0, 0xa8, 0xc5, 0x92, - 0x5a, 0xec, 0x6d, 0x23, 0x49, 0x0e, 0x30, 0x01, 0x63, 0x85, 0xbf, 0x30, 0x39, 0x79, 0xaf, 0x3e, - 0x9a, 0x7d, 0x58, 0x69, 0xe9, 0xe6, 0xbe, 0xc5, 0x14, 0xfa, 0x2c, 0x30, 0x02, 0xf4, 0x64, 0x19, - 0x68, 0x72, 0xc6, 0xc6, 0x5a, 0x5b, 0x07, 0x2b, 0x40, 0xd0, 0x3c, 0x06, 0x8c, 0xbe, 0xda, 0x65, - 0xb6, 0xc0, 0x8c, 0x17, 0x22, 0xb0, 0x8a, 0xc8, 0x31, 0x60, 0x60, 0x15, 0x8d, 0xc7, 0xd2, 0x77, - 0x17, 0x4d, 0xfd, 0x5a, 0xb3, 0xd2, 0x82, 0xc4, 0x88, 0x36, 0x1a, 0x67, 0x8c, 0x59, 0x60, 0x1d, - 0x9b, 0x9b, 0xd1, 0xbb, 0x1a, 0x1a, 0x0d, 0x97, 0xad, 0x82, 0xd5, 0x1c, 0x6d, 0x73, 0xf3, 0x43, - 0x6c, 0xd3, 0x78, 0x88, 0x77, 0x81, 0xc4, 0x57, 0x3c, 0x5b, 0x66, 0x42, 0xee, 0x0b, 0x76, 0x27, - 0x19, 0x5e, 0x8a, 0x8d, 0x55, 0x12, 0x2c, 0x60, 0xa4, 0x41, 0xb0, 0x4a, 0x0c, 0x9e, 0x00, 0x2b, - 0x8f, 0x8a, 0x40, 0x48, 0xa9, 0xfd, 0xf8, 0x61, 0x02, 0xeb, 0x30, 0x81, 0x4b, 0x98, 0x69, 0x59, - 0x08, 0x03, 0xff, 0x29, 0xfc, 0xc0, 0xff, 0x41, 0xbd, 0xa9, 0x67, 0x69, 0xd3, 0x31, 0xd3, 0x60, - 0xb5, 0xc5, 0x02, 0x76, 0x3b, 0xfa, 0x48, 0x7a, 0xe9, 0xee, 0x04, 0x34, 0x15, 0x01, 0x70, 0x88, - 0xc0, 0x76, 0xa2, 0x4d, 0x02, 0xdc, 0xf7, 0x5a, 0x85, 0x26, 0x6b, 0x39, 0x56, 0x91, 0x5e, 0x9a, - 0x14, 0xab, 0xfa, 0x5e, 0x6d, 0x54, 0xc6, 0x22, 0x82, 0xd1, 0x89, 0x29, 0x2a, 0xde, 0xbb, 0x65, - 0x56, 0x2a, 0x67, 0x8a, 0xe2, 0x86, 0xb5, 0xa6, 0xb9, 0x77, 0x0e, 0xaf, 0xaf, 0x84, 0xa5, 0x0b, - 0x7a, 0xfe, 0x0f, 0x0e, 0xf1, 0x26, 0x03, 0xb6, 0x9b, 0x83, 0xbf, 0x93, 0xc1, 0x1d, 0x32, 0xde, - 0x25, 0x9e, 0x78, 0xe1, 0xe8, 0xe2, 0xce, 0xe2, 0x0c, 0x06, 0xe9, 0x66, 0xc6, 0xda, 0x0b, 0x68, - 0x3e, 0x73, 0x4f, 0x31, 0xb1, 0x61, 0x8a, 0xd8, 0xf1, 0x3f, 0xdf, 0x24, 0x4e, 0x26, 0xfb, 0x4a, - 0xaa, 0x91, 0xad, 0xf0, 0xdb, 0x79, 0x7a, 0x3a, 0x1e, 0x9b, 0xe5, 0x85, 0xbe, 0xb2, 0x9d, 0xf3, - 0x7f, 0xe6, 0xc5, 0x12, 0x60, 0xb4, 0x50, 0x68, 0x34, 0xfa, 0x0a, 0x4d, 0x49, 0x35, 0xf2, 0x98, - 0x22, 0x56, 0x42, 0x29, 0x00, 0x80, 0x71, 0x26, 0x76, 0xab, 0xb2, 0x3f, 0x3d, 0x74, 0xf6, 0x1b, - 0xbf, 0xfa, 0x0e, 0x5e, 0x28, 0xd5, 0x57, 0xe6, 0x78, 0x3b, 0x17, 0xf2, 0xb2, 0x22, 0xd8, 0xc5, - 0xbf, 0xf8, 0xb9, 0x50, 0xcd, 0x8a, 0x8c, 0x5c, 0x14, 0xa3, 0x6b, 0x47, 0x7c, 0x85, 0x8b, 0xab, - 0x9e, 0xe9, 0xde, 0x04, 0xe6, 0x47, 0x74, 0xff, 0xe0, 0x76, 0xe8, 0xe0, 0x8c, 0x39, 0x89, 0xb4, - 0xc9, 0x7d, 0xc5, 0x97, 0xdd, 0x09, 0x24, 0xb4, 0x5f, 0xcb, 0xd1, 0x17, 0xb7, 0xda, 0x83, 0x04, - 0xbb, 0x3a, 0x9a, 0xa3, 0xde, 0xf9, 0x24, 0x6b, 0x19, 0xd6, 0xe9, 0x9a, 0x77, 0xc5, 0xd2, 0x86, - 0xb8, 0xd5, 0x47, 0x83, 0x23, 0x07, 0x46, 0xe3, 0x11, 0x62, 0xde, 0x9e, 0xdd, 0x47, 0x77, 0x0c, - 0x01, 0xac, 0x89, 0x77, 0xc5, 0x10, 0xef, 0xda, 0x53, 0x04, 0x93, 0x8c, 0xec, 0xb5, 0xb9, 0x2c, - 0x34, 0x60, 0x84, 0xdb, 0xd9, 0xc1, 0x6e, 0x11, 0x1e, 0x0b, 0xf2, 0x0f, 0x85, 0x87, 0x1a, 0x6d, - 0xe0, 0x49, 0x7a, 0x3a, 0x2c, 0x76, 0xbc, 0x93, 0x9f, 0x7b, 0x97, 0xf6, 0xf0, 0xb3, 0x79, 0xa4, - 0xdc, 0x6c, 0x8e, 0x07, 0x7f, 0x22, 0xe3, 0x10, 0x05, 0xef, 0xf2, 0x95, 0x75, 0xf7, 0x49, 0xd2, - 0x9e, 0xc6, 0xcf, 0xe6, 0xcf, 0xac, 0x5a, 0xe4, 0x66, 0x65, 0xe8, 0x58, 0x2d, 0xdc, 0xcb, 0x39, - 0x46, 0x33, 0xae, 0x3a, 0x6d, 0x1d, 0xb9, 0xaa, 0x22, 0x8a, 0x50, 0xdc, 0x84, 0x5d, 0x73, 0xd8, - 0x7a, 0xb2, 0x63, 0xa1, 0xb0, 0x04, 0x6d, 0x34, 0x16, 0x23, 0xfc, 0x37, 0x5c, 0x98, 0x7f, 0xc1, - 0x77, 0x69, 0x02, 0xa2, 0x22, 0xf8, 0x5c, 0xbe, 0x02, 0x21, 0x8c, 0x14, 0x33, 0x6d, 0x01, 0x8c, - 0xef, 0x66, 0x7a, 0xb0, 0x13, 0xbf, 0xe7, 0x64, 0x69, 0xf0, 0xa9, 0x2c, 0x5e, 0x77, 0x2b, 0x80, - 0x1a, 0x57, 0x73, 0x93, 0xd1, 0x6b, 0x97, 0x96, 0x8e, 0xf4, 0x86, 0x99, 0x0c, 0x7d, 0xcb, 0x02, - 0x6e, 0xe7, 0x2d, 0x6e, 0x12, 0x58, 0xaf, 0x7c, 0x04, 0x06, 0x2e, 0x1e, 0x99, 0xf1, 0xa2, 0x84, - 0xe2, 0x2e, 0x8e, 0x20, 0x60, 0x1f, 0xd7, 0x9b, 0xcb, 0xaf, 0xdc, 0x7f, 0x5f, 0x04, 0x6a, 0x6a, - 0x18, 0x58, 0xf2, 0xdd, 0xbf, 0xa4, 0xab, 0xae, 0x2d, 0x4e, 0x06, 0x99, 0x3f, 0x34, 0xbc, 0x7a, - 0xc9, 0x59, 0x19, 0x96, 0x49, 0x23, 0xc7, 0xbc, 0xa0, 0x8a, 0x1b, 0xe8, 0x2d, 0xe8, 0x77, 0xb7, - 0xf8, 0xa6, 0xed, 0x96, 0x84, 0xf7, 0xb0, 0xd4, 0x9d, 0x58, 0x7f, 0x8d, 0x20, 0x4c, 0xc3, 0xeb, - 0x74, 0xb4, 0x3c, 0xbf, 0xbd, 0x95, 0xa5, 0x4e, 0x2e, 0xb6, 0xb7, 0x3f, 0x8f, 0xde, 0xb5, 0x62, - 0xb0, 0x78, 0xa7, 0x55, 0x26, 0x7e, 0xdd, 0x8f, 0x34, 0xc3, 0x30, 0x51, 0xcd, 0x1c, 0x3a, 0x51, - 0xac, 0xf9, 0xfa, 0x11, 0x3d, 0xda, 0x9b, 0xa6, 0x2f, 0xb6, 0x48, 0xe2, 0x8d, 0x7a, 0x08, 0x04, - 0x67, 0x87, 0x5e, 0xd5, 0x93, 0x44, 0xad, 0x8a, 0x3d, 0xb1, 0x3b, 0x94, 0xb8, 0x70, 0x1c, 0xf8, - 0x90, 0xbd, 0x0f, 0x63, 0xa1, 0x66, 0x2f, 0x19, 0xa7, 0xb2, 0x3e, 0xb4, 0x93, 0x2b, 0xf7, 0xb4, - 0x96, 0x73, 0xc2, 0xf6, 0x22, 0xcb, 0x9d, 0xb3, 0xe0, 0xcf, 0xff, 0x6a, 0xad, 0xb8, 0xd8, 0x76, - 0xf1, 0x52, 0x62, 0x5e, 0x38, 0x6f, 0x64, 0x69, 0x18, 0xc1, 0x58, 0xd0, 0x68, 0x5f, 0x1a, 0xa2, - 0x30, 0x11, 0x99, 0x83, 0x9d, 0xf9, 0x2f, 0x3a, 0xf4, 0x06, 0x71, 0x74, 0x37, 0x45, 0xf8, 0xf1, - 0xd0, 0x60, 0x7b, 0x14, 0x41, 0x74, 0x44, 0x9a, 0x1d, 0xd6, 0x51, 0x6f, 0xe8, 0xbd, 0x44, 0xce, - 0x4e, 0x3c, 0xe1, 0x87, 0xf8, 0xb3, 0x16, 0x3a, 0x0e, 0xd2, 0x97, 0x9c, 0x23, 0xdb, 0xa4, 0x11, - 0x71, 0xf4, 0x9c, 0x7a, 0x24, 0xd6, 0x88, 0x2c, 0x6d, 0xc6, 0xb2, 0xc8, 0x8d, 0xc5, 0x71, 0x4c, - 0xa8, 0x0b, 0xe8, 0xf4, 0xf6, 0xa7, 0xc5, 0xb9, 0xbf, 0x51, 0x1d, 0x66, 0xcb, 0xca, 0x4b, 0x32, - 0x14, 0x32, 0xe8, 0x45, 0xb5, 0x05, 0x76, 0x22, 0x3d, 0xeb, 0x1a, 0x09, 0x75, 0xf3, 0x2f, 0x9c, - 0x0e, 0x8a, 0xc0, 0x2c, 0x7b, 0x98, 0x72, 0x92, 0xc1, 0x4b, 0xe2, 0xf8, 0xdf, 0xbf, 0xc3, 0x5d, - 0x77, 0x63, 0xbf, 0x4d, 0xbc, 0x90, 0x0f, 0x10, 0xe8, 0xa3, 0x07, 0xa0, 0xa1, 0xf2, 0xfe, 0x10, - 0x20, 0xd3, 0x0b, 0x49, 0x0b, 0xbd, 0xff, 0x99, 0xff, 0xc1, 0x30, 0xff, 0xd3, 0x73, 0x18, 0xdd, - 0x98, 0x96, 0xf0, 0x5f, 0xad, 0x55, 0x71, 0x74, 0x9e, 0xd7, 0xe8, 0x4b, 0xd2, 0x9f, 0x0f, 0x91, - 0x0f, 0x93, 0x14, 0x35, 0x8b, 0x99, 0xcd, 0xc9, 0x0a, 0xf8, 0xa3, 0x5f, 0xea, 0x8c, 0xd9, 0x70, - 0xb7, 0x26, 0xa2, 0x7f, 0xb5, 0x0f, 0x65, 0x51, 0x26, 0x5e, 0xe5, 0x93, 0x4a, 0x3a, 0xff, 0x32, - 0x33, 0xe3, 0xc5, 0xf9, 0xcb, 0x1c, 0x5f, 0x17, 0xbf, 0x34, 0xf0, 0xde, 0x28, 0xd6, 0xc7, 0x6d, - 0x11, 0x98, 0xe1, 0x77, 0x91, 0x0f, 0x12, 0xbe, 0x63, 0xc2, 0x36, 0x26, 0x18, 0xdb, 0xe9, 0x6c, - 0x6e, 0x73, 0xf3, 0x53, 0xe3, 0x6b, 0x34, 0x3c, 0x74, 0x00, 0x1c, 0x18, 0xea, 0xf2, 0x15, 0xdf, - 0xdc, 0xd6, 0x96, 0xc6, 0x79, 0x14, 0xb9, 0xd5, 0x70, 0xb0, 0x6f, 0xd9, 0x2d, 0xc3, 0x0f, 0x74, - 0x92, 0x70, 0x11, 0xbe, 0x38, 0x5e, 0x17, 0x40, 0xa0, 0xac, 0x83, 0xd1, 0xc5, 0x43, 0xa1, 0x9f, - 0x45, 0x26, 0xee, 0xad, 0x79, 0xa4, 0x1f, 0x62, 0x14, 0xec, 0x22, 0xb0, 0xb0, 0xa6, 0xe1, 0x9a, - 0x16, 0xe7, 0xa3, 0xf2, 0x90, 0x60, 0x20, 0x70, 0x3d, 0xb8, 0x9c, 0x19, 0x4f, 0xdf, 0xa6, 0xb8, - 0xe8, 0x85, 0xcd, 0x16, 0xa4, 0x6d, 0x25, 0x63, 0x6a, 0xab, 0xff, 0x7e, 0xf6, 0x98, 0xde, 0xba, - 0x23, 0xd6, 0x62, 0xd9, 0xac, 0x1d, 0xc0, 0x19, 0x1f, 0x83, 0x4b, 0x2f, 0x2e, 0xc5, 0x1b, 0xa2, - 0xc3, 0x14, 0x10, 0x5c, 0x46, 0x48, 0x84, 0x74, 0x3a, 0xed, 0x32, 0x5d, 0xc9, 0x77, 0xa6, 0xf8, - 0x0a, 0x02, 0xa9, 0x33, 0xde, 0x40, 0xef, 0x72, 0xf4, 0x8e, 0x31, 0x40, 0x39, 0xff, 0xce, 0xf2, - 0xcd, 0x4d, 0xf6, 0x64, 0xf2, 0x8b, 0x83, 0xd6, 0x09, 0x3c, 0xe8, 0x93, 0x30, 0x79, 0x2f, 0x07, - 0x56, 0x23, 0xbf, 0x43, 0x17, 0xe5, 0xef, 0xdf, 0x51, 0x49, 0x47, 0x84, 0x19, 0xa4, 0xd6, 0x66, - 0xa8, 0x00, 0x87, 0x7a, 0x03, 0x69, 0x02, 0xad, 0xc5, 0xd7, 0x56, 0x96, 0xc7, 0xbc, 0x79, 0xa0, - 0xb9, 0x2d, 0x0d, 0x63, 0xee, 0x5d, 0xc7, 0xe6, 0xa9, 0x64, 0xcb, 0x97, 0xa1, 0x81, 0x52, 0x06, - 0x25, 0x38, 0x7a, 0x6d, 0x1b, 0xbd, 0xbf, 0x0d, 0xe6, 0x7c, 0xb9, 0xd4, 0xc0, 0xc4, 0xd3, 0xa4, - 0xe8, 0x9c, 0xa5, 0x1c, 0x6d, 0x7d, 0xc1, 0xf0, 0x4d, 0x6c, 0xef, 0x97, 0xa4, 0x20, 0x41, 0x78, - 0x73, 0x02, 0xae, 0xbe, 0x0f, 0xca, 0x0d, 0xad, 0x8f, 0x8a, 0x2d, 0x2e, 0x75, 0xf3, 0xcb, 0x6d, - 0x7c, 0xcf, 0x78, 0x6f, 0xb1, 0x48, 0x7c, 0xcf, 0xe0, 0xde, 0x2a, 0x7e, 0xf7, 0xdd, 0x81, 0xbe, - 0x9d, 0xf8, 0xbf, 0x16, 0x26, 0xdb, 0xb6, 0xee, 0xc4, 0x00, 0x00 -}; From e4ec65622f6902e8aad6a9a1c61bf56b58cbe7fe Mon Sep 17 00:00:00 2001 From: Woody Date: Tue, 14 Nov 2023 21:19:38 +0100 Subject: [PATCH 012/126] Enable simplifiedUI by default --- wled00/cfg.cpp | 4 ---- wled00/data/settings_ui.htm | 5 +---- wled00/set.cpp | 6 ------ wled00/wled.h | 2 +- wled00/xml.cpp | 4 ---- 5 files changed, 2 insertions(+), 19 deletions(-) diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index e36b2f61d..51806ca56 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -31,9 +31,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { getStringFromJson(cmDNS, id[F("mdns")], 33); getStringFromJson(serverDescription, id[F("name")], 33); getStringFromJson(alexaInvocationName, id[F("inv")], 33); -#ifdef WLED_ENABLE_SIMPLE_UI CJSON(simplifiedUI, id[F("sui")]); -#endif JsonObject nw = doc["nw"]; #ifndef WLED_DISABLE_ESPNOW @@ -656,9 +654,7 @@ void serializeConfig() { id[F("mdns")] = cmDNS; id[F("name")] = serverDescription; id[F("inv")] = alexaInvocationName; -#ifdef WLED_ENABLE_SIMPLE_UI id[F("sui")] = simplifiedUI; -#endif JsonObject nw = doc.createNestedObject("nw"); #ifndef WLED_DISABLE_ESPNOW diff --git a/wled00/data/settings_ui.htm b/wled00/data/settings_ui.htm index d56199e2d..ba84a77d8 100644 --- a/wled00/data/settings_ui.htm +++ b/wled00/data/settings_ui.htm @@ -267,10 +267,7 @@

Web Setup

Server description:
-
- This firmware build does not include simplified UI support.
-
-
Enable simplified UI:
+ Enable simplified UI:
The following UI customization settings are unique both to the WLED device and this browser.
You will need to set them again if using a different browser, device or WLED IP address.
Refresh the main UI to apply changes.

diff --git a/wled00/set.cpp b/wled00/set.cpp index a12ecd30b..ab830a97c 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -296,13 +296,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) { strlcpy(serverDescription, request->arg(F("DS")).c_str(), 33); //syncToggleReceive = request->hasArg(F("ST")); - #ifdef WLED_ENABLE_SIMPLE_UI - if (simplifiedUI ^ request->hasArg(F("SU"))) { - // UI selection changed, invalidate browser cache - cacheInvalidate++; - } simplifiedUI = request->hasArg(F("SU")); - #endif DEBUG_PRINTLN(F("Enumerating ledmaps")); enumerateLedmaps(); DEBUG_PRINTLN(F("Loading custom palettes")); diff --git a/wled00/wled.h b/wled00/wled.h index 7690679f2..25be2c9ec 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -365,7 +365,7 @@ WLED_GLOBAL char serverDescription[33] _INIT(SERVERNAME); // use predefined nam #endif //WLED_GLOBAL bool syncToggleReceive _INIT(false); // UIs which only have a single button for sync should toggle send+receive if this is true, only send otherwise WLED_GLOBAL bool simplifiedUI _INIT(false); // enable simplified UI -WLED_GLOBAL byte cacheInvalidate _INIT(0); // used to invalidate browser cache when switching from regular to simplified UI +WLED_GLOBAL byte cacheInvalidate _INIT(0); // used to invalidate browser cache // Sync CONFIG WLED_GLOBAL NodesMap Nodes; diff --git a/wled00/xml.cpp b/wled00/xml.cpp index c5bae5805..9a7fc4acd 100644 --- a/wled00/xml.cpp +++ b/wled00/xml.cpp @@ -475,11 +475,7 @@ void getSettingsJS(byte subPage, char* dest) { sappends('s',SET_F("DS"),serverDescription); //sappend('c',SET_F("ST"),syncToggleReceive); - #ifdef WLED_ENABLE_SIMPLE_UI sappend('c',SET_F("SU"),simplifiedUI); - #else - oappend(SET_F("toggle('Simple');")); // hide Simplified UI settings - #endif } if (subPage == SUBPAGE_SYNC) From 029403ea10ae38ca54ca310d04fbbda525a9938e Mon Sep 17 00:00:00 2001 From: Woody Date: Tue, 14 Nov 2023 21:52:17 +0100 Subject: [PATCH 013/126] Only Effect Search should stay on top --- wled00/data/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/wled00/data/index.js b/wled00/data/index.js index 62f7d18d6..10e884ca4 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -3046,11 +3046,13 @@ function simplifyUI() { // Chage height of palette list gId("pallist").style.height = "300px"; gId("pallist").style.overflow = "scroll"; - // fix shadow + // Fix shadow gId("pallist").style.margin = "0px -16px"; gId("pallist").style.padding = "0px 16px"; - // set correct position of selected and sticky palette + // Set correct position of selected and sticky palette gId("pallist").classList.add("simplified"); + // We only want Effect Search to stay on top + gId("palw").firstElementChild.classList.remove("staytop"); // Hide filter options gId("filters").style.display = "none"; From 0a97717b35fe278d994e13be06e9f9ba300d0dc4 Mon Sep 17 00:00:00 2001 From: Woody Date: Thu, 16 Nov 2023 14:43:50 +0100 Subject: [PATCH 014/126] Add simplified segments --- wled00/data/index.css | 2 +- wled00/data/index.js | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/wled00/data/index.css b/wled00/data/index.css index c9bf8b665..ab446a21d 100644 --- a/wled00/data/index.css +++ b/wled00/data/index.css @@ -1421,7 +1421,7 @@ TD .checkmark, TD .radiomark { .expanded { display: inline-block !important; } -.hide, .expanded .segin.hide, .expanded .presin.hide, .expanded .sbs.hide, .expanded .frz, .expanded .g-icon { +.hide, .expanded .segin.hide, .expanded .presin.hide, .expanded .sbs.hide, .expanded .frz, .expanded .g-icon, .nosimple { display: none !important; } diff --git a/wled00/data/index.js b/wled00/data/index.js index 10e884ca4..57359637d 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -770,23 +770,23 @@ function populateSegments(s) ``+ ``+ ``; - cn += `
`+ - `